【从零开始学习Tensorflow】(四)第6章 图像识别与卷积神经网络


转载请注明作者和出处: https://blog.csdn.net/weixin_37392582
代码平台https://gitee.com/wuweijun
开发平台: Win10 + Python3.6 + Anaconda3
笔  者: 无尾


笔者注:【从零开始学习Tensorflow】系列博客为《Tensorflow + 实战 Google 深度学习框架》一书的学习笔记。



前言


在第5章中,通过 MNIST 数据集验证了第 4 章介绍的神经网络设计与优化的方法。从实验结果可以看出,神经网络的结构会对神经网络的准确率产生巨大的影响。本章将介绍一个非常常用的神经网络结构——卷积神经网络(Convolutional Neural Network, CNN)。卷积神经网络应用很广,在自然语言处理、医药发现、灾难气候发现甚至围棋人工智能程序中都有应用。本章主要通过 CNN 在图像识别上的应用来讲解卷积神经网络的基本原理以及如何使用 TensorFlow 实现卷积神经网络。

首先,第一节中,将介绍图像识别领域解决的问题以及图像识别领域中经典的数据集。

第二节中,将介绍卷积神经网络的主体思想和整体架构。

第三节中,将详细讲解卷积层和池化层的网络结构,以及 TensorFlow 对这些网络结构的支持。

第四节中,将通过两个经典的卷积神经网络模型来介绍如何设计卷积神经网络的架构以及如何设置每一层神经网络的配置。这一节将通过 TensorFlow 实现 LeNet-5 模型,并介绍 TensorFlow-Slim 来实现更加复杂的 Inception-v3 模型中的 Inception 模块。

最后在第五节中,将介绍如何通过 TensorFlow 实现卷积神经网络的迁移学习

Let’s Go!


一、图像识别问题简介及经典数据集

图像识别问题希望借助计算机程序来处理、分析和理解图片中的内容,使得计算机可以从图片中识别各种不同模式的目标和对象。近几年来,图像识别问题作为人工智能的一个重要领域取得了很多突破性的进展。

在第5章使用了 MNIST 手写识别数据集,这是一个相对简单的数据集,在更加复杂的图像识别数据集上,卷积神经网络能够有更加突出的表现。Cifar 数据集就是一个影响力很大的图像分类数据集。 Cifar 数据集分为了 Cifar-10 和 Cifar-100 两个问题,他们都是图像词典项目(Visual Dictionary)中 800 万张图片的一个子集。 Cifar数据集中的图片为 32×32 的彩色图片,这些图片是由 Alex Krizhevsky 教授、Vinod Nair 博士和 Geoffrey Hinton 教授整理的。

Cifar-10 问题收集了 10 个不同种类的 60000 张图片,类别分别有:飞机,汽车,鸟,猫,鹿,狗,青蛙,马,船和卡车。Cifar 官网提供了不同格式的 Cifar 数据集下载

'''
The archive contains the files data_batch_1, data_batch_2, ..., data_batch_5, as well as test_batch. 
Each of these files is a Python "pickled" object produced with cPickle. 
Here is a python3 routine which will open such a file and return a dictionary:
'''
def unpickle(file):
    import pickle
    with open(file, 'rb') as fo:
        dict = pickle.load(fo, encoding='bytes')
    return dict

CSDN 无尾君

但是无论是 MNIST 数据集还是 Cifar数据集,相比真实环境下的图像识别问题,有两个最大的问题。第一,现实生活中的图片分辨率要远高于 32×32,而且图像的分辨率也不会是固定的。第二,现实生活中的物体类别很多,无论是 10 种还是 100 种都远远不够,而且一张图片中不会只出现一个种类的物体。为了更贴近真实环境下的图像识别问题,由斯坦福大学的李飞飞教授带头整理的 ImageNet 很大程度上解决了这两个问题。

ImageNet 是一个基于 WordNet 的大型图像数据库。在 ImageNet 中,将近 1500 万图片被关联到了 WordNet 的大约 20000 个名词同义词集上。目前每一个与 ImageNet 相关的 WordNet 同义词集都代表了现实世界的一个实体,可以被认为是分类问题中的一个类别。 ImageNet 中的图片都是从互联网上爬取下来的,并且通过亚马孙的人工标注服务将图片分类到 WordNet的同义词集上。在 ImageNet 的图片中,一张图片中可能出现多个同义词集所代表的实体。

ImageNet每年都举办图像识别相关的竞赛(ImageNet Large Scale Visual Recognition Challenge, ILSVRC)。ImageNet官网 列出了历届 ILSVRC 竞赛的题目和数据集。本书将着重介绍使用的最多的 ILSVRC2012 图像分类数据集。

