YOLOv4 迁移学习/微调

YOLOv4 Transfer Learning/ Fine tuning

我已经使用我的原始数据集和 custom yolov4 configuration file 训练了一个 YOLOv4 模型,我将其称为我的 'base' YOLOv4 模型。

现在我想使用我创建的这个基础模型使用我手动增强的图像再次训练模型。我正在尝试重新训练我的模型以尝试增加 mAP 和 AP。所以我想使用我的基础模型的权重来训练一个带有手动增强图像的新 yolov4 模型。

我已经在YOLOv4 wiki page that using stopbackward = 1 freezes the layers so weights in these layers would not be updated, however this reduces accuracy. Also there was another piece of information that I read where ./darknet partial cfg/yolov4.cfg yolov4.weights yolov4.conv.137 137 takes out the first 137 layers上看到了。这是否意味着前 137 层在网络中被冻结,或者这是否意味着您仅在 137 层上进行训练?

我的问题是:

  1. 哪些代码实际上冻结了图层以便我可以进行迁移学习 在我创建的基础 YOLOv4 模型上?
  2. 你推荐冻结哪几层,前137 在网络中第一个 YOLO 层之前?

提前致谢!

回答您的问题:

  1. 如果您想使用迁移学习,则不必冻结任何层。您应该简单地使用您从第一个 运行 存储的权重开始训练。因此,您可以 运行 darknet.exe detector train data/obj.data yolo-obj.cfg backup/your_weights_file 而不是 darknet.exe detector train data/obj.data yolo-obj.cfg yolov4.conv.137。权重存储在备份文件夹 build\darknet\x64\backup\ 中。因此,例如,命令可能如下所示:darknet.exe detector train data/obj.data yolo-obj.cfg backup/yolov4_2000.weights

  2. 冻结图层可以节省训练时间。一个好的解决方案是首先在冻结第一层的情况下训练模型,然后解冻这些层以微调您的学习。我不确定在第一个 运行 中冻结多少层比较好,也许你可以通过反复试验来测试它。