YOLO V3训练自己的数据集 keras踩坑实现
首先本文使用keras CUDA9.0 tensorflow1.9或者1.10、1.12都可以
一定要找对应的版本 CUDA 和cudnn还有tensorflow版本包括对应的numpy版本都要一一对应,错了一个后面会出现很多bug!!!!
还有一定要用python 3.6!!! python 3.5 3.6 3.7以及2代版本的python全都不兼容 ,会出现巨多的warning!!!!
对了 我的显卡是1060的阉割版5GB显存
一些非常有帮助的博客
这是帮你读懂yolo v3里面自带的cfg文件设置参数的博客 ****链接: link.
这是yolo v3系列之网络结构解读 ****链接: link.
这是损失函数计算解析 ****链接: link.
这是具体创建环境的实施步骤 ****链接: link.
这是大神的keras版本的yolo v3 的github,膜拜一下 ****链接: link.
我来列举一下我遇到的真实bug
(1)
首先cfg里面的subsivisions参数一定不能设置的太大,我设置的是16,我这个显卡最好不超过32,batch我是设置为4-8,如果太大会爆内存 。
就是Run out of memory的错误,一定要及时调,否则训练到后半夜可能训练到一半就停了
VOC2007数据集样例图片:
具体的用labelimg标定就不说了
可以直接在控制台
// An highlighted block
pip install labelimg
#然后再直接用
labelimg
一定要记得保存为.xml文件 而且标注完,用Notepad打开检查一下最好,四个坐标是否有 ,不要为空坐标,而且标注对象 “dog”之类的一定要确定存在且正确。
数据集弄好之后一定要先用文件夹里的 kmeans聚类帮自己找到合适的先验框(也就是聚类中心)的坐标,用自己的聚类中心坐标,这样训练才能提高准确率哟。
log文件里面的events.out.tfevents.可以帮助你查看训练过程中的损失函数。
// An highlighted block
tensorboard --logdir==#'你自己的logs的path'#
(2)
记得不要用tensorflow 1.14或者2.0的,我就出现了bug 虽然不怎么影响 但是出来的http:local6006那些地址要自己敲之类的。
直接pip安装或者更新的话就会直接安装最新的tensorflow 越新bug越多,因为yolo v3都是17 18年的产物了。
官方keras版本的yolov3 有个bug,别跟github写的一样,什么python yolo.py 运行去检测图片,根本检测不了
按我这样来
// An highlighted block
python yolo_video.py --image
(3)
还有个bug,一定要注意,txt文件里面一定要生成有坐标,如果你生成不了坐标,那一定是你标注的名称和你在train里的类型名称不符,比如大小写 labelimg标注写 “Dog” 结果代码改成了“dog” 这样程序生成的txt文件会显示没有这个物体的,所以不会胜出坐标,,,切记。
txt最后的0是我的第0个类
数据集一定要打乱,像我0001 、0002 、0003太整齐了 你可以把图片打散,也不用按顺序来,
你用7821.jpg 和 ABCD.jpg都没有任何影响。
(4)
但是千万不要有中文!!!
XML文件、txt文件里面一定不要有中文,有中文就会出现 gbk 的编译错误,程序没办法解析中文的,包括你的文件路径,全都不要中文。
yolo v3是现在我碰到的最简单的复现过程之一了 ,一定要耐心哟。。
有什么问题也可以甩过来哟。