当前位置:   article > 正文

【目标检测】保姆级别教程从零开始实现基于Yolov8的一次性筷子实时计数,从数据集构建到模型训练与部署,手把手教学_目标检测筷子

目标检测筷子

目录

前言

一,环境配置

一,虚拟环境创建

二,安装资源包

二,数据集的构建

一.自行下载数据集

二,构建自己的数据集

1.数据准备

2.数据标注

3.模型训练

​编辑

三,模型导出与部署

四,报错问题汇总

1.pycharm显示运行内存不足

2.GPU运行内存不足,模型无法训练


前言

        最近事情比较少,无意间刷到群聊里分享的基于百度飞浆平台的一次性筷子检测,感觉很有意思,恰巧自己最近在学习Yolov8,于是看看能不能复现,自己也是新手小白,会说的比较详细,适合小白入手。

        项目运行视频我已上传到我的哔哩哔哩:《基于Yolov8的竹签实时计数》人工智能专业大学做的第一个项目,大佬们多多指教_哔哩哔哩

一,环境配置

对于环境配置,我的是Anaconda虚拟环境,python是3.8(建议大家大于3.7),tensorflow是2.10,GPU版本的,pytorch是1.8.0的,开发平台是pycharm

教程:

配置Anaconda,CUDN,cudnn:Tensorflow-gpu保姆级安装教程(Win11, Anaconda3,Python3.9)_tensorflow-gpu 安装_酷酷的懒虫的博客-CSDN博客

注意:大家主要看里面配置Anaconda,CUDN,cudnn环境的部分就行,如果你的电脑不支持GPU,那么大家就可以配置cup的版本。怎么看支不支持GPU,看看笔记本有没有贴英伟达的标签就行。

配置pytorch:

GPU版本的PyTorch安装与环境配置_pytorch gpu版_「已注销」的博客-CSDN博客

这里一定要配置好,避免后续出现各种环境问题

一,虚拟环境创建

下载好anaconda后,可以专门建一个环境,然后把上述的包配置到虚拟环境中吗,这里有两种方式新建虚拟环境,一是命令行输入,二是图形化界面。

方法一:命令行操作

打开左下角开始键里的Anaconda Powershell Prompt(注意是中间有一个 Powershell,不要误打开第二个,之后对于命令行的操作我们都是在这里进行!!!),打开后默认的是base环境,就是电脑本地环境。

创建Yolov8环境,输入命令:conda create -n yolov8 ,表示创建一个名字为Yolov8的环境,如果想要指定python版本,可以加上如python=3.9,如果默认创建,会在C盘

如果想要改盘,可以参考:w11下载anaconda在d盘,新建的虚拟环境总是在c盘怎么解决

之后输入:conda activate yolov8,如果成功切换就证明创建成功。

方法二:图形化界面操作

还是在刚才的左下角,点击Anaconda Navigator,打开Environments,这里会看到你电脑里所有的虚拟环境以及该环境中安装的包及其版本。

点击creat,创建新环境,在这里你可以对你的环境进行创建,删除,重命名等。如果上面出现yolov8就证明创建成功。

二,安装资源包

yolov8的训练相对于yolov5简单了很多,也比其他框架上手要来得快,因为很多东西都封装好了,直接调用或者命令行运行就行,首先需要先把代码git到本地(后续类似命令行操作都在Anaconda Powershell Prompt里输入,大家也可以在pycharm终端里输入,不过记得切换环境):

注意:如果安装过程比较慢,大家可以在命令行后加入清华源,豆瓣源等,教程:pip下载速度太慢解决方法

git clone https://github.com/ultralytics/ultralytics.git

然后安装ultralytics库,核心代码都封装在这个库里了。

pip install ultralytics

再然后需要安装requirements.txt文件里需要安装的库,这里的文本文件就是运行这个项目需要配置的库的版本要求,根据需求配置环境才可以运行项目。

pip install -r requirements.txt

接下来我们可以把预训练模型下载下来,通俗来讲就是模型训练好的参数保存在里面的一个文件,使用命令行运行检测命令检查环境是否安装成功,将权重下载下来然后新建weights文件夹存放,项目文件默认的是yolov8n模型,其他的在官网里下载:下载预训练模型,不同的模型代表不同的性能和规模,有的精度低但是速度块,有的模型大有的小。下载好后,我们放置到weights文件中,方便取用(这里我只下载了yolov8n.pt模型,建议大家都下载一下)。

配置完成后,我们在终端运行检测命令,测试yolov8是否可以运行,在项目文件的ultralytics/assets文件中有测试的两张图片。

yolo predict model=./weights/yolov8n.pt source=./ultralytics/assets/bus.jpg save

命令详解: 

1.yolo predict:选用yolov8的预测模式

