Home

Awesome

DSS-PyTorch

PyTorch implement of Deeply Supervised Salient Object Detection with Short Connection

<p align="center"><img width="80%" src="png/dss.png" /></p>

The official caffe version: DSS

Prerequisites

Results

The information of Loss:

Example output:

Note: here the "blur boundary" caused by bad combine method

Different connection output:

Some difference

  1. The original paper use:$Z=h(\sum_{i=2}^4 f_mR^{(m)})$,here we use $Z=h(\sum_{i=1}^6 f_mR^{(m)})$ in inference stage

Results Reproduct

Dataset (MSRA-B)PaperHere (v1)Only Fusion (v1)Here (v2)Only Fusion (v2)Here(v2 700)
MAE (without CRF)0.0430.0540.0520.0680.0520.051
F_beta (without CRF)0.9200.9100.9140.9120.9100.918
MAE (with CRF)0.0280.0470.0480.0470.0490.047
F_beta (with CRF)0.9270.9160.9170.9150.9180.923

Note:

  1. v1 means use average fusion , v2 means use learnable fusion
  2. You can try to use other "inference stragedy"(I think other combine can get better results --- here use sout-2+sout-3+sout-4+fusion --- you can just change self.select
  3. v2 700 means training with 700 epochs. (I use pre-trained model by 500 epochs:so the optimizer is a little differnt to direct 700 eopch)

Usage

1. Clone the repository

git clone git@github.com:AceCoooool/DSS-pytorch.git
cd DSS-pytorch/

2. Download the dataset

Download the MSRA-B dataset. (If you can not find this dataset, email to me --- I am not sure whether it's legal to put it on BaiDuYun)

# file construction
MSRA-B
  --- annotation
      --- xxx.png
      --- xxx.png
  --- image
      --- xxx.jpg
      --- xxx.jpg
  --- test_cvpr2013.txt
  --- train_cvpr2013.txt
  --- valid_cvpr2013.txt
  --- test_cvpr2013_debug.txt
  --- train_cvpr2013_debug.txt
  --- valid_cvpr2013_debug.txt

3. Get pre-trained vgg

cd tools/
python extract_vgg.py
cd ..

4. Demo

pleease see demo.ipynb

Note:

  1. default choose: download and copy the pretrained model to weights directory

5. Train

python main.py --mode='train' --train_path='you_data' --label_path='you_label' --batch_size=8 --visdom=True --train_file='you_file'

Note:

  1. --val=True add the validation (but your need to add the --val_path, --val_file and --val_label)
  2. you_data, you_label means your training data root. (connect to the step 2)
  3. If you Download the data to youhome/data/MSRA-B(you can not "implicity" the path)

6. Test

python main.py --mode='test' --test_path='you_data' --test_label='your_label' --use_crf=False --model='your_trained_model' --test_file='you_file'

Note:

  1. only support bath_size=1
  2. --use_crf=True:means use CRF post-process