hetolin / SAR-Net

Code for "SAR-Net: Shape Alignment and Recovery Network for Category-level 6D Object Pose and Size Estimation" CVPR2022
Apache License 2.0
70 stars 7 forks source link

如何处理得到camera_train_processed? #17

Closed kszpxxzmc closed 1 year ago

kszpxxzmc commented 1 year ago

目前想使用自己的数据集进行训练,但是暂且无法准确确认camera_train_processed以及{}_fps_36_normalized.obj是如何生成的?请问你们会发布这一部分的处理代码吗?

hetolin commented 1 year ago

camera_train_processed如果用制作自己的数据集,可以将模型导入blender,相机环绕拍摄,渲染深度图即可.然后根据相机pose和内参就可以得到了, 可以用blenderproc. {}_fps_36_normalized.obj可以用FPS算法对模型进行采点得到.

kszpxxzmc commented 1 year ago

camera_train_processed里面的'obsv.obj'有经过什么处理吗?还是说指的就是原本的OBJ模型?

kszpxxzmc commented 1 year ago

以及{}_fps_36_normalized.obj是从mean_shape中得到的吗,需要进行归一化吗?

hetolin commented 1 year ago

'obsv.obj'是直接通过相机内参将深度图投影成partial point cloud得到的; {}_fps_36_normalized.obj是随机从shape net中挑选一个的,mean shape也是可以的,需要归一化一下

mujiwob commented 3 months ago

你好,我在尝试用blenderproc来自制训练集,我参考blenderproc的例子得到了深度图和pose,我理解了'_obsv.obj'是将深度图转换为点云后随机采样的1024个点,'_SC.obj'是'_obsv.obj'轴对称得到的。我想请问一下'_SC.obj'做对称的轴是如何选取的?以及'_sOC.txt'和'_OS.txt'是如何得到的?看dataset.py中对它们的注释分别是Object Center和Object Size,但我不太理解里面数字代表的含义,希望能解答一下,谢谢!

hetolin commented 3 months ago

你好, _SC.obj对称轴问题: Step 1:将obsv pcd Nx3 (相机坐标系)通过左乘GT pose的逆(dataset.py Line59)变换到物体坐标系cano_pcd; Step 2:由于shapenet中类别物体在自身坐标系是统一canonicalized过的,类别级物体的对称轴一般是x/y/z轴。因此可以统一选取类级别的对称轴,比如shapnet中各种mug instances在物体坐标系都是绕x轴对称: 对于镜像对称物体:sym_pcd = cano_pcd.copy(); sym_pcd[:,0] = -sym_pcd[:,0]; 对于旋转对称物体如bottle,sym_pcd = np.dot(Rot_y(180˚),cano_pcd); Step 3: 然后再将sym_pcd左乘GT pose就可以得到相机坐标系下的对称点云('_SC.obj')。

_sOC.txt是(原始深度图转换为点云*尺度缩放因子s=_obsv.obj)(该参数SAR-Net暂时未用到)+obsv的中心cx,cy,cz;

_OS.txt是obsv的xyz方向上的尺寸,s_x,s_y,s_z。