秋招准备-基础知识篇(正更)

深度学习

介绍优化器以及如何优化。包括SGD, Momentum,Adagrad,RMSProp,Adam。

  • SGD:梯度更新的方式为: W t + 1 = W t − η ∂ L ∂ W t W_{t+1}=W_{t}-\eta \frac{\partial L}{\partial W_{t}} Wt+1=WtηWtL
  • BGD: 一个batch才更新一次,有效地防止震荡.
  • Momentum: 在梯度下降法地基础上进行修改,具有加速梯度下降的作用,如果当前地梯度方向和前一时刻的方向一致,则加速;若反方向,则减速,有效地防止震荡和加快收敛速度,其表达式为:
    { v t = α v t − 1 + η ∂ L ∂ W t W t + 1 = W t − v t \left\{ \begin{aligned} v_t = \alpha v_{t-1} + \eta \frac{\partial L}{\partial W_{t}} \\ W_{t+1} = W_t - v_t \end{aligned} \right. vt=αvt1+ηWtLWt+1=Wtvt
    α \alpha α表示动力的大小,一般取0.9。
  • Adagrad:在SGD和momentum中,所有参数的学习率都是一样的。Adagrad实现了独立地适应模型的所有参数的学习率,缩放每个参数反比于其所有梯度历史平均值总和的平方根。代价函数大的梯度其参数相应的学习率也比较快,小的梯度学习率就比较小。其公式为:
    W t + 1 = W t − η 0 ∑ t ′ = 1 t ( g t ′ , i ) + ϵ ∗ g t , i W_{t+1} = W_t- \frac {\eta_0}{\sqrt{\sum_{t'=1}^t(g_{t',i}) +\epsilon}}*g_{t,i} Wt+1=Wtt=1t(gt,i)+ϵ η0gt,i
    g t , i g_{t,i} gt,i表示t时刻W的梯度.
    Adagrad的优点在于不用人为的调整学习率,缺点是随着迭代次数的增多,学习率会越来越小,最终趋向于0.
  • RMSProp:针对Adagrad的缺点,将梯度的累加改成的指数加权的平均,其表达式为:
    { E [ g 2 ] t = α E [ g 2 ] t − 1 + ( 1 − α ) g t 2 W t + 1 = W t − η 0 E [ g 2 ] t + ϵ ∗ g t \left\{ \begin{aligned} E[g^2]_t = \alpha E[g^2]_{t-1} + (1-\alpha) g^2_t \\ W_{t+1} = W_t - \frac {\eta_0}{\sqrt{E[g^2]_t+\epsilon}}*g_t \end{aligned} \right. E[g2]t=αE[g2]t1+(1α)gt2Wt+1=WtE[g2]t+ϵ η0gt
    避免了学习率越来越低的问题,而且能自适应地调节学习率。
  • Adam:结合了momentum和RMSProp,在动量直接并入了梯度一阶矩(指数加权)的估计,对于学习率方面采用二阶矩估计。其表达式为:
    { m t = β 1 m t − 1 + ( 1 − β 1 ) g t v t = β 2 v t − 1 + ( 1 − β 2 ) g t 2 m = m t 1 − β 1 t , v = v t 1 − β 2 t W t + 1 = W t − η v + ϵ m \left\{ \begin{aligned} m_t = \beta_1 m_{t-1}+ (1-\beta_1) g_t \\ v_t = \beta_2 v_{t-1} + (1-\beta_2) g_t^2 \\ m = \frac {m_t}{1-\beta_1^t}, v = \frac {v_t}{1-\beta_2^t} \\ W_{t+1} = W_t - \frac {\eta}{\sqrt{v}+\epsilon} m \end{aligned} \right. mt=β1mt1+(1β1)gtvt=β2vt1+(1β2)gt2m=1β1tmt,v=1β2tvtWt+1=Wtv +ϵηm
    β 1 \beta_1 β1 β 2 \beta_2 β2的大小通常为0.9和0.999.
    自己一般用的优化器是adam和momentum,经验:adam可以很快地收敛,但是用momentum优化器的精度比adam的高

欠拟合和过拟合、解决方法。

  • 欠拟合:模型再训练和预测时表现都不好。
  • 过拟合:模型对训练数据拟合呈过当的情况,对测试数据表现差。
  • 降低过拟合的方法:
    从数据入手,获得更多的训练数据。在图像方面,可以通过图像的平移、旋转、缩放等方式扩充数据;
    降低模型的复杂度;
    采用L2正则化;
    集成学习方法。集成学习把多个模型集成在一起,来降低单一模型的过拟合风险,如bagging。
    使用dropout
  • 降低欠拟合的方法:
    增加模型的复杂度;
    添加新特征;
    减小正则化系数。

损失函数。BCE loss和softmax loss。

  • 熵的定义:描述事物混乱的程度。熵越大,越混乱。交叉熵:可以用极大似然估计的方法求得
  • BCE loss 二分类交叉熵损失函数。推导过程:
    BCE loss
    在这里插入图片描述
  • softmax 交叉熵损失。推导过程:
    在这里插入图片描述

训练不收敛的问题

  • 学习率太大;
  • 模型太过简单,导致欠拟合,无法收敛;
  • 数据的准确性或者未做归一化
  • batchsize 太小

数据均衡化的方法

  • 正负样本比例大,可对样本多的类别进行降采样,或者多样本少的进行上采样,如数据增强;
  • 在loss上做均衡化,比如在交叉熵损失函数中,对每个类别赋予一个权重,该权重与类别的样本数目成反比。

正则化L1、L2范数,L1趋向于0,L2不会,为什么?L1为什么可以稀疏特征,L2可以防止过拟合。

偏差和方差是什么?

  • 偏差:由所有采样得到的大小为m的训练数据集训练出的所有模型的输出的平均值和真实模型输出之间的偏差。
  • 方差:由所有样本采样得到的大小为m的训练数据集训练出的所有模型的输出的方差。方差通常是由于模型的复杂度相对于训练样本数m过高导致的。
  • 例子:假设一次射击就是一个机器学习模型对一个样本进行预测。射中靶心位置代表预测准确,偏离靶心越远代表预测误差越大。我们通过n次采样的搭配n个大小为m的训练样本集合,训练出n个模型,对同一个样本做预测,相当于我们做了n次射击,设计结果如图所示我们最期望的结果是左上角的结果,又准确又集中,说明模型的偏差和方差都很小;右上图虽然设计结果的中心在靶心周围,但是分布比较散,说明模型的偏差较小,方差较大;同理,左下图说明模型方差较小,偏差较大;右下图说明模型方差较大,偏差也较大。
    在这里插入图片描述
    因此,偏差描述了模型的准确性,而方差则描述了模型的稳定性。过拟合:模型过分拟合了训练数据,对于测试数据效果变差,这是方差大的体现。而对于欠拟合,模型本身就不是很准确,是偏差大的体现。

激活函数sigmoid和relu,sigmoid的公式和求导图,relu的优点以及衍生的prelu等。

  • 激活函数的作用:为网络提供非线性建模能力。如果网络中仅包含线性卷积和全连接运算,那么该网络仅仅可以表达线性映射,即使增加网络的深度也依旧还是线性映射,难以有效建模实际环境中非线性数据。
  • sigmoid函数:
  • 在这里插入图片描述
    其图像为:
    在这里插入图片描述
    范围在0-0.25之间,小于1,因此会导致梯度消失(可以试着画多个fc层,每个fc只有一个神经元)
  • ReLu:在负无穷到0处为0,在0到正无穷为x;作用:防止梯度消失;一定程度稀疏特征;反向传播快。
  • LReLu:在负无穷到0处改为y=ax,a为常数,手工设置。
  • PReLu:在LReLu上修改,将a改为网络自己学习得到的值

BN层的训练和测试的区别,反传、公式以及参数量。

  • BN层:在网络的每一层输入的时候,进行了归一化处理,将数据重新拉回均值为0,标准差为1,可以加快训练,防止梯度消失。
  • 注意:如果仅仅对数据简单地归一化,那么是会影响到本层网络所学习到的特征的。比如,在网络中间某一层学习到的特征数据本身分布在S型激活函数的两侧,而有的则分布在中间部分,如果强制对这些层做归一化处理,那么所有层的分布都是一样的,破坏了每一层的表征能力,因此引入了可学习的两个参数 γ \gamma γ β \beta β
  • 训练的前传时:
    1、计算该batch的平均值: μ b = 1 m ∑ i = 1 n x i \mu_b = \frac{1}{m}\sum_{i=1}^nx_i μb=m1i=1nxi
    2、计算方差:
    σ b 2 = 1 m ∑ i = 1 m ( x i − μ b ) 2 \sigma^2_b = \frac{1}{m}\sum_{i=1}^m(x_i-\mu_b)^2 σb2=m1i=1m(xiμb)2
    3、归一化:
    x i = x i − μ b σ 2 + ϵ x_i = \frac{x_i-\mu_b}{\sqrt{\sigma^2+\epsilon}} xi=σ2+ϵ xiμb 注意: ϵ \epsilon ϵ接近于0,加入这个参数时为了防止分母出现0的情况。
    4、bn层的输出为:
    y i = γ x i + β y_i = \gamma x_i+\beta yi=γxi+β //scale and shift
  • 训练的反传时:
    在这里插入图片描述
    • 测试:测试阶段一般只输入一个测试样本,那么bn层的均值和标准差怎么来呢?其实网络一旦训练完毕,参数都是固定的,此时即使时一批数据进入网路进行测试,bn层的均值和标准差都是固定的,也就是说训练时会记录每一层的标准差和均值,测试时直接拿来用。注意:训练时有很多个epoch,在每个epoch中,标准差和均值是用权值衰减的方式来更新的,而不是取某个epoch的均值和标准差。
    • 参数量的计算:
      BN层是对每个神经元进行归一化处理,在图像处理中,我们认为一张feature map就是一个神经元。假设batch为m,某一层输入数据表示为(m,f,p,q),f为特征图个数,p、q是特征图的宽和高。每一张feature map都有两个参数(但是我认为应该是4,除了scale和shift外,还有均值和方差),因此,参数量为f2(f4).

在卷积层后,先加BN还是先加激活函数的讨论。

在batch norm的论文中,是将bn层放在卷积层和激活层中间。但也有人认为放在激活函数后面可以取得更好的结果。分析:bn本意是对传给隐藏层的输入作归一化,如果将隐藏层前面的网络层全部砍掉,那么这个隐藏层就变成了输入层,传给它的输入需要归一化,那么,BN层应该放在非线性激活层之后。但是,在很多文章看到的还是将BN放在relu前。

pooling的反向传播。

  • 对于maxpooling: 下一层的误差项的值会原封不动的传递到上一层对应区域的最大值对应的神经元,而其他神经元的误差项的值都是0;
  • 对于meanpooling:下一层的误差项的值会平均分配到上一层对应区域中的所有神经元。

depthwise conv和pointwise conv:

  • depthwise conv:组卷积的一个特例,对于每个feature map都赋予一个卷积核,即一个卷积核处理一个feature map。极大的减少参数量。
  • pointwise conv:和普通的卷积类似,卷积核的尺寸为 11M*N,M为上一层的通道数,N为输出的channel数。这里的卷积运算会将上一步的map在深度方向上进行加权组合,生成新的Feature map。有N个卷积核就有N个输出Feature map

卷积层的参数量、计算量。计算输出feature map的size。

  • 假设卷积层的输入特征图为 C i n ∗ H i n ∗ W i n C_{in}*H_{in}*W_{in} CinHinWin,卷积核大小为 K 1 ∗ K 2 K_1*K_2 K1K2,数目为 C o u t C_out Cout,padding为P,stride=S,输出的特征图大小为 C o u t ∗ H o u t ∗ W o u t C_{out}*H_{out}*W_{out} CoutHoutWout
  • 参数量:
    无偏置: C i n ∗ K 1 ∗ K 2 ∗ C o u t C_{in}*K_1*K_2*C_{out} CinK1K2Cout
    有偏置: ( C i n ∗ K 1 ∗ K 2 + 1 ) ∗ C o u t (C_{in}*K_1*K_2+1)*C_{out} CinK1K2+1Cout
  • 计算量:
    只考虑乘法计算量: ( C i n ∗ K 1 ∗ K 2 ) ∗ C o u t ∗ H o u t ∗ W o u t (C_{in}*K_1*K_2)*C_{out}*H_{out}*W_{out} CinK1K2CoutHoutWout
    同时考虑乘法和加法:要得到输出特征图的某一个位置的像素值,需要 C i n ∗ K 1 ∗ K 2 C_{in}*K_1*K_2 CinK1K2次乘法操作,而特征图总共有 C o u t ∗ H o u t ∗ W o u t C_{out}*H_{out}*W_{out} CoutHoutWout个像素,因此乘法计算量为: ( C i n ∗ K 1 ∗ K 2 ) ∗ C o u t ∗ H o u t ∗ W o u t (C_{in}*K_1*K_2)*C_{out}*H_{out}*W_{out} CinK1K2CoutHoutWout;而每一个像素要进行 ( C i n ∗ ( K 1 ∗ K 2 − 1 ) ) + ( C i n + 1 ) + 1 = C i n ∗ K 1 ∗ K 2 (C_{in}*(K_1*K_2-1))+(C_{in}+1)+1 = C_{in}*K_1*K_2 CinK1K21+Cin+1+1=CinK1K2次加法操作。因此总的加法计算量为 ( C i n ∗ K 1 ∗ K 2 ) ∗ C o u t ∗ H o u t ∗ W o u t (C_{in}*K_1*K_2)*C_{out}*H_{out}*W_{out} CinK1K2CoutHoutWout。则总的乘加法计算量为 2 ∗ ( C i n ∗ K 1 ∗ K 2 ) ∗ C o u t ∗ H o u t ∗ W o u t 2*(C_{in}*K_1*K_2)*C_{out}*H_{out}*W_{out} 2CinK1K2CoutHoutWout
    注意:当前一般是浮点操作数(flops),一般只看卷积乘法以及加上bias的一次加法.
  • 输出feature map大小:
    H o u t = ⌊ H i n − K 1 + 2 ∗ P S ⌋ + 1 H_{out}=\lfloor \frac{H_{in}-K_{1}+2*P}{S} \rfloor+1 Hout=SHinK1+2P+1
    W o u t = ⌊ W i n − K 2 + 2 ∗ P S ⌋ + 1 W_{out}=\lfloor \frac{W_{in}-K_{2}+2*P}{S} \rfloor+1 Wout=SWinK2+2P+1

感受野的计算。

dropout与disout

  • dropout:在训练过程中,以一定的概率随机将某些神经元置为0;一般只失活全连接层,从某种角度看这属于一种模型融合的方法,缓解过拟合。
  • disout:aaai2020的华为诺亚方舟实验室的一篇文章。通过研究特征图扰动来增强深度神经网络的泛化能力的方法。(待看)

resnet的网络为什么那么深

加入了shortcut连接,即输出层=卷积层输出+输入,之所以可以做那么深,是因为他能避免深层网络的梯度消失现象。

梯度消失和梯度爆炸的描述,如何处理?如何避免梯度消失

  • 梯度消失:反向传播时,梯度不更新,为0;消失的原因:隐藏层的激活函数使用sigmoid函数,大致过程:
    在这里插入图片描述
    激活函数的导数最大值为0.25,因此多个值相乘时,就会变得特别小。
  • 梯度爆炸:loss变成nan。产生原因:权重初始化的原因。
  • 梯度消失梯度爆炸解决方法:
    引入batch norm
    用relu替换sigmoid函数
    加入残差块
    使用预训练模型

网络权重初始化方法。(不能初始化同一个值的原因)

  • 权重的初始化对模型的收敛速度和性能有着至关重要的影响,一个好的权重初始化可以有效地避免梯度消失和梯度爆炸。初始化有一下几种方法:
  • 对w随机初始化,如果w很大,会产生梯度爆炸。
  • Xavier 初始化:Xavier Glorot,在Understanding the difficulty of training deep feedforward neural networks论文中提出一个洞见:激活值的方差是逐层递减的,这导致反向传播中的梯度也逐层递减。要解决梯度消失,就要避免激活值方差的衰减,最理想的情况是,每层的输出值(激活值)保持高斯分布。具体做法:对于归一化后的参数乘以一个rescale系数: 1 n \frac{1}{\sqrt{n}} n 1
    • Kaiming 初始化: xavier初始化的问题在于只适用于线性激活函数,实际上对于深层神经网络来说,线性激活函数是没有价值的,神经系统需要非线性激活函数来构建复杂的非线性系统,比如relu激活函数。kaiming 初始化:在随机归一初始化后的参数诚意一个rescale系数: 2 n \sqrt{\frac{2}{n}} n2 .

1*1卷积核的作用。

  • 对不同通道的feature map进行通道之间的信息整合;
  • 实现升维或者降维。

focal loss

  • focal loss:解决one-stage目标检测中正负样本比例严重失衡的问题。该损失函数降低了大量简单负样本在训练中所占的权重,算是一种困难样本挖掘。
  • 损失函数形式
    在交叉熵损失函数基础上修改的:
    L = { − α ( 1 − y ′ ) γ l o g y ′ , y = 1 , − ( 1 − α ) y ′ γ l o g ( 1 − y ′ ) , y = 0. L=\left\{ \begin{aligned} -\alpha (1-y')^\gamma logy' & , & y=1, \\ -(1-\alpha) y'^\gamma log(1-y') & , & y=0. \end{aligned} \right. L={α(1y)γlogy(1α)yγlog(1y),,y=1,y=0.
    y’是经过softmax的输出,在0-1之间,对于正样本而言,y’越大表示模型更能肯定这是正样本,即这是一个简单样本,所以前面乘上(1-y’)就可以减少它的比例, γ \gamma γ用来控制难易分样本的损失,使网络更关注与困难的、错分的样本, α \alpha α用来平衡正负样本的比例,这个值与样本数量成反比。

人脸识别的loss, 比如center loss,triple loss,shpereface loss,AMS loss,cos loss,arcface loss

  • softmax loss:只考虑分类是否正确,没有考虑类间的距离。
  • center loss:不仅仅要分类对,而且要求类间要有一定的距离,每个类都设置一个中心,让该类的样本尽量向中心靠拢。公式为: L C = − 1 2 ∑ i = 1 m ∥ x i − c y i ∥ 2 L_C=-\frac{1}{2}\sum_{i=1}^m \left \| x_i - c_{y_i} \right \|^2 LC=21i=1mxicyi2, 整体的损失函数为: L = L S + L C L = L_S + L_C L=LS+LC
  • L-softmax:center loss将同一类的向其类中心靠近,使得类内变得紧凑,但它没有类间可分。L-softmax在softmax上加入了角度信息,损失函数变成了:
    在这里插入图片描述
    在这里插入图片描述
  • sphereface:在L-softmax上做修改,将权重归一化为1,另外将偏置bias=0,损失函数为:
    在这里插入图片描述
  • Cosface:在sphereface的基础上,将x也归一化,在余弦空间中最大化分类界限,具体公式为:
    在这里插入图片描述
    -ArcFace:直接在角度空间中最大化分类界限,公式为:
    在这里插入图片描述
    分类的边界如下:
    在这里插入图片描述

机器学习

逻辑回归,用到的loss,为什么交叉熵比MSE好。

SVM的介绍,核函数

  • 对于数据D={(x1,y1),(x2,y2),…,(xm,ym)},都有yi=1/-1,找到一个超平面,使得他们尽可能分开。
  • 超平面WX+b=0
  • 线性核函数的基础知识。核函数:不需要将样本直接映射到高维空间,而可以将样本映射到高维空间;为什么高斯核函数可以实现无穷维的映射:用到泰勒展开

决策树。(如何选择特征:ID3, C4.5, CART)剪枝

  • 随机森林。bagging的思想:有放回的抽取样本。
  • 提升树,梯度提升GBDT的介绍。(重点,很多企业用到的核心算法都是提升树类的衍生算法,比如XGBoost,Lightgbm)boosting的思想
  • 在机器学习中,为什么需要对数值类型的特征做归一化? 不同特征之间的量级不一样,比如说一个人的身高和体重对健康的影响,身高在1.6-1.8m的数值内体重在50-100kg内,分析出来的结果回倾向于数值差别大的体重特征。因此需要对特征进行归一化,使个指标处于同一数值量级。常用的归一化有线性函数归一化,零均值归一化

模型评估(百面机器学习)

一般评估模型会用到准确率,精确率,召回率,均方根误差。

  • 准确率的局限性。
    准确率的公式: a c c = n c o r r e c t n t o t a l acc = \frac{n_{correct}}{n_{total}} acc=ntotalncorrect.
    如果正负样本分布及其不均匀,比如说100个样本中99个正样本,1个负样本。假设所有的样本都预测为正样本,准确率也有99%。
  • 精确率与召回率的权衡。
    精确率:预测为正的样本中有多少是正真的正样本,预测为正有两种可能:把正类预测为正类(TP);把负类预测为正类(FP)。 P = T P T P + F P P = \frac{TP}{TP+FP} P=TP+FPTP.
    召回率:分类正确的正样本占真正的正样本个数的比例,也有两种可能:把原来的正类预测为正类(TP),一种是把原来的正类预测为负类(FN)。 P = T P T P + F N P = \frac{TP}{TP+FN} P=TP+FNTP.
    我们希望P和R同时越高越好,但是这两者在某些情况是矛盾的。比如极端情况下,我们只所搜出一个结果,而且是正确的,那么P=100%,但是recall就很低;而如果把所有结果都返回,那么recall=100%,但是P就很低。所以可以用P-R曲线来很衡量。
    P-R曲线:横坐标是召回率,纵坐标是精确率。
    F1 score: F 1 = 2 ∗ P ∗ R P + R F1 = \frac{2*P*R}{P+R} F1=P+R2PR.
  • ROC曲线(受试者工作特征曲线)
    横坐标:假阳性率(False Positive Rate,FPR);纵坐标:真阳性率TPR。
    F P R = F P N FPR = \frac{FP}{N} FPR=NFP
    T P R = T P P TPR = \frac{TP}{P} TPR=PTP
    如何绘制:通过不断移动分类器的”截断点“来生成曲线上的一组关键点。举例:
    在二分类问题中,模型的输出一般都是预测样本为正的概率。假设测试集有20个样本,下面表1是模型的输出结果。样本按照预测概率从高到底排序,在输出最终的正例、负例之前,需要指定一个阈值,预测概率大于该阈值的样本会被判为正例,小于该阈值的样本则被判为负例。比如,指定阈值为0.9,那么只有第一个样本会被预测为正例,其余全部都是负例。截断点就是区分正负预测结果的阈值。
    通过动态调整截断点,从最高的得分开始,逐渐调整到最低得分,每一个截断点都会对应一个FPR和TPR,在ROC图上绘制出每个截断点对应的位置,再连接所有点就得到最终的ROC曲线。
    在这里插入图片描述
    就本例来说,当截断点选择为正无穷时,模型把全部样本预测为负负,那么FP和TP必为0,FPR和TPR都为0,因此曲线第一个点的坐标就是(0,0),当截断点调整为0.9时,模型预测1号样本为正样本,并且该样本确实为正样本,TP=1,20个样本中,所有整理数量为P=10,则TPR=1/10,这里FP=0,FPR=0/10,对应ROC曲线上的点(0,0.1).依次调整截断点,直到画出全部的关键点,再连接关键点得到最终的ROC曲线。
    在这里插入图片描述
  • 计算AUC
    AUC指的是ROC曲线下的面积大小,该值能量化地反映基于ROC曲线衡量出的模型性能。计算AUC值只需沿着ROC横轴做积分就可以了AUC越大,说明分类器越可能把真正的正样本排在前面,分类性能越好。

深度学习相关论文的介绍

分类网络

  • CVPR2020文章resnest介绍

  • vgg网络

  • inception 系列的文章

  • resnet网络,解决了什么问题

  • 轻量级的网络,mobilenet系列,shufflenet系列。
    mobilenet V1:将普通的卷积核换成了Depthwise+pointwise convolution,大大减少计算量。Depthwise的计算量:C * H * W * 3 * 3,Pointwise的计算量:C * K * H * W
    普通卷积的计算量:C * H * W * K * 3 * 3
    ShuffleNet V1:在resnet深层网络(具有Bottleneck)的基础上,将1 * 1普通卷积换成了组卷积网络,3 * 3的普通卷积换成了depthwise卷积,同时加入了channel shuffle模块。
    在这里插入图片描述
    channel shuffle的作用:shufflenet 的本质是为了将卷积运算限制在每个group内,这样模型的计算取得了显著下降。但是会导致模型的信息流限制在各个group内,组与组之间没有信息交换,影响了模型的表示能力,因此引入了组间信息交换的机制,即channel shuffle的操作。
    在这里插入图片描述
    Mobilenet v2:主要解决V1在训练过程中非常容易特征退化的问题,另外,v1中并没有加入复用特征。
    解决思路:继续使用Mobilenet V1的Separable convolution,即depthwise+pointwise;
    引入了特征复用结构;
    采用Inverted residual block结构:先使用pointwise conv对feature map进行升维,再在升维后的特征后饥接Relu,减少Relu对特征的破坏。
    在这里插入图片描述

  • SENet,SKNet 注重通道。
    SENet:给定一个输入 x,其特征通道数为 c_1,通过一系列卷积等一般变换后得到一个特征通道数为 c_2 的特征。与传统的 CNN 不一样的是,接下来通过三个操作来重标定前面得到的特征。
    首先是 Squeeze 操作,顺着空间维度来进行特征压缩,将每个二维的特征通道变成一个实数,这个实数某种程度上具有全局的感受野,并且输出的维度和输入的特征通道数相匹配。它表征着在特征通道上响应的全局分布,而且使得靠近输入的层也可以获得全局的感受野,这一点在很多任务中都是非常有用的。
    其次是 Excitation 操作,它是一个类似于循环神经网络中门的机制。通过参数 w 来为每个特征通道生成权重,其中参数 w 被学习用来显式地建模特征通道间的相关性。
    最后是一个 Reweight 的操作,将 Excitation 的输出的权重看做是进过特征选择后的每个特征通道的重要性,然后通过乘法逐通道加权到先前的特征上,完成在通道维度上的对原始特征的重标定。
    在这里插入图片描述
    SKNet:
    SKNet主要分成3个部分,Split、Fuse和Select。
    Split部分:对于输入x,会让其分别经过两个不同卷积核大小的卷积块。
    Fuse:操作和SENet一样,需要注意的是输出的两个矩阵a和b,其中矩阵b为冗余矩阵,如图两个分支的情况下b=1-a。
    Select:就是SENet中的scale部分,最终的结果V = U1 * a + U2 * b,其中a+b=1.
    在这里插入图片描述

  • Resnest网络的介绍。

检测网络

  • 人脸检测网络MTCNN
    详细讲解:https://zhuanlan.zhihu.com/p/58825924

  • RCNN
    步骤:候选区域提取、CNN特征提取、分类与边界回归。
    缺点:需要实现提取多个候选区域的图像、每个区域候选框都需要进入CNN网络计算,进而会导致过多重复的特征提取。

  • Fast RCNN
    和RCNN相比,有了以下三方面的提升:
    1、测试时的速度得到了提升。RCNN算法与图像内的大量候选帧重叠,导致特征提取操作中大量冗余,fast RCNN很好解决了这一问题。
    2、训练时的速度得到了提升。
    3、训练所需的空间大。RCNN中分类器和回归其需要大量特征作为训练样本,而Fast RCNN则不再需要额外储存。
    Fast RCNN的工作流程:
    1、选择性搜索Selective Search(SS)在图片中获得大概2K个候选框。这一步的方法和RCNN一样,使用的方法都是Selective Search。
    2、将原图送入到特征提取器提取特征,然后根据SS算法提取到的候选框坐标选出feature map的ROI区域,并让其经过一个ROI Pooling层归一化大小,再送入到网络中去做分类和回归。

  • Fast RCNN (缺点)
    还是需要用传统方法去提取Region proposal。

  • Faster Rcnn 介绍,ROIPooling如何实现,RPN网络介绍,ROIpooling的缺点以及后续的alignpooling
    Faster RCNN在Fast Rcnn的基础上,设计了一个region proposal network来提取region proposal。
    首先,先让原图经过几层卷积层提取较高维度的feature map,然后:
    送入到RPN网络中,RPN网络两条分支:1、判断是前景还是背景,2、粗略回归出框的坐标信息。
    最后将RPN得到的region proposal对应到原始的feature map中,提取ROI输入到分类回归器中,这一步和fast rcnn一致

  • SSD,介绍原理,多尺度特征提取。NMS如何实现,缺点。
    Faeter RCNN利用了RPN网络取代了传统的SS算法,实现了end-end的训练,但是,在训练的时候需要分两步训。
    SSD:one-stage,速度比faster-rcnn快。
    原理:在多层feature map上都设置了prior box。。。。
    连接: https://zhuanlan.zhihu.com/p/33544892

  • ROI pooling 和ROI Align
    ROI pooling 和ROI align都是用来使生成的候选框region proposal映射产生固定大小的feature map。
    ROI pooling:经过两次量化,即将浮点数取整,偏差比较大。
    ROI Align:Mask RCNN中提出的,不需要经过量化,采用双线性插值的方法。
    https://zhuanlan.zhihu.com/p/85035860

  • 小目标如何处理,现在的处理方式。(多张图片合成一张大图,图片中的目标抠下mask复制多几个)

  • focal loss

GAN

  • pix2pix,loss
    数据类型是pair形式的;
    生成网络是unet结构的;
    判别器为patchgan:把原始图(一对)或者生成图(一对,生成图+输入图)输入到判别器中,判别器没有对整张输入做一个判别,而是将图片分成了多个patch,对每一个patch输出一个结果。
    loss:判别器的loss和L1 loss。
    训练过程:判别器和生成器的参数不是同一时间更新的,首先更新判别器的参数(不更新生成器的参数),将生成对的label设置成False,真实对的label设置成True,让判别器尽可能地分辨出生成图和原图。接着是更新生成器的参数(不更新判别器的参数),将生成对的label设置成True,让生成器尽可能生成和原图逼真的图片。另外还设置了另外一个loss,L1loss,求得原图和生成图之间的像素差距。

  • cyclegan ,loss
    数据类型可以为unpair类型,可完成两个域之间的转换;
    一个循环:A用G_A生成F_B,然后将F_B通过G_B重新生成F_A,判断A和F_A之间的差距。

人脸识别的相关论文

  • shphere face
  • AMS loss
  • cos face
  • arcface
  • 人脸检测相关工作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值