目录

谷歌colab训练自己的数据集YOLOv3

谷歌colab训练自己的数据集YOLOv3

自己电脑的GPU不支持cuda,所以尝试使用谷歌的Colabortory,免费提供GPU,最长运行时间12小时,因此一般需要挂载到谷歌云盘上,储存文件。

数据集

目标检测的数据集需要自己手动标注目标物体位置并对应生成xml文件表示目标框的位置,本文简单介绍windows系统下标注工具LabelImg的使用。
LabelImg下载链接:LabeIImg
下载好labelImg-master.zip后解压得到如下图所示。
https://img-blog.csdnimg.cn/20201204100704464.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODIyMjY3,size_16,color_FFFFFF,t_70
shift+右击空白处打开powershell窗口
输入两个命令Pyrcc5 -o resources.py resources.qrc
python labelImg.py
可能会出现no module named libs.resources这样的错误,将resources.py拷贝到同级的libs目录下就可以解决了。再输入第二条命令就可以运行成功了。具体使用可以参考这篇windows下使用labelImg标注图像
https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODIyMjY3,size_16,color_FFFFFF,t_70-20220209092759614.png
本次采用的数据集是红细胞的检测,已经标注好的数据链接:已标注好的细胞数据连接,Annotations文件是已经标注好目标框的xml文件,JPEGImages是jpg图片文件。
https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/20201204102014473-20220209092759652.png

colab使用

首先需要创建一个谷歌云盘账号,右键空白处->更多->Google Colabortory,相应目录下会生成一个.ipynb文件,下次使用可直接右键此文件以Google Colabortory方式打开。如果没有Googel Colabortory选项,点击关联更多应用添加。
https://img-blog.csdnimg.cn/20201204102937867.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODIyMjY3,size_16,color_FFFFFF,t_70
首先训练自己的数据集需要挂载谷歌云盘,方便文件的传输。点击链接进去,复制代码到下面框中即可。
https://img-blog.csdnimg.cn/20201204103818506.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODIyMjY3,size_16,color_FFFFFF,t_70
挂载成功如下图
https://img-blog.csdnimg.cn/20201204105333580.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODIyMjY3,size_16,color_FFFFFF,t_70#pic_center
下面介绍一些简单的文件操作:
https://img-blog.csdnimg.cn/20201204111724596.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODIyMjY3,size_16,color_FFFFFF,t_70
设置GPU模式

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODIyMjY3,size_16,color_FFFFFF,t_70-20220209092800174.png
https://img-blog.csdnimg.cn/20201204112327990.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODIyMjY3,size_16,color_FFFFFF,t_70

安装Pytorch

colab自带的是tensorflow,因此需要自己从官网复制代码下载pytoch,如下图
https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/20201206102313829.png

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODIyMjY3,size_16,color_FFFFFF,t_70-20220209092800482.png
https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODIyMjY3,size_16,color_FFFFFF,t_70-20220209092800833.png

配置文件

首先clone项目构建Darknet,输入以下命令
https://img-blog.csdnimg.cn/20201204112530556.png

https://img-blog.csdnimg.cn/20201204112615867.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODIyMjY3,size_16,color_FFFFFF,t_70
构建好后,右侧文件如下图:
https://img-blog.csdnimg.cn/20201204112806197.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODIyMjY3,size_16,color_FFFFFF,t_70

上传并构建数据集

将刚才下载好的数据集上传到/darknet/data/目录下,在谷歌云盘中相应目录下空白处右击上传即可,修改数据集名字为yolov3。

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODIyMjY3,size_16,color_FFFFFF,t_70-20220209092801202.png点进Yolov3,创建imagesets空文件夹,imagesets存放图片路径。(忽略labels文件夹)
https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODIyMjY3,size_16,color_FFFFFF,t_70-20220209092801425.png
imagesets路径编写https://img-blog.csdnimg.cn/2020120411410474.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODIyMjY3,size_16,color_FFFFFF,t_70生成的txt文件内容如下,每张图片的完整路径。

https://img-blog.csdnimg.cn/20201204152522635.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODIyMjY3,size_16,color_FFFFFF,t_70
分割数据集为训练集和测试集,分割后图片的名字存在imagesets下

https://img-blog.csdnimg.cn/20201204152904282.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODIyMjY3,size_16,color_FFFFFF,t_70
imagesets下的文件

https://img-blog.csdnimg.cn/20201204153249438.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODIyMjY3,size_16,color_FFFFFF,t_70
https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODIyMjY3,size_16,color_FFFFFF,t_70-20220209092802104.png
从xml文件中提取目标框坐标,并存入JPEGImages图片文件夹里,并在yolov3文件夹里生成train.txt和test.txt,与上面生成的不一样,这里是图片的完整路径

https://img-blog.csdnimg.cn/20201204153511690.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODIyMjY3,size_16,color_FFFFFF,t_70
https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODIyMjY3,size_16,color_FFFFFF,t_70-20220209092802335.png
https://img-blog.csdnimg.cn/20201204155338773.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODIyMjY3,size_16,color_FFFFFF,t_70
生成的labels文件内容如下:

https://img-blog.csdnimg.cn/20201204155650101.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODIyMjY3,size_16,color_FFFFFF,t_70

配置文件

在/darknet/data/目录下创建rbc.data和rbc.names文件,如下:
https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODIyMjY3,size_16,color_FFFFFF,t_70-20220209092802838.png
https://img-blog.csdnimg.cn/2020120416014336.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODIyMjY3,size_16,color_FFFFFF,t_70
网络结构配置,将/darknet/cfg/目录下的yolov3.cf文件基础上改,可以将yolov3.cf文件复制重命名为yolov3_custom.cfg再存到cfg目录下。修改地方如下,如何修改可参考Yolov3 win10+vs17 运行及训练自己的数据集
https://img-blog.csdnimg.cn/20201204160743189.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODIyMjY3,size_16,color_FFFFFF,t_70

https://img-blog.csdnimg.cn/20201204160827519.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODIyMjY3,size_16,color_FFFFFF,t_70

开始训练

下载预训练权重
https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODIyMjY3,size_16,color_FFFFFF,t_70-20220209092803194.png
训练,第一行是防止Permission denied错误。这里注意前面构建数据的文件一定要放对路径,不然会报奇奇怪怪的错。训练产生的权重文件自动保存在/darknet/backup中
https://img-blog.csdnimg.cn/20201204161405306.png
如中间因不明原因停止可以查看backup目录下最后一次权重是多少(比如yolov3_custom_700.weights),然后运行如下代码就可以了。
https://img-blog.csdnimg.cn/20201204162854302.png

用训练出来的权重测试

修改yolov3_custom.cfg为测试模式
https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODIyMjY3,size_16,color_FFFFFF,t_70-20220209092803671.png
随便找一张细胞图片放入/darknet/data文件下(BloodImages_00001.jpg),然后输入下列代码。
https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/20201209153828245.png
得到下列结果,可以看到预测到几个目标:
https://img-blog.csdnimg.cn/20201209153938392.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODIyMjY3,size_16,color_FFFFFF,t_70

显示图片

https://img-blog.csdnimg.cn/20201209154331118.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODIyMjY3,size_16,color_FFFFFF,t_70
显示预测结果
https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/20201209154407851.png
https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxODIyMjY3,size_16,color_FFFFFF,t_70-20220209092804216.png