PaddleClas套件——PP-ShiTuV2模型详解

article/2025/9/24 12:41:08

1. PP-ShiTuV2模型介绍

PP-ShiTuV2 是基于 PP-ShiTuV1 改进的一个实用轻量级通用图像识别系统,由主体检测、特征提取、向量检索三个模块构成,相比 PP-ShiTuV1 具有更高的识别精度、更强的泛化能力以及相近的推理速度*。主要针对训练数据集、特征提取两个部分进行优化,使用了更优的骨干网络、损失函数与训练策略,使得 PP-ShiTuV2 在多个实际应用场景上的检索性能有显著提升。

在这里插入图片描述

模型存储(主体检测+特征提取)product
recall@1
PP-ShiTuV164(30+34)MB66.8%
PP-ShiTuV249(30+19)MB73.8%

2. 模块介绍与训练

3.1 主体检测

主体检测是目前应用非常广泛的一种检测技术,它指的是检测出图片中一个或者多个主体的坐标位置,然后将图像中的对应区域裁剪下来进行识别。主体检测是识别任务的前序步骤,输入图像经过主体检测后再进行识别,可以过滤复杂背景,有效提升识别精度。

考虑到检测速度、模型大小、检测精度等因素,最终选择 PaddleDetection 自研的轻量级模型 PicoDet-LCNet_x2_5 作为 PP-ShiTuV2 的主体检测模型。

3.2 数据集

在 PaddleClas 的识别任务中,训练主体检测模型时主要用到了以下几个数据集。

数据集数据量主体检测任务中使用的数据量场景数据集地址
Objects365170W6k通用场景地址
COCO201712W5k通用场景地址
iCartoonFace2k2k动漫人脸检测地址
LogoDet-3k3k2kLogo 检测地址
RPC3k3k商品检测地址

在实际训练的过程中,将所有数据集混合在一起。由于是主体检测,这里将所有标注出的检测框对应的类别都修改为 前景 的类别,最终融合的数据集中只包含 1 个类别,即前景。

3.3 模型选择

目标检测方法种类繁多,比较常用的有两阶段检测器(如 FasterRCNN 系列等);单阶段检测器(如 YOLO、SSD 等);anchor-free 检测器(如 PicoDet、FCOS 等)。在主体检测中,我们使用PicoDet系列模型,其在CPU端与移动端,速度较快、精度较好,处于较为领先的业界水平。

基于上述研究,PaddleClas 中提供了 1 个通用主体检测模型,既轻量级主体检测模型,分别适用于端侧场景以及服务端场景。下面的表格中给出了在上述 5 个数据集上的平均 mAP 以及它们的模型大小、预测速度对比信息。

模型模型结构预训练模型下载地址inference 模型下载地址mAPinference 模型大小(MB)
轻量级主体检测模型PicoDet地址tar 格式文件地址 zip 格式文件地址41.5%30.1
  • 注意
    • 由于部分解压缩软件在解压上述 tar 格式文件时存在问题,建议非命令行用户下载 zip 格式文件并解压。tar 格式文件建议使用命令 tar xf xxx.tar 解压。
    • 速度评测机器的 CPU 具体信息为:Intel® Xeon® Gold 6148 CPU @ 2.40GHz,速度指标为开启 mkldnn,线程数设置为 10 测试得到。
    • 主体检测的预处理过程较为耗时,平均每张图在上述机器上的时间在 40~55 ms 左右,没有包含在上述的预测耗时统计中。

3.3.1 轻量级主体检测模型

PicoDet 由 PaddleDetection 提出,是一个适用于 CPU 或者移动端场景的目标检测算法。具体地,它融合了下面一系列优化算法。

  • VFL + GFL
  • 新的PAN Neck结构
  • 余弦学习率策略
  • Cycle-EMA
  • ATSS及SimOTA 标签分配策略

PP-PicoDet模型有如下特点:

  • 🌟 更高的mAP: 第一个在1M参数量之内mAP(0.5:0.95)超越30+(输入416像素时)。
  • 🚀 更快的预测速度: 网络预测在ARM CPU下可达150FPS。
  • 😊 部署友好: 支持PaddleLite/MNN/NCNN/OpenVINO等预测库,支持转出ONNX,提供了C++/Python/Android的demo。
  • 😍 先进的算法: 我们在现有SOTA算法中进行了创新, 包括:ESNet, CSP-PAN, SimOTA等等。

