PaddleClas初体验

PaddleClas初体验

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

项目地址:

主要构件:

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

img

PP-ShiTu

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

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

实用案例

PULC

模型名称 使用介绍 模型介绍 模型精度 模型大小 推理耗时 下载地址
person_exists PULC有人/无人分类 判断图片中是否有人 96.23 7.0M 2.58ms 推理模型 / 预训练模型
person_attribute PULC人体属性识别 人体属性识别,可以识别行人性别、年龄、朝向、配饰、包、服装风格等 78.59 7.2M 2.01ms 推理模型 / 预训练模型
safety_helmet PULC佩戴安全帽分类 判断图片中的人脸是否佩戴安全帽 99.38 7.1M 2.03ms 推理模型 / 预训练模型
traffic_sign PULC交通标志分类 常见交通标志分类,共232类别 98.35 8.2M 2.10ms 推理模型 / 预训练模型
vehicle_attribute PULC车辆属性识别 车辆属性识别,可以识别车辆的颜色和车型 90.81 7.2M 2.36ms 推理模型 / 预训练模型
car_exists PULC有车/无车分类 判断图片中是否有车 95.92 7.1M 2.38ms 推理模型 / 预训练模型
text_image_orientation PULC含文字图像方向分类 判断含文字的图片的方向,可以区分0度、90度、180度、270度 99.06 7.1M 2.16ms 推理模型 / 预训练模型
textline_orientation PULC文本行方向分类 判断文本行的方向,可以区分0度、180度 96.01 7.0M 2.72ms 推理模型 / 预训练模型
language_classification PULC语种分类 判断文本行的语种,可以区分10种常见的语种 99.26 7.1M 2.58ms 推理模型 / 预训练模型
table_attribute PULC表格属性识别 表格属性识别,可以识别表格是否为拍照、表格数量、表格颜色、表格清晰度、表格有无干扰、表格角度6个属性 88.1 7.1M 2.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'}]
  • 使用自训练的模型

训练过程可以参考官方项目的训练过程:https://github.com/PaddlePaddle/PaddleClas/blob/release/2.5/docs/zh_CN/models/PULC/PULC_person_exists.md

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

当模型训练好后并转化为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及其他。

参考

猜你喜欢

转载自blog.csdn.net/uncle_ll/article/details/130974704