如何在暗网中使用预训练的 yolov4 模型训练新课程

Shu*_*agi 5 python machine-learning object-detection darknet yolo

我使用 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 个新类(firesmoke)的图像和注释。

然后我开始暗网训练,对于权重参数,我提供了我旧的 yolov4 训练权重。完成后,我进行了测试,但没有检测到图像中的任何内容。连老班都没有。

我哪里做错了?

我的感觉是,由于我没有为旧类提供数据集,因此模型忘记了这些数据集。但是,那么它至少应该检测到新的类别,对吗?还是我错了?

新编辑:

我使用组合数据集(旧的 3 个类和 2 个新类)对预训练的自定义权重(针对前 3 个类进行了训练)再次进行了训练,当我运行它进行测试时,仍然没有输出。

有人可以向我解释一下这是怎么回事吗?我想这背后有一些我不知道的数学原理。

我每次都必须从头开始训练吗?

小智 2

您无法在经过训练的模型中插入新类。当您仅使用数据集进行训练时,您的配置并未配置为 2 个类别,而是配置为 5 个类别。可能这就是为什么你在第二次测试中没有得到任何结果的原因。

该模型不会忘记,而是使用该重量作为新模型的领先优势。只需使用包含所有标记类别的数据集再次训练即可。