赞
踩
点击上方“计算机视觉工坊”,选择“星标”
干货第一时间送达
文章导读
本文介绍视觉AI技术如何从学术领域的原型开发到企业产品的工程落地。从技术发展的过程讲到工程落地的瓶颈,最后说到当前产品中的应用流程。
不同时期的AI产品采用哪些计算机视觉技术?
计算机视觉技术在工业界的推进流程经历了图像处理——>深度学习——>图像处理+深度学习的过程,最后应用在自动驾驶,智能安防,医疗影像,移动机器人等行业。
早期调参
早期的智能产品中大多使用的是传统的图像处理技术,比如和图像关联最为密切的安防摄像头,ISP相关的3A算法大多采用一些直方图,阈值法等人工设计的规则来处理,智能算法相关的行人检测,车牌识别等也是基于梯度,颜色,形状等低维度特征用类似SVM的分类器做识别。由于算法的鲁棒性不足,工作量集中在不同场景的算法调优上。
中期爆发
自从2016年科技界的“黑天鹅”——AlphaGo下围棋事件带火了一波深度学习,后面的两年深度学习技术在各行各业井喷式的被应用,很多原先的图像检测算法都被后来的faster rcnn和yolo系列取代。深度学习的技术噱头一定程度上占据了市场,数据驱动的概念深入人心。
后期稳定
相比图像处理提取的低维特征,深度神经网络能够更好的在高维空间中区分物体。但也只是CNN在特征提取上有明显优势,视觉算法中很多其他功能的开发仍然依赖传统技术,并不是因为前沿技术本身的问题,而是部分产品功能采用传统方法已经足以解决特定问题,从商业角度没有必要为了1%的提升增加10%的成本。比如自动驾驶视觉感知中,深度神经网络主要应用于目标检测和语义分割模块,像在线标定,图像拼接,单目测距,多目标跟踪,传感器融合等方面还是传统方法居多。
前沿技术的精度、速度为什么很难在AI产品中掀起波澜?
越是稳定的产品,技术的变更带来的工作量就越多,通常一个结构体增加一个字段都需要多个部门的共同评审,所以技术的变革会带来很多成本:
1、不同的依赖项需要重新搭建环境
2、不同框架实现的算法要重新移植
3、新的算法要重新部署和验证
4、不同硬件提供的SDK适配性不好
产品开发一般会采用一些经典算法,有具体场景、大量数据的加持以及后端处理,得到的效果基本不会差。
所以工业领域不是站在技术顶端的人,只要所采用的模型能够解决实际问题即可。
能用:准确性达标;
实用:速度达标;
好用:准确率速度达到平衡且不太占用硬件资源;
AI产品对前沿技术关注哪些问题?
AI产品受限于数据和场景两大因素。由于深度学习等方法采用的是有监督的学习方式,数据的数量和多样性决定了算法的上限,但是自然场景中难免会有奇怪的画面出现,不然特斯拉也不至于撞死人了。
所以解决单点问题能力强,但通用能力偏弱的特性,导致大多数AI产品的落地是以有限范围特定场景中解决用户的功能需求的定制化方案为主。
限定环境中对于产品技术的升级,我们一般关注:
这个技术要不要堆很多机器?
这个技术可解释性怎么样?
这个技术复现和上线要多少人日的工作量?
这个技术能否良好地插入我们现有的业务流中?
这个技术除了模型评估指标外能不能给业务指标带来提升?
这个技术的bad case有多差,用户能不能接受?
那么AI工程师的职责是什么?
虽然AI产品一般不采用所谓最前沿的技术,但是并不代表业界工程师们不用去跟踪实现最新方法。
在产品开发的背后,是几种甚至几十种可能方案对比后取优的结果;
需要跟踪、调研、预研前沿技术,消化吸收其中的思想,思考能否在自己的业务上起到正向的作用;
不断尝试对比,如最新技术在不同产品平台上的耗时,注意力模块在不同模型尺度下性能的提升;
如何研发一款AI产品?
企业打造一款AI产品更倾向于用简单的模型+各种优化技巧;在前沿技术以概率为判别的基础上增加其它的非参数算法对最差的情况做保证。
AI产品的开发分为两步:算法的原型开发和工程化部署。
1. 算法的原型开发:这里以自动驾驶中的目标检测网络为例,一方面考虑到车载控制器的硬件性能,需要对网络进行裁剪,压缩,剪枝。另一方面需要对不同的应用场景修改检测网络,网络模型的选取(小型化/轻量化);被检测的对象(人/车/静态物体等);网络层的回归(2D框/3D框)等。
总结:针对不同的场景需求,就需要相应的算法应变能力,不单单靠统一常规的检测网络。
2. 工程化部署:以车载ecu为例,算力有限,GPU资源有限,选取的网络模型需尽可能的小型化轻量化。程序框架包括三个部分:
输入模块:
(1)从相机驱动读取图像信息,并做畸变校正;
(2)加载检测网络的前向推理接口;
(3)读取车辆信息,包括自车的车体坐标,航向角等信息;以及这几个部分的处理,线程的统一调度,相互之间的数据传递等;
中间模块:
(1)基于检测框的结果加入测距功能;
(2)加入追踪功能进行帧间匹配和滤波消除检测框的抖动问题,并且给出目标ID。
(3)数据的处理滤波操作,加入后处理平滑功能,使检测框更平稳,提高测距性能。
输出模块:
(1)包括向融合决策层提供被检测物体的尺寸,类别,ID,距离等信息。
(2)定义感知层与融合层的通信接口协议来联调,发送和接受数据等。
最后反复测试,实验,然后暴露问题,分析问题,解决问题,如此循环。
上图中的原型开发和工程部署的关键在于:
1、原型开发中网络的搭建和调参是关键;
网络搭建考虑到实际情况的实时性、硬件性能,需考虑参数量较小的模型,以检测网络为例更倾向于单阶段式的网络,比如yolo系列;其次传统特征提取网络都用vgg,resnet等,现在mobilenet、shufflenet等一系列专门针对嵌入式端设计的网络能够大幅提高推理速度;最后为了进一步模型压缩,可以采用剪枝,量化,知识蒸馏等方法以较小的精度损失换取较大的速度提升。
调参主要根据数据集来决定,同一个模型在不同数据集上需要不同的参数。模型的推理效果跟样本数量有关,也跟训练网络的部分参数设置有关;如小物体检测和常规的车辆、行人检测候选框大小差异很大,可以适当修改训练网络的anchor值提升检测精度、以及修改损失函数的权重等;
2、工程部署中前后处理和C++推理是关键;
在原型开发阶段输入的数据都是经过筛选的一帧帧图片,但是工程运行时直接从摄像头拉取视频流,其中难免有运动模糊,摄像头遮挡等情况。所以针对不同的任务通常需要做一些前处理,后处理操作:
以车道线检测为例,前处理可能包括检测图像质量,去除运动模糊,截取感兴趣区域,颜色空间变换等。
后处理通常基于先验知识过滤掉一些误检查,或者平滑结果的操作。
将PC端的AI算法移植到嵌入式控制器中,不同控制器开发难度可能不一样。模型推理依赖的神经网络框架各家硬件厂商都有自己的SDK实现。目前生态环境最全面的是Nvidia的开发板,不论是Tensorflow,TensorRT等神经网络框架还是传统算法改成CUDA并行运算都有好的支持。其他的如高通的SNPE,德州仪器的TIDL在操作支持的全面性上仍然存在不足,并且不支持自定义的实现。
本文仅做学术分享,如有侵权,请联系删文。
下载1
在「3D视觉工坊」公众号后台回复:3D视觉,即可下载 3D视觉相关资料干货,涉及相机标定、三维重建、立体视觉、SLAM、深度学习、点云后处理、多视图几何等方向。
下载2
在「3D视觉工坊」公众号后台回复:3D视觉github资源汇总,即可下载包括结构光、标定源码、缺陷检测源码、深度估计与深度补全源码、点云处理相关源码、立体匹配源码、单目、双目3D检测、基于点云的3D检测、6D姿态估计源码汇总等。
下载3
在「3D视觉工坊」公众号后台回复:相机标定,即可下载独家相机标定学习课件与视频网址;后台回复:立体匹配,即可下载独家立体匹配学习课件与视频网址。
重磅!3DCVer-学术论文写作投稿 交流群已成立
扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。
同时也可申请加入我们的细分方向交流群,目前主要有3D视觉、CV&深度学习、SLAM、三维重建、点云后处理、自动驾驶、多传感器融合、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流、ORB-SLAM系列源码交流、深度估计等微信群。
一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。
▲长按加微信群或投稿
▲长按关注公众号
3D视觉从入门到精通知识星球:针对3D视觉领域的知识点汇总、入门进阶学习路线、最新paper分享、疑问解答四个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近3000星球成员为创造更好的AI世界共同进步,知识星球入口:
学习3D视觉核心技术,扫描查看介绍,3天内无条件退款
圈里有高质量教程资料、可答疑解惑、助你高效解决问题
觉得有用,麻烦给个赞和在看~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。