Spark 是用于大规模数据处理的统一分析引擎。它提供了 Scala、Java、Python 和 R 的高级 API,以及支持用于数据分析的通用计算图的优化引擎。它还支持一组丰富的高级工具,包括用于 SQL 和 DataFrames 的 Spark SQL、用于 pandas 工作负载的 Spark 上的 pandas API、用于机器学习的 MLlib、用于图形处理的 GraphX 以及用于流处理的 Structured Streaming。
[hidecontent type="logged" desc="隐藏内容:登录后可查看"]
我们建议使用Anaconda通过运行以下命令创建一个名为captra
dedicated for this repository 的环境:
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
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)。
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
下载我们的预训练模型检查点
解压它们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]