声明:为了方便自己查阅,所以粘贴、集合了其他博主的博客,具体参考原博文。
1. 模型术语
1.1 Backbone
1.1.1 作用
- Backbone,骨干网络,主干网络,大多是指提取特征的网络,其作用就是提取图片中的信息,共后面的网络使用,可以简单将BackBone理解为encode。
- 用别人预训练好的模型作backbone是因为别人的backbone是对任意一幅图像都可以较好的提取特征,backbone的作用就是提取特征,至于后面的分类,什么的就是你自己设计的网络操作了,跟这个backbone没有关系。backbone可以把一幅图像上的特征较好的提取出来,这就是backbone的作用,图像就是要提取特征。复制的博主博客,主要是为了方便自己看
1.1.2 常用Backbone
- 提取能力强:VGG、ResNet(ResNet18,50,100)、ResNeXt、DenseNet、SqueezeNet、Darknet(Darknet19,53)、DetNet、DetNASSpineNet、EfficientNet(EfficientNet-B0/B7)、CSPResNeXt50、CSPDarknet53等。
- 轻量:MobileNet、GhostNet、VoVNet、ShuffleNet、ThunderNet等。
1.2 Neck
1.2.1 作用
- 负责对特征图进行多尺度特征融合,并把这些特征传递给预测层。
- 是放在backbone和head之间的,更好地融合/提取Backbone所给出的feature,然后再交由后续的Head去完成具体任务学习。
1.2.2 常用Neck
-
Additional blocks:SPP、ASPP、RFB、SAM
-
Path-aggregation blocks:FPN、PAN、NAS-FPN、Fully-connected FPN、BiFPN、ASFF、SFAM、NAS-FPN
1.3 Head
1.3.1 作用
- 在目标检测网络中一般叫做检测头。 head是获取网络输出内容的网络,利用之前提取的特征,head利用这些特征,做出预测。
- Head可以理解为是根据Backbone提取出来的特征,从这些特征中预测目标的位置和类别。
- 目标检测除了识别出物体的类别,更重要的是还要对物体进行定位,主要作用是定位和分类。
1.3.2 常用Head
-
Dense Prediction (one-stage):RPN、SSD、YOLO、RetinaNet(anchor based)、CornerNet、CenterNet、MatrixNet、FCOS(anchor free)
-
Sparse Prediction (two-stage):Faster R-CNN、R-FCN、Mask RCNN (anchor based)、RepPoints(anchor free)
1.4 bottleneck
瓶颈的意思,通常指的是网网络输入的数据维度和输出的维度不同,输出的维度比输入的小了许多,就像脖子一样,变细了。经常设置的参数 bottle_num=256,指的是网络输出的数据的维度是256 ,可是输入进来的可能是1024维度的。
2. 其他术语
2.1 GAP
Global Average Pool全局平均池化,就是将某个通道的特征取平均值,经常使用AdaptativeAvgpoold(1),在pytorch中,这个代表自适应性全局平均池化,说人话就是将某个通道的特征取平均值。
2.2 Embedding
深度学习方法都是利用使用线性和非线性转换对复杂的数据进行自动特征抽取,并将特征表示为“向量”(vector),这一过程一般也称为“嵌入”(embedding)
2.3 Warm up
Warm up指的是用一个小的学习率先训练几个epoch,这是因为网络的参数是随机初始化的,一开始就采用较大的学习率容易数值不稳定。
2.4 benchmark(基准)
基准是指作为参考标准的一组算法或数据集,通常是在特定任务或领域中广泛接受的准则。基准的目标是提供一个衡量算法性能的标准,以便其他算法可以与之进行比较。基准可以是一种算法、一个数据集或者是两者的结合。
在深度学习中,基准常常是指在特定任务上性能最好的已知算法或模型。它被用作参照点,其他算法的目标是超过基准并获得更好的性能。基准可以是来自学术界或工业界的最新研究成果,也可以是由专家经验确定的一组经典算法。
2.5 baseline(基线)
基线是指作为对比的一种简单或基本的算法或模型,它被用作对新算法或模型性能的初始评估。基线模型通常是相对简单的模型,用于提供任务的最低性能要求或参考点。基线模型的目标是建立一个可比较的起点,进而比较其他模型的性能提升。
在深度学习中,基线模型可能是一种简单的线性模型、传统机器学习算法或者是较浅的神经网络模型。它们通常具有较低的复杂度和参数量,用来评估新模型的改进效果。
2.6 3X3卷积替代5X5,7X7…
AlexNet中为了增大感受野使用了11 × 11、5 × 5和3 × 3三种卷积核。而VGG16说明了两个3 × 3 的卷积核和一个5 × 5的卷积核感受野相同,从而可以使用2个3 × 3的卷积核替代一个5 × 5的卷积核。同理,可以使用3个3 × 3的卷积核替代一个7 × 7的卷积核,使用4个3 × 3的卷积核替代一个9 × 9的卷积核,依次类推。
所以,在原图像尺寸大于1010像素时,两层33的卷积核要优于一层5*5的卷积核。
2.7 图像像素相乘的作用
- 在图像处理a中,图像乘法运算是一种常见的操作。它可以用来调节图像的亮度、对比度等。
- 图像像素相乘的作用是将图像中每个像素的RGB值分别相乘,得到一个新的像素值。这个操作可以用于图像增强和滤波等应用中。例如,在图像增强中,可以通过将每个像素的RGB值相乘来增强图像的对比度和颜色饱和度。在滤波中,可以使用像素相乘来实现锐化和边缘检测等操作。
- 像素值溢出问题
当两张图片中的像素值相乘时,有可能会导致像素值溢出,这时候我们需要进行像素值归一化处理Q。像素值归一化可以
通过将每个像素值除以255来实现。
2.8 浅层特征、深层特征
卷积神经网络之“浅层特征”与“深层特征”
低级特征与高级特征、全局特征与局部特征、浅层特征与深层特征
2.8.1 图像浅层特征
-
浅层特征:浅层网络提取的特征和输入比较近,包含更多的像素点的信息,一些细粒度的信息是图像的一些颜色、纹理、边缘、棱角信息。
-
原理:浅层网络感受野较小,感受野重叠区域也较小,所以保证网络捕获更多细节。
-
优缺点:分辨率更高,包含更多位置、细节信息,但是由于经过的卷积更少,其语义性更低,噪声更多。
2.8.2 图像深层特征
1.高层信息:深层网络提取的特征离输出较近,一些粗粒度的信息,包含是更抽象的信息,即语义信息
2.原理:感受野增加,感受野之间重叠区域增加,图像信息进行压缩,获取的是图像整体性的一些信息
3.优缺点:具有更强的语义信息,但是分辨率很低,对细节的感知能力较差。
总结:
-
浅层特征图更倾向于表达例如点、线、边缘轮廓等基本特征单元;蕴含的空间信息更多。
-
深层特征图更倾向于表达图像的语义信息;蕴含的空间信息更少,语义特征更多。
2.8.3 UNet 编解码和特征信息
医学影像的数据较少,获取难度大,数据量可能只有几百甚至不到100,因此如果使用大型的网络例如DeepLabv3+等模型,很容易过拟合。大型网络的优点是更强的图像表述能力,而较为简单、数量少的医学影像并没有那么多的内容需要表述,因此也有人发现在小数量级中,分割的SOTA模型与轻量的Unet并没有神什么优势。参考U-net(2015)
UNet是一种用于图像分割的卷积神经网络,其结构由对称的编码器和解码器组成。
- 编码器由多个卷积层和池化层组成。池化层则用于降低特征图的空间分辨率,同时保留重要信息。 卷积层用于提取图像的特征,通过滑动卷积核在图像上提取局部特征。编码器的每个卷积块都会将特征图的通道数加倍,同时将特征图的空间分辨率减半。
- 解码器由多个反卷积层和跳跃连接组成,用于将编码器提取的特征映射到原始图像上。下采样路径每个阶段包含两次卷积和一次池化(卷积通道扩增+卷积等通道特征提取+池化下采样),上采样路径每个阶段包含一次反卷积和两次卷积(反卷积上采样并收缩通道+卷积通道收缩+卷积等通道特征提取)。在UNet中,浅层特征和深层特征分别来自编码器和解码器的不同层。
具体来说,UNet的浅层特征来自编码器的浅层卷积层和池化层,这些层通常用于提取图像的低级特征,如边缘和纹理等。深层特征则来自解码器的反卷积层和深层卷积层,这些层通常用于提取图像的高级特征,如形状和语义信息等。反卷积层用于将特征图的空间分辨率恢复到原始图像尺寸,同时将特征图的通道数减半。卷积层用于进一步提取特征,最终生成分割结果。在解码器中,跳跃连接将浅层特征与深层特征相结合,以便更好地保留图像的细节信息。
因为浅层特征更关注局部信息,深层特征更关注全局信息,感受野更大,U-net四层返回,就抓取的深层特征,而不是浅层特征,但实际上深层特征与浅层特征都很重要,有时候可能两三层就够了。
- 跳跃连接:把浅层(局部)信息与深层(全局)信息叠加起来,能让位置信息损失变得比较小,在开始卷积的时候位置信息偏移较小,越到后面越不准,于是添加浅层信息补充一下,有助于还原下采样带来的信息损失,跟残差有点类似。这种设计可以有效地利用底层的细节信息和高层的语义信息,提高图像分割的准确性。
2.9 标签图的生成
UNet是一种用于图像分割的深度学习模型,UNet分割网络的输入是原始图像,输出是相同大小的标签图像。其主要由编码器和解码器两部分组成。编码器用于提取原始图像的特征,解码器用于将特征映射还原为与原始图像相同大小的标签图像 。下面是UNet生成分割图的每个步骤:
-
编码器:输入原始图像,通过卷积、池化等操作逐渐降低图像的分辨率,提取出图像的特征信息。
-
中间层:在编码器和解码器之间,加入一个中间层,跳跃连接(skip connection)机制,用于连接编码器和解码器,使得解码器可以利用编码器中的低层次特征,从而更好地保留图像的细节信息。
-
解码器:将编码器提取的特征信息进行上采样、卷积等操作,逐渐恢复图像的分辨率,最终生成与输入图像大小相同的分割结果。
-
损失函数:使用交叉熵等损失函数计算生成的分割图与真实标签图之间的差异,通过反向传播更新模型参数。
- 在测试阶段,将待分割的图像输入模型,得到每个像素点属于不同类别的概率分布,根据概率分布生成分割结果。
3.0 自信学习
from cleanlab.pruning import get_noise_indices
# 输入
# s:噪声标签
# psx: n x m 的预测概率概率,通过交叉验证获得
# sorted_index_method:选择是否是噪声数据的策略
ordered_label_errors = get_noise_indices(
s=numpy_array_of_noisy_labels,
psx=numpy_array_of_predicted_probabilities,
sorted_index_method='normalized_margin', # Orders label errors
)
参考:标注数据存在错误怎么办?MIT&Google提出用置信学习找出错误标注(附开源实现)
3.1 通过置换标签的方式给数据集加噪声
噪声添加方法是针对带标签的数据集,通过置换标签类别的方式实现。
- 比如,标签中有0、1两个类别,所加噪声占整个数据集的比例为20%,那么我们会将20%的0标签换成1,将20%的1标签置换成0。
- 多个类别也是一样的,如果3个类别,分别为0、1、2,噪声比例还是20%,如果0标签所占的比例为50%,1标签所占整个数据集的比例为30%,2标签所占整个数据集的比例为20%,整个数据集有100个样本点。那么我们对0标签加噪的样本点个数为100*50%*20%=10个。
参考文献
[1] 图像训练为啥要用backbone
[2] Backbone、Neck 和 Head
[3] 深度学习中backbone、head、neck等术语解释
[4] 深度学习框架-Backbone汇总
[5] benchmark和baseline的联系与区别
[6] 两个3x3卷积核替代一个5x5卷积核
[7] CNN基础知识——卷积(Convolution)、填充(Padding)、步长(Stride)
[8] VGG中2个33卷积核对AlexNet中55卷积核以及感受野计算公式
[9] OpenCV-Python图像乘法运算详解及像素值归一化处理
[10] 超好用的自信学习:1行代码查找标签错误,3行代码学习噪声标签
4134

被折叠的 条评论
为什么被折叠?



