目标检测 - Neck的设计 PAN(Path Aggregation Network)

flyfish

目标检测器的构成

1. Input:Image,Patches,ImagePyramid

2. Backbones:VGG16,ResNet(ResNet-18、ResNet-34、ResNet-50、ResNet-101、ResNet-152),SpineNet,EfficientNet-B0/B7,CSPResNeXt50,CSPDarknet53,MobileNet(v1、v2、v3),ShuffleNet(v1、v2) ,GhostNet

3. Neck
  Additional blocks:SPP,ASPP,RFB,SAM
  Path-aggregation blocks:FPN,PAN,NAS-FPN,Fully-connectedFPN,BiFPN,ASFF,SFAM

4. Heads
  Dense Prediction(one-stage)
    RPN,SSD,YOLO,RetinaNet(anchorbased)
    CornerNet,CenterNet,MatrixNet,FCOS(FCOSv1、FCOSv2),ATSS,PAA(anchorfree)
  SparsePrediction(two-stage)
    FasterR-CNN,R-FCN,MaskR-CNN(anchorbased)
    RepPoints(anchorfree)

Neck部分的设计是多种多样的


(a) FPN
(b) PANet
(c) NAS-FPN
(d) BiFPN

其中PANet就是本文说的
这里说明Neck-》Path-aggregation blocks-》PAN(Path Aggregation Network)
论文作者实现的代码
https://github.com/ShuLiu1993/PANet

看图
(a) FPN backbone
(b) Bottom-up path augmentation
(c) Adaptive feature pooling
(d) Box branch
(e) Fully-connected fusion
p5 -> p2是从上向下(Top-down),N2 -> N5是(Bottom-up)
原作者把backbone与FPN合并称为FPN backbone。而在实际写代码中,从上向下和从下向上这两条路径合并称为FAN
如下图

如何是轻量级模型则会只留下几层例如

PAN简单理解就是FPN多了一条Bottom-up path augmentation
FPN是从上向下,PAN包含了从上向下和从下向上的路径。

原版

PAN的原作者作者也是按照上图写代码将新增的模块直接加入到FPN代码中,区分是否使用GroupNorm
PANet/lib/modeling/FPN.py

# add for panet buttom-up path
if self.panet_buttomup:self.panet_buttomup_conv1_modules = nn.ModuleList()self.panet_buttomup_conv2_modules = nn.ModuleList()for i in range(self.num_backbone_stages - 1):if cfg.FPN.USE_GN:self.panet_buttomup_conv1_modules.append(nn.Sequential(nn.Conv2d(fpn_dim, fpn_dim, 3, 2, 1, bias=True),nn.GroupNorm(net_utils.get_group_gn(fpn_dim), fpn_dim,eps=cfg.GROUP_NORM.EPSILON),nn.ReLU(inplace=True)))self.panet_buttomup_conv2_modules.append(nn.Sequential(nn.Conv2d(fpn_dim, fpn_dim, 3, 1, 1, bias=True),nn.GroupNorm(net_utils.get_group_gn(fpn_dim), fpn_dim,eps=cfg.GROUP_NORM.EPSILON),nn.ReLU(inplace=True)))else:self.panet_buttomup_conv1_modules.append(nn.Conv2d(fpn_dim, fpn_dim, 3, 2, 1))self.panet_buttomup_conv2_modules.append(nn.Conv2d(fpn_dim, fpn_dim, 3, 1, 1))

torch.cat例子

>>> x = torch.randn(2, 3)
>>> x
tensor([[ 0.6580, -1.0969, -0.4614],[-0.1034, -0.5790,  0.1497]])
>>> torch.cat((x, x, x), 0)
tensor([[ 0.6580, -1.0969, -0.4614],[-0.1034, -0.5790,  0.1497],[ 0.6580, -1.0969, -0.4614],[-0.1034, -0.5790,  0.1497],[ 0.6580, -1.0969, -0.4614],[-0.1034, -0.5790,  0.1497]])
>>> torch.cat((x, x, x), 1)
tensor([[ 0.6580, -1.0969, -0.4614,  0.6580, -1.0969, -0.4614,  0.6580,-1.0969, -0.4614],[-0.1034, -0.5790,  0.1497, -0.1034, -0.5790,  0.1497, -0.1034,-0.5790,  0.1497]])

mmdetection中yolo_neck版本

mmdetection中的yolo_neck是采样之后带cat运算
路径是mmdetection/mmdet/models/necks

def forward(self, feats):assert len(feats) == self.num_scales# processed from bottom (high-lvl) to top (low-lvl)outs = []out = self.detect1(feats[-1])outs.append(out)for i, x in enumerate(reversed(feats[:-1])):conv = getattr(self, f'conv{i+1}')tmp = conv(out)# Cat with low-lvl featstmp = F.interpolate(tmp, scale_factor=2)tmp = torch.cat((tmp, x), 1)detect = getattr(self, f'detect{i+2}')out = detect(tmp)outs.append(out)return tuple(outs)

nanodet版本

nanodet的作者的PAN没有卷积,使用interpolate进行上采样和下采样。按照top-down和bottom-up做的加法运算

