Baidu AI Studio - 2
day8 0818
讲卷积神经网络,神经网络相关内容请参考CNN卷积神经网络知识点小节
Q1 大致流程
单张单通道图像卷积,单张图池化,激活函数act和偏置项,padding填充操作,stride步幅操作,单张多通道图像卷积,多张多通道图像卷积。
容易遇到的问题:
- 卷积过后需要添加偏置项。
- 多张多通道图像卷积是一个4维的数组,排列顺序为
[N,C,H,W]
,即[图像数量,通道数,高度,宽度]
。
Q2 感受野
定义:输出特征图上一个像素点,能够感受的输入图像的区域,换句话说,就是输入图像中感受野区域的像素值发生变化,在输出图中都有可能显示出来。
特征:卷积层越多,感受野的范围越大;越是经过较多卷积的特征层,具有的语义含义也就越多。
P1 卷积函数
飞桨卷积算子对应的API是paddle.fluid.dygraph.Conv2D,用户可以直接调用API进行计算,也可以在此基础上修改。常用的参数如下:
- num_channels (int) - 输入图像的通道数。
- num_fliters (int) - 卷积核的个数,和输出特征图通道数相同,相当于上文中的 C o u t C_{out} Cout。
- filter_size(int|tuple) - 卷积核大小,可以是整数,比如3,表示卷积核的高和宽均为3 ;或者是两个整数的list,例如[3,2],表示卷积核的高为3,宽为2。
- stride(int|tuple) - 步幅,可以是整数,默认值为1,表示垂直和水平滑动步幅均为1;或者是两个整数的list,例如[3,2],表示垂直滑动步幅为3,水平滑动步幅为2。
- padding(int|tuple) - 填充大小,可以是整数,比如1,表示竖直和水平边界填充大小均为1;或者是两个整数的list,例如[2,1],表示竖直边界填充大小为2,水平边界填充大小为1。
- act(str)- 应用于输出上的激活函数,如Tanh、Softmax、Sigmoid,Relu等,默认值为None。
输入数据维度 [ N , C i n , H i n , W i n ] [N, C_{in}, H_{in}, W_{in}] [N,Cin,Hin,Win],输出数据维度 [ N , n u m _ f i l t e r s , H o u t , W o u t ] [N, num\_filters, H_{out}, W_{out}] [N,num_filters,Hout,Wout],权重参数 w w w的维度 [ n u m _ f i l t e r s , C i n , f i l t e r _ s i z e _ h , f i l t e r _ s i z e _ w ] [num\_filters, C_{in}, filter\_size\_h, filter\_size\_w] [num_filters,Cin,filter_size_h,filter_size_w],偏置参数 b b b的维度是 [ n u m _ f i l t e r s ] [num\_filters] [num_filters]。
day9 0819
Q1 激活函数sigmoid的弊端?
很有可能造成梯度消失。
Q2 批归一化Batch Normalization
计算均值,计算方差,变成标准正态分布,仿射变换
是在训练过程中将大量样本的均值和方差保存下来,预测时直接使用保存好的值而不再重新计算。实际上,在BatchNorm的具体实现中,训练时会计算均值和方差的移动平均值。默认采用权重叠加法计算训练集的相关参数。
Q3 丢弃法Dropout
在预测场景时,会向前传递所有神经元的信号,可能会引出一个新的问题:训练时由于部分神经元被随机丢弃了,输出数据的总大小会变小。比如:计算其L1L1L1范数会比不使用Dropout时变小,但是预测时却没有丢弃神经元,这将导致训练和预测时数据的分布不一样。为了解决这个问题,飞桨支持如下两种方法:
downgrade_in_infer
训练时以比例rrr随机丢弃一部分神经元,不向后传递它们的信号;预测时向后传递所有神经元的信号,但是将每个神经元上的数值乘以 (1−r)(1 - r)(1−r)。
upscale_in_train
训练时以比例rrr随机丢弃一部分神经元,不向后传递它们的信号,但是将那些被保留的神经元上的数值除以 (1−r)(1 - r)(1−r);预测时向后传递所有神经元的信号,不做任何处理。
day10 0820
图像分类任务
网络名称 | 时间 | ImageNet冠军 |
---|---|---|
AlexNet | 2012 | 1 |
VGG | 2014 | |
GoogLeNet | 2014 | 1 |
ResNet | 2015 | 1 |
day11 0821
Q1 目标检测的任务
分类:如何产生候选区域,并对它们进行标注。
精细化:提取图像特征,并将特征图与候选区域的类别和位置进行关联。
候选区域 = 感兴趣区域 = Proposal = ROI
Q2 包围框和锚框
包围框:正好能包含住物体的矩形框,boundingbox bbox,还可以分为真实包围框和预测包围框。
两种表示方法:[x1, y1, x2, y2]
和[x, y, w, h]
锚框:人为构造的假想框,以某种指定的规则生成。即制定好几组高度和宽度,在图像上选取点,可以框出不同的锚框。其实和候选区域发挥的作用是一样的,只是采用了一种高级的方法提取“候选区域“,这种新的方法提取出来的”候选区域“也有了一个新的名字”锚框“。
在目标检测模型中,通常会以某种规则在图片上生成一系列锚框,将这些锚框当成可能的候选区域。模型对这些候选区域是否包含物体进行预测,如果包含目标物体,则还需要进一步预测出物体所属的类别。还有更为重要的一点是,由于锚框位置是固定的,它不大可能刚好跟物体边界框重合,所以需要在锚框的基础上进行微调以形成能准确描述物体位置的预测框,模型需要预测出微调的幅度。在训练过程中,模型通过学习不断的调整参数,最终能学会如何判别出锚框所代表的候选区域是否包含物体,如果包含物体的话,物体属于哪个类别,以及物体边界框相对于锚框位置需要调整的幅度。
两者之间的关系:
生成一些列锚框
Q3 图像增强
随机改变亮暗对比度和颜色
随机填充
随机裁剪
随机缩放
随机翻转
Q4 YOLOV3
day12 0822
Q1 生成锚框
分成20 * 15个放个grid,每个grid结合三个固定大小的框,合并成锚框,20 * 15 * 3 = 900个锚框
生成锚框后,随机选参数[tx, ty, tw, th]
进行微调,生成proposal候选区域。
Q2
标注候选区域,是否包含物体
找出真实框所在区域及该区域的三个锚框
计算IoU,找出与真实框最匹配的锚框
计算t的值
类别标签为one-hot向量
day13 0823
Q1 多层级输出
输出不同大小的特征图
Q2 非极大值抑制
逐次循环,选得分最高的预测框保留,剩下的预测框与之循环比较IoU,大于阈值就去掉,小于阈值保留,依次遍历所有候选的预测框。