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