对于课程项目,我正在训练单程网络以检测图像中的多个仪器符号 . 这些类的一小部分如下所示 .

Image_Class_1 Image_Class_2 Image_Class_3 Image_Class_4

我正在使用YOLO v2来训练和检测图像中的多个类 . 由于这些符号的数据集不存在,我在上面显示的四个符号上以下列两种方式执行数据增强 .

  • 每个符号类型的旋转步长为0.5度,为每个类提供720个图像 .
    此外,获得的720个图像通过高斯模糊(5×5滤波器) .
    这将数据集增加到每类1440个图像 .

YOLO v2的配置文件仅在以下行中更改:

  • 第3行:批次= 64

  • 第4行:细分= 64(细分大小为8使CUDA耗尽内存) .

  • 第244行:classes = 4

  • 第237行:过滤器=(第5类)* 5 = 45 .

用于训练的图像大小为500x500,整个数据集分为80%和20%的比例用于训练和测试 .

网络培训运行至3100次迭代,平均损失为0.048 .

然而,训练结果让我感到困惑,因为在多类检测的情况下结果是相当出乎意料的 . 在测试图像的单类分类中,网络按预期执行(尽管对于可能可以改进的两个类不是很好),如下所示:
Detection class_2_image (probability = 78%) Detection class_1_image (probability = 98%) Detection class_3_image (probability = 98%)

但是,当我尝试对测试图像执行多类检测时,检测和分类完全失败,如下面的结果图像所示:
Multi-class Detection biased for class_3

如果我改变测试图像中符号之间的空间距离,则边界框和类预测变得更加随机 . 因此,我有一些关于这个问题的问题:

  • 由于YOLO也隐式执行数据扩充,我的数据扩充过程是否会干扰培训?

  • 我是否需要将图像大小调整为精确到416X416作为YOLO v2所需的输入?

  • 我知道YOLO v2是一个非常沉重的CNN架构,可能并不适用于这样的图像,但单类分类结果太有希望忽略不计 . 那么有人可以弄清楚为什么它完全失败了多类检测?

  • 我应该按原样使用YOLO v2还是修改它以便在图像中检测这些符号?我想如果我修改我会冒更多的损失并进一步恶化检测 .