计算图片中重复的“对象”

数据挖掘 美国有线电视新闻网 物体检测 图像识别 更快的rcnn
2022-03-02 01:47:07

这是我的第一个数据科学项目,我很想得到一些指导以了解如何开始。

我的问题如下:我想计算图片中的对象。这张图片有一个特殊的特点,它将是白色背景上的“物体”。

例如:

  • 种子
  • 咖啡豆
  • 涂黑点
  • 等等

例如,输入将是:

在此处输入图像描述

输出:对象:9

在此处输入图像描述

我已经做了一些研究,我发现很多地方他们建议使用 R-CNN 来定位和分类我在图片中的“项目”。

这听起来是个好主意,但我在这里看到的问题是我不知道我将在图片中拥有什么。我知道会有相同类型和类别的“重复项目”,但它可能是任何东西。

因为我不知道我将在图片中拥有什么,所以我不知道用什么来训练我的模型。

我应该如何进行?

1个回答

如果您确实需要为这个问题使用 ML 解决方案(而不是严格的计算机视觉解决方案),大多数(全部?)框架将在运行推理后返回检测列表。

我将使用 Tensorflow 和这个对象检测教程作为示例。如果您运行 colab 并选择标题为“可视化结果”的文本单元格并运行上面的所有单元格,它将下载模型并在完成后对图片运行推理。

插入代码单元并添加print(result["detection_classes"])并运行它。这应该会给出如下输出:

[[38.  1.  1. 38. 38. 38.  1.  1. 38.  1.  1. 38.  1.  1.  1. 38. 42. 42.
 1. 38. 42. 38.  1.  1.  1. 31. 38. 38. 42.  1. 31. 27.  1.  1. 38.  1.
 2. 38.  1. 38. 37. 38. 38. 27. 38. 38. 38. 44. 38. 38. 27.  1.  1. 38.
 3.  1. 38. 42. 16. 38.  9.  1.  1. 27. 27. 38. 38.  1. 38. 38.  1.  1.
 4. 38. 31. 38.  1. 38. 38. 31. 42.  9. 38. 34. 40. 38. 38.  1. 38. 38.
 5.  3. 18. 27. 38. 18.  1. 31. 42. 38.]]

列表中的每个数字都映射到其中一个类。在这种情况下,您将在变量中找到类category_index

现在您可以使用您最喜欢的 python 方法来计算出现次数。一个简单的实现可能如下所示:

def count_classes(detections: list) -> tuple:
  ret_tuple = {}
  for detection in detections:
    if detection in ret_tuple.keys():
      ret_tuple[detection] += 1
    else:
      ret_tuple[detection] = 1
  return ret_tuple

在 colab 中运行上述代码将得到以下结果:

count_classes(result["detection_classes"][0])
...
{1.0: 30,
 3.0: 1,
 9.0: 2,
 16.0: 1,
 18.0: 3,
 27.0: 6,
 31.0: 5,
 34.0: 1,
 37.0: 1,
 38.0: 41,
 40.0: 1,
 42.0: 7,
 44.0: 1}