ILSVRC2012 图像分类数据集的任务和 Cifar 数据集基本一致,也是识别图像中的主要物体。 ILSVRC2012 图像分类数据集包含了来自 1000 个类别的 120 万张图片,其中每张图片属于且只属于一个类别,因为图片是直接从网上爬的,图片大小从几千字节到几百万字节不等。


二、卷积神经网络简介


卷积神经网络在前一节介绍的所有图像分类数据集上由非常突出的表现。在前面章节中所介绍的神经网络每两层之间的所有节点都是有边相连的,所有书中称这种网络结构为全连接层网络结构。为了将只包含全连接层的神经网络与卷积神经网络、循环神经网络区分开,书中将只包含全连接层的设施南京网络称之为全连接神经网络。在这一节中将讲解卷积神经网络与全连接神经网络的差异,并介绍组成一个卷积神经网络的基本网络结构。全连接神经网络与卷积神经网络对比图如下:

CSDN 无尾君

卷积神经网络与全连接神经网络的整体假体非常相似。同全连接神经网络一样,卷积神经网络也是通过一层一层的节点组织起来的。CNN(后面用缩写)中的每一个节点都是一个神经元。在全连接神经网络中,每相邻两层之间的节点都有边相连,于是一般会将每一层全连接层中的节点组织成一列,这样方便显示连接结构。而对于CNN,相邻两层之间只有部分节点相连,为了展示每一层神经元的维度,一般会将每一层卷积层的节点组成一个三维矩阵。

除了结构相似,CNN 的输入输出以及训练流程与全神经网络也基本一致。以图像分类为例,CNN 的输入层就是图像的原始像素,而输出层中的每一个节点代表了不同类别的可置信度。这和全连接神经网络的输入输出是一致的。类似的,第4章中介绍的损失函数以及参数的优化过程也都适用于 CNN 。在后面的章节中会看到,在 TensorFlow 中训练一个 CNN 的流程和训练一个全连接神经网路没有任何区别。CNN 和全连接神经网络的唯一区别就在于神经网络中相邻两层的连接方式。在进一步介绍 CNN 的连接结构之前,本节将先介绍为什么全连接神经网络无法很好地处理图像数据。

全连接神经网络处理图像的最大问题在于全连接层的参数太多。以第一层隐藏层为例,如果隐藏层节点数为 500 个,MNIST 的一张图片大小是 28×28×1,1表示图像是黑白的,只有一个彩色通道。那么一个全连接神经网络的隐藏层将有 28*28*500 (权重)+ 500(偏置) = 392500 个参数。 在 Cifar数据集中,图片大小是 32×32×3,3表示图片是通过红绿蓝三个色彩通道(channel)表示的,如果第一层全连接层仍然是 500 个节点, 那么这一层将有 32×32×3×500+500≈150 万个参数。参数增多除了导致计算速度减慢,还很容易导致过拟合问题。所以需要一个更合理的神经网络来有效地减少神经网络中参数个数。CNN就可以达到这个目的。

CSDN 无尾君

在 CNN 的前几层中,每一层的节点都被组织成一个三维矩阵。比如处理 Cifar-10 数据集中的图片时,可以将输入层组织成一个 32×32×3 的三维矩阵。途中虚线部分展示了 CNN 的一个连接示意图,从图中可以看到 CNN 的前几层中每一个节点只和上一层中部分的节点相连。CNN 的具体连接方式将在第三节中介绍。一个 CNN 主要由以下 5 种结构组成:

1、输入层。
输入层时整个神经网络的输入,在处理图像的卷积神经网络中,它一般代表了一张图片的像素矩阵。三维矩阵代表一张图片,三维矩阵的长和宽代表了图像的大小,而三维矩阵的深度代表了图像的色彩通道(channel)。比如黑白图片深度为 1,而在 RGB 色彩模式下,图像的深度为 3。从输入层开始,卷积神经网络通过不同的神经网络结构将上一层的三维矩阵转化为下一层的参为矩阵,直到最后的全连接层。

2、卷积层。
和传统全连接层不同,卷积层中每一个节点的输入只是上一层神经网络的一小块,这个小块常用的大小有 3×3 或者 5×5.卷积层试图将神经网络中的每一小块进行更加深入地分析从而得到抽象程度更高的特征。一般来说,通过卷积层处理过的节点矩阵会变得更“深”,所有在图 6-7 中可以看到经过卷积层之后的节点矩阵的深度会增加。

3、池化层(Pooling)。


三、辛苦写的没有保存上,跳过一大部分,后面再补全


四、经典卷积网络模型


放上一个 类似 LeNet - 5的模型

猜你喜欢

转载自blog.csdn.net/weixin_37392582/article/details/79887855