# RAP
**Repository Path**: handsome1ang/RAP
## Basic Information
- **Project Name**: RAP
- **Description**: A Richly Annotated Pedestrian Dataset for Person Retrieval in Real Surveillance Scenarios
- **Primary Language**: Matlab
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2019-05-07
- **Last Updated**: 2021-11-03
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# A Richly Annotated Pedestrian Dataset for Person Retrieval in Real Surveillance Scenarios
## Preparation
**Prerequisite: Caffe, Python 2.7 and Matlab.**
1. Install [Caffe](https://github.com/dangweili/caffe), Python 2.7 and Maltab.
2. Download and prepare the dataset as follow:
RAP [Links](https://drive.google.com/open?id=1hoPIB5NJKf3YGMvLFZnIYG5JDcZTxHph)
```
./data/RAP_annotation/RAP_annotation.mat
./data/RAP_dataset/*.png
```
if you want to use body parts for attribute recognition, please exec this command to generate body part images.
```
cd data
matlab -nodisplay -r 'rap2_part_extraction'
```
3. Download the imagenet pretrained models.
ImageNet pretrained models which is used in finetuning [Baiduyun](https://pan.baidu.com/s/1IxZ6GrAFSfhT9Ipa7a-Zuw) or [GoogleDrive](https://drive.google.com/open?id=14p0MLyAdsoGaqfSGvj-IH59Ifo2Ojjqp).
## Pedestrian Attribute Recognition
1. SVM-based models
a. feature extraction, including ELF and pretrained CNN features:
```
cd features/ELF-v2.0-Descriptor
matlab -nodisplay -r 'Feature_Extraction_elf'
matlab -nodisplay -r 'Feature_PCA_elf'
```
download pretrained CNN models and run the follow commands to extract cnn features.
```
cd features/CNN-v1.0-Descriptor
matlab -nodisplay -r 'imagenet_feature_extraction_caffenet_single'
matlab -nodisplay -r 'imagenet_feature_extraction_resnet_single'
matlab -nodisplay -r 'imagenet_feature_extraction_caffenet_parts' [optional]
matlab -nodisplay -r 'imagenet_feature_extraction_resnet_parts' [optional]
```
compile the liblinear
```
cd person-attribute/utils/liblinear-master/matlab
matlab -nodisplay -r 'make'
```
b. use svm to train attribute classifiers
training: mixture clean and occlusion data, test: mixture clean and occlusion data.
```
cd person-attribute/baseline-svm
matlab -nodisplay -r 'v1_fullbody_analysis_mm' [one types of features]
matlab -nodisplay -r 'v1_fullbody_analysis_mm_test' [all types of features]
matlab -nodisplay -r 'v1_fullbody_analysis_mm_statistic' [summary the results]
```
c. analysis of viewpoint
training: maxture clean and occlusion data, test: mixture clean and occlusion data.
```
cd person-attribute/baseline-svm
matlab -nodisplay -r 'v2_fullbody_analysis_mm_viewpoint'
matlab -nodisplay -r 'v2_fullbody_analysis_mm_viewpoint_statistic'
```
training: clean, test: clean
```
cd person-attribute/baseline-svm
matlab -nodisplay -r 'v2_fullbody_analysis_cc'
matlab -nodisplay -r 'v2_fullbody_analysis_cc_viewpoint'
```
d. analysis of occlusion
occlusion positions and types: training: clean, test: occlusion
```
cd person-attribute/baseline-svm
matlab -nodisplay -r 'v3_fullbody_analysis_co_test'
matlab -nodisplay -r 'v3_fullbody_analysis_co_test_personvspersons'
```
e. analysis of body parts
```
cd person-attribute/baseline-svm
matlab -nodisplay -r 'v4_parts_analysis_cc'
matlab -nodisplay -r 'v4_parts_analysis_cc_test'
```
2. CNN-based models
a. prepare the data splits.
```
cd person-attribute/static
matlab -nodisplay -r 'prepare_data'
matlab -nodisplay -r 'prepare_data_parts'
matlab -nodisplay -r 'prepare_data_binary'
```
b. train the deep attribute classifiers with deepmar based on CaffeNet.
For deepmar, acn, and their single attribute versions, the operators are in similar format.
```
cd person-attribute/baseline-deepmar
sh train_caffenet.sh
sh test_caffenet.sh
```
## Attribute-based Person Retrieval
The product of multiple attributes' prediction probability are used for person retrieval.
1. generate the attributes for attribute-based person retrieval.
```
cd person-attribute/baseline-search
matlab -nodisplay -r 'generate_multiquery_index'
matlab -nodisplay -r 'generate_query_names'
python generate_query_names.py
```
2. generate the attribute score based on the trained models
```
cd person-attribute/baseline-search
matlab -nodisplay -r 'generate_svm_score'
python generate_cnn_score.py
python generate_cnn_score_binary.py
```
3. evaluate the attribute-based person retrieval
```
cd person-attribute/baseline-search
matlab -nodisplay -r 'evaluate_multiquery_attributes'
```
## Person Re-identification
1. hand-crafted features/pretrained cnn features with L2/XQDA/KISSME
a. feature extraction, incluidng ELF, LOMO, GOG (window), JSTL
```
cd features/ReID_GOG_v1.01
matlab -nodisplay -r 'Feature_Extraction_gog'
cd features/CNN-v1.0-Descriptor
matlab -nodisplay -r 'jstl_feature_extraction_single'
cd features/LOMO_XQDA/code
matlab -nodisplay -r 'Feature_Extraction_lomo'
```
b. feature evaluation
```
cd person-reid/evaluation
matlab -nodisplay -r 'rap2_evaluation_features'
```
2. end-to-end feature learning
a. generate the data split file for training.
```
cd person-reid/static
matlab -nodisplay -r 'generate_att_trainval_test'
matlab -nodisplay -r 'generate_ide_trainval_test'
matlab -nodisplay -r 'generate_ide_att_trainval_test'
matlab -nodisplay -r 'generate_ide_att_trainvaltest'
```
b. training with only ID classification loss, such as CaffeNet, ResNet50/ResNet101/ResNet152, DenseNet121, MSCAN.
```
cd person-reid/baseline-IDE
sh train_caffenet.sh
```
c. training with only attribute classification loss
```
cd person-reid/baseline-att
sh train_caffenet.sh
sh test_caffenet.sh [optional for attribute classification]
```
d. training with attribute and ID classification losses
```
cd person-reid/baseline-IDE-att
sh train_caffenet.sh
sh test_caffenet.sh [optional for attribute classification]
```
e. deep feature extraction and evaluation.
```
cd person-reid/evaluation
sh rap2_feature_extraction_resnet.sh [one model per time]
matlab -nodisplay -r 'rap2_test' [one model per time]
```
3. cross-day person retrieval
a. person retrieval in the same day as query or the different day as query.
```
cd person-reid/evaluation
matlab -nodisplay -r 'rap2_test_control_single_cross'
```
b. person retrieval from different day as query. The appearance would be partially different for the same person across different days.
```
cd person-reid/evaluation
matlab -nodisplay -r 'rap2_test_control_single_cross_quantively'
```
4. identity-level attribute vs. instance-level attributes for person re-identification.
a. generate identity-level attributes from instance-level attributes for training.
```
cd person-reid/static
matlab -nodisplay -r 'generate_ide_att_trainval_test_control'
```
b. train: instance-level attributes. The default setup.
```
cd person-reid/baseline-IDE-att
sh train_caffenet.sh
```
c. train: identity-level attributes.
```
cd person-reid/baseline-IDE-att-control
sh train_caffenet.sh
```
d. feature extraction and evaluation.
```
cd person-reid/evaluation
sh rap2_reid_extraction_resnet_control_identity_instance.sh
matlab -nodisplay -r 'rap2_test_control_identity_identity'
matlab -nodisplay -r 'rap2_test_control_identity_instance'
matlab -nodisplay -r 'rap2_test_control_instance_identity'
```
## Citation
Please cite this paper in your publications if it helps your research:
```
@article{li2018richly,
title={A Richly Annotated Pedestrian Dataset for Person Retrieval in Real Surveillance Scenarios},
author={Li, Dangwei and Zhang, Zhang and Chen, Xiaotang and Huang, Kaiqi},
journal={IEEE Transactions on Image Processing},
volume={28},
number={4},
pages={1575--1590},
year={2019},
publisher={IEEE}
}
```