研究
真实环境中的主人识别
大多数会跟人的机器人只跟踪离它最近的人。Kiko 跟踪的是一个特定的人。即使这个人转身、换了外套、走到别人身后或离开房间,它也能继续跟踪。
01
问题
从机器人的高度看,家里很多人长得差不多。家人会穿同样的衣服,客人会从 Kiko 和主人之间走过。主人会转身、坐下或离开房间。
只跟随最近的人的机器人,总会在这里出错。Kiko 必须从大约膝盖的高度,时刻知道哪个人是它的主人。
02
方法
初始设置时,Kiko 扫描主人的面孔和身形。此后,它在每一帧中寻找人,持续跟踪每个人,并给每个人与主人的匹配程度打分。
分数综合了四种线索:外观、面孔、体形和深度。当某一种线索缺失时,比如主人转过身去,其他线索继续支撑判断。全部计算都在机器人本机完成。
def owner_score(person, owner):
cues = [
appearance(person, owner),
face(person, owner),
body_shape(person, owner),
depth(person, owner),
]
seen = [c for c in cues if c is not None]
return sum(seen) / len(seen) if seen else 0.0
def find_owner(people, owner):
best = max(people, key=lambda p: owner_score(p, owner), default=None)
if best and owner_score(best, owner) > THRESHOLD:
return best
return None # keep searching为本页编写的简化示意,并不是 Kiko 上实际运行的代码。
03
基准测试
我们从低视角录制自己的数据集,也就是 Kiko 所看到的高度。每段录制都按照脚本进行,脚本会故意让主人难以被持续跟踪。
场景
- 转身
- 换外套
- 遮挡
- 衣着相似
- 离开后返回
- 弱光
我们测量什么
- 身份切换次数
- 重新找到主人所需时间
- 跟丢主人的时长
- 跟随距离误差
- 机器人上的帧率
04
结果
下面每一项数值仍在机器人上测量中。数据真实可靠后,我们会公布。
| 指标 | 数值 |
|---|---|
| 身份切换次数 | 测量中 |
| 重新找到主人所需时间 | 测量中 |
| 跟丢主人的时长 | 测量中 |
| 跟随距离误差 | 测量中 |
| 机器人上的帧率 | 测量中 |
05
局限
我们清楚说明这个方法目前在哪些情况下会失效。
- 每台机器人只有一位主人。
- 光线非常暗。
- 长得几乎一样的人。
- 在机器人近处快速移动。
- 机载算力有限。