wvinzh / WS_DAN_PyTorch

PyTorch Implementation Of WS-DAN(See Better Before Looking Closer: Weakly Supervised Data Augmentation Network for Fine-Grained Visual Classification)
MIT License
167 stars 34 forks source link
fine-grained-classification fine-grained-visual-categorization image-classification image-recognition pytorch pytorch-cnn

PyTorch Implementation Of WS-DAN

Introduction

This is a PyTorch implementation of the paper "See Better Before Looking Closer: Weakly Supervised Data Augmentation Network for Fine-Grained Visual Classification". It also has an official TensorFlow implementation WS_DAN. The core part of the code refers to the official version, and finally,the performance almost reaches the results reported in the paper.

Environment

Result

Dataset ACC(this repo) ACC Refine(this repo) ACC(paper)
CUB-200-2011 88.20 89.30 89.4
FGVC-Aircraft 93.15 93.22 93.0
Stanford Cars 94.13 94.43 94.5
Stanford Dogs 86.03 86.46 92.2

You can download pretrained models from WS_DAN_Onedrive

Install

  1. Clone the repo
    git clone https://github.com/wvinzh/WS_DAN_PyTorch
  2. Prepare dataset
Dataset Object Category Training Testing
CUB-200-2011 Bird 200 5994 5794
Stanford-Cars Car 100 6667 3333
fgvc-aircraft Aircraft 196 8144 8041
Stanford-Dogs Dogs 120 12000 8580
├── data
│   ├── Aircraft -> /your_root_path/Fine-grained/fgvc-aircraft-2013b/data
│   ├── aircraft_test.txt
│   ├── aircraft_train.txt
│   ├── Bird -> /your_root_path/Fine-grained/CUB_200_2011
│   ├── bird_test.txt
│   ├── bird_train.txt
│   ├── Car -> /your_root_path/Fine-grained/Car
│   ├── car_test.txt
│   ├── car_train.txt
│   ├── Dog -> /your_root_path/Fine-grained/dogs
│   ├── dog_test.txt
│   └── dog_train.txt

Usage

python train_bap.py train\
    --model-name inception \
    --batch-size 12 \
    --dataset car \
    --image-size 512 \
    --input-size 448 \
    --checkpoint-path checkpoint/car \
    --optim sgd \
    --scheduler step \
    --lr 0.001 \
    --momentum 0.9 \
    --weight-decay 1e-5 \
    --workers 4 \
    --parts 32 \
    --epochs 80 \
    --use-gpu \
    --multi-gpu \
    --gpu-ids 0,1 \

A simple way is to use sh train_bap.sh or run backgroud with logs using cmd nohup sh train_bap.sh 1>train.log 2>error.log &

python train_bap.py test\
    --model-name inception \
    --batch-size 12 \
    --dataset car \
    --image-size 512 \
    --input-size 448 \
    --checkpoint-path checkpoint/car/model_best.pth.tar \
    --workers 4 \
    --parts 32 \
    --use-gpu \
    --multi-gpu \
    --gpu-ids 0,1 \