【周易AIPU 仿真】R329开发板(仿真)部署AIPU初体验
首发极术社区
如对Arm相关技术感兴趣,欢迎私信aijishu20加入技术微信群。
操作系统:Ubuntu
版 本:20.04 LTS (18.04也一样)
假定当前目录:/root/demo/pb
模 型 文 件 : mobilenet_v1_1.0_224_frozen.pb
docker环境准备
- 更新包并安装一些必须的软件
sudo apt update
- 安装一些必须的组件
sudo apt install apt-transport-https ca-certificates curl gnupg unzip lsb-release
- 添加 Docker 官方的 GPG key到本地
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
- 设置使用稳定版 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 替换即可
- 再次更新源并安装docker
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
- 上面命令完成后,使用以下命令进行一下测试
sudo docker run hello-world
如果返回如下图中的信息,说明docker环境安装成功了,如果未成功请按上面步骤重新尝试。
仿真环境搭建
- 仿真镜像获取,如果访问国外网络速度很好,可以直接用以下命令从docker官方Hub摘取镜像。镜像挺大请耐心等待完成
sudo docker pull zepan/zhouyi
- 如果访问国外网络速度不好,可以使用下载百度网盘中的仿真镜像文件,然后本地载入。
链接:https://pan.baidu.com/s/1yaKBPDxR_oakdTnqgyn5fg 提取码:f8dr
3.解压镜像并导入到本地,注意镜像文件路径
gunzip zhouyi_docker.tar.gz
sudo docker load --input zhouyi_docker.tar
- 用以下命令检查是否导入成功,如果执行结果中出现下图所示内容,说明导入成功了
docker images
- 使用以下命令创建仿真环境
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
仿真环境测试及模型量化
- 容器仿真环境验证。使用以下命令查看已经启动的容器
docker ps
如果执行结果中有上图中标红的内容,我们可以直接附加到已运行容器
docker attach zhouyi
如果容器没有运行,可以使用以下命令先启动
docker start zhouyi
当终端中出现上图中的内容时,说明已经进入到窗口仿真环境了
此时我们选切换到示例目录,此处使用的是pb格式模型,
cd /root/demos/pb
此时我们执行环境验证命令
aipubuild config/resnet_50_run.cfg
根容器分配到的配置,此命令消耗时间从长短不同,命令执行完成即说明环境正常,此时屏幕内容应类似如下图
仿真环境验证无误,下面可以根据需要进行相应的模型量化了
- 网络输出名字的获取,所需工具 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 目录下会生成以下两个文件
- 准备量化时测试用文件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
运行结果如下说明生成成功
- 模型量化配置文件
在此使用的已经固化好的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
- 在仿真环境中执行量化
cd /root/demos/pb
aipubuild config/mobilenet-v1-1.0-224.cfg
如果不出现红色日志,说明量化成功了,此时会得到标红的量化参数
同时在当前目录下也会得到量化运行结果文件
output_mobilenet_v1_1.0_224.bin
- 量化结果对比
首先修改上面生成的量化测试用文件input_cup.bin
vim ./quant_predict.py
主要修改以下文件路径
input_path = './model/input_cup.bin'
然后可以执行查看结果
python3 ./quant_predict.py
由截图可以看出预测结果top1【cup】是一致的,概率prob大小范围不同是因为
在用原始模预测时被缩放到0至1了
检测模型尝试
由于目前没有找到相关的说明文档,所以仅只是初步尝试
- yolo-v3-tiny
由日志可以看出模型解析部分没有问题,但量化时出了错
- ssd_mobilenet_v1_coco
由日志可以看模型解析时就出错了,有些OP不支持
如果有机会收到板子再继续尝试吧
相关文件下载
本文提到的所有文件及代码,可以从这里下载: z1.zip (提取码: 8hs2)
相关阅读:
- 【周易AIPU 仿真】R329开发板模拟仿真
- 【周易AIPU 仿真】R329 开发板申请
【周易AIPU 仿真】R329开发板(仿真)部署AIPU初体验相关推荐
- 【立创开发板】梁山派初体验
昨天到的板子,一开始也下不进,现在烧录正常了[破涕为笑]串口isp要先按住boot0再短按Reset后松开boot0,daplink没识别到装了新版keil后解决了 1 开发板简介 立创·梁山派开发板 ...
- TI AM3552开发板(arm cortex A8) 初体验
1 开发板简介 采用周立功EPC-9600I-L工控板,TI Cortex-A8 AM3352处理器,主频高达800MHz.集成6路UART,支持GPS.GPRS.传感器.采集模块等功能扩展. 板载2 ...
- 【周易AIPU 仿真】基于MobileNetV2的水果分类模型在R329开发板上的部署
首发极术社区 如对Arm相关技术感兴趣,欢迎私信aijishu20加入技术微信群. 流程一览 1.配置docker开发环境 2.训练水果分类模型 3.准备校正数据集 4.准备输入样本 5.修改目录内容 ...
- r329开发板部署aipu模型
上篇文章r329模拟仿真实现了在模拟器上仿真网络,现在申请到了开发板,就有机会在上面测试下了. 本文需要的原材料 r329开发板 sd 卡 sd卡读卡器 typec的usb线 一台windows电脑 ...
- 【R329开发板评测】R329开发板部署aipu模型
首发极术社区 如对Arm相关技术感兴趣,欢迎私信aijishu20加入技术微信群. 上篇文章r329模拟仿真实现了在模拟器上仿真网络,现在申请到了开发板,就有机会在上面测试下了. 本文需要的原材料 r ...
- Proteus仿真51开发板
用的B站江科大自化协的51开发板教程,原理图.资料在B站up主发的有.这里只是Proteus仿真,仿真和实物有不同,有些对时序要求高的可以用实物来测试.仿真不全,学习使用,仅供参考. Proteus安 ...
- 【R329开发板评测】如何优雅地给开发板刷入TinaLinux
首发极术社区 如对Arm相关技术感兴趣,欢迎私信aijishu20加入技术微信群. 7.23更新:不愧是我,连ssh-server都没给编译进去,现在有了 作为一个萝莉控真的爱死这种小巧精致开发板了 ...
- 【RT-Thread Smart】ART-Pi Smart 开发板开箱及爱之初次体验
ART-Pi Smart 开发板开箱及爱之初次体验 首先, 感谢RT=Thread给的试用机会, 感谢熊大的指导. 本文ART-Pi Smart开箱及初次体验内置应用 标题开箱 收到有几天了.我们一步 ...
- Rasa课程、Rasa培训、Rasa面试系列之:Rasa 3.x部署安装初体验
Rasa课程.Rasa培训.Rasa面试系列之:Rasa 3.x部署安装初体验 Rasa 3.x部署安装 进入Ananconda系统,新建rasa虚拟环境 conda create --name in ...
最新文章
- SQL Server中的SQL语句优化与效率问题
- PHP-date(),time()函数的应用
- lintcode:最大子正方形
- Java数组数字排列
- linux mutt 使用指南,linux mutt详解
- 2018年春季软件工程教学设计(初稿)
- 点4下还是点1下?使用jQuery启动一个SharePoint工作流
- 面向对象编程:Java复杂数据类型用法
- EXCEL 制作下拉选项,限制输入内容范围
- 【超分辨率】何凯明新作:Masked Autoencoders Are Scalable Vision Learners
- 无法通过百度联盟申请的常见原因
- java csv oracle数据库_从文件(*.csv或*.txt)导入Oracle数据库Java源代码
- 自定义QT标题栏和背景·边框
- 开源的PHP DKP系统
- 2021-05-12 MongoDB面试题 在MongoDB中如何排序
- 目标检测:二维码检测方案
- 微信公众平台从入门到精通二
- 1-2 二十四点 (20 分)【Csp认证真题】
- 人工智能面试总结:160个机器学习面试题,赶紧先考考自己!
- 平安好医生技术栈的分析
热门文章
- 会声会影剪切合并歌曲教程
- python自动抓取聊天群内容_python微信聊天机器人改进版,定时或触发抓取天气预报、励志语录等,向好友推送...
- 星露谷物语+蒲公英联机教程
- buildingEXODUS v4.0(应用于建筑、海上作业、航空航天领域的消防安全分析设计软件)...
- JavaSE图像验证码简单识别程序
- 智慧交通大数据分析工具是如何运作的
- 关于学习过程中一些可以共享的网址--长期更新
- 基于PHP汽车4S店保养在线预约系统-计算机毕业设计
- otsuthresh
- Java秒杀系统方案优化 高性能高并发实战视频