本文分享了我在silent speech 项目过程中实现的基于嘴唇图像数据集的autoencoder自编码器。输入输出都是64∗6464*6464∗64的嘴唇灰度图。自编码器由编码解码两个部分构成,同时实现了利用checkpoint在每个epoch运算时,自动保存测试集loss更小的模型。

数据集共包含84679张图片,其中前68728张图片作为训练集,后15951张图片作为测试集。

import tensorflow as tf
from tensorflow.keras import layers
from tensorflow import keras
import numpy as np
from tensorflow.keras.callbacks import ModelCheckpoint
from tensorflow.keras import optimizers
from matplotlib import pyplot as plt
from tensorflow.keras import Input
from tensorflow.keras.layers import Dense, Conv2D, MaxPooling2D, concatenate, Flatten, Conv2DTranspose, UpSampling2D
from tensorflow.keras.models import Modeldef autoencoder_lips():input_img = Input(shape=(64, 64, 1))# encodingconv1 = Conv2D(filters=16, kernel_size=(5, 5), activation='relu', padding='same', name='lip_conv1')(input_img)conv2 = Conv2D(filters=16, kernel_size=(5, 5), activation='relu', padding='same', name='lip_conv2')(conv1)pooling1 = MaxPooling2D(pool_size=(2, 2), name='lip_pooling1')(conv2)conv3 = Conv2D(filters=32, kernel_size=(3, 3), activation='relu', padding='same', name='lip_conv3')(pooling1)conv4 = Conv2D(filters=32, kernel_size=(3, 3), activation='relu', padding='same', name='lip_conv4')(conv3)pooling2 = MaxPooling2D(pool_size=(2, 2), name='lip_pooling2')(conv4)# decodingconv5 = Conv2D(filters=32, kernel_size=(3, 3), activation='relu', padding='same', name='lip_conv5')(pooling2)conv6 = Conv2D(filters=32, kernel_size=(3, 3), activation='relu', padding='same', name='lip_conv6')(conv5)upsample1 = UpSampling2D(size=(2, 2), name='lip_upsample1')(conv6)conv7 = Conv2D(filters=16, kernel_size=(5, 5), activation='relu', padding='same', name='lip_conv7')(upsample1)conv8 = Conv2D(filters=16, kernel_size=(5, 5), activation='relu', padding='same', name='lip_conv8')(conv7)upsample2 = UpSampling2D(size=(2, 2), name='lip_upsample2')(conv8)decoded = Conv2D(filters=1, kernel_size=(5, 5), activation='sigmoid', padding='same', name='lip_decoded')(upsample2)autoencoder_lip = Model(input_img, decoded, name='autoencoder_lips')autoencoder_lip.summary()return autoencoder_lipif __name__ == "__main__":X = np.load("lips_all_chapiters.npy")nb_images_chapiter7 = 15951# normalisationX = X/255.0# ch1-ch6X_train = X[:-15951, :]X_test = X[-15951:, :]model = autoencoder_lips()my_optimizer = keras.optimizers.Adam(learning_rate=0.0001, epsilon=1e-8)model.compile(optimizer=my_optimizer, loss='binary_crossentropy')filepath = "autoencoder_lips/autoencoder_lips-{epoch:02d}-{val_loss:.8f}.h5"checkpoint = ModelCheckpoint(filepath, monitor='val_loss', verbose=1,save_best_only=True, mode='auto')  # only save improved accuracy modelcallbacks_list = [checkpoint]history = model.fit(x=X_train, y=X_train, batch_size=256, epochs=100, callbacks=callbacks_list,validation_data=(X_test, X_test))

训练好的自编码器最终在测试集上的表现如下 :

第一行是原始输入的图像,第二行是自编码器输出的对应图像。我们可以发现虽然自编码器生成的图像与原图像相比损失了清晰度,但是整体上还原了图像原本的形态。我们因此可以利用自编码器的中间层作为压缩后的图像信息,或称features特征。自编码器往往可以用于压缩信息,或作为进一步进行学习的中间标签。

