YOLOv4 迁移学习/微调
Posted
技术标签:
【中文标题】YOLOv4 迁移学习/微调【英文标题】:YOLOv4 Transfer Learning/ Fine tuning 【发布时间】:2020-12-31 03:10:16 【问题描述】:我使用我的原始数据集和custom yolov4 configuration file 训练了一个 YOLOv4 模型,我将其称为我的“基础”YOLOv4 模型。
现在我想使用我创建的这个基本模型,使用我手动增强的图像再次训练模型。我正在尝试重新训练我的模型以尝试增加 mAP 和 AP。所以我想使用我的基础模型中的权重来训练一个带有手动增强图像的新 yolov4 模型。
我在YOLOv4 wiki page 上看到,使用stopbackward = 1
会冻结层,因此这些层中的权重不会更新,但这会降低准确性。还有一条我在./darknet partial cfg/yolov4.cfg yolov4.weights yolov4.conv.137 137
takes out the first 137 layers 读到的信息。这是否意味着前 137 层被冻结在网络中,或者这是否意味着您只在 137 层上进行训练?
我的问题是:
-
哪些代码实际上冻结了层,所以我可以进行迁移学习
在我创建的基础 YOLOv4 模型上?
建议冻结哪些层,前 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
冻结层可以在训练期间节省时间。一个好的解决方案是首先在第一层冻结的情况下训练模型,然后解冻这些层以微调您的学习。我不确定在第一次运行时要冻结多少层,也许您可以通过反复试验来测试它。
【讨论】:
以上是关于YOLOv4 迁移学习/微调的主要内容,如果未能解决你的问题,请参考以下文章
Pytorch Note56 Fine-tuning 通过微调进行迁移学习
手把手写深度学习(13):如何利用官方预训练模型做微调/迁移学习?(以Resnet50提取图像特征为例)
小白学习PyTorch教程十二迁移学习:微调VGG19实现图像分类