20220524 深度学习技术点

性能对比:

https://paperswithcode.com/sota/multi-object-tracking-on-mot20-1

1、1*1卷积核作用,降维
1*1卷积核的作用_nefetaria的博客-CSDN博客_1*1卷积核的作用
2、图像语义信息
对图像中语义信息、高层和底层特征的理解_Brucechows的博客-CSDN博客_低层特征和高层特征

FPN解决小物体检测,高语义 

3、select search 

Selective Search (选择搜索)_JNingWei的博客-CSDN博客_search selective

4、卷积核的优势

卷积核的优势-权值共享与局部感知能力_椰楠liu的博客-CSDN博客_卷积层局部感知
5、ROI pooling. 特征池化和roi align的区别

ROI POOLING 介绍 - 善良的大猪猪 - 博客园

https://www.cnblogs.com/xiaochouk/p/16147037.html

8、图像预处理

输入归一化和BN区别

输入归一化,目的是图像均值为0,标准差为1附近,符合正太分布

图像归一化的作用是将图像的像素值范围调整到特定的区间内,通常是[0, 1]或[-1, 1]。这个过程有几个重要的作用和优势:

  1. 消除亮度差异: 不同图像可能具有不同的亮度范围,归一化可以将它们的像素值范围统一,消除了亮度的差异。这对于图像处理和深度学习任务来说非常重要,因为它确保了模型不会过于依赖输入图像的亮度信息。

  2. 避免数值问题: 归一化可以确保图像像素值在合理的范围内,避免了数值上的不稳定性。在计算机视觉任务中,有时会进行像素级的操作,如果像素值过大或过小,可能导致数值溢出或不稳定的情况。

  3. 加速收敛: 归一化可以帮助深度学习模型更快地收敛。模型的权重参数通常初始化为较小的随机值,如果输入数据的范围很大,模型可能需要更长的时间来适应数据。通过将数据归一化到固定范围,可以加速模型的收敛过程。

  4. 增加模型的鲁棒性: 归一化可以提高模型的鲁棒性,使其对输入数据的变化更不敏感。这对于在不同环境下使用模型或处理来自不同来源的图像数据非常有用。

BN作用

浅层参数的微弱变化经过多层线性变换和激活函数后被放大,改变了每一层的输入分布,造成深层网络不断调整适应这些分布变化,最终导致难以训练收敛。

1>缓解梯度小时,加速网络收敛

激活函数的输入数据落在非饱和区。

2>简化调参,网络更稳定

容易调整学习率,不至于网络加深,被放大问题

3>防止过拟合 

将每个batch均值和方差引入网络,增加噪音

transforms.Compose()函数_HealthScience的博客-CSDN博客

输入归一化、批量归一化(BN)与层归一化(LN)_璇焱如柳的博客-CSDN博客_层归一化

深度学习的输入数据集为什么要做均值和标准差的处理(标准化处理)_均值标准差标准化_*Major*的博客-CSDN博客

9、ocr置信度

视频OCR中的文本置信度阈值(threshold)参数有什么作用?_视频分析服务 VAS_常见问题_华为云

10.2022-图像检索资料总结 - 知乎

11、损失函数

label_smooth

标签平滑可以帮助防止过拟合的原因如下:

  1. 减少模型的自信度:标签平滑通过将目标标签从硬性的0和1变为更平滑的值(通常接近0和1,但不等于0和1),使模型的输出更谨慎和保守。这意味着模型不再对训练数据中的噪声或不确定性过于自信。过于自信的模型可能会在训练数据中拟合噪声,从而导致过拟合。

  2. 鼓励模型泛化:标签平滑使模型更难以在训练数据上获得完美的拟合。模型被迫考虑到类别之间的模糊性和不确定性,而不是仅仅记住训练数据的细节。这有助于模型更好地泛化到未见过的数据,因为它已经学会了如何应对不确定性情况。

  3. 降低模型的复杂度:通过使模型的输出更平滑,标签平滑实际上降低了模型的复杂度。复杂模型倾向于过拟合,因为它们可以轻松地适应训练数据的细节,而不是学习到通用的模式。标签平滑可以使模型更容易训练,因为它减少了模型需要捕捉的细节数量。

  4. 使模型更具鲁棒性:标签平滑有助于模型更好地处理训练数据中的噪声或错误。在现实世界中,数据往往会包含错误或噪声,如果模型对这些数据过于敏感,就容易导致过拟合。标签平滑使模型更具鲁棒性,能够更好地处理这些不确定性。

总之,标签平滑通过调整目标标签,使其更平滑和柔和,有助于模型更好地泛化到未见过的数据,减少过拟合的风险,并提高模型的鲁棒性。它使模型更难以在训练数据上获得过度自信的拟合,从而使模型更适合实际应用中的各种情况。标签平滑是一种常见的正则化技术,用于提高深度学习模型的性能和稳定性。

样本不均衡为什么导致精度损失?

物体检测之损失函数:标准交叉熵损失、平衡交叉熵损失、 Focal Loss_灬钰栊灬的博客-CSDN博客_标准交叉熵损失

多标签分类与binary_cross_entropy_with_logits_ab0902cd的博客-CSDN博客_.binary_cross_entropy_with_logits

(188条消息) softmax、softmax损失函数、cross-entropy损失函数_zhaotun123的博客-CSDN博客_softmax损失函数公式

一文看尽深度学习中的15种损失函数 - 知乎 (zhihu.com)

均方误差MSE,真实值-预测值

yolov4项目记录6-损失计算_Swayzzu的博客-CSDN博客_yolov4损失函数计算

如果遇到类别间互斥的情况(只能有一类胜出),“sigmoid+BCE”化为多个二分类问题与“softmax+CE”直接进行分类都是有被用到的方法。 

YOLOv5使用二元交叉熵损失函数计算类别概率和目标置信度得分的损失,各个标签不是互斥的。YOLOv5使用多个独立的逻辑(logistic)分类器替换softmax函数,以计算输入属于特定标签的可能性。在计算分类损失进行训练时,对每个标签使用二元交叉熵损失。这也避免使用softmax函数而降低了计算复杂度。

