PaddleClas初体验

881 阅读6分钟

PaddleClas初体验

该包是由百度PaddlePaddle组织下开源的项目,主要用于图像分类,图像搜索等相关任务。

项目地址:

主要构件:

  • PP-ShiTu: 图像识别(包含图像检测与图像搜索)
  • PULC:超轻量图像分类

img

PP-ShiTu

PP-ShiTu对原数据集进行了Gallery库和Query库划分,并生成了对应的Index索引库,具体应用场景介绍和下载地址如下表所示。

类别场景场景简介Recall@1场景库下载地址原数据集下载地址
动植物104种花细分类识别0.9788104flowers原数据下载地址
动植物蝴蝶75种蝴蝶细分类识别0.9360下载地址原数据下载地址
动植物野外植物32种野外植物识别,包括雏菊、蒲公英等0.9758下载地址原数据下载地址
动植物动物90种动物识别,包括斑马、羚羊等0.9078AnimalImageDataset原数据下载地址
动植物狗识别69种狗细分类识别,包括柴犬等0.9606下载地址原数据下载地址
动植物鸟类400种各种姿态的鸟细分类识别0.9673下载地址原数据下载地址
商品坚果10种坚果种类识别,包括开心果、核桃、腰果等0.9412下载地址原数据下载地址
商品蔬菜116种蔬菜识别,包括菠菜、胡萝卜、玉米等0.8929下载地址原数据下载地址
商品时装23种时尚商品识别,包括首饰、挎包、化妆品等0.9555FashionProductImageSmall原数据下载地址
商品鞋子6种鞋子识别,包括靴子、足球鞋等0.9000下载地址原数据下载地址
商品乐器30种不同乐器种类识别0.9467下载地址原数据下载地址
商品宝石27种宝石识别,包括萤石、翡翠等0.9653下载地址原数据下载地址
商品球类26种球型物体识别,包括弹珠、足球等0.9769Balls原数据下载地址
交通交通工具9种交通工具粗分类识别,包括车、船等0.9307Vechicles原数据下载地址
交通6种船种类识别,包括游轮、帆船等0.9242下载地址原数据下载地址
交通航拍场景30种航拍场景识别,如机场、火车站等0.9797下载地址原数据下载地址
其他巴黎建筑11个巴黎建筑识别,如:巴黎铁塔、圣母院等1.000下载地址原数据下载地址
其他天气10种天气场景识别,如:雨天、打雷、下雪等0.9924下载地址原数据下载地址
其他垃圾12种垃圾分类识别0.9845下载地址原数据下载地址
其他运动种类100种运动图像识别0.9413下载地址原数据下载地址
其他宝可梦150种宝可梦神奇宝贝识别,包括皮卡丘、喷火龙等0.9236下载地址原数据下载地址

实用案例

PULC

模型名称使用介绍模型介绍模型精度模型大小推理耗时下载地址
person_existsPULC有人/无人分类判断图片中是否有人96.237.0M2.58ms推理模型 / 预训练模型
person_attributePULC人体属性识别人体属性识别,可以识别行人性别、年龄、朝向、配饰、包、服装风格等78.597.2M2.01ms推理模型 / 预训练模型
safety_helmetPULC佩戴安全帽分类判断图片中的人脸是否佩戴安全帽99.387.1M2.03ms推理模型 / 预训练模型
traffic_signPULC交通标志分类常见交通标志分类,共232类别98.358.2M2.10ms推理模型 / 预训练模型
vehicle_attributePULC车辆属性识别车辆属性识别,可以识别车辆的颜色和车型90.817.2M2.36ms推理模型 / 预训练模型
car_existsPULC有车/无车分类判断图片中是否有车95.927.1M2.38ms推理模型 / 预训练模型
text_image_orientationPULC含文字图像方向分类判断含文字的图片的方向,可以区分0度、90度、180度、270度99.067.1M2.16ms推理模型 / 预训练模型
textline_orientationPULC文本行方向分类判断文本行的方向,可以区分0度、180度96.017.0M2.72ms推理模型 / 预训练模型
language_classificationPULC语种分类判断文本行的语种,可以区分10种常见的语种99.267.1M2.58ms推理模型 / 预训练模型
table_attributePULC表格属性识别表格属性识别,可以识别表格是否为拍照、表格数量、表格颜色、表格清晰度、表格有无干扰、表格角度6个属性88.17.1M2.58ms推理模型 / 预训练模型

实用案例:

实践

这里主要使用PULC分类算法完成分类任务:

环境准备:

# GPU环境安装paddlepaddle
python3 -m pip install paddlepaddle-gpu -i https://mirror.baidu.com/pypi/simple 

# CPU环境安装paddlepaddle
python3 -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple

# 安装paddleclas
pip3 install paddleclas
  • 使用公开的模型:

使用person_exists模型

import paddleclas
model = paddleclas.PaddleClas(model_name="person_exists")
result = model.predict(input_data="pulc_demo_imgs/person_exists/objects365_01780782.jpg")
print(next(result))

注意: model.predict() 为可迭代对象(generator),因此需要使用 next() 函数或 for 循环对其迭代调用。每次调用将以 batch_size 为单位进行一次预测,并返回预测结果, 默认 batch_size 为 1,如果需要更改 batch_size,实例化模型时,需要指定 batch_size,如 model = paddleclas.PaddleClas(model_name="person_exists", batch_size=2), 使用默认的代码返回结果示例如下:

>>> result
[{'class_ids': [0], 'scores': [0.9955421453341842], 'label_names': ['nobody'], 'filename': 'pulc_demo_imgs/person_exists/objects365_01780782.jpg'}]
  • 使用自训练的模型

训练过程可以参考官方项目的训练过程:github.com/PaddlePaddl…

这里讲解下如何将训练完成的模型文件按照上面的方式进行封装直接调用:

当模型训练好后并转化为infer模型后,如果想用上面的方式进行封装就需要有一些小的细节:

  • 最好保持文件模型名称与官方公布的几个模型任务名称一致,或者是更改源码中的可支持的模型列表:
    • PaddleClas/paddleclas.py中的PULC_MODELS
    • PULC_MODELS = [ "car_exists", "language_classification", "person_attribute", "person_exists", "safety_helmet", "text_image_orientation", "textline_orientation", "traffic_sign", "vehicle_attribute" ]
  • 使用已转换好的infer文件替换掉对应的目录下的模型文件
    • 官方下载的路径是~/.paddleclas/inference_model/PULC/person_exists
  • 更改config文件以保证预测出的标签跟训练的config文件标签一致
    • condaenv-name/lib/python3.8/site-packages/paddleclas/deploy/configs/PULC/person_exists

然后就可以愉快的调用去以上述的方式调用,而不用封装delpoy/predict_cls.py文件了:

import paddleclas
model = paddleclas.PaddleClas(model_name="person_exists")
result = model.predict(input_data="pulc_demo_imgs/person_exists/idcard.jpg")
print(next(result))


[{'class_ids': [0], 'scores': [0.9989118406083435], 'label_names': ['idcard'], 'filename': '.pulc_demo_imgs/person_exists/idcard.jpg'}]

可以看到虽然名称一致,但实现的功能和预期的一样,区分idcard及其他。

参考