用yolov3 VOC训练自己的数据时出现的问题及解决方法
程序员文章站
2024-03-17 09:14:10
...
1.问题:各种out of memory
可能的原因:电脑显存不够,batch比较大,或者开了random = 1的时候带不动.
解决方法:darknet/cfg/yolov3-voc.cfg 文件最后面random = 0;,如果还不行就减小batch,以及减小batch/subdivisions。
2.问题:训练过程中出现大量的nan -nan,loss,avg啥啥都是nan
可能的原因:(1)batch比较小,可以改为64,或者128,都是正常的;
(2)scales 设置的不对,导致步长变大,结果就不收敛了;
(3)看到网上有说是因为官方的预训练权重可能与你的相差比较大,可以自己从头训练,但我觉得先试试其他方法再问最后自己训练吧。
解决方法:我是因为看了知网-水果识别的例子,用了他的steps和scales,所以训练到1000次的时候rate猛增10倍,然后就振荡发散了,所以后来修改好了再在第900的基础上继续训练就没问题了。
[net]
# Testing
# batch=1
# subdivisions=1
# Training # 训练的时候把Testing的参数注释掉,把Training的参数取消注释
batch=64
subdivisions=16
width=416
height=416
channels=3
momentum=0.9
decay=0.0005
angle=0
saturation = 1.5
exposure = 1.5
hue=.1
learning_rate=0.001 # 根据需要修改学习率,就是梯度下降的速率,越大训练速度越快但会牺牲准确率
burn_in=1000
max_batches = 100000 # 训练的总次数
policy=steps
steps=100,10000,70000,80000,90000 # 训练到相应次数后学习率变化
scales=10,10,.1,.1,.1 # 学习率变化情况,是累乘操作
#以上为知网-水果识别中摘取,但不适合我的训练数据,所以修改为下面的代码
[net]
# Testing
# batch=1
# subdivisions=1
# Training
batch=64
subdivisions=16
width=416
height=416
channels=3
momentum=0.9
decay=0.0005
angle=0
saturation = 1.5
exposure = 1.5
hue=.1
learning_rate=0.001
burn_in=1000
# max_batches = 50200
max_batches = 100000
policy=steps
steps=40000,45000
scales=.1,.1
# 其实就是yolov3默认的参数设置