更多关于 PicoDet 的优化细节与 benchmark 可以参考 PicoDet 系列模型介绍。

在轻量级主体检测任务中,为了更好地兼顾检测速度与效果,PP-ShiTuV2使用 PPLCNet_x2_5 作为主体检测模型的骨干网络,同时将训练与预测的图像尺度修改为了 640x640,其余配置与 picodet_l_416_coco.yml 完全一致。将数据集更换为自定义的主体检测数据集,进行训练,最终得到检测模型。

3. 特征提取

特征提取是图像识别中的关键一环,它的作用是将输入的图片转化为固定维度的特征向量,用于后续的 向量检索 。考虑到特征提取模型的速度、模型大小、特征提取性能等因素,最终选择 PaddleClas 自研的 PPLCNetV2_base 作为特征提取网络。相比 PP-ShiTuV1 所使用的 PPLCNet_x2_5PPLCNetV2_base基本保持了较高的分类精度,并减少了40%的推理时间*。

注: *推理环境基于 Intel® Xeon® Gold 6271C CPU @ 2.60GHz 硬件平台,OpenVINO 推理平台。

在实验过程中发现可以对 PPLCNetV2_base 进行适当的改进,在保持速度基本不变的情况下,让其在识别任务中得到更高的性能,包括:去掉 PPLCNetV2_base 末尾的 ReLU 和 FC、将最后一个 stage(RepDepthwiseSeparable) 的 stride 改为1。

3.1 摘要

特征提取图像识别中的关键一环,它的作用是将输入的图片转化为固定维度的特征向量,用于后续的向量检索。一个好的特征需要具备“相似度保持性”,即相似度高的图片对,其特征的相似度也比较高(特征空间中的距离比较近),相似度低的图片对,其特征相似度要比较低(特征空间中的距离比较远)。为此Deep Metric Learning领域内提出了不少方法用以研究如何通过深度学习来获得具有强表征能力的特征。

3.2 介绍

为了图像识别任务的灵活定制,我们将整个网络分为 Backbone、 Neck、 Head 以及 Loss 部分,整体结构如下图所示:
在这里插入图片描述
图中各个模块的功能为:

  • Backbone: 用于提取输入图像初步特征的骨干网络,一般由配置文件中的 Backbone 以及 - - BackboneStopLayer 字段共同指定。
  • Neck: 用以特征增强及特征维度变换。可以是一个简单的 FC Layer,用来做特征维度变换;也可以是较复杂的 FPN 结构,用以做特征增强,一般由配置文件中的 Neck 字段指定。
  • Head: 用来将 Neck 的输出 feature 转化为 logits,让模型在训练阶段能以分类任务的形式进行训练。除了常用的 FC Layer 外,还可以替换为 CosMargin, ArcMargin, CircleMargin 等模块,一般由配置文件中的 Head 字段指定。
  • Loss: 指定所使用的 Loss 函数。我们将 Loss 设计为组合 loss 的形式,可以方便地将 Classification Loss 和 Metric learning Loss 组合在一起,一般由配置文件中的 Loss 字段指定。

3.3 方法

3.3.1 Backbone

Backbone 部分采用了 PP-LCNetV2_base,其在 PPLCNet_V1 的基础上,加入了包括Rep 策略、PW 卷积、Shortcut、激活函数改进、SE 模块改进等多个优化点,使得最终分类精度与 PPLCNet_x2_5 相近,且推理延时减少了40%*。在实验过程中我们对 PPLCNetV2_base 进行了适当的改进,在保持速度基本不变的情况下,让其在识别任务中得到更高的性能,包括:去掉 PPLCNetV2_base 末尾的 ReLUFC、将最后一个 stage(RepDepthwiseSeparable) 的 stride 改为1。

注: *推理环境基于 Intel® Xeon® Gold 6271C CPU @ 2.60GHz 硬件平台,OpenVINO 推理平台。

