我正在尝试构建一个检测+分类模型,该模型将识别图像中的对象并对其进行分类。在我的 10 个类中,每个图像最多包含 1 个对象(即同一图像不能包含 2 个类(。但是,图像不能包含我的类/对象。我正在努力解决这个问题的一般方法,特别是由于我的问题的性质;我的对象具有不同的大小。这是我尝试过的:
-
使用仅包含我的对象/类的图像训练了一个分类器,即每个图像都是预先删除背景的对象本身。现在,由于对象/图像具有不同的形状(纵横比(,我不得不将图像重新塑造为相同的大小(破坏纵横比(。如果我的目的只是构建一个分类器,这将很好用,但由于我还需要检测对象,所以效果不佳。
-
第二种方法与(1(类似,只是我没有天真地重塑对象,而是通过用0(黑色(填充图像来保持纵横比。这完全破坏了我的分类器表现良好的能力(准确率<5%(。
-
掩码 RCNN - 我按照这篇博文尝试在同一模型中构建检测器 + 分类器。这种方法花了很长时间,我不确定这是正确的方法。我甚至使用外部工具(RectLabel(来生成包含有关边界框信息的注释图像文件。
问题: 在一般层面上,我应该如何处理这个问题:
-
我应该构建 2 个单独的模型吗?(一个用于检测/定位,一个用于分类?
-
我应该像方法(3(那样使用注释文件注释我的图像吗?
-
我必须在任何阶段重塑我的图像吗?
谢谢
附言。在我的所有方法中,我都增强了图像,每类生成~500-1000张图像。
要回答您的问题:
-
不,您不必构建两个单独的模型。您所描述的称为对象检测,即分类和定位。有许多型号可以做到这一点:Mask_RCNN,Yolo,Detectron,SSD等。
-
是的,您确实需要注释图像,以便为自定义类训练模型。上面提到的每个模型都需要不同的注释方式。
-
不,您无需进行任何图像大小调整。大多数情况下,它是在模型加载数据以进行训练或推理时完成的。
您尝试MaskRCNN是正确的轨道。
除了MaskRCNN,你也可以试试Yolo。还有一个易于使用的注释工具Yolo-Mark。
如果你读完本教程,你就会明白你关心什么。 如何使用 TensorFlow 的对象检测器 API 训练自己的对象检测器
SSD 模型很小,因此不会花费太多时间进行训练。 有一些对象检测模型。
在 RectLabel 上,您可以以 PASCAL VOC 格式保存边界框。 您可以导出 TFRecord for Tensorflow。 https://rectlabel.com/help#tf_record