【人脸识别loss】Arcface loss - 简书 (jianshu.com)

(161条消息) 辨析:方差 和 均方误差 的联系和区别_lutsest的博客-CSDN博客_均方误差和方差的关系

13、人脸识别

一般来说,人脸识别分三步走:

  1. 找人脸:图片中找出含人脸的区域框出来
  2. 对齐人脸:将人脸的眼镜鼻子嘴巴等标出来,以此作为依据对齐人脸
  3. 识别:将对齐的人脸进行识别,判定这张脸究竟是谁

 科普一下人脸识别技术 - 知乎

现有的人脸识别算法 ,检测的人需要是训练过的人吗-CSDN论坛

看懂人脸识别算法技术发展脉络_元宇宙iwemeta的博客-CSDN博客_人脸识别算法发展   

14.TPR\FPR\ROC\AUC人脸/分类评估指标

图像分类评价指标 - 知乎 

ROC曲线 - 知乎

分类指标:准确率、精确率、召回率、F1 score以及ROC、AUC、宏平均、加权平均_accuracy计算公式_TFATS的博客-CSDN博客

深度学习工业质检 | 制造业中 产品表面 缺陷检测 - 知乎

20、样本不均衡

正负样本不均衡:过滤简单样本、正负样本筛选比例

难易样本不均衡:权重惩罚、数据增强

类别间样本不均衡:权重惩罚、数据增强

样本不平衡问题总结_要坚持写博客呀的博客-CSDN博客_样本不均衡会产生什么问题

24、训练和测试区别Pytorch:model.train()和model.eval()用法和区别,以及model.eval()和torch.no_grad()的区别 - 知乎 

27、EfficientnetB0~B7           

【论文解读】一文看懂EfficientnetB0~B7模型所有细节_xiyou_1996的博客-CSDN博客_efficientnet论文解读

   

31、relu和leaky relu

激活函数ReLU与Leaky ReLU的区别 (1)_平民科技的博客-CSDN博客_leakyrelu和relu的区别

34、正则化防止过拟合

深度学习入门——神经网络的正则化_神经网络正则化_yasNing的博客-CSDN博客

过拟合解决方法之L2正则化和Dropout - 知乎

import torch
import torch.nn as nn

# 定义一个简单的神经网络模型
class SimpleNet(nn.Module):
    def __init__(self):
        super(SimpleNet, self).__init__()
        self.fc1 = nn.Linear(128, 64)  # 输入层到隐藏层
        self.relu = nn.ReLU()          # 激活函数
        self.dropout = nn.Dropout(0.5) # Dropout层
        self.fc2 = nn.Linear(64, 10)   # 隐藏层到输出层

    def forward(self, x):
        x = self.fc1(x)
        x = self.relu(x)
        x = self.dropout(x)  # 在需要应用Dropout的地方调用
        x = self.fc2(x)
        return x

# 创建模型实例
model = SimpleNet()

# 在训练过程中使用Dropout
model.train()

# 假设有输入数据x
x = torch.randn(128)

# 前向传播
output = model(x)

# 在测试过程中不使用Dropout,可以通过model.eval()实现
model.eval()

# 测试数据
test_x = torch.randn(128)
test_output = model(test_x)
 

神经网络dropout和L1/L2正则化的区别

神经网络中的Dropout和L1/L2正则化是两种用于防止过拟合的不同技术,它们有一些关键区别:

Dropout

  1. 工作原理:Dropout是一种随机丢弃神经元的输出的技术。在每次训练迭代中,Dropout会随机选择一部分神经元,并将它们的输出值设为零,从而阻止它们对模型的训练产生过于强烈的影响。在每个迭代中,被丢弃的神经元都是随机选择的,因此每次迭代中都会得到不同的子网络。

  2. 作用方式:Dropout通过减少神经元之间的相互依赖性,鼓励网络中的多个神经元来学习相同的特征,从而减少过拟合。

  3. 实现方式:Dropout通常通过在神经网络的训练过程中以一定的概率(通常为0.5)丢弃神经元的输出来实现。

L1正则化和L2正则化

  1. 工作原理:L1正则化和L2正则化是通过在损失函数中引入额外的项来降低模型的复杂性。L1正则化通过对权重参数的绝对值进行惩罚,L2正则化通过对权重参数的平方值进行惩罚。

  2. 作用方式:正则化的目标是使模型的权重保持较小的值,从而降低模型的容量,减少过拟合的风险。L1正则化倾向于产生稀疏的权重,即许多权重变为零,而L2正则化更倾向于使权重分布均匀。

  3. 实现方式:正则化通常通过在损失函数中添加一个正则化项(如L1或L2项)来实现,这个项会对模型的权重参数进行惩罚,鼓励它们保持较小的值。

区别

  1. 原理不同:Dropout通过随机丢弃神经元的输出来减少神经元之间的依赖性,而L1和L2正则化通过对权重参数进行惩罚来降低模型的复杂性。

  2. 作用方式不同:Dropout通过随机性来增加模型的多样性,从而减少过拟合。L1正则化和L2正则化通过控制权重参数的大小来降低模型的容量。

  3. 实现方式不同:Dropout通过在神经网络中添加Dropout层来实现。L1正则化和L2正则化通过在损失函数中添加正则化项来实现。

通常,这两种技术可以结合使用,以进一步提高模型的泛化能力。选择哪种技术或如何组合它们通常取决于具体的问题和数据集。

