2016-01-18 00:19:13 taigw 阅读数 90562

一,前言

卷积神经网络(Constitutional Neural Networks, CNN)是在多层神经网络的基础上发展起来的针对图像分类和识别而特别设计的一种深度学习方法。先回顾一下多层神经网络:
这里写图片描述
多层神经网络包括一个输入层和一个输出层,中间有多个隐藏层。每一层有若干个神经元,相邻的两层之间的后一层的每一个神经元都分别与前一层的每一个神经元连接。在一般的识别问题中,输入层代表特征向量,输入层的每一个神经元代表一个特征值。

在图像识别问题中,输入层的每一个神经元可能代表一个像素的灰度值。但这种神经网络用于图像识别有几个问题,一是没有考虑图像的空间结构,识别性能会受到限制;二是每相邻两层的神经元都是全相连,参数太多,训练速度受到限制。

而卷积神经网络就可以解决这些问题。卷积神经网络使用了针对图像识别的特殊结构,可以快速训练。因为速度快,使得采用多层神经网络变得容易,而多层结构在识别准确率上又很大优势。

二,卷积神经网络的结构

卷积神经网络有三个基本概念:局部感知域(local receptive fields),共享权重(shared weights)和池化(pooling)。

局部感知域: 在上图中的神经网络中输入层是用一列的神经元来表示的,在CNN中,不妨将输入层当做二维矩阵排列的神经元。

与常规神经网络一样,输入层的神经元需要和隐藏层的神经元连接。但是这里不是将每一个输入神经元都与每一个隐藏神经元连接,而是仅仅在一个图像的局部区域创建连接。以大小为28X28的图像为例,假如第一个隐藏层的神经元与输入层的一个5X5的区域连接,如下图所示:
这里写图片描述
这个5X5的区域就叫做局部感知域。该局部感知域的25个神经元与第一个隐藏层的同一个神经元连接,每个连接上有一个权重参数,因此局部感知域共有5X5个权重。如果将局部感知域沿着从左往右,从上往下的顺序滑动,就会得对应隐藏层中不同的神经元,如下图分别展示了第一个隐藏层的前两个神经元与输入层的连接情况。
这里写图片描述
这里写图片描述
如果输入层是尺寸为28X28的图像,局部感知域大小为5X5,那么得到的第一个隐藏层的大小是24X24。

共享权重: 上面得到的第一隐藏层中的24X24个神经元都使用同样的5X5个权重。第j个隐藏层中第k个神经元的输出为:

σ(b+l=04m=04wl,maj+l,k+m)

这里σ是神经元的激励函数(可以是sigmoid函数、thanh函数或者rectified linear unit函数等)。b是该感知域连接的共享偏差。wl,m是个5X5共享权重矩阵。因此这里有26个参数。 ax,y 代表在输入层的x,y处的输入激励。

这就意味着第一个隐藏层中的所有神经元都检测在图像的不同位置处的同一个特征。因此也将从输入层到隐藏层的这种映射称为特征映射。该特征映射的权重称为共享权重,其偏差称为共享偏差。

为了做图像识别,通常需要不止一个的特征映射,因此一个完整的卷积层包含若干个不同的特征映射。下图中是个三个特征映射的例子。
这里写图片描述
在实际应用中CNN可能使用更多的甚至几十个特征映射。以MNIST手写数字识别为例,学习到的一些特征如下:
这里写图片描述
这20幅图像分别对应20个不同的特征映射(或称作filters, kernels)。每一个特征映射由5X5的图像表示,代表了局部感知域中的5X5个权重。亮的像素点代表小的权重,与之对应的图像中的像素产生的影响要小一些。暗的像素点代表的大的权重,也意味着对应的图像中的像素的影响要大一些。可以看出这些特征映射反应了某些特殊的空间结构,因此CNN学习到了一些与空间结构有关的信息用于识别。

