课程回顾-Convolutional Neural Networks

为何卷积层计算量更低

全链接的话权重太多git

padding

padding的存在是由于咱们作卷积操做的时候会引起数据急剧减小,padding能够解决github

Strided convolution

步长的设置问题
p = (n*s - n + f - s) / 2
When s = 1 ==> P = (f-1) / 2算法

多维卷积

卷积层也有长、宽和通道数,其中卷基层的通道数须要和图像一致windows

LeNet 参数

卷积网络的好处

参数共享

一个探测器在某个部分有用那么在另外一个部分也极可能有用网络

稀疏链接

每一层中,每一个输出值只和部分的输入有关ide

经典网络实现

LeNet-5

为了识别32321

Conv ==> Pool ==> Conv ==> Pool ==> FC ==> FC ==> softmaxsvg

AlexNet


Conv => Max-pool => Conv => Max-pool => Conv => Conv => Conv => Max-pool ==> Flatten ==> FC ==> FC ==> Softmax函数

VGG

ResNet

残差块


如上图,实际上就是在网络中加入了一些shortcut性能

identity block


这个是保持不变的学习

convolutional block

残差网络

就是用了残差单元的网络

为何残差网络有用

加入了易于学到的线性映射

Network in Network & 1*1 convolutions

1*1的卷积单元,也叫network in network
这种结构在如下状况下有用:

  • 咱们想要减小通道数
  • 节省计算量
  • 若是1*1的卷积单元和原来的通道数同样的话,咱们就可以保持原有的通道数,并作一些非线性的变换。

Inception network motivation

Inception的基本思想是:在网络的构造中,咱们不是去选择使用什么层(好比说是11的卷积仍是33的卷积仍是pooling等),而是把它们都用上,让算法本身选

很容易想到这个时候计算量会很大,因此通常会采用1*1的卷积层来下降计算量。而且实践代表这种对于性能影响很小。

GoogleNet

Data Augmentation

图像可使用翻转、截取、颜色变换等技巧进行数据加强

Object Detection

几种技术的的区别

  • classification:对整张图进行分类
  • localization
    学习出定位
  • detection
    有多个物体,给出定位和类别
  • semantic segmentation
    区分每个像素的类别,全部有重叠的时候咱们没法分出他们
  • instance segmentation
    不只是给出框,咱们要给出他们的每一个像素,并分开他们

标签设计

作object detection咱们不光要在标签给出类别,还要给出bounding box的位置

Y = [
          Pc                # Probability of an object is presented
          bx                # Bounding box
          by                # Bounding box
          bh                # Bounding box
          bw                # Bounding box
          c1                # The classes
          c2
          …
]
  • 损失函数
L(y',y) = {
              (y1'-y1)^2 + (y2'-y2)^2 + … if y1 = 1
              (y1'-y1)^2                        if y1 = 0
        }
  • 通常来讲对于几率,咱们用logloss,对于bounding box咱们用MSE

landmark detection

对于某些应用,如人脸检测的时候,你但愿把眼睛位置一块儿标记出来,这时候就能够在label中把这些坐标也加进去

sliding windows

简单的说就是你选个窗口大小,而后按照必定重复进行划窗,选用分类器对这些进行分类,而后合并一些有物体重复的窗,最后选出来最佳的窗格。

对于传统算法通常选择线性分类器,这样的话速度才够。可是这样精度不太好,深度学习则复杂度会过高。因此通常有两种方案:

  • 采用一种卷积的方式作
  • 压缩网络

基于卷积的滑动窗口


本质上就是将传统卷积网的最后的全链接层也换成是卷积层,而后其实就能够一块儿把移动窗口作了

Bounding box Prediction


先把图像分块,而后每一个地方用上面的卷积滑动窗口预测获得窗口

Intersection Over Union


IoU,即评价detection的方式,等于交集除以并集
如上图,红色的是真实值,紫色的是预测值,而后能够计算
若是IoU> 0.5就说明表现还不错

Non-max Suppression

用前面的方法咱们能够会屡次检测到同一个物体,这个方法能够解决这个问题

  • 首先丢弃预测几率小于0.6的结果
  • 若是还有多个box,选择几率最大的,丢弃前一步中任何IoU小于0.5

若是有多个类别,咱们就须要重复以上屡次

Anchor Box

上面的技巧只能解决单个物体,若是有多个重合的物体就会比较难办。
anchor box感受上就是把多个单个的box链接起来。也可使用聚类的方式来作

YOLO 算法

YOLO算法其实就是综合用了上面的这些技巧
首先用基于卷积的移动窗口

移除预测几率低的

移除IoU低的

YOLO在识别小物体时效果不是太好

Region Proposal(R-CNN)

其余的检测算法还有R-CNN、SSD等

Face Recognition

verification和recognition

verification就是给你一我的和他的id,判断是否是这我的。recognition就是给一我的的图片,若是他是库中k我的之一就输出其id

One Shot Learning

从这我的的一张图片就可以学习出识别他的系统。这个实际上是基于类似度函数。即我经过一个网络抽取特征(这个网络是提早训练好的),而后比较新来的人的特征和这里的是否是吻合。也能够直接预训练一个分类器

Siamese Network

Triplet Loss

给定三个图片A(目标图片)、P(正样本)、N(负样本)
L(A, P, N) = max (||f(A) - f(P)||2 - ||f(A) - f(N)||2 + alpha , 0)

Face Verification and Binary Classification

获得特征算距离

风格迁移

这个问题其实有两方面意义:

  • 至关于神经网络能够作“创做”
  • 能够从这个理解到卷积层的特征是什么样的

这里的损失函数是经过style cost function和content cost function

content loss

用来衡量生成的图像G和原始内容提供图像C之间的不一样,这里经过训练好的神经网络来衡量两个图像content的类似度。其基本想法是,神经网络的每一层能够提取图像的一些特征,那么我用图片在某一层的激活值就能够表示图像的内容。而后两个图像C和G都通过这个神经网络取同一层就能够了(这里通常是取中间层的结果,我猜想是太浅的话不能抓住足够的信息,太深的话就过于细节化了而不会和风格迁移;而后最终通常也是算几层取个加权平均,而在content里面则不会取平均)。最后loss表示为:

(1) J c o n t e n t ( C , G ) = 1 4 × n H × n W × n C all entries ( a ( C ) a ( G ) ) 2

style loss

用来衡量生成的图像G和风格提供图像S之间的风格的不一样。基本思想是首先对于每一幅图构建一个 style matrix(数学上叫作Gram matrix),而后比较这两个matrix的差距,计算公式以下

(2) J s t y l e [ l ] ( S , G ) = 1 4 × n C 2 × ( n H × n W ) 2 i = 1 n C j = 1 n C ( G i j ( S ) G i j ( G ) ) 2

Keras

模型的构建遵循:Create->Compile->Fit/Train->Evaluate/Test

Reference

https://github.com/mbadry1/DeepLearning.ai-Summary



相关文章
相关标签/搜索