【YOLO】训练voc数据集没有框??解决方法

2022/11/1 2:24:51

本文主要是介绍【YOLO】训练voc数据集没有框??解决方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

不知道大家有没有遇到和我一样的问题,最终解决了。最初训练的时候大概阈值设到0.008才会有框框出来,跟自带的权重相比相差好多啊,默认阈值应该等于0.25才对啊!真的是被困扰了很久,还跑去修改了yolo.c文件(其实一点关系也没有),最后发现过于相信依赖官网给出的步骤,没有仔细看一下文件,导致了这个错误,问题很白痴,源于cfg文件。

1下载 voc数据集##

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

出现的结果与官网相同。

2修改文件

./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文件,有些模型需要修改有些不需要。

3 Pre-train

curl -O https://pjreddie.com/media/files/darknet19_448.conv.23

也可以自己生成,这里不提。

4 训练

这里注意一下,如果你想保存输出的结果,在后面加句 | tee yolo-voc.txt

./darknet detector train cfg/voc.data cfg/yolo-voc.cfg darknet19_448.conv.23 | tee yolo-voc.txt

5 结果

./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最终训练出的结果。

car: 52% bicycle: 32%

下面是yolo-voc.2.0.cfg

car: 84% dog: 88% bicycle: 58%

可以明显看出来,tiny-yolo-voc这个模型不太好啊,最后看一下路试图片对比。

tiny-yolo-voc

car: 29% car: 24% car: 53%

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..net/ycheng_sjtu/article/details/49804041 http://blog..net/zhuiqiuk/article/details/70167963



这篇关于【YOLO】训练voc数据集没有框??解决方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程