使用Keras有效压缩图像(附实例)

发布:2022-10-28 11:07:40
阅读:1289
作者:网络整理
分享:复制链接

数据是人工智能的关键,但是一个成熟的人工智能应用,一定是经过海量的数据处理,而这些海量数据的存储算得上是一项巨大挑战。常见的数据类型有音频、图像、视频和文本,本文就来讨论如何通过Keras以数据压缩的形式解决图像文件存储的问题。

首先,要明白Keras是什么。作为一个由Python编写的深度神经网络库,有不同的神经网络压缩数据方式,如长短期记忆、循环神经网络或自动编码器。

使用Keras进行简单的图像压缩

使用基本的自动编码器压缩黑白图像。对于这种情况,基于典型前馈神经网络的自动编码器就足够了。

作为模型的数据源,选择公共MNIST数据集,该数据集包含通常用于训练各种图像处理系统的手写数字。

1.首先,借助pip安装包安装一些库:

pip install tensorflow==2.4.3
pip install keras==2.4.3
pip install matplotlib==3.3.4
pip install numpy==1.19.5
pip install extra-keras-datasets==1.2.0

2. 然后开始编写一个简单的深度学习模型并导入所需的类和模块:

from keras.layers import Input, Dense
from keras.datasets import mnist
from keras.models import Model

import numpy as np

3. 现在,编写一个函数,创建一个简单的自动编码器,其中一个隐藏层为 64 个神经元,用于模型的编码器和解码器部分:

IMAGE_SIZE = 784 # 28 * 28 pixels

def encoder(input_image, code_dimention):
layer1 = Dense(64, activation='relu')(input_image)
layer2 = Dense(code_dimention, activation='sigmoid')(layer1)

return layer2

def decoder(encoded_image):
layer1 = Dense(64, activation='relu')(encoded_image)
layer2 = Dense(IMAGE_SIZE, activation='sigmoid')(layer1)

return layer2

4. 接下来,加载数据集并开始训练神经网络。在下面的示例中,来回运行数据集十次,批大小为 64:

input_image = Input(shape=(IMAGE_SIZE, ))

model = Model(input_image, decoder(encoder(input_image, 100)))
model.compile(loss='mean_squared_error', optimizer='nadam')

(x_train, _), (x_test, _) = mnist.load_data()

# Normalize data
x_train = x_train.astype('float32') /= 255.0
x_train = x_train.reshape((len(x_train), np.prod(x_train.shape[1:])))

x_test = x_test.astype('float32') /= 255.0
x_test = x_test.reshape((len(x_test), np.prod(x_test.shape[1:])))

# Training
model.fit(x_train, x_train, batch_size=64, epochs=10, validation_data=(x_test, x_test), shuffle=True)

解压缩结果将根据所选的code大小(代码层中的节点数量)而有所不同。

当code=128时,图片压缩效果如图:

当code=32时,图片压缩效果如图:

当code=8时,图片压缩效果如图:

通过上述结果可知,随着code减小代,解压缩图片的质量会变差。这就是为什么需要确定好数据被压缩的程度,以便在图片解压缩后保持可容忍的质量。

扫码进群
微信群
免费体验AI服务