基于Pytorch的非官方版本实现: Non-Local Deep Features for Salient Object Detection.
官方Tensorflow版本链接: NLDF
此实现的几点改动:
数据集(个人没找到MSRA-B的图片)- 网络结构上的一些不同:此处采用最后输出为单个概率图,官方版本中是两个互异的概率图
- 增加了“面积重合率”,原论文中是“边缘重合率” (可同时选择两者)
- Python 3
- Pytorch 0.3.0
- torchvision
- visdom (optional for visualization)
迭代过程中的损失函数下降情况:
性能:
Dataset | max F(paper) | MAE(paper) | max F(here) | MAE(here) |
---|---|---|---|---|
ECSSD | 0.905 | 0.063 | 0.9830 | 0.0375 |
说明:
- 此处复现采用的是面积IOU,原始论文采用的是边缘IOU
- 此处的比较是“不公平”,两者采用的数据集并不相同,且直接拿了训练集来测的指标(只是为了说明性能能够达到甚至超过原始paper)--- 原始论文中的数据集个人没找到。
git clone git@github.com:AceCoooool/NLFD-pytorch.git
cd NLFD-pytorch/
注:原始论文中采用更多的数据集
可从下面链接下载数据集: ECSSD
bash download.sh
cd tools/
python extract_vgg.py
cd ..
注:此处个人直接采用torchvision里面训练好的VGG
python demo.py --demo_img='your_picture' --trained_model='pre_trained pth' --cuda=True
注:
- 默认参数:下载训练好的模型并复制到
weights
文件夹下 - 示例图片:默认采用
png/demo.jpg
python main.py --mode='train' --train_path='you_data' --label_path='you_label' --batch_size=8 --visdom=True --area=True --boundary=False
注:
--val=True
:训练阶段开启validation. 你可以将部分训练集作为验证集。同时提供验证集的路径you_data, you_label
:关于第2步中数据集的路径--area --boundary
:选择area-IOU或者boundary-IOU,或者两者均选择(体现在损失函数里面loss.py
,建议采用默认的形式---只选择 area=True)
python main.py --mode='test', --test_path='you_data' --test_label='your_label' --batch_size=1 --model='your_trained_model'
注:
- 采用的指标和原始论文一致(改写自原代码)
- 采用boundary-iou容易出现
inf
的情况:需要将学习率调整到很小,如1e-10
- 可能还存在数值问题
如有任何问题,欢迎在issue中提问~