diff --git a/configs/picodet/README.md b/configs/picodet/README.md
index 6bec9476f04b0c914958067147a918b60ce735b4..a7e160722ab8d93ae88a45a18ce4d134004e5301 100644
--- a/configs/picodet/README.md
+++ b/configs/picodet/README.md
@@ -3,6 +3,10 @@ English | [简体中文](README_cn.md)
# PP-PicoDet
![](../../docs/images/picedet_demo.jpeg)
+
+## News
+
+- Released a new series of PP-PicoDet models, with greatly improved accuracy and optimized CPU prediction speed. **(2022.03.20)**
## Introduction
We developed a series of lightweight models, named `PP-PicoDet`. Because of the excellent performance, our models are very suitable for deployment on mobile or CPU. For more details, please refer to our [report on arXiv](https://arxiv.org/abs/2111.00902).
@@ -17,32 +21,19 @@ We developed a series of lightweight models, named `PP-PicoDet`. Because of the
-### Comming Soon
-- [ ] More series of model, such as smaller or larger model.
-- [ ] Pretrained models for more scenarios.
-- [ ] More features in need.
-
## Benchmark
| Model | Input size | mAPval
0.5:0.95 | mAPval
0.5 | Params
(M) | FLOPS
(G) | Latency[NCNN](#latency)
(ms) | Latency[Lite](#latency)
(ms) | Download | Config |
| :-------- | :--------: | :---------------------: | :----------------: | :----------------: | :---------------: | :-----------------------------: | :-----------------------------: | :----------------------------------------: | :--------------------------------------- |
-| PicoDet-S | 320*320 | 27.1 | 41.4 | 0.99 | 0.73 | 8.13 | **6.65** | [model](https://paddledet.bj.bcebos.com/models/picodet_s_320_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/train_picodet_s_320_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_s_320_coco.yml) |
-| PicoDet-S | 416*416 | 30.7 | 45.8 | 0.99 | 1.24 | 12.37 | **9.82** | [model](https://paddledet.bj.bcebos.com/models/picodet_s_416_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/train_picodet_s_416_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_s_416_coco.yml) |
-| PicoDet-M | 320*320 | 30.9 | 45.7 | 2.15 | 1.48 | 11.27 | **9.61** | [model](https://paddledet.bj.bcebos.com/models/picodet_m_320_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/train_picodet_m_320_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_m_320_coco.yml) |
-| PicoDet-M | 416*416 | 34.8 | 50.5 | 2.15 | 2.50 | 17.39 | **15.88** | [model](https://paddledet.bj.bcebos.com/models/picodet_m_416_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/train_picodet_m_416_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_m_416_coco.yml) |
-| PicoDet-L | 320*320 | 32.9 | 48.2 | 3.30 | 2.23 | 15.26 | **13.42** | [model](https://paddledet.bj.bcebos.com/models/picodet_l_320_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/train_picodet_l_320_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_l_320_coco.yml) |
-| PicoDet-L | 416*416 | 36.6 | 52.5 | 3.30 | 3.76 | 23.36 | **21.85** | [model](https://paddledet.bj.bcebos.com/models/picodet_l_416_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/train_picodet_l_416_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_l_416_coco.yml) |
-| PicoDet-L | 640*640 | 40.9 | 57.6 | 3.30 | 8.91 | 54.11 | **50.55** | [model](https://paddledet.bj.bcebos.com/models/picodet_l_640_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/train_picodet_l_640_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_l_640_coco.yml) |
-
-#### More Configs
-
-| Model | Input size | mAPval
0.5:0.95 | mAPval
0.5 | Params
(M) | FLOPS
(G) | Latency[NCNN](#latency)
(ms) | Latency[Lite](#latency)
(ms) | Download | Config |
-| :--------------------------- | :--------: | :---------------------: | :----------------: | :----------------: | :---------------: | :-----------------------------: | :-----------------------------: | :----------------------------------------: | :--------------------------------------- |
-| PicoDet-Shufflenetv2 1x | 416*416 | 30.0 | 44.6 | 1.17 | 1.53 | 15.06 | **10.63** | [model](https://paddledet.bj.bcebos.com/models/picodet_shufflenetv2_1x_416_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/train_picodet_shufflenetv2_1x_416_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/more_config/picodet_shufflenetv2_1x_416_coco.yml) |
-| PicoDet-MobileNetv3-large 1x | 416*416 | 35.6 | 52.0 | 3.55 | 2.80 | 20.71 | **17.88** | [model](https://paddledet.bj.bcebos.com/models/picodet_mobilenetv3_large_1x_416_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/train_picodet_mobilenetv3_large_1x_416_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/more_config/picodet_mobilenetv3_large_1x_416_coco.yml) |
-| PicoDet-LCNet 1.5x | 416*416 | 36.3 | 52.2 | 3.10 | 3.85 | 21.29 | **20.8** | [model](https://paddledet.bj.bcebos.com/models/picodet_lcnet_1_5x_416_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/train_picodet_lcnet_1_5x_416_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/more_config/picodet_lcnet_1_5x_416_coco.yml) |
-| PicoDet-LCNet 1.5x | 640*640 | 40.6 | 57.4 | 3.10 | - | - | - | [model](https://paddledet.bj.bcebos.com/models/picodet_lcnet_1_5x_640_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/train_picodet_lcnet_1_5x_640_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/more_config/picodet_lcnet_1_5x_640_coco.yml) |
-| PicoDet-R18 | 640*640 | 40.7 | 57.2 | 11.10 | - | - | - | [model](https://paddledet.bj.bcebos.com/models/picodet_r18_640_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/train_picodet_r18_640_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/more_config/picodet_r18_640_coco.yml) |
+| PicoDet-XS | 320*320 | 23.5 | 36.1 | - | - | - | - | [model](https://paddledet.bj.bcebos.com/models/picodetv2/picodet_xs_320_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/picodetv2/train_picodet_xs_320_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_xs_320_coco.yml) |
+| PicoDet-XS | 416*416 | 26.2 | 39.3 | - | - | - | - | [model](https://paddledet.bj.bcebos.com/models/picodetv2/picodet_xs_416_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/picodetv2/train_picodet_xs_416_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_xs_416_coco.yml) |
+| PicoDet-S | 320*320 | 29.1 | 43.4 | - | - | - | - | [model](https://paddledet.bj.bcebos.com/models/picodetv2/picodet_s_320_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/picodetv2/train_picodet_s_320_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_s_320_coco.yml) |
+| PicoDet-S | 416*416 | 32.5 | 47.6 | - | - | - | - | [model](https://paddledet.bj.bcebos.com/models/picodetv2/picodet_s_416_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/picodetv2/train_picodet_s_416_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_s_416_coco.yml) |
+| PicoDet-M | 320*320 | 34.4 | 50.0 | - | - | - | - | [model](https://paddledet.bj.bcebos.com/models/picodetv2/picodet_m_320_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/picodetv2/train_picodet_m_320_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_m_320_coco.yml) |
+| PicoDet-M | 416*416 | 37.5 | 53.4 | - | - | - | - | [model](https://paddledet.bj.bcebos.com/models/picodetv2/picodet_m_416_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/picodetv2/train_picodet_m_416_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_m_416_coco.yml) |
+| PicoDet-L | 320*320 | 36.1 | 52.0 | - | - | - | - | [model](https://paddledet.bj.bcebos.com/models/picodetv2/picodet_l_320_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/picodetv2/train_picodet_l_320_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_l_320_coco.yml) |
+| PicoDet-L | 416*416 | 39.4 | 55.7 | - | - | - | - | [model](https://paddledet.bj.bcebos.com/models/picodetv2/picodet_l_416_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/picodetv2/train_picodet_l_416_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_l_416_coco.yml) |
+| PicoDet-L | 640*640 | 42.3 | 59.2 | - | - | - | - | [model](https://paddledet.bj.bcebos.com/models/picodetv2/picodet_l_640_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/picodetv2/train_picodet_l_640_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_l_640_coco.yml) |
Table Notes:
@@ -53,6 +44,10 @@ We developed a series of lightweight models, named `PP-PicoDet`. Because of the
+### Legacy Model
+
+- Please refer to: [PicoDet 2021.10版本](./legacy_model/)
+
#### Benchmark of Other Models
| Model | Input size | mAPval
0.5:0.95 | mAPval
0.5 | Params
(M) | FLOPS
(G) | Latency[NCNN](#latency)
(ms) |
@@ -75,7 +70,7 @@ We developed a series of lightweight models, named `PP-PicoDet`. Because of the
Requirements:
-- PaddlePaddle >= 2.1.2
+- PaddlePaddle >= 2.2.1
@@ -111,14 +106,14 @@ python -m paddle.distributed.launch --gpus 0,1,2,3,4,5,6,7 tools/train.py -c con
```shell
python tools/eval.py -c configs/picodet/picodet_s_320_coco.yml \
- -o weights=https://paddledet.bj.bcebos.com/models/picodet_s_320_coco.pdparams
+ -o weights=https://paddledet.bj.bcebos.com/models/picodetv2/picodet_s_320_coco.pdparams
```
- Infer:
```shell
python tools/infer.py -c configs/picodet/picodet_s_320_coco.yml \
- -o weights=https://paddledet.bj.bcebos.com/models/picodet_s_320_coco.pdparams
+ -o weights=https://paddledet.bj.bcebos.com/models/picodetv2/picodet_s_320_coco.pdparams
```
Detail also can refer to [Quick start guide](https://github.com/PaddlePaddle/PaddleDetection/blob/develop/docs/tutorials/GETTING_STARTED.md).
@@ -136,7 +131,8 @@ Detail also can refer to [Quick start guide](https://github.com/PaddlePaddle/Pad
```shell
cd PaddleDetection
python tools/export_model.py -c configs/picodet/picodet_s_320_coco.yml \
- -o weights=https://paddledet.bj.bcebos.com/models/picodet_s_320_coco.pdparams --output_dir=inference_model
+ -o weights=https://paddledet.bj.bcebos.com/models/picodetv2/picodet_s_320_coco.pdparams \
+ --output_dir=inference_model
```
@@ -144,7 +140,7 @@ python tools/export_model.py -c configs/picodet/picodet_s_320_coco.yml \
2. Convert to PaddleLite (click to expand)
-- Install Paddlelite>=2.10.rc:
+- Install Paddlelite>=2.10:
```shell
pip install paddlelite
@@ -232,13 +228,13 @@ Android demo visualization:
Requirements:
-- PaddlePaddle >= 2.2.0rc0
-- PaddleSlim >= 2.2.0rc0
+- PaddlePaddle >= 2.2.2
+- PaddleSlim >= 2.2.1
**Install:**
```shell
-pip install paddleslim==2.2.0rc0
+pip install paddleslim==2.2.1
```
@@ -300,7 +296,7 @@ Please reduce the `batch_size` of `TrainReader` in config.
Please reset `pretrain_weights` in config, which trained on coco. Such as:
```yaml
-pretrain_weights: https://paddledet.bj.bcebos.com/models/picodet_l_640_coco.pdparams
+pretrain_weights: https://paddledet.bj.bcebos.com/models/picodetv2/picodet_l_640_coco.pdparams
```
diff --git a/configs/picodet/README_cn.md b/configs/picodet/README_cn.md
index feb250f77106dedd2f323f97e61efbe50b05edd0..aa53579cd2037bbec4c828a56402fc8eb0252c54 100644
--- a/configs/picodet/README_cn.md
+++ b/configs/picodet/README_cn.md
@@ -4,6 +4,10 @@
![](../../docs/images/picedet_demo.jpeg)
+## 最新动态
+
+- 发布全新系列PP-PicoDet模型,精度大幅提升,优化CPU端预测速度。**(2022.03.20)**
+
## 简介
PaddleDetection中提出了全新的轻量级系列模型`PP-PicoDet`,在移动端具有卓越的性能,成为全新SOTA轻量级模型。详细的技术细节可以参考我们的[arXiv技术报告](https://arxiv.org/abs/2111.00902)。
@@ -20,32 +24,20 @@ PP-PicoDet模型有如下特点:
-### 即将更新
-- [ ] 更多系列模型, 包括更大或更小,或者适配更多硬件模型。
-- [ ] 更多场景的预训练模型。
-- [ ] 更多功能。
-
## 基线
| 模型 | 输入尺寸 | mAPval
0.5:0.95 | mAPval
0.5 | 参数量
(M) | FLOPS
(G) | 预测时延[NCNN](#latency)
(ms) | 预测时延[Lite](#latency)
(ms) | 下载 | 配置文件 |
| :-------- | :--------: | :---------------------: | :----------------: | :----------------: | :---------------: | :-----------------------------: | :-----------------------------: | :----------------------------------------: | :--------------------------------------- |
-| PicoDet-S | 320*320 | 27.1 | 41.4 | 0.99 | 0.73 | 8.13 | **6.65** | [model](https://paddledet.bj.bcebos.com/models/picodet_s_320_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/train_picodet_s_320_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_s_320_coco.yml) |
-| PicoDet-S | 416*416 | 30.7 | 45.8 | 0.99 | 1.24 | 12.37 | **9.82** | [model](https://paddledet.bj.bcebos.com/models/picodet_s_416_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/train_picodet_s_416_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_s_416_coco.yml) |
-| PicoDet-M | 320*320 | 30.9 | 45.7 | 2.15 | 1.48 | 11.27 | **9.61** | [model](https://paddledet.bj.bcebos.com/models/picodet_m_320_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/train_picodet_m_320_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_m_320_coco.yml) |
-| PicoDet-M | 416*416 | 34.8 | 50.5 | 2.15 | 2.50 | 17.39 | **15.88** | [model](https://paddledet.bj.bcebos.com/models/picodet_m_416_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/train_picodet_m_416_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_m_416_coco.yml) |
-| PicoDet-L | 320*320 | 32.9 | 48.2 | 3.30 | 2.23 | 15.26 | **13.42** | [model](https://paddledet.bj.bcebos.com/models/picodet_l_320_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/train_picodet_l_320_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_l_320_coco.yml) |
-| PicoDet-L | 416*416 | 36.6 | 52.5 | 3.30 | 3.76 | 23.36 | **21.85** | [model](https://paddledet.bj.bcebos.com/models/picodet_l_416_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/train_picodet_l_416_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_l_416_coco.yml) |
-| PicoDet-L | 640*640 | 40.9 | 57.6 | 3.30 | 8.91 | 54.11 | **50.55** | [model](https://paddledet.bj.bcebos.com/models/picodet_l_640_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/train_picodet_l_640_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_l_640_coco.yml) |
+| PicoDet-XS | 320*320 | 23.5 | 36.1 | - | - | - | - | [model](https://paddledet.bj.bcebos.com/models/picodetv2/picodet_xs_320_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/picodetv2/train_picodet_xs_320_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_xs_320_coco.yml) |
+| PicoDet-XS | 416*416 | 26.2 | 39.3 | - | - | - | - | [model](https://paddledet.bj.bcebos.com/models/picodetv2/picodet_xs_416_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/picodetv2/train_picodet_xs_416_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_xs_416_coco.yml) |
+| PicoDet-S | 320*320 | 29.1 | 43.4 | - | - | - | - | [model](https://paddledet.bj.bcebos.com/models/picodetv2/picodet_s_320_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/picodetv2/train_picodet_s_320_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_s_320_coco.yml) |
+| PicoDet-S | 416*416 | 32.5 | 47.6 | - | - | - | - | [model](https://paddledet.bj.bcebos.com/models/picodetv2/picodet_s_416_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/picodetv2/train_picodet_s_416_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_s_416_coco.yml) |
+| PicoDet-M | 320*320 | 34.4 | 50.0 | - | - | - | - | [model](https://paddledet.bj.bcebos.com/models/picodetv2/picodet_m_320_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/picodetv2/train_picodet_m_320_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_m_320_coco.yml) |
+| PicoDet-M | 416*416 | 37.5 | 53.4 | - | - | - | - | [model](https://paddledet.bj.bcebos.com/models/picodetv2/picodet_m_416_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/picodetv2/train_picodet_m_416_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_m_416_coco.yml) |
+| PicoDet-L | 320*320 | 36.1 | 52.0 | - | - | - | - | [model](https://paddledet.bj.bcebos.com/models/picodetv2/picodet_l_320_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/picodetv2/train_picodet_l_320_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_l_320_coco.yml) |
+| PicoDet-L | 416*416 | 39.4 | 55.7 | - | - | - | - | [model](https://paddledet.bj.bcebos.com/models/picodetv2/picodet_l_416_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/picodetv2/train_picodet_l_416_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_l_416_coco.yml) |
+| PicoDet-L | 640*640 | 42.3 | 59.2 | - | - | - | - | [model](https://paddledet.bj.bcebos.com/models/picodetv2/picodet_l_640_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/picodetv2/train_picodet_l_640_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_l_640_coco.yml) |
-#### 更多的配置
-
-| 模型 | 输入尺寸 | mAPval
0.5:0.95 | mAPval
0.5 | 参数量
(M) | FLOPS
(G) | 预测时延[NCNN](#latency)
(ms) | 预测时延[Lite](#latency)
(ms) | 下载 | 配置文件 |
-| :--------------------------- | :--------: | :---------------------: | :----------------: | :----------------: | :---------------: | :-----------------------------: | :-----------------------------: | :----------------------------------------: | :--------------------------------------- |
-| PicoDet-Shufflenetv2 1x | 416*416 | 30.0 | 44.6 | 1.17 | 1.53 | 15.06 | **10.63** | [model](https://paddledet.bj.bcebos.com/models/picodet_shufflenetv2_1x_416_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/train_picodet_shufflenetv2_1x_416_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/more_config/picodet_shufflenetv2_1x_416_coco.yml) |
-| PicoDet-MobileNetv3-large 1x | 416*416 | 35.6 | 52.0 | 3.55 | 2.80 | 20.71 | **17.88** | [model](https://paddledet.bj.bcebos.com/models/picodet_mobilenetv3_large_1x_416_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/train_picodet_mobilenetv3_large_1x_416_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/more_config/picodet_mobilenetv3_large_1x_416_coco.yml) |
-| PicoDet-LCNet 1.5x | 416*416 | 36.3 | 52.2 | 3.10 | 3.85 | 21.29 | **20.8** | [model](https://paddledet.bj.bcebos.com/models/picodet_lcnet_1_5x_416_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/train_picodet_lcnet_1_5x_416_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/more_config/picodet_lcnet_1_5x_416_coco.yml) |
-| PicoDet-LCNet 1.5x | 640*640 | 40.6 | 57.4 | 3.10 | - | - | - | [model](https://paddledet.bj.bcebos.com/models/picodet_lcnet_1_5x_640_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/train_picodet_lcnet_1_5x_640_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/more_config/picodet_lcnet_1_5x_640_coco.yml) |
-| PicoDet-R18 | 640*640 | 40.7 | 57.2 | 11.10 | - | - | - | [model](https://paddledet.bj.bcebos.com/models/picodet_r18_640_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/train_picodet_r18_640_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/more_config/picodet_r18_640_coco.yml) |
注意事项:
@@ -56,6 +48,10 @@ PP-PicoDet模型有如下特点:
+### 历史版本模型
+
+- 详情请参考:[PicoDet 2021.10版本](./legacy_model/)
+
#### 其他模型的基线
| 模型 | 输入尺寸 | mAPval
0.5:0.95 | mAPval
0.5 | 参数量
(M) | FLOPS
(G) | 预测时延[NCNN](#latency)
(ms) |
@@ -78,7 +74,7 @@ PP-PicoDet模型有如下特点:
依赖包:
-- PaddlePaddle >= 2.1.2
+- PaddlePaddle >= 2.2.1
@@ -114,14 +110,14 @@ python -m paddle.distributed.launch --gpus 0,1,2,3,4,5,6,7 tools/train.py -c con
```shell
python tools/eval.py -c configs/picodet/picodet_s_320_coco.yml \
- -o weights=https://paddledet.bj.bcebos.com/models/picodet_s_320_coco.pdparams
+ -o weights=https://paddledet.bj.bcebos.com/models/picodetv2/picodet_s_320_coco.pdparams
```
- 测试:
```shell
python tools/infer.py -c configs/picodet/picodet_s_320_coco.yml \
- -o weights=https://paddledet.bj.bcebos.com/models/picodet_s_320_coco.pdparams
+ -o weights=https://paddledet.bj.bcebos.com/models/picodetv2/picodet_s_320_coco.pdparams
```
详情请参考[快速开始文档](https://github.com/PaddlePaddle/PaddleDetection/blob/develop/docs/tutorials/GETTING_STARTED.md).
@@ -139,7 +135,8 @@ python tools/infer.py -c configs/picodet/picodet_s_320_coco.yml \
```shell
cd PaddleDetection
python tools/export_model.py -c configs/picodet/picodet_s_320_coco.yml \
- -o weights=https://paddledet.bj.bcebos.com/models/picodet_s_320_coco.pdparams --output_dir=inference_model
+ -o weights=https://paddledet.bj.bcebos.com/models/picodetv2/picodet_s_320_coco.pdparams \
+ --output_dir=inference_model
```
@@ -147,7 +144,7 @@ python tools/export_model.py -c configs/picodet/picodet_s_320_coco.yml \
2. 转换模型至Paddle Lite (点击展开)
-- 安装Paddlelite>=2.10.rc:
+- 安装Paddlelite>=2.10:
```shell
pip install paddlelite
@@ -235,13 +232,13 @@ Android demo可视化:
依赖包:
-- PaddlePaddle >= 2.2.0rc0
-- PaddleSlim >= 2.2.0rc0
+- PaddlePaddle >= 2.2.2
+- PaddleSlim >= 2.2.1
**安装:**
```shell
-pip install paddleslim==2.2.0rc0
+pip install paddleslim==2.2.1
```
@@ -303,7 +300,7 @@ python tools/post_quant.py -c configs/picodet/picodet_s_320_coco.yml \
请重新设置配置文件中的`pretrain_weights`字段,比如利用COCO上训好的模型在自己的数据上继续训练:
```yaml
-pretrain_weights: https://paddledet.bj.bcebos.com/models/picodet_l_640_coco.pdparams
+pretrain_weights: https://paddledet.bj.bcebos.com/models/picodetv2/picodet_l_640_coco.pdparams
```
diff --git a/configs/picodet/_base_/optimizer_300e.yml b/configs/picodet/_base_/optimizer_300e.yml
index 5a89bbbcef9140f16f236471fb5f7748c5416771..0b3f5a12e46a7dd6e568824ec2cc71e3f23f541e 100644
--- a/configs/picodet/_base_/optimizer_300e.yml
+++ b/configs/picodet/_base_/optimizer_300e.yml
@@ -1,7 +1,7 @@
epoch: 300
LearningRate:
- base_lr: 0.4
+ base_lr: 0.32
schedulers:
- !CosineDecay
max_epochs: 300
diff --git a/configs/picodet/_base_/picodet_320_reader.yml b/configs/picodet/_base_/picodet_320_reader.yml
index 2ce5bca6695ac50f25622b7d1704e68a20179b22..6b0112469e0f2b827f6addd14ac3a0b6cb42f3c0 100644
--- a/configs/picodet/_base_/picodet_320_reader.yml
+++ b/configs/picodet/_base_/picodet_320_reader.yml
@@ -9,10 +9,10 @@ TrainReader:
- BatchRandomResize: {target_size: [256, 288, 320, 352, 384], random_size: True, random_interp: True, keep_ratio: False}
- NormalizeImage: {is_scale: true, mean: [0.485,0.456,0.406], std: [0.229, 0.224,0.225]}
- Permute: {}
- batch_size: 128
+ - PadGT: {}
+ batch_size: 64
shuffle: true
drop_last: true
- collate_batch: false
EvalReader:
diff --git a/configs/picodet/_base_/picodet_416_reader.yml b/configs/picodet/_base_/picodet_416_reader.yml
index 12070a4be22abe3d0cdb6593b41e1f98658efca2..f98fe08e1aa312cdd6e59acd0594f19d5c27b7ea 100644
--- a/configs/picodet/_base_/picodet_416_reader.yml
+++ b/configs/picodet/_base_/picodet_416_reader.yml
@@ -9,10 +9,10 @@ TrainReader:
- BatchRandomResize: {target_size: [352, 384, 416, 448, 480], random_size: True, random_interp: True, keep_ratio: False}
- NormalizeImage: {is_scale: true, mean: [0.485,0.456,0.406], std: [0.229, 0.224,0.225]}
- Permute: {}
- batch_size: 80
+ - PadGT: {}
+ batch_size: 64
shuffle: true
drop_last: true
- collate_batch: false
EvalReader:
diff --git a/configs/picodet/_base_/picodet_640_reader.yml b/configs/picodet/_base_/picodet_640_reader.yml
index a931f2a765855790f877e419a9cd46615c43be5e..d90fbeb9770b911ec2dbe3c80c4b5479f7dd53e1 100644
--- a/configs/picodet/_base_/picodet_640_reader.yml
+++ b/configs/picodet/_base_/picodet_640_reader.yml
@@ -9,10 +9,10 @@ TrainReader:
- BatchRandomResize: {target_size: [576, 608, 640, 672, 704], random_size: True, random_interp: True, keep_ratio: False}
- NormalizeImage: {is_scale: true, mean: [0.485,0.456,0.406], std: [0.229, 0.224,0.225]}
- Permute: {}
- batch_size: 56
+ - PadGT: {}
+ batch_size: 32
shuffle: true
drop_last: true
- collate_batch: false
EvalReader:
diff --git a/configs/picodet/_base_/picodet_esnetv2.yml b/configs/picodet/_base_/picodet_v2.yml
similarity index 81%
rename from configs/picodet/_base_/picodet_esnetv2.yml
rename to configs/picodet/_base_/picodet_v2.yml
index eab2d41152c7a8eb88e24e661be7cf083eb40f27..24e92b95cb32e3fd26e819bbe49795c6121cb2b2 100644
--- a/configs/picodet/_base_/picodet_esnetv2.yml
+++ b/configs/picodet/_base_/picodet_v2.yml
@@ -1,18 +1,16 @@
architecture: PicoDet
-pretrain_weights: https://paddledet.bj.bcebos.com/models/pretrained/ESNet_x1_0_pretrained.pdparams
+pretrain_weights: https://paddledet.bj.bcebos.com/models/pretrained/LCNet_x1_5_pretrained.pdparams
PicoDet:
- backbone: ESNet
- neck: ESPAN
+ backbone: LCNet
+ neck: LCPAN
head: PicoHeadV2
-ESNet:
- scale: 1.0
- feature_maps: [4, 11, 14]
- act: hard_swish
- channel_ratio: [0.875, 0.5, 1.0, 0.625, 0.5, 0.75, 0.625, 0.625, 0.5, 0.625, 1.0, 0.625, 0.75]
+LCNet:
+ scale: 1.5
+ feature_maps: [3, 4, 5]
-ESPAN:
+LCPAN:
out_channels: 128
use_depthwise: True
num_features: 4
diff --git a/configs/picodet/legacy_model/README.md b/configs/picodet/legacy_model/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..752efaaa29e5af31da3efe9afabc16960047a821
--- /dev/null
+++ b/configs/picodet/legacy_model/README.md
@@ -0,0 +1,30 @@
+# PP-PicoDet Legacy Model-ZOO (2021.10)
+
+| Model | Input size | mAPval
0.5:0.95 | mAPval
0.5 | Params
(M) | FLOPS
(G) | Latency[NCNN](#latency)
(ms) | Latency[Lite](#latency)
(ms) | Download | Config |
+| :-------- | :--------: | :---------------------: | :----------------: | :----------------: | :---------------: | :-----------------------------: | :-----------------------------: | :----------------------------------------: | :--------------------------------------- |
+| PicoDet-S | 320*320 | 27.1 | 41.4 | 0.99 | 0.73 | 8.13 | **6.65** | [model](https://paddledet.bj.bcebos.com/models/picodet_s_320_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/train_picodet_s_320_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_s_320_coco.yml) |
+| PicoDet-S | 416*416 | 30.7 | 45.8 | 0.99 | 1.24 | 12.37 | **9.82** | [model](https://paddledet.bj.bcebos.com/models/picodet_s_416_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/train_picodet_s_416_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_s_416_coco.yml) |
+| PicoDet-M | 320*320 | 30.9 | 45.7 | 2.15 | 1.48 | 11.27 | **9.61** | [model](https://paddledet.bj.bcebos.com/models/picodet_m_320_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/train_picodet_m_320_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_m_320_coco.yml) |
+| PicoDet-M | 416*416 | 34.8 | 50.5 | 2.15 | 2.50 | 17.39 | **15.88** | [model](https://paddledet.bj.bcebos.com/models/picodet_m_416_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/train_picodet_m_416_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_m_416_coco.yml) |
+| PicoDet-L | 320*320 | 32.9 | 48.2 | 3.30 | 2.23 | 15.26 | **13.42** | [model](https://paddledet.bj.bcebos.com/models/picodet_l_320_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/train_picodet_l_320_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_l_320_coco.yml) |
+| PicoDet-L | 416*416 | 36.6 | 52.5 | 3.30 | 3.76 | 23.36 | **21.85** | [model](https://paddledet.bj.bcebos.com/models/picodet_l_416_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/train_picodet_l_416_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_l_416_coco.yml) |
+| PicoDet-L | 640*640 | 40.9 | 57.6 | 3.30 | 8.91 | 54.11 | **50.55** | [model](https://paddledet.bj.bcebos.com/models/picodet_l_640_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/train_picodet_l_640_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/picodet_l_640_coco.yml) |
+
+#### More Configs
+
+| Model | Input size | mAPval
0.5:0.95 | mAPval
0.5 | Params
(M) | FLOPS
(G) | Latency[NCNN](#latency)
(ms) | Latency[Lite](#latency)
(ms) | Download | Config |
+| :--------------------------- | :--------: | :---------------------: | :----------------: | :----------------: | :---------------: | :-----------------------------: | :-----------------------------: | :----------------------------------------: | :--------------------------------------- |
+| PicoDet-Shufflenetv2 1x | 416*416 | 30.0 | 44.6 | 1.17 | 1.53 | 15.06 | **10.63** | [model](https://paddledet.bj.bcebos.com/models/picodet_shufflenetv2_1x_416_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/train_picodet_shufflenetv2_1x_416_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/more_config/picodet_shufflenetv2_1x_416_coco.yml) |
+| PicoDet-MobileNetv3-large 1x | 416*416 | 35.6 | 52.0 | 3.55 | 2.80 | 20.71 | **17.88** | [model](https://paddledet.bj.bcebos.com/models/picodet_mobilenetv3_large_1x_416_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/train_picodet_mobilenetv3_large_1x_416_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/more_config/picodet_mobilenetv3_large_1x_416_coco.yml) |
+| PicoDet-LCNet 1.5x | 416*416 | 36.3 | 52.2 | 3.10 | 3.85 | 21.29 | **20.8** | [model](https://paddledet.bj.bcebos.com/models/picodet_lcnet_1_5x_416_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/train_picodet_lcnet_1_5x_416_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/more_config/picodet_lcnet_1_5x_416_coco.yml) |
+| PicoDet-LCNet 1.5x | 640*640 | 40.6 | 57.4 | 3.10 | - | - | - | [model](https://paddledet.bj.bcebos.com/models/picodet_lcnet_1_5x_640_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/train_picodet_lcnet_1_5x_640_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/more_config/picodet_lcnet_1_5x_640_coco.yml) |
+| PicoDet-R18 | 640*640 | 40.7 | 57.2 | 11.10 | - | - | - | [model](https://paddledet.bj.bcebos.com/models/picodet_r18_640_coco.pdparams) | [log](https://paddledet.bj.bcebos.com/logs/train_picodet_r18_640_coco.log) | [config](https://github.com/PaddlePaddle/PaddleDetection/tree/develop/configs/picodet/more_config/picodet_r18_640_coco.yml) |
+
+
+Table Notes:
+
+- Latency: All our models test on `Qualcomm Snapdragon 865(4xA77+4xA55)` with 4 threads by arm8 and with FP16. In the above table, test latency on [NCNN](https://github.com/Tencent/ncnn) and `Lite`->[Paddle-Lite](https://github.com/PaddlePaddle/Paddle-Lite). And testing latency with code: [MobileDetBenchmark](https://github.com/JiweiMaster/MobileDetBenchmark).
+- PicoDet is trained on COCO train2017 dataset and evaluated on COCO val2017.
+- PicoDet used 4 or 8 GPUs for training and all checkpoints are trained with default settings and hyperparameters.
+
+
diff --git a/configs/picodet/_base_/optimizer_100e.yml b/configs/picodet/legacy_model/_base_/optimizer_100e.yml
similarity index 100%
rename from configs/picodet/_base_/optimizer_100e.yml
rename to configs/picodet/legacy_model/_base_/optimizer_100e.yml
diff --git a/configs/picodet/legacy_model/_base_/optimizer_300e.yml b/configs/picodet/legacy_model/_base_/optimizer_300e.yml
new file mode 100644
index 0000000000000000000000000000000000000000..5a89bbbcef9140f16f236471fb5f7748c5416771
--- /dev/null
+++ b/configs/picodet/legacy_model/_base_/optimizer_300e.yml
@@ -0,0 +1,18 @@
+epoch: 300
+
+LearningRate:
+ base_lr: 0.4
+ schedulers:
+ - !CosineDecay
+ max_epochs: 300
+ - !LinearWarmup
+ start_factor: 0.1
+ steps: 300
+
+OptimizerBuilder:
+ optimizer:
+ momentum: 0.9
+ type: Momentum
+ regularizer:
+ factor: 0.00004
+ type: L2
diff --git a/configs/picodet/legacy_model/_base_/picodet_320_reader.yml b/configs/picodet/legacy_model/_base_/picodet_320_reader.yml
new file mode 100644
index 0000000000000000000000000000000000000000..2ce5bca6695ac50f25622b7d1704e68a20179b22
--- /dev/null
+++ b/configs/picodet/legacy_model/_base_/picodet_320_reader.yml
@@ -0,0 +1,41 @@
+worker_num: 6
+TrainReader:
+ sample_transforms:
+ - Decode: {}
+ - RandomCrop: {}
+ - RandomFlip: {prob: 0.5}
+ - RandomDistort: {}
+ batch_transforms:
+ - BatchRandomResize: {target_size: [256, 288, 320, 352, 384], random_size: True, random_interp: True, keep_ratio: False}
+ - NormalizeImage: {is_scale: true, mean: [0.485,0.456,0.406], std: [0.229, 0.224,0.225]}
+ - Permute: {}
+ batch_size: 128
+ shuffle: true
+ drop_last: true
+ collate_batch: false
+
+
+EvalReader:
+ sample_transforms:
+ - Decode: {}
+ - Resize: {interp: 2, target_size: [320, 320], keep_ratio: False}
+ - NormalizeImage: {is_scale: true, mean: [0.485,0.456,0.406], std: [0.229, 0.224,0.225]}
+ - Permute: {}
+ batch_transforms:
+ - PadBatch: {pad_to_stride: 32}
+ batch_size: 8
+ shuffle: false
+
+
+TestReader:
+ inputs_def:
+ image_shape: [1, 3, 320, 320]
+ sample_transforms:
+ - Decode: {}
+ - Resize: {interp: 2, target_size: [320, 320], keep_ratio: False}
+ - NormalizeImage: {is_scale: true, mean: [0.485,0.456,0.406], std: [0.229, 0.224,0.225]}
+ - Permute: {}
+ batch_transforms:
+ - PadBatch: {pad_to_stride: 32}
+ batch_size: 1
+ shuffle: false
diff --git a/configs/picodet/_base_/picodet_v2_416_reader.yml b/configs/picodet/legacy_model/_base_/picodet_416_reader.yml
similarity index 97%
rename from configs/picodet/_base_/picodet_v2_416_reader.yml
rename to configs/picodet/legacy_model/_base_/picodet_416_reader.yml
index 0479c58efaa1555d7792327a0d78e9a9135657f8..12070a4be22abe3d0cdb6593b41e1f98658efca2 100644
--- a/configs/picodet/_base_/picodet_v2_416_reader.yml
+++ b/configs/picodet/legacy_model/_base_/picodet_416_reader.yml
@@ -9,10 +9,10 @@ TrainReader:
- BatchRandomResize: {target_size: [352, 384, 416, 448, 480], random_size: True, random_interp: True, keep_ratio: False}
- NormalizeImage: {is_scale: true, mean: [0.485,0.456,0.406], std: [0.229, 0.224,0.225]}
- Permute: {}
- - PadGT: {}
batch_size: 80
shuffle: true
drop_last: true
+ collate_batch: false
EvalReader:
diff --git a/configs/picodet/legacy_model/_base_/picodet_640_reader.yml b/configs/picodet/legacy_model/_base_/picodet_640_reader.yml
new file mode 100644
index 0000000000000000000000000000000000000000..a931f2a765855790f877e419a9cd46615c43be5e
--- /dev/null
+++ b/configs/picodet/legacy_model/_base_/picodet_640_reader.yml
@@ -0,0 +1,41 @@
+worker_num: 6
+TrainReader:
+ sample_transforms:
+ - Decode: {}
+ - RandomCrop: {}
+ - RandomFlip: {prob: 0.5}
+ - RandomDistort: {}
+ batch_transforms:
+ - BatchRandomResize: {target_size: [576, 608, 640, 672, 704], random_size: True, random_interp: True, keep_ratio: False}
+ - NormalizeImage: {is_scale: true, mean: [0.485,0.456,0.406], std: [0.229, 0.224,0.225]}
+ - Permute: {}
+ batch_size: 56
+ shuffle: true
+ drop_last: true
+ collate_batch: false
+
+
+EvalReader:
+ sample_transforms:
+ - Decode: {}
+ - Resize: {interp: 2, target_size: [640, 640], keep_ratio: False}
+ - NormalizeImage: {is_scale: true, mean: [0.485,0.456,0.406], std: [0.229, 0.224,0.225]}
+ - Permute: {}
+ batch_transforms:
+ - PadBatch: {pad_to_stride: 32}
+ batch_size: 8
+ shuffle: false
+
+
+TestReader:
+ inputs_def:
+ image_shape: [1, 3, 640, 640]
+ sample_transforms:
+ - Decode: {}
+ - Resize: {interp: 2, target_size: [640, 640], keep_ratio: False}
+ - NormalizeImage: {is_scale: true, mean: [0.485,0.456,0.406], std: [0.229, 0.224,0.225]}
+ - Permute: {}
+ batch_transforms:
+ - PadBatch: {pad_to_stride: 32}
+ batch_size: 1
+ shuffle: false
diff --git a/configs/picodet/_base_/picodet_esnet.yml b/configs/picodet/legacy_model/_base_/picodet_esnet.yml
similarity index 100%
rename from configs/picodet/_base_/picodet_esnet.yml
rename to configs/picodet/legacy_model/_base_/picodet_esnet.yml
diff --git a/configs/picodet/application/mainbody_detection/README.md b/configs/picodet/legacy_model/application/mainbody_detection/README.md
similarity index 100%
rename from configs/picodet/application/mainbody_detection/README.md
rename to configs/picodet/legacy_model/application/mainbody_detection/README.md
diff --git a/configs/picodet/application/mainbody_detection/picodet_lcnet_x2_5_640_mainbody.yml b/configs/picodet/legacy_model/application/mainbody_detection/picodet_lcnet_x2_5_640_mainbody.yml
similarity index 96%
rename from configs/picodet/application/mainbody_detection/picodet_lcnet_x2_5_640_mainbody.yml
rename to configs/picodet/legacy_model/application/mainbody_detection/picodet_lcnet_x2_5_640_mainbody.yml
index a839373a4f9a356042270953a5e7023581dcf09c..a948565f9fe6b589c0c39ecbc0a3768846f77b31 100644
--- a/configs/picodet/application/mainbody_detection/picodet_lcnet_x2_5_640_mainbody.yml
+++ b/configs/picodet/legacy_model/application/mainbody_detection/picodet_lcnet_x2_5_640_mainbody.yml
@@ -1,5 +1,5 @@
_BASE_: [
- '../../../runtime.yml',
+ '../../../../runtime.yml',
'../../_base_/picodet_esnet.yml',
'../../_base_/optimizer_100e.yml',
'../../_base_/picodet_640_reader.yml',
diff --git a/configs/picodet/application/pedestrian_detection/picodet_s_192_pedestrian.yml b/configs/picodet/legacy_model/application/pedestrian_detection/picodet_s_192_pedestrian.yml
similarity index 100%
rename from configs/picodet/application/pedestrian_detection/picodet_s_192_pedestrian.yml
rename to configs/picodet/legacy_model/application/pedestrian_detection/picodet_s_192_pedestrian.yml
diff --git a/configs/picodet/application/pedestrian_detection/picodet_s_320_pedestrian.yml b/configs/picodet/legacy_model/application/pedestrian_detection/picodet_s_320_pedestrian.yml
similarity index 100%
rename from configs/picodet/application/pedestrian_detection/picodet_s_320_pedestrian.yml
rename to configs/picodet/legacy_model/application/pedestrian_detection/picodet_s_320_pedestrian.yml
diff --git a/configs/picodet/more_config/picodet_lcnet_1_5x_416_coco.yml b/configs/picodet/legacy_model/more_config/picodet_lcnet_1_5x_416_coco.yml
similarity index 87%
rename from configs/picodet/more_config/picodet_lcnet_1_5x_416_coco.yml
rename to configs/picodet/legacy_model/more_config/picodet_lcnet_1_5x_416_coco.yml
index 02a30012e490a8a7666edecdb6af2bdf933cdd6e..29a74ca5c5a08fac6ddf391366dbba1f1a06b313 100644
--- a/configs/picodet/more_config/picodet_lcnet_1_5x_416_coco.yml
+++ b/configs/picodet/legacy_model/more_config/picodet_lcnet_1_5x_416_coco.yml
@@ -1,6 +1,6 @@
_BASE_: [
- '../../datasets/coco_detection.yml',
- '../../runtime.yml',
+ '../../../datasets/coco_detection.yml',
+ '../../../runtime.yml',
'../_base_/picodet_esnet.yml',
'../_base_/optimizer_300e.yml',
'../_base_/picodet_416_reader.yml',
diff --git a/configs/picodet/more_config/picodet_lcnet_1_5x_640_coco.yml b/configs/picodet/legacy_model/more_config/picodet_lcnet_1_5x_640_coco.yml
similarity index 92%
rename from configs/picodet/more_config/picodet_lcnet_1_5x_640_coco.yml
rename to configs/picodet/legacy_model/more_config/picodet_lcnet_1_5x_640_coco.yml
index d7bbf49ec561ef5ea998a719134cc00e10e51a89..ce50acfe634fbd562aeec0d60063301fdf14cd9a 100644
--- a/configs/picodet/more_config/picodet_lcnet_1_5x_640_coco.yml
+++ b/configs/picodet/legacy_model/more_config/picodet_lcnet_1_5x_640_coco.yml
@@ -1,6 +1,6 @@
_BASE_: [
- '../../datasets/coco_detection.yml',
- '../../runtime.yml',
+ '../../../datasets/coco_detection.yml',
+ '../../../runtime.yml',
'../_base_/picodet_esnet.yml',
'../_base_/optimizer_300e.yml',
'../_base_/picodet_640_reader.yml',
diff --git a/configs/picodet/more_config/picodet_mobilenetv3_large_1x_416_coco.yml b/configs/picodet/legacy_model/more_config/picodet_mobilenetv3_large_1x_416_coco.yml
similarity index 91%
rename from configs/picodet/more_config/picodet_mobilenetv3_large_1x_416_coco.yml
rename to configs/picodet/legacy_model/more_config/picodet_mobilenetv3_large_1x_416_coco.yml
index bc8893e7759421e8ad7975ad847b193cecb60708..52c5a393a93dbe88aa9db21b3400acc8c0434997 100644
--- a/configs/picodet/more_config/picodet_mobilenetv3_large_1x_416_coco.yml
+++ b/configs/picodet/legacy_model/more_config/picodet_mobilenetv3_large_1x_416_coco.yml
@@ -1,6 +1,6 @@
_BASE_: [
- '../../datasets/coco_detection.yml',
- '../../runtime.yml',
+ '../../../datasets/coco_detection.yml',
+ '../../../runtime.yml',
'../_base_/picodet_esnet.yml',
'../_base_/optimizer_300e.yml',
'../_base_/picodet_416_reader.yml',
diff --git a/configs/picodet/more_config/picodet_r18_640_coco.yml b/configs/picodet/legacy_model/more_config/picodet_r18_640_coco.yml
similarity index 90%
rename from configs/picodet/more_config/picodet_r18_640_coco.yml
rename to configs/picodet/legacy_model/more_config/picodet_r18_640_coco.yml
index 276a933d97a163579b05738eaaef0c8fe560b318..0d111988105757d7cadfce870811fb14f8cb544f 100644
--- a/configs/picodet/more_config/picodet_r18_640_coco.yml
+++ b/configs/picodet/legacy_model/more_config/picodet_r18_640_coco.yml
@@ -1,6 +1,6 @@
_BASE_: [
- '../../datasets/coco_detection.yml',
- '../../runtime.yml',
+ '../../../datasets/coco_detection.yml',
+ '../../../runtime.yml',
'../_base_/picodet_esnet.yml',
'../_base_/optimizer_300e.yml',
'../_base_/picodet_640_reader.yml',
diff --git a/configs/picodet/more_config/picodet_shufflenetv2_1x_416_coco.yml b/configs/picodet/legacy_model/more_config/picodet_shufflenetv2_1x_416_coco.yml
similarity index 91%
rename from configs/picodet/more_config/picodet_shufflenetv2_1x_416_coco.yml
rename to configs/picodet/legacy_model/more_config/picodet_shufflenetv2_1x_416_coco.yml
index 04b020a89c3c476a09f9e93bde9d475e5fda076d..017495dc4e5467f9db5906444d069115f23aef1a 100644
--- a/configs/picodet/more_config/picodet_shufflenetv2_1x_416_coco.yml
+++ b/configs/picodet/legacy_model/more_config/picodet_shufflenetv2_1x_416_coco.yml
@@ -1,6 +1,6 @@
_BASE_: [
- '../../datasets/coco_detection.yml',
- '../../runtime.yml',
+ '../../../datasets/coco_detection.yml',
+ '../../../runtime.yml',
'../_base_/picodet_esnet.yml',
'../_base_/optimizer_300e.yml',
'../_base_/picodet_416_reader.yml',
diff --git a/configs/picodet/legacy_model/picodet_l_320_coco.yml b/configs/picodet/legacy_model/picodet_l_320_coco.yml
new file mode 100644
index 0000000000000000000000000000000000000000..a41d5823e3bc3872dd90220408fd73ef7bcf8f3d
--- /dev/null
+++ b/configs/picodet/legacy_model/picodet_l_320_coco.yml
@@ -0,0 +1,47 @@
+_BASE_: [
+ '../../datasets/coco_detection.yml',
+ '../../runtime.yml',
+ '_base_/picodet_esnet.yml',
+ '_base_/optimizer_300e.yml',
+ '_base_/picodet_320_reader.yml',
+]
+
+pretrain_weights: https://paddledet.bj.bcebos.com/models/pretrained/ESNet_x1_25_pretrained.pdparams
+weights: output/picodet_l_320_coco/model_final
+find_unused_parameters: True
+use_ema: true
+cycle_epoch: 40
+snapshot_epoch: 10
+epoch: 250
+
+ESNet:
+ scale: 1.25
+ feature_maps: [4, 11, 14]
+ act: hard_swish
+ channel_ratio: [0.875, 0.5, 1.0, 0.625, 0.5, 0.75, 0.625, 0.625, 0.5, 0.625, 1.0, 0.625, 0.75]
+
+CSPPAN:
+ out_channels: 160
+
+PicoHead:
+ conv_feat:
+ name: PicoFeat
+ feat_in: 160
+ feat_out: 160
+ num_convs: 4
+ num_fpn_stride: 4
+ norm_type: bn
+ share_cls_reg: True
+ feat_in_chan: 160
+
+TrainReader:
+ batch_size: 56
+
+LearningRate:
+ base_lr: 0.3
+ schedulers:
+ - !CosineDecay
+ max_epochs: 300
+ - !LinearWarmup
+ start_factor: 0.1
+ steps: 300
diff --git a/configs/picodet/legacy_model/picodet_l_416_coco.yml b/configs/picodet/legacy_model/picodet_l_416_coco.yml
new file mode 100644
index 0000000000000000000000000000000000000000..fcee20c3eff8fef97247ca3b4cfb5db95124114b
--- /dev/null
+++ b/configs/picodet/legacy_model/picodet_l_416_coco.yml
@@ -0,0 +1,47 @@
+_BASE_: [
+ '../../datasets/coco_detection.yml',
+ '../../runtime.yml',
+ '_base_/picodet_esnet.yml',
+ '_base_/optimizer_300e.yml',
+ '_base_/picodet_416_reader.yml',
+]
+
+pretrain_weights: https://paddledet.bj.bcebos.com/models/pretrained/ESNet_x1_25_pretrained.pdparams
+weights: output/picodet_l_416_coco/model_final
+find_unused_parameters: True
+use_ema: true
+cycle_epoch: 40
+snapshot_epoch: 10
+epoch: 250
+
+ESNet:
+ scale: 1.25
+ feature_maps: [4, 11, 14]
+ act: hard_swish
+ channel_ratio: [0.875, 0.5, 1.0, 0.625, 0.5, 0.75, 0.625, 0.625, 0.5, 0.625, 1.0, 0.625, 0.75]
+
+CSPPAN:
+ out_channels: 160
+
+PicoHead:
+ conv_feat:
+ name: PicoFeat
+ feat_in: 160
+ feat_out: 160
+ num_convs: 4
+ num_fpn_stride: 4
+ norm_type: bn
+ share_cls_reg: True
+ feat_in_chan: 160
+
+TrainReader:
+ batch_size: 48
+
+LearningRate:
+ base_lr: 0.3
+ schedulers:
+ - !CosineDecay
+ max_epochs: 300
+ - !LinearWarmup
+ start_factor: 0.1
+ steps: 300
diff --git a/configs/picodet/legacy_model/picodet_l_640_coco.yml b/configs/picodet/legacy_model/picodet_l_640_coco.yml
new file mode 100644
index 0000000000000000000000000000000000000000..990db111dfe704f8dda661d09a2e7eb6474aa262
--- /dev/null
+++ b/configs/picodet/legacy_model/picodet_l_640_coco.yml
@@ -0,0 +1,47 @@
+_BASE_: [
+ '../../datasets/coco_detection.yml',
+ '../../runtime.yml',
+ '_base_/picodet_esnet.yml',
+ '_base_/optimizer_300e.yml',
+ '_base_/picodet_640_reader.yml',
+]
+
+pretrain_weights: https://paddledet.bj.bcebos.com/models/pretrained/ESNet_x1_25_pretrained.pdparams
+weights: output/picodet_l_640_coco/model_final
+find_unused_parameters: True
+use_ema: true
+cycle_epoch: 40
+snapshot_epoch: 10
+epoch: 250
+
+ESNet:
+ scale: 1.25
+ feature_maps: [4, 11, 14]
+ act: hard_swish
+ channel_ratio: [0.875, 0.5, 1.0, 0.625, 0.5, 0.75, 0.625, 0.625, 0.5, 0.625, 1.0, 0.625, 0.75]
+
+CSPPAN:
+ out_channels: 160
+
+PicoHead:
+ conv_feat:
+ name: PicoFeat
+ feat_in: 160
+ feat_out: 160
+ num_convs: 4
+ num_fpn_stride: 4
+ norm_type: bn
+ share_cls_reg: True
+ feat_in_chan: 160
+
+TrainReader:
+ batch_size: 32
+
+LearningRate:
+ base_lr: 0.3
+ schedulers:
+ - !CosineDecay
+ max_epochs: 300
+ - !LinearWarmup
+ start_factor: 0.1
+ steps: 300
diff --git a/configs/picodet/legacy_model/picodet_m_320_coco.yml b/configs/picodet/legacy_model/picodet_m_320_coco.yml
new file mode 100644
index 0000000000000000000000000000000000000000..5b9f1ce7aa8f1b4cf1e9eea42b618c284b92c98f
--- /dev/null
+++ b/configs/picodet/legacy_model/picodet_m_320_coco.yml
@@ -0,0 +1,13 @@
+_BASE_: [
+ '../../datasets/coco_detection.yml',
+ '../../runtime.yml',
+ '_base_/picodet_esnet.yml',
+ '_base_/optimizer_300e.yml',
+ '_base_/picodet_320_reader.yml',
+]
+
+weights: output/picodet_m_320_coco/model_final
+find_unused_parameters: True
+use_ema: true
+cycle_epoch: 40
+snapshot_epoch: 10
diff --git a/configs/picodet/legacy_model/picodet_m_416_coco.yml b/configs/picodet/legacy_model/picodet_m_416_coco.yml
new file mode 100644
index 0000000000000000000000000000000000000000..8c52f72ead3f523435a091b9ffaade66929e9645
--- /dev/null
+++ b/configs/picodet/legacy_model/picodet_m_416_coco.yml
@@ -0,0 +1,13 @@
+_BASE_: [
+ '../../datasets/coco_detection.yml',
+ '../../runtime.yml',
+ '_base_/picodet_esnet.yml',
+ '_base_/optimizer_300e.yml',
+ '_base_/picodet_416_reader.yml',
+]
+
+weights: output/picodet_m_416_coco/model_final
+find_unused_parameters: True
+use_ema: true
+cycle_epoch: 40
+snapshot_epoch: 10
diff --git a/configs/picodet/legacy_model/picodet_s_320_coco.yml b/configs/picodet/legacy_model/picodet_s_320_coco.yml
new file mode 100644
index 0000000000000000000000000000000000000000..9945e3db13967ec875e050619cb66cac7827aa3e
--- /dev/null
+++ b/configs/picodet/legacy_model/picodet_s_320_coco.yml
@@ -0,0 +1,34 @@
+_BASE_: [
+ '../../datasets/coco_detection.yml',
+ '../../runtime.yml',
+ '_base_/picodet_esnet.yml',
+ '_base_/optimizer_300e.yml',
+ '_base_/picodet_320_reader.yml',
+]
+
+pretrain_weights: https://paddledet.bj.bcebos.com/models/pretrained/ESNet_x0_75_pretrained.pdparams
+weights: output/picodet_s_320_coco/model_final
+find_unused_parameters: True
+use_ema: true
+cycle_epoch: 40
+snapshot_epoch: 10
+
+ESNet:
+ scale: 0.75
+ feature_maps: [4, 11, 14]
+ act: hard_swish
+ channel_ratio: [0.875, 0.5, 0.5, 0.5, 0.625, 0.5, 0.625, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5]
+
+CSPPAN:
+ out_channels: 96
+
+PicoHead:
+ conv_feat:
+ name: PicoFeat
+ feat_in: 96
+ feat_out: 96
+ num_convs: 2
+ num_fpn_stride: 4
+ norm_type: bn
+ share_cls_reg: True
+ feat_in_chan: 96
diff --git a/configs/picodet/picodet_s_320_voc.yml b/configs/picodet/legacy_model/picodet_s_320_voc.yml
similarity index 93%
rename from configs/picodet/picodet_s_320_voc.yml
rename to configs/picodet/legacy_model/picodet_s_320_voc.yml
index ed93fb6365fcc089d802bf1fcc726de73d4c8d59..0be56616dcede4d60e4a54fb09cc66c45c63ebdf 100644
--- a/configs/picodet/picodet_s_320_voc.yml
+++ b/configs/picodet/legacy_model/picodet_s_320_voc.yml
@@ -1,6 +1,6 @@
_BASE_: [
- '../datasets/voc.yml',
- '../runtime.yml',
+ '../../datasets/voc.yml',
+ '../../runtime.yml',
'_base_/picodet_esnet.yml',
'_base_/optimizer_300e.yml',
'_base_/picodet_320_reader.yml',
diff --git a/configs/picodet/picodet_v2_s_416_coco.yml b/configs/picodet/legacy_model/picodet_s_416_coco.yml
similarity index 64%
rename from configs/picodet/picodet_v2_s_416_coco.yml
rename to configs/picodet/legacy_model/picodet_s_416_coco.yml
index ba4623220f0ee17716ce7d84a9448c08197d5498..3764b6e4f26cc328b5e7a19815f88bbadf6e4013 100644
--- a/configs/picodet/picodet_v2_s_416_coco.yml
+++ b/configs/picodet/legacy_model/picodet_s_416_coco.yml
@@ -1,15 +1,16 @@
_BASE_: [
- '../datasets/coco_detection.yml',
- '../runtime.yml',
- '_base_/picodet_esnetv2.yml',
+ '../../datasets/coco_detection.yml',
+ '../../runtime.yml',
+ '_base_/picodet_esnet.yml',
'_base_/optimizer_300e.yml',
- '_base_/picodet_v2_416_reader.yml',
+ '_base_/picodet_416_reader.yml',
]
pretrain_weights: https://paddledet.bj.bcebos.com/models/pretrained/ESNet_x0_75_pretrained.pdparams
weights: output/picodet_s_416_coco/model_final
find_unused_parameters: True
use_ema: true
+cycle_epoch: 40
snapshot_epoch: 10
ESNet:
@@ -18,10 +19,10 @@ ESNet:
act: hard_swish
channel_ratio: [0.875, 0.5, 0.5, 0.5, 0.625, 0.5, 0.625, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5]
-ESPAN:
+CSPPAN:
out_channels: 96
-PicoHeadV2:
+PicoHead:
conv_feat:
name: PicoFeat
feat_in: 96
@@ -30,17 +31,4 @@ PicoHeadV2:
num_fpn_stride: 4
norm_type: bn
share_cls_reg: True
- use_se: True
feat_in_chan: 96
-
-TrainReader:
- batch_size: 56
-
-LearningRate:
- base_lr: 0.3
- schedulers:
- - !CosineDecay
- max_epochs: 300
- - !LinearWarmup
- start_factor: 0.1
- steps: 300
diff --git a/configs/picodet/pruner/README.md b/configs/picodet/legacy_model/pruner/README.md
similarity index 100%
rename from configs/picodet/pruner/README.md
rename to configs/picodet/legacy_model/pruner/README.md
diff --git a/configs/picodet/pruner/optimizer_300e_pruner.yml b/configs/picodet/legacy_model/pruner/optimizer_300e_pruner.yml
similarity index 100%
rename from configs/picodet/pruner/optimizer_300e_pruner.yml
rename to configs/picodet/legacy_model/pruner/optimizer_300e_pruner.yml
diff --git a/configs/picodet/pruner/picodet_m_320_coco_pruner.yml b/configs/picodet/legacy_model/pruner/picodet_m_320_coco_pruner.yml
similarity index 78%
rename from configs/picodet/pruner/picodet_m_320_coco_pruner.yml
rename to configs/picodet/legacy_model/pruner/picodet_m_320_coco_pruner.yml
index cc357048dafe1040194cde50a6966aa56d4287b5..cf55a882ead0739c5859c7f335cbeb0d20f6415c 100644
--- a/configs/picodet/pruner/picodet_m_320_coco_pruner.yml
+++ b/configs/picodet/legacy_model/pruner/picodet_m_320_coco_pruner.yml
@@ -1,6 +1,6 @@
_BASE_: [
- '../../datasets/coco_detection.yml',
- '../../runtime.yml',
+ '../../../datasets/coco_detection.yml',
+ '../../../runtime.yml',
'../_base_/picodet_esnet.yml',
'./optimizer_300e_pruner.yml',
'../_base_/picodet_320_reader.yml',
diff --git a/configs/picodet/more_config/picodet_v2_lcnet_1_5x_416_coco.yml b/configs/picodet/more_config/picodet_v2_lcnet_1_5x_416_coco.yml
deleted file mode 100644
index 5c825fa5fb11e0301d526e9c34346f9a27f3f05f..0000000000000000000000000000000000000000
--- a/configs/picodet/more_config/picodet_v2_lcnet_1_5x_416_coco.yml
+++ /dev/null
@@ -1,34 +0,0 @@
-_BASE_: [
- '../../datasets/coco_detection.yml',
- '../../runtime.yml',
- '../_base_/picodet_esnetv2.yml',
- '../_base_/optimizer_300e.yml',
- '../_base_/picodet_v2_416_reader.yml',
-]
-
-pretrain_weights: https://paddledet.bj.bcebos.com/models/pretrained/LCNet_x1_5_pretrained.pdparams
-weights: output/picodet_lcnet_1_5x_416_coco/model_final
-find_unused_parameters: True
-use_ema: true
-snapshot_epoch: 10
-
-PicoDet:
- backbone: LCNet
- neck: ESPAN
- head: PicoHeadV2
-
-LCNet:
- scale: 1.5
- feature_maps: [3, 4, 5]
-
-TrainReader:
- batch_size: 32
-
-LearningRate:
- base_lr: 0.2
- schedulers:
- - !CosineDecay
- max_epochs: 300
- - !LinearWarmup
- start_factor: 0.1
- steps: 300
diff --git a/configs/picodet/picodet_l_320_coco.yml b/configs/picodet/picodet_l_320_coco.yml
index ab3690b1e444c2899103c0ea45702800d2ba6b40..c9225ff30f563877c8870dfaefdefb46f50effd7 100644
--- a/configs/picodet/picodet_l_320_coco.yml
+++ b/configs/picodet/picodet_l_320_coco.yml
@@ -1,29 +1,26 @@
_BASE_: [
'../datasets/coco_detection.yml',
'../runtime.yml',
- '_base_/picodet_esnet.yml',
+ '_base_/picodet_v2.yml',
'_base_/optimizer_300e.yml',
'_base_/picodet_320_reader.yml',
]
-pretrain_weights: https://paddledet.bj.bcebos.com/models/pretrained/ESNet_x1_25_pretrained.pdparams
-weights: output/picodet_l_320_coco/model_final
+pretrain_weights: https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x2_0_pretrained.pdparams
+weights: output/picodet_l_320_coco/best_model
find_unused_parameters: True
use_ema: true
-cycle_epoch: 40
-snapshot_epoch: 10
epoch: 250
+snapshot_epoch: 10
-ESNet:
- scale: 1.25
- feature_maps: [4, 11, 14]
- act: hard_swish
- channel_ratio: [0.875, 0.5, 1.0, 0.625, 0.5, 0.75, 0.625, 0.625, 0.5, 0.625, 1.0, 0.625, 0.75]
+LCNet:
+ scale: 2.0
+ feature_maps: [3, 4, 5]
-CSPPAN:
+LCPAN:
out_channels: 160
-PicoHead:
+PicoHeadV2:
conv_feat:
name: PicoFeat
feat_in: 160
@@ -32,16 +29,17 @@ PicoHead:
num_fpn_stride: 4
norm_type: bn
share_cls_reg: True
+ use_se: True
feat_in_chan: 160
-TrainReader:
- batch_size: 56
-
LearningRate:
- base_lr: 0.3
+ base_lr: 0.12
schedulers:
- !CosineDecay
max_epochs: 300
- !LinearWarmup
start_factor: 0.1
steps: 300
+
+TrainReader:
+ batch_size: 24
diff --git a/configs/picodet/picodet_l_416_coco.yml b/configs/picodet/picodet_l_416_coco.yml
index 1492c262774086aed7be3a338c670ff2e3a0aa50..8b97bd03e89fbd279512a5e09b13618d02695b8f 100644
--- a/configs/picodet/picodet_l_416_coco.yml
+++ b/configs/picodet/picodet_l_416_coco.yml
@@ -1,29 +1,26 @@
_BASE_: [
'../datasets/coco_detection.yml',
'../runtime.yml',
- '_base_/picodet_esnet.yml',
+ '_base_/picodet_v2.yml',
'_base_/optimizer_300e.yml',
'_base_/picodet_416_reader.yml',
]
-pretrain_weights: https://paddledet.bj.bcebos.com/models/pretrained/ESNet_x1_25_pretrained.pdparams
-weights: output/picodet_l_416_coco/model_final
+pretrain_weights: https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x2_0_pretrained.pdparams
+weights: output/picodet_l_320_coco/best_model
find_unused_parameters: True
use_ema: true
-cycle_epoch: 40
-snapshot_epoch: 10
epoch: 250
+snapshot_epoch: 10
-ESNet:
- scale: 1.25
- feature_maps: [4, 11, 14]
- act: hard_swish
- channel_ratio: [0.875, 0.5, 1.0, 0.625, 0.5, 0.75, 0.625, 0.625, 0.5, 0.625, 1.0, 0.625, 0.75]
+LCNet:
+ scale: 2.0
+ feature_maps: [3, 4, 5]
-CSPPAN:
+LCPAN:
out_channels: 160
-PicoHead:
+PicoHeadV2:
conv_feat:
name: PicoFeat
feat_in: 160
@@ -32,16 +29,17 @@ PicoHead:
num_fpn_stride: 4
norm_type: bn
share_cls_reg: True
+ use_se: True
feat_in_chan: 160
-TrainReader:
- batch_size: 48
-
LearningRate:
- base_lr: 0.3
+ base_lr: 0.12
schedulers:
- !CosineDecay
max_epochs: 300
- !LinearWarmup
start_factor: 0.1
steps: 300
+
+TrainReader:
+ batch_size: 24
diff --git a/configs/picodet/picodet_l_640_coco.yml b/configs/picodet/picodet_l_640_coco.yml
index 4f6614c3879e98e61ba5f78891433f5f2c98795c..2fadd6a25b9ebe1e598cf10cbf01af23eefc14d4 100644
--- a/configs/picodet/picodet_l_640_coco.yml
+++ b/configs/picodet/picodet_l_640_coco.yml
@@ -1,29 +1,26 @@
_BASE_: [
'../datasets/coco_detection.yml',
'../runtime.yml',
- '_base_/picodet_esnet.yml',
+ '_base_/picodet_v2.yml',
'_base_/optimizer_300e.yml',
'_base_/picodet_640_reader.yml',
]
-pretrain_weights: https://paddledet.bj.bcebos.com/models/pretrained/ESNet_x1_25_pretrained.pdparams
-weights: output/picodet_l_640_coco/model_final
+pretrain_weights: https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x2_0_pretrained.pdparams
+weights: output/picodet_l_320_coco/best_model
find_unused_parameters: True
use_ema: true
-cycle_epoch: 40
+epoch: 200
snapshot_epoch: 10
-epoch: 250
-ESNet:
- scale: 1.25
- feature_maps: [4, 11, 14]
- act: hard_swish
- channel_ratio: [0.875, 0.5, 1.0, 0.625, 0.5, 0.75, 0.625, 0.625, 0.5, 0.625, 1.0, 0.625, 0.75]
+LCNet:
+ scale: 2.0
+ feature_maps: [3, 4, 5]
-CSPPAN:
+LCPAN:
out_channels: 160
-PicoHead:
+PicoHeadV2:
conv_feat:
name: PicoFeat
feat_in: 160
@@ -32,16 +29,17 @@ PicoHead:
num_fpn_stride: 4
norm_type: bn
share_cls_reg: True
+ use_se: True
feat_in_chan: 160
-TrainReader:
- batch_size: 32
-
LearningRate:
- base_lr: 0.3
+ base_lr: 0.06
schedulers:
- !CosineDecay
max_epochs: 300
- !LinearWarmup
start_factor: 0.1
steps: 300
+
+TrainReader:
+ batch_size: 12
diff --git a/configs/picodet/picodet_m_320_coco.yml b/configs/picodet/picodet_m_320_coco.yml
index 54fc6e605ffea1b26a3581c98a6b6e0bbc91d3d3..cd9cca9cad7aa2a8dd0f3d11d85e7cbb8235b8a6 100644
--- a/configs/picodet/picodet_m_320_coco.yml
+++ b/configs/picodet/picodet_m_320_coco.yml
@@ -1,13 +1,25 @@
_BASE_: [
'../datasets/coco_detection.yml',
'../runtime.yml',
- '_base_/picodet_esnet.yml',
+ '_base_/picodet_v2.yml',
'_base_/optimizer_300e.yml',
'_base_/picodet_320_reader.yml',
]
-weights: output/picodet_m_320_coco/model_final
+weights: output/picodet_m_320_coco/best_model
find_unused_parameters: True
use_ema: true
-cycle_epoch: 40
+epoch: 300
snapshot_epoch: 10
+
+TrainReader:
+ batch_size: 48
+
+LearningRate:
+ base_lr: 0.24
+ schedulers:
+ - !CosineDecay
+ max_epochs: 300
+ - !LinearWarmup
+ start_factor: 0.1
+ steps: 300
diff --git a/configs/picodet/picodet_m_416_coco.yml b/configs/picodet/picodet_m_416_coco.yml
index c53b6dcc5b1d947cf11bed68fdde7e6728a133f1..130303d39de17dc15564539fb5649e8cb66b1a78 100644
--- a/configs/picodet/picodet_m_416_coco.yml
+++ b/configs/picodet/picodet_m_416_coco.yml
@@ -1,13 +1,25 @@
_BASE_: [
'../datasets/coco_detection.yml',
'../runtime.yml',
- '_base_/picodet_esnet.yml',
+ '_base_/picodet_v2.yml',
'_base_/optimizer_300e.yml',
'_base_/picodet_416_reader.yml',
]
-weights: output/picodet_m_416_coco/model_final
+weights: output/picodet_m_416_coco/best_model
find_unused_parameters: True
use_ema: true
-cycle_epoch: 40
+epoch: 250
snapshot_epoch: 10
+
+TrainReader:
+ batch_size: 48
+
+LearningRate:
+ base_lr: 0.24
+ schedulers:
+ - !CosineDecay
+ max_epochs: 300
+ - !LinearWarmup
+ start_factor: 0.1
+ steps: 300
diff --git a/configs/picodet/picodet_s_320_coco.yml b/configs/picodet/picodet_s_320_coco.yml
index c54ab14dfdb3a224b9fb8101c26b99ffec8149ca..c9fb52f320239cccf30257fe695e82fb5bb26121 100644
--- a/configs/picodet/picodet_s_320_coco.yml
+++ b/configs/picodet/picodet_s_320_coco.yml
@@ -1,28 +1,26 @@
_BASE_: [
'../datasets/coco_detection.yml',
'../runtime.yml',
- '_base_/picodet_esnet.yml',
+ '_base_/picodet_v2.yml',
'_base_/optimizer_300e.yml',
'_base_/picodet_320_reader.yml',
]
-pretrain_weights: https://paddledet.bj.bcebos.com/models/pretrained/ESNet_x0_75_pretrained.pdparams
-weights: output/picodet_s_320_coco/model_final
+pretrain_weights: https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x0_75_pretrained.pdparams
+weights: output/picodet_s_320_coco/best_model
find_unused_parameters: True
use_ema: true
-cycle_epoch: 40
+epoch: 300
snapshot_epoch: 10
-ESNet:
+LCNet:
scale: 0.75
- feature_maps: [4, 11, 14]
- act: hard_swish
- channel_ratio: [0.875, 0.5, 0.5, 0.5, 0.625, 0.5, 0.625, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5]
+ feature_maps: [3, 4, 5]
-CSPPAN:
+LCPAN:
out_channels: 96
-PicoHead:
+PicoHeadV2:
conv_feat:
name: PicoFeat
feat_in: 96
@@ -31,4 +29,17 @@ PicoHead:
num_fpn_stride: 4
norm_type: bn
share_cls_reg: True
+ use_se: True
feat_in_chan: 96
+
+TrainReader:
+ batch_size: 64
+
+LearningRate:
+ base_lr: 0.32
+ schedulers:
+ - !CosineDecay
+ max_epochs: 300
+ - !LinearWarmup
+ start_factor: 0.1
+ steps: 300
diff --git a/configs/picodet/picodet_s_416_coco.yml b/configs/picodet/picodet_s_416_coco.yml
index f28e166cc8104a12ed0ce09e2d5193d0b46cad87..ed00b479b3729e4202e190e945d2c5ddce0f7f4a 100644
--- a/configs/picodet/picodet_s_416_coco.yml
+++ b/configs/picodet/picodet_s_416_coco.yml
@@ -1,28 +1,26 @@
_BASE_: [
'../datasets/coco_detection.yml',
'../runtime.yml',
- '_base_/picodet_esnet.yml',
+ '_base_/picodet_v2.yml',
'_base_/optimizer_300e.yml',
'_base_/picodet_416_reader.yml',
]
-pretrain_weights: https://paddledet.bj.bcebos.com/models/pretrained/ESNet_x0_75_pretrained.pdparams
-weights: output/picodet_s_416_coco/model_final
+pretrain_weights: https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x0_75_pretrained.pdparams
+weights: output/picodet_s_416_coco/best_model
find_unused_parameters: True
use_ema: true
-cycle_epoch: 40
+epoch: 300
snapshot_epoch: 10
-ESNet:
+LCNet:
scale: 0.75
- feature_maps: [4, 11, 14]
- act: hard_swish
- channel_ratio: [0.875, 0.5, 0.5, 0.5, 0.625, 0.5, 0.625, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5]
+ feature_maps: [3, 4, 5]
-CSPPAN:
+LCPAN:
out_channels: 96
-PicoHead:
+PicoHeadV2:
conv_feat:
name: PicoFeat
feat_in: 96
@@ -31,4 +29,17 @@ PicoHead:
num_fpn_stride: 4
norm_type: bn
share_cls_reg: True
+ use_se: True
feat_in_chan: 96
+
+TrainReader:
+ batch_size: 48
+
+LearningRate:
+ base_lr: 0.24
+ schedulers:
+ - !CosineDecay
+ max_epochs: 300
+ - !LinearWarmup
+ start_factor: 0.1
+ steps: 300
diff --git a/configs/picodet/picodet_xs_320_coco.yml b/configs/picodet/picodet_xs_320_coco.yml
new file mode 100644
index 0000000000000000000000000000000000000000..3b1b75313daa2b0e1bb72474dbf2e2f1ace5ff52
--- /dev/null
+++ b/configs/picodet/picodet_xs_320_coco.yml
@@ -0,0 +1,45 @@
+_BASE_: [
+ '../datasets/coco_detection.yml',
+ '../runtime.yml',
+ '_base_/picodet_v2.yml',
+ '_base_/optimizer_300e.yml',
+ '_base_/picodet_320_reader.yml',
+]
+
+pretrain_weights: https://paddledet.bj.bcebos.com/models/pretrained/LCNet_x0_35_pretrained.pdparams
+weights: output/picodet_xs_320_coco/best_model
+find_unused_parameters: True
+use_ema: true
+epoch: 300
+snapshot_epoch: 10
+
+LCNet:
+ scale: 0.35
+ feature_maps: [3, 4, 5]
+
+LCPAN:
+ out_channels: 96
+
+PicoHeadV2:
+ conv_feat:
+ name: PicoFeat
+ feat_in: 96
+ feat_out: 96
+ num_convs: 2
+ num_fpn_stride: 4
+ norm_type: bn
+ share_cls_reg: True
+ use_se: True
+ feat_in_chan: 96
+
+TrainReader:
+ batch_size: 64
+
+LearningRate:
+ base_lr: 0.32
+ schedulers:
+ - !CosineDecay
+ max_epochs: 300
+ - !LinearWarmup
+ start_factor: 0.1
+ steps: 300
diff --git a/configs/picodet/picodet_xs_416_coco.yml b/configs/picodet/picodet_xs_416_coco.yml
new file mode 100644
index 0000000000000000000000000000000000000000..352fa951199407169d79c5c1f56a0a1f8dbe0088
--- /dev/null
+++ b/configs/picodet/picodet_xs_416_coco.yml
@@ -0,0 +1,45 @@
+_BASE_: [
+ '../datasets/coco_detection.yml',
+ '../runtime.yml',
+ '_base_/picodet_v2.yml',
+ '_base_/optimizer_300e.yml',
+ '_base_/picodet_416_reader.yml',
+]
+
+pretrain_weights: https://paddledet.bj.bcebos.com/models/pretrained/LCNet_x0_35_pretrained.pdparams
+weights: output/picodet_xs_416_coco/best_model
+find_unused_parameters: True
+use_ema: true
+epoch: 300
+snapshot_epoch: 10
+
+LCNet:
+ scale: 0.35
+ feature_maps: [3, 4, 5]
+
+LCPAN:
+ out_channels: 96
+
+PicoHeadV2:
+ conv_feat:
+ name: PicoFeat
+ feat_in: 96
+ feat_out: 96
+ num_convs: 2
+ num_fpn_stride: 4
+ norm_type: bn
+ share_cls_reg: True
+ use_se: True
+ feat_in_chan: 96
+
+TrainReader:
+ batch_size: 56
+
+LearningRate:
+ base_lr: 0.28
+ schedulers:
+ - !CosineDecay
+ max_epochs: 300
+ - !LinearWarmup
+ start_factor: 0.1
+ steps: 300
diff --git a/ppdet/modeling/necks/__init__.py b/ppdet/modeling/necks/__init__.py
index 6d8b3786f121d2913b1043c8da82e755a5ef15e5..2325a112ac219ff5886de32aa0d967b73ce037e9 100644
--- a/ppdet/modeling/necks/__init__.py
+++ b/ppdet/modeling/necks/__init__.py
@@ -20,6 +20,7 @@ from . import centernet_fpn
from . import bifpn
from . import csp_pan
from . import es_pan
+from . import lc_pan
from . import custom_pan
from .fpn import *
@@ -31,4 +32,5 @@ from .blazeface_fpn import *
from .bifpn import *
from .csp_pan import *
from .es_pan import *
+from .lc_pan import *
from .custom_pan import *
diff --git a/ppdet/modeling/necks/lc_pan.py b/ppdet/modeling/necks/lc_pan.py
new file mode 100644
index 0000000000000000000000000000000000000000..0c59c8a38b10abfb442e56a23b5fabe86bbb9a3a
--- /dev/null
+++ b/ppdet/modeling/necks/lc_pan.py
@@ -0,0 +1,168 @@
+# Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import paddle
+import paddle.nn as nn
+import paddle.nn.functional as F
+from paddle import ParamAttr
+from paddle.regularizer import L2Decay
+from ppdet.core.workspace import register, serializable
+
+from ..shape_spec import ShapeSpec
+from ..backbones.lcnet import DepthwiseSeparable
+from .csp_pan import ConvBNLayer, Channel_T, DPModule
+
+__all__ = ['LCPAN']
+
+
+@register
+@serializable
+class LCPAN(nn.Layer):
+ """Path Aggregation Network with LCNet module.
+ Args:
+ in_channels (List[int]): Number of input channels per scale.
+ out_channels (int): Number of output channels (used at each scale)
+ kernel_size (int): The conv2d kernel size of this Module.
+ num_features (int): Number of output features of CSPPAN module.
+ num_csp_blocks (int): Number of bottlenecks in CSPLayer. Default: 1
+ use_depthwise (bool): Whether to depthwise separable convolution in
+ blocks. Default: True
+ """
+
+ def __init__(self,
+ in_channels,
+ out_channels,
+ kernel_size=5,
+ num_features=3,
+ use_depthwise=True,
+ act='hard_swish',
+ spatial_scales=[0.125, 0.0625, 0.03125]):
+ super(LCPAN, self).__init__()
+ self.conv_t = Channel_T(in_channels, out_channels, act=act)
+ in_channels = [out_channels] * len(spatial_scales)
+ self.in_channels = in_channels
+ self.out_channels = out_channels
+ self.spatial_scales = spatial_scales
+ self.num_features = num_features
+ conv_func = DPModule if use_depthwise else ConvBNLayer
+
+ NET_CONFIG = {
+ #k, in_c, out_c, stride, use_se
+ "block1": [
+ [kernel_size, out_channels * 2, out_channels * 2, 1, False],
+ [kernel_size, out_channels * 2, out_channels, 1, False],
+ ],
+ "block2": [
+ [kernel_size, out_channels * 2, out_channels * 2, 1, False],
+ [kernel_size, out_channels * 2, out_channels, 1, False],
+ ]
+ }
+
+ if self.num_features == 4:
+ self.first_top_conv = conv_func(
+ in_channels[0], in_channels[0], kernel_size, stride=2, act=act)
+ self.second_top_conv = conv_func(
+ in_channels[0], in_channels[0], kernel_size, stride=2, act=act)
+ self.spatial_scales.append(self.spatial_scales[-1] / 2)
+
+ # build top-down blocks
+ self.upsample = nn.Upsample(scale_factor=2, mode='nearest')
+ self.top_down_blocks = nn.LayerList()
+ for idx in range(len(in_channels) - 1, 0, -1):
+ self.top_down_blocks.append(
+ nn.Sequential(* [
+ DepthwiseSeparable(
+ num_channels=in_c,
+ num_filters=out_c,
+ dw_size=k,
+ stride=s,
+ use_se=se)
+ for i, (k, in_c, out_c, s, se) in enumerate(NET_CONFIG[
+ "block1"])
+ ]))
+
+ # build bottom-up blocks
+ self.downsamples = nn.LayerList()
+ self.bottom_up_blocks = nn.LayerList()
+ for idx in range(len(in_channels) - 1):
+ self.downsamples.append(
+ conv_func(
+ in_channels[idx],
+ in_channels[idx],
+ kernel_size=kernel_size,
+ stride=2,
+ act=act))
+ self.bottom_up_blocks.append(
+ nn.Sequential(* [
+ DepthwiseSeparable(
+ num_channels=in_c,
+ num_filters=out_c,
+ dw_size=k,
+ stride=s,
+ use_se=se)
+ for i, (k, in_c, out_c, s, se) in enumerate(NET_CONFIG[
+ "block2"])
+ ]))
+
+ def forward(self, inputs):
+ """
+ Args:
+ inputs (tuple[Tensor]): input features.
+ Returns:
+ tuple[Tensor]: CSPPAN features.
+ """
+ assert len(inputs) == len(self.in_channels)
+ inputs = self.conv_t(inputs)
+
+ # top-down path
+ inner_outs = [inputs[-1]]
+ for idx in range(len(self.in_channels) - 1, 0, -1):
+ feat_heigh = inner_outs[0]
+ feat_low = inputs[idx - 1]
+
+ upsample_feat = self.upsample(feat_heigh)
+
+ inner_out = self.top_down_blocks[len(self.in_channels) - 1 - idx](
+ paddle.concat([upsample_feat, feat_low], 1))
+ inner_outs.insert(0, inner_out)
+
+ # bottom-up path
+ outs = [inner_outs[0]]
+ for idx in range(len(self.in_channels) - 1):
+ feat_low = outs[-1]
+ feat_height = inner_outs[idx + 1]
+ downsample_feat = self.downsamples[idx](feat_low)
+ out = self.bottom_up_blocks[idx](paddle.concat(
+ [downsample_feat, feat_height], 1))
+ outs.append(out)
+
+ top_features = None
+ if self.num_features == 4:
+ top_features = self.first_top_conv(inputs[-1])
+ top_features = top_features + self.second_top_conv(outs[-1])
+ outs.append(top_features)
+
+ return tuple(outs)
+
+ @property
+ def out_shape(self):
+ return [
+ ShapeSpec(
+ channels=self.out_channels, stride=1. / s)
+ for s in self.spatial_scales
+ ]
+
+ @classmethod
+ def from_config(cls, cfg, input_shape):
+ return {'in_channels': [i.channels for i in input_shape], }