PP-ShiTu V2商品识别系统(01.简介)

news2024/11/18 19:46:57

PP-ShiTu V2商品识别系统(01.简介)

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

在这里插入图片描述

环境搭建

使用PP-ShiTu V2之前需要搭建所需环境:

1.paddle环境搭建,参见:飞桨PaddlePaddle安装
2.paddleclas环境搭建,参见:飞桨图像识别套件PaddleClas安装

paddleclas代码结构说明

conda环境下找到paddleclas包,结构如下:
在这里插入图片描述
python目录下就是用于推理的代码(文本主要使用python推理)

  • predict_det.py:目标检测代码
  • predict_rec.py:目标特征提取代码
  • predict_system:目标检测和目标识别代码(使用了以上2个代码)

商品识别流程说明

系统进行商品识别主要流程是:

  • 训练检测模型(paddleclas提供默认训练好的模型,自己也可以训练)
  • 训练特征模型(paddleclas提供默认训练好的模型,自己也可以训练)
  • 目标商品注册
    • 准备需要识别的商品图片
    • 使用paddleclas提供的工具进行图片注册
  • 全图进行目标检测,获取到商品坐标框
  • 通过获取到的坐标框在全图中抠取商品的图片
  • 用抠取的商品图片进行特征提取
  • 提取到的特征进行相似度检索(TopN)
  • 返回最相似商品名称

商品检测

在这里插入图片描述

1)模型

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

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

picodet_PPLCNet_x2_5_mainbody_lite_v1.0_infer

2)配置

检测器的配置文件可以在这里找到:
在这里插入图片描述
内容如下:

Global:
  det_inference_model_dir: "./data/models/picodet_PPLCNet_x2_5_mainbody_lite_v1.0_infer"
  batch_size: 1
  image_shape: [3, 640, 640]
  threshold: 0.45
  max_det_results: 20
  label_list:
    - foreground

  # inference engine config
  use_gpu: False
  enable_mkldnn: True
  cpu_num_threads: 10
  enable_benchmark: True
  use_fp16: False
  ir_optim: True
  use_tensorrt: False
  gpu_mem: 8000
  enable_profile: False

DetPreProcess:
  transform_ops:
    - DetResize:
        interp: 2
        keep_ratio: false
        target_size: [640, 640]
    - DetNormalizeImage:
        is_scale: true
        mean: [0.485, 0.456, 0.406]
        std: [0.229, 0.224, 0.225]
    - DetPermute: {}

DetPostProcess: {}
  • det_inference_model_dir:模型文件目录
  • threshold:检测阈值
  • max_det_results:最多检测出多少个目标
  • use_gpu:是否使用GPU

3)检测结果说明

检测返回结果如下:

{
    "count": 3,
    "data": [
        {
            "bbox": {
                "x1": 169,
                "y1": 57,
                "x2": 349,
                "y2": 508
            },
            "score": "0.77"
        },
        {
            "bbox": {
                "x1": 379,
                "y1": 429,
                "x2": 524,
                "y2": 517
            },
            "score": "0.66"
        },
        {
            "bbox": {
                "x1": 0,
                "y1": 152,
                "x2": 166,
                "y2": 430
            },
            "score": "0.64"
        }
    ]
}

返回目标数组,其中包括目标在图片中的坐标值和置信分

商品识别

在这里插入图片描述

1)特征提取

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

general_PPLCNetV2_base_pretrained_v1.0_infer

2)向量检索

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

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

3)配置

识别的配置文件可以在这里找到:
在这里插入图片描述
内容如下:

Global:
  det_inference_model_dir: "./models/picodet_PPLCNet_x2_5_mainbody_lite_v1.0_infer"
  rec_inference_model_dir: "./models/general_PPLCNetV2_base_pretrained_v1.0_infer"
  rec_nms_thresold: 0.05

  batch_size: 1
  image_shape: [3, 640, 640]
  threshold: 0.2
  max_det_results: 5
  label_list:
    - foreground

  use_gpu: True
  enable_mkldnn: True
  cpu_num_threads: 10
  enable_benchmark: True
  use_fp16: False
  ir_optim: True
  use_tensorrt: False
  gpu_mem: 8000
  enable_profile: False

DetPreProcess:
  transform_ops:
    - DetResize:
        interp: 2
        keep_ratio: false
        target_size: [640, 640]
    - DetNormalizeImage:
        is_scale: true
        mean: [0.485, 0.456, 0.406]
        std: [0.229, 0.224, 0.225]
    - DetPermute: {}