2.model=./weights/yolov8n .pt:这是我们训练好模型的路径,这里我用的相对路径,大家根据自己电脑存放的路径进行修改

3.source=./ultralytics/assets/bus .jpg:这里是我们模型预测的样本来源,yolov8原本在/ultralytics(配置文件夹)下的assets(素材文件夹)下有两站自带的测试图片

4.save:这里我们选择将预测后的图片进行保存,默认的参数是ture,需要注意的是:yolov8运行后的文件默认保存在./runs文件夹下,终端也会输出文件保存位置

 yolov自带的两个测试图片:

项目运行后终端显示,白色加粗的是预测后保存文件的路径 

 

运行后预测图片,显示标注框内是各个类别,以及预测的准确率,其中这些类别都是yolov8自带的coco数据集里已经标注好的类别,如果在这个数据集之外的类别,是识别不出来的,也不会标注。 

至此,如果能够成功输出预测图片,那么就证明你的环境已经配置好了,可以开始我们模型的训练啦!

二,数据集的构建

一.自行下载数据集

        为了方便大家学习和测试,我这里有一份已经搭建好的测试数据集,在我的主页:竹签数据集,已标注(xml格式),内含有210张图片资源-CSDN文库,大家可以自行下载,其中数据集里有两个文件,分别是images和labels。其中,images是210个竹签的图片,是我从其他博主哪里买来的,网上不好找,这里免费分享给大家。

​        

labels是每一个图片的标注文件,是xmls格式。但是yolov只支持txt文件格式,这个后面会讲,大家之前下载的数据集就是txt格式文件,不用再进行转化了。

大家自行下载的数据集后,在yolov项目文件夹下构建一个名为datasets的文件夹,我们用来存放数据集,大家也可以存放到其他地方,但是建议都放到项目文件夹下,避免路径出现问题。

注意:大家下载后,根据下面的教程构建数据集文件夹,一定要看下面的构建数据集文件夹的教程!!!

新建的datasets文件夹下面有四个文件:

  • Annotations xml标注文件
  • images 训练的图片
  • ImageSets 用于存放划分的train.txt、test.txt、val.txt文件(初始为空)
  • labels 用于存放yolo格式的标注txt文件(初始为空)

二,构建自己的数据集

        这里教大家构建自己的数据集,含标注,划分,方便大家自己学会运用到其他项目中去。

1.数据准备

大家可以自己拿手机拍一下数据集,准备大概80-100跟一次性筷子,然后拿手机拍大概200张(数据集越多越好,但是后面文件的标注麻烦),然后上传到电脑,构建一个images的文件夹,放到上面标红说的yolov项目文件夹下的datsets文件夹中,然后统一命名为0-200,注意要从0开始命名,其中我这里图片是jpg格式,有些格式不兼容,建议大家转为jpg或png格式,注意后面命名路路径的问题哦!

2.数据标注

这里大家构建好数据集后,我们需要标注,这里用到了一款名为label的标注工具,在终端就可以下载。

在终端输入命令,注意:这里是英文拼写是img,而不是ing哦!

pip install labelimg

然后我们需要下载一下labelimg所依赖的库,在终端输入:

  1. pip install pyqt=5
  2. pip install pyqt5-tools
  3. pip install lxml

如果你之前的一些库和上面的pyqt=5等库不兼容的话,建议你卸载那些不需要的库,否则会出现库之间版本不兼容的bug。

最后在终端出入命令,就会打开如下界面了,:

labelimg

官方自带的是英文的,如果大家喜欢用中文的可以去搜一下安装中文补丁的教程,这里就不赘述了,下面给大家一张中文操作的图,可以自己对照使用,功能按键就那几个,英文不影响使用的。

进入lableimg界面,先把这些选项勾上,便于进行标记,注意:标记模式改为yolo

之后,点击open dir,打开我们数据集datasets里面images文件夹,选择之后会弹窗让你选择labels所在的文件夹。如果没有弹窗,点change save dir进行修改,选择lables文件夹,存放标签。

然后软件右上角我们打开这个选项,输入标签名称:zhuqian,当我们标记图片后,就会自动帮我们归类到zhuqian类了,这里默认只有一类,如果有多类,可以选择difficult。

现在我们就可以开始进行标记了,常用的快捷键,用主要wad三个键:

  1. Ctrl + u Load all of the images from a directory
  2. Ctrl + r Change the default annotation target dir
  3. Ctrl + s Save
  4. Ctrl + d Copy the current label and rect box
  5. Ctrl + Shift + d Delete the current image
  6. Space Flag the current image as verified
  7. w Create a rect box
  8. d Next image
  9. a Previous image
  10. del Delete the selected rect box
  11. Ctrl++ Zoom in
  12. Ctrl-- Zoom out
  13. ↑→↓← | Keyboard arrows to move selected rect box

