基于MiDas的深度估计算法移植与测试

课程全程将在SOPHGO(算能)云平台上进行。
本次课程将介绍:

  1. SOPHGO(算能)PCIE 云平台环境搭建
  2. MiDas的深度估计算法
  3. 通过BMNNSDK进行MiDas模型转换
  4. 实现算法的移植
  5. 部署和测试
  6. 相关链接

版本环境: 本次课程使用的版本环境适配 SOPHON SDK V2.7.0 和 SOPHON SDK V3.0.0 版本,其他版本可能会出现不兼容的情况。目前课程的云环境版本是SOPHON SDK V2.7.0  

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

1.1. 开通云平台账号   

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

1.2. 开发环境初始化  

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

基于MiDas的深度估计算法移植与测试_第1张图片

 1.2.2 安装驱动  

# 切换成root权限 sudo -i
cd /home/sophgo/bmnnsdk2-bm1684_v2.7.0/scripts
bash ./install_driver_pcie.sh

执行ls /dev/bm*, 如果可以看到以下设备节点,表示驱动安装成功: 

 

1.2.3 加载Docker,并初始化环境  

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

1.2.4 通过脚本创建Docker容器

cd  /home/sophgo/bmnnsdk2-bm1684_v2.7.0/
bash ./docker_run_bmnnsdk.sh

# 自动进入Docker容器
cd /workspace/scripts && bash install_lib.sh nntc

# 每次进入镜像都要source 
source /workspace/scripts/envsetup_pcie.sh 

#  安装sophon包
pip3 install /workspace/lib/sail/python3/pcie/py37/sophon-2.7.0-py3-none-any.whl

可以通过python3 -c "import sophon.sail" 来检查是否出现问题   
基于MiDas的深度估计算法移植与测试_第2张图片

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

打开云空间文件系统:   

基于MiDas的深度估计算法移植与测试_第3张图片

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

基于MiDas的深度估计算法移植与测试_第4张图片

 拷贝文件到Docker容器中: 
Docker容器的workspace目录被映射到 /home/sophgo/bmnnsdk2-bm1684_v2.7.0/

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

2. MiDas的深度估计算法  

仓库链接: https://github.com/isl-org/MiDaS

论文链接: https://arxiv.org/abs/1907.01341v3 

hub链接: https://pytorch.org/hub/intelisl_midas_v2/ 

MiDaS从单个图像计算相对逆深度。
基于MiDas的深度估计算法移植与测试_第5张图片

 

3. 通过BMNNSDK进行MiDas模型转换  

3.1 下载项目文件 

git clone xxx(待更新)

3.2 准备推理的模型 

cd MiDas/v2.7.0/scripts
bash download_from_nas.sh

3.3 生成FP32 BModel 

BMNETP是针对pytorch的模型编译器,可以把pytorch的model直接编译成BMRuntime所需的执行指令。pytorch的模型在编译前要经过torch.jit.trace(见pytorch文档),trace后的模型才能用于编译。在编译模型的同时,可选择将每一个操作的NPU模型计算结果和CPU的计算结果进行对比,保证正确性。 可参考文档 https://doc.sophgo.com/docs/3.0.0/docs_latest_release/nntc/html/usage/bmneto.html

执行以下命令转为bmodel并复制到测试路径

bash gen_fp32bmodel.sh

部分输出:

基于MiDas的深度估计算法移植与测试_第6张图片

 

3.4 查看模型相关信息   

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

bm_model.bin --info ../dataset/midas_s_fp32b1.bmodel

基于MiDas的深度估计算法移植与测试_第7张图片 

 

命令:bmrt_test --bmodel xxxxxxx.bmodel

bmrt_test --bmodel ../dataset/midas_s_fp32b1.bmodel

基于MiDas的深度估计算法移植与测试_第8张图片

 

3.5 分层量化: 生成INT8 BModel  

int8 模型是原始fp32模型量化后得到的。量化是指将信号的连续取值近似为有限多个离散值的过程。可理解成一种信息压缩的方法。在计算机系统上考虑这个概念,一般用“低比特”来表示。 BM168X支持INT8量化模型的部署。在通用流程中,需要先借助于算能提供的量化工具对fp32模型进行量化。 ​Qantization-Tools 如下图所示,是算能科技自主开发的网络模型量化工具,它解析各种已训练好的32bit浮点网络模型,生成8bit的定点网络模型。该8bit定点网络模型,可用于算能科技SOPHON系列AI运算平台。在SOPHON运算平台上,网络各层输入、输出、系数都用8bit来表示,从而在保证网络精度的基础上,大幅减少功耗,内存,传输延迟,大幅提高运算速度。  

基于MiDas的深度估计算法移植与测试_第9张图片

 量化的流程是:  

  • 使用量化数据集生成lmdb格式数据  
  • 生成FP32 umodel
  • 生成INT8 umodel
  • 精度测试 (可选)  
  • 生成INT8 bmodel


SophonSDK v3.0版本中,提供了使用一键假数据实现量化,对应脚本gen_int8bmodelfake.sh  

通过执行以下命令可以生成 INT8 bmodel (这里不涉及精度测试,过程用时较长)。  

bash gen_int8bmodel.sh

部分输出:

基于MiDas的深度估计算法移植与测试_第10张图片

 

4. 实现算法的移植

要在x86 PCIe平台使用bm_opencv可添加环境变量如下:   
export PYTHONPATH=$PYTHONPATH:$REL_TOP/lib/opencv/pcie/opencv-python/
 

5. 部署和测试

5.1 Python示例程序测试

执行以下命令即可实现推理(路径已经在内部处理完毕)

cd ../python
# bmcv + FP32 BModel example
python3 midas_bmcv_inference.py #BModel默认使用../dataset/midas_s_fp32b1.bmodel
# opencv + INT8 BModel example
python3 midas_opencv_inference.py --bmodel ../dataset/midas_s_int8b1.bmodel

输出:

bmcv + FP32 BModel:

基于MiDas的深度估计算法移植与测试_第11张图片

 opencv + INT8 BModel:

基于MiDas的深度估计算法移植与测试_第12张图片

 5.2 获得推理生成的图片

注意: 由于是在Docker容器中,如果想要看到推理的可视化结果需要退出容器,并打开Docker容器映射的文件夹,在对应位置将图片拷贝到/tmp 文件夹下后可在云平台文件系统中下载。

# 退出容器
exit
# 进入Docker容器映射的文件夹,即Docker容器中的 workspace/目录
cd /home/sophgo/bmnnsdk2-bm1684_v2.7.0/
# 打开midas项目, ${midas}即项目所在路径
cd ${midas}/python
# 拷贝需要的推理结果图片
cp output.* /tmp/

如图所示  

基于MiDas的深度估计算法移植与测试_第13张图片

 查看color图:

基于MiDas的深度估计算法移植与测试_第14张图片

 

6. 相关链接   

样例开源仓库: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.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 

你可能感兴趣的:(TPU实战课,docker,算法,python)