深度学习基础之《TensorFlow框架(12)—图片数据》

一、图像基本知识

1、如何转换图片文件

回忆:之前我们在特征抽取中讲过如何将文本处理成数据

思考:如何将图片文件转换成机器学习算法能够处理的数据?

我们经常接触到的图片有两种,一种是黑白图片(灰度图),另一种是彩色图片

组成图片的最基本单位是像素

2、特征抽取

文本特征抽取:转换成数值,二维数组shape(n_samples, m_features)

n_samples行,m_features列

字典特征抽取:转换成数值,二维数组shape(n_samples, m_features)

one-hot编码

图片怎么特征抽取?

3、图片三要素

组成一张图片特征值是所有的像素值,有三个维度:图片长度、图片宽度、图片通道数

图片的通道数是什么?

描述一个像素点,如果是灰度图,那么只需要一个数值来描述它,就是单通道

如果一个像素点,有RGB三种颜色来描述它,就是三通道

灰度图:单通道

彩色图:三通道,RGB

4、图片的特征抽取

图片:转换成数值,三维数组shape(图片长度、图片宽度、图片通道数)

灰度图[长,宽,1]

每一个像素点是[0, 255]的数,越接近255越白

彩色图[长,宽,3]

每一个像素点是三个通道(每个通道又是一个灰度图)

一个彩色像素点是由三个通道像素点组合而成

每一个像素点用3个[0, 255]的数来表示

5、如果一张彩色图片的长为200,宽为200,通道数为3,那么总的像素为:200 * 200 * 3

二、图片张量的形状

1、在tensorflow中如何用张量表示一张图片呢?

Tensor(指令名称, shape, dtype)

一张图片可以被表示成一个3D张量,即其形状为[height, width, channel],height就表示高,width表示宽,channel表示通道数。我们会经常遇到3D和4D的表示

2、单个图片

一张图片,shape部分 = (height, width, channel)

3、多个图片

多张图片,shape部分 = (batch, height, width, channel),batch表示一个批次的张量数量

三、图片特征值处理

1、图片数据集

(1)一个样本图片:327 * 499 * 3,数据量过大

(2)样本和样本的形状不统一,没办法进行批量操作和运算

2、为什么要将图片缩放到统一大小?

在进行图像识别的时候,每个图片样本的特征数量要保持相同。所以要将所有图片张量大小统一转换

另一方面,如果图片的像素量太大,通过这种方式适当减少像素的数量,减少训练的计算开销

3、tf.image.resize(images, size)

说明:

(1)缩放图片

(2)images:4-D形状[batch, height, width, channels]或3-D形状的张量[height, width, channels]的图片数据

(3)size:是1-D int32张量,有2个要素:new_height,new_width,图像的新尺寸

(4)返回4-D格式或者3-D格式图片

四、图片数据格式

1、存储

用统一的uint8(节约空间)

2、矩阵计算

float32(提高精度)

五、案例:狗图片读取

1、读取流程分析

(1)构造图片文件名队列

(2)读取图片数据并进行解码

(3)处理图片数据形状

(4)运行

2、代码day02_dog_picture_read.py

python 复制代码
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
import tensorflow as tf

def picture_read():
    """
    狗图片读取案例
    """
    image_dataset = []  #创建一个空列表
    image_resize = []

    # 1、构造文件名列表
    filenames = tf.data.Dataset.list_files("./dog/*.jpg")
    for filename in filenames:
        print(filename)

    # 2、读取与解码
    for filename in filenames:
        raw = tf.io.read_file(filename)
        image = tf.io.decode_jpeg(raw, channels=3)
        print("image: ", image.shape, image.dtype)
        image_dataset.append(image)

    # 3、批处理

    #print("image_dataset: ", image_dataset)

    # 图像的形状、类型修改
    for image in image_dataset:
        resize = tf.image.resize(image, [200, 200])
        print("resize: ", resize)
        image_resize.append(resize)

    #print("image_resize: ", image_resize)

    return None

