TensorFlow对象检测API怪异行为
classification
machine-learning
object-detection
python
5
0

我正在使用TensorFlow的全新对象检测API,并决定在其他一些公开可用的数据集上对其进行训练。

我偶然发现了这个杂货店数据集, 数据集包含超市货架上各种品牌烟盒的图像以及一个文本文件,该文本文件列出了每个图像中每个烟盒的边界盒。数据集中已经标记了10个主要品牌,所有其他品牌都属于第11个“杂项”类别。

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

经过16491次全局步骤后,我在一些图像上测试了该模型,但对结果并不满意-

无法在上架中检测到骆驼,而在其他图像中检测到产品

为什么无法在第一行中检测到万宝路?

我遇到的另一个问题是该模型未检测到除标签1以外的任何其他标签。

从培训数据中未检测到产品的作物实例

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

有人可以帮助我解决问题吗?我该怎么做才能提高准确性?为什么即使我提到总共有11个类别,它也能检测到所有属于类别1的产品?

编辑添加了我的标签图:

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'
}
参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

所以我想我知道发生了什么事。我对数据集进行了一些分析,发现它偏向类别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,这意味着烟盒丢失了其详细信息:)

因此,我决定测试原始模型,该模型在裁剪图像的所有班级上都得到了培训,它的工作原理很像:)

原始图片

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

从原始图像裁剪左上角

当我裁剪左上四分之一并将其作为输入时,这就是模型的输出。

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

收藏
评论

数据集中有多少张图片?您拥有的训练数据越多,API的性能就越好。我尝试在每堂课上训练约20张图像,但准确性很差。我几乎已经遇到了您上面提到的所有问题。当我生成更多数据时,准确性大大提高。

PS:对不起,我没有足够的声誉,所以我无法发表评论

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号