不知道大家有没有遇到和我一样的问题,最终解决了。最初训练的时候大概阈值设到0.008才会有框框出来,跟自带的权重相比相差好多啊,默认阈值应该等于0.25才对啊!真的是被困扰了很久,还跑去修改了yolo.c文件(其实一点关系也没有),最后发现过于相信依赖官网给出的步骤,没有仔细看一下文件,导致了这个错误,问题很白痴,源于cfg文件。
curl -O https://pjreddie.com/media/files/VOCtrainval_11-May-2012.tar
curl -O https://pjreddie.com/media/files/VOCtrainval_06-Nov-2007.tar
curl -O https://pjreddie.com/media/files/VOCtest_06-Nov-2007.tar
tar xf VOCtrainval_11-May-2012.tar
tar xf VOCtrainval_06-Nov-2007.tar
tar xf VOCtest_06-Nov-2007.tar
这里我新建了文件夹pjreddie。在该文件夹下运行,出现了VOCdevkit文件夹。
curl -O https://pjreddie.com/media/files/voc_label.py
python voc_label.py
依然在该文件夹下运行,稍微等一下就好了。
ls
出现的结果与官网相同。
./cfg/voc.data 和./cfg/yolo-voc.cfg
这里十分需要注意的一点!!有许多模型可以选择。
最初选择的是yolo-voc.cfg,官网没有提到要对它进行修改,但是往下翻训练coco数据集时提到了一下。
所以,我们现在是训练,当然要引掉测试了,batch和subdivisions测试时等于1,放在训练里肯定是不行的,难以收敛。这里简单说一下。
每batch个样本更新一次参数,如果内存不够大,将batch分割为subdivisions个子batch,每个子batch的大小为batch/subdivisions,在darknet代码中,会将batch/subdivisions命名为batch。
在合理范围内,增大 Batch_Size 有何好处?
内存利用率提高了,大矩阵乘法的并行化效率提高。
跑完一次 epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。
在一定范围内,一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小。
盲目增大 Batch_Size 有何坏处?
内存利用率提高了,但是内存容量可能撑不住了。
跑完一次 epoch(全数据集)所需的迭代次数减少,要想达到相同的精度,其所花费的时间大大增加了,从而对参数的修正也就显得更加缓慢。
Batch_Size 增大到一定程度,其确定的下降方向已经基本不再变化。
这里用的依然是它设定的值。
之前没有对这个文件进行修改,真的是走了好多弯路,希望大家仔细看看cfg文件,有些模型需要修改有些不需要。
curl -O https://pjreddie.com/media/files/darknet19_448.conv.23
也可以自己生成,这里不提。
这里注意一下,如果你想保存输出的结果,在后面加句 | tee yolo-voc.txt
./darknet detector train cfg/voc.data cfg/yolo-voc.cfg darknet19_448.conv.23 | tee yolo-voc.txt
./darknet detector test cfg/voc.data cfg/yolo-voc.2.0.cfg yolo-voc_final.weights data/dog.jpg -thresh 0.25
默认值是0.25,不想写阈值也可以哈
有个问题,使用yolo-voc.cfg模型时,一直报错cuda error : out of memory,用yolo-voc.2.0.cfg和tiny-yolo-voc.cfg没有报错,可能跟模型参数设置有关,电脑配置跟不上,继续跟进。先看一下tiny-yolo-voc.cfg最终训练出的结果。
下面是yolo-voc.2.0.cfg
car: 84%
dog: 88%
bicycle: 58%
可以明显看出来,tiny-yolo-voc这个模型不太好啊,最后看一下路试图片对比。
tiny-yolo-voc
yolo-voc.2.0
car: 59%
car: 45%
car: 40%
car: 60%
car: 76%
car: 46%
car: 76%
阈值改小了一点
car: 59%
car: 18%
car: 45%
car: 40%
car: 16%
car: 60%
person: 16%
car: 76%
car: 46%
car: 18%
car: 76%
对于太远的人yolo还是有些力不从心的。
下面是我最初用yolo-voc.cfg ,batch=1的结果哈哈哈,阈值0.015。
car: 4%
car: 2%
car: 2%
car: 2%
chair: 2%
惨痛的教训,训练一次时间挺长的,为了不浪费时间,一定要搞懂每一步到底在干什么,弄清楚参数设置。希望大家能从我这吸取经验吧。笔芯~~
参考资料:
https://pjreddie.com/darknet/yolo/
http://blog.csdn.net/ycheng_sjtu/article/details/49804041
http://blog.csdn.net/zhuiqiuk/article/details/70167963