LSC-CNN
This repository is the pytorch implementation for the crowd counting model, LSC-CNN, proposed in the paper - Locate, Size and Count: Accurately Resolving People in Dense Crowds via Detection.
If you find this work useful in your research, please consider citing the paper:
@article{LSCCNN20,
Author = {Sam, Deepak Babu and Peri, Skand Vishwanath and Narayanan Sundararaman, Mukuntha, and Kamath, Amogh and Babu, R. Venkatesh},
Title = {Locate, Size and Count: Accurately Resolving People in Dense Crowds via Detection},
Journal = {IEEE Transactions on Pattern Analysis and Machine Intelligence},
Year = {2020}
}
Requirements
We strongly recommend to run the codes in NVidia-Docker. Install both docker
and nvidia-docker
(please find instructions from their respective installation pages).
After the docker installations, pull pytorch docker image with the following command:
docker pull nvcr.io/nvidia/pytorch:18.04-py3
and run the image using the command:
nvidia-docker run --rm -ti --ipc=host nvcr.io/nvidia/pytorch:18.04-py3
Further software requirements are listed in requirements.txt
.
To install them type, pip install -r requirements.txt
The code has been run and tested on Python 3.6.3
, Ubuntu 14.04.5 LTS
and Cuda 9.0, V9.0.176
.
Please NOTE that Python 2.7
is not supported and the code would ONLY work on Python 3
versions.
Dataset Download
Download Shanghaitech dataset from here. Download UCF-QNRF dataset from here.
Place the dataset in ../dataset/
folder. (dataset
and lsc-cnn
folders should have the same parent directory). So the directory structure should look like the following:
-- lsc-cnn
-- network.py
-- main.py
-- ....
-- dataset
--STpart_A
-- test_data
-- ground-truth
-- images
-- train_data
-- ground-truth
-- images
--UCF-QNRF
--train_data
-- ...
--test_data
-- ...
Pretrained Models
The pretrained models for testing can be downloaded from here.
For evaluating on any pretrained model, place the corresponding models
from the aforementioned link to lsc-cnn
folder and follow instructions in Testing section.
Usage
Clone the repository.
git clone https://github.com/val-iisc/lsc-cnn.git
cd lsc-cnn
pip install -r requirements.txt
Download models
folders to lsc-cnn
.
Download Imagenet pretrained VGG weights from here (Download the imagenet_vgg_weights
folder) and place it in the parent directory of lsc-cnn
.
Preparing the Dataset
Run the following code to dump the dataset for lsc-cnn
python main.py --dataset="parta" --gpu=<gpu_number>
Warning : If the dataset is already prepared, this command would start the training!
Dataset dump size for ST_PartA is ~13 GB
, for QNRF is ~150 GB
, and for ST_PartB is ~35 GB
, so make sure there is sufficient disk space before training/testing.
Training
- For training
lsc-cnn
run:
python main.py --dataset="parta" --gpu=2 --start-epoch=0 --epochs=30
--dataset = parta / ucfqnrf / partb
--gpu = GPU number
--epochs = Number of epochs to train. [For QNRF set --epochs=50]
--patches = Number of patches to crop per image [For QNRF use --patches=30, for other crowd counting dataset default parameter --patches=100 works.]
Testing
For testing on Part-A
python main.py --dataset="parta" --gpu=2 --start-epoch=13 --epochs=13 --threshold=0.21
For testing on Part-B
python main.py --dataset="partb" --gpu=2 --start-epoch=24 --epochs=24 --threshold=0.25
For testing on QNRF
python main.py --dataset="ucfqnrf" --gpu=2 --start-epoch=46 --epochs=46 --threshold=0.20
-
All the metrics are displayed once the above code completes its run.
-
To do a threshold test, just remove the
--threshold
flag:
For example:
python main.py --dataset="parta" --gpu=2 --start-epoch=13 --epochs=13
Use the --mle
option to compute the mean localization error. If using MLE, compile the function first:
cd utils/mle_function
./script.sh
This generates an error_function.so
file in the ./lsc-cnn
directory which is used by main.py
for computing the MLE metric.
Test Outputs
Test outputs consist of box predictions for validation set at models/dump
and that of the test set at models/dump_test
.
Contact
For further queries, please mail at pvskand <at> protonmail <dot> com
.