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

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"
        }
    ]
}

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

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值