Awesome
Calibrating_count
The code for ICCV2023 paper: Calibrating Uncertainty for Semi-Supervised Crowd Counting
Semi-supervised crowd counting is an important yet challenging task. A popular approach is to iteratively generate pseudo-labels for unlabeled data and add them to the training set. The key is to use uncertainty to select reliable pseudo-labels. In this paper, we propose a novel method to calibrate model uncertainty for crowd counting. Our method takes a supervised uncertainty estimation strategy to train the model through a surrogate function. This ensures the uncertainty is well controlled throughout the training. We propose a matching-based patch-wise surrogate function to better approximate uncertainty for crowd counting tasks. The proposed method pays a sufficient amount of attention to details, while maintaining a proper granularity. Altogether our method is able to generate reliable uncertainty estimation, high quality pseudolabels, and achieve state-of-the-art performance in semisupervised crowd counting.
<p align="center"> <img src="crowd_count_git.png" alt="drawing" width="100%" /> </p>1. Environment setup
Using conda:
conda env create -f crowd_test.yml
2. Preparing dataset for ShanghaiTech Part-A
Download the ShanghaiTech Part-A dataset.
makedir part_A
move data into folder part_A
.
├── ...
├── part_A
│ ├── train_data
│ ├── test_data
│ └──
└── ...
makedir part_A/uncertain_data
makedir part_A/uncertain_label
makedir part_A/uncertain_test
makedir part_A/uncertain_data_5
makedir part_A/uncertain_data_10
makedir part_A/uncertain_data_40
python patch_gen_A.py # crop whole images into little patches.
python patch_move.py # move cropped patches into corresponding folders
2. Training and evaluating on 10% labeled ShanghaiTech Part-A
python train_semi_A.py --data_root ../CrowdCounting-P2PNet/part_A/ \
--dataset_file SHHA_partial \
--epochs 1000 \
--lr_drop 3500 \
--output_dir ./res/SHHA/logs \
--checkpoints_dir ./res/SHHA/weights \
--tensorboard_dir ./res/SHHA/logs \
--lr 0.0001 \
--lr_backbone 0.00001 \
--batch_size 8 \
--eval_freq 1 \
--gpu_id 1 \
--un_weight 0.3 \
--end_pro 0.4 \
--label_pro 10
end_pro here is the confidence threshold (1-uncertainty) label_pro is the proportion of labeled data (10 for 10%. 5 for 5%, 40 for 40%)
The pretrained VGG weights can be downloaded from https://download.pytorch.org/models/vgg16_bn-6c64b313.pth