4-1 Working with images

news2024/12/23 5:54:30

4-Real-world data representation using tensors
How do we take a piece of data, a video, or a line of text, and represent it with a tensor in a way that is appropriate for training a deep learning model? This is what we’ll learn in this chapter.

We mentioned colors earlier. There are several ways to encode colors into numbers. The most common is RGB, where a color is defined by three numbers representing the intensity of red, green, and blue. We can think of a color channel as a grayscale intensity map of only the color in question, similar to what you’d see if you looked at the scene in question using a pair of pure red sunglasses.

在这里插入图片描述

使用conda安装imageio

conda config --add channels conda-forge
conda install imgaug

Let’s start by loading a PNG image using the imageio module (code/p1ch4/1_image_dog.ipynb).

import imageio  # 如果出现警告可换为:import imageio.v2 as imageio
img_arr = imageio.imread('D:/20230716.png')
img_arr.shape  # 注意:输入张量为H × W × C

在这里插入图片描述

At this point, img is a NumPy array-like object with three dimensions: two spatial dimensions, width and height; and a third dimension corresponding to the red, green, and blue channels. PyTorch modules dealing with image data require tensors to be laid out as C × H × W: channels, height, and width, respectively.

在这里插入图片描述
We can use the tensor’s permute method with the old dimensions for each new dimension to get to an appropriate layout. Given an input tensor H × W × C as obtained previously, we get a proper layout by having channel 2 first and then channels 0 and 1:

import torch
img = torch.from_numpy(img_arr)
out = img.permute(2, 0, 1)

out uses the same underlying storage as img and only plays with the size and stride information at the tensor level.

As a slightly more efficient alternative to using stack to build up the tensor, we can preallocate a tensor of appropriate size and fill it with images loaded from a directory, like so:

batch_size = 3
batch = torch.zeros(batch_size, 3, 500, 753, dtype=torch.uint8)
batch.shape

在这里插入图片描述

This indicates that our batch will consist of three RGB images 256 pixels in height and 256 pixels in width.Notice the type of the tensor: we’re expecting each color to be represented as an 8-bit integer, as in most photographic formats from standard consumer cameras.

We can now load all PNG images from an input directory and store them in the tensor:

import os
import imageio.v2 as imageio
data_dir = 'D:/'  # 图像文件所在的目录路径
filenames = [name for name in os.listdir(data_dir)
    if os.path.splitext(name)[-1] == '.png']  #获取目录中所有以 .png 结尾的文件名
for i, filename in enumerate(filenames):  # 遍历每个文件名和对应的索引
    img_arr = imageio.imread(os.path.join(data_dir, filename))  # 根据路径加载图像文件并将其转换为 NumPy 数组
    img_t = torch.from_numpy(img_arr)  # 将 NumPy 数组转换为 PyTorch 张量
    img_t = img_t.permute(2, 0, 1)  # 调整通道的顺序,将通道维度置于最前面(前面的输入张量为H × W × C)
    img_t = img_t[:3]  # 只保留前三个通道。有时图像也有alpha通道表示透明度,但我们的网络只需要RGB输入。
    batch[i] = img_t

关于几个函数
①enumerate(iterable, start=0)
iterable:要迭代的可迭代对象,例如列表、元组、字符串等
start(可选):索引的起始值,默认为 0

在这里插入图片描述

②os.path.splitext() 拆分文件名和文件扩展名

在这里插入图片描述

③os.path.join() 连接路径

在这里插入图片描述
We mentioned earlier that neural networks usually work with floating-point tensors as their input. Neural networks exhibit the best training performance when the input data ranges roughly from 0 to 1, or from -1 to 1 (this is an effect of how their building blocks are defined).So a typical thing we’ll want to do is cast a tensor to floating-point and normalize the values of the pixels. Casting to floating-point is easy, but normalization is trickier, as it depends on what range of the input we decide should lie between 0 and 1 (or -1 and 1).

One possibility is to just divide the values of the pixels by 255 (the maximum representable number in 8-bit unsigned):

batch = batch.float()
batch /= 255.0

Another possibility is to compute the mean and standard deviation of the input data and scale it so that the output has zero mean and unit standard deviation across each channel:

batch = batch.float()
n_channels = batch.shape[1]
for c in range(n_channels):
    mean = torch.mean(batch[:, c])
    std = torch.std(batch[:, c])
    batch[:, c] = (batch[:, c] - mean) / std

