M-P神经元模型
MP神经元本身的权重和偏置是固定的,不具备学习的可能
激活函数及其作用
激活函数是神经网络中的一个关键组成部分,它的作用是引入非线性变换,增加模型的表达能力和学习能力
神经元 + 学习 ➡ 感知机
感知机由两层神经元组成,输入层接收外界输入信号后传递给输出层,输出层是M-P神经元
感知机只能解决简单的线性问题,无法解决异或问题
感知机到多层感知机
感知机(Perceptron)是一种最简单的人工神经网络模型,由两层神经元组成:输入层和输出层。它是一种二分类模型,可以用于解决线性可分问题。
感知机的输入层接收输入特征向量,每个特征都有对应的权重。输入特征向量通过加权求和后,经过一个阈值函数(通常是阶跃函数)进行激活,得到输出结果。输出结果可以是两个类别中的一个。
然而,感知机的局限性在于只能解决线性可分问题。对于线性不可分问题,感知机无法正确分类。为了解决这个问题,多层感知机(Multilayer Perceptron,MLP)被引入。
多层感知机引入了一个或多个隐藏层,每个隐藏层包含多个神经元。通过引入隐藏层,多层感知机可以学习到更加复杂的非线性关系。隐藏层的神经元接收上一层的输出作为输入,同样进行加权求和和激活函数处理,最终得到输出结果。
多层感知机的训练通常使用反向传播(Backpropagation)算法。反向传播通过计算输出结果与真实标签之间的误差,并将误差反向传播到网络中的每一层,以更新权重和偏置,从而使网络逐渐优化。
多层感知机是一种通用的人工神经网络模型,可以解决各种复杂的问题,包括分类和回归等任务。它是深度学习中最基础和常用的模型之一,被广泛应用于计算机视觉、自然语言处理、语音识别等领域。
神经网络之结构
神经网络通常由输入层、隐藏层和输出层组成,每一层都有特定的作用。
- 输入层(Input Layer):输入层的主要作用是将外部数据传递给神经网络的下一层。数据预处理不属于输入层的任务,它发生在数据准备阶段
- 隐藏层(Hidden Layer): 通过加权求和和激活函数的处理,将上一层的输出作为输入,并生成输出结果
- 输出层(Output Layer):将隐藏层提取的特征映射到最终的输出空间,并生成对应的预测结果或概率分布
总体而言,输入层负责接收外部输入数据,隐藏层负责对输入进行特征提取和变换,输出层负责生成最终的预测结果。这些层之间的连接和神经元的处理通过反向传播算法进行训练和优化,以使神经网络能够适应特定任务并提高性能。
神经网络之深度神经网络(MLP)
增多中间层(隐层)的神经网络就叫做深度神经网络(DNN),可以认为深度学习是神经网络的一个发展
隐藏层的神经元数目和层数的选择是网络设计的关键,不同的结构和深度可以影响网络的性能和学习能力
传统卷积(convolution)
卷积数学公式:
s
(
t
)
=
∫
x
(
a
)
w
(
t
−
a
)
d
a
等价表示
→
s
(
t
)
=
(
x
∗
w
)
(
t
)
\scriptsize{ s(t)=\int{x(a)w(t-a)}da \underrightarrow{\quad等价表示\quad} s(t)=(x*w)(t) }
s(t)=∫x(a)w(t−a)da等价表示s(t)=(x∗w)(t)
离散化:
s
(
t
)
=
(
x
∗
w
)
(
t
)
=
∑
x
→
−
∞
∞
x
(
a
)
w
(
t
−
a
)
\scriptsize{ s(t)=(x*w)(t)=\sum_{x\to -\infin}^{\infin}x(a) w(t-a)}
s(t)=(x∗w)(t)=∑x→−∞∞x(a)w(t−a)
x
:
输入
i
n
p
u
t
w
:
核函数
s
:
特征图
(
f
e
a
t
u
r
e
m
a
p
)
\scriptsize{ x:输入 input \quad\quad w:核函数 \quad\quad s:特征图(feature\ map) }
x:输入inputw:核函数s:特征图(feature map)
多维化:
s
(
i
,
j
)
=
(
I
⋅
K
)
(
i
,
j
)
=
∑
m
∑
n
I
(
m
,
n
)
K
(
i
−
m
,
j
−
n
)
\scriptsize{ s(i,j)=(I\cdot K)(i , j)=\sum_{m}\sum_{n} I(m,n)K(i-m,j-n) }
s(i,j)=(I⋅K)(i,j)=∑m∑nI(m,n)K(i−m,j−n)
最终形式:
s
(
i
,
j
)
=
(
I
⋅
K
)
(
i
,
j
)
=
∑
m
∑
n
I
(
i
+
m
,
j
+
n
)
K
(
m
,
n
)
\scriptsize{ s(i,j)=(I \cdot K)(i,j) = \sum_{m}\sum_{n} I(i+m,j+n)K(m,n) }
s(i,j)=(I⋅K)(i,j)=∑m∑nI(i+m,j+n)K(m,n)
神经网络 → CNN
传统神经网络:用矩阵乘法建立输入与输出的连接关系
卷积神经网络(CNN):稀疏交互、参数共享的普通神经网络。
对输入作卷积的目的是提取特征
CNN属性和参数
属性
padding(pads) 加指定圈数的0
auto_pad 自动补零
strides 步长,用于降采样
kernel 权重w0、w1,也叫滤波器、filter、卷积核
kernel_shape:(KH, KW)
每个kernel对应一个feature_map(特征映射)
channel 特征图的维度或通道数
参数
Input(X): B、IC、H、W
(Bias、InputChannel、Height、Width)
(偏置、输入通道数、图片的长和宽)
注:bias 维度不会发生改变
Weight(w):OC、IC、KH、KW
(OutputChannel、InputChannel、KernelHeight、KernelWeight)
(输出通道数、输入通道数、卷积核大小)
重点
Output(Y):N、OC、H-KH+1、W-KW+1
(图像个数、输出通道数、特征图大小)
特征图feature_map是卷积操作的输出
针对代码中的参数
Activation:激活函数、权重
A:N C H W 图像个数、通道数(维度)、长和宽
W:O I KH KW
输出通道数、输入通道数、卷积核大小
组卷积和深度可分离卷积
组卷积 Group Conv
IC = IC / 组 OC = OC / 组
分组计算,然后在输出通道数(OC)的维度拼接起来
在组卷积中,各个组之间是相互独立的。组卷积是一种特殊的卷积操作,它将输入张量分成多个组,然后对每个组进行卷积操作,最后将各个组的结果拼接在一起形成输出张量。在组卷积中,每个组之间的卷积操作是独立的,即每个组的卷积核只与该组内的输入数据进行卷积运算,并不会与其他组的数据有任何交互作用。因此,各个组之间是相互独立的。
组卷积可以通过将输入通道分组来限制不同组之间的信息交流。这对于处理具有不同属性或语义的特征非常有用。例如,在一些视觉任务中,不同的通道可以分别表示颜色信息和形状信息,通过组卷积可以使得颜色和形状的特征在不同的组内进行交互,从而更好地捕捉图像的语义信息。
为了避免弱的特征被强的特征完全覆盖
组卷积通过参数共享和对特征表示能力的限制,可以提高计算效率和特征表达的能力,从而在图像处理和计算机视觉任务中取得更好的性能
深度可分离卷积 Depth Separatable Conv
最大程度地节约了参数量的同时,还能保持精度
将每个IC构成一个group
:::info
input: 16 × 32 × 112 × 112
weight: 64 × 1 × 3 × 3
output: 16×64× 112 × 112
:::
深度可分离卷积不同通道之间是完全隔离的
解决:使用一个 kernel (OC、IC、1、1) 作用于 feature_map
相当于做了一次通道融合
深度可分离卷积(depthwise separable convolution)是一种轻量级的卷积神经网络结构,它将标准的卷积操作分解成两个步骤:深度卷积(deep-wise conv)和逐点卷积(point-wise conv)。在深度可分离卷积中,首先对输入的每个通道进行独立的卷积操作,然后将不同通道的卷积结果进行逐点卷积操作,从而得到最终的输出特征图。相比于标准的卷积操作,深度可分离卷积具有以下优点:
- 参数量更小:深度可分离卷积将卷积操作分解成两个较小的操作,从而大幅减少了需要学习的参数量,减小了模型的大小和计算量。
- 计算量更小:由于深度可分离卷积所需的参数量更少,因此计算量也相应减小,模型的推理速度更快。
- 更好的泛化能力:深度可分离卷积能够更好地保留输入数据的空间结构信息,从而提高模型的泛化能力。
深度可分离卷积在许多轻量级的卷积神经网络中得到了广泛应用,如MobileNet、Xception等。
对比图
深度可分离卷积的前半部分可以看作分组为1的分组卷积,可以对弱的特征做增强
深度可分离卷积的后半部分相当于做了一次通道融合,目的是站在全局的角度对特征进行提取
Deconvolution / Transpose Convolution(反卷积/转置卷积)
常用于上采样过程中,语义分割领域中
# 定义反卷积层
deconv = nn.ConvTranspose2d(in_channels, out_channels, kernel_size=4, stride=2, padding=1, output_padding=0)
输出大小 = (输入大小 - 1) * 步长 - 2 * 填充 + 输出填充 + 卷积核大小
反卷积通常也被称为转置卷积(transposed convolution),有时也称为分数步长卷积(fractionally strided convolution)或上采样卷积(upsampling convolution)。
反卷积和卷积在数学上是相关的操作,它们可以通过卷积定理相互转化。在卷积操作中,卷积核滑动窗口在输入上进行卷积运算,得到输出特征图,而在反卷积操作中,卷积核滑动窗口在输出特征图上进行卷积运算,得到输入特征图。
因此,反卷积的操作可以看作是卷积操作的逆操作,它可以将较小的特征图转换为较大的特征图,实现上采样的效果。在深度学习中,反卷积通常被用于实现图像分割、图像重建等任务。
反卷积通过在输入特征图之间插入零值或填充值,接着使用转置卷积核进行运算,来实现特征图的上采样。它的目标是尽量恢复原始特征图中的细节和空间分布,使得高级特征能够更准确地对应到输入图像的像素级别。
对卷积核的转置操作不仅改变了卷积核的形状,还改变了信息的传播方向。正常的卷积操作是从输入特征图到输出特征图的信息传递,而转置卷积则是从输出特征图到输入特征图的信息传递,实现了上采样的效果。
A B = C B T A B = B T C AB=C \\ B^TAB = B^TC AB=CBTAB=BTC利用了矩阵相似理论
反卷积的主要目的是将低分辨率的特征图恢复为高分辨率的特征图。
Dilated/Atrous Convolution 空洞卷积
空洞卷积(dilated convolution),也称为扩张卷积(dilated convolution)或膨胀卷积(dilated convolution),是一种卷积神经网络中常用的卷积操作,它可以在保持卷积核大小不变的情况下增加感受野大小,从而提高了模型的性能和效果。
在标准的卷积操作中,卷积核滑动窗口在输入特征图上进行卷积操作,得到输出特征图。而在空洞卷积中,卷积核中间插入了空洞(即卷积核中间有一些像素点是被跳过的),这些空洞可以增大卷积核的有效感受野大小,从而使得每个输出像素点能够“看到”更多的输入像素点。空洞卷积的感受野大小可以通过卷积核大小和空洞大小来控制,增加空洞大小可以进一步增大感受野大小。
增大感受野可以帮助网络更好地理解输入数据的上下文信息、提取大尺度特征、减少信息损失,并增强对细粒度特征的识别能力。这些都有助于改善网络的感知能力和任务性能。
空洞卷积的优点在于,它能够在不改变卷积核大小和输入特征图大小的情况下,增加感受野大小,从而提高了模型的性能和效果。空洞卷积在许多计算机视觉任务中得到了广泛的应用,如图像分割、人体姿态估计、语义分割等。
扩张率(dilation rate)定义了 kernel 处理数据时各值的间距
把远一点的特征考虑进去(扩大感受野),如判断一个人是否在抽烟,一个人是否在骑车
反卷积是在 feature_map 间插入 0 , 空洞卷积是在 kernel 里插入 0
Deformable Convolution 可变形卷积
加入 offset,提升了网络几何变换的建模能力,offset通过对特征图进行卷积得到
offset通过特征卷积得到,工程中一般采用插值方式加入offset
可变性卷积(deformable convolution)是一种卷积神经网络中的卷积操作,它可以根据输入数据的不同形状和结构,自适应地调整卷积核的形状和位置,从而更好地适应复杂的输入数据,提高模型的性能和效果。
在标准的卷积操作中,卷积核是固定的,它对于输入特征图的每个像素点都是以相同的方式进行操作的。而在可变性卷积中,卷积核不再是固定的,而是可以根据输入数据的形状和结构进行调整。具体来说,可变性卷积在每个位置上使用一个可变形的卷积核,该卷积核可以通过学习得到,并根据输入数据的形状和结构自适应地调整形状和位置,从而更好地适应复杂的输入数据。
可变性卷积的优点在于,它能够更好地适应复杂的输入数据,提高模型的性能和效果。可变性卷积在许多计算机视觉任务中得到了广泛的应用,如目标检测、人脸识别、语义分割等。
DConv在YOLOv3、YOLOv4中被引用,在YOLOv5中被替换成了跨阶段连接(Cross-Stage Partial Network),是为了简化网络结构、提高计算效率,并减少模型的参数量
3D Convolution 3D卷积(*)
针对kernel多加了一个维度,可用于处理视频流
Sub Pixel Convolution 亚像素卷积(*)
把不同通道上的像素展平到同一个维度上(reshape),图像变大了,属于上采样
常用于CV的超分(超分辨率),提高了图片的分辨率
亚像素卷积(Subpixel Convolution)和反卷积(Deconvolution)之间存在一定的关系。
反卷积是一种常用的操作,用于将低分辨率的特征图恢复到高分辨率。在卷积神经网络中,反卷积通常被用作上采样的一种方式,通过增加特征图的尺寸来实现图像或特征的放大。
亚像素卷积是一种特殊的反卷积操作,它在放大特征图的同时还能增加通道数。亚像素卷积通常用于图像超分辨率重建任务,旨在将低分辨率图像恢复为高分辨率图像。
亚像素卷积的实现方式是先进行标准的反卷积操作,然后通过重新排列特征图的通道来增加通道数。具体地,将反卷积得到的特征图进行通道重排,将原来的低分辨率通道划分为多个子通道,然后将这些子通道按照一定顺序组合成高分辨率的特征图。
亚像素卷积的主要优势在于,它不仅能够增加特征图的尺寸,还能够增加通道数。这有助于更好地保留和恢复图像的细节信息,提高图像的质量和清晰度。
总之,亚像素卷积是一种特殊的反卷积操作,用于图像超分辨率重建任务。它在放大特征图的同时增加通道数,以更好地保留和恢复图像的细节信息。