深度学习第四课 卷积神经网络

深度学习第四课 卷积神经网络

第二周 实例探究

2.1 经典网络

  • LeNet-5
  • AlexNet
  • VGGNet

LeNet是识别手写数字的网络。VGG专注于构建卷积层的简单网络。

2.2 残差网络

ResNet由残差块(Residual block)构建。 a [ l + 2 ] = g ( z [ l + 2 ] + a [ l ] ) a^{[l+2]} = g(z^{[l+2]}+a^{[l]}) a[l+2]=g(z[l+2]+a[l])

展开,有 a [ l + 2 ] = g ( W [ l + 2 ] a [ l + 1 ] + b [ l + 2 ] + a [ l ] ) a^{[l+2]} = g(W^{[l+2]}a^{[l+1]}+b^{[l+2]}+a^{[l]}) a[l+2]=g(W[l+2]a[l+1]+b[l+2]+a[l]) 。如果使用L2正则化,它会压缩 W [ l + 2 ] W^{[l+2]} W[l+2] 的值。如果 W [ l + 2 ] = 0 W^{[l+2]}=0 W[l+2]=0 那么有 a [ l + 2 ] = g ( a [ l ] ) = a [ l ] a^{[l+2]} = g(a^{[l]}) = a^{[l]} a[l+2]=g(a[l])=a[l] ,这里应用ReLU激活函数。可以看到即使神经网络增加了两层,它的效率也并不逊色于简单的神经网络,学习恒等函数对于它来说很简单。

残差网络学习恒等函数十分容易,你能确定网络性能不受影响,有时能够提高网络性能。

如果输入和输出有不同维度,再增加一个矩阵 W S W_S WS 使得 W s a [ l ] W_sa^{[l]} Wsa[l] 符合维度即可。

2.3 网络中的网络 —— 1*1 卷积

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5aNKlxLx-1636112547677)(/Users/ccl/Desktop/博客/深度学习/image-20211101161437502.png)]

假设有一张 6 × 6 × 32 6 \times6\times32 6×6×32 的图片,我们用一个 1 × 1 1\times1 1×1 的过滤器进行卷积。这32个数字可以这样理解:一个神经元的输入是32个数字,这32个数字来自同一高度和宽度,具有不同通道。将这32个数字乘以32个不同权重,然后ReLU激活输出。

一般来说,如果过滤器不止一个,可以看成有多个输入单元,其输入内容是为一个切片上的所有数字,输出结果是 过滤器的数量堆叠。所以 1 × 1 1 \times 1 1×1 的卷积可以理解为对这32个不同位置都应用一个全连接层。

这种方法称为 1 × 1 1 \times 1 1×1 的卷积或 network in network。

1 × 1 1 \times 1 1×1 的卷积能很方便的减少、保持或增加通道数量。

2.4 Inception网络

构建卷积层时你经常要决定你的过滤器的大小是多少,这是一件烦人的事。现在可以让网络代替你决定。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5HaZxAZX-1636112547684)(/Users/ccl/Desktop/博客/深度学习/image-20211101165206102.png)]

我们要做的就是将所有可能大小的过滤器输出堆叠在一起。让网络自己学习参数。


这样做有个问题就是计算成本。但是我们可以利用 1 × 1 1\times1 1×1 卷积网络来减少计算,有时称为瓶颈层。

在这里插入图片描述
可以看到计算次数减少到了1/10。


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BBg8zh8a-1636112547687)(/Users/ccl/Desktop/博客/深度学习/image-20211101170120831.png)]

Inception网络就是上面这样一个个小单元组合而成,每个单元可能略有不同,但大体一致。

2.5 迁移学习

相比于从头训练权重,你可以下载别人已经训练好的网络结构权重,用这个作预训练。具体有:

  • 下载别人的模型,改变输出层。锁定前面的层权重,只训练输出层的权重。
  • 锁定前面几层权重,训练后面的。
  • 只把权重作为一个初始化,自己训练所有权重。

2.6 数据增强

data augmentation。具体有:

  • 图像镜像
  • 随机裁剪
  • 色彩转换(给RGB通道加上不同失真值)
  • multi-crop at test time

第三周 目标检测

3.1 目标定位

我们要研究的图像定位问题,通常只有一个较大的图像位于图片中心,我们要对它进行识别和定位。

让输出层多输出4个数字, b x , b y , b h , b w b_x,b_y,b_h,b_w bx,by,bh,bw 其中 b x , b y b_x,b_y bx,by 表示要识别的物体中心坐标,h和w是外框的高度和宽度。

输出标签 y = ( p c , b x , b y , b h , b w , c 1 , c 2 , c 3 ) y=(p_c, b_x, b_y, b_h, b_w, c_1,c_2,c_3) y=(pc,bx,by,bh,bw,c1,c2,c3) ,其中 p c p_c pc 表示有无识别的物体,c1~c3是物体类别标签。

约定图像左上角坐标(0,0),右下角坐标(1,1)。

3.2 特征点检测

人脸识别和姿态检测。

神经网络可以通过输出图片上特征点的坐标(x, y),来实现对目标特征的识别和定位标记。

如对于人脸表情识别的问题中,我们通过标定训练数据集中特征点的位置信息,来对人脸进行不同位置不同特征的定位和标记。AR的应用就是基于人脸表情识别来设计的,如脸部扭曲、增加头部配饰等。在人体姿态检测中,同样可以通过对人体不同的特征位置关键点的标注,来记录人体的姿态。

3.3 目标检测

