玩嗨 OpenHarmony:基于 OpenHarmony 的道路维护方案

玩嗨 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