Here, we normalize just a single batch of images because we do not know yet how to operate on an entire dataset. In working with images, it is good practice to compute the mean and standard deviation on all the training data in advance and then subtract and divide by these fixed, precomputed quantities.

总结:
此文讲述了使用张量处理图像数据的相关内容。

图像被表示为一个具有高度和宽度(以像素为单位)的规则网格上的标量集合。图像可以是灰度图像,其中每个网格点(像素)有一个标量;也可以是彩色图像,其中每个网格点通常有多个标量表示不同的颜色或特征。

在彩色图像中,常用的颜色编码方式是RGB,其中颜色由代表红色、绿色和蓝色强度的三个数字表示。可以将每个颜色通道看作仅包含相应颜色的灰度强度图像。

加载图像文件时,可以使用Python中的多种方法。上文使用了imageio模块来加载PNG图像。加载后的图像被表示为一个NumPy数组,其中有三个维度:空间维度(宽度和高度)和代表红色、绿色和蓝色通道的第三个维度。

为了与PyTorch处理图像数据的模块兼容,需要将数组的维度布局更改为C×H×W,即通道、高度和宽度。可以使用tensor.permute()方法来更改张量的布局,将通道维度放在第一个位置。

为了处理多个图像作为神经网络的输入,可以将图像存储在一个批次中,批次的第一个维度表示图像的数量。可以预先分配一个适当大小的张量,然后从目录中加载图像并将其存储在张量中。

最后,讨论了数据的归一化操作。神经网络通常以浮点张量作为输入,并且最佳的训练性能是当输入数据的范围大致在0到1之间或-1到1之间时。可以将整数张量转换为浮点类型,并将像素值归一化到0到1的范围内。另一种归一化方法是计算输入数据的均值和标准差,并将其缩放,使得输出在每个通道上具有零均值和单位标准差。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/761455.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot环境配置Envirnoment

Srping Boot 中我们使用 EnvironmentAware 注入 Environment 对象后,可以在 Environment 中获得系统参数,命令行采参数,文件配置等信息。 Environment 是如何存储,管理这些值的呢?变量发生冲突怎么办呢?我…

Linux--fork创建子进程,操作系统都做了什么

一句话总结:为该进程创建内核数据结构task_struct、地址空间mm_struct、页表并创建映射关系,一定程度上还要将该进程的代码和数据加载进内存 以下是对上面的解释: 首先,fork创建子进程,是不是操作系统里多了一个进程&…

Android ART虚拟机系列: 虚拟机CheckPoint机制分析

背景 在Android ART虚拟机中,GC的部分流程中会执行stop the world的操作,那么,STW在虚拟机中如何实现呢?本文就深入到ART虚拟机源码中,探寻STW的实现过程。 【本文基于android12源码分析】 CheckPoint机制 ART虚拟机…

SPSS数据文件的合并

数据文件合并的方式分为个案合并和变量合并。 个案合并指在两个数据文件拥有同共同变量时,将其中一个数据文件的个案合并到另一个数据文件中。变量合并指在两个数据文件拥有共同个案时,将其中一个数据文件的变量合并到另一个数据文件相应的个案中。 1…

文心一言 VS 讯飞星火 VS chatgpt (60)-- 算法导论6.4 4题

文心一言 VS 讯飞星火 VS chatgpt (60)-- 算法导论6.4 4题 四、证明:在最坏情况下,HEAPSORT 的时间复杂度是Ω (nlgn)。 文心一言: 要证明在最坏情况下,HEAPSORT 的时间复杂度是 Ω(n log n)&#xff0c…

Asymmetric Student-Teacher Networks for Industrial Anomaly Detection

用于工业异常检测的不对称学生-教师网络 摘要介绍模型架构总体介绍:教师网络学生网络 实验结论 时间:2022.10.14 期刊:WACV 之前师生网络结构的不足: 具有类似体系结构的学生网络,当输入不属于训练分布的数据时&#…

前端 | (三)表单及HTML4收尾 | 尚硅谷前端html+css零基础教程2023最新

学习来源:尚硅谷前端htmlcss零基础教程,2023最新前端开发html5css3视频 文章目录 📚表单🐇基本结构🐇常用表单控件⭐️文本输入框⭐️密码输入框⭐️单选框⭐️复选框⭐️隐藏域⭐️提交按钮⭐️重置按钮⭐️普通按钮⭐…

