URL
- paper: https://arxiv.org/pdf/2212.10156.pdf
- slides: https://opendrivelab.com/e2ead/UniAD_plenary_talk_slides.pdf
- code: https://github.com/OpenDriveLab/UniAD
TL;DR
- 本文提出一种以自动驾驶规划为目的的神经网络架构,该架构对每个感知子任务显式监督,合理的将子任务连接起来,增加了子任务之间的协调性,并增加了模型的可解释性
language modeling)任务进行自监督预训练reinforement learning with human feedback(RLHF) 进行对齐(align),这个过程不会在测试数据集上提高模型表现,但可以更好的对齐人类的意图和三观scaling),可以以较小的代价和较快的时间找到最合适的模型架构和超参数设置steerability(操纵性),可以在模型的 prompt 中加入一些 System message,让模型回复风格拥有某种特质(比如老师、政客等)GPT-4 使用了很多机制提高了模型的安全性API …96 层 Transformer 共 1750 亿参数的超大模型(GPT2 只有约 15 亿参数),在下游任务上无需 fine-tuning 即可得到很好的效果。GPT2 的放大版(参数量放大了一百多倍)Zero Shot、One Shot、Few Shot 三种方式推理模型,下图以英语翻译法语的例子介绍三者的区别:


使用了
common crawl数据集,由于common crawl数据集很脏,所以训练是数据采样率并不高



从普遍表现看,GPT3 few shot 效果 > one shot > zero shot,不一定比 SOTA 点高(SOTA 普遍使用了 fine tuning,直接比较不公平)
GPT3 few shot 效果可媲美 fine tuning SOTA,可以说明 GPT3 还是非常强大的chatGPT 的交互式 Zero-shot 分割算法,用户给出一个 prompt(支持 point / box / mask / text),模型会根据 Prompt 语义完成分割,无需在特定分割任务数据上 fine-tuning(类似于 GPT2 和之后的系列模型)Data Centric,即以数据为中心而不是以模型为中心,这一点和 GPT 系列也不谋而合
RLHF(Reinforcement Learning from human feedback) 的方法,使用模型辅助标注员高效标注大量数据(11 亿个 mask 区域),重复迭代提高效果image_encoder:提取图片特征,使用的是 ViT 模型,在交互过程中只需要推理一次prompt_encoder: 提取 prompt 特征,将人的输入(例如点或框)编码到特征空间mask_decoder: 输入为图片特征和 prompt 特征,融合后输出分割 mask
理论上支持 point / box / mask / text,但 demo 和 code 都只包含了 point / box / mask

image encoder 是 VIT
prompt encoder 对于 box / point prompt 只是简单的位置编码;对于 mask 是几层简单的卷积
lightweight mask decoder 是轻量级 transformer

模型为中心和数据为中心的对比