3.3.2 Neck

Neck 部分采用了 BN Neck,对 Backbone 抽取得到的特征的每个维度进行标准化操作,减少了同时优化度量学习损失函数和分类损失函数的难度,加快收敛速度。

3.3.3 Head

Head 部分选用 FC Layer,使用分类头将 feature 转换成 logits 供后续计算分类损失。

3.3.4 Loss

Loss 部分选用 Cross entropy loss 和 TripletAngularMarginLoss,在训练时以分类损失和基于角度的三元组损失来指导网络进行优化。我们基于原始的 TripletLoss (困难三元组损失)进行了改进,将优化目标从 L2 欧几里得空间更换成余弦空间,并加入了 anchor 与 positive/negtive 之间的硬性距离约束,让训练与测试的目标更加接近,提升模型的泛化能力。详细的配置文件见 GeneralRecognitionV2_PPLCNetV2_base.yaml。

3.3.5 Data Augmentation

考虑到实际相机拍摄时目标主体可能出现一定的旋转而不一定能保持正立状态,因此在数据增强中加入了适当的 随机旋转增强,以提升模型在真实场景中的检索能力。

特征提取模型的数据集、训练、评估、推理等详细信息可以参考文档:PPLCNetV2_base_ShiTu。

4. 向量检索

向量检索技术在图像识别、图像检索中应用比较广泛。其主要目标是对于给定的查询向量,在已经建立好的向量库中进行特征向量的相似度或距离计算,返回候选向量的相似度排序结果。

在 PP-ShiTuV2 识别系统中,我们使用了 Faiss 向量检索开源库对此部分进行支持,其具有适配性好、安装方便、算法丰富、同时支持CPU与GPU的优点。

PP-ShiTuV2 系统中关于 Faiss 向量检索库的安装及使用可以参考文档:vector search。

更多细节请参考PP-ShiTuV2详细介绍。

5. PP-LCNetV2介绍

5.1 模型简介

骨干网络对计算机视觉下游任务的影响不言而喻,不仅对下游模型的性能影响很大,而且模型效率也极大地受此影响,但现有的大多骨干网络在真实应用中的效率并不理想,特别是缺乏针对 Intel CPU 平台所优化的骨干网络,我们测试了现有的主流轻量级模型,发现在 Intel CPU 平台上的效率并不理想,然而目前 Intel CPU 平台在工业界仍有大量使用场景,因此我们提出了 PP-LCNet 系列模型,PP-LCNetV2 是在 PP-LCNetV1 基础上所改进的。

5.2 模型细节

在这里插入图片描述
PP-LCNetV2 模型的网络整体结构如上图所示。PP-LCNetV2 模型是在 PP-LCNetV1 的基础上优化而来,主要使用重参数化策略组合了不同大小卷积核的深度卷积,并优化了点卷积、Shortcut等。

5.2.1 Rep 策略

卷积核的大小决定了卷积层感受野的大小,通过组合使用不同大小的卷积核,能够获取不同尺度的特征,因此 PPLCNetV2 在 Stage4、Stage5 中,在同一层组合使用 kernel size 分别为 5、3、1 的 DW 卷积,同时为了避免对模型效率的影响,使用重参数化(Re parameterization,Rep)策略对同层的 DW 卷积进行融合,如下图所示。
在这里插入图片描述

5.2.2 PW 卷积

深度可分离卷积通常由一层 DW 卷积和一层 PW 卷积组成,用以替换标准卷积,为了使深度可分离卷积具有更强的拟合能力,我们尝试使用两层 PW 卷积,同时为了控制模型效率不受影响,两层 PW 卷积设置为:第一个在通道维度对特征图压缩,第二个再通过放大还原特征图通道,如下图所示。通过实验发现,该策略能够显著提高模型性能,同时为了平衡对模型效率带来的影响,PPLCNetV2 仅在 Stage4 中使用了该策略。
在这里插入图片描述

5.2.3 Shortcut

