1. 代码下载地址:https://github.com/hellochick/PSPNet-tensorflow
  2. 下载预训练模型地址(需翻墙):https://drive.google.com/drive/folders/1S90PWzXEX_GNzulG1f2eTHvsruITgqsm?usp=sharing  放在./model/文件夹下,并将checkpoint后的格式.txt删除。
  3. 修改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   #保存模型的训练步数
 
inference.txt文件
ADE20k_param = {'crop_size': [320, 320],   #修改尺寸和输入图片大小相同
                'num_classes': 2,
                'model': PSPNet50}
cityscapes_param = {'crop_size': [320, 320], #修改尺寸和输入图片大小相同
                    'num_classes': 2,
                    'model': PSPNet101}
 
修改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'))
 
 
  1. 训练: 
python train.py --update-mean-var --train-beta-gamma 2>&1 | tee log/train.log
 
  1. 测试单张数据:
python inference.py --img-path=./input/029.jpg --dataset cityscapes
 
 
很抱歉好长时间没有登陆账号,请关注公共号共同学习AI算法相关知识或与我进行沟通
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