图中的框为用户输入的
prompt,模型会根据prompt输出分割结果
Data centric 感觉一定是未来,但形式一定不会以 RLHF 形式存在,而更多的以自监督形式存在prompt 未来会取代 fine-tuning 这个词Bert 全方位打败 GPT 之后,OpenAI 推出了参数量更大的 GPT2GPT2 与之前所有的 NLP 预训练模型使用的 自监督预训练 + 任务相关 fine-tuning 范式不同,GPT2 不再需要任何数据相关 fine-tuning,而是使用 prompt(提示词)prompt(提示词) 是一段在模型推理阶段用于描述任务的文本,通常加在问题之前,起到提示模型的作用GPT2 很大程度上只是 GPT 的放大版,所引入的创新并不多
Byte Pair Encoding(BPE) 分词算法,本质是一种贪心算法auto-regression)模型推理容易出现死循环,所以本文提出一种 top-k 输出按 softmax 概率采样的 trick,增加模型的随机性GPT2 最重要的作用是提出了使用 Prompt 替代 fine-tuning 的范式,为之后的 AIGC 大面积推广扫平了障碍FCOS 论文提出一种架构简单的 Anchor Free 的单目 3D 检测算法 FCOS3D,在 NeurIPS 2020 的 nuScenes 3D 检测比赛纯视觉赛道上取得了第一名。本文提出的 FCOS3D 要解决的核心问题是一个 图片到 7-DoF 属性(x, y, z, w, l, h, yaw+dir)的预测。
DoF 是指 degree of freedom(自由度)。(x, y, z, w, l, h, yaw+dir) 分别表示物体在相机坐标系下的 3 维坐标和长宽高(单位都是米),和偏航角(俯视图角度,单位是弧度)和方向 2 分类共同构成朝向。对于 nuScenes 3D 检测比赛,还需要解决的非核心问题包括:
3D 框物体的类别(10类物体)3D 框物体的属性(9种属性)3D 框物体的 x, y 轴速度(不是 “病态” 问题了,已经属于癌症问题了…)
backbone 和 FPN 比较常规
decode head 和 FCOS 一样,使用了不同 level feature 的参数共享(反正是全卷积,不存在 shape 问题)
decode head 中包括:
分类分支:
output_shape = (N, 10, H, W),使用 FocalLossoutput_shape = (N, 9, H, W),使用 CrossEntropyLoss回归分支:
output_shape = (N, 9, H, W), (dx, dy, log(z), log(w), log(l), log(h), yaw, vx, vy),使用 SmoothL1Lossoutput_shape = (N, 1, H, W),使用 BCEWithLogitsLossoutput_shape = (N, 2, H, W),使用 CrossEntropyLoss(x, y, z) target 设置2.5D 的预测(xy 2D, z 3D),实际预测的 x, y 是像素坐标系下相对于 feature map 每一个点的偏移量(由相机坐标系和相机内参可计算得到像素坐标系),z, w, l, h 的预测是相机坐标系下的米为单位的真值取 log。FCOS 不同,FCOS3D centerness: c=e−α((Δx)2+(Δy)2) ,α=2.5FCOS 是将 feature map 上的每个位置到 GT 中心点的距离小于 1.5 * stride 的点作为正样本。FCOS3D 是 3D 检测,没办法直接使用 FCOS 提出的方法;解决方法和 x, y 坐标回归方法类似,如果 2.5D 坐标下的 x, y 和 feature map 位置距离小于 1.5 * stride,则算作正例。FCOS 思想一样FCOS 思想一样,只是更丰富 scale.shape == (num_of_level, 3),分别表示 scale_offset(for xy) / scale_depth(for z) / scale_size(for wlh)FCOS,相当于 FCOS 的 2.5D 版trick: log(z), centerness target 定义,encode yaw 等,很 workFaster RCNN 系列、SSD、YOLOv2~v5(注意 YOLOv1 不包括在内)都是基于 Anchor 进行预测的。
backbone + FPN 输出了 5 种尺度的 feature map 用于预测,由于是全卷积网络,所以 5 个输出头共享一份参数,对于每个尺度的 feature map 上的每一个位置 预测包括类别(N,Cls,H,W)、框的位置(N,4,H,W)和一个中心置信度(N,1,H,W)。
GT bbox 内的点越靠近中心越大,越远离中心越小,取值范围 [0, 1],可视化 centerness 热力图如上图所示。centerness * score。L({px,y},{tx,y})=Npos1∑x,yLcls(px,y,cx,y⋆)+Nposλ∑x,yIcx,y⋆>0Lreg(tx,y,tx,y⋆)+Nposγ∑x,yIcx,y⋆>0Lctr(sx,y,sx,y⋆)
focal loss 以平衡正负样本GIOU loss,且只对正样本计算focal loss,且只对正样本计算anchor base 方法不同,fcos 对正样本的选择较为苛刻,仅当 feature map 上的某个点落入 gt bbox 中心区域(sub-box)时才被当做正样本 。sub-box 的定义: (cx−rs,cy−rs,cx+rs,cy+rs) ,其中 (cx,cy) 表示 gt bbox 中心点在原始图上的坐标;s 表示 stride 即当前 feature map 相较于原图下采样倍数;r 表示 radius 半径超参数,在 coco 数据集上取 1.5。cls 类别都被置为 0(background),负样本只计算 cls loss,不计算 reg loss 和 centerness loss(也没法计算,有框才能计算)。anchor free 的检测方法绕不开一个天然的问题:如果一个 feature map 的特征点(x,y)同时是两个 GT bbox 的正例,应该如何预测,毕竟 fcos 每个特征点只预测一个框。FPN bbox 尺度分配是一个常用的解决 Ambiguity 问题的方法,越大的 feature map 负责检测越小的框。(将 Ambiguity 出现的概率从 23.16% 降低到 7.24%)center sampling:即上面提到的 sub-box 采样方法,radius = 1.5。(将 Ambiguity 出现的概率从 7.24% 降低到 2.66%)FCOS 是一种很简单高效的 2D anchor free 物体检测算法,迁移性强,启发了后面的 FCOS3D 单目 3D 检测。
18 行 200 列。CULane 数据集,模型输出 shape == (N, 4, 18, 201),分别表示 18 行 200 列每个格子是否包含车道线(所以是 201 分类),以及包含的车道线的实例编号。基于车道线连续属性:每条车道线的第 i 行和第 i + 1 行应该具有相近的位置。
基于车道线相对笔直属性:每条车道线点第 i 行和第 i + 1 行的连线应该和第 i + 1 行与第 i + 2 行的连线共线。