权重衰减(Weight Decay),也称为L2正则化,是一种常用于训练神经网络的正则化技巧之一。它通过在损失函数中添加一个正则化项,惩罚模型的权重值,有助于防止过拟合的发生。下面解释了为什么权重衰减可以防止过拟合:

  1. 过拟合的问题: 过拟合是指模型在训练数据上表现得很好,但在未见过的测试数据上表现不佳的情况。过拟合通常发生在模型具有过多参数(权重)的情况下,它会学习到训练数据的噪声和细微特征,从而无法泛化到新数据。

  2. 权重衰减的作用: 权重衰减通过在损失函数中添加一个正则化项,惩罚模型的权重值,从而限制权重的大小。具体来说,正则化项是权重的平方和的倍数,它使得优化过程更倾向于找到较小幅度的权重值,而不是让权重过大。

  3. 控制权重的大小: 通过控制权重的大小,权重衰减可以减少模型的复杂性,使其更容易泛化到未见过的数据。这是因为较小的权重值使模型更加平滑,减少了对噪声和异常值的过度拟合。

  4. 防止特征过分依赖: 权重衰减也有助于防止模型过分依赖某些输入特征。如果某些特征对于解决问题不是非常重要,权重衰减可以使相应的权重趋向于零,从而减少对这些特征的依赖。

总之,权重衰减通过惩罚模型的复杂性,控制权重的大小,以及减少对特定特征的过分依赖,有助于防止过拟合。这使得模型更具有泛化能力,能够更好地适应未见过的数据,从而提高了模型的性能。然而,需要注意的是,权重衰减的强度需要根据具体问题和数据来调整,过高的权重衰减可能会导致模型欠拟合。

什么是正则化?

  • 原始输入图像。
  • 绿色部分表示激活的特征单元,b图表示了随机dropout激活单元,但是这样dropout后,网络还会从drouout掉的激活单元附近学习到同样的信息。
  • 绿色部分表示激活的特征单元,c图表示本文的DropBlock,通过dropout掉一部分相邻的整片的区域(比如头和脚),网络就会去注重学习狗的别的部位的特征,来实现正确分类,从而表现出更好的泛化。

    af0d0acc2cb300a146d4daf49bf3fa2c.jpeg

35、空洞卷积的好处
扩大感受野:在deep net中为了增加感受野且降低计算量,总要进行降采样(pooling或s2/conv),这样虽然可以增加感受野,但空间分辨率降低了。为了能不丢失分辨率(持怀疑态度),且仍然扩大感受野,可以使用空洞卷积。这在检测,分割任务中十分有用。一方面感受野大了可以检测分割大目标,另一方面分辨率高了可以精确定位目标。
捕获多尺度上下文信息:空洞卷积有一个参数可以设置dilation rate,具体含义就是在卷积核中填充dilation rate-1个0,因此,当设置不同dilation rate时,感受野就会不一样,也即获取了多尺度信息。多尺度信息在视觉任务中相当重要啊。

36、提高模型泛化率

提升深度学习模型泛化性的方法_Jumi爱笑笑的博客-CSDN博客_如何提高模型的泛化能力

37、提高模型鲁棒性

鲁棒性的含义以及如何提高模型的鲁棒性 - 知乎

38、cpu gpu

https://blog.csdn.net/qq_34405401/article/details/108519823

39、Transformer和cnn的对比

Vision Transformer(ViT)和卷积神经网络(CNN)是用于计算机视觉任务的两种不同的神经网络架构,它们在图像处理领域有一些显著的区别和共同点。下面是它们的主要对比:

1. 图像表示方式:

  • ViT: Vision Transformer基于自注意力机制(注意力机制)来处理图像数据,将图像划分成一组小的块(patches),然后将这些块映射为向量,并通过自注意力机制来捕捉块之间的关系。

  • CNN: 卷积神经网络使用卷积操作来处理图像数据,通过卷积核在不同位置上提取局部特征,并通过池化层来逐渐减小特征图的尺寸。

2. 局部信息和全局信息:

  • ViT: ViT通过全局自注意力机制,可以捕捉图像的全局信息,这使得它在处理全局上下文相关的任务(如图像分类)时表现出色。

  • CNN: CNN通常通过卷积和池化操作来提取局部特征,然后通过多层堆叠来逐渐提取抽象的全局信息。这使得CNN在局部特征提取方面非常强大。

3. 参数量:

  • ViT: Vision Transformer通常具有更多的参数,因为它需要将每个图像块映射为向量,而且全局自注意力机制的计算成本较高。

  • CNN: 卷积神经网络的参数通常较少,因为它主要通过卷积和池化操作来提取特征。

4. 数据效率:

  • ViT: ViT对于大型数据集的性能表现良好,尤其是在处理具有全局相关性的任务时,但对于小型数据集可能需要更多的数据来进行训练。

  • CNN: CNN在小型数据集上也可以表现良好,因为它可以从局部特征中学习。

5. 训练效率:

  • ViT: 训练Vision Transformer可能需要更多的计算资源和时间,因为自注意力机制的计算较为复杂。

  • CNN: CNN通常训练速度较快,因为它的卷积操作可以高效并行化。

6. 任务适用性:

  • ViT: Vision Transformer在图像分类、目标检测和语义分割等任务上表现出色,尤其在处理大尺寸图像和复杂场景时效果显著。

  • CNN: CNN广泛应用于各种计算机视觉任务,包括图像分类、物体检测、图像生成等。

需要注意的是,最近的研究工作也尝试将ViT和CNN结合使用,以充分发挥它们各自的优势。选择哪种网络架构取决于任务需求、数据集规模和计算资源等因素。在实践中,对于特定任务,可能需要进行实验来确定哪种架构更适合。

41、小目标检测解决

这种方法的难点是:需要处理好图片与图片之间的切割线上的目标,因此需要通过一定的重叠区来解决。

