端侧视觉
端侧视觉与应用场景
端侧视觉是指在终端设备上实现图像处理和计算机视觉的技术,它可以在设备本地进行计算和数据处理,支持实时图像处理和视觉分析。
AI领域是端侧视觉落地产品和方向非常多的领域,如手机端、手表、智能监控设备、平板电脑。目前的几个风口方向,如特斯拉FSD自动驾驶,也采用了纯视觉的端侧解决方案。VR和AR等视觉领域、机器人领域也采用了端侧视觉相关的技术。
多种视觉方案的区别
整体的视觉方案总结成5种,包括端侧视觉、云端视觉、混合视觉、边缘云视觉和传感器级视觉。对比的4个维度有数据处理位置、实时性要求、网络依赖性和用户的隐私与安全。
端侧视觉领域相关技术
我们在本地或用户端采集数据,通过训练模型的方式,把模型放到云端或端侧进行部署。接着服务端进行请求,通过前向推理的过程得到响应,反馈给服务端。
在端侧和云侧算法需要考虑很多因素,端侧会考虑系统架构、性能优化、并发处理、容错与故障处理、监控和日志、版本管理、安全性、合规性、资源管理等,云端则会考虑云服务选择、成本管理、弹性伸缩、数据传输和存储、服务级别协议(SLA)、云端安全等。
云端和端侧的主要区别在于推理过程,不得不提推理系统和推理引擎。推理系统保证算法推理的稳定性,推理引擎更多考虑具体的实施细节。
回归本源,从AI系统的全栈架构中看,可以分为五部分。一是体系架构,包括CPU、GPU、NPU等硬件设备、网络加速器和超级计算节点。二是编译编程,编译器在AI领域包括AI专用的编译器和传统的编译器。三是框架,包括常见的PyTorch、TensorFlow等AI推理框架和芯片厂商自研的推理引擎。四是开发层,包括Python等常见的编程语言。五是应用层,包括大模型、CV、NLP等。
端侧视觉算法设计注意点
- 严格约束功耗、热量、模型尺寸小于设备内存
- 硬件算力对推理服务来说不足
- 模型在边缘更容易受到攻击
- DNN平台多样,无通用解决方案
端侧视觉算法如何优化提升效果和性能
- 应用层算法优化:考虑到移动端部署的苛刻资源约束条件下,提供针对移动端部署的 AI 模型
- 高效率模型设计:通过模型压缩的量化、剪枝、蒸馏、神经网络结构搜索(NAS)等技术,减少模型尺寸
- 移动端框架-推理引擎:TensorFlow Lite,MNN、TensorRT,ONNX Runtime等推理引擎
- 移动端芯片:高效低功耗芯片支持,如 Google Edge TPU,NVIDIA Jetson等系列
两轮车载图像感知
算法落地
两轮车载图像感知目前的落地在泊车功能,我们会智能识别车道线,通过摄像头处理车道线的位置信息、类别信息,从而判别停车是否规范。
相机标定
相机标定的目的是为了确定相机内部和外部参数,将图像坐标系与世界坐标系之间建立联系。
相机标定广泛应用于计算机视觉、机器人视觉、三维重建、虚拟现实等领域,它为后续的图像处理和分析提供了基础数据,保证了数据的精度和准确性,从而提高了系统的可靠性和稳定性。
坐标系
- 世界坐标系:代表物体在真实世界里的三维坐标,坐标系用XwX_w、YwY_w、ZwZ_w表示;
- 相机坐标系:代表以相机光学中心为原点的坐标系,光轴与z轴重合,坐标系用XcX_c、YcY_c、ZcZ_c表示;
- 图像坐标系:代表相机拍摄图像的坐标系,原点为相机光轴与成像平面的交点,是图像的中心点,坐标系用X、Y表示;
- 像素坐标系:由于图像的基本单位是像素,所以该坐标系是图像上点在图像存储矩阵中的像素位置,坐标原点在左上角,坐标系用u、v表示。前三个坐标系的单位是毫米,而最后一个坐标系的单位是像素。
(1)世界坐标系到相机坐标系的变换:世界坐标系是真实世界的基准坐标系,我们需要知道相机坐标系下的点在真实世界中的位置,利用其次坐标变换矩阵。
(2)相机坐标系到图像坐标系的变换:该变换可以看做是简单的射影变换(将相机看作小孔成像模型),将三维坐标变换为二维坐标。其中f为相机的焦距。
(3)图像坐标系到像素坐标系的变换:设图像x方向每毫米有fxf_x个像素,y方向每毫米有fyf_y个像素。其中cxc_x、cyc_y是图像坐标系原点在像素坐标系下的坐标。
内参矩阵取决于相机内部参数,外参矩阵取决于相机坐标系和世界坐标系的位置。
相机畸变
除了坐标系的因素,还需要考虑相机畸变的因素。径向畸变(枕型畸变、桶型畸变)是由于透镜本身质量决定的,切向畸变是由于透镜和像平面不平行导致,属于工程安装误差。
张正友标定法
目前解决这一问题成熟的一套方法是张正友标定法,感兴趣的同学可以看一下相关的论文。
Reference: Zhang Z . A Flexible New Technique for Camera Calibration[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2000, 22(11):1330-1334.
泊车方案的做法与难点
如图是算法引擎的架构。用户端创建订单后,通过硬件平台拿到码流信息交给算法引擎。算法引擎完成码流信息的编解码工作,解析完后送到算法,算法处理后把结果反馈给硬件平台,硬件平台再反馈给用户端。
方案的落地
我们做了CPU和NPU两套方案,CPU方案的难点在于传统算法的瓶颈较高,硬件对算法的内存以及耗时要求也比较严苛。NPU方案的难点在于算法组件的内存和实现技术突破。
后续算法优化的方向
- 数据工程:多场景及多城市下的数据积累与数据仓库管理
- 开发流程:开发流程规范化,支持算法快速迭代部署