AdvSemiSeg

December 5, 2021 · View on GitHub

1 简介

images
本项目基于paddlepaddle框架复现了AdvSemiSeg半监督语义分割学习算法,基于Deeplabv2在Pascal VOC2012数据集上进行了实验。 论文:

项目参考:

2 复现精度

在Pascal VOC2012 val数据集的测试效果如下表。

NetWorkstepsoptimage_sizebatch_sizedatasetmemorycardmIouconfigweightlog
Deeplabv220kSGD321x32110Pascal VOC2012+Aug16G172.66deeplabv2_resnet101_os8_voc_semi_321x321_20k.yml(链接: https://pan.baidu.com/s/13bG-VGyW4VsD5iw3aJpJsQ 提取码: d3qy 复制这段内容后打开百度网盘手机App,操作更方便哦)log
注意:默认的配置是ResNet101+Deeplabv2+VOC2012Aug+1/8Label
不同于原文的是,采用了PaddleSeg的默认数据增强。若要参考与原文完全一致的训练,可以回退版本到上一个版本(上个版本结果:70.4 miou).

3 数据集

Pascal VOC 2012 + SBD dataset

  • 数据集大小:
    • 训练集: 10582
    • 验证集: 1449

应有的数据集结构:

pascalvoc/VOCdevkit/VOC2012
├── Annotations
├── ImageSets
├── JPEGImages
├── __MACOSX
├── SegmentationClass
├── SegmentationClassAug
└── SegmentationObject

4 环境依赖

  • 硬件: Tesla V100 16G * 1

  • 框架:

    • PaddlePaddle == 2.2.0

快速开始

第一步:克隆本项目

# clone this repo
git clone git@github.com:CuberrChen/AdvSemiSeg-Paddle.git
cd AdvSemiSeg-Paddle

安装第三方库

pip install -r requirements.txt

第二步:训练模型

单卡训练:

python train.py --config configs/deeplabv2/deeplabv2_resnet101_os8_voc_semi_321x321_20k.yml --label_ratio 0.125 --num_workers 0 --use_vdl --do_eval --save_interval 1000 --save_dir deeplabv2_res101_voc_0.125_20k

注意:通过指定label_ratio开启半监督学习算法。--labeled-ratio 0.125 表示1/8标签率。半监督学习算法默认是AdvSemiSeg。具体可以查看train.py。 多卡训练:

python -m paddle.distributed.launch --config configs/deeplabv2/deeplabv2_resnet101_os8_voc_semi_321x321_20k.yml --label_ratio 0.125 --num_workers 0 --use_vdl --do_eval --save_interval 1000 --save_dir deeplabv2_res101_voc_0.125_20k

第三步:测试

deeplabv2_res101_voc_0.125_20k目录下包含已经训练好的模型参数(仓库内没有,需要从上面表格提供的链接先下载)以及对应的日志(train.log)和可视化日志(vdlrecords.1638194689.log)文件。

python val.py --config configs/deeplabv2/deeplabv2_resnet101_os8_voc_semi_321x321_20k.yml --model_path deeplabv2_res101_voc_0.125_20k/best_model/model.pdparams

第四步:tipc

安装autolog依赖:见test_tipc/README.md

  • 安装autolog
    git clone https://github.com/LDOUBLEV/AutoLog
    cd AutoLog
    pip3 install -r requirements.txt
    python3 setup.py bdist_wheel
    pip3 install ./dist/auto_log-1.0.0-py3-none-any.whl
    cd ../
    

在linux下,进入AdvSemiSeg-Paddle文件夹,运行命令

bash test_tipc/prepare.sh ./test_tipc/configs/advsemiseg_deeplabv2_res101_humanseg/train_infer_python.txt 'lite_train_lite_infer'
bash test_tipc/test_train_inference_python.sh ./test_tipc/configs/advsemiseg_deeplabv2_res101_humanseg/train_infer_python.txt 'lite_train_lite_infer'

注意:项目中test_tipc/output/存放了自动化试结果日志。

5 代码结构与说明

代码结构

├─benchmark
├─configs  
├─contrib
├─data
├─deploy                        
├─images                         
├─deeplabv2_res101_voc_0.125_20k                           
├─paddleseg  
├─semi  
├─slim   
├─tests
├─tools
├─test_tipc                                            
│  export.py                     
│  predict.py                        
│  README.md                                            
│  requirements.txt                      
│  setup.py                   
│  train.py                
│  val.py                       

说明 1、本项目在Aistudio平台,使用Tesla V100 * 1 训练20K miou达到72.66%。
2、本项目基于PaddleSeg开发。

6 模型信息

相关信息:

信息描述
作者xbchen
日期2021年11月
框架版本PaddlePaddle==2.2.0
应用场景语义分割
硬件支持GPU、CPU
在线体验notebook