IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 0.2 pytorch深度学习--数据读取和存储(图片) -> 正文阅读

[人工智能]0.2 pytorch深度学习--数据读取和存储(图片)

这里主要想写一下图片的读取和存储。尽管李沐大神通过绘制精确度折线图的方式展示了学习的结果,但由于本人希望能得到对应的结果,例如输出图片。

在对本章熟悉后,可以做把训练后的模型用于实际应用,例如对fashion-mnist图片集按类别输出图片。

用到的技术有图片的读取,PIL和numpy的转化,numpy和torch的转化。通过简单的格式转化后输出文件。内容简单,但网上内容纷繁,为了完成这个目标,确实也花费了大量的精力,希望你看完本篇内容能有所收获。

读取图片

首先请出我们都认识的Lena

我想应该大家都认识这张照片,咱们就依然拿这张图片开始。

import torch
import numpy as np
from PIL import Image
from matplotlib import pyplot as plt
"""
    torch不需要多说,咱们的最终目标就是在学习过的模型中确定数据集所属类别并保存分类。

    numpy在这里主要是将矩阵转化成图片,通过matplotlib。没有系统研究过numpy,我一直把他当做一个中间状态使用。

    PIL,这是这节的重点,我知道有很多可以读取图片的库,其他的还有cv等。

    matplotlib如上所述,是为了展示图片使用。
"""

首先下载一张图片并复制地址,任意均可(格式jpeg或者png都可以,剩下的没有试过),可以是RPG的也可以是灰度的,甚至如果你想,四色的CMYK应该也可以,(我没试过)。

input_path = "图片路径"
img = Image.open(input_path)
    print(type(img))

>>> <class 'PIL.JpegImagePlugin.JpegImageFile'>

plt.imshow(img)
plt.show()

Image.open非常简单,即以PIL格式打开路径中的文件。类型是jpeg图片插件.jpeg图片文件

debug的过程中可以查看img的信息:

<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=789x431 at 0x16C5B3E6D90>

除了类型外,还显示了格式是RGB,图片大小是789x431。(这里是长×宽)

然后通过pyplot在python中显示这个读取进来的文件。

转成灰度照片

?接下来我们想干的是什么呢,因为我们知道fashion-mnist是一个通道,即是灰度图片。所以不管是为了练习还是为了贴近数据集,我们希望将图片转成向量并将三通道图片转化成灰度图。其实有一些很简单的函数调用可以轻松实现,但是为了锻炼动手能力,我选择自己修改。

img = np.array(img)
img = torch.from_numpy(img)
print(img.size())

>>> torch.Size([431, 789, 3])

注意这个尺寸,根据刚刚对加载为PIL的img属性查看,我们能知道前两项是宽×长,第三项则是通道。

关于三通道转灰度,已经有转化的公式。公式如下:

Gray = R*0.299 + G*0.587 + B*0.114

img_grey = torch.zeros((len(img), len(img[1])))
# 先做出来灰度图像的大小,由于是灰度图,所以不需要额外定义通道的层
for h in range(len(img)):
    for w in range(len(img[1])):
        img_grey[h][w] = img[h][w][0]*0.299 + img[h][w][1]*0.587 + img[h][w][2]*0.114
#遍历图像长宽,并按照公式将三个通道叠加
img_grey = img_grey.numpy()
plt.imshow(img_grey)
plt.show()

如果有人问说为什么要转成tensor计算再转回去(纯粹是我没用过numpy)。

?不要问为什么还有颜色,这是pyplot自己根据数值大小增加的颜色。

存储及前期准备

接下来的任务就是怎么把numpy转化成图片并保存到硬盘,并看到真正的灰色图片,但在此之前,我们还应该稍微看看numpy的数据类型和数值。

print(img_grey)
print(img_grey.dtype)

>>> [[82.957    79.957    81.957    ... 40.930996 39.931    39.931   ]
     [72.957    75.95699  74.957    ... 40.930996 40.930996 39.931   ]
     [71.957    78.957    70.957    ... 40.92     40.92     40.92    ]
     ...
     [80.006996 76.11     73.039    ... 88.746    91.745995 90.746   ]
     [82.30599  78.121    75.11     ... 89.746    93.745995 91.745995]
     [83.018    79.30601  76.121    ... 87.034    91.034004 92.034004]]
>>> float32

首先能看到数值应该都是非负数。如果用过Photoshop,应该知道其实他们应该是0-255之间的整数,因此为了转化成图片,需要对这些数字取整并将数据类型改为uint8。

img_grey = img_grey.round().astype(np.uint8)
print(img_grey)
print(img_grey.dtype)

>>> [[83 80 82 ... 41 40 40]
     [73 76 75 ... 41 41 40]
     [72 79 71 ... 41 41 41]
     ...
     [80 76 73 ... 89 92 91]
     [82 78 75 ... 90 94 92]
     [83 79 76 ... 87 91 92]]
>>> uint8

为什么改成uint8呢。因为2^8-1等于255。

更改后,可以准备把图片存起来了,解铃还须系铃人,还需要将numpy类转成PIL类并最终保存到硬盘。

img = Image.fromarray(img_grey)
output_path = "输入你的输出路径"
img.save(output_path)

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-01-30 18:56:35  更:2022-01-30 18:57:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 20:28:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码