基于滑动窗口的目标检测算法。

  • 首先选定一个特定大小的窗口,将窗口内的图片输入到模型中进行预测;
  • 以固定步幅滑动该窗口,遍历图像的每个区域,对窗内的各个小图不断输入模型进行预测;
  • 继续选取一个更大的窗口,再次遍历图像的每个区域,对区域内是否有车进行预测;
  • 遍历整个图像,可以保证在每个位置都能检测到是否有车。

3.4 滑动窗口的卷积实现

1、卷积层代替全连接层

在这里插入图片描述

假设前一层大小为 n h × n w × n c n_h \times n_w \times n_c nh×nw×nc ,可以用 n h × n w × n c n_h \times n_w \times n_c nh×nw×nc n h × n w × n c n_h \times n_w \times n_c nh×nw×nc 大小的卷积核进行卷积,得到 1 × 1 × ( n h ∗ n w ∗ n c ) 1\times 1 \times (n_h*n_w*n_c) 1×1×(nhnwnc) 大小的输出。这与全连接层的作用一样。

2、滑动窗口的卷积实现

从卷积的实现可以看出,它与滑动窗口很相像。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yxp7ZxVI-1636112547691)(/Users/ccl/Desktop/博客/深度学习/image-20211104155449632.png)]

第一行可以看作是对滑动窗口内的图像进行卷积。

第二行可以看作是对整幅图像进行卷积。

卷积层实现滑动窗口的这个过程,我们不需要把输入图片分割成四个子集分别执行前向传播,而是把他们作为一张图片输入到卷积神经网络中进行计算,其中的重叠部分(公共区域)可以共享大量的计算。

3.5 Bounding Box预测

卷积实现的滑动窗口算法可以使计算效率大大提供,但是有可能无法输出精确的的边界框。

YOLO算法——You Only Look Once

  • 将图片分割为精细的网格
  • 物体的中心只属于一个网格,从而将探测物体的任务交付给这个网格

在这里插入图片描述

每个格子都有一个 8 维的输出,所以总的输出是 3 × 3 × 8 3 \times 3 \times 8 3×3×8

这是一个卷积实现,而并不是在每个格子上跑一次算法。

3.6 交并比

Intersection-over-Union 故名思义,就是两个集合交集与并集之比。

用来衡量两个边界框重复的程度。

3.7 非最大值抑制

yolo算法中,将图片分成很精细的格子,可能好几个格子都检测出同一对象。非最大值抑制算法可以解决这个情况。

非最大值抑制,也就是说抑制那些不是最大值,却比较接近最大值的边界框。

在对 n × n n \times n n×n 个网格进行目标检测算法后,每个网格输出的 P c P_c Pc 为一个0~1的值,表示有车的概率大小。其中会有多个网格内存在高概率;那么就得到一个对象的多次检测,也就是一个对象上具有多个重叠的不同边框。

单个对象时的NMS算法

  1. 首先抛弃 P C P_C PC 小于一定程度的边框。(取 0.6
  2. 从所有的边框中选择 P c P_c Pc 最大的边框
    1. 对所有与该边框具有高IoU的边框进行抑制 (取0.5
  3. 对剩下的边框重复步骤2,直至到达边框个数要求

当有多个对象检测时,对每个输出类别分别独立进行一次非最大值抑制即可。

3.8 Anchor Box

到目前为止,我们一个格子只能检测出一个对象。利用anchor box 就能实现多对象检测,

而Anchor box 则是预先定义多个不同形状的Anchor box,我们需要把预测目标对应地和各个Anchor box 关联起来,所以我们重新定义目标向量:

y i = [ P c   b x   b y   b h   b w   c 1   c 2   c 3   P c   b x   b y   b h   b w   c 1   c 2   c 3 ⋯   ] y_i=[P_c \ b_x \ b_y \ b_h \ b_w \ c_1 \ c_2 \ c_3 \ P_c \ b_x \ b_y \ b_h \ b_w \ c_1 \ c_2 \ c_3 \cdots] yi=[Pc bx by bh bw c1 c2 c3 Pc bx by bh bw c1 c2 c3]

用这样的多目标向量分别对应不同的Anchor box,从而检测出多个重叠的目标。

  • 不使用Anchor box:训练图片中的每个对象,根据对象的中点,分配到对应的格子中。输出大小: n × n × 8

  • 使用Anchor box:训练图片的每个对象,根据对象的中点,分配到对应的格子中,同时还分配到一个和对象形状的IoU最高的Anchor box 中。输出大小(例如两个Anchor box): n × n × 16 。

不足:

  • 当我们定义两个anchor box 一个格子有三个对象时,此时只能用一些额外手段处理。

  • 同一个格子中存在两个对象,但它们的Anchor box 形状相同,此时也需要引入一些专门处理该情况的手段。

以上问题出现概率不高。

3.9 候选区域

在这里插入图片描述

在图片中选出候选区域,再对这些区域进行目标检测算法,从而避免了大量无用的检测。

更快的算法:

  • R-CNN:给出候选区域,对每个候选区域进行分类识别,输出对象 标签 和 bounding box,从而在确实存在对象的区域得到更精确的边界框,但速度慢;
  • Fast R-CNN:给出候选区域,使用滑动窗口的卷积实现去分类所有的候选区域,但得到候选区的聚类步骤仍然非常慢;
  • Faster R-CNN:使用卷积网络给出候选区域。

注:部分参考自 https://blog.csdn.net/koala_tree/article/details/78597575

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值