1 | import numpy as np |
func_timeout 在 linux 上运行疑似还有 bug:多线程打开文件但没有关闭,超出 OS limit,在玩十分钟可能才会出现…decode head 结构和 部分分割专用 backbone,用于理解语义分割算法的演进过程decode head 模型来源: mmsegmentaion decode headdecode head 是指满足如下要求的网络结构:
backbone / neck 提取的 feature map 或 feature map listsegmentation 结果backbone 输出的 feature map(例如 PSPNet 输出)backbone 不同阶段 / neck (例如 FPN) 输出的不同尺度的 feature map listfeature map,可以 resize 到输出大小再送入 decode head,也可以直接送入 decode head,根据具体算法选择feature map list,一般有两种做法,根据具体算法选择:
resize concat: 将所有 feature map 全部 resize 到输出大小后再 concat(例如 FCN-8s)multiple select: 根据 index 在 feature map list 中索引并输出对应的 feature map sub listfeature map / feature map list 转化成与输出 宽高一致 的 feature map,也是本文具体展开讲的内容1 或 2,N 分类的语义分割输出通道数为 N)CNN 结构上创新FCN: 2014年,出自 UC Berkeley,分割算法起点PSP: 2016年,出自商汤,FCN + 多尺度ASPP: 2017年,出自 Google,PSP 的优雅实现版(DeepLab V2、DeepLab V3)FPN: 2018年,出自 FAIR,UNet 多尺度的升级版UperNet: 2018年,出自旷视,PSP + FPN 更暴力的多尺度DepthwiseSeparableASPP: 2018年,出自 Google,DeepLab V3 结构的小改动(DeepLab V3+)DepthwiseSeparableFCN: 2019年,出自东芝 + 剑桥,FCN 的轻量化改造(Fast-SCNN)PointRend: 2019年,出自 FAIR,在其他 decode head 基础上级联了一个 subnetwork 实现了图像分割边缘的细化Self-Attention (Non-local / Channel Attention)Non-Local: 2017年,出自 FAIR,Self Attention 经典PSANet: 2018年,出自商汤,Non-local 的二维 CCNet: 2018年,出自地平线,Non-local 的低算力版,使用两个低算力的 Attention 替代 Non-local AttentionDANet: 2018年,出自京东,两路 Non-local,一路 attention to postion 一路 attention to channelEncNet: 2018年,出自商汤 + Amazon,优化了 SENet 中的暴力编码方式,在分割任务中额外加入了分类辅助监督EMANet: 2019年,出自北大,attention to channel 和 attention to postion 可分离的 attentionANN: 2019年,出自华中科技大学,简化 Non-local 同时引入 PPM,极大的降低了 matmul 和 softmax 两类算子的耗时GCNet: 2019年,出自 MSRA,简化版 Non-local + SENet 的缝合怪OCRNet: 2019年,出自 MSRA,级联结构,在其他 decode head 的输出结果上做了 Self-Attention,并在论文中从 Transformer 角度解释了 Self-AttentionAPCNet: 2019年,出自商汤,复杂网络结构 + 简化矩阵乘实现的 AttentionDMNet: 2019年,出自商汤,根据输入特征的全局信息动态生成卷积核,本质也是 AttentionLRASPP: 2019年,出自 Google,全局 scale 实现的 Attention(MobileNet V3)ISANet: 2019年,出自 MSAR,使用 feature map shuffle 实现长范围和短范围的稀疏注意力机制DNLNet: 2020年,出自 MSAR,改进 Non-local,加入了归一化和一元分支BiSeNet: 2019年,出自旷视,在 backbone 之外加入了一个 context branch,将特征提取和 attention 解耦,降低了 attention 恐怖的计算量BiSeNet V2: 2020年,出自腾讯,BiSeNet 的改进SDTC: 2021年,出自美团,BiSeNet 系列的改进版,但由于融合了两路分支到一处,不再 Bilateral,所以用特征提取 SDTC block 命名…TransformerSETR: 2020年,出自腾讯,Vit 做 backbone + FCN / FPN decode headDPT: 2021年,出自 Intel,SETR 的升级版,backbone 不变,decode head 更 FPN 了一些Segmenter: 2021年,出自法国 INRIA 研究所,用了纯 Transformer 架构而不是像 SETR / DPT 一样用 Transformer Encoder + CNN Decoder 架构SegFormer: 2021年,出自 NVIDIA,SETR 的高效版KNet: 2021年,出自商汤,decode head 融合了 Channel Attention + Multi-head Attention + RNN,统一了语义分割、实例分割、全景分割框架FCN 全称是 Fully Convolutional Networksresize concat 方式,将多个不同尺度(backbone 不同阶段)的 feature map resize concat 到输出尺寸,如下图所示:

