无边界框训练对象检测

时间:2017-07-18 14:13:15

标签: tensorflow

我有许多由博物馆提供的特定家具的高质量图像。每个对象都在白色屏幕前拍摄,因此每个图像只有一个对象。我们没有带边界框的注释。目标是在照片中识别这些物体,其中描绘了多个物体。

作为Tensorflow的对象识别API的输入(使用PET教程作为灵感),我们通过读取它的高度和重量,将其设置为整个图像,自动创建边界框。因此输入结果在一个边界框中,每个图像都有一个标签。对于每个类别,火车/瓦片分割完成了80/20,其中我们有48个。

使用的模型是 faster_rcnn_inception_resnet_v2_atrous_pets.config (仅调整了num_classes和* .record文件)。我们继续使用Tensorflow模型动物园提供的权重进行训练,使用适当的COCO权重。

经过5000步后,Tensorboard显示的TotalLoss接近0.每隔一段时间就会出现一些尖峰,它至少会保持在0以上至少30,000步。

使用验证集进行验证,Tensorboard在15,000之后显示0.13的mAP。在接下来的15,000步中,它不会发生很大变化(+/- 0.2)。 这是预期的吗?语料库非常不平衡,从每类130个图像到3个不等。但是,即使对于更受欢迎的类,精度也是0.18。没有精度高于0.2。

当提取推理图时,检测到具有多个对象的内部图像中的训练类别的结果,看起来像是检测随机框,至少看起来它有些随机

配置文件中的学习率计划告诉我,它会在900,000之后减少,然后在1,200,000步之后再次减少。是否真的有必要训练这么多的步骤?我使用的是经过预先训练的COCO重量,所以它不需要那么多时间吗?我只在一个GPU上训练。

2 个答案:

答案 0 :(得分:0)

如果您怀疑神经网络没有学习任何东西,您可以尝试在较小的集合上进行训练。如果一切设置正确,它应该能够过度拟合并获得高精度(但无法识别它没有看到的数据)

但是,如果您的目标只是识别图像中的家具类型,我建议使用CNN分类器而不是R-CNN,因为R-CNN更侧重于对象的本地化。我认为新发布的Tensorflow Object Detection API主要关注R-CNN。

幸运的是,没有本地化的图像分类是一个更容易解决的问题,Tensorflow已经在official website上有一些很好的例子

我也对你拥有的数据量有点担心。深度学习需要大量数据,但根据您的说法,某些类别有时只有3个图像,即使数据增加也可能不够。

答案 1 :(得分:0)

如果所有对象都在白色背景下,则应该很容易将图像的灰度版本阈值设置为二进制掩码,然后找到生成的蒙版的边界框。

您可以使用OpenCV来执行此操作,这是有关阈值处理基础知识的教程: https://docs.opencv.org/3.3.1/d7/d4d/tutorial_py_thresholding.html

可能你的面具在某些区域会不连续,这可能会产生多个组件。您可以使用形态过滤解决此问题: https://docs.opencv.org/trunk/d9/d61/tutorial_py_morphological_ops.html

最后,当您对最终面具感到满意时,您可以找到面具的计数器和边界框: https://docs.opencv.org/3.1.0/dd/d49/tutorial_py_contour_features.html

然后可以将这些边界框值解析为您要训练的模型的适当格式。对于Google Object Detection API,使用PASCAL VOC格式似乎最好。

我在这里给出了一些示例代码,但我最好有一个图像。