【描述】:本方案致力于解决目标11:建设包容、安全、有抵御灾害能力和可持续的城市和人类住区中的交通问题,在此提出一种基于openharmony实现道路维护的方案,通过深度学习的方式对道路的裂缝进行实时检测,增加道路的可持续使用性。由于传统的道路裂缝检测精度和距离有限,大部分仍需要人工检测,而人工裂缝检测的过程又十分的繁琐,检测的实时性与高效性普遍较低。本方案基于海思HI3516DV300图像化处理方法,并部署深度学习模型,对道路裂缝进行检测。
【工程版本】
【模型】:本方案第一阶段在hi3516dv300主控芯片部署了两种深度学习模型;
【检测网】:考虑到HI3516DV300的NNIE支持的检测网,在检测网的选择上使用了以 darknet 为框架的yolov2模型。
https://github.com/pjreddie/darknet:下载地址()
./darknet detector train hand.data cfg/resnet18.cfg
:训练指令
YOLO v2受到faster rcnn的启发,引入了anchor。同时使用了K-Means方法,对anchor数量进行了讨论,在精度和速度之间做出折中。并且修改了网络结构,去掉了全连接层,改成了全卷积结构。在训练时引入了世界树结构,将检测和分类问题做成了一个统一的框架,并且提出了一种层次性联合训练方法.
本次检测网选择了2000张带有道路裂缝的图像进行标注,在搭建好的服务器进行30200次迭代,直至模型收敛.
Image部分
resnet18.cfg部分
模型训练:IOU值接近0.98 class值接近0.99999 Obj值在0.003以下
在服务器进行权重的推理
【分类网】分类网选择resnet18
9. 分类网的训练数据集分为11000左右的道路裂缝图片,10000左右的无裂缝图片,在服务器上迭代300次,直至模型收敛。
9. Creak_Image部分
11.NoCreak_Image部分
12. 训练模型
【模型转换】对pytorch训练得到的模型权重首先将转换为caffe模型
代码地址:https://github.com/ChenYingpeng/darknet2caffe
转换命令:python darknet2caffe.py resnet18.cfg resnet18_new_final.weights resnet18.prototxt resnet18.caffemodel
代码地址:https://codeload.github.com/xxradon/PytorchToCaffe/zip/refs/heads/master
转换命令:python example/resnet_pytorch_2_caffe.py
【openharmony源码】
sudo apt install git git-lfs curl -y
git config --global user.name "yourname" # 你自己gitee的用户名
git config --global user.email "your-email-address" # 你自己gitee绑定的邮箱地址
git config --global credential.helper store
curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > repo
sudo cp repo /usr/local/bin/repo
sudo chmod a+x /usr/local/bin/repo
pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests
cd /usr/bin
sudo ln -s /usr/bin/python3.8 python
cd ~
mkdir OpenHarmony_master
cd OpenHarmony_master
repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'
repo forall -c git checkout -b weekly_20220419
bash build/prebuilts_download.sh
【环境搭建】本次采用windows+ubuntu混合开发,具体操作流程可参考HarmonyOS Device社区
https://device.harmonyos.com/cn/docs/documentation/guide/ide-install-windows-ubuntu-0000001194073744
【模型量化】得到的caffe模型后使用Ruyistudio工具对.prototxt进行量化,并在此之前修改prototxt文件进行适配使得NNIE能够支持网络结构,最终生成WK文件。
【板端适配】将得到的WK文件在openharmony中基于SDK sampled的网络进行修改,适配 ,配置依赖 ,编译(在此之前Openharmony小型系统的主干代码已经整体编译通过),最终生成可执行文件,并挂在到HI3516DV300板端。
【板端测试】
驱动命令 :insmod hi_mipi_tx.ko
加载文件 :./ohos_yolov2_creak_demo 1
效果(在图片中检测率高于90%)
驱动命令:insmod hi_mipi_tx.ko
加载文件:./ohos_cnn_creak_demo 0
效果(creak分类高达100%)
效果(NoCreak高达90%)
【代码说明】code文件夹中存在五部分涉及到的核心代码:
【接入hi3861v100】将3861作为信息的转换处理中心,第一接收来自hi3615的检测信息,第二将信息接入云端为后来的信息传输到客服端作准备。
demo地址 https://www.aliyundrive.com/s/KRYE7BTpJvR 提取码: 28oe
根据实时的需求进行改进
进入华为云IOT设备接入平台
创建产品
自定义模型
注册设备
设置设备的wifi和连接华为云平台
对oc_demo/iot_config.h进行设置
#define CONFIG_AP_SSID "xxx" // WIFI SSID
#define CONFIG_AP_PWD "xxxxxx" // WIFI PWD
#define CONFIG_DEVICE_ID "xxxxx" //华为云上注册的设备ID
#define CONFIG_DEVICE_PWD "xxxxx" //华为云上注册设备时密钥
对oc_demo/app_demo_iot.c进行设置(与自定义模型保持一致性)
#define TRAFFIC_LIGHT_CMD_CONTROL_MODE "***" //属性
#define TRAFFIC_LIGHT_YELLOW_ON_PAYLOAD "***" //添加命令参数
3861进行编译,烧录,重启
3861在华为云上激活并连接,上传3516的信息并下发命令
【演示视频链接】
https://www.bilibili.com/video/BV1BN4y157yg?share_source=copy_web&vd_source=cf441a14d4361b263fbbab6cd9cb7484