残差结构(residual)自提出以来,被诸多模型广泛使用,但在轻量级卷积神经网络中,由于残差结构所带来的元素级(element-wise)加法操作,会对模型的速度造成影响,我们在 PP-LCNetV2 中,以 Stage 为单位实验了残差结构对模型的影响,发现残差结构的使用并非一定会带来性能的提高,因此 PPLCNetV2 仅在最后一个 Stage 中的使用了残差结构:在 Block 中增加 Shortcut,如下图所示。
在这里插入图片描述

5.2.4 激活函数

在目前的轻量级卷积神经网络中,ReLU、Hard-Swish 激活函数最为常用,虽然在模型性能方面,Hard-Swish 通常更为优秀,然而我们发现部分推理平台对于 Hard-Swish 激活函数的效率优化并不理想,因此为了兼顾通用性,PP-LCNetV2 默认使用了 ReLU 激活函数,并且我们测试发现,ReLU 激活函数对于较大模型的性能影响较小。

5.2.5 SE 模块

虽然 SE 模块能够显著提高模型性能,但其对模型速度的影响同样不可忽视,在 PP-LCNetV1 中,我们发现在模型中后部使用 SE 模块能够获得最大化的收益。在 PP-LCNetV2 的优化过程中,我们以 Stage 为单位对 SE 模块的位置做了进一步实验,并发现在 Stage4 中使用能够取得更好的平衡。

更多详细内容请参考PP-LCNetV2

项目实践可参考以下:

  • 基于PP-ShiTuV2的珍惜动物识别系统
  • 基于PP-ShiTu图像识别系统的商品识别

http://chatgpt.dhexx.cn/article/pY7q2bg2.shtml

相关文章

SAP-PP知识分享-PP常用表积累

原文链接:SAP-PP知识分享-PP常用表积累(建议收藏,以后好找)导读 本篇给大家简单总结一下PP中常见、常用的表集合。 正文 1.需求相关RESB---预定/相关需求MDKhttps://mp.weixin.qq.com/s/s7SlfOOFf5QjK_oZalaujw 大家可以关注我个人…

PP-LCNet论文全文解析

PP-LCNet: A Lightweight CPU Convolutional Neural Network 🔗 PDF Link 🍺 Github Code Section 1 介绍 随着模型参数和FLOPs的加大,模型越来越难以在基于ARM架构的移动端设备或者x86架构的CPU上取得较快的推理速度。虽然有许多优秀的移动…

PP-YOLO论文阅读笔记

PP-YOLO: An effective and efficient implementation of object detector 期刊: arXiv preprint年份:2020 主要内容列举: ① :实现一个有效性和效率相对平衡的对象检测器,可以直接应用于实际应用场景; ② ②:添加了一系列几乎不会增加推断时间的技巧,以…

【paddle】PP飞桨

PP飞桨AI Studio 项目:https://aistudio.baidu.com/aistudio/projectoverview/public 数据集:https://aistudio.baidu.com/aistudio/datasetoverview 课程:https://aistudio.baidu.com/aistudio/course 比赛:https://aistudio.ba…

PP-ShiTu: A Practical Lightweight Image Recognition System

最近看了一个新的分享,关于图像识别的,对于大规模图像搜索以及新物品频繁情况下表现良好。 论文: https://arxiv.org/abs/2111.00775项目: https://github.com/PaddlePaddle/PaddleClas Abstract 近年来,图像识别的…

SAP_PP模块流程

1、SAP_PP模块介绍 PP模块涉及到工程部、财务部、PC、MC、生产部这些业务部门;主要大块在于PMC和生产;是整个SAP的源头所在; 2、整体业务逻辑 工程部:维护物料主数据、收集业务视图、维护BOM、工艺路线、生产版本,这些数据维护…

PP模块学习总结

PP模块总览 生产业务主要包含三部分: 主数据管理(有效 、准确,用来确保查询速度)生产计划安排(满足销售、降低库存)生产制造执行 PP模块数据 定义:是企业运行基本数据,描述业务流…

PP-OCR

论文: PP-OCR: A Practical Ultra Lightweight OCR System Github:https://github.com/PaddlePaddle/PaddleOCR 百度开源的ocr检测识别系统,称为PP-OCR。PP-OCR的中文字符识别模型仅3.5M,支持识别6622个中文字符。英文字符识别模…

