ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

详解Single-Image Piece-wise Planar 3D Reconstruction via Associative Embedding

2021-01-22 23:59:52  阅读:249  来源: 互联网

标签:Planar via wise sum 论文 像素 plane embedding 平面


Markdown

Motivation

理解从图像上提取平面。这个是最新的图片的平面提取。

论文序列

3)Single-Image Piece-wise Planar 3D Reconstruction via Associative Embedding

论文目标

在这里插入图片描述

为什么能够提取平面

它包括三个部分,一个语义提取平面和非平面的mask的encoder(典型的语音分割);一个plane embed encoder(这是?还没有完全看懂);一个平面参数的encoder,之前提到过它能够直接回归3D平面的参数,可以见到文章PLANNET。

创新贡献

1)这篇论文是19年的论文,但是它和之前的网络对比,能够提取任意数量的平面,类似于之前的论文PlaneRCNN: 3D Plane Detection and Reconstruction from a Single Image。但是它提取平面的方式不同。因为之前PlaneRCNN方法使用的是MASK-RCNN的proposal区域实例分割的变种方法,而这篇论文使用的是其它方式是proposal-free的实例分割方法。它使用语义的方式进行实例分割方式分割平面,详细见:Semantic instance segmentation with a discriminative loss function。
2)除了上面的变化,采用了一个embedding model方式,其中什么是embedding model方式?它指的是将像素放入到高维空间,指的是某个embedding空间,在这个空间内部,它能够更好的分类分割。看下图的表示如下。
在这里插入图片描述
上图可以看到,**将像素映射到plane embedding 空间,并且训练强制相同的平面上的像素在plane embedding空间之间的距离更加近。这样就可以得到更好的区域进行分割。**同时论文中提出了一个算法,让embedding 空间中相同的平面的像素对应的plane embedding具有相近的值。
3)提供了embedding model的方式,得到了相同的平面的像素在空间上具有相近的值,论文中同时对这些值进行移动,用聚类的思想,相近的值聚在一起,同时不相近的值之间尽量分开。这样就可以得到不同的平面分割(打破了分割的K值)。

网络整体架构

在这里插入图片描述
这是整体的网络架构,下面将介绍网络的各个部分的作用。

Plane Seg Decoder

这是对图片中的像素进行的平面提取,但是图像上有很多非平面的像素,比如一些树木,或者圆柱的物体,对后续的平面提取中会出现问题。同时有一个问题就是因为平面和平面交叉的地方会有一个弧度,这个弧度会导致平面分割会出现一些问题,不能表示交叉的地方属于哪个平面所以需要一个mask操作让非平面区域去掉。所以添加了这个mask网络。
主要的网络操作如下:
在这里插入图片描述
论文里面提的是用ResNet-101-FPN的拓展版本。它主要是Enconder各类信息。它用于区分平面和非平面的区域分割。
它的loss函数如下:
L S = − ( 1 − w ) ∑ i ∈ F l o g p i − w ∑ i ∈ B l o g ( 1 − p i ) (1) L_S = -(1-w)\sum_{i \in F}logp_i - w\sum_{i \in B}log(1-p_i) \tag{1} LS​=−(1−w)i∈F∑​logpi​−wi∈B∑​log(1−pi​)(1)
用于生存平面mask和非平面mask等等。具体的loss函数,后面再说。

Plane embed Decoder

这个网络模块是将像素映射到更高维的空间。称为embedding 空间。因为它能生成平面的空间所以称为plane embeddings。它的作用是在这个空间中,平面之间能够区分开,之前的图片也能够解释了。同时它和上面的Plane Seg的输出进行合并。通过一个Mean shit网络,让分割的效果更加好。主要的做法是对plane embedding空间的数据进行操作,让在同一个平面的像素在plane embbeding空间中它们的距离相近,强制相近,论文称为pull。不同平面的像素在plane embbeding 空间上它们距离拉远。论文称为push。这两个操作,使用了聚类。它的主要架构是:
在这里插入图片描述
其中生成的plane embedding 先和第一步的mask进行mask,去掉非平面的部分,然后用上面的Mean shift网络对plane embedding进行操作。让同一个平面上的像素在plane embedding空间中尽量挤在一起,同时将不同平面的像素在plane embedding空间中尽量拆开,导致如下的loss函数。
L E = L p u l l + L p u s h (2) L_E = L_{pull}+L_{push} \tag{2} LE​=Lpull​+Lpush​(2)
其中 L E L_E LE​表示同样的像素平面在一起和不同平面的像素在embedding空间不在一起。具体的Loss函数后面设计再说。

Plane Param Decoder