def forward(self, inputs):"""Forward function."""assert len(inputs) == len(self.in_channels)# build lateralslaterals = [lateral_conv(inputs[i + self.start_level])for i, lateral_conv in enumerate(self.lateral_convs)]# build top-down pathused_backbone_levels = len(laterals)for i in range(used_backbone_levels - 1, 0, -1):prev_shape = laterals[i - 1].shape[2:]laterals[i - 1] += F.interpolate(laterals[i], size=prev_shape, mode='bilinear')# build outputs# part 1: from original levelsinter_outs = [laterals[i] for i in range(used_backbone_levels)]# part 2: add bottom-up pathfor i in range(0, used_backbone_levels - 1):prev_shape = inter_outs[i + 1].shape[2:]inter_outs[i + 1] += F.interpolate(inter_outs[i], size=prev_shape, mode='bilinear')outs = []outs.append(inter_outs[0])outs.extend([inter_outs[i] for i in range(1, used_backbone_levels)])return tuple(outs)

目标检测 - Neck的设计 PAN(Path Aggregation Network)相关推荐

  1. [Neck] 空间金字塔池化【池化策略】(Space Pyramid Pool, SPP)模块和路径聚合网络【增强】(Path Aggregation Network, PANet)的结构

    文章目录 背景 yolo v4 中的空间金字塔池化(Space Pyramid Pool, SPP)模块和路径聚合网络(Path Aggregation Network, PANet)的结构 SPP ...

  2. Path Aggregation Network for Instance Segmentation

    Path Aggregation Network for Instance Segmentation 信息在神经网络中的传播方式是非常重要的.在本文中,我们提出了PANet(Path Aggregat ...

  3. 实例分割--(PANet)Path Aggregation Network for Instance Segmentation

    PANet Path Aggregation Network for Instance Segmentation 收录:CVPR2018(IEEE Conference on Computer Vis ...

  4. AAAI 2020 | NAS+目标检测:AI设计的目标检测模型长啥样?

    ©PaperWeekly 原创 · 作者|刘畅 学校|上海交通大学博士生 研究方向|计算机视觉 太长不看版 论文标题:SM-NAS: Structural-to-Modular Neural Arch ...

  5. YOLOv6 Pro | YOLOv6网络魔改 (1) ——RepGFPN融合高效聚合网络(ELAN)和重参数化的目标检测Neck(来自DAMO-YOLO)

    在阿里达摩院 ICLR2022 发表的论文<GiraffeDet: A Heavy-Neck Paradigm for Object Detection>中,他们提出了GiraffeDet ...

  6. 《南溪的目标检测学习笔记》——目标检测模型的设计笔记

    1 南溪学习的目标检测模型--DETR 南溪最赞赏的目标检测模型是DETR, 论文名称:End-to-End Object Detection with Transformers 1.2 decode ...

  7. 论文解读 | 锚点 DETR:基于 transformer 目标检测的查询设计

    此篇论文已被 AAAI 2022 收录,论文链接请见"阅读原文". ● 简介 ● 近年来,以 DETR[1]为代表的基于 transformer 的端到端目标检测算法开始广受大家的 ...

  8. 目标检测——day66 Scaled-YOLOv4: Scaling Cross Stage Partial Network

    Scaled-Yolov4:可伸缩跨级部分网络 Scaled-YOLOv4 1. Introduction 2. Related work 2.1. Real-time object detectio ...

  9. 《PANet:Path Aggregation Network for Instance Segmentation》论文笔记

    代码地址:PANet 1. 概述 导读:这篇论文是港中文大学与腾讯优图实验室联合发表的论文,其中提出神经网络中信息的传输是很重要的,由此提出了PANet的网络模型,增加了Bottom-up的金字塔特征 ...

最新文章

  1. 交叉科学部如何建?基金委:要做好这4点
  2. Linux 群组管理
  3. linux线程学习初步02
  4. Python异常捕获及自定义异常类
  5. xpath的基本使用
  6. Windows Server 2008 R2 Tomcat 开机自启动
  7. Step by Step-构建自己的ORM系列-索引
  8. hsi i均衡化 java_基于HSI-mod的直方图均衡化
  9. mysql数据库的索引及优化小技巧!
  10. cfe刷机教程 斐讯k3_2019斐讯K3全版本免拆机免降级刷机教程
  11. 基于OMAPL138的Linux字符驱动_GPIO驱动AD9833(一)之miscdevice和ioctl
  12. MWORKS应用案例 | 基于Modelica的射流管式电液伺服阀的建模仿真
  13. 商用型虚拟试衣技术亮相CES Asia ,好买衣携手CA催生服装新零售变革
  14. 【网络通信 -- 直播】网络通信协议简介 -- RTP 协议的 H264 封包
  15. css中aspect,CSS属性之aspect-ratio
  16. 一张思维导图囊括所有 Python 基础
  17. 微带滤波器摘要_微带交指滤波器的设计
  18. 中英文数字混合的复合格式处理
  19. BI神器Power Query(8)-- PQ从文本文件导入数据(2/2)
  20. 运维工作简历(运维人员简历模板)

热门文章

  1. RN - iOS端后台挂起后30s重启问题处理过程与心得
  2. ██最牛的抠图软件诞生了██_摄影作品
  3. 中国海洋大学食品加工与安全考研成功上岸经验分享
  4. 操作系统真象还原第2章:编写MBR主引导记录
  5. 智慧物业小程序_物业小程序物业微信小程序目前功能最全的物业小程序
  6. 新松机器人袁_山东新松工业软件研究院创新发展战略务虚会“实力”召开!
  7. “即刻搜索”使用率几乎为零
  8. 学习英文-学以致用【场景:美式音标】
  9. 解决SupportAssist提示意外错误的问题
  10. 陈寿福服从法院判决已支付赔偿并道歉