【雕爷学编程】Arduino动手做(83)---模拟SG90舵机模块2

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

一个Spring Session JDBC例子

Spring Session JDBC是Spring Session项目的一部分,它提供了一种将会话数据存储在关系型数据库中的方法。Spring Session是一个用于在分布式环境中管理和共享会话的解决方案,它允许您通过不同的会话存储后端(如内存、关系型数据库、NoSQL数据…

使用torch.nn包来构建神经网络

神经网络 可以使用torch.nn包来构建神经网络. 我们已经介绍了autograd包,nn包则依赖于autograd包来定义模型并对它们求导。一个nn.Module包含各个层和一个forward(input)方法,该方法返回output。 例如,下面这个神经网络可以对数字进行分类…

xss跨站脚本攻击总结

XSS(跨站脚本攻击) 跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets )CSS的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当…

047、TiDB特性_TopSQL

TopSQL 之前 之前没有办法找单个TiKV Server的语句。只能查找整个集群的慢语句。 TopSQL之后 指定TiDB及TiKV实例正在执行的SQL语句CPU开销最多的Top 5 SQL每秒请求数、平均延迟等信息 TopSQL 使用 选择需要观察负载的具体TiDB Server或TiKV实例 观察Top 5 类SQL 查看某…

Linux 自动化构建工具(make/Makefile)

绪论 拼着一切代价,奔你的前程。——巴尔扎克. 本章继续学习Linux常用的工具,make是可以帮我们解决一些重复使用相同指令的冗杂的自动化构建工具。 话不多说安全带系好,发车啦(建议电脑观看)。 附:红色&…

TortoiseGit 入门指南08:浏览引用以及在引用间切换

在上一节 创建分支 中,我们学会了在分支上开发新功能,那么随之而来的问题是:如何查看项目又多少分支?如何再切换到主分支?这节来解决这些问题。 在回答之前,需要先了解一个 Git 术语:引用&…

学无止境·MySQL⑨(MongoDB)

MongoDB的安装及使用 MongoDB1、MongoDB的安装与启动2、创建一个数据库 名字grade3、数据库中创建一个集合名字 class4、集合中插入若干数据文档格式如下5、查找查看班级所有人信息查看班级中年龄为8岁的学生信息查看年龄大于10岁的学生信息查看年龄在 4---8岁之间的学生信息找…

接口测试之基于SaaS平台的iHRM项目的前端部署配置(踩坑版)

基于SaaS平台的iHRM项目的前端部署配置 下载安装node.js3.从Git上下载项目安装依赖包的改进方法 关于的部署可以参考基于SaaS平台的iHRM项目的前端部署教程博客 但本人在参考配置的过程中遇到了很多问题…于是写下这篇博客 下载安装node.js 可以访问https://nodejs.org/en下载…

利用Python绘制直方图和散点图

1 问题 利用python如何绘制直方图和散点图。 2 方法 # ------ 直方图import matplotlib.pyplot as pltimport numpy as npimport matplotlib# 设置matplotlib正常显示中文和负号matplotlib.rcParams[font.sans-serif] [SimHei] # 用黑体显示中文matplotlib.rcParams[axes.unic…

前端学习记录~2023.7.3~CSS杂记 Day4

前言一、溢出1. 默认情况2. overflow属性3. BFC 二、CSS 的值与单位1. 长度(1)绝对长度单位(2)相对长度单位 2、百分比3、数字4、颜色(1)颜色关键字(2)十六进制 RGB 值(3…

单片机第一季:零基础7——定时器和计时器

目录 1,单片机定时器原理 2,51单片机定时器/计数器结构 3,定时器配置 4,示例代码-通过定时器控制LED灯间隔1s闪烁 51 单片机有两组定时器/计数器,因为既可以定时,又可以计数,故称之为定时…

JPA实现多对多关系

本文已收录于专栏 《Java》 目录 概念说明优势利弊实现方式通过两个ManyToMany注解实现类图代码 通过OneToMany和ManyToOne注解实现类图代码 总结提升 概念说明 多对多关系是指两个实体之间存在多对多的关联关系。在数据库中,多对多关系无法直接表示,需要…