(1)、训练集与测试集的标准定义:
从数据中学得模型的过程称为“学习”(learning)或“训练”(training),这个过程通过执行某个机器学习算法来完成。训练过程中使用的数据称为“训练数据”(training data),其中每个样本称为一个“训练样本”(training sample),训练样本组成的集合称为“训练集”(training dataset)。学得模型对应了关于数据的某种潜在的规律,因此亦称“假设”(hypothesis);这种潜在规律自身,则称为“真相”或“真实”(groun truth),学习过程就是为了找出或逼近真相。
(2)anchor_scales、anchor_ratios、anchor_strides的含义?
anchor_scales=[8]
anchor_ratios=[0.5, 1.0, 2.0]
anchor_strides=[4, 8, 16, 32, 64]
anchor_strides一般使用在FPN中,至于为什么有五个anchor_stride,是因为FPN要为rpn再下采样一次,所以相当于有五个层的FPN网络。anchor_ratio主要决定anchor的形状, 然后设定一个初始大小anchor_scale生成base_anchor, base_anchor*anchor_strides 生成各个feature_map上使用的anchor。
参考代码为:
mmdetection/mmdet/models/anchor_heads/anchor_head.py mmdetection/mmdet/core/anchor/anchor_generator.py
(3)、残差网络ResNet的原理:
残差网络在原始的网络上加上跳跃连接,左边为朴素网络,可以拟合出任意目标映射H(x),右边为Residual网络,可以拟合出目标映射F(x),H(x)=F(x)+x,F(x)是残差映射,相对于identity来说。当H(x)最优映射接近identity时,很容易捕捉到小的扰动。右边这种结构称为残差网络的残差块,用此模型堆叠能保证模型深度更深,同时收敛快,梯度消失能更好的解决
在进行梯度下降优化的时候,需要对x求偏导
因此在此小模块上导数永远大于1,梯度消失是因为导数接近于零无法继续传播,如果每层梯度都大于1,乘积一定大于1。因此这么操作后F(x)只拟合出残差函数,这样即使F(x)的导数很小时,强制让网络去拟合小的梯度扰动,网络很轻松的就能拟合,具体的残差块如下图
全是3x3的卷积核,卷积步长2取代池化,使用Batch Normalization,取消max pooling、全练级、Dropout,整个网络为
残差网络想要更深需要根据Bottleneck优化残差映射网络,原始网络为
原始:
优化:
左边为原始残差网络,256个通道,优化加了两个1x1的卷积,把输入从256先降到64,再将维数升到256输出,用此方法降低计算量和参数量。最终提升网络的深度,下表为不同残差网络的配置: