为什么卷积层计算量更低

全连接的话权重太多

padding

padding的存在是因为我们做卷积操作的时候会引发数据急剧减少,padding可以解决

Strided convolution

步长的设置问题

p = (n*s - n + f - s) / 2

When s = 1 ==> P = (f-1) / 2

多维卷积

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

LeNet 参数

卷积网络的好处

参数共享

一个探测器在某个部分有用那么在另一个部分也很可能有用

稀疏连接

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

经典网络实现

LeNet-5

为了识别32321



Conv ==> Pool ==> Conv ==> Pool ==> FC ==> FC ==> softmax

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)Jcontent(C,G)=14×nH×nW×nC∑all entries(a(C)−a(G))2" role="presentation" style="font-size: 100%; display: inline-block; position: relative;">(1)Jcontent(C,G)=14×nH×nW×nC∑all entries(a(C)−a(G))2

style loss

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

(2)Jstyle[l](S,G)=14×nC2×(nH×nW)2∑i=1nC∑j=1nC(Gij(S)−Gij(G))2" role="presentation" style="font-size: 100%; display: inline-block; position: relative;">(2)Jstyle[l](S,G)=14×nC2×(nH×nW)2∑i=1nC∑j=1nC(Gij(S)−Gij(G))2

Keras

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

Reference

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

课程回顾-Convolutional Neural Networks的更多相关文章

  1. 课程四(Convolutional Neural Networks),第一周(Foundations of Convolutional Neural Networks) —— 3.Programming assignments:Convolutional Model: application

    Convolutional Neural Networks: Application Welcome to Course 4's second assignment! In this notebook ...

  2. 课程四(Convolutional Neural Networks),第一周(Foundations of Convolutional Neural Networks) —— 2.Programming assignments:Convolutional Model: step by step

    Convolutional Neural Networks: Step by Step Welcome to Course 4's first assignment! In this assignme ...

  3. 课程四(Convolutional Neural Networks),第四 周(Special applications: Face recognition & Neural style transfer) —— 2.Programming assignments:Art generation with Neural Style Transfer

    Deep Learning & Art: Neural Style Transfer Welcome to the second assignment of this week. In thi ...

  4. 课程四(Convolutional Neural Networks),第二 周(Deep convolutional models: case studies) —— 0.Learning Goals

    Learning Goals Understand multiple foundational papers of convolutional neural networks Analyze the ...

  5. 课程四(Convolutional Neural Networks),第二 周(Deep convolutional models: case studies) ——3.Programming assignments : Residual Networks

    Residual Networks Welcome to the second assignment of this week! You will learn how to build very de ...

  6. 课程四(Convolutional Neural Networks),第二 周(Deep convolutional models: case studies) —— 2.Programming assignments : Keras Tutorial - The Happy House (not graded)

    Keras tutorial - the Happy House Welcome to the first assignment of week 2. In this assignment, you ...

  7. 课程四(Convolutional Neural Networks),第一周(Foundations of Convolutional Neural Networks) —— 0.Learning Goals

    Learning Goals Understand the convolution operation Understand the pooling operation Remember the vo ...

  8. 课程四(Convolutional Neural Networks),第四 周(Special applications: Face recognition & Neural style transfer) —— 3.Programming assignments:Face Recognition for the Happy House

    Face Recognition for the Happy House Welcome to the first assignment of week 4! Here you will build ...

  9. 课程四(Convolutional Neural Networks),第四 周(Special applications: Face recognition & Neural style transfer) —— 1.Practice quentions

    [解释] This allows us to learn to predict a person’s identity using a softmax output unit, where the n ...

随机推荐

  1. 修改oracle的字符集操作方法

    cmd环境下进行以下命令行的操作--连接sqlplus / as sysdba--命令行shutdown immediate; startup mount ALTER SYSTEM ENABLE RE ...

  2. day33 锁和队列

    队列 #put 和  get #__author : 'liuyang' #date : 2019/4/16 0016 上午 11:32 # 多进程之间的数据是隔离的 # 进程之间的数据交互 # 是可 ...

  3. freeType移植总结①——使用keil编译freeType2库

    在各个技术博客搜索相关资料后,终于将freeType的源码用keil工程编译通过,这里记录一下步骤和遇到的问题. 因为网上的资料都是旧版本freeType的工程,这里博主使用的是freeType2.9 ...

  4. JAVA执行远端服务器的脚本

    JAVA执行远端服务器的脚本 问题描述 实现思路 技术要点 代码实现 问题描述 工作中遇到这样一个问题,我们的应用为了实现高可用会采取双机部署,拓扑图大致如下: 这种方案可以简单的保证高可用,即便应用 ...

  5. mybatis批量更新报错badsql

    mybatis批量更新时语法写的都对,但是报错,需要在连接上面加上allowMultiQueries=true 示例:jdbc:MySQL://192.168.1.236:3306/test?useU ...

  6. struts2参数传递总结

    需求1:登录页面填写表单,提交后进入action,action中能够获取填入的内容.[宏观分类:页面->action] 需求2:登录action从数据库校验完毕后,跳转至主页,主页显示当前登录的 ...

  7. python2 python3区别

    Python开发团队将在2020年1月1日停止对Python2.7的技术支持,但python2的库仍然比较强大(在 pip 官方下载源 pypi 搜索 Python2.7 和 Python3.5 的第 ...

  8. ireport图形化界面生成pdf文档

    一.ireport软件安装 1.下载软件的官网 https://community.jaspersoft.com/project/ireport-designer/releases 2.安装软件   ...

  9. Django积木块五——分页

    分页 django本身带有分页功能,为什么要用他呢?因为它的代码更为简洁,并且在做筛选的时候会把url中的所有参数都组装起来,并且加上分页.也就是做筛选中的结果也可以用这个分页. pip instal ...

  10. Eclipse下用NDK编译生成so文件

      我们在安装环境的时候安装了NDK,可以在eclipse下直接生成so文件.NDK的压缩包里面自带了一些sample工程,NDK的文件直接解压到某个目录下即可. 第一次生成so文件的时候,我们先使用 ...