还是先贴下结果图,
最后收敛的pr都接近0.9。
一、环境搭建
可以先参考博主的另一篇文章pytorch相关安装。
1.1、源码下载
安装完成后在pycharm中配置好新建的虚拟环境,通过pycharm编辑器打开YOLO工程(在YOLO源码官网下载即可)。
用pycharm打开YOLO项目后,编辑器一般会自动读取YOLO中requirments.txt,提示是否需要安装其中的组件,可以不急,等虚拟环境配置好了,再安装。
虚拟环境非必需项,只是方便管理。
1.2、切换虚拟环境
- step1: 点击pycharm左上角【File】→【Settings】:
- step2: 选择step1中的项目→【Python Interpreter】→右上角的设置图标【add】
- step3: 【Virtualenv Envirionment】→【Existing environment】→【…】下拉选取创建好的虚拟环境中的python.exe即可完成虚拟环境配置。
注意:创建的虚拟环境目录一般为D:\Anaconda\envs
也就是安装的anaconda/envs目录下,博主为jpytorch。
- step4: 打开pycharm终端,如果终端有显示虚拟环境则表示切换成功。
如果没有显示,终端输入命令:
conda activate jpytorch
若显示为【PS】如下(博主环境已经成功切换,没有实例图了,所以找了个网图代替供大家参考)而非虚拟环境,下一步再见:
- step5: 【File】→【Setting】→【Tools】→【Terminal】→【Shell path:】如下选择后下拉按钮选择博主图里的选项
C:\Windows\system32\cmd.exe
。
- step6: 上述操作完成后重启编辑器。
成功切换。
1.3、安装组件
执行pycharm自动安装YOLO中的requirments.txt,时间可能会久一点。
可能会若存在部分组件自动无法安装的情况,
博主这里列一下部分解决办法。
上图中格式为组件名称+版本要求
- 方法1:pip安装
在执行这个方法之前最好是先更新一下:pip install --upgrade
终端输入:pip install XXX
xxx表示组件名称:比如上图中的第一个,输入
pip install tensorboard
便会自动安装t组件tensorboard的最新版本,都满足图中要求的版本。
-方法2:源码安装
输入组件名找到组件的源码.whl文件,选择匹配版本进行安装。例如博主的opencv-python>=4.1.2
,当时通过方法1也无法安装。
OpenCV下载地址,选择
上图中是博主选择的【版本4.5.5】+【Python3.8】+【win64】。
下载后打开电脑cmd终端,依然使用conda activate jpytorch
先切换到YOLO的虚拟环境,
终端进入到openCV的下载目录通过pip安装:
pip install XXX.whl
这里直接在文件目录中通过【control+c】复制.whl的文件名和后缀粘贴在终端后【Enter】。
博主这里以安装的pycuda为例,因为OpenCV当时忘记截图了,pycuda也是.whl文件安装,除了文件名不一样外其余都一模一样。
至此环境配置部署结束。
二、数据集
数据集是博主整理好的YOLO格式的数据集,一共有7959张图片,可根据需要按比例重新划分数据集。
博主是按照721比例划分的数据集给YOLOv5训练。
数据集部分截图:
三、训练
这是博主第一次在win下训练,也是踩了些雷,因为部分参数还是区别于Ubuntu的。
数据集放置目录:
博主是直接在编辑器终端运行的,输入命令(容可能出错):
python train.py --data data/maskYOLO.yaml --cfg yolov5s.yaml --weights '' --batch-size 40
这里博主没有给weights的地址,Ubuntu里边会自行去YOLO官网下载初始权重文件,但win出错了(可能解压过程中的错误吧)。
那就直接在官网下载yolov5s.pt,放置在如下目录(可自定义):
重新输入命令:
>python train.py --weights yolopt/yolov5s.pt --data data/maskYOLO.yaml --cfg yolov5s.yaml --batch-size 40
有的这一步就是直接开始训练了。
但也可能会报错,因为网络结构的些许不一样导致的错误:
解决办法:修改【utils】中的【loss.py】。
step1:
将图中红色部分代码改为绿色框框中的代码:anchors, shape = self.anchors[i], p[i].shape
step2:
不知道代码位置的可以直接根据图中左侧代码行数去匹配位置。
修改好后再重新运行上述代码:
开始训练。。。
四、检测
首先拷贝训练好的best.pt的相对路径:
终端运行:
python detect.py --weights runs/train/exp10/weights/best.pt
这是博主在网上随意查找的网图哈。
- 可能BUG1
RuntimeError: The size of tensor a (80) must match the size of tensor b (84) at non-singleton dimension 3
这是因为博主最开始在给权重文件的时候给错权重文件了,将权重文件改为训练好的权重文件就好啦。
这个问题比较常见,如果不是终端命令行运行指定了权重文件路径的话,则需要在源码detect.py
中修改下图路径为权重路径。
- 可能BUG2:
AttributeError: 'Upsample' object has no attribute 'recompute_scale_factor'
定位到图中红色框框的py文件位置,同样是将红色框框的的代码改为绿色框框代码即可,实质就是将原return()中的第二行代码删掉,当然一起的,
也应一块删除。
return F.interpolate(input, self.size, self.scale_factor, self.mode, self.align_corners)
这是因为YOLO版的问题导致的,这里博主没有深究。
完结撒花,,,
五、写在最末
- 对于刚接触这个的小白同学,如果有什么环境配置部署等问题也可以私信博主;
- 如果不想自己运行,想要已经跑好的数据集或者权重文件直接提供给YOLO的同学,私信博主(非无偿);
- 想要coco格式或者voc格式口罩数据集的也可以私信博主(非无偿)。