首发极术社区
如对Arm相关技术感兴趣,欢迎私信aijishu20加入技术微信群。

操作系统:Ubuntu
版 本:20.04 LTS (18.04也一样)
假定当前目录:/root/demo/pb
模 型 文 件 : mobilenet_v1_1.0_224_frozen.pb

docker环境准备


  1. 更新包并安装一些必须的软件
sudo apt update
  1. 安装一些必须的组件
sudo apt install apt-transport-https ca-certificates curl gnupg unzip lsb-release
  1. 添加 Docker 官方的 GPG key到本地
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  1. 设置使用稳定版 stable repo.
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

如果要使用 nightly 或者 test repo. 把上面命令中的 stable 替换即可

  1. 再次更新源并安装docker
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
  1. 上面命令完成后,使用以下命令进行一下测试
sudo docker run hello-world

如果返回如下图中的信息,说明docker环境安装成功了,如果未成功请按上面步骤重新尝试。

仿真环境搭建


  1. 仿真镜像获取,如果访问国外网络速度很好,可以直接用以下命令从docker官方Hub摘取镜像。镜像挺大请耐心等待完成
sudo docker pull zepan/zhouyi
  1. 如果访问国外网络速度不好,可以使用下载百度网盘中的仿真镜像文件,然后本地载入。

链接:https://pan.baidu.com/s/1yaKBPDxR_oakdTnqgyn5fg 提取码:f8dr

3.解压镜像并导入到本地,注意镜像文件路径

gunzip zhouyi_docker.tar.gz
sudo docker load --input zhouyi_docker.tar
  1. 用以下命令检查是否导入成功,如果执行结果中出现下图所示内容,说明导入成功了
docker images

  1. 使用以下命令创建仿真环境
docker run -itd  -v /root/data:/root/data --name zhouyi  zepan/zhouyi  /bin/bash

其中 zhouyi 是使用镜像创建的容器名,可以根据需要设置

 -v /root/data:/root/data

为了方便文件的传输,使用以上参数把宿主中的 /root/data/ 目录映射到新创建的仿真环境中,也就是说当我们把文件上传到宿主 /root/data/ 下时,仿真环境中的 /root/data/目录下就会有相应的文件,无须再用 docker cp 命令逐个复制

其中 -d 参数是指定容器在后台运行,也就是说关闭当前窗口,容器一样在运行。

关闭窗口后如果我们想再次进行仿真环境,可以使用以下命令

docker  attach  zhouyi

其中 zhouyi 就是是创建时的容器名或者窗口的 ID(下图红框中),可以用以下命令获取

docker ps

仿真环境测试及模型量化


  1. 容器仿真环境验证。使用以下命令查看已经启动的容器
docker ps

如果执行结果中有上图中标红的内容,我们可以直接附加到已运行容器

docker  attach  zhouyi

如果容器没有运行,可以使用以下命令先启动

docker  start  zhouyi

当终端中出现上图中的内容时,说明已经进入到窗口仿真环境了

此时我们选切换到示例目录,此处使用的是pb格式模型,

cd /root/demos/pb

此时我们执行环境验证命令

aipubuild config/resnet_50_run.cfg

根容器分配到的配置,此命令消耗时间从长短不同,命令执行完成即说明环境正常,此时屏幕内容应类似如下图

仿真环境验证无误,下面可以根据需要进行相应的模型量化了

  1. 网络输出名字的获取,所需工具 Netron(开源) 点此下载
    用Netron打开模型文件,拖动到最底部,如图点一下输出层,有个弹出层
    其中name就是输出层的名字

3.制作用于量化的矫正数据集和标签

准备一定数量的样本图片放在目录下

/root/demos/pb/dataset1/sample

然后把所有图片和对应的标签写到文件,每行一个,
格式为

图片名 空格  标签
1.jpg  0
2.jpg  0
.....
3.jpg  1
4.jpg  2

把以上内容保存到

/root/demos/pb/dataset1/sample_label.txt

把示例生成矫正数据集脚本复制到目录

cp /root/demos/pb/dataset/preprocess_dataset.py /root/demos/pb/dataset1/preprocess_dataset.py

主要修改下面几个地方

img_dir='./sample/'
label_file='./sample_label.txt'#RESNET PARAM
input_height=224
input_width=224
input_channel = 3
mean = [127.5, 127.5, 127.5]
var = 127.5

然后执行脚本生成矫正样本数据集和标签

cd ./dataset1
python3 ./preprocess_dataset.py

执行完成后在 dataset1 目录下会生成以下两个文件

  1. 准备量化时测试用文件input_cup.bin
    修改 gen_inputbin.py 文件
vim ./model/gen_inputbin.py

主要是图片的文件路径,在此我们用一张杯子的图片做输入

input_height=224
input_width=224
input_channel = 3
mean = [127.5, 127.5, 127.5]
var = 1img_name = "./cup.jpeg"......fw = open("input_cup.bin", "wb")
fw.write(data)
fw.close()
print("save to input.bin OK")