在YOLO中进行小目标检测(Detecting Small Objects)是一个具有挑战性的问题,因为小目标通常具有较少的像素信息,容易受到分辨率不足、信息丢失等问题的影响。以下是一些优化方法,可用于改善YOLO模型在小目标上的性能:

  1. 增加输入分辨率

    • 增加模型的输入分辨率可以提高小目标的检测精度。通过提高输入图像的分辨率,可以更容易地捕捉到小目标的细节。但需要注意,增加分辨率也会增加计算复杂性,可能需要更多的计算资源。
  2. 多尺度检测

    • 使用多尺度检测策略,即在不同分辨率的特征图上进行检测。这样可以增加对小目标的检测敏感性,因为一些特征图可能更适合检测小目标,而另一些特征图则更适合检测大目标。
  3. 调整锚框

    • 优化模型的锚框(anchor boxes)可以改善小目标检测。可以调整锚框的大小和宽高比,以更好地适应小目标的特征。通常,增加小尺寸的锚框可以提高小目标的检测性能。
  4. 数据增强

    • 使用数据增强技术,如随机裁剪、缩放、旋转等,来增加小目标的样本多样性。这有助于模型更好地泛化到小目标的不同尺寸和方向。
  5. 注意力机制

    • 引入注意力机制(Attention Mechanism)可以帮助模型更好地关注图像中的重要区域,特别是小目标。注意力机制可以增强对小目标的检测性能。
  6. 软性非极大值抑制(Soft-NMS)

    • 传统的非极大值抑制(NMS)可能会导致小目标被过度抑制。软性非极大值抑制方法可以减轻这个问题,允许小目标得分更低但不被完全抑制。
  7. 迁移学习

    • 使用预训练的模型(如在大规模数据集上训练的模型)可以提高小目标检测的性能。通过迁移学习,模型可以获得更好的特征表示能力,从而改善对小目标的检测。
  8. 后处理技巧

    • 使用一些后处理技巧,如图像金字塔、多尺度融合等,可以进一步提高小目标检测性能。
  9. 合理设置超参数

    • 仔细调整模型的超参数,包括学习率、批量大小、训练时长等,以确保模型在小目标检测任务上表现良好。

优化YOLO模型以进行小目标检测需要一些实验和调整,因为不同的数据集和任务可能需要不同的方法。综合考虑上述方法,可以逐步改善YOLO模型在小目标检测上的性能。

(215条消息) 目标检测算法——YOLOv5改进|增加小目标检测层_加勒比海带66的博客-CSDN博客_yolov5增加小目标检测层

YOLOV5 的小目标检测网络结构优化方法汇总(附代码)_51CTO博客_yolov5网络结构详解(177条消息) YOLOV5 模型和代码修改——针对小目标识别_xiaoY322的博客-CSDN博客_yolov5小目标检测

42、rtsp推流

(156条消息) rtsp推流_Pikachu_simple的博客-CSDN博客_rtsp推流

43.GAN

生成对抗网络(GANs,Generative Adversarial Networks)是深度学习领域的一种强大工具,已经在许多应用场景中取得了成功。以下是一些GAN网络的常见应用场景:

  1. 图像生成和合成

    • GANs可以用于生成高质量的图像,包括逼真的照片、艺术作品、风景图片等。这在创意领域、电影特效制作和图像编辑中有广泛应用。
  2. 风格迁移

    • 风格迁移GAN可以将一种图像的风格应用于另一种图像,创造出有趣的效果,如将一幅画的风格应用于照片,或将一个艺术家的绘画风格应用于自然风景。
  3. 图像超分辨率

    • GANs可以用于提高图像的分辨率,将低分辨率图像转化为高分辨率图像,有助于图像的细节增强和改进。
  4. 图像修复

    • GANs可以用于修复受损的图像,如去除噪音、填补缺失的图像部分、恢复老照片等。
  5. 视频生成

    • 基于GANs的模型可以用于生成逼真的视频内容,包括视频特效、视频游戏背景和虚拟现实体验。
  6. 人脸生成和编辑

    • GANs被广泛用于生成逼真的人脸图像,还可以用于人脸编辑,如年龄化、变性别、表情变换等。
  7. 语音生成

    • 类似GAN的架构可以用于生成逼真的语音和语音合成,对于虚拟助手、自动语音识别等应用非常有用。
  8. 自然语言处理

    • 在自然语言处理领域,生成对抗网络可以用于文本生成、文本翻译、对话生成、摘要生成等任务。
  9. 医学图像处理

    • GANs在医学图像处理中有广泛应用,用于图像增强、病理图像分析、医学图像生成等。
  10. 虚拟现实和增强现实

    • GANs可用于生成虚拟现实世界中的逼真场景,包括虚拟城市、虚拟建筑、虚拟景观等,也可用于增强现实体验的改进。
  11. 数据增强

    • 在许多机器学习任务中,GANs可以用于生成合成数据,以扩充训练数据集,提高模型的性能和泛化能力。
  12. 动画制作

    • GANs可以用于生成动画角色、动画场景和特效,加速动画制作过程。

总之,生成对抗网络在计算机视觉、自然语言处理、音频处理、医学领域和虚拟现实等多个领域都有广泛的应用,可以用于创造、合成、增强和改进各种类型的数据和内容。

GAN-生成对抗性神经网络 - 知乎

47、nms改进

(157条消息) 目标检测NMS非极大值抑制及改进_颢师傅的博客-CSDN博客_nms改进

48、上采样

(161条消息) 深度网络中的上采样总结_包休的博客-CSDN博客_上采样网络

49、数据增强(传统图像处理和GAN生成数据集)

(204条消息) 深度学习生成对抗网络(GAN)_杨丝儿的博客-CSDN博客_生成对抗网络

50、图像增强

(162条消息) 图像处理(1) : 图像增强_QtHalcon的博客-CSDN博客_图像增强

51、模式识别

