Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleDetection
提交
ac3b6f85
P
PaddleDetection
项目概览
PaddlePaddle
/
PaddleDetection
大约 1 年 前同步成功
通知
695
Star
11112
Fork
2696
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
184
列表
看板
标记
里程碑
合并请求
40
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleDetection
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
184
Issue
184
列表
看板
标记
里程碑
合并请求
40
合并请求
40
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
ac3b6f85
编写于
1月 17, 2023
作者:
G
Guanghua Yu
提交者:
GitHub
1月 17, 2023
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add YOLOv8 ACT demo (#7624)
上级
1e62f011
变更
13
隐藏空白更改
内联
并排
Showing
13 changed file
with
125 addition
and
45 deletion
+125
-45
deploy/auto_compression/README.md
deploy/auto_compression/README.md
+37
-16
deploy/auto_compression/configs/picodet_s_qat_dis.yaml
deploy/auto_compression/configs/picodet_s_qat_dis.yaml
+2
-2
deploy/auto_compression/configs/ppyoloe_l_qat_dis.yaml
deploy/auto_compression/configs/ppyoloe_l_qat_dis.yaml
+2
-3
deploy/auto_compression/configs/ppyoloe_plus_l_qat_dis.yaml
deploy/auto_compression/configs/ppyoloe_plus_l_qat_dis.yaml
+2
-3
deploy/auto_compression/configs/ppyoloe_plus_m_qat_dis.yaml
deploy/auto_compression/configs/ppyoloe_plus_m_qat_dis.yaml
+2
-3
deploy/auto_compression/configs/ppyoloe_plus_s_qat_dis.yaml
deploy/auto_compression/configs/ppyoloe_plus_s_qat_dis.yaml
+2
-3
deploy/auto_compression/configs/ppyoloe_plus_x_qat_dis.yaml
deploy/auto_compression/configs/ppyoloe_plus_x_qat_dis.yaml
+2
-3
deploy/auto_compression/configs/yolov5_s_qat_dis.yml
deploy/auto_compression/configs/yolov5_s_qat_dis.yml
+2
-3
deploy/auto_compression/configs/yolov6mt_s_qat_dis.yaml
deploy/auto_compression/configs/yolov6mt_s_qat_dis.yaml
+2
-3
deploy/auto_compression/configs/yolov7_l_qat_dis.yaml
deploy/auto_compression/configs/yolov7_l_qat_dis.yaml
+2
-3
deploy/auto_compression/configs/yolov8_reader.yml
deploy/auto_compression/configs/yolov8_reader.yml
+27
-0
deploy/auto_compression/configs/yolov8_s_qat_dis.yaml
deploy/auto_compression/configs/yolov8_s_qat_dis.yaml
+32
-0
deploy/auto_compression/run.py
deploy/auto_compression/run.py
+11
-3
未找到文件。
deploy/auto_compression/README.md
浏览文件 @
ac3b6f85
...
...
@@ -17,43 +17,52 @@
## 2.Benchmark
### PP-YOLOE
### PP-YOLOE
+
| 模型 | Base mAP | 离线量化mAP | ACT量化mAP | TRT-FP32 | TRT-FP16 | TRT-INT8 | 配置文件 | 量化模型 |
| :-------- |:-------- |:--------: | :---------------------: | :----------------: | :----------------: | :---------------: | :----------------------: | :---------------------: |
| PP-YOLOE-l | 50.9 | - | 50.6 | 11.2ms | 7.7ms |
**6.7ms**
|
[
config
](
https://github.com/PaddlePaddle/PaddleDetection/tree/develop/deploy/auto_compression/configs/ppyoloe_l_qat_dis.yaml
)
|
[
Quant Model
](
https://bj.bcebos.com/v1/paddle-slim-models/act/ppyoloe_crn_l_300e_coco_quant.tar
)
|
| PP-YOLOE+_s | 43.7 | - | 42.9 | - | - | - |
[
config
](
./configs/ppyoloe_plus_s_qat_dis.yaml
)
|
[
Quant Model
](
https://bj.bcebos.com/v1/paddledet/deploy/Inference/ppyoloe_plus_s_qat_dis.tar
)
|
| PP-YOLOE+_m | 49.8 | - | 49.3 | - | - | - |
[
config
](
./configs/ppyoloe_plus_m_qat_dis.yaml
)
|
[
Quant Model
](
https://bj.bcebos.com/v1/paddledet/deploy/Inference/ppyoloe_plus_m_qat_dis.tar
)
|
| PP-YOLOE+_l | 52.9 | - | 52.6 | - | - | - |
[
config
](
./configs/ppyoloe_plus_l_qat_dis.yaml
)
|
[
Quant Model
](
https://bj.bcebos.com/v1/paddledet/deploy/Inference/ppyoloe_plus_l_qat_dis.tar
)
|
| PP-YOLOE+_x | 54.7 | - | 54.4 | - | - | - |
[
config
](
./configs/ppyoloe_plus_x_qat_dis.yaml
)
|
[
Quant Model
](
https://bj.bcebos.com/v1/paddledet/deploy/Inference/ppyoloe_plus_x_qat_dis.tar
)
|
-
mAP的指标均在COCO val2017数据集中评测得到,IoU=0.5:0.95。
-
PP-YOLOE-l模型在Tesla V100的GPU环境下测试,并且开启TensorRT,batch_size=1,包含NMS,测试脚本是
[
benchmark demo
](
https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.4/deploy/python
)
。
###
PP-PicoDet
###
YOLOv8
| 模型 | 策略 | mAP | FP32 | FP16 | INT8 | 配置文件 | 模型 |
| :-------- |:-------- |:--------: | :----------------: | :----------------: | :---------------: | :----------------------: | :---------------------: |
| PicoDet-S-NPU | Baseline | 30.1 | - | - | - |
[
config
](
https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_s_416_coco_npu.yml
)
|
[
Model
](
https://bj.bcebos.com/v1/paddle-slim-models/act/picodet_s_416_coco_npu.tar
)
|
| PicoDet-S-NPU | 量化训练 | 29.7 | - | - | - |
[
config
](
https://github.com/PaddlePaddle/PaddleSlim/tree/develop/demo/full_quantization/detection/configs/picodet_s_qat_dis.yaml
)
|
[
Model
](
https://bj.bcebos.com/v1/paddle-slim-models/act/picodet_s_npu_quant.tar
)
|
| 模型 | Base mAP | 离线量化mAP | ACT量化mAP | TRT-FP32 | TRT-FP16 | TRT-INT8 | 配置文件 | 量化模型 |
| :-------- |:-------- |:--------: | :---------------------: | :----------------: | :----------------: | :---------------: | :----------------------: | :---------------------: |
| YOLOv8-s | 44.9 | 43.9 | 44.3 | 9.27ms | 4.65ms |
**3.78ms**
|
[
config
](
https://github.com/PaddlePaddle/PaddleSlim/blob/develop/example/auto_compression/detection/configs/yolov8_s_qat_dis.yaml
)
|
[
Model
](
https://bj.bcebos.com/v1/paddle-slim-models/act/yolov8_s_500e_coco_trt_nms_quant.tar
)
|
**注意:**
-
表格中YOLOv8模型均为带NMS的模型,可直接在TRT中部署,如果需要对齐测试标准,需要测试不带NMS的模型。
-
mAP的指标均在COCO val2017数据集中评测得到,IoU=0.5:0.95。
-
表格中的性能在Tesla T4的GPU环境下测试,并且开启TensorRT,batch_size=1。
### PP-YOLOE
+
### PP-YOLOE
| 模型 | Base mAP | 离线量化mAP | ACT量化mAP | TRT-FP32 | TRT-FP16 | TRT-INT8 | 配置文件 | 量化模型 |
| :-------- |:-------- |:--------: | :---------------------: | :----------------: | :----------------: | :---------------: | :----------------------: | :---------------------: |
| PP-YOLOE+_s | 43.7 | - | 42.9 | - | - | - |
[
config
](
./configs/ppyoloe_plus_s_qat_dis.yaml
)
|
[
Quant Model
](
https://bj.bcebos.com/v1/paddledet/deploy/Inference/ppyoloe_plus_s_qat_dis.tar
)
|
| PP-YOLOE+_m | 49.8 | - | 49.3 | - | - | - |
[
config
](
./configs/ppyoloe_plus_m_qat_dis.yaml
)
|
[
Quant Model
](
https://bj.bcebos.com/v1/paddledet/deploy/Inference/ppyoloe_plus_m_qat_dis.tar
)
|
| PP-YOLOE+_l | 52.9 | - | 52.6 | - | - | - |
[
config
](
./configs/ppyoloe_plus_l_qat_dis.yaml
)
|
[
Quant Model
](
https://bj.bcebos.com/v1/paddledet/deploy/Inference/ppyoloe_plus_l_qat_dis.tar
)
|
| PP-YOLOE+_x | 54.7 | - | 54.4 | - | - | - |
[
config
](
./configs/ppyoloe_plus_x_qat_dis.yaml
)
|
[
Quant Model
](
https://bj.bcebos.com/v1/paddledet/deploy/Inference/ppyoloe_plus_x_qat_dis.tar
)
|
| PP-YOLOE-l | 50.9 | - | 50.6 | 11.2ms | 7.7ms |
**6.7ms**
|
[
config
](
https://github.com/PaddlePaddle/PaddleDetection/tree/develop/deploy/auto_compression/configs/ppyoloe_l_qat_dis.yaml
)
|
[
Quant Model
](
https://bj.bcebos.com/v1/paddle-slim-models/act/ppyoloe_crn_l_300e_coco_quant.tar
)
|
-
mAP的指标均在COCO val2017数据集中评测得到,IoU=0.5:0.95。
-
PP-YOLOE-l模型在Tesla V100的GPU环境下测试,并且开启TensorRT,batch_size=1,包含NMS,测试脚本是
[
benchmark demo
](
https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.4/deploy/python
)
。
### PP-PicoDet
| 模型 | 策略 | mAP | FP32 | FP16 | INT8 | 配置文件 | 模型 |
| :-------- |:-------- |:--------: | :----------------: | :----------------: | :---------------: | :----------------------: | :---------------------: |
| PicoDet-S-NPU | Baseline | 30.1 | - | - | - |
[
config
](
https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_s_416_coco_npu.yml
)
|
[
Model
](
https://bj.bcebos.com/v1/paddle-slim-models/act/picodet_s_416_coco_npu.tar
)
|
| PicoDet-S-NPU | 量化训练 | 29.7 | - | - | - |
[
config
](
https://github.com/PaddlePaddle/PaddleSlim/tree/develop/demo/full_quantization/detection/configs/picodet_s_qat_dis.yaml
)
|
[
Model
](
https://bj.bcebos.com/v1/paddle-slim-models/act/picodet_s_npu_quant.tar
)
|
-
mAP的指标均在COCO val2017数据集中评测得到,IoU=0.5:0.95。
## 3. 自动压缩流程
#### 3.1 准备环境
-
PaddlePaddle >= 2.
3
(可从
[
Paddle官网
](
https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/install/pip/linux-pip.html
)
下载安装)
-
PaddleSlim >= 2.
3
-
PaddleDet >= 2.
4
-
PaddlePaddle >= 2.
4
(可从
[
Paddle官网
](
https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/install/pip/linux-pip.html
)
下载安装)
-
PaddleSlim >= 2.
4.1
-
PaddleDet >= 2.
5
-
opencv-python
安装paddlepaddle:
...
...
@@ -74,6 +83,8 @@ pip install paddleslim
pip
install
paddledet
```
**注意:**
YOLOv8模型的自动化压缩需要依赖安装最新
[
Develop Paddle
](
https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/develop/install/pip/linux-pip.html
)
和
[
Develop PaddleSlim
](
https://github.com/PaddlePaddle/PaddleSlim#%E5%AE%89%E8%A3%85
)
版本。
#### 3.2 准备数据集
本案例默认以COCO数据进行自动压缩实验,如果自定义COCO数据,或者其他格式数据,请参考
[
数据准备文档
](
https://github.com/PaddlePaddle/PaddleDetection/tree/develop/docs/tutorials/data/PrepareDataSet.md
)
来准备数据。
...
...
@@ -102,6 +113,16 @@ python tools/export_model.py \
trt
=
True
\
```
YOLOv8-s模型,包含NMS,具体可参考
[
YOLOv8模型文档
](
https://github.com/PaddlePaddle/PaddleYOLO/tree/release/2.5/configs/yolov8
)
, 然后执行:
```
shell
python tools/export_model.py
\
-c
configs/yolov8/yolov8_s_500e_coco.yml
\
-o
weights
=
https://paddledet.bj.bcebos.com/models/yolov8_s_500e_coco.pdparams
\
trt
=
True
```
如快速体验,可直接下载
[
YOLOv8-s导出模型
](
https://bj.bcebos.com/v1/paddle-slim-models/act/yolov8_s_500e_coco_trt_nms.tar
)
#### 3.4 自动压缩并产出模型
蒸馏量化自动压缩示例通过run.py脚本启动,会使用接口
```paddleslim.auto_compression.AutoCompression```
对模型进行自动压缩。配置config文件中模型路径、蒸馏、量化、和训练等部分的参数,配置完成后便可对模型进行量化和蒸馏。具体运行命令为:
...
...
deploy/auto_compression/configs/picodet_s_qat_dis.yaml
浏览文件 @
ac3b6f85
Global
:
reader_config
:
./configs/picodet_reader.yml
in
put_list
:
[
'
image'
,
'
scale_factor'
]
in
clude_nms
:
True
Evaluation
:
True
model_dir
:
./picodet_s_416_coco_npu/
model_filename
:
model.pdmodel
...
...
@@ -10,7 +10,7 @@ Distillation:
alpha
:
1.0
loss
:
l2
Quant
ization
:
Quant
Aware
:
use_pact
:
true
activation_quantize_type
:
'
moving_average_abs_max'
weight_bits
:
8
...
...
deploy/auto_compression/configs/ppyoloe_l_qat_dis.yaml
浏览文件 @
ac3b6f85
Global
:
reader_config
:
configs/ppyoloe_reader.yml
input_list
:
[
'
image'
,
'
scale_factor'
]
arch
:
YOLO
include_nms
:
True
Evaluation
:
True
model_dir
:
./ppyoloe_crn_l_300e_coco
model_filename
:
model.pdmodel
...
...
@@ -12,7 +11,7 @@ Distillation:
alpha
:
1.0
loss
:
soft_label
Quant
ization
:
Quant
Aware
:
use_pact
:
true
activation_quantize_type
:
'
moving_average_abs_max'
quantize_op_types
:
...
...
deploy/auto_compression/configs/ppyoloe_plus_l_qat_dis.yaml
浏览文件 @
ac3b6f85
Global
:
reader_config
:
configs/ppyoloe_plus_reader.yml
input_list
:
[
'
image'
,
'
scale_factor'
]
arch
:
YOLO
include_nms
:
True
Evaluation
:
True
model_dir
:
./ppyoloe_plus_crn_l_80e_coco
model_filename
:
model.pdmodel
...
...
@@ -12,7 +11,7 @@ Distillation:
alpha
:
1.0
loss
:
soft_label
Quant
ization
:
Quant
Aware
:
use_pact
:
true
activation_quantize_type
:
'
moving_average_abs_max'
quantize_op_types
:
...
...
deploy/auto_compression/configs/ppyoloe_plus_m_qat_dis.yaml
浏览文件 @
ac3b6f85
Global
:
reader_config
:
configs/ppyoloe_plus_reader.yml
input_list
:
[
'
image'
,
'
scale_factor'
]
arch
:
YOLO
include_nms
:
True
Evaluation
:
True
model_dir
:
./ppyoloe_plus_crn_m_80e_coco
model_filename
:
model.pdmodel
...
...
@@ -12,7 +11,7 @@ Distillation:
alpha
:
1.0
loss
:
soft_label
Quant
ization
:
Quant
Aware
:
use_pact
:
true
activation_quantize_type
:
'
moving_average_abs_max'
quantize_op_types
:
...
...
deploy/auto_compression/configs/ppyoloe_plus_s_qat_dis.yaml
浏览文件 @
ac3b6f85
Global
:
reader_config
:
configs/ppyoloe_plus_reader.yml
input_list
:
[
'
image'
,
'
scale_factor'
]
arch
:
YOLO
include_nms
:
True
Evaluation
:
True
model_dir
:
./ppyoloe_plus_crn_s_80e_coco
model_filename
:
model.pdmodel
...
...
@@ -12,7 +11,7 @@ Distillation:
alpha
:
1.0
loss
:
soft_label
Quant
ization
:
Quant
Aware
:
use_pact
:
true
activation_quantize_type
:
'
moving_average_abs_max'
quantize_op_types
:
...
...
deploy/auto_compression/configs/ppyoloe_plus_x_qat_dis.yaml
浏览文件 @
ac3b6f85
Global
:
reader_config
:
configs/ppyoloe_plus_reader.yml
input_list
:
[
'
image'
,
'
scale_factor'
]
arch
:
YOLO
include_nms
:
True
Evaluation
:
True
model_dir
:
./ppyoloe_plus_crn_x_80e_coco
model_filename
:
model.pdmodel
...
...
@@ -12,7 +11,7 @@ Distillation:
alpha
:
1.0
loss
:
soft_label
Quant
ization
:
Quant
Aware
:
use_pact
:
true
activation_quantize_type
:
'
moving_average_abs_max'
quantize_op_types
:
...
...
deploy/auto_compression/configs/yolov5_s_qat_dis.yml
浏览文件 @
ac3b6f85
Global
:
reader_config
:
configs/yolov5_reader.yml
input_list
:
[
'
image'
,
'
scale_factor'
]
arch
:
YOLO
include_nms
:
True
Evaluation
:
True
model_dir
:
./yolov5_s_300e_coco
model_filename
:
model.pdmodel
...
...
@@ -12,7 +11,7 @@ Distillation:
alpha
:
1.0
loss
:
soft_label
Quant
ization
:
Quant
Aware
:
use_pact
:
true
activation_quantize_type
:
'
moving_average_abs_max'
quantize_op_types
:
...
...
deploy/auto_compression/configs/yolov6mt_s_qat_dis.yaml
浏览文件 @
ac3b6f85
Global
:
reader_config
:
configs/yolov5_reader.yml
input_list
:
[
'
image'
,
'
scale_factor'
]
arch
:
YOLO
include_nms
:
True
Evaluation
:
True
model_dir
:
./yolov6mt_s_400e_coco
model_filename
:
model.pdmodel
...
...
@@ -12,7 +11,7 @@ Distillation:
alpha
:
1.0
loss
:
soft_label
Quant
ization
:
Quant
Aware
:
activation_quantize_type
:
'
moving_average_abs_max'
quantize_op_types
:
-
conv2d
...
...
deploy/auto_compression/configs/yolov7_l_qat_dis.yaml
浏览文件 @
ac3b6f85
Global
:
reader_config
:
configs/yolov5_reader.yml
input_list
:
[
'
image'
,
'
scale_factor'
]
arch
:
YOLO
include_nms
:
True
Evaluation
:
True
model_dir
:
./yolov7_l_300e_coco
model_filename
:
model.pdmodel
...
...
@@ -12,7 +11,7 @@ Distillation:
alpha
:
1.0
loss
:
soft_label
Quant
ization
:
Quant
Aware
:
activation_quantize_type
:
'
moving_average_abs_max'
quantize_op_types
:
-
conv2d
...
...
deploy/auto_compression/configs/yolov8_reader.yml
0 → 100644
浏览文件 @
ac3b6f85
metric
:
COCO
num_classes
:
80
# Dataset configuration
TrainDataset
:
!COCODataSet
image_dir
:
train2017
anno_path
:
annotations/instances_train2017.json
dataset_dir
:
dataset/coco/
EvalDataset
:
!COCODataSet
image_dir
:
val2017
anno_path
:
annotations/instances_val2017.json
dataset_dir
:
dataset/coco/
worker_num
:
0
# preprocess reader in test
EvalReader
:
sample_transforms
:
-
Decode
:
{}
-
Resize
:
{
target_size
:
[
640
,
640
],
keep_ratio
:
True
,
interp
:
1
}
-
Pad
:
{
size
:
[
640
,
640
],
fill_value
:
[
114.
,
114.
,
114.
]}
-
NormalizeImage
:
{
mean
:
[
0.
,
0.
,
0.
],
std
:
[
1.
,
1.
,
1.
],
norm_type
:
none
}
-
Permute
:
{}
batch_size
:
4
deploy/auto_compression/configs/yolov8_s_qat_dis.yaml
0 → 100644
浏览文件 @
ac3b6f85
Global
:
reader_config
:
configs/yolov8_reader.yml
include_nms
:
True
Evaluation
:
True
model_dir
:
./yolov8_s_500e_coco_trt_nms/
model_filename
:
model.pdmodel
params_filename
:
model.pdiparams
Distillation
:
alpha
:
1.0
loss
:
soft_label
QuantAware
:
onnx_format
:
true
activation_quantize_type
:
'
moving_average_abs_max'
quantize_op_types
:
-
conv2d
-
depthwise_conv2d
TrainConfig
:
train_iter
:
8000
eval_iter
:
1000
learning_rate
:
type
:
CosineAnnealingDecay
learning_rate
:
0.00003
T_max
:
10000
optimizer_builder
:
optimizer
:
type
:
SGD
weight_decay
:
4.0e-05
deploy/auto_compression/run.py
浏览文件 @
ac3b6f85
...
...
@@ -23,6 +23,7 @@ from ppdet.metrics import COCOMetric, VOCMetric, KeyPointTopDownCOCOEval
from
paddleslim.auto_compression.config_helpers
import
load_config
as
load_slim_config
from
paddleslim.auto_compression
import
AutoCompression
from
post_process
import
PPYOLOEPostProcess
from
paddleslim.common.dataloader
import
get_feed_vars
def
argsparser
():
...
...
@@ -94,9 +95,12 @@ def eval_function(exe, compiled_test_program, test_feed_names, test_fetch_list):
fetch_list
=
test_fetch_list
,
return_numpy
=
False
)
res
=
{}
if
'arch'
in
global_config
and
global_config
[
'arch'
]
==
'PPYOLOE'
:
postprocess
=
PPYOLOEPostProcess
(
score_threshold
=
0.01
,
nms_threshold
=
0.6
)
if
'include_nms'
in
global_config
and
not
global_config
[
'include_nms'
]:
if
'arch'
in
global_config
and
global_config
[
'arch'
]
==
'PPYOLOE'
:
postprocess
=
PPYOLOEPostProcess
(
score_threshold
=
0.01
,
nms_threshold
=
0.6
)
else
:
assert
"Not support arch={} now."
.
format
(
global_config
[
'arch'
])
res
=
postprocess
(
np
.
array
(
outs
[
0
]),
data_all
[
'scale_factor'
])
else
:
for
out
in
outs
:
...
...
@@ -128,6 +132,10 @@ def main():
train_loader
=
create
(
'EvalReader'
)(
reader_cfg
[
'TrainDataset'
],
reader_cfg
[
'worker_num'
],
return_list
=
True
)
if
global_config
.
get
(
'input_list'
)
is
None
:
global_config
[
'input_list'
]
=
get_feed_vars
(
global_config
[
'model_dir'
],
global_config
[
'model_filename'
],
global_config
[
'params_filename'
])
train_loader
=
reader_wrapper
(
train_loader
,
global_config
[
'input_list'
])
if
'Evaluation'
in
global_config
.
keys
()
and
global_config
[
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录