1

使用 YOLO 和暗网训练自定义数据集时,假设可用数据使用 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>

如果上面的过程出错了,有没有其他的解决办法?

4

3 回答 3

0

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

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

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

于 2019-08-05T14:45:05.033 回答
0

我认为你必须删除其他类。这可能是一个解决方案:

import numpy as np
import os

# Specific class
class_remaining = 1
# Dataset's folder name
folder = "Dataset"

# Browse the dataset
for file in os.listdir(folder):
    # Get the data from txt file as numpy array
    data = np.genfromtxt(file, delimiter=" ")
    # Filter the array
    filter = data[:, 0] == class_remaining
    # Save the filter array in txt file
    np.savetxt(file, data[filter], newline='\n', fmt='%1.3f')
于 2022-01-11T14:38:35.503 回答
0

最安全的方法是只用狗类训练你的网络,你可以参考这个问题了解详细信息。

于 2020-10-02T00:42:27.617 回答