模式识别和深度学习是两个不同但相关的领域,它们有一些共同点,但也存在一些重要的区别。下面是它们之间的主要区别:

  1. 定义

    • 模式识别是一种广义的领域,旨在开发方法和技术,用于自动识别和分类数据中的模式、结构和规律。这可以包括传统的统计方法、机器学习技术以及深度学习等各种方法。
    • 深度学习是模式识别领域的一个分支,它使用深度神经网络来学习从数据中提取和表示特征的方法。深度学习是模式识别的一种特定方法,强调通过层次化的方式学习数据的表示。
  2. 方法

    • 模式识别方法包括传统的机器学习算法(如支持向量机、决策树、随机森林、K均值聚类等),统计方法(如主成分分析、线性判别分析等),以及一些特定的领域方法(如语音识别、图像处理中的特征提取等)。
    • 深度学习方法主要涉及深度神经网络,包括卷积神经网络(CNN)、循环神经网络(RNN)、变换器(Transformer)等。深度学习强调从数据中自动学习表示,通过多层次的神经网络进行特征提取和模式学习。
  3. 特征工程

    • 在传统模式识别中,通常需要手动设计和提取数据的特征,这称为特征工程。特征工程可以是一个耗时且需要领域知识的过程。
    • 在深度学习中,特征工程的需求较少,因为深度学习模型可以自动从原始数据中学习特征表示,减少了对手动特征工程的依赖。
  4. 数据需求

    • 深度学习通常需要大量的数据来训练模型,特别是在复杂的任务中,如图像识别、自然语言处理等。深度学习模型的性能通常随着数据量的增加而提高。
    • 传统的模式识别方法可能对数据量要求较低,但在某些情况下,也可以受益于更多的数据。
  5. 可解释性

    • 传统的模式识别方法通常具有较好的可解释性,可以理解模型的内部工作原理和特征权重。这在某些应用中很重要,如医学诊断和金融风险分析。
    • 深度学习模型通常被认为是黑盒模型,其内部复杂性较高,难以解释模型的决策过程。这在一些关注可解释性的领域可能是一个挑战。

总之,模式识别是一个更广义的领域,涵盖了各种方法和技术,而深度学习是模式识别的一个特定分支,强调使用深度神经网络进行特征提取和模式学习。选择使用哪种方法通常取决于具体的任务、数据和可用资源。在一些情况下,传统模式识别方法可能更合适,而在其他情况下,深度学习可能能够提供更好的性能。

机器学习笔记 - 模式识别之图像特征提取和特征选择的基本方法总结

54、pytorch搭建训练网络

(162条消息) pytorch简单神经网络搭建和训练实例_Bernard.Dong的博客-CSDN博客_pytorch 训练实例

(162条消息) optimizer.zero_grad()_bigbigvegetable的博客-CSDN博客_optimizer.zero_grad

55、optimizer adam和sgd区别

SGD和Adam优化器的区别是什么? - 知乎

ADAM和SGD有什么区别 • Worktile社区

RMSprop-CSDN博客

55、各自作用训练集、验证集、测试集的作用_逐渐躺平的zy的博客-CSDN博客_测试集验证集和训练集的作用

57、深度学习的数据分布/特征分布/概率分布

特征向量的分布指的是在特征空间中的特征向量的分布情况。特征向量通常用来表示数据中的样本或数据点,每个特征向量包含一组特征值,每个特征值描述了数据点的某个属性或特征。

特征向量的分布分析在机器学习、数据挖掘和数据分析中非常重要,因为它可以提供关于数据的特征和结构的信息。以下是特征向量分布分析的一些关键方面:

  1. 维度:特征向量的维度是指特征的数量。高维度的特征向量可以包含更多的信息,但也可能增加计算复杂性。分析特征向量的维度可以帮助确定是否需要降维或特征选择。

  2. 均值和方差:计算特征向量的均值和方差可以提供关于特征在数据中的集中程度和分散程度的信息。这有助于了解特征的分布。

  3. 特征之间的相关性:通过计算特征之间的相关性或协方差矩阵,可以了解特征之间的相互关系。相关性分析有助于识别多重共线性或冗余特征。

  4. 特征分布可视化:使用直方图、箱线图、散点图等可视化工具,可以直观地了解特征的分布情况,包括分布的形状、偏度、峰度等特征。

  5. 异常值检测:特征向量分布分析可以用于检测异常值或离群点,即与其他特征向量明显不同的数据点。

  6. 特征分布的影响:特征向量的分布对机器学习模型的性能有重要影响。一些机器学习算法对特征分布敏感,因此分析特征分布可以帮助选择合适的算法或进行适当的特征变换。

  7. 类别分布:如果在监督学习中,特征向量对应不同的类别或标签,可以分析不同类别下的特征向量分布,以了解类别之间的差异。

特征向量的分布分析有助于数据预处理、特征工程和建模过程中的决策。它可以帮助选择合适的特征工程方法、处理缺失数据、降低维度、选择合适的分类器等,以实现更好的机器学习模型性能。同时,分析特征向量的分布也有助于识别数据集中的潜在问题和特点。

图像的数据分布和特征分布是两个不同的概念,它们在图像处理和计算机视觉中具有不同的意义和应用。以下是它们之间的主要区别:

  1. 图像的数据分布

    • 图像的数据分布指的是整个图像像素值的分布情况。对于灰度图像,数据分布描述了每个像素的灰度级别在整个图像中出现的频率分布。对于彩色图像,数据分布可以针对每个颜色通道(如红、绿、蓝)分别分析。
    • 图像的数据分布通常用直方图来表示,其中横轴表示像素值或颜色值,纵轴表示像素或像素数量的频率。通过图像数据分布,可以了解图像的亮度、对比度、颜色分布等全局特征。
  2. 特征分布

    • 特征分布是指从图像中提取的特征(通常是高级抽象特征)的分布情况。这些特征可以是经过处理和转换的原始像素数据的表示,例如使用卷积神经网络(CNN)提取的特征、颜色直方图、纹理特征、形状描述符等。
    • 特征分布通常不直接描述原始像素值,而是描述了图像中某些特定属性的分布情况。特征分布有助于识别和分类图像,通常用于机器学习任务,如图像分类、对象检测、人脸识别等。

主要区别:

  • 图像的数据分布关注整个图像的像素值或颜色分布,而特征分布关注从图像中提取的高级特征的分布。
  • 数据分布通常用于了解图像的全局属性,如亮度、对比度、颜色平衡等,而特征分布通常用于在更高层次上理解图像内容。
  • 数据分布通常表示为直方图,特征分布可以是各种特征向量的分布。

