💖💖>>>加勒比海带,QQ2479200884<<<💖💖
🍀🍀>>>【YOLO魔法搭配&论文投稿咨询】<<<🍀🍀
✨✨>>>学习交流 | 温澜潮生 | 合作共赢 | 共同进步<<<✨✨
📚📚>>>人工智能 | 计算机视觉 | 深度学习Tricks | 第一时间送达<<<📚📚
论文题目:《EfficientDet: Scalable and Efficient Object Detection》
论文地址: https://arxiv.org/abs/1911.09070.
EfficientDet是谷歌大脑 Mingxing Tan、Ruoming Pang 和 Quoc V. Le 提出新架构 EfficientDet,结合 EfficientNet(同样来自该团队)和新提出的 BiFPN,实现新的 SOTA 结果。
贡献:
- 提出一种全新的特征融合方法:重复加权双向特征金字塔网络 BiFPN ;
- 提出一种复合的缩放方法(EfficientNet方法):统一缩放 分辨率、深度、宽度、特征融合网络、box/class网络。
BiFPN 全称 Bidirectional Feature Pyramid Network 加权双向(自顶向下 + 自低向上)特征金字塔网络。
本文将YOLOv5中的PANet层修改为EfficientDet-BiFPN,实现自上而下与自下而上的深浅层特征双向融合,增强不同网络层之间特征信息的传递,明显提升YOLOv5算法检测精度,并且具有更加不错的检测性能。
那么,YOLOv5结合BiFPN需要修改以下几个地方:
1.修改common.py
class Concat_BiFPN(nn.Module):
def __init__(self, c1):
super(Concat, self).__init__()
# self.relu = nn.ReLU()
self.w = nn.Parameter(torch.ones(2, dtype=torch.float32), requires_grad=True)
self.epsilon = 0.0001
self.swish = Swish()
def forward(self, x):
weight = self.w / (torch.sum(self.w, dim=0) + self.epsilon)
# Connections for P6_0 and P7_0 to P6_1 respectively
x = self.swish(weight[0] * x[0] + weight[1] * x[1])
return x
2.修改yolo.py
channel现在不是直接concat了,而是进行pairwise add操作,所以out-channel不再是sum。
# elif m is Concat:
# c2 = sum([ch[x] for x in f])
elif m is Concat:
c2 = max([ch[x] for x in f])
3.修改配置文件
根据自身结构在yolov5代码的hub/yolov5s.yaml 中加入Concat_BiFPN,这样就大功告成啦~