池化层(pooling layers) 池化层通常紧随卷积层之后使用,其作用是简化卷积层的输出。例如,池化层中的每一个神经元可能将前一层的一个2X2区域内的神经元求和。而另一个经常使用的max-pooling,该池化单元简单地将一个2X2的输入域中的最大激励输出,如下图所示:
这里写图片描述
如果卷积层的输出包含24X24个神经元,那么在池化后可得到12X12个神经元。每一个特征映射后分别有一个池化处理,前面所述的卷积层池化后的结构为:
这里写图片描述
Max-pooling并不是唯一的池化方法,另一种池化方法是L2pooling,该方法是将卷积层2X2区域中的神经元的输出求平方和的平方根。尽管细节与Max-pooling不一样,但其效果也是简化卷积层输出的信息。

将上述结构连接在一起,再加上一个输出层,得到一个完整的卷积神经网络。在手写数字识别的例子中输出层有十个神经元,分别对应0,1, … ,9的输出。
这里写图片描述
网络中的最后一层是一个全连接层,即该层的每个神经元都与最后一个Max-pooling层的每个神经元连接。

这个结构这是一个特殊的例子,实际CNN中也可在卷积层和池化层之后可再加上一个或多个全连接层。

三,卷积神经网络的应用

3.1 手写数字识别

Michael Nielsen提供了一个关于深度学习和CNN的在线电子书,并且提供了手写数字识别的例子程序,可以在GitHub上下载到。该程序使用Python和Numpy, 可以很方便地设计不同结构的CNN用于手写数字识别,并且使用了一个叫做Theano的机器学习库来实现后向传播算法和随机梯度下降法,以求解CNN的各个参数。Theano可以在GPU上运行,因此可大大缩短训练过程所需要的时间。CNN的代码在network3.py文件中。

作为一个开始的例子,可以试着创建一个仅包含一个隐藏层的神经网络,代码如下:

