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

devtools/2025/1/16 3:33:46/

一、图像基本知识

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

import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
import tensorflow as tfdef 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 Noneif __name__ == "__main__":picture_read()

filename打印例子:

tf.Tensor(b'./dog/dog.73.jpg', shape=(), dtype=string)

image打印例子:

image:  (375, 499, 3) <dtype: 'uint8'>

resize打印例子:

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()调整大小
 


http://www.ppmy.cn/devtools/18031.html

相关文章

设计模式:合成复用原则(Composite Reuse Principle,CRP)介绍

合成复用原则&#xff08;Composite Reuse Principle&#xff0c;CRP&#xff09;是面向对象设计原则之一&#xff0c;它强调通过组合已有的对象来实现新的功能&#xff0c;而不是通过继承已有的类来实现。合成复用原则的核心思想是尽量使用对象组合而不是类继承&#xff0c;从…

阿里云mysql8.0 this is incompatible withsql mode=only full group by

阿里云RDS中mysql5.6升级为8.0后&#xff0c;出现如下问题&#xff1a; ### Error querying database. Cause:java.sql.SQLSyntaxErrorException: Expression #1 of SELECT listis not in GROUP BY clause and contains nonaggregatedcolumn temp.product_id which is not fun…

PC40与PC95磁芯的区别

磁芯pc95和pc40的差别在于PC95磁芯Pcv降低5%磁导率随温度变化小于PC40&#xff0c;利于谐振低温特性好,用在电源产品中低温效率高。另外就是PC95价格高。 PC是TDK公司对磁芯材料的命名&#xff0c; 类似有PC40&#xff0c;PC44&#xff0c;PC95&#xff0c;数字越大价格越高&am…

网站HTTP怎么改成HTTPS?——免费版

想把网站从HTTP转成更安全的HTTPS&#xff1f;按以下步骤走&#xff1a; 1. 选SSL证书&#xff1a; - 免费的够用就选免费的&#xff08;适合个人小站&#xff09;&#xff0c;想要更高级安全保障就买付费的&#xff08;适合企业、电商等&#xff09;。 2. 申请证书&#xff1a…

ARM学习(26)链接库的依赖查看

笔者今天来聊一下查看链接库的依赖。 通常情况下&#xff0c;运行一个可执行文件的时候&#xff0c;可能会出现找不到依赖库的情况&#xff0c;比如图下这种情况&#xff0c;可以看到是缺少了license.dll或者libtest.so&#xff0c;所以无法运行。怎么知道它到底缺少什么dll呢&…

AI边缘计算盒子+ThingSense管理平台,推动明厨亮灶智慧监管新篇章

背景随着“互联网”时代的浪潮汹涌而至&#xff0c;国家及各地政府纷纷在“十四五”规划中明确指出&#xff0c;强化食品安全管理&#xff0c;利用技术手段实现智慧监管是刻不容缓的任务。为此&#xff0c;各地正加速推进“互联网明厨亮灶”的建设步伐&#xff0c;实现系统对接…

【Unity动画系统】动画基本原理与Avater骨骼复用

动画基本原理 动画片段文件是一个描述物体变化状态的文本文件 在Unity中创建的资源文件大多都是YAML语言编写的文本文件 Curves表示一种变化状态&#xff0c;为空的话则没有记录任何内容 位置变化后的旋转变化状态&#xff1a; 动画文件里的Path名字要相同才能播放相同的动画 …

SQL中不等于的写法

1. <> 与!都是不等于的意思&#xff0c;但是一般都是用<>来代码不等于因为<>在任何SQL中都起作用但是!在sql2000中用到&#xff0c;则是语法错误&#xff0c;不兼容的 2. 不等于&#xff1a;<> 、!、~ 、^ 这四个符号据说都可以在oracle中表示不等于&a…