keras实现嘴唇图像autoencoder相关推荐

  1. 使用CV2和Keras OCR从图像中删除文本

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 介绍 本文将讨论如何快速地从图像中删除文本,作为图像分类器的预处理 ...

  2. RDKit | 基于keras的化合物SeqToSeq Autoencoder

    简介 输入化合物结构smiles并创建一个自动编码器模型,该模型将在尺寸压缩后恢复化合物结构smiles.尽管它不是VAE,不能用于生成化合物,但是可以将编码层(图中的压缩表示)用作分子指纹. 数据集 ...

  3. 30分钟 Keras 创建一个图像分类器

    深度学习是使用人工神经网络进行机器学习的一个子集,目前已经被证明在图像分类方面非常强大.尽管这些算法的内部工作在数学上是严格的,但 Python 库(比如 keras)使这些问题对我们所有人都可以接近 ...

  4. Keras处理TIFF图像

    Keras是一个高层神经网络API,Keras由纯Python编写而成并基Tensorflow.Theano以及CNTK后端.Keras 为支持快速实验而生,能够把你的idea迅速转换为结果,如果你有 ...

  5. 使用Keras构建深度图像搜索引擎

    动机 想象一下,如果有数十万到数百万张图像的数据集,却没有描述每张图像内容的元数据.我们如何建立一个系统,能够找到这些图像的子集来更好地回答用户的搜索查询? 我们基本上需要的是一个搜索引擎,它能够根据 ...

  6. 【Python学习】 - 使用PIL, cv2, keras.preprocessing, scipy.imageio, matplotlib.image, skimage读取和保存图像的方法

    python中图像处理相关库有很多,这里简单介绍PIL.cv2.scipy.imageio .matplotlib.image.skimage等常用库,其中PIL库使用最方便,cv2库功能最强大. P ...

  7. tensorflow算法实战:普通的数据训练和迁移学习之后的数据训练进行图像的识别(包括前端页面)

    文章目录 1.数据集的准备: 2.requirements.txt文件: 3.文件结构: 4.预测效果: 5.首先普通的训练: (1)导入相关的库函数: (2)相关的变量的初始化: (3)数据增强和导 ...

  8. 基于Autoencoder的反欺诈数据集的异常检测

    Autoencoder算法是一种常见的基于神经网络的无监督学习降维方法(其他常见降维方法). 本教程中,我们利用python keras实现Autoencoder,并在信用卡欺诈数据集上进行异常检测算 ...

  9. opencv videoio无法读取rstp_使用一行Python代码从图像读取文本

    作者 | Dario Radečić 编译 | VK 来源 | Towards DataScience 处理图像不是一项简单的任务.对你来说,作为一个人,很容易看着某样东西然后马上知道你在看什么.但电 ...

最新文章

  1. 四次面试:程序员越来越悲催了
  2. python避免深度嵌套的if-else_避免嵌套If语句?(Python 2.7)
  3. 【转】我的第一个Python小程序
  4. C#趣味程序---水仙花数
  5. 矩阵手册(五)—— 内积
  6. poj3984(经典dfs)
  7. odoo Botton标签属性详解
  8. matlab教程分析,MATLAB数据分析教程
  9. 揭秘!女程序员为啥更赚钱?这4个大招,用Python做副业躺赚
  10. 猴子摘香蕉-人工智能实验的思考
  11. 网易云音乐热评的规律,44万条数据告诉你
  12. import 与 import()
  13. VaR方法(Value at Risk,简称VaR)[风险价值模型]
  14. 三国人物论—44—吕蒙
  15. 【SpringBoot学习】5、SpringBoot 实现文件上传,图片上传并显示功能
  16. MFC Windows程序设计 读书笔记2
  17. ios 模式讲解runtime runloop
  18. wait释放锁的说明
  19. 学术文献翻译改写 F36(含心得)
  20. 使用Druid数据源配置方法

热门文章

  1. 2018华工计算机应用基础作业,计算机应用基础平时作业2019
  2. linux 进程 释放内存,Linux 释放内存方法和原理
  3. python批处理栅格转点_python获取栅格点和面值的实现
  4. md5模式 签名_MD的完整形式是什么?
  5. c++stl和std_std :: replace()函数以及C ++ STL中的示例
  6. 回文数、括号匹配(栈操作)
  7. php curl form-data,在php curl multipart / form-data请求中发送一个文件和json数据
  8. LeetCode上读不懂题!看不懂测试用例的那些题(有生之年更新。。。)
  9. 使用dup2实现重定向到屏幕终端遇到问题
  10. [Linux]继续探究mysleep函数(竞态条件)