Demo分享丨看ModelArts与HiLens是如何让车自己跑起来的

Stella981
• 阅读 622

摘要:基于HiLens Kit已经基本开发完成,可部署到HiLens Kit,模型的选择为基于DarkNet53的YOLOv3模型,权重为基于COCO2014训练的数据集,而车道线的检测是基于OpenCV的传统方法实现的,可通过ModelArts AI Gallery与HiLens Kit全流程端云协同开发部署。

本文作者|历天一

点击传送门,先来看看最终视频效果吧→→(PS:请忽略背景音乐)!

Demo分享丨看ModelArts与HiLens是如何让车自己跑起来的

主体流程介绍

  1. (可选,忽略亦可,取决于摄像头质量,对于相机畸变较大的需要先计算相机的畸变矩阵和失真系数,对图片进行校正)图片校正;
  2. 截取感兴趣区域,仅对包含车道线信息的图像区域进行处理;
  3. 对感兴趣区域使用透视变换;
  4. 针对不同颜色的车道线,不同光照条件下的车道线,不同清晰度的车道线,根据不同的颜色空间使用不同的梯度阈值,颜色阈值进行不同的处理。并将每一种处理方式进行融合,得到车道线的二进制图;
  5. 提取二进制图中属于车道线的像素;
  6. 对二进制图片的像素进行直方图统计,统计左右两侧的峰值点作为左右车道线的起始点坐标进行曲线拟合;
  7. 使用二次多项式分别拟合左右车道线的像素点(对于噪声较大的像素点,可以进行滤波处理,或者使用随机采样一致性算法进行曲线拟合);
  8. 计算车道曲率及车辆相对车道中央的偏离位置;
  9. 效果显示(可行域显示曲率位置显示)。
  10. 检测驾驶过程中道路中其他车辆状态,显示车辆类别置信度,并通过YOLOv3进行检测车辆,然后返回的车辆检测框的坐标与当前坐标进行透视变换获取大约的距离作为车辆之间的距离dis

说明:

本Demo的主体框架基于HiLens Kit已经基本开发完成,模型的选择为基于DarkNet53的YOLOv3模型,权重为基于COCO2014训练的数据集,而车道线的检测是基于OpenCV的传统方法实现的,所以计算量较大,导致整体速度较慢。

关于部署和训练——基于ModelArts 和HiLens Kit的端云协同:

1)考虑到部署,已经测试过部署到HiLens Kit了,对了,也支持在HiLens Stuido运行模拟测试,更推荐在HiLens Studio哦,比较方便,而且不需要硬件支持,只需要在HiLens Kit或HiLens Studio上安装pillow库就行了,关于如何在HiLens Kit和HiLens Studio上安装第三方库,非常简单的哦,可参考:

在HiLens Kit上:https://bbs.huaweicloud.com/forum/thread-94316-1-1.html

在HiLens Studio上:https://bbs.huaweicloud.com/forum/thread-94317-1-1.html

2)如果想训练或优化,由没有硬件(比如GPU),那么很推荐使用ModelArts了,一站式开发,无缝衔接到HiLens Kit哦, 关于ModelArts的介绍可参考:https://www.huaweicloud.com/product/modelarts.html

同时也许还能提升下运行速度,这里介绍三种算法,亲测都可以部署到HiLens Kit推理使用哦,就在最新的AI Gallery(原AI市场)中哦,这里除了有算法,还有模型、数据集等等,很丰富,大家可以自己探索一下,同时还可以分享自己的算法给其他开发者,开发者订阅即可创建训练使用,很方便,相比于GitHub,不仅提供了源代码,还提供了用于训练的硬件资源,强大的Tesla V100 32GB版本哦。

Demo分享丨看ModelArts与HiLens是如何让车自己跑起来的

