玩嗨 OpenHarmony:基于 OpenHarmony 的道路维护方案
原文引自电子发烧友论坛 HarmonyOS技术社区 《【OpenHarmony成长计划挑战赛】基于Openharmony的道路维护方案》
1. 功能描述
本设计方案致力于解决目标:建设包容、安全、有抵御灾害能力和可持续的城市和人类住区中的交通问题,在此提出一种基于OpenHarmony实现道路维护的方案,通过深度学习的方式对道路的裂缝进行实时检测,增加道路的可持续使用性。
由于传统的道路裂缝检测精度和距离有限,大部分仍需要人工检测,而人工裂缝检测的过程又十分的繁琐,检测的实时性与高效性普遍较低。本方案基于海思HI3516DV300图像化处理方法,并部署深度学习模型,对道路裂缝进行检测。话不多说,我们先上图上视频:
检测电路正视图:
视频展示:
2. 方案基线
2.1 工程版本:
- 系统版本/API版本:OpenHarmony 3.X小型系统
- IDE版本:DeEco Device Tool Release 3.0.0.401
2.2 硬件基础:
Hi3516DV300开发套件
2.3 学习模型:
本方案第一阶段在hi3516dv300主控芯片部署了两种深度学习模型。
3. 检测网
考虑到HI3516DV300的NNIE(编者注:是Neural Network Inference Engine 神经网络计算引擎的英文缩写)支持的检测网,在检测网的选择上使用了以 darknet 为框架的YOLO v2模型。
3.1 下载地址:
https://github.com/pjreddie/darknet
3.2 训练指令:
./darknet detector train hand.data cfg/resnet18.cfg
3.3 YOLO v2
受到faster rcnn的启发,引入了anchor。同时使用了K-Means方法,对anchor数量进行了讨论,在精度和速度之间做出折中。并且修改了网络结构,去掉了全连接层,改成了全卷积结构。在训练时引入了世界树结构,将检测和分类问题做成了一个统一的框架,并且提出了一种层次性联合训练方法。
3.4 检测训练数据
本次检测网选择了2000张带有道路裂缝的图像进行标注,在搭建好的服务器进行30200次迭代,直至模型收敛。
3.5 resnet18.cfg配置
framework > darkness-master > cfg > resnet18.cfg部分配置如下:
# subdivisions=1
# Testing
batch=48
subdivisions=8
height-384
width=640
channels=3
momentum=0.9
decay=0.0005
angle=0
saturation = 1.5
exposure = 1.5
hue=0.1
learning rate=0.01
burn in=10000
max batches = 300200
policy=steps
steps=100000, 200000, 250001
scales=.1,.1,.1
3.6 模型训练
IOU值接近0.98 class值接近0.99999 Obj值在0.003以下。
3.7 权重推理
在服务器进行权重的推理:
4. 分类网
4.1 分类训练数据
分类网的训练数据集分为11000左右的道路裂缝图片,10000左右的无裂缝图片,在服务器上迭代300次,直至模型收敛。Creak_Image部分:
NoCreak_Image部分:
4.2 训练模型
5. 环境搭建
5.1 模型转换
对pytorch训练得到的模型权重首先将转换为caffe模型。
5.1.1 检测网得到的权重转换
检测网得到的权重转换为caffe模型需要在caffe环境下并安装torch环境
代码地址:https://github.com/ChenYingpeng/darknet2caffe
转换命令:python darknet2caffe.py resnet18.cfg resnet18_new_final.weights resnet18.prototxt resnet18.caffemodel
5.1.2 分类网得到的权重转换
分类网得到的权重转换为caffe模型需要在caffe环境下并需要依赖torch和torchvison
代码地址:https://codeload.github.com/xxradon/PytorchToCaffe/zip/refs/heads/master
转换命令:python example/resnet_pytorch_2_caffe.py
5.2 开发环境
本次采用windows+ubuntu混合开发,具体操作流程可参考HarmonyOS Device社区:
https://device.harmonyos.com/cn/docs/documentation/guide/ide-install-windows-ubuntu-0000001194073744
5.3 模型量化
得到的caffe模型后使用Ruyistudio工具对.prototxt进行量化,并在此之前修改prototxt文件进行适配使得NNIE(编者注:是Neural Network Inference Engine 神经网络计算引擎的英文缩写)能够支持网络结构,最终生成WK文件。
5.4 板端适配
将得到的WK文件在OpenHarmony中基于SDK sampled的网络进行修改,适配 ,配置依赖 ,编译(在此之前OpenHarmony小型系统的主干代码已经整体编译通过),最终生成可执行文件,并挂在到HI3516DV300板端。
5.5 加载文件
检测网生成的WK文件在OpenHarmony中编译后得到可执行文件,并挂载板端,启动开发板应用驱动,加载可执行文件
驱动命令 :insmod hi_mipi_tx.ko
加载文件 :./ohos_yolov2_creak_demo 1
分类网生成的WK文件在OpenHarmony中编译后得到可执行文件,并挂载板端,启动开发板应用驱动,加载可执行文件
驱动命令:insmod hi_mipi_tx.ko
加载文件:./ohos_cnn_creak_demo 0
6. 实验效果
6.1 检测效果:
6.2 Creak分类效果:
Creak分类效果高达100%
6.3 NoCreak分类效果:
NoCreak分类效果高达97%
写在最后
我们最近正带着大家玩嗨OpenHarmony。如果你有好玩的东东,欢迎投稿,让我们一起嗨起来!有点子,有想法,有Demo,立刻联系我们:
合作邮箱:zzliang@atomsource.org