深度学习
概念
DL Deep Learning 机器学习的一个分支
机器学习分类
-
监督学习
-
特点:已知类别数据学习
-
因变量是否连续
-
分类
- 连续
- 房价,体重,天气
-
回归
- 不连续
- 是否患癌症
-
-
算法
-
k-近邻算法 KNN
-
决策树
-
支持向量机 SVM
-
神经网络
-
线性模型
- 线性回归 Linear Regression
- 逻辑归回 Logistic Regression
-
朴素贝叶斯
-
随机森林
-
-
-
非监督学习
-
特点:未知类别数据学习
-
算法
- k-means 聚类
- 分层聚类算法
- 最大期望算法
- 主成分分析 PCA
-
-
半监督学习
- 同时使用已知和未知数据学习
神经网络
-
神经元线性模型
- y = wx + b
-
BP神经网络工作过程
-
前向传播
-
把神经网络从输入到输出计算过程,并计算预测值与真实值之间的差值
-
流程
-
神经网络节点
- 神经元模型,线性变化,一次线性变化为一层网络
-
去线性化
-
使用非线性函数(激活函数),输入为神经网络节点输出
-
常见激活函数
-
ReLU
-
函数表达式
-
-
-
-
-
-
relu(x)={x,x>00,其他relu(x)=\begin{cases} x,& \text{x>0}\\ 0,& \text{其他} \end{cases} relu(x)={x,0,x>0其他
- 导数-
ddxrelu(x)={1,x>00,其他\frac{d}{dx}relu(x)=\begin{cases} 1,& \text{x>0}\\ 0,& \text{其他} \end{cases} dxdrelu(x)={1,0,x>0其他
- 问题- x 为负数时出现梯度消失- Sigmoid- 函数表达式-
sigmoid(x)=11+e−xsigmoid(x)=\frac{1}{1+e^{-x}} sigmoid(x)=1+e−x1
- 导数-
ddxσ(x)=σ(1−σ),σ(x)=sigmoid(x)\frac{d}{dx}\sigma(x)=\sigma (1-\sigma),\sigma(x)=sigmoid(x) dxdσ(x)=σ(1−σ),σ(x)=sigmoid(x)
- 问题- 输入过大或过小,容易出现梯度消失问题- 值域- 值域区间为[0,1],一般为2分类输出层激活函数- Tanh- 函数表达式-
tanh(x)=ex−e−xex+e−xtanh(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}} tanh(x)=ex+e−xex−e−x
- 导数-
ddxtanh(x)=1−tanh2(x)\frac{d}{dx}tanh(x)=1-tanh^2(x) dxdtanh(x)=1−tanh2(x)
- 值域- 值域区间为[-1,-1]- softmax-
yj=ezj∑j=1kezj(j=1,2,…,k)y_j = \frac{e^{z_j}}{\sum^k_{j=1}e^{z_j}}(j=1,2,\ldots,k) yj=∑j=1kezjezj(j=1,2,…,k)
- 值域区间为[0,1],和为1,一般为多分类输出层激活函数
- Leaky ReLU- 函数表达式-
leakyrelu(x)={x,x≥0px,x< 0leakyrelu(x)=\begin{cases} x,& x\geq 0\\ px,& x\text{ < } 0 \end{cases} leakyrelu(x)={x,px,x≥0x < 0
- 导数-
ddxleakyrelu(x)={1,x≥0p,x< 0\frac{d}{dx}leakyrelu(x)=\begin{cases} 1,& x\geq0\\ p,& x\text{ < } 0 \end{cases} dxdleakyrelu(x)={1,p,x≥0x < 0
- 一般表达式-
h=relu(Wx+b)h=relu(\pmb{W}x+\pmb{b}) h=relu(Wx+b)
- 损失函数- 均方误差 MES-
MES=12N∑i=1N(yi−yi^)2MES = \frac{1}{2N}\sum_{i=1}^N(y_i-\hat{y_i})^2 MES=2N1i=1∑N(yi−yi^)2
- 交叉熵损失- 反向传播- 模型优化- 降低误差,更新权值- 算法- 随机梯度下降 SGD- 核心思想损失函数求导- 超参数 学习率- 权值更新- 链式求导法则,求权值偏导
-
全连接网络
-
特点
- 每一个输出节点与全部的输入节点相连接
-
输入矩阵X
- X的shape为[b,din] b为样本数量,din为输入节点数
-
权重矩阵W
- W的shape为[din,dout],dout为输出节点数
-
输出矩阵O
- O的shape为[b,dout]
-
偏置矩阵b
- b的shape为[dout]
-
-
卷积神经网络
-
卷积层
-
卷积运算
-
局部相关性
- 每个像素点和周围的像素点的关联性更大
-
权值共享
- 使用同一个权值矩阵
-
感受野
- 视觉皮层中的神经元并非与前一层的所有神经元相连,而只是感受一片区域内的视觉信号,并只对局部区域的视觉刺激进行反应。
-
权值相乘累加
- 感受野与权值矩阵相乘累加得到对应位置的值
-
卷积操作可以获得图像像素之间的特征相关性
-
-
卷积核 kernel
- 权值矩阵
-
步长 stride
-
感受野窗口每次移动的长度单位
- 对于二维卷积,分别沿X(向右)反向和Y(向下)方向移动长度
-
减少感受野密度
-
-
填充 padding
- 保持与输入尺寸相同
-
输出尺寸计算
-
-
h新=h+2∗ph−ks+1h_新=\frac{h+2*p_h-k}{s}+1 h新=sh+2∗ph−k+1
-
w新=w+2∗pw−ks+1w_新=\frac{w+2*p_w-k}{s}+1 w新=sw+2∗pw−k+1
- 一个卷积核只能提取一种特征- 一般深层卷积神经网络,按照特征图高宽逐渐减少,通道数逐渐增大的经验法则
- 池化层- 作用- 保留主要特征的同时减少参数和计算量,防止过拟合。- 向下采样- 分类- 全局平均/最大池化池化- 获取全局上下文关系- 不以窗口的形式取均值,而是以feature map为单位进行均值化。即一个feature map输出一个值。- 平均池化- 保留背景信息- 取窗口内的平均值作为结果- 最大池化- 提取特征纹理- max pooling的前向传播是把patch中最大的值传递给后一层,而其他像素的值直接被舍弃掉。- 上池化层- 上采样是指将图像上采样到更高分辨率(resolution),是一种把低分辨率图像采样成高分辨率图像的技术手段。- 方法- 最邻近元法- 双线性内插法- 三次内插法- BatchNorm层- 批标准化BN- 解决梯度消失和梯度爆炸的问题- 作用- 对数据进行规范化,降低样本之间的差异- 使激活函数的输入落在梯度较大的区域,一个很小的输入差异也会带来较大的梯度差异,可以有效的避免梯度消失,加快网络的收敛- 降低了层与层之间的依赖关系,不加BN的时候当前层会直接接收上一层的输出,而加了BN之后当前层接收的是一些规范化的数据,因此使得模型参数更容易训练,同时降低了层与层之间的依赖关系- BN层的可学习参数- scale(γ),即缩放尺度,用于乘以输入进行缩放。- offset(β),即偏移量,用于和输入相加进行偏移。- - 经典卷积网络- LeNet5- 创新点- 使用卷积替代全连接- AlexNet- 创新点- 层数提升至8层- 使用relu ,代替Sigmoid- 引入Dropout层,防止过拟合- VGG系列- 创新点- 层数提升至19层- 使用更小的3*3卷积核- 采用更小的池化层2*2窗口和步长s=2- MLP卷积层- 网络中添加网络- 在卷积之后在添加一个网络- 在MLP网络中,比较常见的是使用一个三层的全连接网络,这等效于普通卷积层后再链接1*1的卷积和relu激活函数- GooLeNet- 创新点- Inception块- 前身 MLP卷积层- 网中网的结构- 增加宽度- 使用1*1 卷积- 不改变图像宽高,只降低通道数- ResNet- 创新点- 残差网络- 使用Skip Connetction(跳跃连接),给深层神经网络添加一种回退到浅层神经网络的机制 shortcut- 在通道轴c维度进行相加操作- 增加深度- f(x) = H(x) +x- DenseNet- 使用Skip Connetction思想- 在通道轴c维度进行拼接操作,聚合特征信息- 稠密连接块 DenseBlock- 卷积层变种- 空洞卷积- 增大感受野- 反卷积- 向上采样- o=(i-1)*s+k-2p- 分离卷积- [卷积神经的发展, 经典网络结构总结](https://blog.csdn.net/qq_23981335/article/details/122538921)- FCN- 全卷积网络- FPNNet- 多尺度预测- - ResNet- 残差网络- 所解决问题- 网络退化问题- ResNet 是通过逐元素相加(element-wise add)和前面特征聚合- - [InceptionNet](https://zhuanlan.zhihu.com/p/480384320)- - InceptionBlock- [SPPNet](https://zhuanlan.zhihu.com/p/79888509)- Spatial Pyramid Pooling Network,多尺度融合- - - [DenseNet](https://zhuanlan.zhihu.com/p/37189203)- 稠密连接网络- DenseNet 则是通过拼接(concatenation)的方式- - [VoVNet](https://zhuanlan.zhihu.com/p/139517885)- One-Shot Aggregation(一次聚合,OSA)- - [CSPNet](https://zhuanlan.zhihu.com/p/116611721)- Cross Stage Partial Network,跨阶段局部网络- - [PANet](https://zhuanlan.zhihu.com/p/373907181)- Path Aggregation Network,路径聚合网络- - ELAN- - 最短最长梯度路径- 高效层聚合网络- PRN - Focus- - [Rep](https://zhuanlan.zhihu.com/p/344324470)- 结构重参数化- 用一个结构的一组参数转换为另一组参数,并用转换得到的参数来参数化(parameterize)另一个结构。只要参数的转换是等价的,这两个结构的替换就是等价的。- - ACNet- [Diverse Branch Block](https://zhuanlan.zhihu.com/p/360939086)- - [SENet](https://zhuanlan.zhihu.com/p/32702350)- - [EfficientNet](https://blog.csdn.net/qq128252/article/details/110953858)- - [Ghost Convolution](https://zhuanlan.zhihu.com/p/368832202)- - 轻量级网络- [MobileNet](https://zhuanlan.zhihu.com/p/394975928)- [ShuffleNet](https://zhuanlan.zhihu.com/p/32304419)- [SqueezeNet](https://zhuanlan.zhihu.com/p/49465950)- 生成对抗网络
损失函数
focal loss 聚焦损失函数
- 解决样本分布不均匀问题
smooth 损失
smoothL1(x)={0.5x2,如果∣x∣<0|x|-0.5,否则smooth_{L1}(x)= \begin{cases} 0.5x^2, &如果|x|<0 \\ \text{|x|-0.5}, &否则 \end{cases} smoothL1(x)={0.5x2,|x|-0.5,如果∣x∣<0否则
MSE 均方误差
MES=12N∑i=1N(yi−yi^)2MES = \frac{1}{2N}\sum_{i=1}^N(y_i-\hat{y_i})^2 MES=2N1i=1∑N(yi−yi^)2
MAE 平均绝对误差
CrossEntropy Loss 交叉熵损失
tripletloss
- 三元损失函数
ranking loss函数:度量学习
iou loss
- iou
- diou
- giou
- ciou
- siou
- wise-iou
优化器
Batch Gradient Descent (BGD)
Stochastic Gradient Descent (SGD)
Mini-Batch Gradient Descent (MBGD)
Momentum
Adam
Adadelta
Adagrad
学习率优化方法 Trick
warm up 学习率预热
余弦退火
数据集增强 Trick
label smooth 标签平滑
- 标签平滑是一种损失函数的修正,可以提高图像分类的准确性。简单的解释是,它将神经网络的训练目标从“1”调整为“1-label smoothing adjustment”,这意味着神经网络被训练得对自己的答案不那么自信。
图像处理
-
单图操作
-
Cutout
- 对CNN 第一层的输入使用剪切方块Mask
-
Random Erasing
- 用随机值或训练集的平均像素值替换图像的区域
-
Hide-and-Seek
- 图像分割成一个由 SxS 图像补丁组成的网格,根据概率设置随机隐藏一些补丁,从而让模型学习整个对象的样子,而不是单独一块,比如不单独依赖动物的脸做识别。
-
GridMask
-
FenceMask(2020)
-
-
FenceMask(2020)
- Mixup
- Cutmix
- KeepAugment(2020)
- Mosaic data augmentation
Trick
多尺度训练
头部解耦
深度学习框架
tensorflow
-
data_format
- 用于设置通道位置
- 'channels_first’为bchw
- 'channels_last’为bhwc
-
input层中 batch_size参数设置batch_size大小
pytorch
目标检测
一阶段
- anchor-base
- anchor-free
边界框描述法
-
bounding box
- 左上角和右下角
- 中心点和长宽
-
锚框
-
anchor
- k-means
-
YOLO系列整理
-
anchor-base
-
yolov3
-
backbone
-
Darknet-53
-
resnet
- CBR(conv+bn+relu)
-
子主题 2
-
-
下采样层
- 无池化,使用步长为2的卷积层下采样
-
-
neck
- FPN
-
head
- 3×3的卷积层和1×1的卷积层
-
loss
- 正负样本分配策略
-
-
yolov4
-
backbone
-
CSPDarknet53
-
csp
- CBM(conv+bn+mish)
-
-
-
neck
- SPP
- PANet
-
head
-
loss
-
-
yolov5
-
yolov7
-
-
anchor-free
- yolox
- yolov6
- yolov8
-
目标检测
-
backbone
- resnet
- csp
-
数据集增强
- mixup
- masaic
- 亮度
- 对比度
- 颜色空间转换
- 缩放
- 旋转
- 镜像
- 空洞填充
-
neck
- FPN
- PANet
- BiFPN
-
head
- 头部解耦
-
loss
- 正负样本分配
-
两阶段
- R-CNN
- SPP-Net
- Fast R-CNN
- Faster R-CNN
语义分割
FCN
- 将CNN的全连接层换成了卷积层
- 加入上采样操作(反卷积)
- 采用跳跃连接
unet
-
unet
- 模型结构完全对称
- 采用编码和解码结构(Encoder-Decoder)
- U-Net式的跳跃连接(skip connection)
-
unet++
- 加入深度监督(Deep Supervision)
- 多尺度跳跃连接
-
unet3+
- 全尺度跳跃连接
deeplab
-
deeplabv1
- 空洞卷积
- CRF
-
deeplabv2
- ASPP
-
deeplabv3
- Multi-Grid
-
deeplabv3+