实验证明越多尺度融合分割效果越好
Conv + 可选择的 concat input (shortcut)结构PSP 全称是 Pyramid Scene Parsing(金字塔场景理解)PSPNet 的原始特征是 backbone 最后一层的输出,所以无需原始特征处理PSPNet 将输入特征通过 Pyramid Pooling Module 结构做了 feature map 不同尺度 down sample + up sample,如下图所示:
Atrous Spatial Pyramid Pooling(空洞空间金字塔池化)DeepLab V3)DeepLabV3 输入为单个单尺度 feature map,所以此步骤可省略
与
PSPNet很像,PSPNet是使用普通Conv去卷积多种尺度的Pooled feature map;ASPP是不改变feature map而是使用 不同空洞系数的Conv
FPN 全称是 Feature Pyramid Network,出自 kaiming 大神,可以用在所有和 feature map scale 大小相关的领域
UperNet 的全称是 Unified Perceptual Parsing Network(统一感知解析网络),本身是多任务模型:
objects 语义分割parts 语义分割materials 语义分割textures 语义分割objects 语义分割部分decode head 中内嵌使用 FPN(而不是以网络 neck 方式使用),所以 feature map list 格式的原始特征无需处理,直接透传到特征解码部分
本文只讨论图中蓝色框部分
只需要看蓝色框为输出的通路,算法:
- 在最小尺度
feature map上使用PPM(全称Pyramid Pooling Module,来自于PSPNet)- 使用
FPN融合多尺度特征
DeepLab V3 引入的 ASPP 基础上增加了两点改进:
DepthwiseSeparable ASPP 替代 ASPP,减小计算量vanilla FPN 结构,避免了 DeepLab V3 直接上采样 8 倍预测的问题DeepLab V3+)
相较于
DeepLab V3在 8 倍下采样的feature map上使用 ASPP,DeepLab V3+在更小尺度(16 倍下采样)feature map上使用DepthwiseSeparable ASPP
同时为了解决小尺度预测的问题,加入了一个vanilla FPN做不同尺度特征融合
FCN 的轻量化实现,使用 DWConv(Depthwise Conv) 和 DSConv(Depthwise Separable Conv) 替换 FCN 中的普通 ConvFast-SCNN)
图中的
DWConv是指Depthwise Conv(ic == oc == group)
图中的DSConv是指Depthwise Separable Conv,DSConv不是一个Conv而是Depthwise Conv和Pointwise Conv(kernel_size == 1 and group == 1) 以及激活函数 /BN一起组成的一个block
PointRend 全称是 point-base rendering(基于点的渲染算法),是一个级联分割算法,实例分割和语义分割都可使用,依赖于一个其他完整的 decode head (例如 FCN)的输出,该算法提出了一个 subnetwork,该结构只关心目标边界点的分割,可预测更准确更 sharp 的目标边界
- 渲染:渲染(
render)是指在电脑中使用三维制作软件将制作的模型经过纹理、绑定、动画、灯光处理后得到模型和动画的图像。三维渲染是使用计算机从数字三维场景中生成二维影像的过程- 细分表面算法:细分表面算法(
subdivision surface algorithm)在3D计算机图形中使用,通过递归完善基本级多边形网格来创建弯曲表面
Subdivision render 思想用于分割,使用 coarse-to-fine 思想,逐级细分,提高分割效果

