-
我们建议使用Anaconda通过运行以下命令创建一个名为
captra
dedicated for this repository 的环境:[hidecontent type="logged" desc="隐藏内容:登录后可查看"]
-
-
conda create -n captra python=3.7 conda activate captra
-
为代码、数据和实验检查点创建一个目录。
mkdir captra && cd captra
-
克隆存储库
git clone https://github.com/HalfSummer11/CAPTRA.git cd CAPTRA
-
安装依赖项。
pip install -r requirements.txt
-
为 PointNet++ 主干编译 CUDA 代码。
cd network/models/pointnet_lib python setup.py install
数据集
-
为下面的所有数据集创建一个目录
captra
mkdir data && cd data
- 如果将它放在不同的位置,请确保指向您的数据
basepath
集。CAPTRA/configs/obj_config/obj_info_*.yml
- 如果将它放在不同的位置,请确保指向您的数据
NOCS-REAL275
mkdir nocs_data && cd nocs_data
测试
-
下载并解压nocs_model_corners.tar,其中保存了标准化对象模型的 3D 边界框。
wget http://download.cs.stanford.edu/orion/captra/nocs_model_corners.tar tar -xzvf nocs_real_corners.tar
-
创建
nocs_full
以保存原始 NOCS 数据。从原始NOCS数据集中下载并解压“Real Dataset - Test” ,其中包含6个真实测试轨迹。mkdir nocs_full && cd nocs_full wget http://download.cs.stanford.edu/orion/nocs/real_test.zip unzip real_test.zip
-
生成并运行预处理脚本
cd CAPTRA/datasets/nocs_data/preproc_nocs # generate the script for data preprocessing # parallel & num_proc specifies the number of parallel processes in the following procedure python generate_all.py --data_path ../../../../data/nocs_data --data_type=test_only \ --parallel --num_proc=10 > nocs_preproc.sh # the actual data preprocessing bash nocs_preproc.sh
-
经过上述步骤后,该文件夹应该看起来像File Structure - Dataset Folder Structure。
火车
-
从下面的原始 NOCS 数据集中下载并解压“CAMERA Dataset - Training/Test”和“Real Dataset - Training ”
nocs_data/nocs_full
# current path relative to project root (captra): data/nocs_data/nocs_full wget http://download.cs.stanford.edu/orion/nocs/camera_train.zip unzip camera_train.zip wget http://download.cs.stanford.edu/orion/nocs/camera_val25K.zip unzip camera_val25K.zip wget http://download.cs.stanford.edu/orion/nocs/real_train.zip unzip real_train.zip
-
到此为止,
nocs_full
结构应该如下。请注意,深度图像 (*_depth.png
) 仅包含合成前景对象。出于我们的目的,我们需要一个包含合成前景和真实背景的完整深度图像。nocs_full ├── real_test ├── real_train ├── train │ ├── 00000 │ │ ├── 0000_color.png, 0000_coord.png, 0000_depth.png, 0000_mask.png, 0000_meta.txt │ │ ├── 0001_color.png, ... │ │ └── ... │ ├── 00001 │ └── ... └── val # same structure as train
-
-
从原始 NOCS 数据集中下载并解压“CAMERA Dataset - Composed_depths ”
nocs_data
。cd ../ # current path relative to project root (captra): data/nocs_data wget http://download.cs.stanford.edu/orion/nocs/camera_composed_depth.zip unzip camera_composed_depth.zip
这将生成一个名为 的文件夹
camera_full_depths
,其结构如下。camera_full_depths ├── train │ ├── 00000 │ │ ├── 0000_composed.png # depth image containing both synthetic foreground objects │ │ │ # and the real background │ │ ├── 0001_composed.png # rendered object normalized coordinates │ │ └── ... │ ├── 00001 │ └── ... └── val # same structure as train
然后复制
camera_full_depths
合并nocs_full
.# merge camera_full_depth/train/????? to nocs_full/train/????? rsync -arv camera_full_depths/ nocs_full/ rm -r camera_full_depths
-
生成并运行预处理脚本
cd CAPTRA/datasets/nocs_data/preproc_nocs python generate_all.py --data_path ../../../../data/nocs_data --data_type=all --parallel --num_proc=10 > nocs_preproc_all.sh # generate the script for data preprocessing # parallel & num_proc specifies the number of parallel processes in the following procedure bash nocs_preproc_all.sh # the actual data preprocessing
-
经过上述步骤后,文件夹应该看起来像[文件结构 - 数据集文件夹结构](#File Structure)。
SAPIEN 合成铰接对象数据集
mkdir sapien_data && cd sapien_data
测试
-
下载并解压对象 URDF 模型和测试轨迹
wget http://download.cs.stanford.edu/orion/captra/sapien_urdf.tar wget http://download.cs.stanford.edu/orion/captra/sapien_test.tar tar -xzvf sapien_urdf.tar # urdf tar -xzvf sapien_test.tar # render_seq
火车
-
下载并解压训练数据。
wget http://download.cs.stanford.edu/orion/captra/sapien_train.tar tar -xzvf sapien_train.tar # render
测试与评估
下载预训练模型检查点
-
runs
在下面创建一个文件夹captra
用于实验mkdir runs && cd runs
-
下载我们的预训练模型检查点
- NOCS-REAL275: nocs_ckpt.tar
- SAPIEN 合成关节物体数据集:sapien_ckpt.tar
-
解压它们
runs
tar -xzvf nocs_ckpt.tar
哪个应该给
runs ├── 1_bottle_rot # RotationNet for the bottle category ├── 1_bottle_coord # CoordinateNet for the bottle category ├── 2_bowl_rot └── ...
测试
-
要为某个类别生成姿势预测,请运行相应的脚本
CAPTRA/scripts/track
(没有进一步说明,所有脚本都从运行CAPTRA
),例如,对于来自 NOCS-REAL275 的瓶子类别,bash scripts/track/nocs/1_bottle.sh
-
预测的姿势将保存在实验文件夹下
1_bottle_rot
(参见文件结构 - 实验文件夹结构)。 -
要测试 SAPIEN 中关节物体的跟踪速度,请务必
--batch_size=1
在脚本中进行设置。您可以使用--dataset_length=500
to avoid running through the whole test set。
评估
-
要评估上一步中产生的姿势预测,请取消注释并运行中的相应行
CAPTRA/scripts/eval.sh
,例如,对于来自 NOCS-REAL275 的瓶子类别,相应行是python misc/eval/eval.py --config config_track.yml --obj_config obj_info_nocs.yml --obj_category=1 --experiment_dir=../runs/1_bottle_rot
可视化
-
要将姿势预测可视化为 3D 边界框,请运行 中的相应行
CAPTRA/scripts/visualize.sh
,例如对于 NOCS-REAL275,运行以下命令将为所有类别生成边界框。python misc/visualize/visualize_tracking_nocs.py --img_path ../data/nocs_data/nocs_full/real_test --exp_path ../runs --output_path ../nocs_viz --save_fig
训练
-
要为特定类别训练 CoordinateNet 和 RotationNet,请运行 中的相应脚本
CAPTRA/scripts/train
,例如对于来自 NOCS-REAL275 的瓶子类别,脚本可以在 中找到CAPTRA/scripts/train/nocs/1_bottle.sh
。# RotationNet python network/train.py --config=config_rotnet.yml --obj_config=obj_info_nocs.yml \ --pose_perturb/r=5.0 --pose_perturb/t=0.03 --pose_perturb/s=0.02 \ --batch_size=12 \ --obj_category=1 \ --experiment_dir=../runs/1_bottle_rot_new \ --use_val=real_test \ --num_workers=2 # CoordinateNet python network/train.py --config=config_coordnet.yml --obj_config=obj_info_nocs.yml \ --pose_perturb/r=5.0 --pose_perturb/t=0.03 --pose_perturb/s=0.02 \ --batch_size=12 \ --obj_category=1 \ --experiment_dir=../runs/1_bottle_coord_new \ --use_val=real_test \ --num_workers=2
-
输出日志和检查点将分别保存在
1_bottle_rot_new/log
、1_bottle_rot_new/ckpt
。(参见 [文件结构 - 实验文件夹结构](#File Structure))。 -
对于 NOCS 数据集,在使用合成数据训练模型后,我们可以使用真实训练数据进一步微调它们。为此,只需在训练脚本中替换
train.py
为。train_nocs_finetune.py
使用--syn_n
和--real_only
调整每个时期使用的真实/合成训练数据的比例。
文件结构
总体结构
工作目录应按如下方式组织。
captra ├── CAPTRA # this repository ├── data # datasets │ ├── nocs_data # NOCS-REAL275 │ └── sapien_data # synthetic dataset of articulated objects from SAPIEN └── runs # folders for individual experiments ├── 1_bottle_coord ├── 1_bottle_rot └── ...
-
[/hidecontent]
-
-
我们建议使用Anaconda通过运行以下命令创建一个名为
captra
dedicated for this repository 的环境: -