需要注意的是,特征提取通常是通过对原始图像数据进行处理和转换来获得的,因此特征分布中的特征值可能与原始图像的像素值不同。这些特征值通常更具有判别性,有助于进行各种图像分析和处理任务。数据分布和特征分布的选择取决于具体任务的要求和目标。

59、多尺度检测

YOLO(You Only Look Once)多尺度检测指的是在不同尺度下检测目标的一种策略。YOLO是一种基于深度学习的目标检测算法,它的主要思想是通过单个神经网络模型一次性预测图像中的所有目标,而不是像传统的滑动窗口方法那样在多个尺度上运行目标检测。

多尺度检测是为了使YOLO模型能够检测不同大小和比例的目标。在多尺度检测中,通常采用以下策略:

  1. 特征金字塔(Feature Pyramid):YOLOv3及更高版本引入了特征金字塔,这是一种通过堆叠不同分辨率的特征图层来实现多尺度检测的方法。每个特征金字塔层都包含了不同尺度和语义的特征信息,从粗到细。

  2. 不同尺度的锚框:在YOLO中,锚框(anchor boxes)用于检测目标的位置和大小。多尺度检测通常包括不同尺度的锚框,以适应不同大小的目标。每个锚框通常与模型的特定特征金字塔层相关联。

  3. 多尺度图像输入:模型接受多尺度的图像输入,这些图像输入可能是原始分辨率的图像,也可以是缩小或放大的图像。这样,模型可以在不同尺度下运行,以检测目标。

  4. 多尺度预测:模型在不同尺度上进行目标检测,并预测每个尺度上的目标框(bounding boxes)和类别概率。然后,可以将来自不同尺度的检测结果合并或筛选,以得到最终的检测结果。

多尺度检测有助于YOLO模型处理图像中不同大小和比例的目标,提高了检测的鲁棒性和通用性。这在实际应用中非常重要,因为目标可能以不同的尺度出现在图像中,例如远处的小物体和近处的大物体。多尺度检测使得YOLO能够有效地应对这些挑战,从而广泛用于实时目标检测任务,如自动驾驶、安全监控和物体识别等。

62、resnet

网络做调整

(207条消息) 深度学习_经典网络_ResNet详解及常见问题总结_【WeThinkIn】的主理人的博客-CSDN博客_resnet核心设计

ResNet主要思想(总结)_51CTO博客_resnet核心思想

64、

谈一谈CS.CV方向如何阅读论文? - 知乎 (zhihu.com)

CV方向的高效阅读英文文献方法总结 - 爱码网 (likecs.com)

(13 封私信 / 80 条消息) SOTA,benchmark和baseline分别是什么意思? - 知乎 (zhihu.com)

"baseline" 和 "benchmark" 都是与性能评估和比较相关的术语,但它们在含义和用法上有一些区别:

  1. Baseline(基准线)

    • 基准线通常是指一个系统、算法或模型的最简单或最基本的版本,用作比较的起点。它代表了一个最低的性能水平或实现。基准线的目的是提供一个参照点,以便与其他更复杂的系统或改进的版本进行比较。
    • 基准线有助于评估新算法或新系统的性能改进程度。如果新的方法无法超越基准线,那么它可能不具备实际应用的价值。基准线还有助于确定问题的难度,以及哪些方面需要改进。
  2. Benchmark(基准测试)

    • 基准测试是一种广泛接受的标准或规范,用于评估和比较不同系统、算法或模型的性能。基准测试通常包括一组标准任务、数据集、性能指标和评估方法,以便独立的研究者或团队能够在相同条件下进行性能比较。
    • 基准测试的目的是提供一个客观和可重复的方法,以评估不同系统或算法的性能。这可以帮助研究者和工程师确定哪种方法在特定任务上表现最佳,并推动领域内的技术进步。

总的来说,基准线是一个特定系统或方法的最基本版本,用于比较和评估性能改进。而基准测试是一种更广泛的评估方法,通过定义标准任务和测量指标,使不同的系统或方法可以在相同的条件下进行比较。基准测试通常用于推动技术领域的发展,并帮助确定最佳实践。

65.MLP和逻辑回归

逻辑回归模型(logistic regression)如何解决多分类? - 知乎

MLP(多层感知机)和逻辑回归是两种不同类型的机器学习模型,它们在多个方面有显著的区别:

  1. 模型类型

    • MLP:多层感知机是一种深度神经网络,通常由多个神经元组成的多层网络。它包括输入层、隐藏层(可以有多个)和输出层,可以处理复杂的非线性关系。
    • 逻辑回归:逻辑回归是一种线性模型,用于处理分类问题。它只有一个输出层,通常用于二分类问题(可以扩展到多分类)。
  2. 模型复杂度

    • MLP:由于其多层结构和非线性激活函数,MLP具有更高的模型复杂度,可以拟合更复杂的数据分布。
    • 逻辑回归:逻辑回归是线性模型,模型复杂度较低,只能拟合线性可分的数据。
  3. 激活函数

    • MLP:MLP使用非线性激活函数,如ReLU、Sigmoid、Tanh等,以引入非线性变换,从而能够处理非线性问题。
    • 逻辑回归:逻辑回归使用Sigmoid激活函数,将线性组合的结果映射到0和1之间,用于二元分类问题的概率估计。
  4. 输出

    • MLP:MLP可以用于多类别分类、回归等多种任务,输出层的设置取决于具体问题。
    • 逻辑回归:逻辑回归通常用于二分类问题,输出为一个概率值,表示正类别的概率。
  5. 训练方法

    • MLP:MLP通常需要使用反向传播算法进行训练,可以使用梯度下降等优化算法来更新权重参数。
    • 逻辑回归:逻辑回归有解析解,可以通过最大似然估计来直接计算权重参数。
  6. 适用场景

    • MLP:MLP适用于复杂的非线性问题,如图像分类、语音识别、自然语言处理等任务。
    • 逻辑回归:逻辑回归适用于简单的分类问题,或作为其他更复杂模型的基线模型。

