目录
EGNet描述
EGNet是用来解决静态目标检测问题,它由边缘特征提取部分、显著性目标特征提取部分以及一对一的导向模块三部分构成,利用边缘特征帮助显著性目标特征定位目标,使目标的边界更加准确。在6个不同的数据集中与15种目前最好的方法进行对比,实验结果表明EGNet性能最优。
论文: Zhao J X, Liu J J, Fan D P, et al. EGNet: Edge guidance network for salient object detection[C]//Proceedings of the IEEE/CVF International Conference on Computer Vision. 2019: 8779-8788.
模型架构
EGNet网络由三个部分组成,NLSEM(边缘提取模块)、PSFEM(目标特征提取模块)、O2OGM(一对一指导模块),原始图片通过两次卷积输出图片边缘信息,与此同时,对原始图像进行更深层次的卷积操作提取salient object,然后将边缘信息与不同深度提取出来的显著目标在一对一指导模块中分别FF(融合),再分别经过卷积操作得到不同程度的显著性图像,最终输出了一张融合后的显著性检测图像。
数据集
使用的数据集:显著性检测数据集
- 数据集大小:
- 训练集:DUTS-TR数据集,210MB,共10533张最大边长为400像素的彩色图像,均从ImageNet DET训练/验证集中收集。
- 测试集:DUTS-TE数据集,117MB,共5019张最大边长为400像素的彩色图像,从ImageNet DET测试集和SUN数据集中收集。
- 测试集:SOD数据集,21.2MB,共300张最大边长为400像素的彩色图像,此数据集是基于Berkeley Segmentation Dataset(BSD)的显著对象边界的集合。
- 测试集:ECSSD数据集,64.6MB,共1000张最大边长为400像素的彩色图像。
- 测试集:PASCAL-S数据集,175 MB,共10个类、850张32*32彩色图像。该数据集与其他显著物体检测数据集区别较大, 没有非常明显的显著物体, 并主要根据人类的眼动进行标注数据集, 因此该数据集难度较大。
- 测试集:DUTS-OMRON数据集,107 MB,共5168张最大边长为400像素的彩色图像。数据集中具有一个或多个显著对象和相对复杂的背景,具有眼睛固定、边界框和像素方面的大规模真实标注的数据集。
- 测试集:HKU-IS数据集,893MB,共4447张最大边长为400像素的彩色图像。数据集中每张图像至少满足以下的3个标准之一:1)含有多个分散的显著物体; 2)至少有1个显著物体在图像边界; 3)显著物体与背景表观相似。
- 数据格式:二进制文件
环境要求
- 硬件(Ascend/GPU/CPU)
- 使用Ascend/GPU/CPU处理器来搭建硬件环境。
- 框架
- 如需查看详情,请参见如下资源:
快速入门
通过官方网站安装MindSpore后,您可以按照如下步骤进行训练和评估:
# 数据集进行裁剪
python data_crop.py --data_name --data_root --output_path=[OUTPUT_PATH]
# 运行训练示例(默认VGG)
bash run_train.sh
# 运行分布式训练示例
bash run_distribute_train.sh
# 运行评估示例
bash run_eval.sh
脚本说明
脚本及样例代码
├── model_zoo
├── EGNet
├── README.md # EGNet相关说明
├── model_utils # config,modelarts等配置脚本文件夹
│ ├──config.py # 解析参数配置文件
├── scripts
│ ├──run_train.sh # 启动GPU单机训练(单卡)
│ ├──run_distribute_train.sh # 启动GPU分布式训练(8卡)
│ ├──run_eval.sh # 启动GPU评估
├── src
│ ├──dataset.py # 加载数据集
│ ├──egnet.py # EGNet的网络结构
│ ├──vgg.py # vgg的网络结构
│ ├──resnet.py # resnet的网络结构
│ ├──sal_edge_loss.py # 损失定义
│ ├──train_forward_backward.py # 前向传播和反向传播定义
├── sal2edge.py # 预处理,把显著图像转化为边缘图像
├── data_crop.py # 数据裁剪
├── train.py # 训练脚本
├── eval.py # 评估脚本
├── export.py # 模型导出脚本
├── default_config.yaml # 参数配置文件
脚本参数
在config.py中可以同时配置训练参数和评估参数。
dataset_name: "DUTS-TR" # 数据集名称
name: "egnet" # 网络名称
pre_trained: Ture # 是否基于预训练模型训练
lr_init: 5e-5(resnet) or 2e-5(vgg) # 初始学习率
batch_size: 10 # 训练批次大小
epoch_size: 30 # 总计训练epoch数
momentum: 0.1 # 动量
weight_decay:5e-4 # 权重衰减值
image_height: 200 # 输入到模型的图像高度
image_width: 200 # 输入到模型的图像宽度
train_data_path: "./data/DUTS-TR/" # 训练数据集的相对路径
eval_data_path: "./data/DUTS-TE/" # 评估数据集的相对路径
checkpoint_path: "./EGNet/run-nnet/models/" # checkpoint文件保存的相对路径
更多配置细节请参考 src/config.py。
训练过程
训练
python data_crop.py --data_name --data_root --output_path=[OUTPUT_PATH]
python train.py --mode train --base_model vgg --vgg=[PRETRAINED_PATH]
python train.py --mode train --base_model resnet --resnet=[PRETRAINED_PATH]
上述python命令将在后台运行,您可以通过./EGNet/run-nnet/logs/log.txt文件查看结果。
训练结束后,您可在默认./EGNet/run-nnet/models/文件夹下找到检查点文件。
分布式训练
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
mpirun -n {device_num} python train.py --mode train --base_model vgg --vgg=[PRETRAINED_PATH] --is_distributed True
mpirun -n {device_num} python train.py --mode train --base_model resnet --resnet=[PRETRAINED_PATH] --is_distributed True
上述shell脚本将在后台运行分布训练。您可以通过train/train.log文件查看结果。
评估过程
评估
python eval.py --model=[MODEL_PATH] --sal_mode=[DATA_NAME] --test_fold=[TEST_DATA_PATH] --base_model=vgg
python eval.py --model=[MODEL_PATH] --sal_mode=[DATA_NAME] --test_fold=[TEST_DATA_PATH] --base_model=resnet
导出过程
导出
在导出之前需要修改default_config.ymal配置文件.
需要修改的配置项为ckpt_file.
python export.py --ckpt_file=[CKPT_FILE]
模型描述
性能
评估性能
DUTS-TR上的EGNet
参数 |
GPU |
GPU |
模型版本 |
EGNet(VGG) |
EGNet(resnet) |
资源 |
GeForce RTX 2080 Ti(单卡) V100(多卡) |
GeForce RTX 2080 Ti(单卡) V100(多卡) |
上传日期 |
2021-12-02 |
2021-12-02 |
MindSpore版本 |
1.3.0 |
1.3.0 |
数据集 |
DUTS-TR |
DUTS-TR |
训练参数 |
epoch=30, steps=1050, batch_size = 10, lr=2e-5 |
epoch=30, steps=1050, batch_size=10, lr=5e-5 |
优化器 |
Adam |
Adam |
损失函数 |
Binary交叉熵 |
Binary交叉熵 |
速度 |
单卡:1148.571毫秒/步 ; 2卡:921.905毫秒/步 |
单卡:1323.810毫秒/步; 2卡:1057.143毫秒/步 |
总时长 |
单卡:10h3m ; 2卡:8h4m |
单卡:11h35m ; 2卡:9h15m |
微调检查点 |
412M (.ckpt文件) |
426M (.ckpt文件) |
脚本 |
EGNnet脚本 |
EGNet 脚本 |
推理性能
显著性检测数据集上的EGNet
参数 |
GPU |
GPU |
模型版本 |
EGNet(VGG) |
EGNet(resnet) |
资源 |
GeForce RTX 2080 Ti |
GeForce RTX 2080 Ti |
上传日期 |
2021-12-02 |
2021-12-02 |
MindSpore 版本 |
1.3.0 |
1.3.0 |
数据集 |
DUTS-TE, 5019张图像 |
DUTS-TE, 5019张图像 |
评估指标(单卡) |
MaxF:0.8529936 ; MAE:0.0946914 ; S:0.8197438 |
MaxF:0.8621546 ; MAE:0.0894348 ; S:0.8290318 |
评估指标(多卡) |
MaxF:0.8538571 ; MAE:0.0988344 ; S:0.8163447 |
MaxF:0.8622078 ; MAE:0.0952874 ; S:0.8256527 |
数据集 |
SOD, 300张图像 |
SOD, 300张图像 |
评估指标(单卡) |
MaxF:0.8773976 ; MAE:0.1494375 ; S:0.7398942 |
MaxF:0.8763721 ; MAE:0.1503588 ; S:0.7325447 |
评估指标(多卡) |
MaxF:0.8766531 ; MAE:0.1585068 ; S:0.7345684 |
MaxF:0.8742505 ; MAE:0.1539668 ; S:0.7367481 |
数据集 |
ECSSD, 1000张图像 |
ECSSD, 1000张图像 |
评估指标(单卡) |
MaxF:0.9407956 ; MAE:0.0697847 ; S:0.8687190 |
MaxF:0.9473603 ; MAE:0.06478707 ; S:0.8760312 |
评估指标(多卡) |
MaxF:0.9383455 ; MAE:0.0796092 ; S:0.8634995 |
MaxF:0.9470877 ; MAE:0.0667448 ; S:0.8785607 |
数据集 |
PASCAL-S, 850张图像 |
PASCAL-S, 850张图像 |
评估指标(单卡) |
MaxF:0.8819262 ; MAE:0.1107578 ; S:0.7719119 |
MaxF:0.8797955 ; MAE:0.1123267 ; S:0.7720478 |
评估指标(多卡) |
MaxF:0.8838800 ; MAE:0.1167115 ; S:0.77207838 |
MaxF:0.8828960 ; MAE:0.1153322 ; S:0.7741047 |
数据集 |
DUTS-OMRON, 5168张图像 |
DUTS-OMRON, 5168张图像 |
评估指标(单卡) |
MaxF:0.7873633 ; MAE:0.1399568 ; S:0.7542322 |
MaxF:0.7990565 ; MAE:0.1398752 ; S:0.7617166 |
评估指标(多卡) |
MaxF:0.7890620 ; MAE:0.1445215 ; S:0.7536457 |
MaxF:0.8009216 ; MAE:0.1434804 ; S:0.7621028 |
数据集 |
HKU-IS, 4447张图像 |
HKU-IS, 4447张图像 |
评估指标(单卡) |
MaxF:0.9236114 ; MAE:0.0673895 ; S:0.8734632 |
MaxF:0.9281392 ; MAE:0.0637083 ; S:0.8780866 |
评估指标(多卡) |
MaxF:0.9215954 ; MAE:0.0746705 ; S:0.8683793 |
MaxF:0.9285262; MAE:0.0677548 ; S:0.8784274 |
ModelZoo主页
请浏览官网主页。