Vehicle-Detection-MNN-Yolo-Fastest介绍本项目为“openEuler”高校开发者大赛--城市关键路径机动车流量智能化监控项目。本项目利用RK3399与HopeEdge OS,通过深度学习方法对车辆进行实时检测,利用MNN深度学习推理框架与OpenCV实现车辆检测模型的移动端部署,利用检测结果,根据检测目标的欧氏距离判断前后帧检测车辆是否为同一辆车,对车辆进行计数。 源文件:https://github.com/yss9701/Vehicle-Detection-MNN-Yolo-Fastest 软件架构目录说明: ./lib为部署于开发板的动态链接库,需放置于开发板/usr/lib目录下,或放置于其他目录下并指定搜索路径。 ./src为Qt工程,其中.pro文件需根据主机实际路径更改。 ./script为脚本,包括编译脚本、视频处理脚本等。 ./model为MNN转换后的模型与量化后的模型及MNN编译产物。 ./demo为车辆检测结果展示,视频左上角展示出车辆计数与检测帧率。 硬件环境:Firefly-RK3399开发板 开发环境:Ubuntu20.04.2 Lts,Qt 5.12.9,gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu,MobaXterm 11.0 模型训练:TensorFlow-gpu 2.2 模型部署:MNN 1.0.2,OpenCV 3.4.9,protobuf 3.12.0,gcc/g++ 4.9 安装教程1、利用TensorFlow2.2,搭建Yolo-Fastest模型。将UA-DETRAC数据集处理为VOC格式,对模型进行训练,后对检测头进行剪枝,压缩模型,重训练恢复精度,将模型结构保存与参数分开保存,并进行模型固化,产生pb文件,具体过程可参考此项目。 2、在Ubuntu16.04中安装交叉编译工具链, 安装qt, 安装GCC工具链与protobuf。 交叉工具下转地址:https://download./archive/qt/5.12/5.12.9/ 交叉编译工具搭建:https://blog.csdn.net/hl1796/article/details/90205218 执行sudo ./auto.sh时,出现Project ERROR: Cannot run target compiler 'aarch64-linux-gnu-g++'. 的报错。是由于用sudo执行会重设环境变量,而sudo的环境变量没有aarch64-linux-gnu-g++的目录路径,可以用sudo -i ./auto.sh表示使用root的权限但环境不变。或者添加环境变量到/etc/sudoers,参考:https://cloud.tencent.com/developer/article/1650340 3、在主机端源码编译MNN,编译产物为模型转换与模型量化工具。 http://www.360doc.com/content/22/1202/16/40492717_1058541855.shtml 4、在主机端源码交叉编译MNN,编译产物为MNN动态链接库。 5、在主机端源码交叉编译OpenCV,编译产物为OpenCV动态链接库,编译脚本为./script/build_3399.sh。 http://www.360doc.com/showweb/0/0/1059122850.aspx 6、利用./script/pb.py进行模型输入尺寸固化,利用MNN进行模型转换与量化,将量化模型通过MobaXterm传送到开发板执行目录。 6、利用Qt Creator编程,交叉编译产生可执行文件,利用MobaXterm传送到开发板。 7、利用./script/video2img.py进行视频处理,将处理过的图像传送到开发板执行目录,执行可执行文件,得到检测与计数结果。 8、利用./script/img2cv.py对检测过的图像处理,合成视频。 记得修改图片尺寸大小,不然会有OpenCV(3.4.9) Error: Assertion failed的报错 还有路径、图片数量需要修改 使用说明1、烧写HopeEdge OS镜像至开发板。 2、通过MobaXterm利用SSH登录开发板。 3、在Vehicle-Detection-MNN-Yolo-Fastest-main/src/路径建好文件夹img_3跟img_5 4、利用脚本处理视频为图像帧,放到img_3中,文件名00001.jpg依次类推。 5、执行./test运行QT编译好的文件 6、利用脚本将在img_5中处理过的图像合成视频。 参考 |
|