执行以下命令生成 input_cup.bin 文件

python3 gen_inputbin.py

运行结果如下说明生成成功

  1. 模型量化配置文件
    在此使用的已经固化好的PB模型 【mobilenet-v1-1.0-224.pb】,首先我们创建一个量化配置文件,我们复制示例配置文件然后修改即可。也可以用自己导出的模型,导出模型 ,
cp config/resnet_50_run.cfg config/mobilenet-v1-1.0-224.cfg

然后我们用vim进行修改此配置文件,关于vim的基本操作在此不多说了。

vim config/mobilenet-v1-1.0-224.cfg

几处需要修改的地方如下图中标红之处

[Common]
# 仿真环境用run 真实环境 build
mode=run  [Parser]
# 目前根据观察量化时一些中间文件会用,应该可以随意
model_name = mobilenet_v1
# 根据名字猜测为检测模型量化时后处理相关
detection_postprocess =
# 分类模型 image_classification 同理猜测检测模型 image_detection
model_domain = image_classification
# 网络的输出名名字,具体请看下一小节内部
output = MobilenetV1/Predictions/Reshape_1
# 待量化模型文件的路径
input_model = ./model/mobilenet_v1_1.0_224_frozen.pb
# 待量化模型的网络输入名称
input = input
# 待量化模型的内乡输入大小
input_shape = [1,224,224,3]
# 输出文件存入目录
output_dir = ./[AutoQuantizationTool]
# 目前根据观察量化时一些中间文件会用,应该可以随意,和上面的保持一致
model_name = mobilenet_v1
# 根据字面猜测量化方式
quantize_method = SYMMETRIC
# OP相关,具体目前未知
ops_per_channel = DepthwiseConv
# 用于量化矫正的样本集
calibration_data = ./dataset1/dataset.npy
# 用于量化矫正的样本集标签
calibration_label = ./dataset1/label.npy
# 预处理方式,归一化
preprocess_mode = normalize
# 量化类型 int8
quant_precision=int8
# 是否交换RB通道,主要看模型输入是BGR还是RGB
reverse_rgb = False
# 标签偏移量
label_id_offset = 0[GBuilder]
# 量化完成测试用输入文件
inputs=./model/input_cup.bin
# 模拟器? 未知
simulator=aipu_simulator_z1
# 量化完成测试输入文件对应的输出结果
outputs=output_mobilenet_v1_1.0.bin
# 猜测是量化时收集一些性能相关数据
profile= True
# 版本号? 猜测
target=Z1_0701

对于 【mobilenet-v1-1.0-224.pb】 修改后的文件内容如下

[Common]
mode=run[Parser]
model_name = mobilenet_v1
detection_postprocess =
model_domain = image_classification
output = MobilenetV1/Predictions/Reshape_1
input_model = ./model/mobilenet_v1_1.0_224_frozen.pb
input = input
input_shape = [1,224,224,3]
output_dir = ./[AutoQuantizationTool]
model_name = mobilenet_v1
quantize_method = SYMMETRIC
ops_per_channel = DepthwiseConv
calibration_data = ./dataset1/dataset.npy
calibration_label = ./dataset1/label.npy
preprocess_mode = normalize
quant_precision=int8
reverse_rgb = False
label_id_offset = 0[GBuilder]
inputs=./model/input_cup.bin
simulator=aipu_simulator_z1
outputs=output_mobilenet_v1_1.0.bin
profile= True
target=Z1_0701
  1. 在仿真环境中执行量化
cd /root/demos/pb
aipubuild config/mobilenet-v1-1.0-224.cfg

如果不出现红色日志,说明量化成功了,此时会得到标红的量化参数

同时在当前目录下也会得到量化运行结果文件

output_mobilenet_v1_1.0_224.bin
  1. 量化结果对比

首先修改上面生成的量化测试用文件input_cup.bin

vim ./quant_predict.py

主要修改以下文件路径

input_path = './model/input_cup.bin'

然后可以执行查看结果

python3 ./quant_predict.py

由截图可以看出预测结果top1【cup】是一致的,概率prob大小范围不同是因为
在用原始模预测时被缩放到0至1了

检测模型尝试


由于目前没有找到相关的说明文档,所以仅只是初步尝试

  1. yolo-v3-tiny

由日志可以看出模型解析部分没有问题,但量化时出了错

  1. ssd_mobilenet_v1_coco

由日志可以看模型解析时就出错了,有些OP不支持

如果有机会收到板子再继续尝试吧

相关文件下载


本文提到的所有文件及代码,可以从这里下载: z1.zip (提取码: 8hs2)

相关阅读:

  • 【周易AIPU 仿真】R329开发板模拟仿真
  • 【周易AIPU 仿真】R329 开发板申请

