问题与背景
对于一个新手,安装好了darknet框架之后,怎么开始训练呢?这里我们以yolov3为目标模型,将darknet看作丹炉,yolov3的网络结构看作单方,进行一波”炼丹“。首先找到一个标准的yolov3的cfg文件,需要对里面的参数读懂,然后更改,适配一下数据集,就可以进行训练了。
参考资料
https://blog.youkuaiyun.com/czksnk/article/details/100692881 YOLOv3 cfg文件详解 (好文)
https://www.cnblogs.com/carle-09/p/12192206.html yolo—参数解释之cfg文件参数(也很详细)
https://www.cnblogs.com/pprp/p/12199731.html 细粒度的拆分cfg配置,具体学yolo必看
案例与方案
cfg文件的解读如下:
[net] ★ [xxx]开始的行表示网络的一层,其后的内容为该层的参数配置,[net]为特殊的层,配置整个网络
# Testing ★ #号开头的行为注释行,在解析cfg的文件时会忽略该行
# batch=1
# subdivisions=1
# Training
batch=64 ★ 这儿batch与机器学习中的batch有少许差别,仅表示网络积累多少个样本后进行一次BP
subdivisions=16 ★ 这个参数表示将一个batch的图片分sub次完成网络的前向传播
★★ 敲黑板:在Darknet中,batch和sub是结合使用的,例如这儿的batch=64,sub=16表示训练的过
程中将一次性加载64张图片进内存,然后分16次完成前向传播,意思是每次4张,前向传播的循环过程中
累加loss求平均,待64张图片都完成前向传播后,再一次性后传更新参数
★★★ 调参经验:sub一般设置16,不能太大或太小,且为8的倍数,其实也没啥硬性规定,看着舒服就好
batch的值可以根据显存占用情况动态调整,一次性加减sub大小即可,通常情况下batch越大越好,还需
注意一点,在测试的时候batch和sub都设置为1,避免发生神秘错误!
width=608 ★ 网络输入的宽width
height=608 ★ 网络输入的高height
channels=3