machine-learning - 以 YOLO 为例进行微调和迁移学习
问题描述
我有一个关于微调和迁移学习的一般性问题,当我试图弄清楚如何最好地让 yolo 检测我的自定义对象(手)时出现了这个问题。
对于可能包含大量虚假信息的长文本,我深表歉意。如果有人有耐心阅读并帮助我消除困惑,我会很高兴。
经过大量的谷歌搜索,我了解到很多人认为微调是迁移学习的一个子类,而另一些人则认为他们使用不同的方法来训练模型。同时,人们区分仅在自定义数据集上重新训练模型的最后一个分类器层与重新训练模型的其他层(并且可能添加一个全新的分类器而不是重新训练?)。两种方法都使用预训练模型。
我最后的困惑在于:我按照以下说明进行操作:https : //github.com/thtrieu/darkflow 通过darkflow 训练tiny yolo,使用以下命令:
# Initialize yolo-new from yolo-tiny, then train the net on 100% GPU:
flow --model cfg/yolo-new.cfg --load bin/tiny-yolo.weights --train --gpu 1.0
但是这里会发生什么?我想我只重新训练分类器,因为说明说要更改配置文件中最后一层的类数。但话又说回来,还需要更改倒数第二层(卷积层)中的过滤器数量。
最后,说明提供了替代培训的示例:
# Completely initialize yolo-new and train it with ADAM optimizer
flow --model cfg/yolo-new.cfg --train --trainer adam
我完全不明白这与迁移学习的不同方式有何关系。
解决方案
如果您使用的是 AlexeyAB 的暗网存储库(不是暗流),他建议通过在 cfg 文件中设置此参数来进行微调而不是迁移学习:stopbackward=1
.
然后输入./darknet partial yourConfigFile.cfg yourWeightsFile.weights outPutName.LastLayer# LastLayer#
如:
./darknet partial cfg/yolov3.cfg yolov3.weights yolov3.conv.81 81
它将创建yolov3.conv.81
并冻结下层,然后您可以使用 weights 文件yolov3.conv.81
而不是 original进行训练darknet53.conv.74
。
参考: https ://github.com/AlexeyAB/darknet#how-to-improve-object-detection,https://groups.google.com/forum/#!topic/darknet / mKkQrjuLPDU
推荐阅读
- php - 什么编码框架或系统使用“$var=str_replace("{{thispart}}",$thisvar,"thisfile.html");"?
- sql - 为什么我在使用这个 JSON_OBJECT 时遇到错误
- angular - 在 component.ts 中通过 renderer2 添加的类放在哪里
- java - FTP客户端/服务器登录验证
- python - 使用许多变量和约束计算的值的优化
- python - 无法使用 OpenCV 4.1.1 VideoCapture 在 MacBook Pro Catalina OS 中读取视频
- javascript - javascript下载结束触发器
- angular - Firebase 函数中的 CORS
- c# - IQueryable 未实现 IDbAsync 查询提供程序
- swift - 变量仅用于在单元测试中保持实例处于活动状态,收到“仅写入但从不读取”警告