低成本AIoT硬件深度学习部署实战(笔记)

来源:https://zhuanlan.zhihu.com/p/74903370/edit

 

相信大家对TensorLayer等深度学习框架已经很熟悉了,但是平时大家都是在PC端运行自己的模型,或者可能尝试过在树莓派上运行一些tflite格式的小型模型,但是速度一般只有几帧。。今天给大家带来的实战笔记是,在低成本(百元内)AIoT硬件Maix Bit上部署运行TensorLayer的MobileNet模型。

 

1)准备工作

 

软件环境

首先准备一台 安装有TensorLayer 2.1.0或以上版本的Ubuntu PC或虚拟机。安装嵌入式模型转换器 Maix-EMC:

 
 

Maix-EMC是一款针对边缘计算的嵌入式深度学习模型转换器,可以将TensorLayer训练所得的FP32模型量化为端侧常用的INT8模型,并将需要较复杂解析过程的PC端模型结构,扁平化为 嵌入式端可以直接载入内存运行的紧凑模型文件。

 

硬件环境

这里选用开源硬件社区Sipeed的低成本AIoT硬件 Maix-Bit 套件(某宝有售),成本10美金左右,RISC-V 64GC双核,[email protected],自带200W像素摄像头,可以直插面包板DIY,并配有图形化IDE,方便小白上手。

低成本AIoT硬件深度学习部署实战(笔记)_第1张图片

Maix-Bit套件

低成本AIoT硬件深度学习部署实战(笔记)_第2张图片

MaixPy环境:支持使用Python开发嵌入式AI应用

Sipeed为其提供了便捷的MaixPy环境,使用大家熟悉的python进行快速开发

低成本AIoT硬件深度学习部署实战(笔记)_第3张图片

 

 

 

 

2)MobileNet模型准备

我们以典型的MobileNetV1模型为例,讲解部署过程。TensorLayer内置了一个MobileNetV1的实现demo,并附上了预训练的权重文件:

 
 

 

模型修改

针对目标硬件平台的一些特性限制,我们需要对原始的TL提供的网络描述文件做两处修改:

由于TL使用TF作为后端,而TF默认的stride后的padding方式是 右下角padding, 与我们的目标硬件平台的padding方式不同(Maix的padding方式是与caffe一致的四圈padding),所以我们在stride=(2,2)的层之前手工padding一圈:

 
 

原始的TL提供的模型不支持MobileNet的alpha超参数设置,使用了默认的1.0, 生成的模型文件较大,所以我们为它加上alpha超参数支持。(简单地说alpha参数就是裁剪了通道数)

 
 

修改完成的py文件在:

 

模型权重系数获取

MobileNetV1的模型尺寸,精度与alpha的关系可以查阅下表:

低成本AIoT硬件深度学习部署实战(笔记)_第4张图片

可以看到0.75系数时,精度下降不明显,但是体积明显减小,所以我们选取0.75的配置,这里我们使用Keras提供的预训练权重系数:

 
 

(保存脚本在:https://github.com/sipeed/Maix-EMC/blob/master/example/mbnetv1/models/save_keras_weight.py)

由于我们在前面修改了padding方式,理论上需要重新微调网络参数来适应更改,但是经过测试,直接使用原始的权重系数,搭配新的结构,其精度损失不明显,作为我们demo演示已经足够,所以这里我们就不重新训练微调了。

 

3)MobileNet模型转换

由于PC端训练的模型是FP32的权重系数,需要进行量化,我们要提供一些图片样本给转换器进行量化矫正。我们随机找几十张ImageNet数据集里的图片,放到EMC example/mbnetv1/mbnetv1_dataset目录下。

 
 

然后,,短短两行代码就可以转换出嵌入式端使用的模型文件啦!惊不惊喜,意不意外!完整文件见:

 

这里简单介绍下EMC转换器的API接口:

 
 

低成本AIoT硬件深度学习部署实战(笔记)_第5张图片

 

4)在Maix板卡上运行kmodel

为方便大家测试,相关的资源文件已打包在此:

 

烧录MaixPy固件及模型文件

在这里下载烧录软件kflash_gui:

低成本AIoT硬件深度学习部署实战(笔记)_第6张图片

烧录maixpy_emc.bin固件 及mbnetv1.kfpkg模型文件 :

低成本AIoT硬件深度学习部署实战(笔记)_第7张图片

 

下载安装MaixPy IDE

如速度慢,请使用梯子,或者使用页面里的CDN链接安装完成之后,使用IDE的上传功能传输labels.txt到板子的文件系统:https://maixpy.sipeed.com/zh/get_started/upload_script.html

低成本AIoT硬件深度学习部署实战(笔记)_第8张图片

 

 

运行示例代码:

使用IDE或者任意的终端,执行mbnet_test.py里的示例代码(注意,使用终端的话,按Ctrl+E进入粘贴模式,粘贴完成,按Ctrl+D运行)

 
 

把Maix-Bit的摄像头对准待识别的物体或图片,就可以在配套LCD或者IDE终端上看到识别信息啦:

低成本AIoT硬件深度学习部署实战(笔记)_第9张图片

上传视频封面

我们可以在终端上看到识别速度在20fps+, 实际上通过调整摄像头和CPU、KPU速率,最高可以达到30fps+。小小的Maix-Bit,实战起来比树莓派还要快将近一个数量级呢~MobileNet的部署实战到此为止了,小伙伴们也可以尝试转换自己的模型到Maix板卡上运行,有什么问题的话欢迎甩issue来Maix-EMC:https://github.com/sipeed/Maix-EMC

 

5)小结

使用Maix-EMC工具可以便捷地将TensorLayer的小型静态模型部署到嵌入式端运行,为TensorLayer的工业化部署提供了一个良好的范例。Maix-EMC项目仍在不断完善迭代中,有兴趣的小伙伴可以参与一起开发(联系[email protected]),参与者皆免费获赠Maix板卡一套哦~~ TensorLayer社区请联系[email protected]

 

作者: @吴才泽

欢迎转载

 

相关阅读

图标

 

你可能感兴趣的:(深度学习,人工智能,tensorlayer,机器视觉,tensorflow,清华大学,图像识别)