pp助手可以刷机吗android,如何使用PP助手进行刷机?

PP助手官方版是当前最适合的苹果助手,iPhone/iTouch/iPad通通完美支持,个性铃声自制,一键越狱插件安装、资料备份、SHSH管理等通通都具备,PP助手官方版汇集了很多大型热门游戏软件,统统一键即可简单下载!今天在这里小编…

pp助手可以刷机吗android,pp助手刷机 pp助手怎么刷机

小编今天带来pp助手刷机,pp助手怎么刷机的教程。想用pp助手刷机?要知道刷机有风险,刷机需谨慎。想清楚了,那么就进来看教程刷机吧。包教包会! 注意:刷机前一定要备份好自己的东西。 1.首先下载更新新版本pp…

pp-vehicle简介

简介 飞桨目标检测端到端开发套件PaddleDetection正式开源车辆分析工具PP-Vehicle!该工具主要包含:提供车牌识别、车辆属性分析(颜色、车型)、车流量统计以及违章检测四大功能,兼容图片、在线视频流、视频输入&#x…

PP-YOLO

PP-YOLOv2 目录 PP-YOLOv2的改进点 数据增强 : MixUp Backbone :换R50 Better Pre-Train dcn Neck : SPP CoordConv DropBlock PAN MISH Loss : IoU Loss IoU Aware Loss 其他 : Large Batch Size Grid…

PP-LiteSeg

简介 整体还是采用跳层连接结构,引入了统一注意力融合模块(空间和通道注意力机制)、金字塔模块来聚合上下文。 使用统一注意力模块来提高分割精度,通过融合解码器中的低级和高级特征来实现的,与之前的BiSeNetV2中的通道…

SPSS PP图和QQ图

P-P图和Q-Q图都是用来观察变量是否服从正太分布的。 选择菜单中的分析-描述统计-P-P图,则如下图 1变量选项栏:选择绘制pp图的变量,可多选 2检验分布选项栏:用于检测待检验分布的类型,如beta,卡方&#xff0…

PP图和QQ图以及它们意义

先说结论1: P-P图和Q-Q图的用途完全相同,只是检验方法存在差异。 如果两个分布相似,则该Q-Q图趋近于落在y=x线上。如果两分布线性相关,则点在Q-Q图上趋近于落在一条直线上,但不一定在y=x线上。 再说结论2:Q-Q图可以用来在分布的位置-尺度范畴上可视化的评估参数。 从定义…

正态性检验之QQ图与PP图

正态性检验方法有很多种,主要可以分为以下几类: 图示法统计方法正态概率图、频率直方图、PP图、QQ图偏度峰度检验、皮尔逊卡方检验、K-S检验、W检验、EP检验、秩和检验、游程检验等非参检验 按理说图示法应该是最简单的方法,但大多本科统计…

PP图,QQ 图,及 python 画图

统计学中有时会用到 PP 图 或 QQ 图,用来看样本数据是否服从某一特定分布。 若 PP 或 QQ 图中的点基本落在一条 45度 的线上,则说明服从特定分布。 一般的步骤为: 将样本数据从小到大排序,假设排序后的样本数据为 x 1 x_1 x1​…

pptp服务搭建

1 检查系统是否支持pptp cat /dev/ppp 如果输出 cat: /dev/ppp: No such device or address 则说明可以正常架设pptp服务 2 设置内核转发,开启路由转发 vi /etc/sysctl.conf 添加 net.ipv4.ip_forward1 通过下面命令查看 sysctl -p 3更新yum相关源 wget http…

VPN服务搭建流程记录

之前,一直有想法搭建一套属于自己的VPN服务,但是,一直苦于"拖延症"的困扰,没有真正实际去实践。最近,终于打破了这个困扰,所以,也希望记录一下整体的搭建流程,操作系统Cen…

Guava常用方法

目录 简介 Maven依赖 字符串检查工具 NULL值检查 先决条件检查 判断对象是否为null 操作集合 简介 Guava,中文是石榴的意思,Guava项目,是基于java的Google的开源的工具类库,包含了许多被Google的java项目广泛依赖的核心库&…