PSPNet-tensorflow实现并训练数据
- 代码下载地址:https://github.com/hellochick/PSPNet-tensorflow
- 下载预训练模型地址(需翻墙):https://drive.google.com/drive/folders/1S90PWzXEX_GNzulG1f2eTHvsruITgqsm?usp=sharing 放在./model/文件夹下,并将checkpoint后的格式.txt删除。
- 修改train.py文件
IMG_MEAN = np.array((103.939, 116.779, 123.68), dtype=np.float32)
BATCH_SIZE = 2
DATA_DIRECTORY = ''
DATA_LIST_PATH = './list/train.txt' #训练数据的
IGNORE_LABEL = 255
INPUT_SIZE = '320,320' #训练图片的大小
LEARNING_RATE = 1e-3
MOMENTUM = 0.9
NUM_CLASSES = 2 #分类的类别
NUM_STEPS = 60001
POWER = 0.9
RANDOM_SEED = 1234
WEIGHT_DECAY = 0.0001
RESTORE_FROM = './'
SNAPSHOT_DIR = './model/'
SAVE_NUM_IMAGES = 4
SAVE_PRED_EVERY = 50 #保存模型的训练步数
4. inference.py文件
ADE20k_param = {'crop_size': [320, 320], #修改尺寸和输入图片大小相同
'num_classes': 2,
'model': PSPNet50}
cityscapes_param = {'crop_size': [320, 320], #修改尺寸和输入图片大小相同
'num_classes': 2,
'model': PSPNet101}
5. 修改tool.py
使用网络训练自己的数据,首先建立自己的数据集,可以使用labelme等软件制作标签,将标签图像转化为二值图,具体方法可以自行查阅相关资料,修改tool.py中代码将前景和背景颜色修改为自己的标签的颜色,我们的为二分类所以只修改为两种颜色。
IMG_MEAN = np.array((103.939, 116.779, 123.68), dtype=np.float32)
label_colours = [(0, 0, 0),# (244, 35, 231), (69, 69, 69) #背景色
# 0 = road, 1 = sidewalk, 2 = building
#,(102, 102, 156), (190, 153, 153), (153, 153, 153)
# 3 = wall, 4 = fence, 5 = pole
#,(250, 170, 29), (219, 219, 0), (106, 142, 35)
# 6 = traffic light, 7 = traffic sign, 8 = vegetation
#,(152, 250, 152), (69, 129, 180), (219, 19, 60)
# 9 = terrain, 10 = sky, 11 = person
#,(255, 0, 0), (0, 0, 142), (0, 0, 69)
# 12 = rider, 13 = car, 14 = truck
#,(0, 60, 100), (0, 79, 100), (0, 0, 230)
# 15 = bus, 16 = train, 17 = motocycle
(255, 255, 255)] #前景色
# 18 = bicycle
matfn = './utils/color150.mat'
针对报错:ValueError: Negative dimension size caused by subtracting 90 from 40 for 'conv5_3_pool1' (op: 'AvgPool') with input shapes: [4,40,40,2048].
训练要求图片的大小为720*720(我们将训练和测试图片大小改为320*×320),修改model代码:
(self.feed('conv5_3/relu')
.avg_pool(40, 40, 40, 40, name='conv5_3_pool1')
.conv(1, 1, 512, 1, 1, biased=False, relu=False, name='conv5_3_pool1_conv')
.batch_normalization(relu=True, name='conv5_3_pool1_conv_bn')
.resize_bilinear(shape, name='conv5_3_pool1_interp'))
(self.feed('conv5_3/relu')
.avg_pool(30, 30, 30, 30, name='conv5_3_pool2')
.conv(1, 1, 512, 1, 1, biased=False, relu=False, name='conv5_3_pool2_conv')
.batch_normalization(relu=True, name='conv5_3_pool2_conv_bn')
.resize_bilinear(shape, name='conv5_3_pool2_interp'))
(self.feed('conv5_3/relu')
.avg_pool(20, 20, 20, 20, name='conv5_3_pool3')
.conv(1, 1, 512, 1, 1, biased=False, relu=False, name='conv5_3_pool3_conv')
.batch_normalization(relu=True, name='conv5_3_pool3_conv_bn')
.resize_bilinear(shape, name='conv5_3_pool3_interp'))
(self.feed('conv5_3/relu')
.avg_pool(10, 10, 10, 10, name='conv5_3_pool6')
.conv(1, 1, 512, 1, 1, biased=False, relu=False, name='conv5_3_pool6_conv')
.batch_normalization(relu=True, name='conv5_3_pool6_conv_bn')
.resize_bilinear(shape, name='conv5_3_pool6_interp'))
6. 训练:
python train.py --update-mean-var --train-beta-gamma 2>&1 | tee log/train.log
7. 测试单张数据:
python inference.py --img-path=./input/029.jpg --dataset cityscapes
阅读剩余
版权声明:
作者:姜九二
链接:https://www.jiangjianwu.cn/development/deep-learning/semantic-segmentation/476/pspnet-tensorflow%e5%ae%9e%e7%8e%b0%e5%b9%b6%e8%ae%ad%e7%bb%83%e6%95%b0%e6%8d%ae.html
文章版权归作者所有,未经允许请勿转载。
THE END