图像检测和分类 - 一般方法?

Image Detection & Classification - general approach?

我正在尝试构建一个检测 + class化模型,该模型将识别图像中的对象并 class化它。在我的 10 classes 中,每个图像最多包含 1 个对象(即同一图像不能包含 2 classes)。但是,图像可以包含我的 classes/objects 的 none。我正在努力解决这个问题的一般方法,特别是由于我的问题的性质;我的对象有不同的大小。这是我试过的:

  1. 使用仅包含我的 objects/classes 的图像训练了 classifier,即每张图像都是预先移除背景的对象本身。现在,由于 objects/images 具有不同的形状(纵横比),我不得不将图像重塑为相同的大小(破坏纵横比)。如果我的目的只是构建一个 classifier,这会很好用,但由于我还需要检测对象,所以效果不是很好。

  2. 第二种方法与 (1) 类似,只是我没有天真地重塑对象,而是通过用 0(黑色)填充图像来保持纵横比。这完全破坏了我的 classifiers 表现良好的能力(准确度 < 5%)。

  3. Mask RCNN - 我按照 this 博文尝试在同一模型中构建检测器 + classifier。这种方法花了很长时间,我不确定这是正确的方法。我什至使用外部工具 (RectLabel) 生成包含有关边界框信息的注释图像文件。

问题: 在一般层面上,我应该如何解决这个问题:

谢谢,

PS。在我所有的方法中,我都对图像进行了扩充,以便每个 class.

生成约 500-1000 张图像

回答您的问题:

  • 不,您不必构建两个单独的模型。您所描述的称为对象检测,它是分类和定位。有很多模型可以做到这一点:Mask_RCNN, Yolo, Detectron, SSD,等..

  • 是的,您确实需要为图像添加注释,以便为您的自定义 类 训练模型。上面提到的每个模型都需要不同的注释方式。

  • 不,您不需要调整图像大小。大多数情况下,它是在模型加载数据进行训练或推理时完成的。

你在尝试 MaskRCNN 的正确轨道上。

除了MaskRCNN,你还可以试试Yolo. There is also an accompanying easy-to-use annotating tool Yolo-Mark

如果你读完本教程,你就会明白你关心的是什么。 How to train your own Object Detector with TensorFlow’s Object Detector API

SSD模型很小,训练时间不会太长。 There are some object detection models.

在 RectLabel 上,您可以将边界框保存为 PASCAL VOC 格式。 您可以为 Tensorflow 导出 TFRecord。 https://rectlabel.com/help#tf_record