>>> import network3
>>> from network3 import Network
>>> from network3 import ConvPoolLayer, FullyConnectedLayer, SoftmaxLayer
>>> training_data, validation_data, test_data = network3.load_data_shared()
>>> mini_batch_size = 10
>>> net = Network([
        FullyConnectedLayer(n_in=784, n_out=100),
        SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)
>>> net.SGD(training_data, 60, mini_batch_size, 0.1, 
            validation_data, test_data)

该网络有784个输入神经元,隐藏层有100个神经元,输出层有10个神经元。在测试数据上达到了97.80%的准确率。

如果使用卷积神经网络会不会比它效果好呢?可以试一下包含一个卷积层,一个池化层,和一个额外全连接层的结构,如下图
这里写图片描述
在这个结构中,这样理解:卷积层和池化层学习输入图像中的局部空间结构,而后面的全连接层的作用是在一个更加抽象的层次上学习,包含了整个图像中的更多的全局的信息。

>>> net = Network([
        ConvPoolLayer(image_shape=(mini_batch_size, 1, 28, 28), 
                      filter_shape=(20, 1, 5, 5), 
                      poolsize=(2, 2)),
        FullyConnectedLayer(n_in=20*12*12, n_out=100),
        SoftmaxLayer(n_in=100, n_out=10)], mini_batch_size)
>>> net.SGD(training_data, 60, mini_batch_size, 0.1, 
            validation_data, test_data)   

这种CNN的结构达到的识别准确率为98.78%。如果想进一步提高准确率,还可以从以下几方面考虑:

  1. 再添加一个或多个卷积-池化层
  2. 再添加一个或多个全连接层
  3. 使用别的激励函数替代sigmoid函数。比如Rectifed Linear Units函数: f(z)=max(0,z). Rectified Linear Units函数相比于sigmoid函数的优势主要是使训练过程更加快速。
  4. 使用更多的训练数据。Deep Learning因为参数多而需要大量的训练数据,如果训练数据少可能无法训练出有效的神经网络。通常可以通过一些算法在已有的训练数据的基础上产生大量的相似的数据用于训练。例如可以将每一个图像平移一个像素,向上平移,向下平移,向左平移和向右平移都可以。
  5. 使用若干个网络的组合。创建若干个相同结构的神经网络,参数随机初始化,训练以后测试时通过他们的输出做一个投票以决定最佳的分类。其实这种Ensemble的方法并不是神经网络特有,其他的机器学习算法也用这种方法以提高算法的鲁棒性,比如Random Forests。

3.2 ImageNet图像分类

Alex Krizhevsky等人2012年的文章“ImageNet classification with deep convolutional neural networks”对ImageNet的一个子数据集进行了分类。ImageNet一共包含1500万张有标记的高分辨率图像,包含22,000个种类。这些图像是从网络上搜集的并且由人工进行标记。从2010年开始,有一个ImageNet的图像识别竞赛叫做ILSVRC(ImageNet Large-Scale Visual Recognition Challenge)。 ILSVRC使用了ImageNet中的1000种图像,每一种大约包含1000个图像。总共有120万张训练图像,5万张验证图像(validation images)和15万张测试图像(testing images)。该文章的方法达到了15.3%的错误率,而第二好的方法错误率是26.2%。
这里写图片描述

这篇文章中使用了7个隐藏层,前5个是卷积层(有些使用了max-pooling),后2个是全连接层。输出层是有1000个单元的softmax层,分别对应1000个图像类别。

该CNN使用了GPU进行计算,但由于单个GPU的容量限制,需要使用2个GPU (GTX 580,分别有3GB显存)才能完成训练。

该文章中为了防止过度拟合,采用了两个方法。一是人工生成更多的训练图像。比如将已有的训练图像进行平移或者水平翻转,根据主成分分析改变其RGB通道的值等。通过这种方法是训练数据扩大了2048倍。二是采用Dropout技术。Dropout将隐藏层中随机选取的一半的神经元的输出设置为0。通过这种方法可以加快训练速度,也可以使结果更稳定。
这里写图片描述
输入图像的大小是224X224X3,感知域的大小是11X11X3。第一层中训练得到的96个卷积核如上图所示。前48个是在第一个GPU上学习到的,后48个是在第二个GPU上学习到的。

3.3 医学图像分割

Adhish Prasoon等人在2013年的文章“Deep feature learning for knee cartilage segmentation using a triplanar convolutional neural network”中,用CNN来做MRI中膝关节软骨的分割。传统的CNN是二维的,如果直接扩展到三维则需要更多的参数,网络更复杂,需要更长的训练时间和更多的训练数据。而单纯使用二维数据则没有利用到三维特征,可能导致准确率下降。为此Adhish采用了一个折中方案:使用xy,yzxz三个2D平面的CNN并把它们结合起来。
这里写图片描述

三个2D CNN分别负责对xy,yzxz平面的处理,它们的输出通过一个softmax层连接在一起,产生最终的输出。该文章中采用了25个病人的图像作为训练数据,每个三维图像中选取4800个体素,一共得到12万个训练体素。相比于传统的从三维图像中人工提取特征的分割方法,该方法在精度上有明显的提高,并且缩短了训练时间。

3.4 谷歌围棋AlphaGo战胜人类

谷歌旗下DeepMind团队使用深度卷积神经网络在电脑围棋上取得了重大突破。早期,IBM的深蓝超级计算机通过强大的计算能力使用穷举法战胜了人类专业象棋选手,但那不算“智能”。

围棋上的计算复杂度远超象棋,即使通过最强大的计算机也无法穷举所有的可能的走法。计算围棋是个极其复杂的问题,比国际象棋要困难得多。围棋最大有3^361 种局面,大致的体量是10^170,而已经观测到的宇宙中,原子的数量才10^80。国际象棋最大只有2^155种局面,称为香农数,大致是10^47。

DeepMind所研究的AlphaGo使用了卷积神经网络来学习人类下棋的方法,最终取得了突破。AlphaGo在没有任何让子的情况下以5:0完胜欧洲冠军,职业围棋二段樊麾。研究者也让AlphaGo和其他的围棋AI进行了较量,在总计495局中只输了一局,胜率是99.8%。它甚至尝试了让4子对阵Crazy Stone,Zen和Pachi三个先进的AI,胜率分别是77%,86%和99%。可见AlphaGo有多强大。

在谷歌团队的论文中,提到“我们用19X19的图像来传递棋盘位置”,来“训练”两种不同的深度神经网络。“策略网络”(policy network)和 “值网络”(value network)。它们的任务在于合作“挑选”出那些比较有前途的棋步,抛弃明显的差棋,从而将计算量控制在计算机可以完成的范围里,本质上和人类棋手所做的一样。

其中,“值网络”负责减少搜索的深度——AI会一边推算一边判断局面,局面明显劣势的时候,就直接抛弃某些路线,不用一条道算到黑;而“策略网络”负责减少搜索的宽度——面对眼前的一盘棋,有些棋步是明显不该走的,比如不该随便送子给别人吃。利用蒙特卡洛拟合,将这些信息放入一个概率函数,AI就不用给每一步以同样的重视程度,而可以重点分析那些有戏的棋着。
这里写图片描述
参考论文:David Silver, et al. “Mastering the game of Go with deep neural networks and tree search.” Nature doi:10.1038/nature16961.
相关链接:http://www.guokr.com/article/441144/

2018-11-25 21:29:19 weixin_43797554 阅读数 2087

电子科技大学 格拉斯哥学院 通信二班 鲍佳慧 2017200602004

一. 背景介绍

在大一下学期我参加了格拉斯哥学院所开展的一系列新生研讨课活动,其中曾兵院长介绍了有关图像处理,三维电视和“可视”大数据,让我对我们日常的图像和视频有了全新的认识并激发了我对视频图像处理的兴趣。

二. 应用于图像视频处理的图像识别

  1. 发展
    图像处理的发展依赖于计算机的应用和发展,它是计算机应用领域中非常活跃的一部分。图像处理系统分为通用图像处理系统和专用图像处理系统两大类。图像识别,是指利用计算机对图像进行处理、分析和理解,以识别各种不同模式的目标和对像的技术。

  2. 应用
    图像视频处理在各个领域应用都十分广泛。
    航天航空方面:主要运用在太空成像、飞机遥感和卫星遥感技术中。这些图像无论是在成像、存储、传输过程中,还是在判读分析中,都必须采用图像处理方法。
    军事公安方面:主要用于公安业务图片的判读分析,指纹识别,人脸鉴别,不完整图片的复原,以及交通监控、事故分析等。目前己投入运行的高速公路不停车自动收费系统中的车辆和车牌的自动识别都是图像处理技术成功应用的例子。

  3. 现状(社会问题)
    图像识别一直是现今热门话题,对于人来说,识别物体并不困难。对于计算机,却比较艰巨。因为我们不需要学习就可以判断物体种类,而计算机需要不断学习,不停地识别才能判断出它是什么。例如现在大众十分关心的无人驾驶汽车的问题。当涉及无人驾驶汽车的导航系统,计算机将如何将道路上的行人与各种其他车辆区分开来或过滤,这对计算机的图像识别能力提出了更高的挑战。
    识别
    虽然现在的图像识别较为普及,例如电子科大的图书馆也已经应用了人脸识别系统,但识别仍不是非常精准,也出现了不少机器无法识别或者识别到其他人脸的情况。如若用此精确度的计算机应用在判案辨别上,可能会出现判案不准的情况,伤及无辜,让罪犯逃之夭夭。同时在观看视频录像时,尤其是光线较暗肉眼难以分辨五官等形象特征时,图像识别就显得格外重要。就是因为如今图像识别在我们的日常生活中起着不可替代的作用,我们在提高图像识别的精确度的同时,也要避免操作的复杂程度。
    解决这个问题的一个方法是利用神经网络。
    三.神经网络与图像识别
    1.卷积神经网络的定义
    卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积或相关计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一。CNN 由不同的卷积层和池化层组成。它广泛应用于计算机视觉。例如图像识别(image classification),物体识别(object recognition),行为认知(action recognition),姿态估计(pose estimation)以及神经风格转换(neural style transfer)。
    2.卷积神经网络的工作过程
    卷积神经网络工作过程
    卷积神经网络将进行多次采样,多次记录物体的多种特征。除了这些连接层,还有池化和卷积层。CNN使图像识别中保留了重要特征信息的同时也减少了输入的大小。卷积层的输入和输出都是多重矩阵。卷积层包含多个卷积核,每个卷积核都是一个矩阵,每一个卷积核相当于是一个滤波器,它可以输出一张特定的特征图,每张特征图也就是卷积层的一个输出单元。
    基于卷积网络识别的鸟类识别
    举个例子。计算机要进行图像处理。首先要读取图片。计算机并不能像人一样几秒内捕捉完物体的所有特征特点,它需要理解。为了方便理解,它会将每个图像转化为一系列特定排序的图点(像素)。如果你改变像素的顺序或颜色,图像也随之改变。计算机会试图通过使用图像的空间的安排从图像中提取特征。为了理解图像,理解像素如何安排对于一个网络极其重要。这就是卷积网络所要做的。
    3.使用卷积网络的好处
    (1)我们可以采用输入图像,定义权重矩阵,并且输入被卷积以从图像中提取特殊特征而无需损失其有关空间安排的信息。
    (2)减少图像的参数数量。CNN把含义相似的特征合并成相同特征,以及把位置上相邻的特征合并到更接近的位置。由于形成特定主题的每个特征的相对位置可能发生微小变化,因此可以通过采样的方法输入特征图中强度最大的位置,减小了中间表示的维度(即特征图的尺寸),从而,即使局部特征发生了一定程度的位移或者扭曲,模型仍然可以检测到这个特征。

2018-04-12 21:49:09 chengqiuming 阅读数 925
一 神经网络是什么
二 神经网络应用
1 图像识别
2 自动驾驶
3 人工智能
三 神经网络种类
神经网络基础:单层感知器,线性神经网络,BP神经网络,Hopfield神经网络等
神经网络进阶:玻尔兹曼机,受限玻尔兹曼机,递归神经网络等
深度学习网络:深度置信网络,卷积神经网络,深度残差网络,LSTM网络等
深度网络应用:应用于传统的数据挖掘与机器学习问题,手写体识别,图像识别,应用于自然语言处理,人工智能:AlphaGo等。
编程语言:python,R,matlab,java等
深度学习实现框架:Tensorflow,Caffe,Torch等

四 参考
2019-03-21 21:06:35 qq_42706786 阅读数 68

计算机视觉 Computer Vision

主要学习内容

1.计算机视觉的基础

  • 数据图像处理
  • 图像特征及描述

2.深度学习在计算机视觉中的应用

  • 图像分类:卷积神经网络 CNN
  • 图像检测:区域卷积神经网络 R-CNN
  • 图像分割:全卷积神经网络 FCN
  • 图像描述:迭代神经网络 RNN
  • 图像问答:迭代神经网络 RNN
  • 图像生成:生成对抗网络 GAN

3.图像检索

重点

  • 深度神经网络模型
  • TensorFlow

实践环境

  • OpenCV
  • TensorFlow (CPU/GPU)

参考书

  • Python: 《learn python the hard way》
  • OpenCV:《OpenCV 3计算机视觉:Python语言实现》
  • TensorFlow:《TensorFlow:实战Google深度学习框架》

计算机视觉

模拟人类视觉的优越能力:

  • 识别人、物体、场景
  • 估计立体空间、距离
  • 躲避障碍物进行导航
  • 想象并描述故事
  • 理解并讲解图片……

弥补人类视觉的缺陷:

  • 关注显著内容、容易忽视细节
  • 不在乎、不擅长精细感知
  • 容易受幻觉干扰
  • 描述主观、模棱两可
  • 不善于长时间稳定的执行同一个任务……

1.语义感知

  • 分类 Classification
    物体、属性、场景等
  • 检测 Detection
    物体、行人、人脸等
  • 识别 Recognition
    • 物体:车牌、文本
    • 人:人脸、指纹、虹膜、步态、行为等
  • 分割 Segmentation
  • 检索 Retrieval
    以文搜图、以图搜图、图文联搜等
  • 语言 Language
    图片描述、图片问答等

2.几何属性

  • 3D建模
  • 双目视觉
  • 增强现实

语义感知在人工智能中是主角

视觉描述(Visual Captioning)
视觉问答(Visual Question Answering)

图像数据处理

  • 频域分析及变换
    傅里叶变化(正弦余弦波)
    小波变化(傅里叶变化的扩展)
  • 空域分析及变换
    Sobel
    拉普拉斯
    高斯
    中值

    (通过深度卷积网络 得到参数 不是人工设定)
  • 模板匹配,金字塔,滤波器组
  • 特征数据操作
    主成分分析 PCA
    奇异值分析 SVD
    聚类 Cluster

图像特征及描述

  • 颜色特征
    • RGB 立体块颜色空间 红绿蓝
    • HSV 椎体颜色空间 色调 饱和度 亮度
    • Lab 模拟人眼感知距离
    • 直方图
  • 几何特征
    • Edge 边缘
    • Corner 角
    • Blob 局部小块
  • 纹理特征
    • HOG 行人检测
    • LBP 人脸识别
    • Gabor 数字识别
  • 局部特征
    • SIFT
    • SURF
    • FAST

图片分类

卷积神经网络 CNN

计算机视觉中的基础网络
有监督深度模型时代的起点
AlexNet → VGG → GoogLeNt → ResNet → ResNeXt
结构趋势:
更深 Depth
更宽 Width
更多基数 Cardinality

AlexNet卷及网络

在这里插入图片描述

检测

物体检测
人脸检测
行人检测

区域卷积神经网络R-CNN

让基础网络具备区域输出能力
第一阶段:
R-CNN → SPP-Net → Fast/Faster R-CNN
第二阶段:
加粗样式YOLO → SSD → R-FCN
目的
检测更快、更准确
工业应用
智能监控、辅助驾驶

R-CNN

卷积层计算共享
在这里插入图片描述

图片分割

前景分割
语义分割

全卷积神经网络FCN

让基础网络做像素输出
FCN → SegNet/DeconvNet → DeepLab
目的
语义推断
分割更精确
工业应用
辅助驾驶

全卷积网络FCN

反卷积/转置卷积
在这里插入图片描述

识别

人脸识别
字符识别
车牌识别
行为识别
步态识别

视觉和语言

图片描述
图片问答

递归神经网络RNN

具有记忆功能,构建不定长序列数据的模型
Vanilla RNN → LSTM → GRU
应用范围
文本序列
区域序列
视频序列
研究问题
图片描述、问答
机器翻译

CNN+LSTM

在这里插入图片描述

图片生成

样本分布学习
超分辨率
以图生文
语义分割

生成对抗网络GAN

网络结构
生成器网络(Generator)
判别器网络(Discriminator)
网络路线
无监督:GAN → DCGAN → wGAN
有监督:SRGAN、SalGAN、RLA
应用范围
样本数据分布(生成)学习
半监督问题的数据增强
有监督问题的优化(Dynamic loss)

超分辨SRGAN网络

在这里插入图片描述

图片检索

相似图片

DNN网络的综合应用

图片预处理
显著性检测、区域分割
图片特征提取
手工设计、CNN类网络层特征抽取
索引构建
局部敏感性哈希(LSH)
特征相似度计算
特征向量的距离计算
相似度搜索
相似具体排序

视觉文本双向编码网络

在这里插入图片描述

研究挑战

  • 视角变化
  • 光照变化
  • 尺度变化
  • 形态变化
  • 背景混淆干扰
  • 遮挡
  • 类内物体的外观差异

开源库介绍

OpenCV

计算机视觉 机器学习

Caffe

深度学习 CNN上用的较多

Theano

深度学习

Torch(PyTorch)

深度学习 Facebook

Tensorflow

深度学习 多机多GPU分布式
Tensorboard

深度学习库对比

在这里插入图片描述

DNN模型实践

  • 分类 ResNet 残差网络
  • 物体检测 Faster R-CNN
  • 语义分割 DeepLab
  • 看图说话 Show-and-Tell
  • 视觉问答 VQA
  • 生成式对抗网络 SRGAN
2016-12-27 21:27:43 fuwenyan 阅读数 10015


以卷积神经网络进行图像识别为例,常用的输入图像预处理

Step1:Resize

Step2:去均值。此处应注意,是对所有训练样本图像求均值,然后将每个样本图片减去该均值。测试图片在进行预处理时,也减去该均值(注意不是减测试图片的均值,而是减去所有训练样本图像的均值)


归一化处理:图像处理应用中一般不需要归一化处理,因为RGB通道数据范围一直是0~255,天生是归一化的,因此不需要再进行归一化处理。


PCA降维处理:数据量较大时可以通过PCA进行降维处理,以便减小计算量,提升处理速度。但图像处理应用中,因为一般先进行了图像的Resize处理,降低数据量,因此一般不需要再进行PCA降维处理了。



没有更多推荐了,返回首页