DetPostProcess: {}

RecPreProcess:
  transform_ops:
    - ResizeImage:
        size: [224, 224]
        return_numpy: False
        interpolation: bilinear
        backend: cv2
    - NormalizeImage:
        scale: 1.0/255.0
        mean: [0.485, 0.456, 0.406]
        std: [0.229, 0.224, 0.225]
        order: hwc
    - ToCHWImage:

RecPostProcess: null

# indexing engine config
IndexProcess:
  index_method: "HNSW32" # supported: HNSW32, IVF, Flat
  image_root: "./drink_dataset_v2.0/gallery/"
  index_dir: "./drink_dataset_v2.0/index"
  data_file: "./drink_dataset_v2.0/gallery/drink_label.txt"
  index_operation: "new" # suported: "append", "remove", "new"
  delimiter: "\t"
  dist_type: "IP"
  embedding_size: 512
  batch_size: 32
  return_k: 5
  score_thres: 0.5
  • Global.det_inference_model_dir:检测模型目录
  • Global.rec_inference_model_dir:特征模型目录
  • DetPreProcess.xxx:检测相关配置
  • RecPreProcess.xxx:特征相关配置
  • IndexProcess.xxx:向量召回相关配置
    • image_root:注册图片目录
    • index_dir:Faiss 索引目录
    • data_file:标注文件

4)识别结果说明

识别返回结果如下:

{
    "count": 1,
    "data": [
        {
            "bbox": {
                "x1": 328,
                "y1": 7,
                "x2": 467,
                "y2": 272
            },
            "rec_scores": "0.65",
            "rec_docs": "达能脉动维生素饮料青柠口味瓶装600ml"
        }
    ]
}

返回目标数组,其中包括目标在图片中的坐标值、置信分、商品名称(注册时候定义的)

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

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

相关文章

5.28_Java语法_运算符,接收键盘数据

1、运算符 具体应用同我C语言操作符详解博客相同,另有补充会直接写 1.1、基本的算术运算符、符号做连接符 CSDN 具体应用同我C语言操作符详解博客相同 符号做连接符: ""符号与字符串运算连用的时候是用作连接符的,其结果依然是一个字符串…

B站广告推广引流哪里能做?

哔哩哔哩(B站)作为国内领先的年轻人文化社区与视频平台,其独特的二次元文化氛围和高度活跃的用户群体,成为了众多品牌寻求突破、触达年轻消费群体的理想阵地。在这样一个充满活力但又竞争激烈的平台上有效推广,吸引并留…

光伏智慧化运营解决方案的应用和价值

在社会对新能源需求的不断扩大,光伏已经成为了可再生能源的重要组成部分,随着光伏电站数量和规模的不断扩大,相关企业和用户都就开始关注如何能够高效精准的进行电站管理,对此,鹧鸪云提出了光伏智慧化运营解决方案&…

webpack5_相关知识点

webpack是一个现代JavaScript应用程序的静态模块打包器(module bundler) ,是前端资源模块化管理和打包工具, 它可以将许多松散耦合的模块按照依赖和规则打包成符合生产环境部署的前端资源。还可以将按需加载的模块进行代码分离,等到实际需要时…

【光伏干货】光伏无人机巡检步骤

随着光伏产业的迅速发展和无人机技术的日益成熟,光伏无人机巡检已成为提高光伏电站运维效率、降低运维成本的重要手段。本文将详细介绍光伏无人机巡检的步骤,帮助读者更好地理解和应用这一技术。 一、前期准备 1、设备检查:对无人机及其相关…

Kong api网关实战教程

