我使用 darknet 和 yolov4 为我的用例训练了一个自定义对象检测模型。我在 obj.name 文件中提到了 3 个类,如下所示:
# data/obj.names
no_helmet
helmet
vest
Run Code Online (Sandbox Code Playgroud)
培训已经完成,检测也取得了良好的效果。
现在,我想向模型添加 2 个新类,因此我使用 2 个新类名更新了类文件:
# data/obj.names
no_helmet
helmet
vest
fire
smoke
Run Code Online (Sandbox Code Playgroud)
我对配置文件进行了更改,并更新了所有classes=3层和前面的层。classes=5filter=24filter=30[yolo][convolutional]
对于数据集,我只提供了 2 个新类(fire和smoke)的图像和注释。
然后我开始暗网训练,对于权重参数,我提供了我旧的 yolov4 训练权重。完成后,我进行了测试,但没有检测到图像中的任何内容。连老班都没有。
我哪里做错了?
我的感觉是,由于我没有为旧类提供数据集,因此模型忘记了这些数据集。但是,那么它至少应该检测到新的类别,对吗?还是我错了?
新编辑:
我使用组合数据集(旧的 3 个类和 2 个新类)对预训练的自定义权重(针对前 3 个类进行了训练)再次进行了训练,当我运行它进行测试时,仍然没有输出。
有人可以向我解释一下这是怎么回事吗?我想这背后有一些我不知道的数学原理。
我每次都必须从头开始训练吗?