yolov3模型微调(fine-tune)备忘

1. 前言

项目需要用目标检测模型,由于yolov3精度和性能突出,成为最后选择的模型。但是因为在实际场景中会有误检测和漏检测的情况,还需要采集实际场景的数据进行微调。思路是直接调整由ImageNet+coco数据集训练出来的权重yolov3.weights,冻结前面的层数,只微调后面n层。

系统:Ubuntu 18.04


2. 过程

2.1. 数据准备

采集好图片,筛选,标注,转换。

其中标注工具我们使用的是labelImg,可以搜索安装。但是一般标注的时候选的是PascalVoc格式,最后保存的是xml文件,而yolov3的模型需要读取yolo格式的标签文件,因此需要手动转换,可参考voc_label.py

然后是各种配置文件,参考:建立自己的YOLO辨識模型 – 以柑橘辨識為例

包括根据种类调整网络结构等,注意因为是fine tune,需要将LR调整低一点,我是直接调为原来的1/2,后面如果不太好再继续调整。


2.2. 提取冻结层

主要是为了冻结已经训练好的网络中的前n层的权重,命令:

# 冻结前81层
darknet partial cfg/yolov3.cfg yolov3.weights yolov3.conv.81 81

这个时候会在本路径提取出名为yolov3.conv.81的预训练模型。


2.3. 训练

命令:

# 使用多gpu进行训练
darknet detector train cfg/coco.data cfg/yolov3.cfg yolov3.conv.81 -gpus 0,1


2.4. 继续训练

训练期间因为各种原因终止,需要接着训练,则在原来的weights上继续训练:

darknet detector train cfg/coco.data cfg/yolov3.cfg weights/yolov3_500000.weights -gpus 0,1

weights/yolov3_500000.weights是上次训练最后保存的权重。


3. 权威详细教程

之前是因为官网放出来的训练教程实在太简陋了,才在网上找到一些零零散散的教程,拼凑在一起解决问题。

直到找到AlexeyAB 放在github的教程,基本上你想知道的细节都在里面了,作者写得实在详细,包括如何修改配置,多GPU应该怎么修改,map怎么画,等等。所以如果你看到这里,还有其他疑问,应该直接进入这篇教程看看了:https://github.com/AlexeyAB/darknet


4. 参考

建立自己的YOLO辨識模型 – 以柑橘辨識為例

(完)

posted @ 2020-03-20 14:35  大师兄啊哈  阅读(...)  评论(...编辑  收藏