总的来说,MLP和逻辑回归是不同类型的模型,适用于不同的任务和问题复杂度。MLP具有更高的灵活性和能力,但通常需要更多的数据和计算资源。逻辑回归是一种简单而有效的线性分类方法,适用于一些简单的二分类问题。选择哪种模型取决于你的任务要求和数据性质。 

72、 梯度下降

在机器学习和优化领域,梯度(Gradient)是一个非常重要的概念,它与梯度值、方向导数、学习率和步长之间有关系。让我们一一解释它们之间的关系:

  1. 梯度

    • 梯度是一个向量,表示函数在某一点上的局部斜率或变化率。在机器学习中,通常用于表示损失函数对模型参数的导数,帮助我们确定损失函数在当前参数值处的斜率方向。
    • 对于多变量函数,梯度包含了每个参数的偏导数,它指示了函数在各个参数方向上的变化率。梯度的方向是函数增长最快的方向。
  2. 梯度值

    • 梯度值是梯度向量的长度,表示在当前点上函数的变化率或斜率的大小。它告诉我们在该点附近函数变化的速度。
    • 梯度值越大,意味着函数在该点附近的变化越剧烈,反之亦然。
  3. 方向导数

    • 方向导数是函数在给定方向上的变化率。它告诉我们,如果在某个方向上移动,函数值将如何变化。
    • 方向导数可以通过梯度与给定方向向量的点积来计算。如果方向与梯度的方向相同,方向导数等于梯度值;如果方向与梯度的方向垂直,方向导数为零。
  4. 学习率

    • 学习率是机器学习中的一个超参数,用于控制模型参数在每次迭代中的更新幅度。学习率决定了在梯度下降等优化算法中每次迭代中参数更新的步长。
    • 学习率的选择是一个重要的问题,过大的学习率可能导致不稳定的收敛,而过小的学习率可能导致收敛速度过慢。
  5. 步长

    • 步长通常指的是在梯度下降优化算法中,根据学习率和梯度的信息来更新模型参数的大小。步长决定了在参数空间中的实际移动距离。
    • 步长是根据学习率和梯度计算得出的,它告诉我们在当前梯度方向上应该前进多远以更新参数。

关系总结:

  • 梯度是一个向量,包含了函数在各个参数方向上的变化率。
  • 梯度值是梯度向量的长度,表示在当前点上函数的变化率的大小。
  • 方向导数表示在某个给定方向上的函数变化率。
  • 学习率是控制参数更新步长的超参数。
  • 步长是根据学习率和梯度信息计算得出的,用于实际更新模型参数的大小。

在机器学习中,通常使用梯度和学习率来更新模型的权重,以最小化损失函数。不同的优化算法(如梯度下降、随机梯度下降、Adam等)使用不同的方式来调整步长和梯度,以找到损失函数的最小值。正确选择学习率和步长对于模型的收敛和性能至关重要。

(190条消息) 梯度下降(详解)_流年若逝的博客-CSDN博客_梯度下降

74、度量学习 

Circle Loss(圆形损失)是一种用于训练人脸验证或人脸识别模型的损失函数。它是一种对比学习损失,旨在优化特征嵌入空间,以使同一类别的样本之间的距离尽可能小,而不同类别的样本之间的距离尽可能大。Circle Loss 是一种度量学习损失函数,通常用于度量学习的损失函数之一,以提高模型在人脸验证或识别任务中的性能。

Circle Loss 的核心思想是引入一个"圆形"的决策边界,使得同一类别的样本在特征空间中被吸引到圆形内部,而不同类别的样本则被排斥到圆形外部。这样可以增加同一类别样本之间的相似性,同时增加不同类别样本之间的差异性。

Circle Loss 的数学形式通常如下所示:

 

scssCopy code

L = max(0, m + s - s_pos)

其中:

  • L 是 Circle Loss。
  • m 是 margin,表示圆形边界和样本之间的最小距离。
  • s 是样本的余弦相似性分数。
  • s_pos 是同一类别的样本之间的余弦相似性分数。

Circle Loss 的训练过程旨在最小化该损失函数,以便同一类别的样本在特征空间中更接近,而不同类别的样本更远离。这有助于提高人脸验证和识别任务的性能,特别是当训练数据集中存在大量不同类别的人脸时。

需要注意的是,Circle Loss 只是度量学习中的一种损失函数,用于学习特征嵌入,通常与卷积神经网络(CNN)或其他深度学习模型一起使用。其效果可能受到数据集、模型架构和超参数的影响,因此在实际应用中需要仔细调整和评估。

ArcFace 是一种用于人脸识别任务的损失函数,它不是使用 Circle Loss(圆形损失),而是使用角度余弦余弦距离来优化模型的特征嵌入空间。ArcFace 旨在将同一类别的人脸样本在特征空间中推到更近的位置,并将不同类别的人脸样本分开。这有助于提高人脸识别任务的性能。

ArcFace 的损失函数通常形式如下:

 

rCopy code

L = -log(exp(cos(theta_yi - m))) / (exp(cos(theta_yi - m)) + sum(exp(cos(theta_j))) - exp(cos(theta_yi - m)))

其中:

  • L 是 ArcFace 损失。
  • theta_yi 是特征向量与正类别类别的余弦值。
  • theta_j 是特征向量与其他类别的余弦值。
  • m 是角度间隔(margin),用于控制同一类别的样本在特征空间中的分布。

ArcFace 使用余弦距离作为相似性度量,通过最小化损失函数来训练深度神经网络,以便将同一类别的样本在特征空间中更接近,同时增加不同类别样本之间的距离。这有助于增强人脸识别模型对人脸特征的鲁棒性。

