# Segmentation-Pytorch **Repository Path**: Deeachain/Segmentation-Pytorch ## Basic Information - **Project Name**: Segmentation-Pytorch - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-09-07 - **Last Updated**: 2021-07-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 由于时间有限,代码注释没有完善好,我会长期更新,不断完善readme形成一个完整的代码引导,后期数据集也会共享,方便下载调试,谢谢大家的关注~ # 效果展示 PSPNet使用的是作者开源的源代码,训练Cityscapes数据集,Miou=0.5535604759342954,时间有限仅训练200Epoch,此次实验初始学习率设置大收敛慢,后面会实验得到一个最优结果及参数设置。 ``` class iou [0.9486701457704959, 0.7049106876005735, 0.8300539507571478, 0.3252279876366611, 0.32811147036266664, 0.40784611045938335, 0.4032697357010293, 0.5584767609290046, 0.8800581209068778, 0.4874004109192292, 0.9049523717813096, 0.6553959694622065, 0.4079456052528648, 0.8765924542132393, 0.19745433079577926, 0.510012327134576, 0.11816104748732476, 0.34569161104616813, 0.6274179445350734] ``` 原图和预测图对比 ![](https://github.com/Deeachain/Segmentation-Pytorch/blob/master/example/lindau_000000_000019_leftImg8bit_gt.png) ![](https://github.com/Deeachain/Segmentation-Pytorch/blob/master/example/lindau_000000_000019_leftImg8bit_color.png) # 环境安装 ```pip install -r requirements.txt```
实验环境 Ubuntu 16.04 GTX1080TI 单卡 python==3.6.5
具体参数见requirement.txt
# 数据预处理 本实验可以实现cityscapes和camvid公开数据集
训练演示使用的是cityscapes
本人主要是用作遥感卫星图像分割,卫星图像尺寸都较大,所以需要进行切图,切分成512*512尺寸大小的图片
后期会更新我的数据集----- # 模型搭建 所有的模型搭建都是在builders/model_builder.py文件下导入
- [x] UNet - [x] ENet - [x] ESPNet - [x] ESPNet_v2 - [x] ERFNet - [x] DABNet - [x] BiSeNetV2 - [x] PSPNet - [x] DeeplabV3Plus - [ ] FCN # 训练 cityscapes的训练:gtFine中的文件需要是onehot之后的图片,总共19个类别(图片中的像素是0-18&255)。
文件结构
``` |--cityscapes | |--leftImg8bit | |--train | |--zurich | |--leftImg8bit*.png | |--* | |--val | |--zurich | |--leftImg8bit*.png | |--* | |--test | |--zurich | |--leftImg8bit*.png | |--* | |--gtFine | |--train | |--zurich | |--gtFine_labelTrainIds*.png | |--* | |--val | |--zurich | |--gtFine_labelTrainIds*.png | |--* | |--test | |--zurich | |--gtFine_labelTrainIds*.png ``` 修改builders/datasets_builder.py下的数据集加载路径
data_dir表示cityscapes数据的目录
data_dir = os.path.join('/media/ding/Data/datasets', dataset)为自己的cityscapes数据集目录即可
我是将cityscapes数据文件夹放在'/media/ding/Data/datasets'下, 仅需修改自己本地存放数据集的目录
os.path.join('/media/ding/Data/datasets', dataset)第二个参数dataset不需要修改,训练的时候传参即可
传参的时候注意--dataset cityscapes,cityscapes需要与数据集的目录名一致
生成训练需要的文件路径的txt文本,cityscapes_train_list.txt;cityscapes_val_list.txt;cityscapes_test_list.txt放在data_dir下
``` txt的格式:*leftImg8bit.png\t*labelTrainIds.png leftImg8bit/train/cologne/cologne_000000_000019_leftImg8bit.png gtFine/train/cologne/cologne_000000_000019_gtFine_labelTrainIds.png ``` 终端下:sh train.sh train.sh脚本,修改相应参数;详细参数见train.py中的ArgumentParser()
``` 主要参数: --model 训练的模型 --dataset 训练的数据集名称(与文件目录相同) --max_epochs 训练Epoch --val_miou_epochs 每100个Epoch验证计算miou --lr 学习率 --batch_size batch_size ``` ``` python train.py --max_epochs 200 --batch_size 2 --model ENet --dataset cityscapes --optim sgd --lr 0.01 ``` builders文件夹下dataset_builder.py文件的data_dir需要修改为数据集的文件夹目录 ## 测试训练保存的所有模型好坏 test.py文件是用来测试所有训练生成模型权重的好坏,在所有保存的模型权重中测试得到一个指标最高的模型
终端中执行: sh test.sh
修改test.sh的参数
best $True指选择最优模型
``` python test.py --dataset cityscapes \ --model ENet \ --best $True \ --checkpoint /media/ding/Study/graduate/code/Efficient-Segmentation-Networks/checkpoint/cityscapes/ENetbs8gpu1_train/model_300.pth ``` ## 两种预测方法 #### 1.预测小图,拼接成大图 ``` 终端中执行:sh predict.sh脚本--预测小图,修改--checkpoint等参数 接着outputs/concat_image.py拼接成大图 ``` #### 2.直接输入大图,滑动窗口进行预测(本人使用的方法) 终端中执行:sh predict_sliding.sh脚本--滑动窗口预测大图
``` python predict_sliding.py --dataset cityscapes \ --model ENet \ --checkpoint /media/ding/Study/graduate/code/Efficient-Segmentation-Networks/checkpoint/paris/ENetbs16gpu1_train/model_91.pth ```