1. kong介绍 Kong是一款基于OpenResty(NginxLua模块)编写的高可用、易扩展的,由Mashape公司开源的API Gateway项目。Kong是基于NGINX和Apache Cassandra或PostgresQL构建的,能据供易于使用的RSTTAP[来操作和配置API管理系统,所以它可以水平扩…

HDU 2196 Computer(树形dp)

H D U 2196 C o m p u t e r (树形 d p ) \Huge{HDU 2196 Computer(树形dp)} HDU2196Computer(树形dp) 文章目录 题意思路标程 题目链接:Problem - 2196 (hdu.edu.cn) 题意 给出一个n个节点的无…

go webview/wails学习记录

文章目录 webview安装基础代码错误情况wails安装初始化一个项目错误信息使用arco-design(在初始化项目上修改代码)修改窗口图标多页面展示添加自定义图标-iconfont制作伸缩侧边栏侧边栏菜单在form中使用select且select联动选择使用go读取本地excel文件在转json_str使用go将json…

怎么把电脑上的文件传到手机上?可保存文档的云笔记

在职场中,我们经常需要将电脑上的重要文件、资料传到手机上,以便随时查阅和使用。比如,当你在公司完成了一份关键报告,但即将外出与客户沟通,这时如果能将报告传到手机上,就能在移动中随时准备应对客户的咨…

5.22-wjn

使用select实现的TCP并发服务器端 #define SER_PORT 8888 #define SER_IP "192.168.125.158" int main(int argc, const char *argv[]) {//1、为通信创建一个端点int sfd socket(AF_INET, SOCK_STREAM, 0);//参数1:说明使用的是ipv4通信域//参数2&#…

Oracle的安装以及一些相关问题

系列文章目录 Oracle的安装以及一些相关问题 文章目录 系列文章目录前言一、Oracle的安装二、常用命令三、误删dbf四、PLSQL乱码五、oracle更换数据库字符集总结 前言 一段时间没更新,主要最近一直在找工作,最终还是顺着春招找到工作了,现在…

【基础篇-Day8:JAVA字符串的学习】

目录 1、常用API2、String类2.1 String类的特点2.2 String类的常见构造方法2.3 String类的常见面试题:2.3.1 面试题一:2.3.2 面试题二:2.3.3 面试题三:2.3.4 面试题四: 2.4 String类字符串用于比较的方法2.5 String类字…

文生图模型演进:AE、VAE、VQ-VAE、VQ-GAN、DALL-E 等 8 模型

节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 合集&#x…

【idea】IDEA 设置自动导入类 / 包等信息(import)

如果大家正在使用一个未曾导入(import)过的类,或者它的静态方法或者静态字段,IDEA 会给出对应的建议。需要手动操作导入类。 以下设置可以自动导入

磁珠笔记汇总

磁珠笔记汇总 磁珠是和电感很相似的器件。 电感磁珠单位亨(H)欧姆(Ω)是否储能存储能量消耗高频能量应用场景通常用于开关电源吸收高频,EMC保护如何看待损耗使用电感时希望损耗越小越好使用磁珠时是利用其损耗来消耗不需要的高频分量 一、磁珠的工作原理 磁珠与…

第十三届蓝桥杯国赛大学B组填空题(c++)

A.2022 动态规划 AC; #include<iostream> #define int long long using namespace std; int dp[2050][15]; //dp[i][j]:把数字i分解为j个不同的数的方法数 signed main(){dp[0][0]1;for(int i1;i<2022;i){for(int j1;j<10;j){//一种是已经分成j个数,这时只需每一个…

unbantu安装ollama,maxkb

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 背景一、Ollama安装1.安装2.安装后检验3.运行模型4.常用命令 二、安装maxkb1.说明2.docker安装maxkb2.添加模型3.创建应用4.api域名无效 三、总结 背景 最近在学习…

zabbix监控mysql

一、mysql数据库监控的内容有 mysql的吞吐量 mysql的常规操作&#xff08;增删改查&#xff09; QPS&#xff08;Questions Per second:&#xff09;每秒能处理多少次请求数 TPS&#xff08;Transactions Per Second&#xff09;每秒查询处理的事务数 mysql库大小和表大小 监控…

2024年新算法-红嘴蓝鹊优化器(RBMO)优化BP神经网络回归预测

2024年新算法-红嘴蓝鹊优化器(RBMO)优化BP神经网络回归预测 亮点&#xff1a; 输出多个评价指标&#xff1a;R2&#xff0c;RMSE&#xff0c;MSE&#xff0c;MAPE和MAE 满足需求&#xff0c;分开运行和对比的都有对应的主函数&#xff1a;main_BP, main_RBMO, main_BPvsBP_R…

Mysql 单行转多行,把逗号分隔的字段拆分成多行

一、拆分前后的数据 二、执行SQL select substring_index(substring_index(a.gzlx,,,b.help_topic_id1),,,-1) gzlxname, a.gzlx,a.* from dt_task_zxgz_info a join mysql.help_topic b on b.help_topic_id < (length(a.gzlx) - length(replace(a.gzlx,,,))1) 三、解释说…