[文章]【Openharmony成长计划挑战赛】基于openharmony的道路维护方案

阅读量0
1
2

【项目名称】:基于openharmony的道路维护方案

【负责人 】 :艾如京

方案实施流程

【描述】:本方案致力于解决目标11:建设包容、安全、有抵御灾害能力和可持续的城市和人类住区中的交通问题,在此提出一种基于openharmony实现道路维护的方案,通过深度学习的方式对道路的裂缝进行实时检测,增加道路的可持续使用性。由于传统的道路裂缝检测精度和距离有限,大部分仍需要人工检测,而人工裂缝检测的过程又十分的繁琐,检测的实时性与高效性普遍较低。本方案基于海思HI3516DV300图像化处理方法,并部署深度学习模型,对道路裂缝进行检测。

【工程版本】

  • 系统版本/API版本:OpenHarmony 3.X小型系统
  • IDE版本:DeEco Device Tool Release 3.0.0.401
    【硬件基础】
  • Hi3516DV300开发套件

【模型】:本方案第一阶段在hi3516dv300主控芯片部署了两种深度学习模型;

【检测网】:考虑到HI3516DV300的NNIE支持的检测网,在检测网的选择上使用了以 darknet 为框架的yolov2模型。

  1. https://github.com/pjreddie/darknet:下载地址()

  2. ./darknet detector train hand.data cfg/resnet18.cfg:训练指令

  3. YOLO v2受到faster rcnn的启发,引入了anchor。同时使用了K-Means方法,对anchor数量进行了讨论,在精度和速度之间做出折中。并且修改了网络结构,去掉了全连接层,改成了全卷积结构。在训练时引入了世界树结构,将检测和分类问题做成了一个统一的框架,并且提出了一种层次性联合训练方法.data1.jpg

  4. 本次检测网选择了2000张带有道路裂缝的图像进行标注,在搭建好的服务器进行30200次迭代,直至模型收敛.

  5. Image部分image.jpg

  6. resnet18.cfg部分

    data4.jpg

  7. 模型训练:IOU值接近0.98 class值接近0.99999 Obj值在0.003以下

data3.jpg

  1. 在服务器进行权重的推理creak.jpg
    【分类网】分类网选择resnet18
    9. 分类网的训练数据集分为11000左右的道路裂缝图片,10000左右的无裂缝图片,在服务器上迭代300次,直至模型收敛。
    9. Creak_Image部分data_creak.jpg

    11.NoCreak_Image部分data_nocreak.jpg
    12. 训练模型分类.jpg

【模型转换】对pytorch训练得到的模型权重首先将转换为caffe模型

  1. 检测网得到的权重转换为caffe模型需要在caffe环境下并安装torch环境
    代码地址:https://github.com/ChenYingpeng/darknet2caffe
    
    转换命令:python darknet2caffe.py resnet18.cfg resnet18_new_final.weights resnet18.prototxt resnet18.caffemodel
    
  2. 分类网得到的权重转换为caffe模型需要在caffe环境下并需要依赖torch和torchvison
    代码地址:https://codeload.github.com/xxradon/PytorchToCaffe/zip/refs/heads/master
    
    转换命令:python example/resnet_pytorch_2_caffe.py
    

【openharmony源码】

  • 步骤1:注册码云gitee账号
  • 步骤2:在Ubuntu的用户目录下,分步执行下面的命令,安装git客户端git-lfs并配置用户信息。
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
  • 步骤3:在Ubuntu的用户目录下,分步执行下面的命,安装码云repo工具
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
  • 步骤4:分步执行下面的命令,配置python3环境
cd /usr/bin

sudo ln -s /usr/bin/python3.8  python
  • 步骤5:执行下面的命令,通过repo + https下载OpenHarmony主干代码
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板端。

【板端测试】

  1. 检测网生成的WK文件在openharmony中编译后得到可执行文件,并挂载板端,启动开发板应用驱动,加载可执行文件
    驱动命令 :insmod hi_mipi_tx.ko
    
    加载文件 :./ohos_yolov2_creak_demo 1
    

效果(在图片中检测率高于90%)yolo_creak.jpg

  1. 分类网生成的WK文件在openharmony中编译后得到可执行文件,并挂载板端,启动开发板应用驱动,加载可执行文件
    驱动命令:insmod hi_mipi_tx.ko
    
    加载文件:./ohos_cnn_creak_demo 0
    

效果(creak分类高达100%)cnn_creak.jpg

效果(NoCreak高达90%)cnn_Nocreak.jpg

【代码说明】code文件夹中存在五部分涉及到的核心代码:

  1. cnn_creak:为CREAK的分类网训练主要代码;
  2. cnn_creak_classify:为wk文件在板端部署分类网生成可执行文件所需的主要代码;
  3. creak_classify:为wk文件板端部署检测网生成可执行文件所需的主要代码;
  4. darnet-yolov2:为检测网模型服务器端训练权重模型的主要代码;
  5. pytorch2caffe:为torch权重文件转换为caffe文件的主要代码;

【接入hi3861v100】将3861作为信息的转换处理中心,第一接收来自hi3615的检测信息,第二将信息接入云端为后来的信息传输到客服端作准备。

  1. 以串口的方式将hi3861v100与hi3516dv300连接,hi3516将信息通过串口向hi3861发送信息
    将下面的代码中的内容加入到hi3516的线程中将信息经串口进行传输

输入图片说明

  1. hi3861接入华为云设备(接入代码为OC_Demo移植而来)
    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

回帖

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
链接复制成功,分享给好友