盘它!基于CANN的辅助驾驶AI实战案例,轻松搞定车辆检测和车距计算!( 二 )


昇腾AI基础软硬件平台,依托昇腾AI处理器强大的算力,借助异构计算架构CANN的软硬件协同优化充分释放硬件算力,为高效训练奠定了坚实的基础 。
我们知道,AI算法模型可以基于不同AI框架定义 。无论是华为开源AI框架昇思MindSpore,还是TensorFlow、PyTorch、Caffe等其他常用AI框架,CANN都能轻松转换成标准化的Ascend IR(Intermediate Representation)表达的图格式 , 屏蔽AI框架差异,让你快速搞定算法迁移,即刻体验昇腾AI 处理器的澎湃算力 。
此外 , 在全新一代CANN 5.0版本中,更是能通过图级和算子级的编译优化、自动调优等软硬件深度协同优化,全面释放硬件澎湃算力,达到AI模型训练性能的大幅提升 。针对包括分类、检测、NLP、语义分割在内的常用模型训练场景 , 均可实现性能翻番,让整个训练过程快到“飞”起 。
本项目使用的YOLOv4原始模型是基于Pytorch框架和昇腾AI处理器训练的,开发者们可以直接下载使用,也可根据实际精度需要重训:
https://www.hiascend.com/zh/software/modelzoo/detail/2/e2c648dc7ffb473fb41d687a1a490e28
AscendCL接口 , 助力开发者高效编程有了训练好的AI算法模型之后,就能借助AscendCL编程接口实现对视频车辆及车道线的智能检测了 。AscendCL(Ascend Computing Language)是一套用于开发深度神经网络推理应用的C语言API库,兼具运行时资源管理、模型加载与执行、图像预处理等能力,能够让开发者轻松解锁图片分类、目标检测等各类AI应用 。并且为开发者屏蔽底层处理器的差异,让开发者只需要掌握一套API,就可以全面应用于昇腾全系列AI处理器 。借助AscendCL编程接口 , 采用如下图所示的模块化设计,便能快速实现一个基于YOLOv4算法的目标检测应用 。

盘它!基于CANN的辅助驾驶AI实战案例,轻松搞定车辆检测和车距计算!

文章插图
首先介绍一下核心代码 。在预处理阶段,主要将opencv读到的图像转换成符合模型输入标准格式和尺寸的图像(源码如下图所示,完整版代码请查看文末链接) 。
1. 首先将opencv每帧读到的BGR图像转换成RGB图像,并通过模型输入所需宽高与原图像宽高得到缩放系数scale、偏移量shift、偏移系数shift_ratio 。2. 将原图像resize到新的宽高得到image_,构建一个全0的新图像,宽高和模型输入宽高相同 。将image_以np.array的形式填充到全0的图像中 , 不在偏移范围内的则都是0,将的图像的数据类型转换成np中32位浮点型 。3. 为了消除奇异样本数据的影像,进一步做归一化处理 。4. 最后将通道数换到图像的第一维度 , 返回新生成的图像和原始图像 。
盘它!基于CANN的辅助驾驶AI实战案例,轻松搞定车辆检测和车距计算!

文章插图
在推理阶段 , 调用acl_model中的execute函数执行模型(完整版代码请查看文末链接),预处理后的图像会被送至转成om的YOLOv4模型 , 返回推理结果 。
盘它!基于CANN的辅助驾驶AI实战案例,轻松搞定车辆检测和车距计算!

文章插图
盘它!基于CANN的辅助驾驶AI实战案例,轻松搞定车辆检测和车距计算!

文章插图
在后处理阶段中 , 后处理包括根据推理结果获取检测框坐标和置信度,使用NMS消除多余的边框 , 使用透视变换矩阵计算车距,用opencv检测车道线,最终绘制带有车辆检测框、检测框类别、车距和车道线的新图像 。
梳理一下整体开发流程:
1. 运行管理资源申请:用于初始化系统内部资源 , 此部分为固定的调用流程 。2. 加载模型文件并构建输出的内存:将训练好的模型转换成om离线模型并且从文件加载 。此时需要由用户自行管理模型运行的内存,根据内存中加载的模型获取模型的基本信息包括模型输入、输出数据的buffer大小 。由模型的基本信息构建模型输出内存,为接下来的模型推理做准备 。3. 数据预处理:对读入的图像数据进行预处理,然后构建模型的输入数据 。首先会对输入视频中的图像画面按每帧进行处理;然后由BGR转成RGB格式;接着使用resize将图像大小变成416x416,最后除以255进行归一化处理以消除奇异数据的影响 。4. 模型推理:根据构建好的模型输入数据进行模型推理 。5. 解析推理结果:基于推理得到的检测边框和各边框的置信度,使用NMS消除多余的边框,将新的边框和类别绘制在输出图像上 。这样,一个基于CANN开发的简易版AI辅助驾驶小应用就开发完成了,小伙伴们点击如下链接就能直接体验效果啦!https://www.hiascend.com/zh/developer/mindx-sdk/driveassist

推荐阅读