PaddleClas初体验

news2024/11/16 7:27:14

PaddleClas初体验

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

项目地址:

  • https://github.com/PaddlePaddle/PaddleClas
  • https://pypi.org/project/paddleclas

主要构件:

  • 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下载地址原数据下载地址

实用案例

  • 基于PP-ShiTuV2的生鲜品自助结算: 点击这里
  • 基于PP-ShiTu 的智慧商超商品识别:点击这里
  • 基于PP-ShiTu电梯内电瓶车入室识别:点击这里

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人员出入视频管理: 点击这里

实践

这里主要使用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及其他。

参考

  • https://github.com/PaddlePaddle/PaddleClas/blob/release/2.5/paddleclas.py
  • https://github.com/PaddlePaddle/PaddleClas/blob/release/2.5/docs/zh_CN/models/PULC/PULC_person_exists.md
  • https://github.com/PaddlePaddle/PaddleClas/blob/release/2.5/docs/zh_CN/models/PULC/PULC_text_image_orientation.md
  • https://github.com/PaddlePaddle/PaddleClas/blob/release/2.5/docs/zh_CN/training/PP-ShiTu/deep_hashing.md

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/593997.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业的数据信息值钱吗?如何提升数据信息的价值?

越来越多的企业也将数据视为转型发展、重塑竞争优势和提升组织治理能力的重要战略资产,并对这一重要资产进行系统性、体系化的管理,以便充分挖掘数据的战略、战术价值。鉴于此,对数据资产进行体全面盘点、构建企业级的数据资产目录成为了数据…

aigc分享

AIGC技术分享 AIGC概述 AIGC的概念、应用场景和发展历程 机器学习基础 机器学习的基本概念、分类和常用算法,如线性回归、决策树、支持向量机、神经网络等。 深度学习基础 深度学习的基本概念、分类和常用算法,如卷积神经网络、循环神经网络、自编…

面试专题:java多线程(2)-- 线程池

1.为什么要用线程池? 线程池提供了一种限制和管理资源(包括执行一个任务)。 每个线程池还维护一些基本统计信息,例如已完成任务的数量。 这里借用《Java并发编程的艺术》提到的来说一下使用线程池的好处: 降低资源消…

【嵌入式烧录/刷写文件】-1.6-剪切/保留Motorola S-record(S19/SREC/mot/SX)文件中指定地址范围内的数据

案例背景: 有如下一段S19文件,保留地址范围0x9140-0x91BF内的数据,删除地址范围0x9140-0x91BF外的数据。 S0110000486578766965772056312E30352EA6 S123910058595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F70717273747576775B S12391207…

如何判断一个点是否在凸多边形内 - golang

判断一个点是否在凸多边形内的方法很多,此处仅给出使用向量叉积法判断点是否在凸多边形内的方法。 以下图为例说明问题: 原理: 1. 将多边形的第 i 条边的第一个顶点指向点 P 得到向量 v1,然后将从第一个顶点指向第二个顶点得到向…

Java 多线程实现1到1千万的求和操作

一、使用多线程的背景 提高程序速度和响应性:许多应用程序需要同时执行多个任务,例如网络服务器,图形图像处理,模拟程序等。使用多线程可以让程序同时执行多个部分,从而显著提高程序的执行速度、响应速度。 充分利用 …

CompletableFuture 线程编排

一、前言 Java8 新特性之一&#xff0c;其实现了Future<T>, CompletionStage<T>两接口&#xff0c;后者是对前者的一个扩展&#xff0c;增加了异步回调、流式处理、多个Future组合处理的能力&#xff0c;使 Java 在处理多任务的协同工作时更加顺畅便利。 二、Compl…

POST请求与GET请求的区别

POST请求 &#xff08;提交数据&#xff0c;一般用于将数据发给服务器&#xff0c;用于修改和写入数据&#xff09; 1、传参方式&#xff1a;相对安全&#xff0c;入参在request body中&#xff0c;可通过各种抓包工具获取 2、缓存&#xff1a;不会被缓存&#xff0c;保存在服…

基于Qt的嵌入式GUI开发指南(一)

