论文总结
原文链接:论文总结 | Karl的博客 (karltan.com)
CSDN链接:【精选】论文总结-CSDN博客
2023
PoseCNN: A Convolutional Neural Network for 6D Object Pose Estimation in Cluttered Scenes
主要贡献:
- 提出了PoseCNN;
- PoseCNN通过定位目标中心和预测中心距离来估计3D平移;
- 引入了两个损失函数,
PoseLoss
和ShapeMatch-Loss
,其中ShapeMatch-Loss
设计用于处理对称对象,从而让PoseCNN具有处理对称对象的能力; - 提出了一个YCB数据集。
方法:
-
为输入图像中的每个像素预测一个对象标签,做语义分割;
-
然后对于图像中的某一个对象,网络为图像中的每一个像素 p = ( x , y ) T \mathbf{p} = (x, y)^\mathrm{T} p=(x,y)T回归到三个变量(这里顺便回归出了未被遮挡像素的深度,因为物体中心可能被遮挡,所以不能直接回归物体中心的深度):
( x , y ) → ( n x = c x − x ∥ c − p ∥ , n y = c y − y ∥ c − p ∥ , T z ) (x, y) \to \left(n_x = \frac{c_x - x}{\Vert\mathbf{c} - \mathbf{p}\Vert}, n_y = \frac{c_y - y}{\Vert\mathbf{c} - \mathbf{p}\Vert}, T_z\right) (x,y)→(nx=∥c−p∥cx−x,ny=∥c−p∥cy−y,Tz)
然后结合语义分割的结果,对于某个对象,它首先计算图像中每个位置的投票分数。投票分数表明该位置是该对象中心的可能性有多大(如果该对象在图像中多次出现,那么使用非极大值预测,然后选择分数大于某一阈值的位置),在这一步能够得到物体的中心; -
中心得到后,中心的深度可计算为该类像素的平均深度(这是为了解决中心被遮挡的问题),得到深度后,根据公式可得到3D平移;
-
使用
PoseLoss
和ShapeMatch-Loss
估计3D旋转,其中:-
PoseLoss
表达式为:
PLOSS ( q ~ , q ) = 1 2 m ∑ x ∈ M ∥ R ( q ~ ) x − R ( q ) x ∥ 2 \text{PLOSS}(\tilde{\mathbf{q}}, \mathbf{q}) = \frac{1}{2m}\sum_{\mathbf{x} \in \mathcal{M}}\Vert R(\tilde{\mathbf{q}})\mathbf{x} - R(\mathbf{q})\mathbf{x}\Vert^2 PLOSS(q~,q)=2m1x∈M∑∥R(q~)x−R(q)x∥2
可以看到,这是直接计算对应点之间的平均平方距离 -
ShapeMatch-Loss
表达式为:
SLOSS ( q ~ , q ) = 1 2 m ∑ x 1 ∈ M min x 2 ∈ M ∥ R ( q ~ ) x 1 − R ( q ) x 2 ∥ 2 \text{SLOSS}(\tilde{\mathbf{q}}, \mathbf{q}) = \frac{1}{2m}\sum_{\mathbf{x}_1 \in \mathcal{M}}\min_{\mathbf{x}_2 \in \mathcal{M}}\Vert R(\tilde{\mathbf{q}})\mathbf{x}_1 - R(\mathbf{q})\mathbf{x}_2\Vert^2 SLOSS(q~,q)=2m1x1∈M∑x2∈Mmin∥R(q~)x1−R(q)x2∥2
可以看到,这里计算的不是对应点,而是为某个点选取了一个最近点进行计算,能够一定程度上解决对称物体的旋转问题
-
-
至此,3D平移和3D旋转估计结束。
备注:
- 此文章中的方法是实例级的
- 只能估计那些已知的对象,即你需要知道待估计物体的CAD模型,不然你不知道物体的正面是哪里,也不知道大小
- 在网络的训练过程中不需要使用深度信息,但是在最后的ICP阶段,如果能够使用深度信息,在精度上会有大幅提升
Normalized Object Coordinate Space for Category-Level 6D Object Pose and Size Estimation
主要贡献:
- 可为未见过的对象实例做类别级的6D姿态和尺寸估计;
- 提出了Normalized Object Coordinate Space(NOCS),将各个对象归一化到一个标准的空间中;
- 提出了一个CNN来得到NOCS。
方法:
- 该CNN建立在基于区域的Mask R-CNN框架上,而Mask R-CNN框架又建立在Faster R-CNN框架上;
- Mask R-CNN框架由两个模块组成:
- 一个模块提出可能包含对象的区域
- 一个检测和分类区域内的对象
- 还能做语义分割
- 那么这一步可以得到类标签和语义分割
- Mask R-CNN框架由两个模块组成:
- 在Mask R-CNN的基础上,还加入了3个头部结构,用于预测NOCS的 x , y , z x, y, z x,y,z分量,从而得到物体的NOCS坐标;
- 使用语义分割的结果和RGB-D相机的深度信息,得到被检测对象的点云信息 P m P_m Pm(这个是真实拍摄出来的);
- 使用NOCS映射,也得到一个点云信息 P n P_n Pn,这个点云应该是在原点处的;
- 最后,根据上面的两个点云信息 P m P_m Pm和 P n P_n Pn,我们可以计算出如何从 P n P_n Pn变换到 P m P_m Pm,从而得到缩放,旋转和平移。
备注:
- 此文章中的方法是类别级的
- 可以估计那些未知的对象
- 全过程不需要CAD模型
POPE: 6-DoF Promptable Pose Estimation of Any Object, in Any Scene, with One Reference
CSDN链接:论文笔记《POPE:6-DoF Promptable Pose Estimation of Any Object, in Any Scene, with One Reference》-CSDN博客
主要贡献:
- 提出了可提示的目标位姿估计(Propmtable Object Pose Estimation, POPE),旨在估计野外场景下目标的相对位姿,没有对对象类别的假设,只使用一个参考图像;
- 提出了一种6DoF位姿基础模型,即POPE,该模型无缝地集成了预训练的基础模型和3D几何原理,用于高质量的分割、分层对象检索和鲁棒图像匹配,以实现在不同和不受控制的环境中进行精确的目标位姿估计。
方法:
-
先使用SAM(Segment-Anything Model)在支持图(我要找的)和目标图(在这里找)上做语义分割;
-
语义分割结束后,在支持图上会生成一个掩码,在目标图上会生成 M \mathcal{M} M, M \mathcal{M} M中会有 K K K个掩码: M = { m 1 , m 2 , ⋯ , m K } \mathcal{M} = \{m^1, m^2, \cdots, m^K\} M={m1,m2,⋯,mK}。将支持图记为 I P I_P IP,目标图集合记为 I T K I_T^K ITK;
-
利用掩码的CLS token计算 I P I_P IP和 I T K I_T^K ITK之间的余弦相似度矩阵,它揭示了提示图像 I P I_P IP和集合 I T K I_T^K ITK中的第 k k k个掩模图像之间的对象关系,通过找到矩阵中的最高分数,我们可以在两个视图中检索同一对象的匹配图像(为了准确度,这里没有使用这种方法计算掩码之间的匹配); -
利用DINO-v2生成的Top-K提案,降序排列相似性分数,然后选出最匹配的一对,实现掩码匹配;
-
利用LoFTR在匹配的掩码上进行2D特征点匹配;
-
得到特征点后,然后用双目相机模型估计深度,但是只能估计相对深度:
【精选】双目视觉原理(万字总结,包含Halcon代码)_双目视觉测量 halcon_happylife_mini的博客-CSDN博客
深度 Z Z Z的计算公式为:
Z = f b x L − x R Z = \frac{fb}{x_L - x_R} Z=xL−xRfb
其中:- f f f为相机焦距(这里假设双目相机两个目的焦距是相同的)
- b b b是两个相机投影中心连线的距离,也称基线
- x L x_L xL是左相机成像点到左成像面的距离
- x R x_R xR是右相机成像点到左成像面的距离
由于 b b b是未知的,所以估计出的深度为相对深度;
-
得到深度后,也就得到了2D-3D点的匹配,然后利用PnP算法,就可以计算相对位移和绝对旋转(PnP计算旋转时, b b b会消掉)。
备注:
- 只能估计相对位姿
- 没有使用深度信息
- 模型较大
- 首次实现了Any Scene, Any Objects
2024
Triton: An Intermediate Language and Compiler for Tiled Neural Network Computations
CSDN链接:论文笔记《Triton:An Intermediate Language and Compiler for Tiled Neural Network Computations》-CSDN博客
主要贡献:
我们提出了Triton,一种以图块(tile)概念为中心的语言和编译器,即静态形状的多维子数组。我们的方法围绕:
- 基于C语言和基于LLVM的中间表示(IR),用于根据参数图块变量的操作来表达张量程序;
- 以及一组新颖的图块级优化过程,用于将这些程序编译成高效的GPU代码。
我们将演示如何使用Triton来构建矩阵乘法和卷积核的可移植实现,与手工调优的供应商库(cuBLAS/cuDNN)相当,或者高效地实现最近的研究想法,如移位卷积。
方法:
- Triton-C(第3节):一种类似C的语言,用于根据参数图块变量表达张量程序。该语言的目的是为现有的DNN转编译器(例如PlaidML、Tensor Compressive)和熟悉CUDA的程序员提供稳定的接口。Listing 1显示了与简单矩阵乘法任务相关的Triton-C源代码。
- Triton-IR(第4节):基于LLVM的中间表示(IR),提供适合切片级程序分析、转换和优化的环境。Listing 5显示了修正线性单元(ReLU)函数的Triton-IR代码。这里,Triton-IR程序是在解析过程中直接从Triton-C构建的,但未来也可以探索从嵌入式DSL或更高级别的DNN编译器(例如TVM)自动生成。
- Triton-JIT(第5节):即时(Just-In-Time, JIT)编译器和代码生成后端,用于将Triton-IR程序编译为高效的LLVM位代码。这包括:
- 一组图块级、独立于机器的通道,旨在独立于任何编译目标简化输入计算内核;
- 一组图块级机器相关通道,用于生成高效的GPU就绪LLVM-IR;
- 一个自动调节器,用于优化与上述过程相关的任何元参数。
- Numerical Experiments(第6节):对Triton的数值评估证明了它的能力:
- 在循环神经网络和Transformer上生成与cuBLAS相当的矩阵乘法实现,并且比替代的DSL快3倍;
- 重新实现了cuDNN中用于密集卷积的
IMPLICIT_GEMM
算法,而不损失性能; - 创建新颖的研究思想的有效实现,例如shift-conv[47]模块。
本文将以对现有相关文献的简要分析作为序言(第2节),并以总结和未来工作方向作为总结(第7节)。
备注:
暂无备注。
Attention Is All You Need
原文链接:论文笔记《Attention Is All You Need》 | Karl的博客 (karltan.com)
CSDN链接:论文笔记《Attention Is All You Need》-CSDN博客
主要贡献:
- 提出了Transformer,完全摈弃了RNN和CNN;
- 完全基于注意力机制来绘制输入和输出之间的全局依赖关系;
- 可以并行进行训练,使得训练速度大大加快。
方法:
- Embedding(第3.4节):
- 进行单词Embedding,这是NLP的基本操作。
- Positional Encoding(第3.5节):
- 对输入进行位置Encoding,因为Transformer本身不采用RNN的结构,而是使用全局信息,所以不能利用单词的顺序信息,而这部分信息对NLP来说很重要,所以Transformer中使用位置Encoding保存单词在序列中的相对或绝对信息。
- Encoder(第3.1节):
- Encoder Block的结构大致为:“多头注意力-残差连接-层归一化-全连接-ReLU-全连接-残差连接-层归一化”,而Encoder是由6个这样的结构堆叠而成的。
- Decoder(第3.1节):
- Decoder Block的输入来源于两部分,一部分是输入文本,还有一部分是Encoder的输出。对于输入文本来说,经过“Masked多头注意力-残差连接-层归一化”结构后,会作为 Q Q Q,输入到一个类似于Encoder的结构中。而对于Encoder的输出来说,会作为 K K K和 V V V,直接输入到这个类似于Encoder的结构中。
- Attention(第3.2节):
- Scaled Dot-Product Attention(第3.2.1节):
- 在注意力机制中, Q Q Q会先和 K K K进行矩阵乘法,然后经过缩放、Mask(可选)和SoftMax操作后,再和 V V V进行矩阵乘法。
- Multi-Head Attention(第3.2.2节):
- 多头注意力是多个注意力机制组合而成的,多头注意力会对同一个输入执行多次注意力机制的计算,会得到多个结果,然后会将这些结果进行拼接,最后传给一个线性层,得到多头注意力的结果。
- Scaled Dot-Product Attention(第3.2.1节):
- Position-wise Feed-Forward Networks(第3.3节):
- 就是简单的“全连接-ReLU-全连接”的结构。
备注:
- Transformer本身不能利用单词的顺序信息,因此需要加入Embedding层,否则Transformer会变成一个词袋模型;
- Transformer的重点是Self-Attention结构,其中用到的 Q , K , V Q, K, V Q,K,V矩阵是由输入 X X X分别和 W Q W^Q WQ, W K W^K WK和 W V W^V WV进行矩阵乘法得到的。
NOPE: Novel Object Pose Estimation from a Single Image
原文链接:论文笔记《NOPE:Novel Object Pose Estimation from a Single Image》 | Karl的博客
CSDN链接:论文笔记《NOPE: Novel Object Pose Estimation from a Single Image》-CSDN博客
主要贡献:
提出了NOPE,该方法在已知对象一张图片的情况下,将对象的单个新图像作为输入,并在不事先了解对象的3D模型的情况下预测该对象在新图像中的相对位姿,并且不需要对新对象和新类别进行训练。
方法:
在每次训练迭代时,构建一个由 N N N对图像组成的批,每一对图像由参考图像和已知相对位姿的另一图像组成。
- 计算两张图像的嵌入;
- 使用MLP计算另一图像位姿的嵌入;
- 将参考图像的嵌入和相对位姿的嵌入输入到U-Net中,U-Net会用这两个输入来预测另一图像的嵌入;
- 在U-Net和MLP训练结束后,可以开始预测新图像的嵌入,给定一个参考图像 I r \mathbf{I}_\mathrm{r} Ir和 N N N个相对位姿 P = ( Δ R 1 , Δ R 2 , ⋯ , Δ R N ) \mathcal{P} = (\Delta R_1, \Delta R_2, \cdots, \Delta R_N) P=(ΔR1,ΔR2,⋯,ΔRN),可以得到对应的 N N N个图像的嵌入 ( e 1 , e 2 , ⋯ , e N ) (\mathbf{e}_1, \mathbf{e}_2, \cdots, \mathbf{e}_N) (e1,e2,⋯,eN);
- 最后,输入查询图像,在生成的候选结果中执行最近邻搜索,输出最好的结果。
备注:
暂无备注。
ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders
原文链接:论文笔记《ConvNeXt V2:Co-designing and Scaling ConvNets with Masked Autoencoders》 | Karl的博客
CSDN链接:论文笔记《ConvNeXt V2:Co-designing and Scaling ConvNets with Masked Autoencoders》-CSDN博客
主要贡献:
提出了一个全卷积掩码自编码器框架和一个新的全局响应归一化(GRN)层,该层可以添加到ConvNeXt架构中以增强信道间特征竞争。这种自监督学习技术和架构改进的共同设计产生了一个名为ConvNeXt V2的新模型家族,它显著提高了纯ConvNets在各种识别基准上的性能,包括ImageNet分类、COCO检测和ADE20K分割。我们还提供了各种大小的预训练ConvNeXt V2模型,从在ImageNet上具有76.7% top-1精度的高效3.7 M参数Atto模型,到仅使用公共训练数据即可实现最先进的88.9%精度的650M Huge模型。
方法:
-
Fully Convolutional Masked Autoencoder(第3节):
该框架在输入时会随机掩蔽输入中的一部分,且框架的任务是预测出被掩蔽的部分;
将被掩蔽的图像看作二维稀疏的像素数组,从而使用稀疏卷积促进自编码器的预训练;
使用普通的ConvNeXt作为解码器,因为实验表明这种做法效果更好。
-
Global Response Normalization(第4节):
作者首先在特征空间中对使用FCMAE预训练的ConvNeXt-Base模型进行了分析,发现有很多特征图要么过于饱和,要么是死的,即对特征提取没有帮助。
为了解决这个问题,作者提出了GRN,包括如下三个步骤:
- 全局特征聚合;
- 特征归一化;
- 特征校准。
实际的GRN块非常容易实现,最后将GRN合并到原来的ConvNeXt中。
备注:
暂无备注。
AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE
原文链接:论文笔记《AN IMAGE IS WORTH 16X16 WORDS:TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE》 | Karl的博客
CSDN链接:论文笔记《AN IMAGE IS WORTH 16X16 WORDS:TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE》-CSDN博客
网络结构图:
主要贡献:
提出了ViT,使Transformer能够应用于图像。
方法:
-
将维度为 x ∈ R H × W × C \mathbf{x} \in \mathbb{R}^{H \times W \times C} x∈RH×W×C的图像重塑为一系列平坦的2D patch x p ∈ R N × ( P 2 ⋅ C ) \mathbf{x}_p \in \mathbb{R}^{N \times (P^2 \cdot C)} xp∈RN×(P2⋅C),其中 ( H , W ) (H, W) (H,W)为原始图像的分辨率, C C C为通道数, ( P , P ) (P, P) (P,P)为每个图像patch的分辨率, N = H W P 2 N = \frac{HW}{P^2} N=P2HW为得到的patch数,它也作为Transformer的有效输入序列长度;
-
使用下面的计算方式将patch展平并映射到 D D D维:
z 0 = [ x class ; x p 1 E ; x p 2 E ; ⋯ ; x p N E ] + E p o s , E ∈ R ( P 2 ⋅ C ) × D , E p o s ∈ R ( N + 1 ) × D \mathbf{z}_0 = \left[\mathbf{x}_\text{class};\ \mathbf{x}_p^1\mathbf{E};\ \mathbf{x}_p^2\mathbf{E};\ \cdots;\ \mathbf{x}_p^N\mathbf{E}\right] + \mathbf{E}_{pos}, \quad \mathbf{E} \in \mathbb{R}^{(P^2 \cdot C) \times D},\ \mathbf{E}_{pos} \in \mathbb{R}^{(N + 1) \times D} z0=[xclass; xp1E; xp2E; ⋯; xpNE]+Epos,E∈R(P2⋅C)×D, Epos∈R(N+1)×D
我们将该投影的输出称为patch embedding; -
在嵌入的patch序列( z 0 0 = x class \mathbf{z}_0^0 = \mathbf{x}_\text{class} z00=xclass)上添加一个可学习的嵌入,其在Transformer编码器( z L 0 \mathbf{z}_L^0 zL0)输出处的状态作为图像表示 y \mathbf{y} y:
y = LN ( z L 0 ) \mathbf{y} = \text{LN}(\mathbf{z}_L^0) y=LN(zL0)
在预训练和微调过程中, z L 0 \mathbf{z}_L^0 zL0都附加了一个分类头。分类头在预训练时由一个隐藏层的MLP实现,在微调时由一个线性层实现; -
然后应用Transformer编码器:
z ℓ ′ = MSA ( LN ( z ℓ − 1 ) ) + z ℓ − 1 ℓ = 1 … L z ℓ = MSA ( LN ( z ℓ ′ ) ) + z ℓ ′ ℓ = 1 … L \begin{aligned} \mathbf{z}^\prime_\ell &= \text{MSA}(\text{LN}(\mathbf{z}_{\ell - 1})) + \mathbf{z}_{\ell - 1} & & \ell = 1 \dots L \\ \mathbf{z}_\ell &= \text{MSA}(\text{LN}(\mathbf{z}^\prime_\ell)) + \mathbf{z}^\prime_\ell & & \ell = 1 \dots L \end{aligned} zℓ′zℓ=MSA(LN(zℓ−1))+zℓ−1=MSA(LN(zℓ′))+zℓ′ℓ=1…Lℓ=1…L -
最后的计算流程为:
z 0 = [ x class ; x p 1 E ; x p 2 E ; ⋯ ; x p N E ] + E p o s , E ∈ R ( P 2 ⋅ C ) × D , E p o s ∈ R ( N + 1 ) × D z ℓ ′ = MSA ( LN ( z ℓ − 1 ) ) + z ℓ − 1 , ℓ = 1 … L z ℓ = MLP ( LN ( z ℓ ′ ) ) + z ℓ ′ , ℓ = 1 … L y = LN ( z L 0 ) \begin{aligned} \mathbf{z}_0 &= \left[\mathbf{x}_\text{class};\ \mathbf{x}_p^1\mathbf{E};\ \mathbf{x}_p^2\mathbf{E};\cdots\ ;\ \mathbf{x}_p^N\mathbf{E}\right] + \mathbf{E}_{pos}, & & \mathbf{E} \in \mathbb{R}^{(P^2 \cdot C) \times D}, \mathbf{E}_{pos} \in \mathbb{R}^{(N + 1) \times D} \\ \mathbf{z}^\prime_\ell &= \text{MSA}(\text{LN}(\mathbf{z}_{\ell - 1})) + \mathbf{z}_{\ell - 1}, & & \ell = 1 \dots L \\ \mathbf{z}_\ell &= \text{MLP}(\text{LN}(\mathbf{z}^\prime_\ell)) + \mathbf{z}^\prime_\ell, & & \ell = 1 \dots L \\ \mathbf{y} &= \text{LN}(\mathbf{z}^0_L) \end{aligned} z0zℓ′zℓy=[xclass; xp1E; xp2E;⋯ ; xpNE]+Epos,=MSA(LN(zℓ−1))+zℓ−1,=MLP(LN(zℓ′))+zℓ′,=LN(zL0)E∈R(P2⋅C)×D,Epos∈R(N+1)×Dℓ=1…Lℓ=1…L
y \mathbf{y} y即为最后的分类结果。
备注:
暂无备注。