keras实现图像语义分割的子函数

本文介绍了如何使用Keras进行图像语义分割,包括定义dice_loss损失函数,图像数据处理,VGG预训练模型的应用,以及数据增强技术。通过ImageDataGenerator进行训练数据无限生成,并展示了如何加载预训练权重训练新网络,最后展示模型预测结果。
摘要由CSDN通过智能技术生成

权重下载地址

查看第0层权重:

weights = model.get_weights()[0]

参考

图像augmentation及预训练参考

定义损失函数dice_loss

调色盘

将包含训练、测试、验证集的图像文件夹CamVid放在当前目录下,导入图像数据代码如下:

import util
import numpy as np
import os
DataPath='/CamVid/'
def load_data(mode):
    data=[]
    label=[]
    with open(os.getcwd()+DataPath+mode+'.txt') as f:
        txt=f.readlines()
        txt=[line.split(' ') for line in txt]
    for i in range(len(txt)):
        img_data,img_h,img_w=util.get_preprocessed_image(os.getcwd()+txt[i][0])
        data.append(img_data)
        img_label,y_h,y_w=util.get_preprocessed_label(os.getcwd()+txt[i][1][:-1])
        label.append(img_label)
    return np.array(data),np.array(label)  

其中训练样本保存在文件夹train中,其ground truth保存在trainannot文件夹中,ground truth是一通道图像,每个像素是类别索引(0~11)。保存训练图像和ground truth路径和名字的文本为train.txt,内容格式为:
/CamVid/train/0001TP_006690.png  /CamVid/trainannot/0001TP_006690.png

如果导入的是训练集,则

train_data, train_label = load_data("train")
np.save("data/train_data.npy", train_data)

util如下:

import numpy as np
from PIL import Image
from keras.applications.vgg16 import preprocess_input

def one_hot_it(labels,h,w):
    x=np.zeros([h,w,12])
    for i in range(h):
        for j in range(w):
            x[i,j,int(labels[i][j])]=1
    return x

def get_preprocessed_label(file_name):    #from 1-channel index map to 1-channel binary index map
    im=np.array(Image.open(file_name))
    img_h,img_w=im.shape
    im=one_hot_it(im,img_h,img_w)
    if img_h>500 or img_w>500:
        raise ValueError("Please resize your images to be not bigger than 500 x 500")
    pad_h=500-img_h
    pad_w=500-img_w
    im=np.pad(im,pad_width=((0,pad_h),(0,pad_w),(0,0)),mode='constant',constant_values=0)
    return im.reshape(500,500,12),img_h,img_w

def get_preprocessed_image(file_name):
    #Note: channels last
    im=np.array(Image.open(file_name)).a
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值