pytorch_segmentation/u2net/README.md
requirements.txt├── src: 搭建网络相关代码
├── train_utils: 训练以及验证相关代码
├── my_dataset.py: 自定义数据集读取相关代码
├── predict.py: 简易的预测代码
├── train.py: 单GPU或CPU训练代码
├── train_multi_GPU.py: 多GPU并行训练代码
├── validation.py: 单独验证模型相关代码
├── transforms.py: 数据预处理相关代码
└── requirements.txt: 项目依赖
├── DUTS-TR
│ ├── DUTS-TR-Image: 该文件夹存放所有训练集的图片
│ └── DUTS-TR-Mask: 该文件夹存放对应训练图片的GT标签(Mask蒙板形式)
│
└── DUTS-TE
├── DUTS-TE-Image: 该文件夹存放所有测试(验证)集的图片
└── DUTS-TE-Mask: 该文件夹存放对应测试(验证)图片的GT标签(Mask蒙板形式)
--data-path指向DUTS-TR所在根目录从官方转换得到的权重:
u2net_full.pth下载链接: https://pan.baidu.com/s/1ojJZS8v3F_eFKkF3DEdEXA 密码: fh1vu2net_lite.pth下载链接: https://pan.baidu.com/s/1TIWoiuEz9qRvTX9quDqQHg 密码: 5stju2net_full在DUTS-TE上的验证结果(使用validation.py进行验证):
MAE: 0.044
maxF1: 0.868
注:
0.872,如果需要做该后处理可自行添加,post_norm流程如下,其中output为验证时网络预测的输出:ma = torch.max(output)
mi = torch.min(output)
output = (output - mi) / (ma - mi)
src/model.py中ConvBNReLU类里卷积的bias设置成True,因为官方代码里没有进行设置(Conv2d的bias默认为True)。
因为卷积后跟了BN,所以bias是起不到作用的,所以在本仓库中默认将bias设置为False。u2net_full)训练指令:
torchrun --nproc_per_node=4 train_multi_GPU.py --lr 0.004 --amp
训练最终在DUTS-TE上的验证结果:
MAE: 0.047
maxF1: 0.859
训练过程详情可见results.txt文件,训练权重下载链接: https://pan.baidu.com/s/1df2jMkrjbgEv-r1NMaZCZg 密码: n4l6
torchrun --nproc_per_node=8 train_multi_GPU.py指令,nproc_per_node参数为使用GPU数量CUDA_VISIBLE_DEVICES=0,3(例如我只要使用设备中的第1块和第4块GPU设备)CUDA_VISIBLE_DEVICES=0,3 torchrun --nproc_per_node=2 train_multi_GPU.py