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

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

被折叠的 条评论
为什么被折叠?



