机器人视觉与感知

目标检测

目标检测是这样一种视觉任务:在一张图像里把各种东西找出来,并同时说出每样东西“是什么”以及“在哪里”。“在哪里”通常画成一个框——一个紧紧套在每个物体外面的矩形,叫做边界框——而“是什么”则是贴在这个框上的一个标签,比如“人”“杯子”或“叉车”。于是,一张厨房的照片回传时,可能会被标上:一个框套住马克杯、另一个框套住水壶、第三个框套住台面上的猫,每个框都标着它的名字。

这和单纯给一张图分类不一样。普通的图像分类只回答“这张照片里有没有猫,有还是没有?”,并且假定整张图基本上就是一样东西。检测更难,因为真实场景里同时有许多物体,大小各异,有时还相互重叠或被遮住一半,系统必须把每一个都单独定位出来。对机器人来说,这一点至关重要:机械臂没法去抓一个只被笼统地判断成“画面里某处存在”的瓶子——它需要瓶子的确切位置才能伸手去够,而且还得把这个瓶子和旁边的玻璃杯区分开。

现代的目标检测器几乎都建立在神经网络之上,靠从海量带标注的示例图像中学习而来,著名的家族包括 YOLO、SSD 和 Faster R-CNN。对于它所考虑的每一个候选位置,网络都会预测出一个类别标签、一个置信度分数(它有多确定),以及定义那个框的四个数字。它的输出,是对“我面前有什么、在哪里”这个问题逐帧、快速给出的答案,而这正是抓取、避障、计数和追踪的起点。

仓库机器人的摄像头看到一个货架,回传了三个框:“箱子,0.97”“箱子,0.95”和“人,0.88”——这就告诉机器人该到哪里去抓、又该在哪里停下,才不会撞到那位工人。

每个框都带着一个标签和一个从 0 到 1 的置信度分数。

检测是给每个物体画一个框;它并不勾勒物体精确的轮廓——那项更精细的任务是分割。

又称
detection目标侦测物件偵測