diff --git a/README.md b/README.md index 667400166278aaf3b81bf1a35c45a89380981da5..6d04147cedd912f77437de728bdcdbfafc116b50 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ This repository is the implementation code of the paper "DenseFusion: 6D Object ## Requirements -* Python 2.7/3.5/3.6 (No strict requirements for the Python version. Small changes of some print functions might be enough to switch between different versions.) +* Python 2.7/3.5/3.6 (If you want use Python2.7 to run this repo, please rebuild the `lib/knn/` (with PyTorch 0.4.1).) * [PyTorch 0.4.1](https://pytorch.org/) * PIL * scipy diff --git a/download.sh b/download.sh index 5dec465d5c7207965a44c0d822fa975b0c715f30..707c73ec7023e8adb19d4660c8d25cb706d90f53 100644 --- a/download.sh +++ b/download.sh @@ -1,27 +1,29 @@ # Download the datasets and checkpoints +if [ ! -d datasets/ycb/YCB_Video_Dataset ];then echo 'Downloading the YCB-Video Dataset' +wget --load-cookies /tmp/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=1if4VoEXNx9W3XCn0Y7Fp15B4GpcYbyYi' -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p')&id=1if4VoEXNx9W3XCn0Y7Fp15B4GpcYbyYi" -O YCB_Video_Dataset.zip && rm -rf /tmp/cookies.txt \ +&& unzip YCB_Video_Dataset.zip \ +&& mv YCB_Video_Dataset/ datasets/ycb/ \ +&& rm YCB_Video_Dataset.zip +fi -wget --load-cookies /tmp/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=1if4VoEXNx9W3XCn0Y7Fp15B4GpcYbyYi' -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p')&id=1if4VoEXNx9W3XCn0Y7Fp15B4GpcYbyYi" -O YCB_Video_Dataset.zip && rm -rf /tmp/cookies.txt -unzip YCB_Video_Dataset.zip -mv YCB_Video_Dataset/ datasets/ycb/ -rm YCB_Video_Dataset.zip - +if [ ! -d datasets/linemod/Linemod_preprocessed ];then echo 'Downloading the preprocessed LineMOD dataset' +wget --load-cookies /tmp/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=1YFUra533pxS_IHsb9tB87lLoxbcHYXt8' -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p')&id=1YFUra533pxS_IHsb9tB87lLoxbcHYXt8" -O Linemod_preprocessed.zip && rm -rf /tmp/cookies.txt \ +&& unzip Linemod_preprocessed.zip \ +&& mv Linemod_preprocessed/ datasets/linemod/ \ +&& rm Linemod_preprocessed.zip +fi -wget --load-cookies /tmp/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=1YFUra533pxS_IHsb9tB87lLoxbcHYXt8' -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p')&id=1YFUra533pxS_IHsb9tB87lLoxbcHYXt8" -O Linemod_preprocessed.zip && rm -rf /tmp/cookies.txt -unzip Linemod_preprocessed.zip -mv Linemod_preprocessed/ datasets/linemod/ -rm Linemod_preprocessed.zip - +if [ ! -d trained_checkpoints ];then echo 'Downloading the trained checkpoints...' - -wget --load-cookies /tmp/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=1bQ9H-fyZplQoNt1qRwdIUX5_3_1pj6US' -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p')&id=1bQ9H-fyZplQoNt1qRwdIUX5_3_1pj6US" -O trained_checkpoints.zip && rm -rf /tmp/cookies.txt -unzip trained_checkpoints.zip -echo 'Copying trained checkpoints to trained_models/' -cp trained_checkpoints/ycb/*.pth trained_models/ycb/ -cp trained_checkpoints/linemod/*.pth trained_models/linemod/ -rm trained_checkpoints.zip -rm -r trained_checkpoints/ +wget --load-cookies /tmp/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=1bQ9H-fyZplQoNt1qRwdIUX5_3_1pj6US' -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p')&id=1bQ9H-fyZplQoNt1qRwdIUX5_3_1pj6US" -O trained_checkpoints.zip && rm -rf /tmp/cookies.txt \ +&& unzip trained_checkpoints.zip -x "__MACOSX/*" "*.DS_Store" "*.gitignore" -d trained_checkpoints \ +&& mv trained_checkpoints/trained*/ycb trained_checkpoints/ycb \ +&& mv trained_checkpoints/trained*/linemod trained_checkpoints/linemod \ +&& rm -r trained_checkpoints/trained*/ \ +&& rm trained_checkpoints.zip +fi echo 'done' \ No newline at end of file diff --git a/experiments/scripts/eval_linemod.sh b/experiments/scripts/eval_linemod.sh index fc806a1242507ec6f79a8b7cab897567954edf62..2c289eedf3c7c1a64ef605a53fefc952e6f270af 100644 --- a/experiments/scripts/eval_linemod.sh +++ b/experiments/scripts/eval_linemod.sh @@ -6,6 +6,6 @@ set -e export PYTHONUNBUFFERED="True" export CUDA_VISIBLE_DEVICES=0 -python ./tools/eval_linemod.py --dataset_root ./datasets/linemod/Linemod_preprocessed\ - --model pose_model_9_0.01310166542980859.pth\ - --refine_model pose_refine_model_493_0.006761023565178073.pth \ No newline at end of file +python3 ./tools/eval_linemod.py --dataset_root ./datasets/linemod/Linemod_preprocessed\ + --model trained_checkpoints/linemod/pose_model_9_0.01310166542980859.pth\ + --refine_model trained_checkpoints/linemod/pose_refine_model_493_0.006761023565178073.pth \ No newline at end of file diff --git a/experiments/scripts/eval_ycb.sh b/experiments/scripts/eval_ycb.sh index a4c12a010c05df816729bd655833258317feebcb..1db2ce5b7d58a90ec3c7392fec9f271dc58e6efa 100644 --- a/experiments/scripts/eval_ycb.sh +++ b/experiments/scripts/eval_ycb.sh @@ -15,6 +15,6 @@ if [ ! -d YCB_Video_toolbox ];then cp replace_ycb_toolbox/*.m YCB_Video_toolbox/ fi -python ./tools/eval_ycb.py --dataset_root ./datasets/ycb/YCB_Video_Dataset\ - --model pose_model_26_0.012863246640872631.pth\ - --refine_model pose_refine_model_69_0.009449292959118935.pth \ No newline at end of file +python3 ./tools/eval_ycb.py --dataset_root ./datasets/ycb/YCB_Video_Dataset\ + --model trained_checkpoints/ycb/pose_model_26_0.012863246640872631.pth\ + --refine_model trained_checkpoints/ycb/pose_refine_model_69_0.009449292959118935.pth \ No newline at end of file diff --git a/experiments/scripts/train_linemod.sh b/experiments/scripts/train_linemod.sh index 5697159db5bca594a44543c99672469f9b4f6465..b7f86b496a9797447c0c78aaea031d283749b3a1 100644 --- a/experiments/scripts/train_linemod.sh +++ b/experiments/scripts/train_linemod.sh @@ -6,5 +6,5 @@ set -e export PYTHONUNBUFFERED="True" export CUDA_VISIBLE_DEVICES=0 -python ./tools/train.py --dataset linemod\ +python3 ./tools/train.py --dataset linemod\ --dataset_root ./datasets/linemod/Linemod_preprocessed \ No newline at end of file diff --git a/experiments/scripts/train_ycb.sh b/experiments/scripts/train_ycb.sh index 449da49e6b10bd4ad19cedacdf94ba8f361ba98e..a3cfb8f8cd43014ff912bd22d0887af446ffd0ed 100644 --- a/experiments/scripts/train_ycb.sh +++ b/experiments/scripts/train_ycb.sh @@ -6,5 +6,5 @@ set -e export PYTHONUNBUFFERED="True" export CUDA_VISIBLE_DEVICES=0 -python ./tools/train.py --dataset ycb\ +python3 ./tools/train.py --dataset ycb\ --dataset_root ./datasets/ycb/YCB_Video_Dataset \ No newline at end of file diff --git a/tools/eval_linemod.py b/tools/eval_linemod.py index 3bd949b45e3e1d13086923825d54a58081707707..c07dcdf52b4ec75a5885cde41143d34616c3dca5 100644 --- a/tools/eval_linemod.py +++ b/tools/eval_linemod.py @@ -30,7 +30,6 @@ objlist = [1, 2, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15] num_points = 500 iteration = 2 dataset_config_dir = 'datasets/linemod/dataset_config' -trained_models_dir = 'trained_models/linemod' output_result_dir = 'experiments/eval_result/linemod' @@ -38,8 +37,8 @@ estimator = PoseNet(num_points = num_points, num_obj = num_objects) estimator.cuda() refiner = PoseRefineNet(num_points = num_points, num_obj = num_objects) refiner.cuda() -estimator.load_state_dict(torch.load('{0}/{1}'.format(trained_models_dir, opt.model))) -refiner.load_state_dict(torch.load('{0}/{1}'.format(trained_models_dir, opt.refine_model))) +estimator.load_state_dict(torch.load(opt.model)) +refiner.load_state_dict(torch.load(opt.refine_model)) estimator.eval() refiner.eval() diff --git a/tools/eval_ycb.py b/tools/eval_ycb.py index 39833471b5a87809100609ee8cf3124980a8e2f1..515a2eacb0c2bb318866004c25d850a88d915ab2 100644 --- a/tools/eval_ycb.py +++ b/tools/eval_ycb.py @@ -50,7 +50,6 @@ dataset_config_dir = 'datasets/ycb/dataset_config' ycb_toolbox_dir = 'YCB_Video_toolbox' result_wo_refine_dir = 'experiments/eval_result/ycb/Densefusion_wo_refine_result' result_refine_dir = 'experiments/eval_result/ycb/Densefusion_iterative_result' -trained_models_dir = 'trained_models/ycb' def get_bbox(posecnn_rois): rmin = int(posecnn_rois[idx][3]) + 1 @@ -92,12 +91,12 @@ def get_bbox(posecnn_rois): estimator = PoseNet(num_points = num_points, num_obj = num_obj) estimator.cuda() -estimator.load_state_dict(torch.load('{0}/{1}'.format(trained_models_dir, opt.model))) +estimator.load_state_dict(torch.load(opt.model)) estimator.eval() refiner = PoseRefineNet(num_points = num_points, num_obj = num_obj) refiner.cuda() -refiner.load_state_dict(torch.load('{0}/{1}'.format(trained_models_dir, opt.refine_model))) +refiner.load_state_dict(torch.load(opt.refine_model)) refiner.eval() testlist = []