由华为云携手上海交通大学学生创新中心举办的“第二届华为云人工智能大赛 · 无人车挑战杯”总决赛已成功落下帷幕。来自电子科技大学的“暑期休闲队”,自身拥有扎实的模式识别、机器人等学科知识,借助华为云一站式AI开发管理平台ModelArts和端云协同解决方案HiLens,进行无人车模型开发与部署,最终获得季军。

“暑期休闲队”撰文分享其参赛体验,包括如何使用华为云ModelArts和HiLens实现无人车的目标检测,多源数据融合及行驶控制的能力等。
一 队伍背景故事
1 “我们为什么参加”
我们是来自电子科技大学自动化工程学院以及计算机科学与工程的五名研究生新生,因为研究生研究方向多为模式识别、机器人等领域,并且对人工智能技术非常感兴趣,因此在今年七月份的时候自发组织报名参加了今年的华为云无人车挑战赛。五位队员都有较为丰富的科研竞赛经历,且都是华为的忠实粉丝,对于这次全新的比赛充满了信心与热情。
2 “我们遇到了哪些困难”
首先是因为今年特殊的疫情原因,我们五个人前期无法集合在一起进行比赛项目的商讨以及规划,正式开始备赛是在九月初,因此我们的准备时间只有大概十五天,但是在学校学院的支持下,我们可以有一个比较好的调试场地,从开学也是直接进入高强度的开发工作中,在前往上海之前已经把基本功能实现。
在半决赛和决赛的过程中,主要是小车巡线功能对光线环境有些敏感,在决赛比赛中时出现了跑出轨道的情况,不过我们队伍负责巡线的队员通过丰富的临场调车经验,还是及时的解决了这个问题,最终也取得了不错的成绩。
3 “我们的欢乐时光”
现在回想一下我们备赛的日子,最欢乐的时光就是五个人在校园里调车的日日夜夜,一起面对技术难点,一起享受灵感实现的快乐,看着一台小车从什么都不会到最后实现了各种各样的功能。当然,在决赛的时候,最终能取得季军的成绩也让我们非常开心。

二 赛题介绍
小车需要在规定赛道上通过层层关卡,包括交通灯识别(出发&泊车)、弯道行驶、斑马线行人识别、限速解限速识别、自动泊车、竞速等。小车不仅仅要完成所有的赛点,还要跑得快。而这里考验的是参赛者的综合能力,包括车体结构、底盘控制、传感器、网络通信、云端数据处理、人工智能等多学科的知识,而难点在于将这些知识点融合贯通。参赛队员需要结合华为云人工智能平台(华为云ModelArts一站式AI开发与管理平台、HiLens端云协同AI开发应用平台)以及ROS操作系统对小车进行开发。

三 整体解决方案:
此次无人车大赛中参赛车辆主要有三个传感器:激光雷达和两个摄像头,分别是小车自身的摄像头以及HiLens Kit上的摄像头,而激光雷达+相机的多源数据融合解决方案正是无人驾驶领域最为主流的技术。我们队伍对每个传感器的作用进行了总结:
利用激光雷达进行可通行区域检测以及动态避障,利用小车摄像头进行车道线检测以及利用HiLens Kit进行目标检测以及相应的决策控制。
3.1 激光雷达通过获取点云数据在小车行驶前方的有效扇区内进行障碍均值坐标计算,给与有无障碍状态实现近距应急障碍检测,行人障碍检测,因此本车的一大亮点是当在行驶过程任意状态检测到障碍物都可以进行及时的刹车,在备赛过程中大大方便了我们的调试。
可行进区域检测通过对激光雷达对可行进区域边界进行检测,获得可行进区域均值点。



再通过阿克曼地盘运动边界确定前进点,并且获得期望方向。



