\u200E
新的风暴已经出现,怎么能够停滞不前!PaddleClas帮你区分光巨人
发布日期:2021-08-12T13:37:54.000+0000 浏览量:51次


你相信光吗?
你知道M78星云中的光之国吗?
迪迦/杰克/赛文/泰罗
还是傻傻分不清楚吗?
PaddleClas帮你区分光巨人!
记得查看文末项目作者招募哦~

每日灵魂一问




项目介绍




本次给大家带来了一个发"光"的项目:基于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训练





安装PaddleClas环境

   
     
# 安装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



使用PaddleClas进行训练

我们先对环境进行配置,修改有关的配置文件,配置文件主要是修改分类数、图片总量、训练和验证的路径、图像尺寸、数据预处理、训练和预测的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

预测图片


Paddle Lite部署




配置有关环境:
下载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

·相关地址·

PaddleClas官方文档:
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精品项目征集




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是为大型企业提供的功能全面、可灵活定制和被深度集成的开发平台。


END