改进 MLKit 对象检测

Improving MLKit Object Detection

问题:

使用 MLKit,我熟悉如何customize the classifier建模,但是有什么方法可以自定义或重新训练对象检测模型吗?

背景

我正在从事一个机器人项目,其中 Android 动力机器人必须检测其他机器人和充电站。我正在重新训练图像分类器以正确分类机器人和充电站,这似乎相当简单,只要有足够大的图像集。为了生成这个图像集,我 运行 和机器人一起随机行走,让它在每次识别到物体时拍照,并在所述物体在视框中时继续每 0.5 秒拍照一次。我还将图像裁剪到边界框并使用分类器命名它以便于分组。 运行 对此进行了大约半小时后,我检查了图像,发现在各种分类器下,机器人本身很容易被检测到,但充电站却没有。我的随机游走生成了大约 1000 张图像,其中 100-150 张是其他机器人的图像,而我只拍摄了大约 5 张充电站图像。

当我尝试手动将机器人放置在充电站周围时,我注意到在检测到物体之前,放置必须非常具体。这让我想到我想以某种方式重新训练物体检测模型,以更好地识别我的充电站。从文档中,我能找到的只是重新训练分类器的方法,而不是对象检测。有什么办法吗?

代码

尽管我对它进行了相当多的修改以进行图像捕获和其他机器人操作,但我使用的基本代码是带有自定义分类器的默认 vision-quickstart 对象检测模块。

图片

请注意,充电站(右)比机器人上的一个轮子(左)稍大一些,如果这样也有助于形象化,它可以安装在机器人下方的轮子之间。

编辑 1

我刚刚试用了 MLKit 之外的 TF Lite 对象检测 sample app,很明显,它在检测充电站和一般较小的对象方面做得更好。我尝试在 mlkit 中使用此示例中使用的检测模型,但看起来它们不兼容。我收到错误:

E/native: calculator_graph.cc:772 INVALID_ARGUMENT: CalculatorGraph::Run() failed in Run: 
    Calculator::Open() for node "[BoxClassifierCalculator, BoxClassifierCalculator with output stream: detection_results0]" failed: #vk Unexpected number of dimensions for output index 0: got 3D, expected either 2D (BxN with B=1) or 4D (BxHxWxN with B=1, W=1, H=1). [type.googleapis.com/mediapipe.StatusList='\n\xb7\x02\x08\x03\x12\x85\x02\x43\x61lculator::Open() for node \"[BoxClassifierCalculator, BoxClassifierCalculator with output stream: detection_results0]\" failed: #vk Unexpected number of dimensions for output index 0: got 3D, expected either 2D (BxN with B=1) or 4D (BxHxWxN with B=1, W=1, H=1).\x1a+\n$tflite::support::TfLiteSupportStatus\x12\x03\x34\x30\x30']

也许我可以修改它以满足 model requirements?还是我想把方钉塞进圆孔?

目前,我们不提供 API 在 MLKIt 中更换 ODT 检测器。我们计划让检测器也可以互换。

TFLite 示例中的模型是一个包含检测器和分类器的单一模型,而 MLKit 中的模型是两个独立的模型。仅交换检测器模型将是 non-trivial。让我们先尝试下面的一些解决方法:

When I try to manually position the robots around the charging stations I note that the placement has to be very specific before the object is detected.

为了更容易检测到充电站,您可以尝试在充电点上放置更多 'texture' 与背景相比。例如,充电点边缘的不同颜色圆点。

此外,如果您使用的是单对象模式(主要对象),则需要对象位于图像框的中心。您也可以尝试多对象模式,它不需要中心的对象,但您可能需要过滤掉其他 non-interest 检测结果。