14

我在玩TensorFlow的全新Object Detection API,并决定在其他公开可用的数据集上进行训练。TensorFlow对象检测API怪异行为

我碰巧偶然发现了this grocery dataset,它包含超市货架上各种品牌香烟盒的图像以及一个文本文件,其中列出了每张图像中每个香烟盒的边界框。数据集中有10个主要品牌被标注,其他所有品牌都属于第11个“杂项”类别。

我跟着他们的tutorial并设法在这个数据集上训练模型。由于处理能力的限制,我只使用了三分之一的数据集,并进行了70:30的分割以用于训练和测试数据。我使用了faster_rcnn_resnet101模型。我的配置文件中的所有参数都与TF提供的默认参数相同。

后16491层全球的步骤,我测试了一些图像的模型,但我不是太满意的结果 -

无法检测顶级的骆驼,而它检测到其它图像

产品

为什么它无法检测出第一排的万宝路?

另一个问题我是模型从来没有检测到任何其他的标签,除了标签1

不从训练数据中检测到的产品的作物实例

即使在负面图像中,它仍能以99%的置信度检测烟盒!

有人可以帮我解决问题吗?我能做些什么来提高准确性?为什么它检测到所有属于第1类的产品,即使我提到共有11类?

编辑加我的标记图:

item { 
    id: 1 
    name: '1' 
} 

item { 
    id: 2 
    name: '2' 
} 

item { 
    id: 3 
    name: '3' 
} 

item { 
    id: 4 
    name: '4' 
} 

item { 
    id: 5 
    name: '5' 
} 

item { 
    id: 6 
    name: '6' 
} 

item { 
    id: 7 
    name: '7' 
} 

item { 
    id: 8 
    name: '8' 
} 

item { 
    id: 9 
    name: '9' 
} 

item { 
    id: 10 
    name: '10' 
} 

item { 
    id: 11 
    name: '11' 
} 
+1

你能为你的工作提供标签地图吗? –

+0

@JonathanHuang我在编辑 –

+1

中添加了我的标签地图谢谢,这看起来很好。正如其他人所说的那样,您可能需要更多的数据,但我为什么总是预测同一个班级,这很令人困惑......也许您需要再次检查TFRecord文件吗? –

回答

9

所以我想我想清楚发生了什么。我没有对数据集的一些分析并发现它朝向类别1.

的对象偏斜这是从1每个类别的频率分布到11(在0基于索引)

0 10440 
1 304 
2 998 
3 67 
4 412 
5 114 
6 190 
7 311 
8 195 
9 78 
10 75 

我猜这个模型打到了一个局部最小值,只是把所有的事情都标记为1类就足够了。

关于未检测到某些包装箱的问题:我再次尝试过培训,但这次我没有区分品牌。相反,我试图教这个模型香烟盒是什么。它仍然没有检测到所有的盒子。

然后我决定裁剪输入图像并将其作为输入提供。只是为了看看结果是否有所改善,而且确实如此!

事实证明,输入图像的尺寸远大于模型接受的600 x 1024尺寸。所以,它将这些图像缩小到600 x 1024,这意味着香烟盒正在失去他们的细节:)

所以,我决定测试在裁剪图像上的所有类的训练原始模型,它的工作原理一个魅力:)

Original image

这是模型的原始图像的输出

Top left corner cropped from original image

这是我的CR模型的输出选择左上角的四分之一并将其作为输入。

谢谢大家谁帮助!祝贺TensorFlow团队为API做出了惊人的工作:)现在,每个人都可以训练对象检测模型!

+0

嗨@Banach Tarski,你提到你缩小了图像。你如何处理注释的变化? – Jundong

+1

注释应该根据图像的大小而不是绝对坐标。这种方式的注释是不变的缩放。 –

+0

非常感谢!缩小训练图像后,您是否量化了mAP的改进? – Jundong

3

多少图像是存在于数据集? API越多,训练数据越好。我尝试在每堂课上约20幅图像进行训练,准确性很差。我几乎面对上面提到的所有问题。当我生成更多数据时,准确度有了很大提高。

PS:抱歉,我不能发表评论,因为我没有足够的声誉

+0

数据集中有300个图像,每个图像包含每个类的多个实例。我估计,对于每个品牌而言,300张图片中都有该品牌的1000多个实例。另外,模型中的类是否正确? –

+0

类别标签与您发布的类别非常相似。即使我的模型开始以高信度预测一切。我相信它从我提供的有限数据量中学习了非常基本的功能。 –

+0

嗯..那么问题就在于没有足够的数据,或者我没有足够的训练?该死的,这似乎很愚蠢。我将运行该模型以进行更多迭代,看看是否有任何改进 –

0

看来,该数据集的大小是相当小的。 Resnet是一个庞大的网络,需要更多的数据才能正确训练。

怎么办:

  1. 增加数据集大小
  2. 使用预先训练网络和微调您的数据集(你可能已经做到这一点)
  3. 使用数据增强(缩放,模糊, ...;翻转可能不适合这个数据集)。
+0

我可以尝试这样做,但我不明白为什么在~16000个全局步骤后以99%的置信度标记对象。现在是否至少应该学会区分品牌? –

相关问题