Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleClas
提交
2b446440
P
PaddleClas
项目概览
PaddlePaddle
/
PaddleClas
大约 1 年 前同步成功
通知
115
Star
4999
Fork
1114
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
19
列表
看板
标记
里程碑
合并请求
6
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleClas
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
19
Issue
19
列表
看板
标记
里程碑
合并请求
6
合并请求
6
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
2b446440
编写于
9月 08, 2022
作者:
H
HydrogenSulfate
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'newest' into update_README
上级
f0fab54b
1ddb925c
变更
8
展开全部
隐藏空白更改
内联
并排
Showing
8 changed file
with
315 addition
and
116 deletion
+315
-116
deploy/utils/predictor.py
deploy/utils/predictor.py
+5
-1
docs/images/quick_start/android_demo/android_nongfu_spring.JPG
...images/quick_start/android_demo/android_nongfu_spring.JPG
+0
-0
docs/zh_CN/PPShiTu/PPShiTuV2_introduction.md
docs/zh_CN/PPShiTu/PPShiTuV2_introduction.md
+196
-100
docs/zh_CN/image_recognition_pipeline/feature_extraction.md
docs/zh_CN/image_recognition_pipeline/feature_extraction.md
+18
-13
docs/zh_CN/inference_deployment/export_model.md
docs/zh_CN/inference_deployment/export_model.md
+1
-1
docs/zh_CN/quick_start/quick_start_recognition.md
docs/zh_CN/quick_start/quick_start_recognition.md
+3
-1
test_tipc/test_train_inference_python_npu.sh
test_tipc/test_train_inference_python_npu.sh
+46
-0
test_tipc/test_train_inference_python_xpu.sh
test_tipc/test_train_inference_python_xpu.sh
+46
-0
未找到文件。
deploy/utils/predictor.py
浏览文件 @
2b446440
...
...
@@ -60,8 +60,12 @@ class Predictor(object):
config
=
Config
(
model_file
,
params_file
)
if
args
.
use_gpu
:
if
args
.
get
(
"use_gpu"
,
False
)
:
config
.
enable_use_gpu
(
args
.
gpu_mem
,
0
)
elif
args
.
get
(
"use_npu"
,
False
):
config
.
enable_npu
()
elif
args
.
get
(
"use_xpu"
,
False
):
config
.
enable_xpu
()
else
:
config
.
disable_gpu
()
if
args
.
enable_mkldnn
:
...
...
docs/images/quick_start/android_demo/android_nongfu_spring.JPG
查看替换文件 @
f0fab54b
浏览文件 @
2b446440
759.7 KB
|
W:
|
H:
767.2 KB
|
W:
|
H:
2-up
Swipe
Onion skin
docs/zh_CN/PPShiTu/PPShiTuV2_introduction.md
浏览文件 @
2b446440
此差异已折叠。
点击以展开。
docs/zh_CN/image_recognition_pipeline/feature_extraction.md
浏览文件 @
2b446440
...
...
@@ -10,6 +10,7 @@
-
[
3.2 Neck
](
#32-neck
)
-
[
3.3 Head
](
#33-head
)
-
[
3.4 Loss
](
#34-loss
)
-
[
3.5 Data Augmentation
](
#35-data-augmentation
)
-
[
4. 实验部分
](
#4-实验部分
)
-
[
5. 自定义特征提取
](
#5-自定义特征提取
)
-
[
5.1 数据准备
](
#51-数据准备
)
...
...
@@ -46,11 +47,14 @@
#### 3.1 Backbone
Backbone 部分采用了
[
PP-LCNetV2_base
](
../models/PP-LCNetV2.md
)
,其针对Intel CPU端的性能优化探索了多个有效的结构设计方案,最终实现了在不增加推理时间的情况下,进一步提升模型的性能,最终大幅度超越现有的 SOTA 模型。
Backbone 部分采用了
[
PP-LCNetV2_base
](
../models/PP-LCNetV2.md
)
,其在
`PPLCNet_V1`
的基础上,加入了包括Rep 策略、PW 卷积、Shortcut、激活函数改进、SE 模块改进等多个优化点,使得最终分类精度与
`PPLCNet_x2_5`
相近,且推理延时减少了40%
<sup>
*
</sup>
。在实验过程中我们对
`PPLCNetV2_base`
进行了适当的改进,在保持速度基本不变的情况下,让其在识别任务中得到更高的性能,包括:去掉
`PPLCNetV2_base`
末尾的
`ReLU`
和
`FC`
、将最后一个 stage(RepDepthwiseSeparable) 的 stride 改为1。
**注:**
<sup>
*
</sup>
推理环境基于 Intel(R) Xeon(R) Gold 6271C CPU @ 2.60GHz 硬件平台,OpenVINO 推理平台。
#### 3.2 Neck
Neck 部分采用了
[
BN Neck
](
../../../ppcls/arch/gears/bnneck.py
)
,对 Backbone 抽取得到的特征的每个维度进行标准化操作,减少了同时优化度量学习损失
和分类损失的难
度。
Neck 部分采用了
[
BN Neck
](
../../../ppcls/arch/gears/bnneck.py
)
,对 Backbone 抽取得到的特征的每个维度进行标准化操作,减少了同时优化度量学习损失
函数和分类损失函数的难度,加快收敛速
度。
#### 3.3 Head
...
...
@@ -58,13 +62,17 @@ Head 部分选用 [FC Layer](../../../ppcls/arch/gears/fc.py),使用分类头
#### 3.4 Loss
Loss 部分选用
[
Cross entropy loss
](
../../../ppcls/loss/celoss.py
)
和
[
TripletAngularMarginLoss
](
../../../ppcls/loss/tripletangularmarginloss.py
)
,在训练时以分类损失和基于角度的三元组损失来指导网络进行优化。详细的配置文件见
[
GeneralRecognitionV2_PPLCNetV2_base.yaml
](
../../../ppcls/configs/GeneralRecognitionV2/GeneralRecognitionV2_PPLCNetV2_base.yaml#L63-77
)
。
Loss 部分选用
[
Cross entropy loss
](
../../../ppcls/loss/celoss.py
)
和
[
TripletAngularMarginLoss
](
../../../ppcls/loss/tripletangularmarginloss.py
)
,在训练时以分类损失和基于角度的三元组损失来指导网络进行优化。我们基于原始的 TripletLoss (困难三元组损失)进行了改进,将优化目标从 L2 欧几里得空间更换成余弦空间,并加入了 anchor 与 positive/negtive 之间的硬性距离约束,让训练与测试的目标更加接近,提升模型的泛化能力。详细的配置文件见
[
GeneralRecognitionV2_PPLCNetV2_base.yaml
](
../../../ppcls/configs/GeneralRecognitionV2/GeneralRecognitionV2_PPLCNetV2_base.yaml#L63-77
)
。
#### 3.5 Data Augmentation
我们考虑到实际相机拍摄时目标主体可能出现一定的旋转而不一定能保持正立状态,因此我们在数据增强中加入了适当的
[
随机旋转增强
](
../../../ppcls/configs/GeneralRecognitionV2/GeneralRecognitionV2_PPLCNetV2_base.yaml#L117
)
,以提升模型在真实场景中的检索能力。
<a
name=
"4"
></a>
## 4. 实验部分
我们对原有的训练数据进行了合理扩充与优化,最终使用如下 1
6
个公开数据集的汇总:
我们对原有的训练数据进行了合理扩充与优化,最终使用如下 1
7
个公开数据集的汇总:
| 数据集 | 数据量 | 类别数 | 场景 | 数据集地址 |
| :--------------------- | :-----: | :------: | :---: | :----------------------------------------------------------------------------------: |
...
...
@@ -89,16 +97,13 @@ Loss 部分选用 [Cross entropy loss](../../../ppcls/loss/celoss.py) 和 [Tripl
最终的模型精度指标如下表所示:
| 模型 | Aliproduct | VeRI-Wild | LogoDet-3k | iCartoonFace | SOP | Inshop |
| :--------- | :-------------- | :-------------- | :-------------- | :-------------- | :-------------- | :-------------- |
| - | recall@1%(mAP%) | recall@1%(mAP%) | recall@1%(mAP%) | recall@1%(mAP%) | recall@1%(mAP%) | recall@1%(mAP%) |
| PP-ShiTuV2 | 84.2(83.3) | 87.8(68.8) | 88.0(63.2) | 53.6(27.5) | 77.6(55.3) | 90.8(74.3) |
| 模型 | gldv2 | imdb_face | iNat | instre | sketch | sop
<sup>
*
</sup>
|
| :--------- | :-------------- | :-------------- | :-------------- | :-------------- | :-------------- | :-------------- |
| - | recall@1%(mAP%) | recall@1%(mAP%) | recall@1%(mAP%) | recall@1%(mAP%) | recall@1%(mAP%) | recall@1%(mAP%) |
| PP-ShiTuV2 | 98.1(90.5) | 35.9(11.2) | 38.6(23.9) | 87.7(71.4) | 39.3(15.6) | 98.3(90.9) |
| 模型 | 延时(ms) | 存储(MB) | product
<sup>
*
</sup>
| | Aliproduct | | VeRI-Wild | | LogoDet-3k | | iCartoonFace | | SOP | | Inshop | | gldv2 | | imdb_face | | iNat | | instre | | sketch | | sop | |
| :--------------------- | :------- | :------- | :------------------ | :--- | ---------- | ---- | --------- | ---- | ---------- | ---- | ------------ | ---- | -------- | ---- | -------- | ---- | -------- | ---- | --------- | ---- | -------- | ---- | -------- | ---- | -------- | ---- | -------- | ---- |
| | | | recall@1 | mAP | recall@1 | mAP | recall@1 | mAP | recall@1 | mAP | recall@1 | mAP | recall@1 | mAP | recall@1 | mAP | recall@1 | mAP | recall@1 | mAP | recall@1 | mAP | recall@1 | mAP | recall@1 | mAP | recall@1 | mAP |
| PP-ShiTuV1_general_rec | 5.0 | 34 | 65.9 | 54.3 | 83.9 | 83.2 | 88.7 | 60.1 | 86.1 | 73.6 | 84.1 | 72.3 | 79.7 | 58.6 | 89.1 | 69.4 | 98.2 | 91.6 | 28.8 | 8.42 | 12.6 | 6.1 | 72.0 | 50.4 | 27.9 | 9.5 | 97.6 | 90.3 |
| PP-ShiTuV2_general_rec | 6.1 | 19 | 73.7 | 61.0 | 84.2 | 83.3 | 87.8 | 68.8 | 88.0 | 63.2 | 53.6 | 27.5 | 77.6 | 55.3 | 90.8 | 74.3 | 98.1 | 90.5 | 35.9 | 11.2 | 38.6 | 23.9 | 87.7 | 71.4 | 39.3 | 15.6 | 98.3 | 90.9 |
*
product数据集是为了验证PP-ShiTu的泛化性能而制作的数据集,所有的数据都没有在训练和测试集中出现。该数据包含7个大类(化妆品、地标、红酒、手表、车、运动鞋、饮料),250个小类。测试时,使用250个小类的标签进行测试;sop数据集来自
[
GPR1200: A Benchmark for General-Purpose Content-Based Image Retrieval
](
https://arxiv.org/abs/2111.13122
)
,可视为“SOP”数据集的子集。
*
预训练模型地址:
[
general_PPLCNetV2_base_pretrained_v1.0.pdparams
](
https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/pretrain/PPShiTuV2/general_PPLCNetV2_base_pretrained_v1.0.pdparams
)
*
采用的评测指标为:
`Recall@1`
与
`mAP`
*
速度评测机器的 CPU 具体信息为:
`Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz`
...
...
docs/zh_CN/inference_deployment/export_model.md
浏览文件 @
2b446440
...
...
@@ -46,7 +46,7 @@ python tools/export_model.py \
<a
name=
"3"
></a>
## 3. 主体检测模型导出
主体检测模型的导出,可以参考
[
主
题
检测介绍
](
../image_recognition_pipeline/mainbody_detection.md
)
。
主体检测模型的导出,可以参考
[
主
体
检测介绍
](
../image_recognition_pipeline/mainbody_detection.md
)
。
<a
name=
"4"
></a>
## 4. 识别模型导出
...
...
docs/zh_CN/quick_start/quick_start_recognition.md
浏览文件 @
2b446440
...
...
@@ -122,7 +122,9 @@
注意:由于部分解压缩软件在解压上述
`tar`
格式文件时存在问题,建议非命令行用户下载
`zip`
格式文件并解压。
`tar`
格式文件建议使用命令
`tar -xf xxx.tar`
解压。
本章节 demo 数据下载地址如下:
[
drink_dataset_v2.0.tar(瓶装饮料数据)
](
https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/data/drink_dataset_v2.0.tar
)
。
本章节 demo 数据下载地址如下:
[
drink_dataset_v2.0.tar(瓶装饮料数据)
](
https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/data/drink_dataset_v2.0.tar
)
,
下面以
**drink_dataset_v2.0.tar**
为例介绍PC端的 PP-ShiTu 快速体验流程。用户也可以自行下载并解压其它场景的数据进行体验:
[
22种场景数据下载
](
../introduction/ppshitu_application_scenarios.md#1-应用场景介绍
)
。
如果希望体验服务端主体检测和各垂类方向的识别模型,可以参考
[
2.4 服务端识别模型列表
](
#24-服务端识别模型列表
)
...
...
test_tipc/test_train_inference_python_npu.sh
0 → 100644
浏览文件 @
2b446440
#!/bin/bash
source
test_tipc/common_func.sh
function
readlinkf
()
{
perl
-MCwd
-e
'print Cwd::abs_path shift'
"
$1
"
;
}
function
func_parser_config
()
{
strs
=
$1
IFS
=
" "
array
=(
${
strs
}
)
tmp
=
${
array
[2]
}
echo
${
tmp
}
}
BASEDIR
=
$(
dirname
"
$0
"
)
REPO_ROOT_PATH
=
$(
readlinkf
${
BASEDIR
}
/../
)
FILENAME
=
$1
# change gpu to npu in tipc txt configs
sed
-i
"s/Global.device:gpu/Global.device:npu/g"
$FILENAME
sed
-i
"s/Global.use_gpu/Global.use_npu/g"
$FILENAME
dataline
=
`
cat
$FILENAME
`
# parser params
IFS
=
$'
\n
'
lines
=(
${
dataline
}
)
# replace inference config file
inference_py
=
$(
func_parser_value
"
${
lines
[39]
}
"
)
inference_config
=
$(
func_parser_config
${
inference_py
}
)
sed
-i
's/use_gpu: True/use_npu: True/g'
"
$REPO_ROOT_PATH
/deploy/
$inference_config
"
# replace training config file
grep
-n
'tools/.*yaml'
$FILENAME
|
cut
-d
":"
-f
1
\
|
while
read
line_num
;
do
train_cmd
=
$(
func_parser_value
"
${
lines
[line_num-1]
}
"
)
trainer_config
=
$(
func_parser_config
${
train_cmd
}
)
sed
-i
's/device: gpu/device: npu/g'
"
$REPO_ROOT_PATH
/
$trainer_config
"
done
# pass parameters to test_train_inference_python.sh
cmd
=
"bash test_tipc/test_train_inference_python.sh
${
FILENAME
}
$2
"
echo
$cmd
eval
$cmd
test_tipc/test_train_inference_python_xpu.sh
0 → 100644
浏览文件 @
2b446440
#!/bin/bash
source
test_tipc/common_func.sh
function
readlinkf
()
{
perl
-MCwd
-e
'print Cwd::abs_path shift'
"
$1
"
;
}
function
func_parser_config
()
{
strs
=
$1
IFS
=
" "
array
=(
${
strs
}
)
tmp
=
${
array
[2]
}
echo
${
tmp
}
}
BASEDIR
=
$(
dirname
"
$0
"
)
REPO_ROOT_PATH
=
$(
readlinkf
${
BASEDIR
}
/../
)
FILENAME
=
$1
# change gpu to xpu in tipc txt configs
sed
-i
"s/Global.device:gpu/Global.device:xpu/g"
$FILENAME
sed
-i
"s/Global.use_gpu/Global.use_xpu/g"
$FILENAME
dataline
=
`
cat
$FILENAME
`
# parser params
IFS
=
$'
\n
'
lines
=(
${
dataline
}
)
# replace inference config file
inference_py
=
$(
func_parser_value
"
${
lines
[39]
}
"
)
inference_config
=
$(
func_parser_config
${
inference_py
}
)
sed
-i
's/use_gpu: True/use_xpu: True/g'
"
$REPO_ROOT_PATH
/deploy/
$inference_config
"
# replace training config file
grep
-n
'tools/.*yaml'
$FILENAME
|
cut
-d
":"
-f
1
\
|
while
read
line_num
;
do
train_cmd
=
$(
func_parser_value
"
${
lines
[line_num-1]
}
"
)
trainer_config
=
$(
func_parser_config
${
train_cmd
}
)
sed
-i
's/device: gpu/device: xpu/g'
"
$REPO_ROOT_PATH
/
$trainer_config
"
done
# pass parameters to test_train_inference_python.sh
cmd
=
"bash test_tipc/test_train_inference_python.sh
${
FILENAME
}
$2
"
echo
$cmd
eval
$cmd
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录