对于一个课程项目,我正在训练一个单通道网络来检测图像中的多个仪器符号。下面显示了这些类的一个非常小的子集。
Image_Class_1 Image_Class_2 Image_Class_3 Image_Class_4
我正在使用 YOLO v2 来训练和检测图像中的多个类。由于此类符号的数据集不存在,因此我通过以下两种方式对上面显示的四个符号执行了数据扩充。
- 以 0.5 度的步长旋转每种符号类型,为每个类别提供 720 个图像。
- 此外,获得的 720 幅图像通过高斯模糊(5x5 滤波器)。
这将数据集扩充为每类 1440 张图像。
YOLO v2 的配置文件仅在以下几行进行了更改:
- 第 3 行:批次 = 64
- 第 4 行:细分 = 64(细分大小为 8 会使 CUDA 内存不足)。
- 第 244 行:类 = 4
- 第 237 行:过滤器 =(类 + 5)*5 = 45。
用于训练的图像大小为 500x500,整个数据集分为 80% 和 20% 的比例用于训练和测试。
网络训练运行到 3100 次迭代,平均损失为 0.048。
然而,训练结果让我有点困惑,因为在多类检测的情况下结果相当出乎意料。在测试图像的单类分类中,网络表现符合预期(虽然对两个类来说不是很好,也许可以改进)如下所示:
检测类_2_图像(概率 = 78%) 检测类_1_图像(概率 = 98%) 检测class_3_image(概率= 98%)
但是,当我尝试对测试图像执行多类检测时,检测和分类完全失败,如下图所示:
Multi-class Detection biased for class_3
如果我改变测试图像中符号之间的空间距离,那么边界框和类预测会变得更加随机。因此,我对这个问题有几个问题:
- 由于 YOLO 也隐式执行数据增强,我的数据增强过程是否会干扰训练?
- 我是否需要将图像大小调整为精确的 416X416 作为 YOLO v2 所需的输入?
- 我知道 YOLO v2 是一个非常重的 CNN 架构,它可能不适用于此类图像,但单类分类结果很有希望不容忽视。那么有人能弄清楚为什么它在多类检测方面完全失败了吗?
- 我应该按原样使用 YOLO v2 还是对其进行修改以检测图像中的这些符号?我想如果我修改我可能会失去更多并进一步恶化检测。