Github:Semantic-Segmentation-Suite分割网络集锦--使用小结

语义分割代码集锦

这里提供一个集锦的仓库地址:
https://github.com/GeorgeSeif/Semantic-Segmentation-Suite
其实实验了很久还是推荐大家使用专门的语义分割网络,去github上找星星多的,这个星星也超多,不过我在实验的时候还是发现一些坑的。

最开始跑的是deeplabv3的模型,小结一下使用过程:
首先本地建一个仓库 使用命令:

git clone https://github.com/GeorgeSeif/Semantic-Segmentation-Suite.git

大约3个G的文件,因为里面有数据集会比较大,等待下载完毕后就是按照README中步骤:
1、环境准备:

numpy: sudo pip install numpy
OpenCV Python:sudo apt-get install python-opencvpip install opencv-python
TensorFlow: sudo pip install --upgrade tensorflow-gpu

这里有评论说这个命令并没有更新tf的gpu版本,其实大家在安装TensorFlow的时候都有安装对应的cuda和gpu版本吧,如果没有的话,就在安装命令后面添加“=1.9”类似的命令及想要更新的确定版本。
如果没有tf-gpu的话,训练是用cpu跑的,速度非常慢,所以建议大家都用gpu喔,还有这个模型貌似不支持多gpu训练,反正我用的是单gpu训练的。

2、代码仓库提供了数据集CamVid,如果需要训练自己的数据集就需要新建一个数据集文件,文件的目录形式如下:

├── “dataset_name”
| ├── train
| ├── train_labels
| ├── val
| ├── val_labels
| ├── test
| ├── test_labels
分别放好对应的训练、验证、测试集图像和label即可,格式jpg、png等都可以,但是要统一起来

3、在上述dataset文件下新建一个.csv文件,内容是语义分割目标的所有类别,和相应的用来表示的rgb值

name,r,g,b
Animal,64,128,64
Archway,192,0,128
Bicyclist,0,128, 192
Bridge,0, 128, 64
Building,128, 0, 0
Car,64, 0, 128
CartLuggagePram,64, 0, 192
Child,192, 128, 64
Column_Pole,192, 192, 128
Fence,64, 64, 128
LaneMkgsDriv,128, 0, 192
LaneMkgsNonDriv,192, 0, 64
Misc_Text,128, 128, 64
MotorcycleScooter,192, 0, 192
OtherMoving,128, 64, 64
ParkingBlock,64, 192, 128
Pedestrian,64, 64, 0
Road,128, 64, 128
RoadShoulder,128, 128, 192
Sidewalk,0, 0, 192
SignSymbol,192, 128, 128
Sky,128, 128, 128
SUVPickupTruck,64, 128,192
TrafficCone,0, 0, 64
TrafficLight,0, 64, 64
Train,192, 64, 128
Tree,128, 128, 0
Truck_Bus,192, 128, 192
Tunnel,64, 0, 64
VegetationMisc,192, 192, 0
Void,0, 0, 0
Wall,64, 192, 0

我们的数据集做人像分割所以是一个二分类问题修改class_dict.csv为如下即可:

name, r, g, b
Human, 255,255,255
void, 0,0,0

按照需要的类别自行设计

4、下面准备预训练模型
可用的前端网络Frontends有:MobileNetV2, ResNet50/101/152, and InceptionV4,在运行train.py时会根据参数设定,自动下载设定的Frontends,但是有个问题是网络原因下载很慢,偶尔连接断了的话程序会异常中断,可以在utils/get_pretrained_checkpoints.py中找自己需要模型的URL,自行下载。将下载好的模型放在models中。

5、下面是运行train.py的参数

[-h] [--num_epochs NUM_EPOCHS]
     [--checkpoint_step CHECKPOINT_STEP]
     [--validation_step VALIDATION_STEP] [--image IMAGE]
     [--continue_training CONTINUE_TRAINING] [--dataset DATASET]
     [--crop_height CROP_HEIGHT] [--crop_width CROP_WIDTH]
     [--batch_size BATCH_SIZE] [--num_val_images NUM_VAL_IMAGES]
     [--h_flip H_FLIP] [--v_flip V_FLIP] [--brightness BRIGHTNESS]
     [--rotation ROTATION] [--model MODEL] [--frontend FRONTEND]

optional arguments:
-h, --help
show this help message and exit
–num_epochs NUM_EPOCHS
Number of epochs to train for
–checkpoint_step CHECKPOINT_STEP
How often to save checkpoints (epochs)
–validation_step VALIDATION_STEP
How often to perform validation (epochs)
–image IMAGE
The image you want to predict on. Only valid in “predict” mode.
–continue_training CONTINUE_TRAINING
Whether to continue training from a checkpoint
–dataset DATASET Dataset you are using.
–crop_height CROP_HEIGHT
Height of cropped input image to network
–crop_width CROP_WIDTH
Width of cropped input image to network
–batch_size BATCH_SIZE
Number of images in each batch
–num_val_images NUM_VAL_IMAGES
The number of images to used for validations
–h_flip H_FLIP
Whether to randomly flip the image horizontally for data augmentation
–v_flip V_FLIP
Whether to randomly flip the image vertically for data augmentation
–brightness BRIGHTNESS
Whether to randomly change the image brightness for data augmentation. Specifies the max bightness change as a factor between 0.0 and 1.0. For example, 0.1 represents a max brightness change of 10% (±).
–rotation ROTATION
Whether to randomly rotate the image for data augmentation. Specifies the max rotation angle in degrees.
–model MODEL
The model you are using. See model_builder.py for supported models
–frontend FRONTEND
The frontend you are using. See frontend_builder.py for supported models

这里是 我的训练参数: 给大家做个样例
python train.py --num_epochs 30 --checkpoint_step 6 --validation_step 1 --dataset dataset --crop_width 512 --crop_height 512 --batch_size 1 --num_val_images 700 --h_flip 1 --v_flip 0 --model DeepLabV3 --frontend ResNet101
根据需要可自行更改

6、代码的一些坑,目前遇到的不多,这里小结一下:
1)、文件夹utils里存放utils.py,train.py中导入utils文件夹中的utils.py和helpers.py时用from utils import utils,helpers,这里注意一下,程序会不晓得到底是utils还是utils.py的;哪里报错改一下就好了

2)、如果没有用命令sudo pip install --upgrade tensorflow-gpu更新gpu的TensorFlow版本的话,就会使用cpu进行训练。

目前还在训练,deeplabv3出现了梯度爆炸
DeepLabV3的收敛速度较快,所以学习率尽量设置的小一些,默认的0.0001有点大了,设置为0.00001就ok了
现在的训练情况:
在这里插入图片描述
其实到这里大家就都可以训练自己的模型了,不过在训练完后如果有更加深刻的思考就更好啦,因为我们发现这个集锦训练出来的模型在进行分割的时候即使看指标(loss、IOU、f1)等都比较不错,但是预测出的mask与label的mask在视觉上有较大的差距,其实也没有那么大啦,就是感觉效果不够理想,有些甚至还存在大量空洞的情况。
再仔细研究下代码和论文提出的模型就会发现一些猫腻,哈哈哈,这里给大家看一下代码:
1、models/GCN.py

def build_gcn
  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 99
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 99
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值