RunSight
ZH

技术

一枚摄像头,以及说出一句话所需的一切。

一帧画面如何变成几何信息,几何信息如何变成判断,判断又如何变成一句短句,全都发生在你背上的设备里,不联网。

摄像头、三个模型、几何处理和提示选择全部在设备上运行,无需互联网连接。

一枚摄像头。设备上的三个模型。

与视线齐平的 USB 摄像头把画面送进 Hailo-8 加速器。每一帧被接受后,三个已编译的模型会运行:一个分割白线,一个检测前方的人,一个从同一帧估计深度。没有深度传感器,没有 LiDAR,没有第二枚摄像头。深度来自这一枚 RGB 摄像头,这让设备保持便宜。

帧按“最新优先”处理。如果推理落后了,旧帧会被丢弃,而不是排队。用过时的画面去引导,不如闭嘴。

跑道分割输出,检测到的跑道以蓝色画出

U-Net

已在原型上运行

ResNet-18 backbone

分割漆好的跑道线,告诉设备跑道朝哪儿、你在其中的位置。

84.23% IoUIoU(验证集)

行人检测输出,前方跑者被方框框住

YOLOv8n

已在原型上运行

Nano detector

检测前方跑道上的人;在共享跑道上,这才是真正重要的障碍。

88.24% IoUIoU(验证集)

跑道的深度图,越近的物体颜色越暖

Sc-Depth V3

已在原型上运行

Monocular RGB

从单张 RGB 帧估计被检测者的距离,让引导引擎知道一个障碍是否已经近到需要在意。

Self-supervised单目深度,设备端

跑道分割结果:输入图像、模型预测、标注真值
跑道分割:输入、预测,以及人工标注的真值。
行人检测结果:预测框与真值框对比
行人检测:预测(红)与真值(绿)的对比。

从像素到判断。

掩膜和方框还不是引导。它们必须变成几何信息:跑道朝哪儿、你在其中的位置、弯得有多急,以及前方的人是否已经足够近。

分割模型找到的跑道线以黄色画在跑道上

01

拟合跑道线

从掩膜里提取轮廓,把每条跑道线拟合成二次曲线。被人或影子打断的线会被补齐,重新变成一条连续的边。

拟合出的跑道线之间,跑者当前所在的区域被标为绿色

02

把跑道切成五个区域

拟合出的线把跑道分成五个区域(最左、左、中、右、最右),并把跑者放进其中之一。引导提示就是由此算出的。

拟合到跑道线上的曲率圆

03

测量弯度

从拟合曲线的中心点算出曲率半径。半径大是直道,半径小是弯道;同时也知道往哪边弯。

前方检测到的人,附带估计的深度值

04

评估前方的人

被检测到的人,只有在靠近时才算障碍。深度模型从同一帧 RGB 估出这个距离,于是引擎只对靠近的人做出反应,而不是画面里的每一个人。

从前方场景到一句语音提示。

跑道产生的信息,远多于一个正在奔跑的人能处理的量。引擎一次最多放行一条提示,其余全部压制。冷却时间按优先级分别计算。

语句何时优先级冷却
Move left你偏到了跑道右侧。这句提示把你带回中间。引导1.5s
Move right你偏到了跑道左侧。这句提示把你带回中间。引导1.5s
Caution, person ahead前方有人,已经近到不能忽视,但还没到危险的程度。警告0.8s
Stop, person ahead前方有人,而且很近。这句提示会打断其他一切。危急
  • 优先级压过优先级

    每个等级有自己的冷却,所以一条刚说完的引导提示,绝不会挡住一条警告。

  • 不唠叨

    同一句话在 3 秒内会被压制,哪怕它依然成立。

  • 危急提示一定说出口

    危急提示跳过所有冷却,并打断正在播放的语音。

把模型塞进一帧的时间预算里。

保持 float32,Raspberry Pi 跑不出实时帧率。于是我们把模型编译到 Hailo 加速器上:转成它的内部表示、做性能剖析、用真实跑道图像作校准集量化,最后生成开机时加载的可执行文件。

为加速器编译后,原型速度提升 6 倍,运行速度超过每秒 10 帧。

数据来自印尼的跑道。

并不存在一个从跑者视角拍摄印尼跑道的公开数据集。所以我们自己做了一个:在帕特里奥特·钱德拉巴加等公共跑道上,与视线齐平地拍摄,既拍前方有人的情况,也拍空无一人的情况。

每张图像有两种标注:给人打边界框,给白线画折线。然后做增强,让它经得起现实:会歪的头、会晃的相机、刺眼或阴沉的下午。

在 Label Studio 中进行的跑道线分割标注
跑道标注:沿着漆好的边线手工描出。
在 Label Studio 中给跑道上的人打边界框
行人标注:前方每个跑者一个框。
同一张原图上分别应用的五种增强手法
每种增强手法,单独应用在同一张原始帧上。

原型现状与下一步测试。

整合原型已经可以运行,但以下项目仍需开发或验证。

  • 单个多任务模型

    这块加速器没有 DRAM,逐帧切换模型代价很高。把三个模型合成一个带多个头的模型,才是解法。

  • 无线音频

    现在靠有线耳机说话。蓝牙音频需要一路独立于手机连接的无线。

  • 模型远程更新

    现在要换一个新模型,必须动手碰到设备本身。

  • 实地验证

    到目前为止的一切,都来自桌面测量和明眼测试者在跑道上的测量。真正的关卡,是与视障跑者一起、在监督下进行的试跑,而我们还没有完成这一步。