Update readme_industry.md
parent
e3943dc932
commit
6f49317abc
|
@ -65,33 +65,158 @@
|
||||||
|
|
||||||
### 数据集介绍
|
### 数据集介绍
|
||||||
|
|
||||||
#### 数据Demo
|
目前开源的商品识别方向的数据集
|
||||||
|
|
||||||
|
- [Products-10K Large Scale Product Recognition Dataset](https://www.kaggle.com/c/products-10k/data?select=train.csv) :数据集中的所有图片均来自京东商城。数据集中共包含 1 万个经常购买的 SKU。所有 SKU 组织成一个层次结构。总共有近 19 万张图片。在实际应用场景中,图像量的分布是不均衡的。所有图像都由生产专家团队手工检查/标记。
|
||||||
|
|
||||||
|
- [RP2K: A Large-Scale Retail Product Dataset for Fine-Grained Image Classification](https://arxiv.org/abs/2006.12634) :收集了超过 500,000 张货架上零售产品的图像,属于 2000 种不同的产品。所有图片均在实体零售店人工拍摄,自然采光,符合实际应用场景。
|
||||||
|
|
||||||
|
本项目数据集以上述数据集为背景,结合图片爬虫等,开源了一份新的更符合本项目背景的数据集,目前已在[AIStudio平台](https://aistudio.baidu.com/aistudio/datasetdetail/113685)开源.
|
||||||
|
|
||||||
|
#### 商品部分list
|
||||||
|
|
||||||
|
> 东古酱油一品鲜
|
||||||
|
东古黄豆酱750G
|
||||||
|
东鹏特饮罐装
|
||||||
|
中华(硬)
|
||||||
|
中华(软)
|
||||||
|
乳酸菌600亿_2
|
||||||
|
乳酸菌600亿_3
|
||||||
|
乳酸菌600亿原味
|
||||||
|
乳酸菌600亿芒果
|
||||||
|
乳酸菌600亿芦荟
|
||||||
|
...
|
||||||
|
|
||||||
#### 数据集格式
|
#### 数据集格式
|
||||||
|
* 训练集合(train dataset):用来训练模型,使模型能够学习该集合的图像特征。
|
||||||
|
* 底库数据集合(gallery dataset):用来提供图像检索任务中的底库数据,该集合可与训练集或测试集相同,也可以不同,当与训练集相同时,测试集的类别体系应与训练集的类别体系相同。
|
||||||
|
* 测试数据集合(query dataset):用来测试模型的好坏,通常要对测试集的每一张测试图片进行特征提取,之后和底库数据的特征进行距离匹配,得到识别结果,后根据识别结果计算整个测试集的指标。
|
||||||
|
|
||||||
|
训练集、底库数据集和测试数据集均使用 `txt` 文件指定,以 `CUB_200_2011` 数据集为例,训练数据集 `train_list.txt` 文件内容格式如下所示:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# 采用"空格"作为分隔符号
|
||||||
|
...
|
||||||
|
train/99/Ovenbird_0136_92859.jpg 99 2
|
||||||
|
...
|
||||||
|
train/99/Ovenbird_0128_93366.jpg 99 6
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
验证数据集(`CUB_200_2011`中既是gallery dataset,也是query dataset) `test_list.txt` 文件内容格式如下所示:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# 采用"空格"作为分隔符号
|
||||||
|
...
|
||||||
|
test/200/Common_Yellowthroat_0126_190407.jpg 200 1
|
||||||
|
...
|
||||||
|
test/200/Common_Yellowthroat_0114_190501.jpg 200 6
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
每行数据使用“空格”分割,三列数据的含义分别是训练数据的路径、训练数据的label信息、训练数据的unique id。
|
||||||
|
|
||||||
## 模型选择
|
## 模型选择
|
||||||
|
|
||||||
### 套件选择
|
### 主体检测
|
||||||
|
|
||||||
### 模型及选择思路
|
主体检测技术是目前应用非常广泛的一种检测技术,它指的是检测出图片中一个或者多个主体的坐标位置,然后将图像中的对应区域裁剪下来,进行识别,从而完成整个识别过程。主体检测是识别任务的前序步骤,可以有效提升识别精度。
|
||||||
|
|
||||||
|
考虑到商品识别实际应用场景中,需要快速准确地获得识别结果,故本项目选取**轻量级主体检测模型**[PicoDet](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/pretrain/picodet_PPLCNet_x2_5_mainbody_lite_v1.0_pretrained.pdparams)作为本项目主体检测部分的模型。此模型inference模型大小(MB)仅**30.1MB**,mAP可达**40.1%**,在**cpu**下单张图片预测耗时仅**29.8ms**(具体模型参评标准请见[PicoDet系列模型介绍](https://github.com/PaddlePaddle/PaddleDetection/blob/develop/configs/picodet/README.md)),完美符合本项目实际落地需求。
|
||||||
|
|
||||||
|
### 特征提取
|
||||||
|
|
||||||
|
特征提取是图像识别中的关键一环,它的作用是将输入的图片转化为固定维度的特征向量,用于后续的向量检索。好的特征需要具备相似度保持性,即在特征空间中,相似度高的图片对其特征相似度要比较高(距离比较近),相似度低的图片对,其特征相似度要比较小(距离比较远)。Deep Metric Learning用以研究如何通过深度学习的方法获得具有强表征能力的特征。
|
||||||
|
|
||||||
|
考虑到本项目的真实落地的场景中,推理速度才是考量模型好坏的重要指标,所以本项目采用 [PP_LCNet_x2_5](https://github.com/PaddlePaddle/PaddleClas/blob/release/2.3/docs/zh_CN/models/PP-LCNet.md) 作为骨干网络,从而更好地适应 Intel CPU,有速度更快、准确率更高的使用体验。
|
||||||
|
|
||||||
|
### 向量检索
|
||||||
|
|
||||||
|
向量检索技术在图像识别、图像检索中应用比较广泛。其主要目标是,对于给定的查询向量,在已经建立好的向量库中,与库中所有的待查询向量,进行特征向量的相似度或距离计算,得到相似度排序。在图像识别系统中,本项目使用 [Faiss](https://github.com/facebookresearch/faiss) 对此部分进行支持。在此过程中,本项目选取 **HNSW32** 为检索算法,使得检索精度、检索速度能够取得较好的平衡,更为贴切本项目实际应用场景的使用需求。
|
||||||
|
|
||||||
## 模型训练
|
## 模型训练
|
||||||
|
|
||||||
### 训练流程
|
### 训练流程
|
||||||
|
|
||||||
### 训练代码及可改参数
|
1. 数据准备
|
||||||
|
|
||||||
### 训练模式
|
首先,需要基于任务定制自己的数据集。数据集格式参见格式说明。在启动模型训练之前,需要在配置文件中修改数据配置相关的内容, 主要包括数据集的地址以及类别数量。对应到配置文件中的位置如下所示:
|
||||||
|
|
||||||
## 模型评估和预测
|
```
|
||||||
|
Head:
|
||||||
|
name: ArcMargin
|
||||||
|
embedding_size: 512
|
||||||
|
class_num: 185341 #此处表示类别数
|
||||||
|
```
|
||||||
|
```
|
||||||
|
Train:
|
||||||
|
dataset:
|
||||||
|
name: ImageNetDataset
|
||||||
|
image_root: ./dataset/ #此处表示train数据所在的目录
|
||||||
|
cls_label_path: ./dataset/train_reg_all_data.txt #此处表示train数据集label文件的地址
|
||||||
|
```
|
||||||
|
```
|
||||||
|
Query:
|
||||||
|
dataset:
|
||||||
|
name: VeriWild
|
||||||
|
image_root: ./dataset/Aliproduct/. #此处表示query数据集所在的目录
|
||||||
|
cls_label_path: ./dataset/Aliproduct/val_list.txt. #此处表示query数据集label文件的地址
|
||||||
|
```
|
||||||
|
```
|
||||||
|
Gallery:
|
||||||
|
dataset:
|
||||||
|
name: VeriWild
|
||||||
|
image_root: ./dataset/Aliproduct/ #此处表示gallery数据集所在的目录
|
||||||
|
cls_label_path: ./dataset/Aliproduct/val_list.txt. #此处表示gallery数据集label文件的地址
|
||||||
|
```
|
||||||
|
|
||||||
### 评估方法介绍
|
2. 模型训练
|
||||||
|
|
||||||
### 评估代码
|
- 单机单卡训练
|
||||||
|
```
|
||||||
|
python tools/train.py -c ppcls/configs/ResNet50_vd_SOP.yaml
|
||||||
|
```
|
||||||
|
- 单机多卡训练
|
||||||
|
```
|
||||||
|
python -m paddle.distributed.launch
|
||||||
|
--gpus="0,1,2,3" tools/train.py
|
||||||
|
-c ppcls/configs/ResNet50_vd_SOP.yaml
|
||||||
|
```
|
||||||
|
训练完成之后,会在`output`目录下生成`best_model`模型文件。
|
||||||
|
|
||||||
|
3. 模型评估
|
||||||
|
|
||||||
|
- 单卡评估
|
||||||
|
```
|
||||||
|
python tools/eval.py -c ppcls/configs/ResNet50_vd_SOP.yaml -o Global.pretrained_model="output/RecModel/best_model"
|
||||||
|
```
|
||||||
|
- 多卡评估
|
||||||
|
```
|
||||||
|
python -m paddle.distributed.launch
|
||||||
|
--gpus="0,1,2,3" tools/eval.py
|
||||||
|
-c ppcls/configs/ResNet50_vd_SOP.yaml
|
||||||
|
-o Global.pretrained_model="output/RecModel/best_model"
|
||||||
|
```
|
||||||
|
|
||||||
|
4. 模型推理
|
||||||
|
|
||||||
|
推理过程包括两个步骤: 1)导出推理模型, 2)获取特征向量
|
||||||
|
- 导出推理模型
|
||||||
|
```
|
||||||
|
python tools/export_model -c ppcls/configs/ResNet50_vd_SOP.yaml -o Global.pretrained_model="output/RecModel/best_model"
|
||||||
|
```
|
||||||
|
生成的推理模型位于`inference`目录,名字为`inference.pd*`
|
||||||
|
|
||||||
|
- 获取特征向量
|
||||||
|
```
|
||||||
|
cd deploy
|
||||||
|
python python/predict_rec.py -c configs/inference_rec.yaml -o Global.rec_inference_model_dir="../inference"
|
||||||
|
```
|
||||||
|
|
||||||
### bsseline指标结果
|
### bsseline指标结果
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### 测试代码
|
### 测试代码
|
||||||
|
|
||||||
### 测试效果图
|
### 测试效果图
|
||||||
|
|
Loading…
Reference in New Issue