欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 艺术 > RT-DETR融合[CVPR2020]EfficientDet中的BiFPN结构

RT-DETR融合[CVPR2020]EfficientDet中的BiFPN结构

2025/2/23 15:08:21 来源:https://blog.csdn.net/StopAndGoyyy/article/details/144833529  浏览:    关键词:RT-DETR融合[CVPR2020]EfficientDet中的BiFPN结构


RT-DETR使用教程: RT-DETR使用教程

RT-DETR改进汇总贴:RT-DETR更新汇总贴


《EfficientDet: Scalable and Efficient Object Detection》

一、 模块介绍

        论文链接:https://arxiv.org/abs/1911.09070

        代码链接:https://github.com/zylo117/Yet-Another-EfficientDet-Pytorch

论文速览:

        模型效率在计算机视觉中变得越来越重要。在本文中,我们系统地研究了对象检测的神经网络架构设计选择,并提出了几个关键优化以提高效率。首先,我们提出了一种加权双向特征金字塔网络 (BiFPN),它允许简单快速的多尺度特征融合;其次,我们提出了一种复合缩放方法,可以同时统一缩放所有主干、特征网络和盒/类预测网络的分辨率、深度和宽度。基于这些优化和更好的主干网络,我们开发了一个新的对象检测器系列,称为 EfficientDet,它在广泛的资源限制下始终实现比现有技术高得多的效率。特别是,在单模型和单尺度下,我们的 EfficientDet-D7 在 COCO 测试开发中实现了最先进的 55.1 AP,具有 77M 参数和 410B FLOPs1,与以前的探测器相比,体积缩小了 4 至 9 倍,使用的 FLOP 减少了 13 至 42 倍。

总结:文章提出一种BiFPN结构,可替代现有的PANet结构。


二、 加入到RT-DETR中

2.1 创建脚本文件

        首先在ultralytics->nn路径下创建blocks.py脚本,用于存放模块代码。

2.2 复制代码        

        复制代码粘到刚刚创建的blocks.py脚本中,如下图所示:

class BiFPN(nn.Module):def __init__(self, c1, c2):super(BiFPN, self).__init__()self.w = nn.Parameter(torch.ones(len(c1), dtype=torch.float32), requires_grad=True)self.conv = Conv(sum(c1), c2, k=1, s=1, p=0)self.epsilon = 0.0001def forward(self, x):w = self.wweight = w / (torch.sum(w, dim=0) + self.epsilon)return self.conv(torch.cat([weight[i] * x[i] for i in range(len(x))], dim=1))

2.3 更改task.py文件 

       打开ultralytics->nn->modules->task.py,在脚本空白处导入函数。

from ultralytics.nn.blocks import *

        之后找到模型解析函数parse_model(约在tasks.py脚本中940行左右位置,可能因代码版本不同变动),在该函数的最后一个else分支上面增加相关解析代码。

        elif m is BiFPN:c1 = [ch[i] for i in f]c2 = args[0]args = [c1, *args]

2.4 更改yaml文件 

yam文件解读:YOLO系列 “.yaml“文件解读_yolo yaml文件-CSDN博客

       打开更改ultralytics/cfg/models/rt-detr路径下的rtdetr-l.yaml文件,替换原有Concat模块,本文以自研DETR测试。


 2.5 修改train.py文件

       创建Train_RT脚本用于训练。

from ultralytics.models import RTDETR
import os
os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'if __name__ == '__main__':model = RTDETR(model='ultralytics/cfg/models/rt-detr/rtdetr-l.yaml')# model.load('yolov8n.pt')model.train(data='./data.yaml', epochs=2, batch=1, device='0', imgsz=640, workers=2, cache=False,amp=True, mosaic=False, project='runs/train', name='exp')

         在train.py脚本中填入修改好的yaml路径,运行即可训。

三、相关改进思路(2024/11/23日群文件)

        该模块可如图加入到HGBlock、RepNCSPELAN4、RepC3等模块中,代码见群文件,结构如图。自研模块与该模块融合代码及yaml文件见群文件。

 ⭐另外,融合上百种改进模块的YOLO项目仅119(含百种改进的v9),RTDETR119,含高性能自研模型,更易发论文,代码每周更新,欢迎点击下方小卡片加我了解。

⭐⭐平均每个文章对应4-6个二创及自研融合模块⭐⭐


版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词