点击左边工具栏里的Creat Rectbox,通过鼠标拖拽框选即可标注,没标注一个,右面就会出现一个标注信息:

 所有都标注好后,我们打开lables文件夹,就会有许多标签的txt文件。大家注意:yolov模型标签文件的格式是txt格式,里面存放的是标注框的坐标信息,如图,第一列是类别,我这里只有一类,所以只有0,每一行代表一个标注框,后面的四列是标框四个角的位置信息。

之后在yolov的项目文件夹下创建一个main.py的文件,方便我们运行python代码

接下来运行如下文件,路径或者类别等参数根据自己的需要修改,运行该文件有两个作用:

  1. 划分train、test、val数据集
  2. 将voc格式标注转换为yolo格式标注
  1. import os
  2. import random
  3. import xml.etree.ElementTree as ET
  4. from os import getcwd
  5. sets = ['train', 'test', 'val'] # 划分的train、test、val txt文件名字
  6. classes = ['lables'] # 数据集类别,这里一定要改,填写xml文件里的类别名字
  7. data_root = r"E:\yolov8\datasets" # 数据集绝对路径
  8. trainval_percent = 0.1 # 测试集验证集比例
  9. train_percent = 0.9 # 训练集比例
  10. xmlfilepath = '{}/Annotations'.format(data_root)
  11. txtsavepath = '{}/images'.format(data_root)
  12. total_xml = os.listdir(xmlfilepath)
  13. num = len(total_xml)
  14. list = range(num)
  15. tv = int(num * trainval_percent)
  16. tr = int(tv * train_percent)
  17. trainval = random.sample(list, tv)
  18. train = random.sample(trainval, tr)
  19. ftest = open('{}/ImageSets/test.txt'.format(data_root), 'w')
  20. ftrain = open('{}/ImageSets/train.txt'.format(data_root), 'w')
  21. fval = open('{}/ImageSets/val.txt'.format(data_root), 'w')
  22. for i in list:
  23. name = total_xml[i][:-4] + '\n'
  24. if i in trainval:
  25. if i in train:
  26. ftest.write(name)
  27. else:
  28. fval.write(name)
  29. else:
  30. ftrain.write(name)
  31. ftrain.close()
  32. fval.close()
  33. ftest.close()
  34. # -------------------------------- voc 转yolo代码
  35. def convert(size, box):
  36. dw = 1. / size[0]
  37. dh = 1. / size[1]
  38. x = (box[0] + box[1]) / 2.0
  39. y = (box[2] + box[3]) / 2.0
  40. w = box[1] - box[0]
  41. h = box[3] - box[2]
  42. x = x * dw
  43. w = w * dw
  44. y = y * dh
  45. h = h * dh
  46. return (x, y, w, h)
  47. def convert_annotation(image_id):
  48. in_file = open('{}/Annotations/{}.xml'.format(data_root, image_id), encoding='UTF-8')
  49. # print(in_file)
  50. out_file = open('{}/labels/{}.txt'.format(data_root, image_id), 'w')
  51. tree = ET.parse(in_file)
  52. root = tree.getroot()
  53. size = root.find('size')
  54. w = int(size.find('width').text)
  55. h = int(size.find('height').text)
  56. for obj in root.iter('object'):
  57. difficult = obj.find('difficult').text
  58. cls = obj.find('name').text
  59. if cls not in classes or int(difficult) == 1:
  60. continue
  61. cls_id = classes.index(cls)
  62. xmlbox = obj.find('bndbox')
  63. b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text),
  64. float(xmlbox.find('ymax').text))
  65. bb = convert((w, h), b)
  66. out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')
  67. wd = getcwd()
  68. print(wd)
  69. for image_set in sets:
  70. if not os.path.exists('{}/labels/'.format(data_root)):
  71. os.makedirs('{}/labels/'.format(data_root))
  72. image_ids = open('{}/ImageSets/{}.txt'.format(data_root, image_set)).read().strip().split()
  73. list_file = open('{}/{}.txt'.format(data_root, image_set), 'w')
  74. for image_id in image_ids:
  75. # print(image_id)
  76. list_file.write('{}/images/{}.jpg\n'.format(data_root, image_id))
  77. try:
  78. convert_annotation(image_id)
  79. except:
  80. print(image_id)
  81. list_file.close()

注意:如果上面下载的数据集的lables文件夹内是txt文件格式,需要把上面voc转yolov的代码注释掉,否则会报错。

最后得到如下文件,labels和ImageSets都不再为空:

3.模型训练

v8的训练很简单,配置也超级简单,首先第一步在ultralytics/datasets中创建我们数据集的配置文件,这里我创建了一下chopsticks.yaml,内容如下,其实和之前的v5配置文件一样,该文件中修改自己的路径和类别即可:

  1. # YOLOv5
    声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/162264
    推荐阅读
    相关标签