总而言之,ArcFace 使用的是角度余弦余弦距离来度量特征向量之间的相似性,而不是 Circle Loss。这两种损失函数都用于人脸验证和识别任务,但采用了不同的数学形式和思想来优化特征嵌入空间。

 给定两个特征向量,以下哪些方法可以计算这两个向量相似度?_特征向量相似度_冰露可乐的博客-CSDN博客

(181条消息) 度量学习(Metric Learning)【AMSoftmax、Arcface】_u013250861的博客-CSDN博客_amsoftmax

(215条消息) 度量学习:ArcFace算法和工程应用总结_⊙月的博客-CSDN博客_arcface人脸相似度是如何计算的

(181条消息) 人脸识别损失函数简介与Pytorch实现:ArcFace、SphereFace、CosFace_taoqick的博客-CSDN博客_pytorch实现cosface

76、图像检索

2022-图像检索资料总结 - 知乎 (zhihu.com)

77、全卷机FCN

图像分割(二):模型(FCN)_fcn模型_米之炼金术师的博客-CSDN博客

(192条消息) 全卷积神经网络FCN_业余科了个研的博客-CSDN博客_全卷积神经网络

79、anchor的作用

OLO(You Only Look Once)目标检测算法使用 anchors(锚点或先验框)的主要原因如下:

  1. 多尺度目标检测:YOLO需要同时检测不同尺寸和形状的目标,例如图像中的小物体和大物体。通过使用不同大小和长宽比的 anchors,YOLO可以在一个单一的前向传播中检测多尺度的目标,而无需多次运行不同尺度的检测器。这提高了检测效率。

  2. 目标位置预测:每个 anchor 不仅用于检测目标的尺寸,还用于预测目标的位置。YOLO的输出包括每个 anchor 对应的目标位置信息,包括目标的中心坐标和边界框的宽度和高度。这使得 YOLO 能够以像素级别的精度定位目标。

  3. 类别预测:除了目标位置,anchors 也用于预测目标的类别。每个 anchor 会输出一个关于目标类别的概率分布,以确定图像中的目标属于哪个类别。

  4. 简化网络结构:使用 anchors 允许 YOLO 使用全卷积网络(Fully Convolutional Network)结构,而无需将输入图像大小固定为特定尺寸。这样可以更灵活地处理不同分辨率的图像,而不需要调整网络架构。

  5. 减少计算量:YOLO中的 anchors 可以减少需要检测的目标数量,从而减少计算量。不同尺寸的 anchors 可以捕获不同大小的目标,而不必检测所有可能的目标尺寸。

  6. 提高检测稳定性:通过 anchors,YOLO 可以在一定程度上解决目标尺寸和形状变化带来的检测困难。每个 anchor 可以专门针对特定尺寸和长宽比的目标进行优化,提高了检测的稳定性。

总之,使用 anchors 是 YOLO 目标检测算法的关键组成部分,它们使得 YOLO 能够在单一前向传播中检测多尺度的目标,同时提供了目标位置、类别和稳定性等重要信息,使得 YOLO 成为一种高效且强大的目标检测方法。

目标检测最新算法YOLOX为何使用Anchor-free,Anchor-based 和Anchor-free的比较。 - 知乎

84、pytorch cuda基础镜像       base runtime devel https://hub.docker.com/layers/pytorch/pytorch/1.6.0-cuda10.1-cudnn7-devel/images/sha256-ccebb46f954b1d32a4700aaeae0e24bd68653f92c6f276a608bf592b660b63d7?context=explore

85、SVM 支持向量机

"支持向量"(Support Vectors)是支持向量机(SVM)算法中的重要概念,得名于它们在分类问题中的关键作用。支持向量机通过找到和利用这些支持向量来构建分类边界(超平面)。

支持向量的名称来源于以下原因:

  1. 关键样本:在二分类问题中,支持向量是那些距离分类边界最近的样本点。它们是在训练过程中最具挑战性的数据点,因为它们决定了分类边界的位置。

  2. 决策边界:SVM 的目标是找到一个超平面,使得距离超平面最近的数据点(支持向量)到该平面的距离最大化。这意味着支持向量对于确定分类边界的位置至关重要。

  3. 间隔最大化:SVM 的关键思想是最大化两个不同类别的支持向量之间的间隔,这个间隔也被称为"间隔超平面"。最大化这个间隔可以提高分类器的泛化能力。

  4. 支撑分类边界:支持向量不仅决定了分类边界的位置,还支撑着分类边界。如果移动或删除任何支持向量,都会对分类结果产生影响。

总之,支持向量是支持向量机算法的关键组成部分,它们是那些最接近分类边界的样本点,通过它们,SVM 尝试构建一个最佳的分类边界,以实现最大的分类间隔。这就是为什么它们被称为"支持向量"的原因,因为它们支持和定义了分类边界。

一文读懂支持向量机——SVM(细节解读) - 知乎

86、神经元实现

import numpy as np

class Neuron:
    def __init__(self, input_size):
        # 初始化权重和偏置
        self.weights = np.random.rand(input_size)
        self.bias = np.random.rand()
        
    def activation_function(self, x):
        # 使用阈值函数作为激活函数
        return 1 if x >= 0 else 0

    def forward(self, inputs):
        # 计算神经元的加权和
        weighted_sum = np.dot(inputs, self.weights) + self.bias
        
        # 应用激活函数
        output = self.activation_function(weighted_sum)
        
        return output

# 创建一个具有2个输入的神经元
neuron = Neuron(input_size=2)

# 输入数据
inputs = np.array([0.5, 0.7])

# 计算神经元的输出
output = neuron.forward(inputs)

# 打印输出
print("神经元的输出:", output)
 

87、mobilenet 核心

深度可分离卷积 - 知乎

92、凸优化相关问题_淡定的炮仗的博客-CSDN博客_凸优化问题 

94、调整学习率策略


pytorch 5种学习率调整策略_chainfitness的博客-CSDN博客_pytorch steplr

95.

RNN总结01 - 知乎

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值