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

注意:由于SOPHGO SE5微服务器的CPU是基于ARM架构,部分步骤将在基于x86架构CPU的开发环境中完成

  1. 初始化开发环境(基于x86架构CPU的开发环境中完成)
  2. 模型转换 (基于x86架构CPU的开发环境中完成)
  3. FALSR模型推理测试(处理后的FALSR项目文件将被拷贝至SOPHGO SE5微服务器上推理测试

1. 初始化开发环境 (基于x86架构CPU的开发环境中完成)

1.1 准备开发环境

开发环境是指用于模型转换或验证以及程序编译等开发过程的环境,目前只支持x86,需要使用我们提供的基于Ubuntu16.04的docker镜像。

运行环境是具备Sophon设备的平台上实际使用设备进行算法应用部署的环境,有PCIe加速卡、SM5模组、SE5边缘计算盒子等,所有运行环境上的BModel都是一样的,SDK中各模块的接口也是一致的。

开发环境与运行环境可能是统一的(如插有SC5加速卡的x86主机,既是开发环境又是运行环境),也可能是分离的(如使用x86主机作为开发环境转换模型和编译程序,使用SE5盒子部署运行最终的算法应用)。

但是,无论使用的产品是SoC模式还是PCIe模式,都需要一台x86主机作为开发环境,模型的转换工作必须在开发环境中完成。

1.1.1 开发主机准备:

开发主机:一台安装了Ubuntu16.04/18.04/20.04的x86主机,运行内存建议12GB以上

  • 安装docker:参考《官方教程》,若已经安装请跳过
  # 安装dockersudo apt-get install docker.io# docker命令免root权限执行# 创建docker用户组,若已有docker组会报错,没关系可忽略sudo groupadd docker# 将当前用户加入docker组sudo gpasswd -a ${USER} docker# 重启docker服务sudo service docker restart# 切换当前会话到新group或重新登录重启X会话newgrp docker

1.1.2 SDK软件包下载:

  • 下载docker开发镜像(Ubuntu 16.04 with Python 3.7)
wget https://sophon-file.sophon.cn/sophon-prod-
s3/drive/22/03/19/13/bmnnsdk2-bm1684-ubuntu-docker-py37.zip
unzip bmnnsdk2-bm1684-ubuntu-docker-py37.zip
  • SDK软件包:BMNNSDK 2.7.0 patched
wget https://sophon-file.sophon.cn/sophon-prod-
s3/drive/22/05/31/11/bmnnsdk2_bm1684_v2.7.0_20220531patched.zip
unzip bmnnsdk2_bm1684_v2.7.0_20220531patched.zip

1.1.3 创建docker开发环境:

  • 加载docker镜像:
docker load -i bmnnsdk2-bm1684-ubuntu-docker-py37/bmnnsdk2-bm1684-
ubuntu.docker
  • 解压缩SDK:
tar zxvf bmnnsdk2_bm1684_v2.7.0_20220531patched/bmnnsdk2-
bm1684_v2.7.0.tar.gz
  • 创建docker容器,SDK将被挂载映射到容器内部供使用:
  cd bmnnsdk2-bm1684_v2.7.0# 若您没有执行前述关于docker命令免root执行的配置操作,需在命令前添加sudo./docker_run_bmnnsdk.sh
  • 进入docker容器中安装库:
  # 进入容器中执行cd  /workspace/scripts/./install_lib.sh nntc
  • 设置环境变量:
# 配置环境变量,这一步会安装一些依赖库,并导出环境变量到当前终端
# 导出的环境变量只对当前终端有效,每次进入容器都需要重新执行一遍,或者可以将这些环境变量写入
~/.bashrc,这样每次登录将会自动设置环境变量
source envsetup_cmodel.sh

2. FALSR模型

Paper:Fast, Accurate and Lightweight Super-Resolution with Neural Architecture Search

代码仓库链接:Fast, Accurate and Lightweight Super-Resolution models

FALSR是小米AI Lab提出的快速、准确且轻量级的图像超分辨率模型。

应用场景:

  1. 老相片翻新:低分辨率或者有残缺的老照片,可以通过该算法进行图像修复;
  2. 卫星图像遥感:在遥感领域,超分可以复原出更多的图片信息与细节;
  3. 医学影像:在医疗领域,超分可以将低分辨率的扫描图片还原出高清图片,有助于准确发现病灶;

特色优势:

  1. 以极低的成本实现AIOT设备的图片修复功能,从而衍生出各种各样的应用与发明;
  2. 基于BM1684的超分可以轻松部署于云端或者边缘端,方便开发者各种使用需求;

Demo演示:将低分辨率的图片转化成高分辨率的图片

3. 模型的转换和量化

3.1 准备模型与数据

3.1.1 准备Demo文件

在https://disk.sophgo.vip/sharing/uz7lAkv9c下载FALSR.rar并解压

3.1.2 准备模型下载

从FALSR pretrained_model中下载所需要的.pb模型,并将其放入Demo的`data/models`目录下。
链接中包含了FALSR-A.pb,FALSR-B.pb,FALSR-C.pb三种不同复杂度的模型,我们选择FALSR-A.pb作为演示的模型。

3.1.3 准备测试数据

网盘链接: https://pan.baidu.com/s/1UprVQHwqpgrDYfvwojmcwA?pwd=q94r 提取码: q94r 
将链接中的两个视频下载,并保存至Demo的`data/videos` 目录下

3.1.4 准备量化集

不量化模型可跳过本节。

以Urban100数据集为例,下载FALSR dataset中的Urban100,并将其放入Demo的`data/dataset`目录下。

3.2 生成FP32 BModel

执行以下命令,使用bmnett编译生成FP32 BModel,如果使用了其他的测试视频请注意修改`gen_fp32_bmodel.sh`中的输入参数shapes与视频长宽保持一致,shapes中第二个shape的长宽是第一个的两倍。

cd scripts
sh ./gen_fp32_bmodel.sh

部分输出:

执行完毕后在`/data/fp32model`目录下会生成`falsr_a_fp32.bmodel`文件,即转换好的FP32 BModel

查看FP32 BModel的信息:

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

# 查看模型信息
bm_model.bin --info falsr_a_fp32.bmodel

命令:bmrt_test --bmodel xxxxxxx.bmodel

bmrt_test --bmodel falsr_a_fp32.bmodel

3.3 生成INT8 BModel

不量化模型可跳过本节。

INT8 BModel的生成需要经历中间格式UModel,即:原始模型→FP32 UModel→INT8 UModel→INT8 BModel。

执行以下命令,将依次调用以下步骤中的脚本,生成INT8 BModel:

sh ./gen_int8bmodel.sh

若出现`AssertionError`,可将报错处`assert`语句注释后重新调用脚本

3.3.1 生成LMDB

需要将原始量化数据集转换成lmdb格式,供后续校准量化工具Quantization-tools 使用。更详细信息请参考:准备LMDB数据集

需要从数据集图片生成LMDB文件,具体操作参见`tools/create_lmdb.py`, 相关操作已被封装在 `scripts/create_lmdb.sh`中,执行如下命令即可:

sh ./create_lmdb.sh

上述脚本会在`data/lmdb`目录中生成lmdb的文件夹,其中存放着量化好的LMDB文件:`data_1.lmdb`和`data_2.lmdb`。若使用了其他的测试视频,请注意根据模型输入要求修改脚本中`create_lmdb.sh`命令中的`resize_width`和`resize_height`等参数。

3.3.2 生成FP32 UModel

执行以下命令,使用`ufw.tools.tf_to_umodel`生成FP32 UModel,若不指定-D参数,可以在生成prototxt文件以后修改:

sh ./gen_fp32umodel.sh

上述脚本会在`int8model/`下生成`*_bmnetp_test_fp32.prototxt`、`*_bmnetp.fp32umodel`文件,即转换好的FP32 UModel。

3.3.3  生成INT8 UModel

执行以下命令,使用修改后的FP32 UModel文件量化生成INT8 UModel:

sh ./gen_int8umodel.sh

上述脚本会在`int8model/`下生成`*_bmnett_deploy_fp32_unique_top.prototxt`、`*_bmnett_deploy_int8_unique_top.prototxt`和`*_bmnett.int8umodel`文件,即转换好的INT8 UModel。
该操作中对FP32的Model进行量化,将<u>中间层和输出层精度量化为INT8</u>,注意在该模型中YPbPr的输入层对精度较为敏感,对<u>Y和PbPr两个输入层不进行量化</u>。

3.3.4 生成INT8 BModel

将`FALSR/tools/int8u_to_bmodel.py`中的`prec`参数注释后,执行以下命令,使用生成的INT8 UModel文件生成INT8 BModel:

sh ./int8u2bmodel.sh

上述脚本会在`int8model/`下生成`*_int8.bmodel`,即转换好的INT8 BModel,使用`bm_model.bin --info`查看的模型具体信息如下:

4. FALSR模型部署测试(主要在SOPHGO SE5或云空间上进行)

下载测试数据后,将测试视频放至`data/videos`,转换好的bmodel文件放置于`data/models`。

> 已经转换好的bmodel文件可从这里下载,提取码:xtqp

4.1 环境配置

4.1.1 arm SE5

将在处理好的FALSR项目文件,压缩后拷贝至SE5微服务器上:

scp -r /FALSR username@<SE5_IP>:<filepath>

或通过云空间文件系统拷贝:

打开云空间文件系统:

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

对于arm SE5平台,内部已经集成了相应的SDK运行库包,位于/system目录下,只需设置环境变量即可。

# 设置环境变量
export PATH=$PATH:/system/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/system/lib/:/system/usr/lib/aarch64-
linux-gnu
export PYTHONPATH=$PYTHONPATH:/system/lib

您可能需要安装numpy包,以在Python中使用OpenCV和SAIL:

# 请指定numpy版本为1.17.2
sudo pip3 install numpy==1.17.2

在运行Python Demo时需要安装SAIL模块,详细步骤请参考《SAIL用户开发手册》的2.3.1小节。

4.2 C++例程部署测试

4.2.1 SE5平台

对于arm平台SE5,需要在docker开发容器中使用交叉编译工具链编译生成可执行文件,而后拷贝到Soc目标平台运行。

  • 在docker开发容器中交叉编译
$ cd cpp
$ make -f Makefile.arm # 生成falsr_test.arm
  • 将生成的可执行文件及所需的模型和测试视频文件拷贝到盒子中测试
# 样例,可根据各自情况修改路径
$ ./falsr_test.arm --bmodel=../data/fp32bmodel/falsr_a_fp32.bmodel --
video_path=../data/videos/test_270x480.mp4 --
result_path=./out_video_dir/output_test_270x480.mp4 --tpuid=0 --
out_imgs_path=./out_images_dir/

4.3 Python例程部署测试

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

$ cd python
$ python3 falsr_scipy.py --bmodel ../data/fp32bmodel/falsr_a_fp32.bmodel --
video_path ../data/videos/test_270x480.mp4 --out_path
./out_video_dir/output_test_270x480.mp4

使用SAIL模块的注意事项:对于INT8 BModel来说,当输入输出为int8时,含有scale,需要在处理时将输入输出乘以相应的scale。使用SAIL接口推理时,当sail.Engine.process()接口输入为numpy时,SAIL内部会自动乘以scale,用户无需操作;而输入为Tensor时,需要手动在数据送入推理接口前乘以scale。

4.4 测试结果

拷贝至云空间文件系统(/tmp)后下载至本地查看

测试视频(test_270x480)属性:

测试视频(test_270x480)第一帧:

导出视频(output_test_270x480)属性:

导出视频(output_test_270x480)第一帧:

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

SE5_FALSR超分辨率图像模型移植与测试相关推荐

  1. 黄浴:基于深度学习的超分辨率图像技术发展轨迹一览

    作者 | 黄浴 转载自知乎 导读:近年来,使用深度学习技术的图像超分辨率(SR)取得了显著进步.本文中,奇点汽车自动驾驶首席科学家黄浴对基于深度学习技术的图像超分辨率技术进行了一次全面的总结,分析了这 ...

  2. 重构世界的真实,6万奖金的超分辨率图像性能挑战赛邀你来战!

    "看得更清楚"是人类基本需求之一,致力于"看清"的超分辨率算法应用场景广泛.比如,将低清的珍贵老纪录片或受损的经典影片修复,让老游戏告别马赛克迎来"第 ...

  3. AIGC:Stable Diffusion(一项普通人就能实现的AI前沿科技)的简介、Stable Diffusion2.0的改进、安装、使用方法(文本到图像/图像修改/超分辨率/图像修复)之详细攻略

    AIGC:Stable Diffusion(一项普通人就能实现的AI前沿科技)的简介.Stable Diffusion2.0的改进.安装.使用方法(文本到图像/图像修改/超分辨率/图像修复)之详细攻略 ...

  4. 决赛评委阵容重磅公布!6万大奖,超分辨率图像性能挑战赛最后召集令!

    由声网Agora.RTC开发者社区主办的超分辨率图像性能挑战赛,自7月28日在DataCastle数据城堡开放报名通道以来,受到了社会各界的广泛关注! 开赛一个多月以来,不少国内外高等院校.科研院所. ...

  5. 谷歌像素递归超分辨率研究:怎么消灭低分辨率图像马赛克?

    最近,谷歌发布了一种把低分辨率图像复原为高分辨率图像的方法,参见机器之心文章<>.与最先进的方法相比,这篇论文提出了一种端到端的框架来完成超分辨率任务.它由两个卷积神经网络组成,一个是描述 ...

  6. 获取分辨率函数是什么_深度学习应用“Zero Shot”超分辨率重构图像

    超分辨率(SR)是一种提高图像分辨率的技术. 这些方法是从低分辨率(LR)图像中获得高分辨率(HR)输出.执行单图像超分辨率(SISR)的目的是在增加图像尺寸的同时使其质量下降的最小.应用范围很广,如 ...

  7. 【图像超分辨率】(SPSR)Structure-Preserving SR with Gradient Guidance

    Structure-Preserving Super Resolution with Gradient Guidance 摘要 1. 引言 2. 相关工作 3. 方法 3.1. 概述 3.2.架构细节 ...

  8. 【图像超分辨率】Deep Learning for Multiple-Image Super-Resolution

    Deep Learning for Multiple-Image Super-Resolution 摘要 I. 引言 A. 相关工作 B. 贡献 II. 提议的EVONET算法 III. 实验 IV. ...

  9. 【图像超分辨率】Meta-SR: A Magnification-Arbitrary Network for Super-Resolution

    Meta-SR: A Magnification-Arbitrary Network for Super-Resolution 摘要 1. 介绍 2. 相关工作 2.1 单图像的超分辨率 2. 2 m ...

  10. 【图像超分辨率】Image Super-Resolution by Neural Texture Transfer

    Image Super-Resolution by Neural Texture Transfer 摘要: 1.引言 2 相关工作 2.1 基于深度学习的SISR 2.2基于参考的超分辨率 3. 方法 ...

最新文章

  1. 由于应用universal link校验不通过_垃圾吊称重校验砝码2000kg市场行情分析
  2. 036_Hashtable和HashMap的区别
  3. 【Paper】31_[18]On a Dynamic Extension of the Theory of Graphs
  4. TensorFlow1.0正式发布,AI圈“互怼”那些事儿 | AI科技评论周刊
  5. 【解题报告】Leecode 643. 子数组最大平均数 I——Leecode 刷题系列
  6. 设计模式 之 工厂模式
  7. Linux 性能监测
  8. js list 合并_VIM学习笔记 脚本-列表(Script-List)
  9. 服务器远程ghost,神奇Ghost 轻松远程安装软件
  10. 体外诊断(IVD)行业系列四:快速崛起的独立医学实验室
  11. 中国第一代程序员潘爱民的程序人生
  12. Boardcast Receiver 源码分析:广播的动态注册、发送和接收过程
  13. android动态壁纸2.2.1,动态壁纸选择器
  14. Jetson TX2 power mode功耗模式
  15. 安全的网络通道——网络准入之二层准入
  16. POJ 2942 圆桌骑士 (点双学习笔记)
  17. 重大计算机学院院标,计算机学院召开2021年国家自然科学基金申报动员会
  18. Hibernate的几种查询方式 HQL,QBC,QBE,离线查询,复合查询,分页查询
  19. 二、PyQtGragh模块安装以及上手体验
  20. STM32三条总线(AHB、APB1、APB2)的外设映射情况

热门文章

  1. 直通车点击软件测试自学,【图片】最给力直通车点击软件,防御直通车恶意点击秒杀软件,可测试效果_直通车吧_百度贴吧...
  2. 英语单词辨析(同类单词)
  3. 乐动手环app下载安装_乐动手环app下载安装
  4. 微信wifi服务器地址,微信连WIFI服务器时钟不同步
  5. 企业邮箱客户端怎么选?哪个更好用?
  6. Box Cox Transformation
  7. LeetCode 506 Relative Ranks
  8. ARMv8基础架构之内存屏障(Memory Barriers)
  9. GauGAN (SPADE) 水记 (seg2img)
  10. message——UVM