# DPD
**Repository Path**: bvlc/DPD
## Basic Information
- **Project Name**: DPD
- **Description**: Deformable part descriptor project page
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2019-12-18
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
Deformable Part Descriptors (DPD)
===
This code accompanies the ICCV 2013 paper Deformable Part Descriptors for Fine-grained Recognition and Attribute Prediction.
===
User Configuration
[TODO: streamline these directory paths for minimal user setup]
in `dpd_set_up.m`:
```Matlab
scratchdir = /scratch %for KDES features, DPD features, etc
if strcmp(database, 'bird')
dataset_base = /path/to/CUB200-2011 %you edit this
elseif strcmp(database, 'cub200')
dataset_base = /path/to/CUB200-2010 %you edit this
elseif strcmp(database, 'human')
dataset_base = /path/to/berkeley-human-attributes-dataset %you edit this
end
```
===
Running DPD+DeCAF demos
Here's how to automatically classify CUB200-2011 birds using Deformable Part Descriptors with DeCAF convolutional features:
TODO: set scratch dir somewhere (env var?)
TODO: add scratch directory argument: dpd_decaf(dpd_scratch)
```Bash
#Option 1: run DPD+DeCAF in one line
./run_dpd_decaf.sh #this script does each step of DPD+DeCAF pipeline
#Option 2: run DPD+DeCAF steps one at a time
./extract_dpm_parts.sh #calls into ffld_dpm/build/ffld
./run_dpd_decaf_features.sh #DeCAF convnet features on DPM parts
matlab
>dpd_decaf; %weak pooling, SVM training, SVM classification
#dpd_decaf is hard-coded for this config: (weak pooling; CUB200_2011; trainAndTest).
# not too hard to modify, though.
```
===
Running DPD+KDES demos
Here's how to automatically classify CUB200-2011 birds using Deformable Part Descriptors with Kernel Descriptors (KDES):
```Matlab
matlab
>run_dpd('bird', 0, 0); %runs all images through each DPD pipeline step, in batch mode
%arguments: run_dpd_kdes('class', 0=weakPooling 1=strongPooling, 0=trainAndTest 1=trainOnly);
%assume: DPM part bounding boxes are already extracted and located in a subdirectory of dpd_scratch
```
===
Reorganizing directories
```Shell
move:
dpd_set_up -> dpd_kdes_set_up
thirdparty/ffld_dpm ./ffld_dpm
new:
dpd/dpd_decaf
mv train_test/dpd_decaf.m dpd_decaf/dpd_decaf.m
mv ./dpd_decaf_features.py dpd_decaf/dpd_decaf_features.py
dpd/dpd_kdes
mv train_test dpd_kdes
common/{cksvd*, kdes_cholesky} -> dpd_kdes
dpd/old
mv dpd/test_realtime old
mv dpd/test_realtime_cpp old
mv thirdparty old/thirdparty
mv fgcomp old/fgcomp #just a script to convert FGcomp labels to pascal format
add:
dpd_decaf_set_up.sh #just point to dpd_scratch directory location
```