本次给大家带来了一个发"光"的项目:基于PaddleClas2.2的从零到落地安卓部署的奥特曼分类实战,该项目是基于飞桨的套件PaddleClas对数据进行分类,训练出效果较好的模型后,利用Paddle Lite对模型进行安卓端的部署,以后只要动动手机就可以识别"光巨人"的名字啦!感谢iterhui的投稿。
“我想起来了 那不是梦 那一年我们都变成了光”看完了四部奥特曼的隔壁小哥哥,开始了奥特曼的分类任务,区分不一样的光巨人,让我们一起来康康吧~~~
PaddleClas是飞桨图像分类套件,为工业界和学术界所准备的一个图像分类任务的工具集,助力使用者训练出更好的视觉模型和应用落地。
Paddle Lite是飞桨轻量化推理引擎,是一个高性能、轻量级、灵活性强且易于扩展的深度学习推理框架,定位支持包括移动端、嵌入式以及服务器端在内的多硬件平台。具有多硬件支持、轻量级部署、高性能、多模型多算子、强大的图分析和优化算力等特征和优势。
数据集包含四类奥特曼:迪迦、杰克、赛文、泰罗,各有200张、100张、100张和150张。所有的数据均为 .jpg 格式,在数据集的压缩包中有4个文件,分别是dijia、jieke、saiwen、tailuo,在模型训练与评估阶段,按照4:1比例将全部样本数据划分为训练集(440张)和验证集(110张),下图为部分数据展示。
在解压数据集以后就可以进行数据读取的操作,然后对数据进行乱序接着进行划分写入对应的文件。
# 解压数据集!unzip -oq /home/aistudio/data/data101651/aoteman.zip# 读取数据def get_all_txt(): all_list = [] i = 0for root,dirs,files in os.walk(dirpath): # 分别代表根目录、文件夹、文件for file in files: i = i + 1 if("dijia" in root): all_list.append(os.path.join(root,file)+" 0\n")if("jieke" in root): all_list.append(os.path.join(root,file)+" 1\n")if("saiwen" in root): all_list.append(os.path.join(root,file)+" 2\n")if("tailuo" in root): all_list.append(os.path.join(root,file)+" 3\n") allstr = ''.join(all_list) f = open('all_list.txt','w',encoding='utf-8') f.write(allstr)return all_list , iall_list,all_lenth = get_all_txt()print(all_lenth-1) # 有意者是预测的图片,得减去# 数据乱序random.shuffle(all_list)random.shuffle(all_list)# 划分数据集train_size = int(all_lenth * 0.8)train_list = all_list[:train_size]val_list = all_list[train_size:]# 数据写入train_txt = ''.join(train_list)f_train = open('train_list.txt','w',encoding='utf-8')f_train.write(train_txt)f_train.close()print("train_list.txt 生成成功!")val_txt = ''.join(val_list)f_val = open('val_list.txt','w',encoding='utf-8')f_val.write(val_txt)f_val.close()print("val_list.txt 生成成功!")
# 安装PaddleClas环境
!git clone https://gitee.com/paddlepaddle/PaddleClas.git -b release/2.2
# 检查环境
!pip install --upgrade -r PaddleClas/requirements.txt -i https://mirror.baidu.com/pypi/simple
# 安装依赖库
!cd PaddleClas
!pip install --upgrade -r requirements.txt
我们先对环境进行配置,修改有关的配置文件,配置文件主要是修改分类数、图片总量、训练和验证的路径、图像尺寸、数据预处理、训练和预测的num_workers: 0,这样子就可以直接跑了。类别映射文件里面是标签和对应的内容。
0 迪迦奥特曼
1 杰克奥特曼
2 赛文奥特曼
3 泰罗奥特曼
# 配置文件
PaddleClas/ppcls/configs/quick_start/new_user/ShuffleNetV2_x0_25.yaml
# 类别映射文件
PaddleClas/ppcls/configs/quick_start/new_user/aoteman_label_list.txt
# 训练代码
!export CUDA_VISIBLE_DEVICES=0
!python tools/train.py \
-c ./ppcls/configs/quick_start/new_user/ShuffleNetV2_x0_25.yaml
通过对模型的验证查看训练的效果和对图片进行预测,本次预测的结果为'scores': [0.99999, 1e-05, 0.0, 0.0],也就是最后的结果是迪迦。
!python3 tools/infer.py \
-c ./ppcls/configs/quick_start/new_user/ShuffleNetV2_x0_25.yaml \
-o Infer.infer_imgs=dataset/aoteman/predict_demo.jpg \
-o Global.pretrained_model=output/ShuffleNetV2_x0_25/latest
下载PaddleLite-android-demo工程包,对安卓环境进行部署,并查看官方demo是否运行成功。
如上图官方demo成功以后就可以开始进行对模型的部署。先导出之前的模型然后将模型转换成 .nb 模型文件。
#导出模型
!python3 tools/export_model.py \
-c ppcls/configs/quick_start/new_user/ShuffleNetV2_x0_25.yaml \
-o Global.pretrained_model=output/ShuffleNetV2_x0_25/latest
# 将模型转为.nb文件
!paddle_lite_opt \
--model_file=inference/inference.pdmodel \
--param_file=inference/inference.pdiparams \
--optimize_out=./inference/ShuffleNetV2_x0_25 \
--optimize_out_type=naive_buffer \
--valid_targets=arm
nb模型文件转换成功以后,下载模型文件,修改名称为 demo.nb ,替换掉原来的demo文件,然后把之前的映射文件也进行相应的替换,添加初始化图片,修改有关地址及图片就可以完成部署。
<string name="MODEL_PATH_DEFAULT">models/shufflenet_v2</string>
<string name="LABEL_PATH_DEFAULT">labels/aoteman_label_list.txt</string>
<string name="IMAGE_PATH_DEFAULT">images/pro.png</string>
基于PaddleClas2.2的从零到落地安卓部署的奥特曼分类实战:
https://aistudio.baidu.com/aistudio/projectdetail/2219455
https://gitee.com/paddlepaddle/PaddleClas
部署参考文档:https://paddleclas.readthedocs.io/zh_CN/latest/extension/paddle_mobile_inference.html
https://paddle-lite.readthedocs.io/zh/latest/demo_guides/android_app_demo.html
AI Studio基于百度深度学习开源平台飞桨,为开发者免费提供功能强大的线上训练环境、云端超强GPU算力及存储资源。“精品项目征集”是AI Studio开展的原创项目扶持活动。贡献精品项目可以获得积分奖励(兑换礼品)、多平台推荐曝光、创作者核心群等多重福利,本季度还有罗技机械键盘、Apple Watch、树莓派等超多附加奖品!快来加入我们吧~
https://iwenjuan.baidu.com/?code=vtr6pz
https://aistudio.baidu.com/paddle/forum/topic/show/989159
飞桨(PaddlePaddle)以百度多年的深度学习技术研究和业务应用为基础,集深度学习核心训练和推理框架、基础模型库、端到端开发套件和丰富的工具组件于一体,是中国首个自主研发、功能丰富、开源开放的产业级深度学习平台。飞桨企业版针对企业级需求增强了相应特性,包含零门槛AI开发平台EasyDL和全功能AI开发平台BML。EasyDL主要面向中小企业,提供零门槛、预置丰富网络和模型、便捷高效的开发平台;BML是为大型企业提供的功能全面、可灵活定制和被深度集成的开发平台。