yolo_v3 _tiny训练自己的数据集进行物体检测 (只检测行人)

说明:我的电脑是个16年3500元买的笔记本(勇气可嘉:)

环境:额外的包之类的,我用的anaconda,可以非常容易安装各类包,如果运行显示缺包,那就去environment去安装对应的包。

我的版本:python 3.7.4 - tensorflow 1.13.1 - numpy 1.16.0 - keras 2.2.4

1. 下载Github上面的文件

https://github.com/qqwweee/keras-yolo3

直接下载zip。本文是针对以上文件内容的微小改动来训练自己的数据

 

2. 下载预训练的权值

https://pjreddie.com/media/files/yolov3-tiny.weights

下载完成后放入上面解压文件的目录下 C:\Users\...\Desktop\keras-yolo3-master,下文所述“目录”,皆指向此目录

 

3. 下载数据集文件(自己制作也行,自己制作参考其他博客)

https://pan.baidu.com/s/15ewJZoav2ebmkqBf2bPyeA 提取码:anv2

此处为博主z649431508收集的数据集,放在代码同一目录下解压。

 

4. 修改相关文件配置

修改voc_annotation.py,将class改为:classes = ["person"](我们只识别人所以只保留person)

修改model_data/voc_classes.txt 和 coco_classes.txt,删除多余类,只保留person(这一行)

修改train.py里面,找到anchors_path,改为anchors_path = 'model_data/tiny_yolo_anchors.txt'

修改yolo.py里面,修改使得 "anchors_path": 'model_data/tiny_yolo_anchors.txt'

 

5. 生成.txt文件

运行anaconda prompt(以下“运行”所指,皆为在此黑框框下键入指令)

  • cd 切换目录(我的文件名被我改名了,输入自己的文件名)

yolo_v3 _tiny训练自己的数据集进行物体检测 (只检测行人)

  • 运行voc_annotation.py

yolo_v3 _tiny训练自己的数据集进行物体检测 (只检测行人)

  • 目录下会生成三个名字前缀为2007_的文件,然后删掉它们的前缀 "2007_"

 

 

6.  运行 convert.py 将之前下载的预训练权重(30M文件)转化成keras网络的权重(生成 .h5 文件)

python convert.py -w yolov3-tiny.cfg yolov3-tiny.weights model_data/tiny_yolo_weights.h5

 

6.x 如果不训练,此时可以直接运行验证别人训练好的网络的性能(*)

python yolo_video.py image

test/person.jpg(要在目录下创建test文件夹,里面放上一张图片命名person.jpg)

 

7. 训练网络

python train.py

前50个 epoch 会封印前42层网络,只训练后面两层网络的权值。

后50个 epoch 会解封所有层来训练。

很可能前50给epoch一直val_loss都是 nan ,可以尝试调大epoch和batch。

yolo_v3 _tiny训练自己的数据集进行物体检测 (只检测行人)
我的笔记本终于寿终正寝

 

8. 测试自己得到的权值

在 logs/000/下有你刚刚('~')训练得到的权值文件 trained_weights_stage_1.h5(前50epoch得到)  以及 trained_weights_final.h5(100epoch得到)

修改 yolo.py"model_path": 'logs/000/trained_weights_final.h5'

 

9. 效果

运行 6.x 所述内容

我仅仅试了解封最后两层训练50epoch之后的效果,并不如人家一开始训练的检测好几十个物体的权值文件的效果好,速度也没有明显提升。

 

参考

https://www.jianshu.com/p/d76adef49293

https://blog.csdn.net/lly1122334/article/details/89019891