tensorflow - 图像检测和分类 - 一般方法?
问题描述
我正在尝试建立一个检测+分类模型,该模型将识别图像中的对象并将其分类。在我的 10 个类中,每个图像最多包含 1 个对象(即同一图像不能包含 2 个类)。但是,图像可以不包含我的任何类/对象。我正在努力解决这个问题的一般方法,特别是由于我的问题的性质;我的对象有不同的大小。这是我尝试过的:
用只包含我的对象/类的图像训练了一个分类器,即每个图像都是预先去除背景的对象本身。现在,由于对象/图像具有不同的形状(纵横比),我不得不将图像重塑为相同的大小(破坏纵横比)。如果我的目的只是构建一个分类器,这会很好用,但由于我还需要检测对象,所以效果不太好。
第二种方法类似于(1),除了我没有天真地重塑对象,而是通过用 0(黑色)填充图像来保持纵横比。这完全破坏了我的分类器表现良好的能力(准确率 < 5%)。
Mask RCNN - 我按照这篇博文尝试在同一模型中构建检测器 + 分类器。这种方法花了很长时间,我不确定这是正确的方法。我什至使用外部工具 (RectLabel) 来生成带注释的图像文件,其中包含有关边界框的信息。
问题:在一般层面上,我应该如何解决这个问题:
我应该建立 2 个单独的模型吗?(一个用于检测/定位,一个用于分类?)
我应该像方法(3)那样使用注释文件来注释我的图像吗?
我必须在任何阶段重塑我的图像吗?
谢谢,
PS。在我的所有方法中,我都对图像进行了扩充,以每类生成约 500-1000 张图像。
解决方案
如果您阅读本教程,您将了解您关心的内容。 如何使用 TensorFlow 的对象检测器 API 训练您自己的对象检测器
SSD 模型很小,因此不需要太多时间进行训练。 有一些对象检测模型。
在 RectLabel 上,您可以将边界框保存为 PASCAL VOC 格式。您可以为 Tensorflow 导出 TFRecord。 https://rectlabel.com/help#tf_record
推荐阅读
- javascript - 我如何证明每一行文本的宽度相同 - 并适合 div?
- python - 即使使用正确的键,S3 boto 连接也会导致 ClientError
- python - 如何忽略一组字符,直到遇到正则表达式中的指定字符?
- spring - 为什么访问令牌不再有到期时间?
- java - 具有很多字段的不同类型的实体 - 建模它的最佳方法是什么?
- scala - 如何在 scala 运行时知道不同的连接类型火花
- host - 计算子网位和主机位
- ruby-on-rails - 无法在 Rails 5.2 中创建记录
- ios - 如何从 URL 将 Live Photo 保存到图库?
- java - B 类中构造函数的参数 0 需要 A 类类型的 bean,但无法找到