
链接:
https://www.zhihu.com/question/68126029/answer/3147949066
我是在自动驾驶做视觉感知算法,这里聊一下在实际工作中去做量产模型会做哪些内容。
一个量产模型需要做很多事情,比如行人,二轮车,车这种的动态目标检测 ,车道线检测,freespace检测,路沿检测,交通灯,交通指示牌,路标,静态障碍物检测等等。一般一个人会负责其中的1-3个任务的模型研发。
模型研发前期:
1. 数据:
在自动驾驶领域做模型研发数据是及其重要的,没有优质的数据源是不可能研发出符合实际需求的量产模型。所以数据方面需要花费很大的精力去采集数据,以及制定合适的标注规则。其中数据标注规则尤其重要,这不仅仅是对数据的理解,更是对模型训练及推理理解深入的直观体现,并且也是对业务需求端的理解体现。比如二轮车,是把人和二轮车作为一个整体,还是作为两个独立目标。车道线需要标注多少类合适,是否存在背景特征和车道线特征非常相似的背景。等等。
2. 模型:
一般情况下,我们会选择一个适合当前项目的开源模型作为一个起点base,之后会根据实际需求在base上面添加各种模块,让base模型具备更多的功能。比如,用detectron2 、mmdet或者maskrcnn作为base,他们只是一个2D检测模型的框架,远远达不到量产模型所要求的各种检测以及分割任务,所以我们会在这个base上增加很多任务的模块。
在模型整体架构设计的时候,需要考虑的因素会很多。比如,针对backbone 部分,输入的每帧数据分辨率都非常高,那么如何让backbone保持速度的同时,能够支持所有任务去做预测。对于模型的每个任务来说,是把所有任务共用一个backbone,还是其中几个类似的任务共用一个backbone,像检测任务放一起,分割任务另外放一起。还有如果芯片算力允许的条件下,是否可以考虑用时序模型?针对每个任务模块,需要确定每个子模块预测的物理量是什么。一般情况下,检测任务输出bbox+cls 即可,但是量产模型会针对实际需求去定位目标的细节部分或者输出3Dbbox。比如对车辆vehicle来说,还会输出车轮的角点位置。
3. 评测指标和测试集 :
训练完整个模型后,就需要评估模型在各个任务上的性能。评估量产模型的性能,并不能像论文中那样给出一个AP,mAP,mIOU,这些指标对于实际模型性能并没有指导作用。
一般情况下,会从多个维度去评估,比如对于检测任务,多少米内,各类别目标的precision和recall多少?bbox的稳定性如何?连续帧数据检测中漏帧的频率是多少?对于车道线任务,会更加关注远距离车道线检测的recall和precision,大曲率车道线的检出情况。
尤其是到了研发中后期阶段,会针对具体的问题case做针对性的优化。这个时候,就非常体现评价指标的重要性了。一方面需要确保模型在针对问题case优化之后,原始的性能不变,在那些问题case中性能是否得到改进,这个后面会说到。
测试集的建立也是非常重要,一方面它是帮助我们离线去发现模型的短板,另一方面,它能够客观的评估当前模型的整体性能如何。如果测试集建立的不全面,计算出来的指标虽然很好,但是到了实车阶段测试,未知的问题会一大堆。
模型研发中后期:
在经过前期的研发阶段,差不多已经打通了模型端->量化部署 端->后处理端->融合端->规控实车端整个链路。到了中后期,就是各个子链路相互之间的磨合、配合以及优化整个产品的具体问题。我们会在实车上面去发现模型的问题,做好相应的问题记录,在什么场景,出现的问题是什么,可能的原因是什么。
比方说:车道线检测模块,发现在网格线处容易断开,也容易出现误检,分叉线的检测不好,路面字符会对车道线检测带来一定影响。动态目标检测模块上,发现远处人群容易漏检,较长的卡车bbox回归不太稳定,车身镜面反射引起的误检。等等。
那么针对这一系列问题,就需要负责各模块的算法工程师 去逐一解决,这也是量产项目后期时候重点的工作内容。首先解决这些问题,并不是想解决哪个问题先解决,而是有个优先级顺序,最影响功能端使用的问题优先级最高,是首要解决的大问题。比如,上面提到的车道线检测在网格线处检测性能不好,这直接影响了自车的控车行为,那么是首要解决的问题。
一般解决问题的思路大致如下:先分析问题产生的原因,是数据方面的原因,还是模型本身?如果是数据,那么就需要想办法搞到类似的数据。如果是模型本身的问题,那么需要把问题分析的更深入,进一步定位出在模型的哪个阶段出现了问题。定位出原因后,那么就可以在这个点上去改进。还是上面说的网格线的检测问题,这很大程度上是训练数据稀少的问题,那么就需要收集这种case的数据,可以靠模型帮助收集,也可以用人力收集。
有个这种case的数据,就需要通过合适的策略方式去训练这批case数据,让模型在保证原性能的基础上,在该case问题上的性能有所提升。优化好模型后,还需要做大量的测试,确保优化的工作是得到正向收益的。当然有些问题靠模型可能很难解决,这就需要协同上下游的同事沟通,一起去解决。
这差不多是算法工程师做量产模型所涉及到的大概内容。
如何发布招聘?
如果你也想发布公司招聘岗位,博士/博士后岗位,请扫描以下二维码或者添加微信号:or_offer 联系我们的工作人员,添加请修改备注为:公司/学校+姓名+招聘!
微信公众号后台回复
实习:获取实习岗位投递方式
校招:获取校招岗位投递方式
社招:获取社招岗位投递方式
职场会客厅:获取职场相关直播链接和往期直播视频完整版
留学会客厅:获取留学直播链接和往期直播视频完整版
海外硕博申请:获取客服联系方式
求职群:获取加入【IT算法求职内推群】方式
留学群:获取加入【运筹学海外硕博申请群】方式