这一步其实说是计算每一个像素的平面坐标,其实在我看来是计算每个像素的normal,这个之前论文中也提到过用神经网络计算图片上每个像素的nomal。然后直接回归每个像素的normal。但是这个稍微有些区别,它回归的是包含深度。对于平面的表示可以用三个参数,就可以了。我们假设一个平面上的点为 Q Q Q,它的normal是为 n 0 n^0 n0表示原始的法向量。通过计算,得到平面的表示为: n T Q = 1 n^TQ=1 nTQ=1。推导这个公式如下:
计算平面点 Q ( x 0 , y 0 , z 0 ) Q(x_0, y_0, z_0) Q(x0​,y0​,z0​)和上面的点向量 Q ( x 0 , x 1 , x 2 ) Q(x_0, x_1, x_2) Q(x0​,x1​,x2​)(它表示原点到平面最近的点的距离,和平面垂直且在平面上)。它所在的平面如下:
Q ∗ ( P T − Q T ) = 0 = > Q ∗ P T = Q ∗ Q T Q*(P^T-Q^T)=0=>Q*P^T=Q*Q^T Q∗(PT−QT)=0=>Q∗PT=Q∗QT
其中 Q ∗ Q T Q*Q^T Q∗QT表示顶点到原点的距离,表示为 d 2 d^2 d2。所以得到如下公式:
Q ∗ P T / d 2 = 1 Q*P^T/d^2=1 Q∗PT/d2=1
其中 Q / d Q/d Q/d为平面的normal值。如果我们再将它表示一下,当表示为normal值除以 Q Q Q点到原点的距离。则可以表示为: N P = 1 N^P=1 NP=1。我们可以通过 N N N唯一表示一个平面。这个N表示 n o r m a l / d normal/d normal/d,平面上法向量和原点到平面上最近的顶点距离。 N N N的三个参数就可以了。
论文中回归平面的三个参数,它的loss函数为距离差,就是上面表示平面的距离。因为计算每个像素的平面,所以得到如下loss
L p p = 1 N ∑ i = 1 N ∣ ∣ n i − n i ∗ ∣ ∣ (3) L_{pp}=\frac{1}{N}\sum_{i=1}^N||n_i-n_i^*|| \tag{3} Lpp​=N1​i=1∑N​∣∣ni​−ni∗​∣∣(3)
其中 n i n_i ni​表示预测的平面的参数, n i ∗ n_i^* ni∗​表示第i个pixel真实的平面参数。
论文中找到了一个很好的平面参数,它可以很好表达平面,这个特征可以得到用于平面的提取。提取到合适的平面,需要将平面和之前的分割平面进行统一。论文提出的就是将像素级别的参数group到平面级别的参数,就是将相近的平面级别的参数进行group,这个非常重要,每一个像素级别的平面参数可以合并。具体的网络架构如下:
在这里插入图片描述
这是对平面上的

Loss函数设计

(为什么能够这样设计)?
Plane embed Decoder这个直接就是一个分割网络,直接区别哪些是平面哪些是非平面。
L S = − ( 1 − w ) ∑ i ∈ F l o g p i − w ∑ i ∈ B l o g ( 1 − p i ) (1) L_S = -(1-w)\sum_{i \in F}logp_i - w\sum_{i \in B}log(1-p_i) \tag{1} LS​=−(1−w)i∈F∑​logpi​−wi∈B∑​log(1−pi​)(1)
这是一个简单的像素贴上二维标签的问题。也是一个balanced model。其中 p i p_i pi​脑婆睡觉哦像素i属于前景的问题,其中 F , B F,B F,B表示前景和背景, w w w表示前景和背景的像素比等等,具体的可以看论文。

Plane embed Decoder
这个部分也是论文的创新点,可以查看这个创新点。如下:
它的网络设计的loss函数主要是让同一个平面的像素在plane embedding空间尽量接近。如下操作。
L p u l l = 1 C ∑ c = 1 C 1 N c ∑ i = 1 N c m a x ( ∣ ∣ μ c − x i ∣ ∣ − δ v , 0 ) (3) L_{pull} =\frac{1}{C}\sum_{c=1}^{C}\frac{1}{N_c}\sum_{i=1}^{N_c}max(||\mu_c-x_i||-\delta_v,0) \tag{3} Lpull​=C1​c=1∑C​Nc​1​i=1∑Nc​​max(∣∣μc​−xi​∣∣−δv​,0)(3)

