CV岗-图像分类、目标检测基础知识

面试基本知识

激活函数https://zhuanlan.zhihu.com/p/70810466

卷积后的输出层尺寸计算公式:
o u t p u t = ( W − F + 2 p ) / S + 1 output = (W-F+2p)/S+1 output=WF+2p)/S+1
·输入图片大小W*W

·Filter大小F*F

·步长S

·Padding的像素数P

AlexNet:

1)首次使用GPU加速

2)使用ReLU激活函数

3)使用LRN局部响应归一化

4)使用Dropout,减少过拟合

Dropout是如何工作的?

以p=0.5为例子,训练的时候使得其中的50%的神经元不起作用,梯度也只流经剩余的50%的神经元;测试的时候所有的神经元都起作用,并且所有的神经元的权重都乘以p以保证稳定性。

VGG:

创新点:通过堆叠多个小卷积核来代替大尺度卷积核,可以减少训练参数,同时保证相同的感受野。

两个3 * 3的卷积核相当于一个5 * 5的卷积核,三个3 * 3的卷积核相当于一个7 * 7的卷积核

GoogLeNet:

1)inception结构(融合不同尺度的特征信息)

2)使用1 * 1卷积核进行降维以及映射处理

3)添加两个辅助分类器帮助训练

4)丢弃全连接层,使用平均池化层,减少了模型参数

inception结构:

传统的CNN,如AlexNet、VggNet都是串联结构;GooLeNet采用了一种并联结构:将特征矩阵同时输入到多个分支处理,将输出按深度进行拼接,得到最终输出。

作用:增加网络深度和宽度的同时减少参数

注意:各分支输出的深度得保持一致,才能够进行拼接

ResNet:

1)提出Residual结构(残差结构)

2)使用Batch Normalization加速训练(丢弃Dropout)

为什么要进行BN呢?

(1)在深度神经网络训练的过程中,通常以输入网络的每一个mini-batch进行训练,这样每个batch具有不同的分布,使模型训练起来特别困难。

(2)Internal Covariate Shift (ICS) 问题:在训练的过程中,激活函数会改变各层数据的分布,随着网络的加深,这种改变(差异)会越来越大,使模型训练起来特别困难,收敛速度很慢,会出现梯度消失的问题。

BN的主要思想:针对每个神经元,使数据在进入激活函数之前,沿着通道计算每个batch的均值、方差,‘强迫’数据保持均值为0,方差为1的正态分布,避免发生梯度消失。具体来说,就是把第1个样本的第1个通道,加上第2个样本第1个通道 … 加上第 N 个样本第1个通道,求平均,得到通道 1 的均值(注意是除以 N×H×W 而不是单纯除以 N,最后得到的是一个代表这个 batch 第1个通道平均值的数字,而不是一个 H×W 的矩阵)。求通道 1 的方差也是同理。对所有通道都施加一遍这个操作,就得到了所有通道的均值和方差。

BN的使用位置:全连接层或卷积操作之后,激活函数之前。

BN算法过程:

  • 沿着通道计算每个batch的均值 μ
  • 沿着通道计算每个batch的方差
  • 做归一化
  • 加入缩放和平移变量γ和β
    在这里插入图片描述

其中E是一个很小的正值,比如 10^-8。加入缩放和平移变量的原因是:保证每一次数据经过归一化后还保留原有学习来的特征,同时又能完成归一化操作,加速训练。 这两个参数是用来学习的参数。

BN的作用:

(1)允许较大的学习率;

(2)减弱对初始化的强依赖性

(3)保持隐藏层中数值的均值、方差不变,让数值更稳定,为后面网络提供坚实的基础;

(4)有轻微的正则化作用(相当于给隐藏层加入噪声,类似Dropout)

BN存在的问题:

(1)每次是在一个batch上计算均值、方差,如果batch size太小,则计算的均值、方差不足以代表整个数据分布。

(2)batch size太大:会超过内存容量;需要跑更多的epoch,导致总训练时间变长;会直接固定梯度下降的方向,导致很难更新。

R-CNN:

1)使用Selective Search方法,对一张图像生成1000~2000个候选区域

2)对每一个候选区域,使用深度网络提取特征

3)特征送入每一类的SVM分类器,判断是否属于该类

4)使用回归器精细修正候选框的位置

Fast R-CNN:

1)使用Selective Search方法,对一张图像生成1000~2000个候选区域

2)将图像输入到网络得到特征图,并将SS算法生成的候选框投影到特征图上获取得到相应的特征矩阵

3)每个特征矩阵通过ROI pooling层缩放到7 * 7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果

Faster R-CNN:

1)将图像输入到网络得到相应的特征图

2)使用RPN结构生成候选框,将RPN生成的候选框投影到特征图上获得相应的特征矩阵

3)将每个特征矩阵通过ROI pooling层缩放到7 * 7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果

Non-Maximum-Suppression(非极大值抑制)

当两个box空间位置非常接近,就以score更高的那个作为基准,看IOU即重合度如何,如果与其重合度超过阈值,就抑制score更小的box,因为没有必要输出两个接近的box,只保留score大的就可以了。

应用:在目标检测过程中,(Faster-RCNN / YOLOv2)采用NMS来消除冗余的boxes,最终只留下最好的较少的box。

过程:

1 将各组box按照score降序排列

2 从score最大值开始,置为当前box,保存idex,然后依次遍历后面的box,计算与当前box的IOU值,若大于阈值,则抑制,不会输出

3 完成一轮遍历后,继续选择下一个非抑制的box作为当前box,重复步骤2

4 返回没有被抑制的index即符合条件的box

代码:

写计算box iou的程序代码。

# a, b is in (minx, miny, maxx, maxy)
# 核心原理是先检查左上角和右下角边界是否导致iou为0,然后再进行计算。应该很熟练的掌握,不能出错。
def box_iou(a, b):
    left = max(a[0], b[0])
    top = max(a[1], b[1])
    right = min(a[2], b[2])
    bottom = min(a[3], b[3])

    if left >= right or top >= bottom: return 0
    else:
        inter = (right-left)*(bottom-top)
        calc_area = lambda x: (x[2]-x[0])*(x[3]-x[1])
        a_area = calc_area(a)
        b_area = calc_area(b)
        iou = inter / float(a_area+b_area-inter)
        return iou

a = [1, 1, 5, 5]
b = [4, 4, 7, 7]
print (box_iou(a, b))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值