分割驱动,让每个可以看到的部分都对关键点位置的预测做出贡献
假设:
物体是刚体且CAD模型已知。
对输入的图片做卷积,然后产生分割和预测,将图片分成 S × S S \times S S×S个网格,每个网格都i预测属于的类别并回归关键点的位置,关键点在这里就是交点,然后根据2D-3D对应来做EPnP
对每个 S × S S \times S S×S的cell预测label, D s e g = K + 1 D_{seg} = K +1 Dseg=K+1, K K K是类别数,因为前景和背景的不平衡,所以使用的 Focal Loss
预测内容:
在分割出来的mask中进行的预测,预测提前定义好的3D关键点的2D映射,这里用的是八个角点,所以 N = 8 N=8 N=8, D r e g = 3 N D_{reg} = 3N Dreg=3N
预测方法:
没有直接预测位置,预测的是八个角点对于中心位置的偏移,所以设2D形心是 c c c,对于第 i i i个关键点,预测的偏移为 h i ( c ) h_i(c) hi(c),所以绝对位置就是 c + h i ( c ) c+h_i(c) c+hi(c),然后训练的时候残差就是:
Δ i ( c ) = c + h i ( c ) − g i \varDelta_i(c) = c + h_i(c) - g_i Δi(c)=c+hi(c)−gi
所以loss就是:
L p o s = ∑ c ∈ M ∑ i = 1 N ∣ ∣ Δ i ( c ) ∣ ∣ 1 L_{pos} = \sum_{c\in M}\sum^N_{i=1}||\varDelta_i(c)||_1 Lpos=c∈M∑i=1∑N∣∣Δi(c)∣∣1
同时还用sigmoid
计算对于每个预测的置信度,来表示和真实值的相似程度:
L c o n f = ∑ c ∈ M ∑ i = 1 N ∣ ∣ s i ( c ) − exp ( − τ ∣ ∣ Δ i ( c ) ∣ ∣ 2 ) ∣ ∣ 1 L_{conf} = \sum_{c\in M}\sum^N_{i=1}||s_i(c) - \exp(-\tau||\varDelta_i(c)||_2)||_1 Lconf=c∈M∑i=1∑N∣∣si(c)−exp(−τ∣∣Δi(c)∣∣2)∣∣1
所以这一块的总loss是:
L r e g = β L p o s + γ L c o n f L_{reg} = \beta L_{pos} + \gamma L_{conf} Lreg=βLpos+γLconf
网络结构是Darknet-53,输出为3Dtensor,空间分辨率是 S × S S\times S S×S,在其中的每个cell上预测两个特征向量 D s e g , D r e g D_{seg},D_{reg} Dseg,Dreg,这个网格能控制投票的数量。
两个流的结构是相同的,不过输出的特征维度不同
L = L s e g + L r e g L = L_{seg} + L_{reg} L=Lseg+Lreg
多同类物体:
因为这里的分割是类级别的,而不是实例级别的,所以对多同类物体的情况表现不好,为了解决这个作者使用了聚类方法,使用相似像素距离阈值来做聚类
EPnP:
如果直接使用RANSAC的话速度比较慢,所以作者提取了 n = 10 n=10 n=10个最高置信度的预测来做RANSAC,能减少计算量,之后再用EPnP来求出结果,过程如下图:
a 是 网 格 上 的 类 别 预 测 , b 是 显 示 出 所 有 预 测 的 关 键 点 , c 是 对 关 键 点 过 滤 , d 是 最 终 P o s e 可 视 化 a是网格上的类别预测,b是显示出所有预测的关键点,c是对关键点过滤,d是最终Pose可视化 a是网格上的类别预测,b是显示出所有预测的关键点,c是对关键点过滤,d是最终Pose可视化
消 融 实 验 , N F 不 知 道 是 啥 , H C 是 只 用 置 信 度 最 高 的 一 个 预 测 点 , b − n 是 R A N S A C 取 n 个 最 高 点 的 效 果 消融实验,NF不知道是啥,HC是只用置信度最高的一个预测点,b-n是RANSAC取n个最高点的效果 消融实验,NF不知道是啥,HC是只用置信度最高的一个预测点,b−n是RANSAC取n个最高点的效果
和 其 他 的 方 法 的 对 比 和其他的方法的对比 和其他的方法的对比
训练和测试的时候把所图片resize到 608 × 608 608 \times 608 608×608,然后将2D映射的位置和置信度都正则化到范围[0,10]
就当是输出的比例,要结果的时候再映射回去
就算是逐像素预测了,2020看这篇文章确实没啥东西,主要后面出来了不少厉害的方法,比起来这个就比较简单基础了
虽然说不是很新,但是这方法跟这之前的yolo-6D有啥区别呢?都是用cell,都是预测的偏移,都是用的PnP,就名字起的好,这个比yolo-6D多了个分割,就是预测的时候只计算分割mask部分,就这个改动,这也能中了?