我们利用上面两个技术完成了比赛中对于在人行道处对障碍物的检测以及顺利通过交叉路口两个任务
3.2 利用小车车头部分的摄像头进行车道线检测,检测方案如下:
Step1 :使用高斯滤波,均值滤波,大津法对图像进行处理。
Step2:在图像中逐行搜索边界点。
Step3:滤除不合理边界点。
Step4:使用最小二乘法对左右边线进行修复。
Step5:计算图像中线。
Step6:使用最小二乘法对中线进行修复。
Step7:使用PID计算转角。
车道线检测效果如下:

3.3再通过HiLens Kit进行目标检测, HiLens Kit是由华为云开发的多模态AI开发套件,使用的AI芯片是华为自研的Ascend 310芯片,具体16T的算力。同时,开发者不仅可以使用设备自带的摄像头,还可以外接摄像头,同时处理10-16路视频分析。HiLens Kit检测到各种目标后,通过socket协议发送给ROS端,并在ROS端进行一系列决策控制完成红灯停、绿灯行、人行道停止、限速牌限速、解限速牌解限速以及黄灯泊车一系列操作。
3.4小车整体实行方案如图:

ROS通信如图:

四 华为云ModelArts平台的使用
比赛需要利用ModelArts平台进行目标检测任务,检测包括红绿黄灯检测、限速解限速牌检测、人行道检测。
使用ModelArts平台进行模型搭建的流程包括:
数据获取与增强、数据集准备、模型选择与训练、模型转换
4.1 数据获取与增强
本次比赛除了官方提供的训练集外,在决赛阶段我们还额外增加了在测试场地与比赛场地的训练集,训练集的获取首先通过HiLens Kit摄像头捕捉到行驶路段的视频,保存到/tmp目录下,再通过tcp从HiLens 传到本地使用opencv间隔地从视频中截取图像作为我们的原始数据集。
此外,我们还利用了三种数据增强的方法,来解决数据量较少带来的过拟合问题,分别是horizontal flip、cutout和mix up。
horizontal flip就是水平镜像翻转,这个方法实现较为简单,但是镜像翻转使用时要注意只有当一个图像分布不具备视觉手性的时候,我们才能在不改变原先图像分布的前提下,使用镜像翻转来增强数据集,因为人行道、预选赛的红绿灯就不具备视觉手性,因此我们使用镜像翻转对这类图像来进行数据增强,转换效果如下:

Cutout和mixup是计算机视觉中常用的两种数据增强方法,Cutout是将图片的随机区域填充噪声,而mixup是一种运用在计算机视觉中的对图像进行混类增强的算法,它可以将不同类之间的图像进行混合,从而扩充训练数据集,增强效果如下:

4.2 数据集准备
Step1 下载OBS Browser,配置OBS桶,将原始采集数据上传至OBS桶内,并创建数据集。
对象存储服务(Object Storage Service)是一款稳定、安全、高效、易用的云存储服务,具备标准Restful API接口,可存储任意数量和形式的非结构化数据
对象存储服务OBS配置说明文档:https://support.huaweicloud.com/obs/index.html
OBS控制台说明文档:
https://support.huaweicloud.com/usermanual-obs/obs-usermanual-zh.pdf
再进入ModelArts平台的数据标注模块,创建数据集,选择物体检测,添加标签集。

数据集创建参考:
https://support.huaweicloud.com/engineers-modelarts/modelarts_23_0004.html
Step2 在ModelArts中进行标注
在“数据标注”页面单击“未标注”页签,此页面展示所有未标注的图片数据。单击任意一张图片,进入图片标注界面。用鼠标框选图片中的物体所在区域,然后在弹出的对话框中选择标签颜色,输入标签名称,按“Enter”键完成此标签的添加。标注完成后,左侧图片目录中此图片的状态将显示为“已标注”。如下图

ModelArts数据标注说明:
https://support.huaweicloud.com/exemlug-modelarts/modelarts_21_0011.html
4.3 模型选择与训练
在ModelArts里选择模型并创建训练任务,我们选择的模型是YOLO v3,YOLO是one stage的算法,相较于two stage的类似rcnn之类的模型的特点是速度快,这在无人车实时目标检测任务中非常重要。YOLO v3在v2基础上增加了网络复杂度,牺牲了少量速度来换取精度提升,且精度足够满足比赛需求。模型选择之后等待训练任务完成。

