tensorflow2.3实现猫狗数据集图像语义分割(一)

本文介绍了如何使用TensorFlow 2.3 在少量数据下,通过U-Net网络对猫狗数据集进行语义分割,包括数据预处理、模型构建(利用VGG16特征提取并上采样)、训练过程和预测展示。重点讲解了数据增强、模型结构及训练策略。

tensorflow2.3实现猫狗数据集图像语义分割

语义分割(semantic segmentation)

对图像而言,常见的任务是:

  • 图像分类:提取类别特征,如:VGG19网络
  • 目标检测:提取类别,位置特征,如:YOLO网络
  • 语义分割(实例分割):提取类别,位置特征,针对每个像素,如:Deeplab网络

U-Net网络可以利用较少的数据集进行端到端训练,医学领域应用较多(医学领域的标注数据获取成本很高)。

为了更有效的利用标注数据,采用数据增强的方法(训练样本进行随机弹性形变)
网络由收缩路径获取上下文信息以及一个对称的扩张路径用以精确定位。
在这里插入图片描述

图像语义分割是对图像中每一个像素点进行分类,确定每个点的类别(属于背景,边缘,或身体等)

语义分割的目标,一般是将一张RGB图像或是灰度图像作为输入,输出的是分割图,其中每一个像素包含了其类别的标签。

代码

导入包

import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
import random
import glob
import os

显存自适应分配,查看tensorflow 的版本

os.environ["CUDA_VISIBLE_DEVICES"] = "1"
tf.__version__
  • ‘2.3.0’

读取一张语义分割图像

img = tf.io.read_file('./dataset/annotations/trimaps/yorkshire_terrier_99.png')
img = tf.image.decode_png(img)
img = tf.squeeze(img)
print(img.shape)
plt.imshow(img)
  • (358, 500, 1)
    在这里插入图片描述
img.numpy().max(), img.numpy().min()
np.unique(img.numpy())
  • (3, 1) 语义分割的最大与最小值

  • array([1, 2, 3], dtype=uint8) 由此看来语义分割结果分类只有1,2,3三个整数值。

读取一张图像

img = tf.io.read_file('./dataset/images/yorkshire_terrier_99.jpg')
img = tf.image.decode_jpeg(img)
plt.imshow(img)
  • TensorShape([358, 500, 3])

在这里插入图片描述
读取数据
为了把图像数据和标签数据是一一对应的,所以按照名称进行排序。

images = glob.glob('./dataset/images/*.jpg')
images.sort(key=lambda x: x.split('/images/')[-1].split('.jpg')[0])
print(images[:5])
anno = glob.glob('./dataset/annotations/trimaps/*.png')
anno.sort(key=lambda x: x.split('/trimaps/')[-1].split('.png')[0])
print(anno[:5])
  • [’./dataset/images/Abyssinian_1.jpg’,
    ‘./dataset/images/Abyssinian_10.jpg’,
    ‘./dataset/images/Abyssinian_100.jpg’,
    ‘./dataset/images/Abyssinian_101.jpg’,
    ‘./dataset/images/Abyssinian_102.jpg’]
  • [’./dataset/annotations/trimaps/Abyssinian_1.png’,
    ‘./dataset/annotations/trimaps/Abyssinian_10.png’,
    ‘./dataset/annotations/trimaps/Abyssinian_100.png’,
    ‘./dataset/annotations/trimaps/Abyssinian_101.png’,
    ‘./dataset/annotations/trimaps/Abyssinian_102.png’]

训练输入乱序
设置随机数种子生成的随机数将会是同一个

np.random.seed(2021)
index = np.random
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值