YOLO&Darknet-训练自定义数据集以检测特定类别并忽略其他类别

时间:2019-08-04 19:08:04

标签: yolo darknet darkflow

在使用YOLO和darknet训练自定义数据集时,假设可用数据用3类标注, voc.names

cat
dog
bird

因此, .txt 文件的格式为

1 0.587 0.576 0.361 0.415
0 0.205 0.803 0.166 0.206
0 0.181 0.597 0.166 0.206
2 0.417 0.857 0.166 0.206

这意味着猫是0类,狗是1类,鸟是2类

如果我想训练模型只检测狗(1类),而忽略其余的类,该怎么做?我可以通过以下方式更改 voc.names 文件吗,即第一行和第三行留空

<assume empty line>
dog
<assume empty line>

如果以上过程错误,是否还有其他解决方法?

2 个答案:

答案 0 :(得分:0)

如果您希望模型检测所有类,而只绘制 dog 框,则只需在绘制函数之前添加if条件。但是,如果要将类的数量从3个减少到1个,则应该采取一些其他步骤:

  • 您应该将代码中提到的所有位置的类数从3更改为1。例如,在三个yolo层中的每一层。还要更改最大批次数number_of_classes*2000(除以3)。
  • 在yolo层之前更改每个conv层中的过滤器数量。默认情况下为number_of_filters=(classes + 5)x3
  • voc.names 更改为1行(狗)不带空行的文件。
  • 更改 voc.data
  • 中的类数

如果您可以发布代码的相关部分或链接,将会有所帮助。

答案 1 :(得分:0)

最安全的方法是仅通过狗类训练网络,有关详细信息,请参考this question