源码下载:https://github.com/Lu-tju/YOLOv3_pytorch,这是我的毕设,任务是识别turtlebot,本文简便起见,以红细胞数据集为例。
参考:
Pytorch实现YOLOv3训练自己的数据集
Pytorch实现yolov3的原始地址(ultralytics版)
环境:
win10+python3.6
PyTorch 1.1.0
opencv
tqdm
matplotlib
源码中有requirements.txt,安装直接:
pip3 install -U -r requirements.txt
这里我用的ultralytics的旧版,这个版本不需要 pycocotools,我的win10下运行pip install pycocotools报错:
Microsoft Visual C++ 14.0 is required.
安装还挺麻烦的,就用了这个版本
制作数据集
使用精灵标注助手,傻瓜安装,感觉比labelImge好用。
标注过程简单,不再赘述。
注意,数据存放目录不能有中文!!!不然python中导入时会报错:'gbk' codec can't decode byte 0xa2 in position 47...
导出时,选择VOC格式即可,这里以红细胞数据集为例,导出后大概如下:
...
<size>
<width>640</width>
<height>480</height>
<depth>3</depth>
</size>
<segmented>0</segmented>
<object>
<name>RBC</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>334</xmin>
<ymin>254</ymin>
<xmax>472</xmax>
<ymax>380</ymax>
</bndbox>
</object>
</annotation>
为了方便,我们直接下载标记好的数据集:红细胞检测数据集
数据准备
1、 从数据集下载下来Annotations(标注)、JPEGImages(图片)两个文件夹,将他们复制到YOLOV3工程目录下的data文件夹下,然后将JPEGImages文件夹复制一下,并重命名为images,最后在data下新建两个空文件夹,分别命名为ImageSets和labels,如下:
2、运行makeTxt.py,在ImagesSets下生成如下四个文件,存储图片的名称
3、运行voc_label.py后,在labels下生成各个图片的标签,例如:
0 0.415625 0.8572916666666667 0.15625 0.21875
0 0.19843750000000002 0.7885416666666667 0.15625 0.21875
每行代表一个目标,各元素分别是:种类+4个坐标
同时在data下生成train.txt,test.txt,val.txt,存储图片的具体目录+名称。
4、
在data文件下新建rbc.names,存放种类的列表(此处只有1类RBC),内容如下:
RBC
在data文件下新建rbc.data,存放一些配置信息,内容如下:
classes=1
train=data/train.txt
valid=data/test.txt
names=data/rbc.names
backup=backup/
eval=coco
修改cfg文件
迁移学习,修改cfg文件中网络的结构,主要是yolo层前一层的Conv层的卷积核个数。
需要将filters=255改为filters=18,即: anchor个数3x(种类数+bbox4个坐标+bbox信度)。注意三个尺度都要改!
将yolo层的class=80改为class=1,即类数。
预训练模型
下载官网已经训练好的网络参数yolov3-tiny.weights,放到weights目录下,然后对yolov3-tiny.weights进行改造,冻结前面的层,只训练yolo最后分类几层。下载官网的代码,运行一下脚本得到yolov3-tiny.conv.15:
./darknet partial cfg/yolov3-tiny.cfg yolov3-tiny.weights yolov3-tiny.conv.15 15
(上面并没看懂,雾)我直接下载的yolov3-tiny.conv.15:
链接:https://pan.baidu.com/s/1o6g3jendNfCuoRqdRQ-eUg
提取码:5ufi
训练
修改train.py中main函数的parser参数,主要是yolo.cfg文件位置,rbc.data文件位置,还有epochs、batch size等超参数,直接运行就好了。
测试test.py,测试图片位置默认在data\samples,输出在outputs文件夹