目标检测 - Neck的设计 PAN(Path Aggregation Network)
目标检测 - 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)相关推荐
- [Neck] 空间金字塔池化【池化策略】(Space Pyramid Pool, SPP)模块和路径聚合网络【增强】(Path Aggregation Network, PANet)的结构
文章目录 背景 yolo v4 中的空间金字塔池化(Space Pyramid Pool, SPP)模块和路径聚合网络(Path Aggregation Network, PANet)的结构 SPP ...
- Path Aggregation Network for Instance Segmentation
Path Aggregation Network for Instance Segmentation 信息在神经网络中的传播方式是非常重要的.在本文中,我们提出了PANet(Path Aggregat ...
- 实例分割--(PANet)Path Aggregation Network for Instance Segmentation
PANet Path Aggregation Network for Instance Segmentation 收录:CVPR2018(IEEE Conference on Computer Vis ...
- AAAI 2020 | NAS+目标检测:AI设计的目标检测模型长啥样?
©PaperWeekly 原创 · 作者|刘畅 学校|上海交通大学博士生 研究方向|计算机视觉 太长不看版 论文标题:SM-NAS: Structural-to-Modular Neural Arch ...
- YOLOv6 Pro | YOLOv6网络魔改 (1) ——RepGFPN融合高效聚合网络(ELAN)和重参数化的目标检测Neck(来自DAMO-YOLO)
在阿里达摩院 ICLR2022 发表的论文<GiraffeDet: A Heavy-Neck Paradigm for Object Detection>中,他们提出了GiraffeDet ...
- 《南溪的目标检测学习笔记》——目标检测模型的设计笔记
1 南溪学习的目标检测模型--DETR 南溪最赞赏的目标检测模型是DETR, 论文名称:End-to-End Object Detection with Transformers 1.2 decode ...
- 论文解读 | 锚点 DETR:基于 transformer 目标检测的查询设计
此篇论文已被 AAAI 2022 收录,论文链接请见"阅读原文". ● 简介 ● 近年来,以 DETR[1]为代表的基于 transformer 的端到端目标检测算法开始广受大家的 ...
- 目标检测——day66 Scaled-YOLOv4: Scaling Cross Stage Partial Network
Scaled-Yolov4:可伸缩跨级部分网络 Scaled-YOLOv4 1. Introduction 2. Related work 2.1. Real-time object detectio ...
- 《PANet:Path Aggregation Network for Instance Segmentation》论文笔记
代码地址:PANet 1. 概述 导读:这篇论文是港中文大学与腾讯优图实验室联合发表的论文,其中提出神经网络中信息的传输是很重要的,由此提出了PANet的网络模型,增加了Bottom-up的金字塔特征 ...
最新文章
- 交叉科学部如何建?基金委:要做好这4点
- Linux 群组管理
- linux线程学习初步02
- Python异常捕获及自定义异常类
- xpath的基本使用
- Windows Server 2008 R2 Tomcat 开机自启动
- Step by Step-构建自己的ORM系列-索引
- hsi i均衡化 java_基于HSI-mod的直方图均衡化
- mysql数据库的索引及优化小技巧!
- cfe刷机教程 斐讯k3_2019斐讯K3全版本免拆机免降级刷机教程
- 基于OMAPL138的Linux字符驱动_GPIO驱动AD9833(一)之miscdevice和ioctl
- MWORKS应用案例 | 基于Modelica的射流管式电液伺服阀的建模仿真
- 商用型虚拟试衣技术亮相CES Asia ,好买衣携手CA催生服装新零售变革
- 【网络通信 -- 直播】网络通信协议简介 -- RTP 协议的 H264 封包
- css中aspect,CSS属性之aspect-ratio
- 一张思维导图囊括所有 Python 基础
- 微带滤波器摘要_微带交指滤波器的设计
- 中英文数字混合的复合格式处理
- BI神器Power Query(8)-- PQ从文本文件导入数据(2/2)
- 运维工作简历(运维人员简历模板)
热门文章
- RN - iOS端后台挂起后30s重启问题处理过程与心得
- ██最牛的抠图软件诞生了██_摄影作品
- 中国海洋大学食品加工与安全考研成功上岸经验分享
- 操作系统真象还原第2章:编写MBR主引导记录
- 智慧物业小程序_物业小程序物业微信小程序目前功能最全的物业小程序
- 新松机器人袁_山东新松工业软件研究院创新发展战略务虚会“实力”召开!
- “即刻搜索”使用率几乎为零
- 学习英文-学以致用【场景:美式音标】
- 解决SupportAssist提示意外错误的问题
- 陈寿福服从法院判决已支付赔偿并道歉