Skip to content

Commit

Permalink
update readme and fix silu
Browse files Browse the repository at this point in the history
  • Loading branch information
nemonameless committed Aug 10, 2022
1 parent 67739d8 commit dee0a21
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 26 deletions.
26 changes: 17 additions & 9 deletions README_cn.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
最新更新请前往[PaddleDetection_YOLOSeries](https://github.com/nemonameless/PaddleDetection_YOLOSeries)使用。
- 全面覆盖的YOLO家族经典与最新模型: 包括YOLOv3,百度飞桨自研的实时高精度目标检测检测模型PP-YOLOE,以及前沿检测算法YOLOv4、YOLOv5、YOLOX,MT-YOLOv6及YOLOv7
- 更强的模型性能:基于各家前沿YOLO算法进行创新并升级,缩短训练周期5~8倍,精度普遍提升1%~5% mAP;使用模型压缩策略实现精度无损的同时速度提升30%以上
- 完备的端到端开发支持:支持从模型训练、评估、预测到模型量化压缩,部署多种硬件的端到端开发全流程。同时支持不同模型算法灵活切换,一键实现算法二次开发

=================================================================

## 简介

此repository是基于[PaddleDetection](https://github.com/PaddlePaddle/PaddleDetection)`YOLOv5`,其upstream为PaddleDetection的[develop](https://github.com/PaddlePaddle/PaddleDetection/tree/develop)分支,在保持与PaddleDetection同步更新的同时,也更新关于YOLOv5的一些改进,并同步更新github和gitee的代码,欢迎一起使用和建设!
Expand All @@ -8,27 +15,28 @@


## Updates!
* 【2022/08/09】YOLO家族全系列模型[PaddleDetection_YOLOSeries](https://github.com/nemonameless/PaddleDetection_YOLOSeries)发布,支持PP-YOLOE、YOLOv5、YOLOX,MT-YOLOv6以及YOLOv7。
* 【2022/05/15】新增[YOLOv5](configs/yolov5)目标检测模型,支持n/s/m/l/x版本。


## [ModelZoo](configs/yolov5) on COCO

| 网络网络 | 输入尺寸 | 图片数/GPU | 学习率策略 | 模型推理耗时(ms) | mAP | AP50 | 下载链接 | 配置文件 |
| :------------- | :------- | :-------: | :------: | :---------: | :-----: |:-----: | :-------------: | :-----: |
| YOLOv5-n | 640 | 16 | 300e | 2.6 | 28.0 | 45.7 | [下载链接](https://paddledet.bj.bcebos.com/models/yolov5_n_300e_coco.pdparams) | [配置文件](configs/yolov5/yolov5_n_300e_coco.yml) |
| YOLOv5-s | 640 | 8 | 300e | 3.2 | 37.0 | 55.9 | [下载链接](https://paddledet.bj.bcebos.com/models/yolov5_s_300e_coco.pdparams) | [配置文件](configs/yolov5/yolov5_s_300e_coco.yml) |
| YOLOv5-m | 640 | 8 | 300e | 5.2 | 45.3 | 63.8 | [下载链接](https://paddledet.bj.bcebos.com/models/yolov5_m_300e_coco.pdparams) | [配置文件](configs/yolov5/yolov5_m_300e_coco.yml) |
| YOLOv5-l | 640 | 8 | 300e | 7.9 | 48.6 | 66.9 | [下载链接](https://paddledet.bj.bcebos.com/models/yolov5_l_300e_coco.pdparams) | [配置文件](configs/yolov5/yolov5_l_300e_coco.yml) |
| YOLOv5-x | 640 | 8 | 300e | 13.7 | 50.6 | 68.7 | [下载链接](https://paddledet.bj.bcebos.com/models/yolov5_x_300e_coco.pdparams) | [配置文件](configs/yolov5/yolov5_x_300e_coco.yml) |

| 网络网络 | 输入尺寸 | 图片数/GPU | 学习率策略 | 模型推理耗时(ms) | mAP<sup>val<br>0.5:0.95 | mAP<sup>val<br>0.5 | Params(M) | FLOPs(G) | 下载链接 | 配置文件 |
| :------------- | :------- | :-------: | :------: | :------------: | :---------------------: | :----------------: |:---------: | :------: |:---------------: |:-----: |
| YOLOv5-n | 640 | 16 | 300e | 2.6 | 28.0 | 45.7 | 1.87 | 4.52 | [下载链接](https://paddledet.bj.bcebos.com/models/yolov5_n_300e_coco.pdparams) | [配置文件](./yolov5_n_300e_coco.yml) |
| YOLOv5-s | 640 | 8 | 300e | 3.2 | 37.0 | 55.9 | 7.24 | 16.54 | [下载链接](https://paddledet.bj.bcebos.com/models/yolov5_s_300e_coco.pdparams) | [配置文件](./yolov5_s_300e_coco.yml) |
| YOLOv5-m | 640 | 8 | 300e | 5.2 | 45.3 | 63.8 | 21.19 | 49.08 | [下载链接](https://paddledet.bj.bcebos.com/models/yolov5_m_300e_coco.pdparams) | [配置文件](./yolov5_m_300e_coco.yml) |
| YOLOv5-l | 640 | 8 | 300e | 7.9 | 48.6 | 66.9 | 46.56 | 109.32 | [下载链接](https://paddledet.bj.bcebos.com/models/yolov5_l_300e_coco.pdparams) | [配置文件](./yolov5_l_300e_coco.yml) |
| YOLOv5-x | 640 | 8 | 300e | 13.7 | **50.6** | **68.7** | 86.75 | 205.92 | [下载链接](https://paddledet.bj.bcebos.com/models/yolov5_x_300e_coco.pdparams) | [配置文件](./yolov5_x_300e_coco.yml) |
| YOLOv5-s ConvNeXt| 640 | 8 | 36e | - | 42.4 | 65.3 | 34.54 | 17.96 | [下载链接](https://paddledet.bj.bcebos.com/models/yolov5_convnext_s_36e_coco.pdparams) | [配置文件](./yolov5_convnext_s_36e_coco.yml) |
**注意:**
- 具体精度和速度细节请查看[yolov5](configs/yolov5)


## TODO
- [x] YOLOv5-P6、YOLOv5-P2
- [x] 换主干网络:CSP-ResNet
- [ ] [PaddleDetection_YOLOv7](https://github.com/nemonameless/PaddleDetection_YOLOv7)(Doing)
- [x] YOLOv7,MT-YOLOv6以及YOLO模型集合--[PaddleDetection_YOLOSeries](https://github.com/nemonameless/PaddleDetection_YOLOSeries)
- [ ] Transformer modules
- [ ] 更多Data Augmentation、Attention Module、Loss
- [ ] 精简代码只保留YOLO系列模型(YOLOv3、PP-YOLO、PP-YOLOv2、PP-YOLOE、YOLOX、YOLOv5)
Expand Down
20 changes: 9 additions & 11 deletions configs/yolov5/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,25 +8,23 @@
## 模型库
### YOLOv5 on COCO

| 网络网络 | 输入尺寸 | 图片数/GPU | 学习率策略 | 模型推理耗时(ms) | mAP<sup>val<br>0.5:0.95 | mAP<sup>val<br>0.5 | Params(M) | FLOPs(G) | 下载链接 | 配置文件 |
| 网络网络 | 输入尺寸 | 图片数/GPU | 学习率策略 | 模型推理耗时(ms) | mAP<sup>val<br>0.5:0.95 | mAP<sup>val<br>0.5 | Params(M) | FLOPs(G) | 下载链接 | 配置文件 |
| :------------- | :------- | :-------: | :------: | :------------: | :---------------------: | :----------------: |:---------: | :------: |:---------------: |:-----: |
| YOLOv5-n | 640 | 16 | 300e | 2.6 | 28.0 | 45.7 | 1.87 | 2.26 | [下载链接](https://paddledet.bj.bcebos.com/models/yolov5_n_300e_coco.pdparams) | [配置文件](./yolov5_n_300e_coco.yml) |
| YOLOv5-s | 640 | 8 | 300e | 3.2 | 37.0 | 55.9 | 7.24 | 8.27 | [下载链接](https://paddledet.bj.bcebos.com/models/yolov5_s_300e_coco.pdparams) | [配置文件](./yolov5_s_300e_coco.yml) |
| YOLOv5-m | 640 | 8 | 300e | 5.2 | 45.3 | 63.8 | 21.19 | 24.54 | [下载链接](https://paddledet.bj.bcebos.com/models/yolov5_m_300e_coco.pdparams) | [配置文件](./yolov5_m_300e_coco.yml) |
| YOLOv5-l | 640 | 8 | 300e | 7.9 | 48.6 | 66.9 | 46.56 | 54.66 | [下载链接](https://paddledet.bj.bcebos.com/models/yolov5_l_300e_coco.pdparams) | [配置文件](./yolov5_l_300e_coco.yml) |
| YOLOv5-x | 640 | 8 | 300e | 13.7 | 50.6 | 68.7 | 86.75 | 102.96 | [下载链接](https://paddledet.bj.bcebos.com/models/yolov5_x_300e_coco.pdparams) | [配置文件](./yolov5_x_300e_coco.yml) |

| YOLOv5-n | 640 | 16 | 300e | 2.6 | 28.0 | 45.7 | 1.87 | 4.52 | [下载链接](https://paddledet.bj.bcebos.com/models/yolov5_n_300e_coco.pdparams) | [配置文件](./yolov5_n_300e_coco.yml) |
| YOLOv5-s | 640 | 8 | 300e | 3.2 | 37.0 | 55.9 | 7.24 | 16.54 | [下载链接](https://paddledet.bj.bcebos.com/models/yolov5_s_300e_coco.pdparams) | [配置文件](./yolov5_s_300e_coco.yml) |
| YOLOv5-m | 640 | 8 | 300e | 5.2 | 45.3 | 63.8 | 21.19 | 49.08 | [下载链接](https://paddledet.bj.bcebos.com/models/yolov5_m_300e_coco.pdparams) | [配置文件](./yolov5_m_300e_coco.yml) |
| YOLOv5-l | 640 | 8 | 300e | 7.9 | 48.6 | 66.9 | 46.56 | 109.32 | [下载链接](https://paddledet.bj.bcebos.com/models/yolov5_l_300e_coco.pdparams) | [配置文件](./yolov5_l_300e_coco.yml) |
| YOLOv5-x | 640 | 8 | 300e | 13.7 | **50.6** | **68.7** | 86.75 | 205.92 | [下载链接](https://paddledet.bj.bcebos.com/models/yolov5_x_300e_coco.pdparams) | [配置文件](./yolov5_x_300e_coco.yml) |

| 网络网络 | 输入尺寸 | 图片数/GPU | 学习率策略 | 模型推理耗时(ms) | mAP<sup>val<br>0.5:0.95 | mAP<sup>val<br>0.5 | Params(M) | FLOPs(G) | 下载链接 | 配置文件 |
| :------------- | :------- | :-------: | :------: | :------------: | :---------------------: | :----------------: |:---------: | :------: |:---------------: |:-----: |
| YOLOv5-ConvNeXt-s| 640 | 8 | 36e | - | **42.4** | **65.3** | 34.54 | 8.98 | [下载链接](https://paddledet.bj.bcebos.com/models/yolov5_convnext_s_36e_coco.pdparams) | [配置文件](./yolov5_convnext_s_36e_coco.yml) |
| YOLOv5-s ConvNeXt| 640 | 8 | 36e | - | 42.4 | 65.3 | 34.54 | 17.96 | [下载链接](https://paddledet.bj.bcebos.com/models/yolov5_convnext_s_36e_coco.pdparams) | [配置文件](./yolov5_convnext_s_36e_coco.yml) |


**注意:**
- YOLOv5模型训练使用COCO train2017作为训练集,Box AP为在COCO val2017上的`mAP(IoU=0.5:0.95)`结果;
- YOLOv5模型训练过程中默认使用8 GPUs进行混合精度训练,默认lr为0.01为8卡总batch_size的设置,如果**GPU卡数**或者每卡**batch size**发生了改变,你需要按照公式 **lr<sub>new</sub> = lr<sub>default</sub> * (batch_size<sub>new</sub> * GPU_number<sub>new</sub>) / (batch_size<sub>default</sub> * GPU_number<sub>default</sub>)** 调整学习率;
- YOLOv5模型推理速度测试采用单卡V100,batch size=1进行测试,使用**CUDA 10.2**, **CUDNN 7.6.5**,TensorRT推理速度测试使用**TensorRT 6.0.1.8**
- 参考[速度测试](#速度测试)以复现YOLOv5推理速度测试结果,速度为tensorRT-FP16测速后的最快速度,不包含数据预处理和模型输出后处理(NMS)的耗时。
- YOLOv5模型训练过程中默认使用8 GPUs进行混合精度训练,默认lr为0.01为8卡总batch_size的设置,如果**GPU卡数**或者每卡**batch size**发生改动,也不需要改动学习率,但为了保证高精度最好使用**总batch size大于64**的配置去训练;
- 模型推理耗时(ms)为TensorRT-FP16下测试的耗时,不包含数据预处理和模型输出后处理(NMS)的耗时。测试采用单卡V100,batch size=1,测试环境为**paddlepaddle-2.3.0**, **CUDA 11.2**, **CUDNN 8.2**, **GCC-8.2**, **TensorRT 8.0.3.4**,具体请参考[速度测试](#速度测试)
- 如果你设置了`--run_benchmark=True`, 你首先需要安装以下依赖`pip install pynvml psutil GPUtil`


Expand Down
22 changes: 19 additions & 3 deletions ppdet/modeling/backbones/csp_darknet.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,18 @@
]


def get_activation(name="silu"):
if name == "silu":
module = nn.Silu()
elif name == "relu":
module = nn.ReLU()
elif name in ["LeakyReLU", 'leakyrelu', 'lrelu']:
module = nn.LeakyReLU(0.1)
else:
raise AttributeError("Unsupported act type: {}".format(name))
return module


class BaseConv(nn.Layer):
def __init__(self,
in_channels,
Expand All @@ -46,18 +58,22 @@ def __init__(self,
bias_attr=bias)
self.bn = nn.BatchNorm2D(
out_channels,
epsilon=1e-3, # for amp(fp16)
momentum=0.97,
weight_attr=ParamAttr(regularizer=L2Decay(0.0)),
bias_attr=ParamAttr(regularizer=L2Decay(0.0)))

self.act = get_activation(act)
self._init_weights()

def _init_weights(self):
conv_init_(self.conv)

def forward(self, x):
# use 'x * F.sigmoid(x)' replace 'silu'
x = self.bn(self.conv(x))
y = x * F.sigmoid(x)
if self.training:
y = self.act(x)
else:
y = x * F.sigmoid(x) # silu
return y


Expand Down
3 changes: 0 additions & 3 deletions ppdet/modeling/necks/yolo_fpn.py
Original file line number Diff line number Diff line change
Expand Up @@ -1011,9 +1011,6 @@ def __init__(self,
Conv = DWConv if depthwise else BaseConv

self.data_format = data_format
act = get_act_fn(
act, trt=trt) if act is None or isinstance(act,
(str, dict)) else act
self.upsample = nn.Upsample(scale_factor=2, mode="nearest")

# top-down fpn
Expand Down

0 comments on commit dee0a21

Please sign in to comment.