Inference 过程(以 FCN 作为 prev_decode_head 为例):
backbone 的输出 x,shape = [batch, channels, height, width]FCN 的输出 prev_output,shape = [batch, num_cls, height, width]refine 后的输出,shape = [batch, num_cls, 2 * subdivision_steps * height, 2 * subdivision_steps * width]prev_output copy 一份作为 refined_seg_logitsrefined_seg_logits 插值放大两倍,shape = [batch, num_cls, 2 * height, 2 * width]refined_seg_logits 上挑选最 hard 的 N 个点(hard 的定义是:如果一个像素的 top1_cls_logitis 和 top2_cls_logits 越接近,则该点越 hard),输出相对坐标,shape = [batch, N, 2]N 个点的坐标在 x 中找到对应的点(需要插值找出),作为 fine_grained_point_feats,shape = [batch, channels, N]N 个点的坐标在 prev_output 中找到对应的点(需要插值找出),作为 coarse_point_feats,shape = [batch, num_cls, N]fine_grained_point_feats 和 coarse_point_feats concat 后经过 Subnetwork(几层 MLP)映射到类别空间 point_logits,shape = [batch, num_cls, N]3 中的 point index,将 6 输出的 point_logits 替换到 1 中的 refined_seg_logits 对应位置2 ~ 7 subdivision_steps 次,输出最终的 refined_seg_logits,shape = [batch, num_cls, 2 * subdivision_steps * height, 2 * subdivision_steps * width]Train 过程:
backbone 的输出 x,shape = [batch, channels, height, width]FCN 的输出 prev_output,shape = [batch, num_cls, height, width]gt_semantic_seg,shape = [batch, num_cls, height, width]lossTrain 过程与 Inference 过程基本相同,区别在于:
topk 运算对梯度反向传播不友好,所以在 Train 的过程中使用随机采样点的策略,没有挖掘 hard caseTrain 不会引入多尺度,只会在同一尺度学习 subnetwork 对 point 的分类
用于
2维图像,所以T == 1,通过增加(HW, HW)的特征相关性矩阵给特征带来全局相关性(Attention)
decode head 前后处理和 FCN 一致PSA 的全称是 Point-wise Spatial Attention
借鉴于
Non-local,强行给了比较牵强的数学解释,推理过程复杂到需要调用CUDA而不是使用pure pytorch
CC 的全称是 Criss-Cross Attention (十字交叉注意力机制)
使用两个十字交叉注意力模块的串联替代
Non-local,降低算力
整体流程平平无奇
decode head 前后处理和 FCN 一致DANet 全称是 Dual Attention Network(双路 Attention 网络)
Attention,照搬 Non-localAttention,通道维度 Non-local