训练完成后可以通过可视化观察训练情况

4.4 模型转换
在ModelArts训练得到理想模型后,需要在HiLens Studio里面完成模型转化,生成昇腾芯片上可使用的模型(OM模型)(这一步也可以在HiLens Studio里进行),参考:
ModelArts平台模型转换工具指南:
https://support.huaweicloud.com/engineers-modelarts/modelarts_23_0107.html
HiLens Studio上模型转换工具指南:
https://www.huaweicloud.com/ascend/doc/atlas200dk/1.32.0.0(beta)/zh/zh-cn_topic_0209921678.html
五 华为云端云协同AI开发平台HiLens的使用
5.1 HiLens配置
使用HiLens Kit之前,需要开通HiLens服务。首先注册华为云账号,并完成实名认证,接着进入控制台选择登录HiLens管理控制台,完成HiLens的权限申请。 通过PC 与 HiLens Kit 组网后,通过web可以界面化地登录到HiLens Kit 管理平台,进行一键式操作链接无线网络。

5.2 HiLens Studio的使用
在HiLens控制台中进入HiLens Studio,首先需要新建一个project,在技能模板中我们可以选择无人车比赛的模板技能,并基于此模板进行修改,在project中我们主要有utils.py、socket_config.py以及main.py,其中utils.py用来对图片进行预处理、检测框的标注并输出类别、标注框坐标信息等功能,socket_config.py主要将检测结果编码并构建socket通信协议与ROS端进行信息交互,main.py用来调用这些python文件并且调用训练好的模型。,main.py文件中我们利用多线程避免因为socket通信造成的程序堵塞。
模型检测实际比赛效果如下:


六 亮点
(1) 鲁棒性好,我们的数据采集于多场景,因此在不同环境下检测效果较为稳定。
(2) 连续帧间检测稳定,我们针对每项分类单独设置置信度阈值,防止一帧检测到一帧检测不到,并且在决策时保证严格的条件再进行控制指令,避免因外界客观因素造成的误识别。
(3) 小车巡线能力强,如下图,在小车行驶在交叉路口的过程中,并没有完整的车道线,但依然可以通过补线操作实现巡线,并且图像处理速度快,因此我队参赛车辆可以接近满速跑完全程,也因此我队在半决赛与决赛中均给裁判团以及观众留下了极为深刻的印象。

(4) 多源数据融合提升决策效果,如以下两个例子:

通过识别墙体,帮助雷达寻找可行区域

识别到人行道后,告知转弯方向,(例如上图,告知将要左转),帮助小车巡线
七 ModelArts与HiLens联合开发感想
在人工智能发展迅速的今天,如何将人工智能算法与多学科交叉并落地实现真正的智能时代成为广大学者与研发者共同的目标。华为云平台开发的ModelArts与HiLens的联合使用给予不论是人工智能初学者还是经验丰富的工程师更为便捷高效的开发环境。本次比赛,这ModelArts与HiLens联合使用的解决方案对比赛提供了非常高质量的服务。其优点如下:
(1) 数据操作包括数据上传、数据标注以及数据集的发布极为方便。
(2) 算法市场中华为云以及广大开发者提供了针对各种任务,包括但不限于图像分类、目标检测、语义分割等任务的算法,使用者可以直接调参使用。
(3) ModelArts支持模型部署到多种生产环境,可部署为云端在线推理和批量推理,也可以直接部署到端和边。
(4) ModelArts训练的模型可以通过模型转化并协同HiLens开发相关技能,将技能直接部署到端侧设备,实现算法落地。
(5) HiLens端侧设备注册后可在设备管理处进行管理,包括查看、注销设备,以及一键升级设备的固件版本等。
(6) HiLens提供大量的技能模板,开发者可以基于各种模板进行集能开发与部署。
(7) 昇腾芯片加速使得模型推理更加迅速,使得时延更低。(电子科技大学自动化工程学院 贵兴泰)