吴恩达深度学习课程脉络(四)卷积神经网络

第一周  

1.1 计算机视觉 C

深度学习令wu兴奋有2点,计算机视觉的发展出现很多新产品应用,及在CV发展过程中产生的新网络结构跟算法,能与其他交叉领域结合应用;他在做speech recognition的时候会从这里找灵感;

介绍了基本任务,图像分类,目标识别,在处理1000*1000*3 像素等大图时,参数太大,引出要用卷积网络

 

1.2-1.3 边缘检测示例

直接用倆案例edge detection 介绍卷积算法;

训练CNN在一定意义上是在训练每个卷积层的过滤器,让其组合对特定的模式有高的激活,以达到CNN网络的分类/检测等目的

 1.4 Padding

构建深度网络需要padding,直接介绍; 重点说valid,same convolution;

1.5 Stride

卷积网络另一个重要操作,直接上案例

1.6 Convolutionals over volumes

在 3 dimensional volumnes上卷积计算,以常规RGB图片来介绍; 

如果只对一种颜色的模式感兴趣,可以对其他层的参数设为0;

1.7 单层卷积网络

介绍单层卷积网络,参数个数,notation命名规则

  

 

 

   关于A[L],并不是所有的数据格式都一样,注意它的shape,有些把channels数放前面,而把样本数m放后面

1.8 简单卷积网络示例

多层,简单卷积网络介绍

 最后一步,把全部的参数展开成一维的; 边长减少,通道数增加,这是一个趋势

 1.9 池化层

典型的网络还包括池化层,直接介绍;

注意:

  1)maxpooling跟avg都是在每个N_C通道上单独进行计算的;因此不改变N_C通道数

  2)filter size跟stride对pooling后data shape的影响跟卷积层一样

1.10 卷积神经网络示例

以受LeNet-5启发的下图网络介绍,分析各层参数

 需要指出的是,

  1)pooling layers没有参数,而conv layers的参数教少,大部分的参数集中在Full connection layers;

  2)activation size倾向于逐渐下降,下降的太快对性能不好;

 

 1.11 为啥使用卷积?

参数共享parameter sharing,一个通道,全部共用

稀疏链接 sparsity of connections. 一个卷积值,只于卷积通道,以及前一层的卷积核范围大小的值有关

算了一下全连接参数多,put it together做了个猫分类的网络

 

第二周 

2.1 case studies

过去几年CV研究大量集中在如何利用基本构件组合形成有效CNN,最好的方法是看别人的;在CV中表现好的,在其他任务中往往表现也好;

 

2.2 经典网络

LeNet-5  ( 约6w参数)

 

 AlexNet ( 约6千万参数)

 

 VGG(约1.38亿个参数)

  结构一致,每层参数下降系统,有吸引力,缺点是网络太大,训练参数多

  

2.3  ResNet 残差网络

因梯度爆炸 exploding 跟梯度消失 vanishing ,很深的网络没法训练,ResNet的skip connections 可从前面的activation直接feed给更深的网络层,能训练over 100 层的网络

单个Residual block 

ResNet 在网络层数增加时,也可训练

 

 

2.4 为啥ResNet有用 ?

利用L2正则化或权重衰减时,会压缩activation 值的权重,

    

 

 

 如权重为0了,则只剩下skip connection部分的activation值起作用,其实也就是一个identity function(ReLu用2遍效果一样),学习起来也简单;也就是说增加了2层并没有hurt NN 的performance;

但是如果权重不为0了,则隐藏层单元可以多学信息;

技术点: 因为要跳,所有大部分维度都相同,如果skip之后维度不同,用一个前置矩阵乘一下调整

  

2.5  1*1卷积

网络中的网络也叫1-1卷积,挺有影响力的。

可认为对6*6个位置用了full connection

 

   可以用来进行维度压缩

 2.6 Incepton 网络简介

对1*1,3*3,5*5,要不要池化,怎么选,Inception帮你选择,网络复杂一些了,但是效果非常不错

想法:

  问题:计算太复杂了  

  用1*1解决

  这种压缩会损害网络的表现吗? 只要bottleneck那里设计得合理,不一定 

2.7 Incepton 网络

  先用1*1卷积进行压缩,再卷积,不同filters卷积后,放一块,进行channels concatenate

 

Inception NN最后有FC层,也有从隐藏层分支出去做一个softmax来预测,算是一种正则化;

Inception也叫GoogLeNet有很多发展了Inception v1,v2,v3。。( 其实Yolo也是有很大v1,v2,v3等很多版本了),甚至有人加入了skip connection,有时候也表现不错;

 

2.8 用open-source去实现

  深度学习很多时候不能通过阅读人家的论文复现,但开源代码可以帮助我们

2.9 迁移学习

  很多数据集,也有很多模型已经训练好,迁移过来在自己的模型上;

  数据少,冻结前面的,直接改最后的softmax训练,多点的数据,考虑往前训练几层,很多的话,直接拿人家的权重作为初始化权重

2.10 数据扩充

  mirroring,random cropping,rotation,shearing(倾斜),local warping,color shifting (高级点的: PCA)

2.11  讲CV几点

  数据多,人工特征干预可少,用更简单的算法; 数据少,则要多手工特征,;

  基线模型表现好,一是集成,二是多种方式测,multi-crop at test time

  用发表的模型;用开源实现;用预训练好的模型,在自己数据上微调

  

   CV似乎有很多数据了,但实际上经常会令人感觉到数据不够,因此CV需要依赖 hand-engineering,跟设计这么复杂的网络结构;

  特征工程是一项skillful的工作

 

第三周 目标检测

3.1  目标定位 object localization