EncNet 的全称是 Context Encoding Network(上下文编码网络),做法是对网络中间层 feature map 编码到分类空间,加入了分类 Loss 监督
对于
SE-loss: 监督图中包含哪些类别的像素,使用交叉熵实现
对于Encode:
- 从本质上看:
- 上图使用的
Encode和SENet(Squeeze and Excitation Network) 对feature map per channel编码没有区别- 从实现层面看:
Encode使用了更在数学上更好解释的编码方式(而不是SENet粗暴的Global Average Pooling编码方式)Encode编码空间比SENet更大(SENet 每个通道使用 R 空间编码,Encode每个通道使用 Rd 空间编码)
EMA 的全称是 Expectation-Maximization Attention(最大期望注意力),从数学角度解释了 Attention,实现上也是通过多个矩阵乘实现的 channel 与 position 分离的 Attention
ANN 全称是 Asymmetric Non-local(非对称 Non-local), 简化 Non-local 同时引入 PPM,极大的降低了 matmul 和 softmax 两类算子的耗时
在
key/value上对特征进行了降维N -> S,由下图可知,上图的sample方法具体是指PPM(Pyramid Pooling Module)
AFNB全称是Asymmetric Fusion Non-local Block
APNB全称是Asymmetric Pyramid Non-local Block
二者对Non-local的Self-Attention进行简化,例如share key value
GCNet 的全称是 Global Context Network,作者认为 Non-local 对全局信息把握的不够好,本文是简化版 Non-local + SENet 的缝合怪,Non-local 的 Spatial Attention 和 SENet 的 Channel Attention 结合
Non-local结构的化简
作者认为一个全局上下文建模结构如图 (a) 所示
图 (b) 为简化后的Non-local结构
图 © 是SENet结构
图 (d) 是本文提出的GC结构
decode head 前后处理和 FCN 一致OCR 的全称是 Object Contextual Representations(目标上下文表征)Optical Character Recognition(光学字符识别)OCRNet 是一种 Cascade Encoder Decoder 结构的 decode head ,该算法依赖于其他算法输出的分割结果,如下图所示(OCRNet 依赖于 FCN 的输出):
上图中粉红色的部分即为
OCRNet decode head
论文中给出的算法架构图,给中间结果赋予了可解释的含义
APCNet 的全称是 Adaptive Pyramid Context Network(自适应金字塔上下文),该算法引入了 Adaptive Context Modules(ACM)(自适应上下文模块),本质就是通过矩阵乘实现全局 Attention
DMNet 的全称是 Dynamic Multi-scale Filters Network,本文根据输入特征动态获得多种尺度的卷积核参数,本质也是一种全局 Attention 机制
之前的网络结构都是通过空洞卷积或大卷积核实现多尺度
DMNet通过输入特征的Adaptive Pooling生成动态卷积核实现多尺度
LRASPP 全称是 Lite Reduced Atrous Spatial Pyramid Pooling(轻量简化空洞空间金字塔池化),是在 MobileNet V3 论文中提出的结构,是和 MobileNet V2 提出的 RASPP 结构对比,更轻量效果更好;从实现上看 LRASPP 并没有空洞卷积和空间金字塔池化…,而是通过全局 scale 实现的 AttentionMobileNet V3)
ISANet 的全称是 Interlaced Sparse Attention Network(交错稀疏注意力网络),通过 feature map shuffle 实现长范围和短范围的稀疏注意力。
- 利用
feature map重排实现长范围或短范围的稀疏注意力。
DNL 的全称是 Disentangled Non-Local(分离 Non-local),对原始 Non-local 做了改进,参数量和计算量更高,效果更好
DNL结构(图 d)在原始Non-local结构(图 a)上做了如下改动:
- 加入了一元
Non-local分支Unary Non-local- 在二元分支矩阵乘之前加入了白化操作(
H*W维度减均值,相当于instance norm)
由于减了均值,所以二元分支上 “+” 这一点在Attention map∈RHW×HW 上的索引heat map∈RH×W 变干净很多(相当只学习残差)
这张图也从侧面反映了Non-local还是很强的,Attention不是在讲故事
BiSeNet 的全称是 Bilateral Segmentation Network(双边分割网络),是一个分割专用的神经网络(包括专用 backbone 和 decode head)
backbone主要分成两个分支spatial path和context path,本质就是在基础backbone的基础上加入了一个计算量(通道数)非常小的attention branch增加上下文信息,最后融合两通道特征送入decode headdecode head就是基础的FCN
BiSeNet 的改进版
对
BiSeNet主要改进有:
context branch上增加了更多更复杂的模块,可更好收集上下文信息context branch上增加了更多监督,每个尺度上都有监督损失- 分支融合模块设计的更加复杂
SDTC 的全称是 Short-Term Dense Concatenate network,在 BiSeNet 系列的基础上将 context branch 变成训练时的监督(或者说融合两路信息到一路上)很新颖的 Loss 设计,效果和计算量都优于
BiSeNet系列
这就是SDTC模块
SETR 的全称是 Segmentation TransformerSETR_PUP_decode_head: https://github.com/open-mmlab/mmsegmentation/blob/master/mmseg/models/decode_heads/setr_up_head.pySETR_MLA_decode_head: https://github.com/open-mmlab/mmsegmentation/blob/master/mmseg/models/decode_heads/setr_mla_head.py
- 本质是
Vit(vision transformer)做backbone,FCN/ 类似FPN做decode head的分割算法- 为了缩减计算量,
Vit会将原图剪成多个patch(worth 16x16 words...),每个patch单独输入到 24 层Transformer Encoder中,每个patch内部独立做全局attention- 剪
patch带来的问题是:与其他CNN backbone + decode head结构不同,Transformer backbone + decode head结构中decode head需要顺序inference每个patch feature(注意图aDecoder输入为多个patch feature),最后拼回到整张图大小SETR_UPU decode head==sequence FCNSETR_MLA decode head==sequence FPN(Attention不改变输入宽高,所以不存在严格意义上的 多尺度,只是不同网络深度的特征)
DPTNet 的全称是 Dense Prediction Transformer Network,本质和 SETR 一样都是使用 Vit 做 backbone
- 本质和
SETR一样都是使用Vit做backbone- 和
SETR不同的地方在于:
- 不同
backbone深度特征融合方式更复杂,更接近FPNdecode head不再是输入sequence patch feature,而是输入融合后的全图feature
Segmenter 全称是 Segmentation Transformer,用了纯 Transformer 架构而不是 Transformer Encoder + CNN Decoder 架构
- 用了纯
Transformer架构(Transformer Encoder + Decoder),SETR和DPT都是Transformer Encoder + CNN Decoder
SegFormer 全称也是 Segmentation Transformer…,是 NVIDIA 对 SETR 的高效实现版,backbone 和 decoder head 都进行了轻量化升级
backbone不再是标准Transformer Encoder(Vit),而是改成了更轻量化的MixVisionTransformer(Mit)
Mit使用了更大的patch且patch之间存在overlapMit使用了coarse-to-fine的特征表示,随着Transformer Encoder变深feature map宽高变小Mit使用了更简单的Self-Attention公式Mit去掉了position embeding,使用了Mix-FFNdecode head使用了纯MLP,且很自然的融合了多尺度(真.多尺度)
KNet 的全称是 Kernel Network,是一种跳出语义分割、实例分割、全景分割原有框架的一种新分割范式,用一组 kernel 去预测一个分割 mask,最多预测 num_proposals 个(类似 DETR 的策略),训练时用最优匹配的方法计算损失函数;优点是在框架上统一了所有分割任务(语义分割、实例分割、全景分割),缺点 decode head 就是实现复杂,融合了 Channel Attention + Multi-head Attention + RNN
从框架上统一了三种分割方式
红字标出的是每个张量的shape
绿字标出的是每个计算过程实际是在做什么
上述过程会像RNN一样循环多次去更新kernel,使得结果更好(重复使用backbone的输出)