(1)YOLOv3_Darknet53,没错,就是著名的YOLOv3,经典的目标检测网络,后续又推出了YOLOv4、YOLOv5(暂称此名吧),AI Gallery也推出了YOLOv5的,不过由于PyTorch框架暂不支持模         型转换,所以暂时放弃了。

       关于YOLOv3_Darknet53的使用方法,算法界面介绍很详细,这里就不赘述了,可以参考使用,注意模型转换部分请参考这篇博文中模型转换部分哦:https://bbs.huaweicloud.com/blogs/199870

       算法备用链接为:https://marketplace.huaweicloud.com/markets/aihub/modelhub/detail/?id=2d52a07e-ccbd-420f-8999-2ea7b4bdd691

     (2)**YOLOv3_Resnet18(GPU)**,如果我们只想做车辆的检测或者为了简化模型,提高速度,可以选用主干网络为Resnet18的YOLOv3,网络更轻量,速度会快一些哦。

       同样给上链接:https://marketplace.huaweicloud.com/markets/aihub/modelhub/detail/?id=948196c8-3e7a-4729-850b-069101d6e95c

     (3)**YOLOv3_Resnet18(Ascend 910)**,和上面(2)版本差异不大,主要改为由GPU换为Ascend 910训练的,大家可自由选择哦。

       链接为:https://marketplace.huaweicloud.com/markets/aihub/modelhub/detail/?id=7087008a-7eec-4977-8b66-3a7703e9fd22

好了,算法部分解决了,数据怎么办呢?ModelArts的AI Gallery同样想到了,提供了数据集哦,免费订阅,下载到自己的OBS导入就能用了(注意OBS需要一定花费),这里我也提供了开源数据集的5164张人车图片,供大家使用哦,上链接:https://marketplace.huaweicloud.com/markets/aihub/datasets/detail/?content_id=a337272b-6918-4282-83d6-2b15e2a4c716

那么数据集和算法都有了,该训练了吧,在ModelArts上可以很好完成,凭借强大的Tesla V100 32GB或Ascend 910可以很快完成哦。

上述整体操作流程部分可参考下述博文完成https://bbs.huaweicloud.com/blogs/199870

运行效果:

完成执行如视频中所示处理的一帧需要约300ms,也就是FPS约为3,不较慢,需要优化。我觉得还有很大优化空间,比如:

(1)预处理和后处理很费时间,真正推理很快,可以从这方面加速,不知道开启多线程是否有提升,应该有吧;

(2)应该可以更好发挥专用硬件,记得好像有DVPP和AIPP吧,可以用来做色域转换的操作;

(3) YOLOv3的后处理解析比较麻烦,这里用的是COCO的80类,但可以只用person、car两类,或者再加一点,同时nms也比较费时间,如果能用算子实现,融合到om模型中,会提速很多;

(4)这里使用的是Python,如果用C++应该会提升一些,执行效率会高很多吧。

(5)优化提速要根据硬件性能,对费时的部分做分析,以最大压榨硬件性能,需要做针对性、定制化地优化,我个人理解很浅,希望有熟悉的同学指教。

备注:

  1. 本Demo所用模型、代码均来自开源代码,好像是吴恩达老师的一个课程涉及的项目,但找不到出处了,如果知道的同学,还请在在下方回复指教,谢谢了。
  2. 本Demo的模型精度以及运行速度不做保证,仅供学习交流使用。
  3. 其他未尽事宜,还请多多指教。
  4. 代码会开源的,敬请期待哦,谢谢。

本文分享自华为云社区《Demo分享 | 当自动驾驶遇到ModelArts,ModelArts AI Gallery与HiLens Kit开发》,原文作者:Tianyi_Li 。

点击关注,第一时间了解华为云新鲜技术~

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Nginx + lua +[memcached,redis]
精品案例1、Nginxluamemcached,redis实现网站灰度发布2、分库分表/基于Leaf组件实现的全球唯一ID(非UUID)3、Redis独立数据监控,实现订单超时操作/MQ死信操作SelectPollEpollReactor模型4、分布式任务调试Quartz应用
Stella981 Stella981
3年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
可莉 可莉
3年前
2021 最顶级 React 组件库推荐
点上方蓝字关注公众号「前端从进阶到入院」作者丨MaxRozen译者丨王强策划丨小智AntDesign!(https://oscimg.oschina.net/oscnet/a85c35f23bd04e5da6a1e5e68a24119b.png)项目链接:AntDesignh
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
35岁是技术人的天花板吗?
35岁是技术人的天花板吗?我非常不认同“35岁现象”,人类没有那么脆弱,人类的智力不会说是35岁之后就停止发展,更不是说35岁之后就没有机会了。马云35岁还在教书,任正非35岁还在工厂上班。为什么技术人员到35岁就应该退役了呢?所以35岁根本就不是一个问题,我今年已经37岁了,我发现我才刚刚找到自己的节奏,刚刚上路。