此博客日常更新,记录一些校招八股,快点赞关注。
目录
卷积神经网络CNN中池化层有什么作用?
减小图像尺寸即数据降维,缓解过拟合
残差网络为什么能做到很深层?
为了解决模型层数增加时出现梯度消失或梯度爆炸的问题而出现的。传统的神经网络中,尤其是图像处理方面,往往使用非常多的卷积层、池化层等,每一层都是从前一层提取特征,所以随着层数增加一般会出现退化等问题。残差网络采取跳跃连接的方法避免了深层神经网络带来的一系列问题。
神经网络在反向传播过程中要不断地传播梯度,而当网络层数加深时,梯度在逐层传播过程中会逐渐衰减,导致无法对前面网络层的权重进行有效的调整。残差网络中, 加入了short connections 为梯度带来了一个直接向前面层的传播通道,缓解了梯度的减小问题。
什么是损失函数?
简单的理解就是每一个样本经过模型后会得到一个预测值,然后得到的预测值和真实值的差值就成为损失(当然损失值越小证明模型越是成功),我们知道有许多不同种类的损失函数,这些函数本质上就是计算预测值和真实值的差距的一类型函数,然后经过库(如pytorch,tensorflow等)的封装形成了有具体名字的函数。
在机器学习中,我们知道输入的feature(或称为x)需要通过模型(model)预测出y,此过程称为向前传播(forward pass),而要将预测与真实值的差值减小需要更新模型中的参数,这个过程称为向后传播(backward pass),其中我们损失函数(lossfunction)就基于这两种传播之间,起到一种有点像承上启下的作用,承上指:接収模型的预测值,启下指:计算预测值和真实值的差值,为下面反向传播提供输入数据。
在yolov5中的置信度损失和分类损失用的是二元交叉熵来做的,而定位损失是用的CIOU Loss来做的
yolov5介绍
先说数据增强Mosaic数据增强
利用四张图片,并且按照随机缩放、随机裁剪和随机排布的方式对四张图片进行拼接,每一张图片都有其对应的框,将四张图片拼接之后就获得一张新的图片,同时也获得这张图片对应的框,然后我们将这样一张新的图片传入到神经网络当中去学习,相当于一下子传入四张图片进行学习了。该方法极大地丰富了检测物体的背景,且在标准化BN计算的时候一下子计算四张图片的数据,所以本身对batch size不是很依赖。
focus要说
具体操作是在一张图片中每隔一个像素拿到一个值,类似于邻近下采样
骨干网路部分主要采用的是:Focus结构、CSP结构。其中 Focus 结构在YOLOv1-YOLOv4中没有引入,作者将 Focus 结构引入了YOLOv5,用于直接处理输入的图片。Focus重要的是切片操作,如下图所示,4x4x3的图像切片后变成2x2x12的特征图。
什么是超参数?
这是另一个经常被问到的深度学习面试问题。超参数在机器学习的上下文中,超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据。因为一般情况下我们将可以根据模型自身的算法,通过数据迭代自动学习出的变量称为参数,而超参数的设置可以影响到这些参数是如何训练,所以称其为超参数。
当学习率太低时,模型的训练将进展得非常缓慢,因为只对权重进行最小的更新。它需要多次更新才能达到最小值。如果非常小可能最终的梯度可能不会跳出局部最小值,导致训练的结果并不是最优解。
如果学习率设置得太高,由于权重的急剧更新,这将导致损失函数出现不希望的发散行为。可能导致模型无法收敛,甚至发散(网络无法训练)。
Dropout是一种随机删除网络中隐藏和可见单元的技术,可以以防止数据过拟合(通常删除20%内的节点)。它使收敛网络所需的迭代次数增加。
BN是一种通过对每一层的输入进行规范化,变为平均为0,标准差为1的正态分布,从而提高神经网络性能和稳定性的技术。
CNN的“池化”是什么?它是如何运作的?
池化用于减少CNN的空间维度。它执行下采样操作来降低维数,并通过在输入矩阵上滑动一个过滤器矩阵来创建一个汇集的特征映射。
基础问答:
常见的激活函数:
常见的backbone
图像拼接的关键理论
小目标处理方法:
1.增加特征提取能力 特征提取的backbone中加入注意力机制,更强地提取特征,我觉得需要先数据增强 对对conv的步幅进行调整
2.锚框的修改 增加检测头,kmeans聚类的自己设计 或者一点点去改锚框尺寸大小以适应你自己的数据集。