L p u s h = 1 C ( C − 1 ) ∑ c A = 1 C ∑ c B = 1 C m a x ( − ∣ ∣ μ c A − μ c B ∣ ∣ + δ d , 0 ) (4) L_{push} =\frac{1}{C(C-1)}\sum_{c_A=1}^{C}\sum_{c_B=1}^{C}max(-||\mu_{c_A}-\mu_{c_B}||+\delta_d,0) \tag{4} Lpush​=C(C−1)1​cA​=1∑C​cB​=1∑C​max(−∣∣μcA​​−μcB​​∣∣+δd​,0)(4) 其中 c A ! = c B c_A != c_B cA​!=cB​
其中这个公式可以看到如下: C C C表示groundtruth的平面的数量, N c N_c Nc​表示在簇集合 c c c的元素的数量。 μ c A , μ c b \mu_{c_A},\mu_{c_b} μcA​​,μcb​​表示各簇 c A , c B c_A,c_B cA​,cB​的均值。同时
δ v , δ d \delta_v,\delta_d δv​,δd​表示pull和push的loss margin.这个是聚类的思想,可以看到它的表示让像素中的pixel embedding( x i x_i xi​),在聚类,同一个平面(表示它们的差值是小于 δ v \delta_v δv​),loss没有惩罚项,要是大于这个阈值,表示不在一个平面上,就开始惩罚。这样就可以让相近的pixel embedding聚集在一起。同时当两个cluster越近,则惩罚项越大。同时当他们大于 δ d \delta_d δd​则不具有惩罚项。这样是聚类的思想。这样就可以让相近的在一起。因为需要将他们聚类称为一个个平面,用mean shift cluster算法。它需要计算每两个像素pixel embeding之间的距离。这个算法的时间复杂度过高,因此需要用anchor的思想。设置一个个anchors,然后将每个像素对应到最近的anchor。其中用k,d表示每一维的anchor的数量,和embedding的维度。这样只要生成 k d k^d kd个anchors就可以了。这样计算embedding向量 x i x_i xi​和anchor a j a_j aj​对应的potential即可,表示为:
p i , j = 1 2 π e x p ( − m i j 2 2 b 2 ) (5) p_{i,j}=\frac{1}{\sqrt{2\pi}}exp{(-\frac{m_{ij}^2}{2b^2})} \tag{5} pi,j​=2π ​1​exp(−2b2mij2​​)(5)
其中 b b b表示在cluster上的bandwith。 m i , j = ∣ ∣ a j − x i ∣ ∣ m_{i,j}=||a_j-x_i|| mi,j​=∣∣aj​−xi​∣∣表示 a j a_j aj​和 x i x_i xi​的距离。
a j t = 1 Z j t ∑ i = 1 N p i j t ∗ x i (6) a_j^t=\frac{1}{Z_j^t}\sum_{i=1}^Np_{ij}^t*x_i \tag{6} ajt​=Zjt​1​i=1∑N​pijt​∗xi​(6)
这是第t次迭代后。
在这里插入图片描述
可以看到最后计算 C   C^~ C 个簇。最后merge为S分割的mask map。

Plane Param Decoder
这是计算每个像素的平面参数模块设计的loss函数,论文中,需要给出平面的表达,同时给出loss函数如下:
L p p = 1 N ∑ i = 1 N ∣ ∣ n i − n i ∗ ∣ ∣ (3) L_{pp}=\frac{1}{N}\sum_{i=1}^N||n_i-n_i^*|| \tag{3} Lpp​=N1​i=1∑N​∣∣ni​−ni∗​∣∣(3)
有一个pool操作,它让像素级别的平面参数和之前生成的seg mask合在一起。表达如下:
n j = 1 Z j ∑ i = 1 N S i j ∗ n i n_j=\frac{1}{Z_j}\sum_{i=1}^NS_{ij}*n_i nj​=Zj​1​i=1∑N​Sij​∗ni​
这是一个全局的average pooling操作,但是有attention 操作,让不同的plane( S i j S_ij Si​j)对像素级别的平面参数进行筛选。可以看到mask操作。因为论文中还考虑了一下全局的几何信息,意思就是和原始的depthmap要一致。表示如下:
L I P = 1 N C ∑ j = 1 C ∑ i = 1 N S i j ∗ ∣ ∣ n j T Q i − 1 ∣ ∣ L_IP=\frac{1}{NC}\sum_{j=1}^{C}\sum_{i=1}^NS_{ij}*||n_j^TQ_i-1|| LI​P=NC1​j=1∑C​i=1∑N​Sij​∗∣∣njT​Qi​−1∣∣
可以看出来。希望生成的depth值和原始的depth值一致。
这些loss的设计是因为遇到的各个问题达到了,自己需要模仿,指导未来自己设计网络等等。

网络设计的细节(代码级别)

后续在补,最近在看planercnn代码,运行和测试代码。

感想

1)这篇论文的思路和之前那些论文不一样,之前的论文都是先回归平面的参数,或者计算点云的normal和depth,然后它计算各个平面,然后refine各个平面的segmetation,这样保证了平面部分。这篇论文直接回归平面参数,跳过了平面中的normal和depth计算像素级别的平面参数。提供了一个很好的平面表达。上篇论文也提到了,但是这篇论文直接表达了这个平面。

2)这篇论文同时加入了一个非常重要的概念,也是最新论文中提出的一个embedding model概念,它能够让分割边得更加容易。本篇论文使用了这个技巧,更好的分割了实例化分割了平面。自己看的神经网络的论文较少,不知道还有这个技巧可以应用,只是知道这些数据,但是不知道怎么用,或者用的比较浅显。以后需要积极看论文了解各种技术,用于后续的网络改进。

3)论文中还是没有添加角点的信息,同时平面表达可以用极坐标表示。

4)同时CRF表达其实可以将scene的信息加进来。需要看一下网络架构怎么使用这个信息。

标签:Planar,via,wise,sum,论文,像素,plane,embedding,平面
来源: https://blog.csdn.net/weixin_43851636/article/details/112912244

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有