This is a fork from PyTorch-Encoding (refer to it for the original README). In this repository, we use DANet to train a part segmentation model on COCO Densepose Dataset, for use in our person re-identification paper EANet.
First install prerequsites as this instruction.
Then clone this project
git clone https://github.com/huanghoujing/PyTorch-Encoding.git
We transform COCO Densepose Dataset as described in paper EANet. For details, please refer to scripts/coco_part
. Note that import and data paths in these scripts are not re-arranged and will cause error when executed.
The resulting segmentation dataset can be downloaded from Baidu Cloud or Google Drive.
Prepare the dataset to have following structure
${project_dir}/dataset/coco_part
images
masks_7_parts
masks -> masks_7_parts # This is a link created by `ln -s masks_7_parts masks`
train.txt
train_market1501_cuhk03_duke_style.txt
val.txt
Download our trained model (Baidu Cloud or Google Drive) to ${project_dir}/exp/EANet_paper_ps_model/model_best.pth.tar
.
Specify your image directory dir_of_im_to_vis
and an output directory vis_save_dir
in the following command. It will select at most max_num_vis
images to infer and save the visualization.
CUDA_VISIBLE_DEVICES=0 \
python experiments/coco_part/train.py \
--dir_of_im_to_vis YOUR_IMAGE_DIRECTORY \
--vis_save_dir OUTPUT_DIRECTORY \
--resume exp/EANet_paper_ps_model/model_best.pth.tar \
--only-vis \
--max_num_vis 128
misc/example_visualization.png
is an example result.
Specify your image directory dir_of_im_to_infer
and an output directory infer_save_dir
in the following command. Prediction will be saved to infer_save_dir
, with same sub paths as original images.
CUDA_VISIBLE_DEVICES=0 \
python experiments/coco_part/train.py \
--resume exp/EANet_paper_ps_model/model_best.pth.tar \
--only-infer \
--dir_of_im_to_infer YOUR_IMAGE_DIRECTORY \
--infer_save_dir OUTPUT_DIRECTORY
For each image, the prediction is saved as a single-channel PNG image, with the same resolution as the input image. Each pixel value of the output image is its part label. Refer to this link for part index. Optionally, you can use script experiments/coco_part/colorize_pred_mask.py
to colorize the predicted masks for visualization.
The following command validates on val set, with single scale and flipping, but without cropping. You should get result pixAcc: 0.9034, mIoU: 0.6670
.
CUDA_VISIBLE_DEVICES=0 \
python experiments/coco_part/train.py \
--resume exp/EANet_paper_ps_model/model_best.pth.tar \
--only-val
Since person images are much smaller compared with other segmentation tasks, we can use a single GPU while maintaining a large batch size. For example, when we set batch size to 16, the GPU usage is about 5600MB.
CUDA_VISIBLE_DEVICES=0 \
python experiments/coco_part/train.py \
--norm_layer bn \
--train-split train \
--batch-size 16 \
--test-batch-size 16 \
--exp_dir exp/train
You can also try multi GPUs and synchronized BN by setting norm_layer
to sync_bn
CUDA_VISIBLE_DEVICES=0,1 \
python experiments/coco_part/train.py \
--norm_layer sync_bn \
--train-split train \
--batch-size 16 \
--test-batch-size 16 \
--exp_dir exp/train
If you find our work useful, please kindly cite our paper:
@article{huang2018eanet,
title={EANet: Enhancing Alignment for Cross-Domain Person Re-identification},
author={Huang, Houjing and Yang, Wenjie and Chen, Xiaotang and Zhao, Xin and Huang, Kaiqi and Lin, Jinbin and Huang, Guan and Du, Dalong},
journal={arXiv preprint arXiv:1812.11369},
year={2018}
}