【周易AIPU 仿真】R329开发板(仿真)部署AIPU初体验相关推荐

  1. 【立创开发板】梁山派初体验

    昨天到的板子,一开始也下不进,现在烧录正常了[破涕为笑]串口isp要先按住boot0再短按Reset后松开boot0,daplink没识别到装了新版keil后解决了 1 开发板简介 立创·梁山派开发板 ...

  2. TI AM3552开发板(arm cortex A8) 初体验

    1 开发板简介 采用周立功EPC-9600I-L工控板,TI Cortex-A8 AM3352处理器,主频高达800MHz.集成6路UART,支持GPS.GPRS.传感器.采集模块等功能扩展. 板载2 ...

  3. 【周易AIPU 仿真】基于MobileNetV2的水果分类模型在R329开发板上的部署

    首发极术社区 如对Arm相关技术感兴趣,欢迎私信aijishu20加入技术微信群. 流程一览 1.配置docker开发环境 2.训练水果分类模型 3.准备校正数据集 4.准备输入样本 5.修改目录内容 ...

  4. r329开发板部署aipu模型

    上篇文章r329模拟仿真实现了在模拟器上仿真网络,现在申请到了开发板,就有机会在上面测试下了. 本文需要的原材料 r329开发板 sd 卡 sd卡读卡器 typec的usb线 一台windows电脑 ...

  5. 【R329开发板评测】R329开发板部署aipu模型

    首发极术社区 如对Arm相关技术感兴趣,欢迎私信aijishu20加入技术微信群. 上篇文章r329模拟仿真实现了在模拟器上仿真网络,现在申请到了开发板,就有机会在上面测试下了. 本文需要的原材料 r ...

  6. Proteus仿真51开发板

    用的B站江科大自化协的51开发板教程,原理图.资料在B站up主发的有.这里只是Proteus仿真,仿真和实物有不同,有些对时序要求高的可以用实物来测试.仿真不全,学习使用,仅供参考. Proteus安 ...

  7. 【R329开发板评测】如何优雅地给开发板刷入TinaLinux

    首发极术社区 如对Arm相关技术感兴趣,欢迎私信aijishu20加入技术微信群. 7.23更新:不愧是我,连ssh-server都没给编译进去,现在有了 作为一个萝莉控真的爱死这种小巧精致开发板了 ...

  8. 【RT-Thread Smart】ART-Pi Smart 开发板开箱及爱之初次体验

    ART-Pi Smart 开发板开箱及爱之初次体验 首先, 感谢RT=Thread给的试用机会, 感谢熊大的指导. 本文ART-Pi Smart开箱及初次体验内置应用 标题开箱 收到有几天了.我们一步 ...

  9. Rasa课程、Rasa培训、Rasa面试系列之:Rasa 3.x部署安装初体验

    Rasa课程.Rasa培训.Rasa面试系列之:Rasa 3.x部署安装初体验 Rasa 3.x部署安装 进入Ananconda系统,新建rasa虚拟环境 conda create --name in ...

最新文章

  1. SQL Server中的SQL语句优化与效率问题
  2. PHP-date(),time()函数的应用
  3. lintcode:最大子正方形
  4. Java数组数字排列
  5. linux mutt 使用指南,linux mutt详解
  6. 2018年春季软件工程教学设计(初稿)
  7. 点4下还是点1下?使用jQuery启动一个SharePoint工作流
  8. 面向对象编程:Java复杂数据类型用法
  9. EXCEL 制作下拉选项,限制输入内容范围
  10. 【超分辨率】何凯明新作:Masked Autoencoders Are Scalable Vision Learners
  11. 无法通过百度联盟申请的常见原因
  12. java csv oracle数据库_从文件(*.csv或*.txt)导入Oracle数据库Java源代码
  13. 自定义QT标题栏和背景·边框
  14. 开源的PHP DKP系统
  15. 2021-05-12 MongoDB面试题 在MongoDB中如何排序
  16. 目标检测:二维码检测方案
  17. 微信公众平台从入门到精通二
  18. 1-2 二十四点 (20 分)【Csp认证真题】
  19. 人工智能面试总结:160个机器学习面试题,赶紧先考考自己!
  20. 平安好医生技术栈的分析

热门文章

  1. 会声会影剪切合并歌曲教程
  2. python自动抓取聊天群内容_python微信聊天机器人改进版,定时或触发抓取天气预报、励志语录等,向好友推送...
  3. 星露谷物语+蒲公英联机教程
  4. buildingEXODUS v4.0(应用于建筑、海上作业、航空航天领域的消防安全分析设计软件)...
  5. JavaSE图像验证码简单识别程序
  6. 智慧交通大数据分析工具是如何运作的
  7. 关于学习过程中一些可以共享的网址--长期更新
  8. 基于PHP汽车4S店保养在线预约系统-计算机毕业设计
  9. otsuthresh
  10. Java秒杀系统方案优化 高性能高并发实战视频