Qt 是一个跨平台的应用程序开发框架&#xff0c;用于创建高性能、可扩展和用户友好的图形用户界面&#xff08;GUI&#xff09;应用程序。它提供了丰富的工具、库和功能&#xff0c;使开发者能够轻松地构建各种类型的应用程序&#xff0c;包括桌面应用程序、移动应用程序和嵌入…

Bellhop 从入门到上手

文章目录 前言一、Bellhop 简介二、Bellhop 结构1、输入文件2、输出文件 三、Bellhop 环境文件1、OPTIONS12、OPTIONS23、OPTIONS34、OPTIONS45、其他参数 四、BELLHOP&#xff08;Matlab_GUI&#xff09;实例1、bellhop 工具箱自取2、解压缩工具箱3、设置路径4、添加并包含子文…

高频面试八股文原理篇(六) mysql数据库的左连接,右连接,内链接有何区别

目录 内连接与外连接的区别 在sql中l外连接包括左连接&#xff08;left join &#xff09;和右连接&#xff08;right join&#xff09;&#xff0c;全外连接&#xff08;full join&#xff09;&#xff0c;内连接(inner join) 内连接与外连接的区别 自连接 一个表与它自身进…

Redis(一)常见命令使用

常见文件名Redis-cli使用命令1、启动Redis2、连接Redis3、停止Redis4、发送命令1、redis-cli带参数运行&#xff0c;如&#xff1a;2、redis-cli不带参数运行&#xff0c;如&#xff1a; 5、测试连通性 key操作命令获取所有键查询键是否存在删除键查询键类型移动键查询key的生命…

第二十章行为性模式—迭代器模式

文章目录 迭代器模式解决的问题结构实例存在的问题适用场景 JDK 源码 - Iterator 行为型模式用于描述程序在运行时复杂的流程控制&#xff0c;即描述多个类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务&#xff0c;它涉及算法与对象间职责的分配。行为型模式分为…

“30分钟”带你走进线性回归的世界,轻松学习互联网营销推荐算法!

前言 本章主要介绍用于推荐系统的算法-线性回归算法的推导介绍&#xff0c;文章思路如下&#xff1a;由机器学习介绍&#xff0c;到监督学习&#xff0c;并重点介绍监督学习中回归问题里面的线性回归问题及推导。 可能需要大家具备一定的统计学、高数相关知识。 一、由机器学…

k8s入门(一)之pod创建、label使用、污点、亲和性、RS

一、创建一个pod [rootmaster01 ~]# kubectl create ns prod [rootmaster01 ~]# cat pod.yaml apiVersion: v1 kind: Pod metadata:name: pod-demonamespace: prodlabels:app: myapp spec:containers:- name: test1image: busybox:latestcommand:- "/bin/sh"- "…

问题记录 bug1-系统上电挂载异常分区,df与du命令查看文件使用大小显示不一样

linux磁盘分区 在Linux中&#xff0c;一切皆目录&#xff0c;每一块硬盘分区对应Linux的一个目录&#xff0c;所以我们可以通过管理目录来管理硬盘分区&#xff0c;而将硬盘分区与文件目录关联的操作就称为“挂载”【mount】&#xff0c;反之为“卸载”【unmount】 emmc&…

C高级 text

1.从命令行传参传入两个整数&#xff0c;整数1代表从整数几开始求和&#xff0c;整数2代表求和到整数几为止 2.打印99乘法表 3.输入年月日&#xff0c;计算是该年的第几天 1. 2. 3.

Linux进程基础

进程指正在运行的程序&#xff0c;如下图示&#xff0c;是资源分配的最小单位&#xff0c;可以通过“ps ”或“top”等命令查看正 在运行的进程&#xff0c;线程是系统的最小调度单位&#xff0c;一个进程可以拥有多个线程&#xff0c;同一进程里的线程可以共享此 进程的同一资…

Server版支持即将到期,Jira和Confluence如何迁移?(2)

到2024年2月&#xff0c;Atlassian将终止对Server产品及插件的所有支持。是时候制定您的迁移计划了——Atlassian为您提供两种迁移选择&#xff0c;一是本地部署的数据中心版本&#xff0c;中国用户25人以上即可使用&#xff0c;二是云版。作为Atlassian全球白金合作伙伴&#…