PCIE_基于YOLO3D的目标检测算法移植与测试

Posted 算能开发者社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PCIE_基于YOLO3D的目标检测算法移植与测试相关的知识,希望对你有一定的参考价值。

本文档适用于SOPHGO(算能)BM1684-PCIE及对应通用云开发空间,主要内容:

  1. SOPHGO(算能)云平台环境搭建
  2. YOLO3D目标检测算法
  3. Demo文件准备
  4. 部署和测试
  5. 相关链接

1. SOPHGO(算能)云平台环境搭建

1.1. 开通云平台账号

注意:申请开通BM1684-PCIE通用云开发空间

参考: https://cloud.sophgo.com/tpu.pdf

1.2. 开发环境初始化

1.2.1 进入命令行模式,进去默认在/home/sophgo目录

1.2.2 切换成 root 权限

sudo -i

1.2.3 安装驱

cd /home/sophgo/bmnnsdk2-bm1684_v2.7.0/scripts
./install_driver_pcie.sh
ls /dev/bm*

如果可以看到以下设备节点,表示驱动安装成功:

1.2.4 加载Docker,并初始化环境

cd /home/sophgo/
apt install unzip
unzip bmnnsdk2-bm1684-ubuntu-docker-py37.zip
cd bmnnsdk2-bm1684-ubuntu-docker-py37/
docker load -i bmnnsdk2-bm1684-ubuntu.docker

1.2.5 通过脚本创建Docker容器

cd /home/sophgo/bmnnsdk2-bm1684_v2.7.0/
# 执行脚本创建Docker容器
./docker_run_bmnnsdk.sh

# 自动进入Docker容器
# 进行环境初始化
cd scripts/

# 更新 pip
/usr/local/bin/python3 -m pip install --upgrade pip

# 安装 nntc
./install_lib.sh nntc

# 安装sophon包
pip3 install /workspace/lib/sail/python3/pcie/py37/sophon-2.7.0-py3-none-any.whl
# 执行脚本 envsetup_pcie.sh 配置环境变量,这一步会安装一些依赖库,并导出环境变量到当前终端
source ./envsetup_pcie.sh

导出的环境变量只对当前终端有效,每次进入容器都需要重新执行一遍,或者可以将这些环境变量写入~/.bashrc,这样每次登录将会自动设置环境变量

1.2.6 Docker 常用命令

# 启动 Docker容器
docker start <CONTAINER ID>

# 查看正在运行的 Docker容器
docker ps

# 进入 Docker 容器 docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
docker exec -it <CONTAINER ID> bash

1.2.7 通过云空间文件系统拷贝代码到Docker容器中

打开云空间文件系统:

上传文件:文件会被存储在服务器的 /tmp 目录下

拷贝文件到Docker容器中:

Docker容器的workspace目录被映射到 /home/sophgo/bmnnsdk2-bm1684_v2.7.0/

cp /tmp/<待拷贝文件> /home/sophgo/bmnnsdk2-bm1684_v2.7.0/

注意:本教程后续步骤均在Docker容器中进行

2. YOLO3D目标检测算法

文档:https://ruhyadi.github.io/project/computer-vision/yolo3d/

代码仓库链接:https://github.com/ruhyadi/YOLO3D

2.1 功能介绍

  • 3D目标检测:给定图片和相机参数,检测图片中车辆、行人3D检测框,并将检测框显示在图片上返回。

2.2 应用场景

  • 自动驾驶:车辆、行人的3D目标检测是自动驾驶感知算法的重要模块。自动驾驶系统依靠检测出的目标实现自主躲避障碍物、路径规划等功能。

2.3 特色优势

  • 只需输入单张图片和对应的相机参数就能完成车辆、行人的3D检测,无需输入点云等其他模态数据。
  • YOLO3D基于YOLOV5检测网络和ResNet网络回归,目前算能芯片对以上模型推理效果均有优化,推理速度快;另外工具链对以上模型都有完整支持,部署简单快捷。

3. Demo文件准备

3.1 准备模型与数据

3.1.1 Demo及相关文件准备

# 下载Demo及所需BModel
git clone xxx(待补充)
cd YOLO3D/data/models
pip3 install dfn
python3 -m dfn --url http://219.142.246.77:65000/sharing/2jQr4iVEx
python3 -m dfn --url http://219.142.246.77:65000/sharing/ljUxPxCeB

# 执行脚本 envsetup_pcie.sh 配置环境变量,这一步会安装一些依赖库,并导出环境变量到当前终端
cd scripts/
source ./envsetup_pcie.sh

3.1.2 查看FP32 BModel的信息

命令:bm_model.bin --info xxxx.bmodel

cd YOLO3D/data/models/
# 查看模型信息
bm_model.bin --info resnet18.bmodel
bm_model.bin --info yolov5s.bmodel

resnet18.bmodel输出:

 yolov5s.bmodel输出:

 

4. 部署测试

测试样例图片为YOLO3D源码中的测试图片,可自行选用测试图片

4.1 环境配置

对于x86 PCIe平台,程序执行所需的环境变量执行source envsetup_pcie.sh时已经配置完成

4.2 Python例程部署测试(x86平台PCIe模式)

Python代码无需编译,无论是x86 PCIe平台还是arm SoC平台配置好环境之后就可直接运行。

4.2.1 FP32 BModel测试

测试步骤如下:

cd $YOLO3D/python
python3 yolo3d.py

部分输出:

4.2.3 测试结果

# 退出容器
exit

# 将输出图片复制到云空间文件系统
cp /home/sophgo/bmnnsdk2-bm1684_v2.7.0/YOLO3D/python/result/output_demo1.jpg /tmp/

在1.2.7云空间文件系统处将图片下载至本地查看:

 

5. 相关链接

样例开源仓库:https://github.com/sophon-ai-algo/examples

BM1684 BMNNSDK文档:https://developer.sophgo.com/site/index/document/6/all.html

编译工具用户开发手册: https://doc.sophgo.com/docs/2.7.0/docs_latest_release/nntc/html/index.html

量化工具用户开发手册: https://doc.sophgo.com/docs/2.7.0/docs_latest_release/calibration-tools/html/index.html

算能量化工具介绍及使用说明:https://www.bilibili.com/video/BV1DA4y1S75p?spm_id_from=333.999.0

官网视频教程:https://developer.sophgo.com/site/index/course/all/all.html

官网文档中心:https://developer.sophgo.com/site/index/document/all/all.html

官网下载中心:https://developer.sophgo.com/site/index/material/all/all.html

官网论坛:https://developer.sophgo.com/forum/view/43.html

以上是关于PCIE_基于YOLO3D的目标检测算法移植与测试的主要内容,如果未能解决你的问题,请参考以下文章

基于WDF的PCI/PCIe接口卡Windows驱动程序-如何为硬件移植驱动程序

创龙基于AM5728平台的PCIe通信案例

目标检测-YOLOv3

无人超市目标检测算法的选型

基于Transformer的目标检测算法学习记录

【目标检测算法解读】yolo系列算法二