PoseCNN阅读笔记
这几天在开题,索性把以前看过的,没看过的或者看了之后忘记的论文再看一遍,记录一下。
PoseCNN: A Convolutional Neural Network for 6D Object Pose Estimation in Cluttered Scenes
1. 摘要
- 通过确定物体在图片中的中心,并且预测距离相机的距离来估计T,通过回归一个四元数来得到R。
- 提出YCB-Video数据集,21个物体,92段视频,133827帧。
- 新颖的损失函数,处理对称物体的
- 网络是输入rgb图的,如果输入depth图优化pose,可以达到SOTA
- 开源地址
2. 简介
PoseCNN干三个工作:
- 预测每个像素的label
- 预测每个物体的在图片中的中心(所有像素投票)
- 预测中心距离相机的距离,在已知相机内参的情况下,可以计算出T
R的预测是一个四元数。
3. PoseCNN
大前提,3Dmodel可获得,物体坐标系是定义在3d model坐标系下的。
网络结构分为两阶段:
- 提取特征
- 估计
语义分割的输出是n channels,n代表类别。
估计T的时候,不使用直接回归,直接回归不好得出结果,且无法处理多物体。所以估计中心,也就是物体中心的2d投影,然后估计深度,这样就可以通过计算得出T。
f和p都是相机内参。
估计中心的时候使用的是多像素投票,输出的是3xn维度的,xy以及距离。
然后使用上面两支一起输入Hough voting layer计算中心。如果同一张图中有多个同类物体,那么就NMS,然后用阈值选取合适的。
对于R,这个首先从霍夫变换后的结果得到一个bbox,提取bbox中的特征RoI pooling,然后直接回归出一个四元数
(可以百度如何表达旋转,不常见。
语义分割对比bbox
更好的处理遮挡,提供更丰富的信息。
4. 损失函数
一个是普通的,另一个就是对称损失函数,先看第一个,比较简单
两个R分别代表GT和由四元数计算出来的R,就是对3d模型的每个点,求L2损失。(这里需要使用3维模型)
对称损失函数
选取的是不同的点,也就是最近的点,感觉会有问题?比如哪些点选过,哪些没有选过。需要说明一点,这个是在对应的类别上才采用,具体还要看代码。
5. 数据集的制作
没什么意思就不说了,用就好了
6. 实验
这里记录下ADD这个指标是怎么评定的。
这个一般和一个阈值一起使用,阈值是物体3D模型的直径乘一个百分数,比如百分之十。
对称物体的评定指标
还有一个指标是reprojection error
,是投影之后计算。