给你个图片进行分类,同时要把目标框出来,这个框框其实也就是detect。 直接建模输出定义box的4个变量

 根据P是否为0来定义损失函数,通常对bx-bw坐标用平方损失,p用逻辑回归的交叉熵损失

  

3.2 landmark detection 特征点检测

只输出x,y的坐标,则变成特征点检测。 训练后,可应用AR带绿帽,姿态估计

 

 3.3 目标检测

滑动窗口检测sliding windows detection,小框框大框框滑动,一个一个检测,但计算成本太高,不好

3.4 滑动窗口卷积实现 Convolutional implementation of sliding window

FC层,其实可以看成是卷积核为1的卷积;

  5*5*16  跟400的全连接,等价于5*5*16 跟5*5*16=400 的卷积核,连接400次(filter)

  一次性把所有的滑动窗口全检测出来

 

 3.5 Bounding Box预测

上面的框框还不精确,需要调整,YOLO 算法是其中一个,意思是“you only like once”

分割成网格grid cell,对每个cell贴标签,进行训练,每个cell单独训练

注意:

(1)跨框的只分配给object中心点所在的框

(2)卷积实现一次性跑,并没一个一个框跑 (用stride控制的?),效率高,可以实现real time 

(3)优点在于可以精确输出边界框,test时,输入图片,分grid cell给出结果

(4)指定box时,左上(0,0),右下(1,1),bh,bw可以大于1

 

如果格子里只有一个预测的object则没问题,一个多框,下面说。实际中,分割较多,如19*19,一个基本上只有一个object。

 

YOLO论文挺难读,他也读不懂,问了很多资深研究员,甚至有时需要联系作者,看源代码,所以大家看不懂时不要捉急;

 

3.6 交并比 Intersection over Union 

IoU , I own you

 

3.7 非极大值抑制 Non-max suppresion example

看最大的p框,然后检查所有跟这个最大概率边界框有高IOU的框,去掉,再找最大,再去掉; 如果有3个目标类型,则单独分别进行抑制

  3.8 Anchor boxes 专门处理一框2物

 

 设立Anchor box的好处是让你的学习算法更有针对性,比如针对高高廋廋,或者扁扁长长的形状,有些unit会专门处理这种形状;

一般人工选择5-10个anchor box shape,覆盖不同形状;高级点,Yolo论文中介绍了用k均值聚类,将2类形状聚类选择最有代表性的一组anchor box,自动学习anchor box 

 无法处理一框3物,以及2个物体的形状一样的情况;

 

3.9 Yolo算法

训练

  

  

每周物体单独处理一次non-max suppression

 

3.10 候选区域 Region proposal (R-CNN)

挺有影响力的,但是wu用得少,optional.  只选择有意义的区域出来,运行卷积分类;

选择的方法是图像分割算法;

R-CNN对区域逐一分类,比较慢,还有个Fast R-CNN,在区域内运用了滑动窗口的卷积实现; 还有个Faster R-CNN,不是用传统的分割算法,而用CNN进行分割分割; 但还是比YOLO慢。。

第四周 

Face Recognition 人脸识别 

4.1  FR简介

  

  4.2 One-shot学习

  数据库中只有一张照片,训练集太少了;如果有个新人加入,sotfmax的节点,会增加一个,有需要训练?

  解决方法: 学习一个similarity函数

    

      新人来了,直接增加一个比较变量即可;

4.3 Siamese网络

  对2个图片进行encodeing,在识别卷积网络(Identical convolutional NN)上,对不同input进行运算,然后比较他们,又叫Siamese neural network architect; 

  

 4.4 Triple损失

  如何学习这个function? 通过Triple loss;因为同时查看三张照片(Anchor, positive, negative - APN),进行训练

  

     训练的时候,d(A,P) + alpha < d(A,N) 多挑难分辨的APN samples,这样才能更好的使梯度下降; 商业上的训练照片多,几千万,上亿的都有,数据也难获得,好消息是很多大商业公司已经训练好,发布在网上了;

   命名规则: __Net ,  Deep__, 这里face recognition,所以叫: FaceNet;

 

4.5 面部验证及二分类

  face verification 可以直接作为二分类问题进行学习;基于Siamese 网络架构的二分类问题,用不同的照片对,去训练NN,训练Siamese网络参数

  

  Neural Style Tranfer

4.6 神经网络风格转换

  贴给图片,展示

  

 4.7 深度卷积网络学习了什么?

  举例说明 layer 1 学习了相对简单的特征,例如边缘,特别颜色的阴影;深层的units看得更宽的区域,得到更宏观的特征

  [Zeiler and Fergus.,2013, Visualizing and understanding convolutional networks]

  

  4.8 损失函数

     

 4.9 内容损失函数

  用不太深不太浅的hidden layer 层计算

    

    [Gatys et al.,2015. A neural algorithm of artistic style]

 

4.10 风格损失函数

 风格定义为不同激活通道直接的相关系数,

    

    怎么解释? 例如某个channel表示竖直的边缘检测,另一个channel表示橙色色调 ,它们不相关则意味着竖直边缘没啥橙色;

  style matrix - 不同channel的相同位置点相乘

    

       

  

如果用多几层hidden layers来计算style cost function 效果会更好点。底层捕捉简单点的底层特征,高层点的捕捉高层特征

    

     总的cost function为:

      

 4.11 一维及三维

   1D: 信号处理

  

    3D - 可以在医学CT三维建模,电影数据(不同帧在电影中按时间顺序的排列)

  

 

   

 

posted @ 2020-12-19 23:59  Leo叶  阅读(275)  评论(0)    收藏  举报