YOLOv3使用笔记——修改backbone网络

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cgt19910923/article/details/83176997

       对于部分场景简单,目标较大的图像可能并不需要darknet53这种深度的backbone网络也能检测出来,出于这样的目的,试验将darknet53替换为darknet19、resnet等,既减少了模型计算量,又加快了推理时间。

backbone网络对比:https://pjreddie.com/darknet/imagenet/

有各个网络的cfg以及在imagenet上的预训练模型。

1.替换backbone网络

以修改darknet19为例,截取convolutional filters1000之前的网络部分,替换掉yolov3中的darknet53部分。其中darknet53做了三次yolo层用于提取特征,每个yolo模块中有个route层,route层意义是将几个层的输出接到一块作为输出,几个层的输出大小要求一致。需要修改的地方,找到替换网络中的conv层与route选定的层输出大小一致。

替换resnet另外需要将 random=1改为 random=0。主要是旧版本的darknet当 random=1时resize存在问题。

2.在替换的网络上做fine-tuning

直接用下载的预训练模型做微调有个问题,训练一开始就结束了,并能保存出模型。原因是这些网络都是在imagenet上训练过,设置的迭代次数应该是远大于cfg中的max_batch或者其他参数,所以刚开始训练便达到了截止条件。不做fine-tuning,没有好的初始化又很难训练出好模型。

重新extract weights

./darknet partial cfg/darknet19.cfg darknet19.weights darknet19.conv.40 40

提取1~39层darknent19的参数,设置的40大于darknet19的层数就可以。

得到的darknet19.conv.40可以做为修改的yolov3-darkent19网络的初始化模型。

猜你喜欢

转载自blog.csdn.net/cgt19910923/article/details/83176997