if __name__ == "__main__":
    picture_read()

filename打印例子:

python 复制代码
tf.Tensor(b'./dog/dog.73.jpg', shape=(), dtype=string)

image打印例子:

python 复制代码
image:  (375, 499, 3) <dtype: 'uint8'>

resize打印例子:

python 复制代码
resize:  tf.Tensor(
[[[ 35.787663  35.787663  43.787663]
  [ 28.08867   28.846172  32.36117 ]
  [ 17.412218  17.412218  15.636655]
  ...
  [103.03774  106.03774  114.813324]
  [102.62288  105.62288  113.107925]
  [ 93.996574  96.780716 101.780716]]

 [[ 60.637985  60.637985  69.14299 ]
  [ 27.600521  28.289515  32.010033]
  [ 19.479155  19.479155  18.004156]
  ...
  [ 32.533382  35.607536  41.51757 ]
  [ 35.41387   37.985897  43.11993 ]
  [ 43.380077  43.592636  47.422752]]

 [[ 69.490005  69.490005  78.20056 ]
  [ 23.95669   24.47169   28.818346]
  [ 22.8125    22.8125    21.6125  ]
  ...
  [ 39.336327  43.336327  45.53636 ]
  [ 22.146877  23.9786    25.84197 ]
  [ 50.45275   47.524483  48.972183]]

 ...

 [[106.42441   86.42441   79.42441 ]
  [121.99182  101.99182   94.99182 ]
  [169.41891  149.4189   142.4189  ]
  ...
  [145.95242  122.95242  114.95242 ]
  [147.68799  124.68798  116.68798 ]
  [122.67888  102.26643   95.12895 ]]

 [[117.95943   94.80693   91.95943 ]
  [124.60395  101.27746  100.38693 ]
  [153.56409  129.69409  130.43408 ]
  ...
  [142.74245  118.30745  112.796585]
  [142.50908  117.41502  113.44056 ]
  [131.79726  109.64476  101.92726 ]]

 [[141.82442  117.82442  117.82442 ]
  [120.10246   95.10246   98.34496 ]
  [131.69261  106.69261  110.69261 ]
  ...
  [154.4974   126.497406 123.497406]
  [147.52274  120.795166 120.522736]
  [135.49553  112.49553  104.49553 ]]], shape=(200, 200, 3), dtype=float32)

先用tf.data.Dataset.list_files()获取文件名列表,然后用tf.io.read_file()读取成dtype string类型的tensor对象,然后用tf.io.decode_jpeg()解码成dtype uint8类型的tensor对象,然后把解码后的image放入列表里,然后用tf.image.resize()调整大小

相关推荐
泰迪智能科技012 小时前
高校深度学习视觉应用平台产品介绍
人工智能·深度学习
Jeremy_lf3 小时前
【生成模型之三】ControlNet & Latent Diffusion Models论文详解
人工智能·深度学习·stable diffusion·aigc·扩散模型
冰蓝蓝5 小时前
深度学习中的注意力机制:解锁智能模型的新视角
人工智能·深度学习
wydxry7 小时前
LoRA(Low-Rank Adaptation)模型微调
深度学习
IT古董9 小时前
【漫话机器学习系列】019.布里(莱)尔分数(Birer score)
人工智能·深度学习·机器学习
醒了就刷牙9 小时前
transformer用作分类任务
深度学习·分类·transformer
小陈phd10 小时前
深度学习实战之超分辨率算法(tensorflow)——ESPCN
网络·深度学习·神经网络·tensorflow
gloomyfish11 小时前
【开发实战】QT5+ 工业相机 + OpenCV工作流集成演示
图像处理·深度学习·qt·opencv·计算机视觉
视觉&物联智能11 小时前
【杂谈】-为什么Python是AI的首选语言
开发语言·人工智能·python·深度学习·机器学习
Sherry Wangs12 小时前
PromptGIP:Unifying lmage Processing as Visual Prompting Question Answering
人工智能·深度学习·图像增强·数字人技术·all-in-one