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
推出了参数量更大的 GPT2
GPT2
与之前所有的 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)
,使用 FocalLoss
output_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)
,使用 SmoothL1Loss
output_shape = (N, 1, H, W)
,使用 BCEWithLogitsLoss
output_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 head
decode head
是指满足如下要求的网络结构:
backbone / neck
提取的 feature map
或 feature map list
segmentation
结果backbone
输出的 feature map
(例如 PSPNet
输出)backbone
不同阶段 / neck
(例如 FPN
) 输出的不同尺度的 feature map list
feature 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 list
feature 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 Attention
DANet
: 2018年,出自京东,两路 Non-local
,一路 attention to postion
一路 attention to channel
EncNet
: 2018年,出自商汤 + Amazon
,优化了 SENet
中的暴力编码方式,在分割任务中额外加入了分类辅助监督EMANet
: 2019年,出自北大,attention to channel
和 attention to postion
可分离的 attention
ANN
: 2019年,出自华中科技大学,简化 Non-local
同时引入 PPM
,极大的降低了 matmul
和 softmax
两类算子的耗时GCNet
: 2019年,出自 MSRA
,简化版 Non-local
+ SENet
的缝合怪OCRNet
: 2019年,出自 MSRA
,级联结构,在其他 decode head
的输出结果上做了 Self-Attention
,并在论文中从 Transformer
角度解释了 Self-Attention
APCNet
: 2019年,出自商汤,复杂网络结构 + 简化矩阵乘实现的 Attention
DMNet
: 2019年,出自商汤,根据输入特征的全局信息动态生成卷积核,本质也是 Attention
LRASPP
: 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
命名…Transformer
SETR
: 2020年,出自腾讯,Vit
做 backbone
+ FCN / FPN decode head
DPT
: 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 Networks
resize 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
中的普通 Conv
Fast-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_logits
refined_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]
loss
Train
过程与 Inference
过程基本相同,区别在于:
topk
运算对梯度反向传播不友好,所以在 Train
的过程中使用随机采样点的策略,没有挖掘 hard case
Train
不会引入多尺度,只会在同一尺度学习 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-local
Attention
,通道维度 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
实现的 Attention
MobileNet 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 head
decode head
就是基础的FCN
BiSeNet
的改进版对
BiSeNet
主要改进有:
context branch
上增加了更多更复杂的模块,可更好收集上下文信息context branch
上增加了更多监督,每个尺度上都有监督损失- 分支融合模块设计的更加复杂
SDTC
的全称是 Short-Term Dense Concatenate network
,在 BiSeNet
系列的基础上将 context branch
变成训练时的监督(或者说融合两路信息到一路上)很新颖的 Loss 设计,效果和计算量都优于
BiSeNet
系列
这就是SDTC
模块
SETR
的全称是 Segmentation Transformer
SETR_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 FCN
SETR_MLA decode head
==sequence FPN
(Attention
不改变输入宽高,所以不存在严格意义上的 多尺度,只是不同网络深度的特征)
DPTNet
的全称是 Dense Prediction Transformer Network
,本质和 SETR
一样都是使用 Vit
做 backbone
- 本质和
SETR
一样都是使用Vit
做backbone
- 和
SETR
不同的地方在于:
- 不同
backbone
深度特征融合方式更复杂,更接近FPN
decode 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
之间存在overlap
Mit
使用了coarse-to-fine
的特征表示,随着Transformer Encoder
变深feature map
宽高变小Mit
使用了更简单的Self-Attention
公式Mit
去掉了position embeding
,使用了Mix-FFN
decode head
使用了纯MLP
,且很自然的融合了多尺度(真.多尺度)
KNet
的全称是 Kernel Network
,是一种跳出语义分割、实例分割、全景分割原有框架的一种新分割范式,用一组 kernel
去预测一个分割 mask
,最多预测 num_proposals
个(类似 DETR
的策略),训练时用最优匹配的方法计算损失函数;优点是在框架上统一了所有分割任务(语义分割、实例分割、全景分割),缺点 decode head
就是实现复杂,融合了 Channel Attention + Multi-head Attention + RNN
从框架上统一了三种分割方式
红字标出的是每个张量的shape
绿字标出的是每个计算过程实际是在做什么
上述过程会像RNN
一样循环多次去更新kernel
,使得结果更好(重复使用backbone
的输出)