利用YOLOv3代码训练自己的训练集(一)

结果

先来看看结果是什么样的:
利用YOLOv3代码训练自己的训练集(一)_第1张图片

一.准备操作

1.下载labelimg

这个是用于标注图像的,使用python写的,咱们直接把他download下来,附上链接:
labelimg下载地址
注意:这个地方labelimg路径不能有中文,否则会导致报错或者无法运行

2.下载代码

yolo代码

3.下载数据集

因为是自己的数据集,所以需要大家自己下载,我是在kaggle上找了一些猫狗图,然后在百度上下载了部分猫狗图,总共训练集不到300张,这里最好路径也不要有中文,否则程序也会报错。

二.数据集标注

打开labelimg
利用YOLOv3代码训练自己的训练集(一)_第2张图片
锁定文件夹,并对图像进行标注,输入dog
利用YOLOv3代码训练自己的训练集(一)_第3张图片
这个时候我们发现在图像的文件夹内多了一个xml文件:
利用YOLOv3代码训练自己的训练集(一)_第4张图片
打开后发现是这样的,其中记录了锚点的坐标,对象:dog,路径,以及原图像的大小:width,height,depth等各个信息。
利用YOLOv3代码训练自己的训练集(一)_第5张图片
注意:图像不能有中文路径,否则程序中会报错!!如果还是不会用labelimg们可以百度下别人的论坛,这个还是很简单的。

三.训练yolov3模型

1.准备工作

打开下载的yolo代码,打开voc2007文件夹,把刚才的狗图片和标注好的xml文件分别放到JPEGImages和 Annotations文件夹下,如下图所示:

xml文件:
利用YOLOv3代码训练自己的训练集(一)_第6张图片
狗照片文件:
利用YOLOv3代码训练自己的训练集(一)_第7张图片

2.确定训练集

运行VOC2007下面的test.py文件,结束后发现VOC2007/ImageSets/Main下生产如下几个txt文档,就是对图片路径按照比例分成训练,验证,测试集,实际上程序中没有用到测试集。
利用YOLOv3代码训练自己的训练集(一)_第8张图片
利用YOLOv3代码训练自己的训练集(一)_第9张图片

3.运行voc_annotation.py

对tiny-yolo v3下的voc_annotation.py进行简单修改,路径 model_data下的voc_classes.txt也要修改,并运行。
因为只有一类dog,所以都修改为dog
利用YOLOv3代码训练自己的训练集(一)_第10张图片
利用YOLOv3代码训练自己的训练集(一)_第11张图片
运行结束后会生成几个txt文档,比如:2007_train.txt,这时候我们将前面的2007_删掉,得到这三个txt文件
利用YOLOv3代码训练自己的训练集(一)_第12张图片

打开train文件,我们可以发现训练集的路径,以及锚点坐标,最后的0应该是类别。
利用YOLOv3代码训练自己的训练集(一)_第13张图片

4.训练模型

打开tiny_train.py文件,开始运行,我把epoch改为了500,(5000太多了,电脑顶不住。。。)
训练过程如下所示:
利用YOLOv3代码训练自己的训练集(一)_第14张图片
最终该模型的loss为2.7左右,时间花费2小时,大家可以修改一些参数,如batch,epoch等,一般loss要为零点几。

5.测试图形

将待测试的图像放在VOC2007文件下的Images文件中。测试结果会在VOC2007下的SegmentationClass文件中。
测试图:
利用YOLOv3代码训练自己的训练集(一)_第15张图片
程序运行结果:
利用YOLOv3代码训练自己的训练集(一)_第16张图片
结果图:利用YOLOv3代码训练自己的训练集(一)_第17张图片
其实大家发现效果并不好,里面很多都没检测出来,主要还是因为loss太高了,训练次数和样本都不够。
利用YOLOv3代码训练自己的训练集(一)_第18张图片
利用YOLOv3代码训练自己的训练集(一)_第19张图片
置信度不高,这张还是错的利用YOLOv3代码训练自己的训练集(一)_第20张图片

你可能感兴趣的:(人工智能)