一面复盘(4.10)
1、自我介绍
2、说说我的项目是怎么做的
3、说一下yolo系列的改进方案(绷不住了我答的是能做什么改进。。。)
YOLO系列自YOLOv1以来,经历了多个版本的迭代,从最初的速度优先,到后期不断提升精度与鲁棒性。每一代都有非常有代表性的改进。YOLOv1将整个图像只通过一个CNN网络完成检测和分类,单阶段检测器,问题是定位不准,对小目标的检测效果比较差;YOLOv3使用多尺度特征(PFN结构),增强了小目标检测效果,用Darknet53替代原始的Backbone(DarkNet19),使用了残差连接,能进行更深层的训练,降低了参数量,且提高了表示能力;YOLOv5应用最广,使用Mosaic数据增强,使用了CSP结构,减少了计算量,提升了准确率,使用Kmeans聚类和遗传算法自动生成锚框,支持多版本选择,兼顾速度和性能;YOLOv7支持任务泛化(实力分割、姿态估计等);YOLOv8使用动态标签分配策略,去掉了锚框,提升了易用性;YOLOv10设计了统一的结构,适用于从高精度到超轻量任务,无需切换架构,精度和速度全面超过了主流模型,;YOLOv11使用C3k2模块、SPPF模块、C2PSA模块,其中C3k2是对CSP结构的改进,采用更小的卷积核以减少参数量,同时保存特征提取能力,提升模型的轻量化和效率,SPPF是SPP模块的加速版本,通过多尺度池化操作增强模型对不同尺度目标的检测能力,C2PSA引入并行空间注意力机制,增强模型对空间信息的感知能力,提高对复杂背景中目标的检测精度。YOLO系列整体的改进趋势是从速度导向→精度导向→多任务适应→模型轻量化与部署友好,未来YOLO可能继续往3D/多模态数据支持、自动搜索结构的方向发展。
CSP 的核心思想是把输入特征图分成两部分,一部分走主干网络,一部分跳过主干,最后再拼接,从而减小计算冗余和信息重复,提高模型的表达能力和效率。YOLOv4 引入 CSPDarknet53 作为 backbone,让网络在精度提升的同时,保持了轻量化结构,是 YOLO 系列的重要改进之一。
4、你项目用的yolo,有没有考虑用别的模型
目标检测模型主要可以分成两大类,两阶段模型和单阶段模型,
两阶段检测器先生成候选区域,再分类+回归,精度高,速度略慢,适合负责场景,典型的有R-CNN(RP+CNN+SVM分类)、Fast R-CNN(特征提取+ROI Pooling后分类,提高了速度)、Faster R-CNN(引入RPN,进行端到端训练)、Mask R-CNN(Faster R-CNN + 分割分支,实现目标检测+实例分割)
单阶段检测器直接在图像上回归目标位置和类别,速度快,适合实时检测,经典的有YOLO和SSD,RetinaNet
Transformer检测器,基于自注意力机制,去掉Anchor结构,端到端。
YOLO是单阶段检测器,速度较快,实时性强;模型通过单次前向传播直接预测目标的位置和类别,对设备要求较低;简单易于训练和调整结构;社区支持和开源框架。
5、你说你往项目里加了一些模块(注意力机制),请你讲一下是怎么加的
6、讲一下UNet架构
7、了解过SAM大模型吗
8、你项目中做语义分割的数据量有多大
9、项目中数据是怎么处理的,你们的数据量比较小,有考虑过相关的操作吗?
项目数据量较小,可能会面临过拟合、模型泛化能力差或训练不稳定等问题,可以进行数据增强(随即裁剪,随机缩放,随机翻转);使用批归一化,随机丢掉神经网络中的部分神经元;使用小批量训练(4);使用加权损失函数。考虑加入dropout
10、怎么去评估模型的好坏,模型泛化能力怎么样?
损失函数(定位损失、置信度损失、分类损失)、精确度、召回率、F1-score、IOU
如何提高模型的泛化能力:数据增强、正则化、早停、简化模型、增加数据量
11、语义分割还了解过其他架构吗
FCN 是一种基于卷积神经网络的端到端语义分割方法,它首先将传统 CNN 中的全连接层转换为卷积层,使得网络可以处理任意大小的输入图像,并对每个像素进行分类。
Mask R-CNN 是基于 Faster R-CNN 提出的扩展模型,在目标检测的基础上增加了一个分支用于像素级别的掩码(mask)预测,从而实现了实例分割(Instance Segmentation)。
12、了解过DETR、DINO之类的吗
DETR (Detection Transformer)
简介:DETR 是基于 Transformer 的目标检测模型。与传统的目标检测方法不同,DETR 不使用候选区域生成算法(如 RPN),而是直接通过 Transformer 模型进行目标的检测和定位。这使得模型在处理不同尺寸和不同类型的目标时非常灵活。
特点:无需 Region Proposal Network(RPN),通过 Transformer 直接学习目标检测;强大的全局上下文建模能力,能够处理复杂的场景;适用于大规模数据集,并能够检测不同尺度和不同类别的目标。
DINO:DINO(DEtection with tranfomer self-supervised pretraining)是一个基于 Transformer 架构的目标检测模型框架,尤其在自监督学习、对象检测和特征表示方面取得了突破性的效果。它是 Facebook AI(Meta AI)提出的,可以与 DETR(Detection Transformer)结合使用,提升目标检测性能。
13、讲讲transformer,讲一下其中的自注意力机制
transformer是一种完全基于自注意力机制的模型,能够理解输入之间的关系,而不依赖RNN或CNN。transformer由编码器和解码器两部分组成,其中编码器负责理解输入,解码器负责一步一步生成输出。transformer的核心机制是自注意力机制,这个机制的作用是让模型在处理每一个词时,能够考虑整个序列中其他词对它的影响。输入数据的处理流程是这样的:首先使用词嵌入方法(Embedding)将词转化成向量;因为transformer没有RNN的顺序感,因此要手动加上位置信息;然后使用多头自注意力并行地从多个角度关注输入;使用前馈神经网络对每个位置独立处理;最后使用残差连接和层归一化让模型训练更稳定。transformer的优点是并行计算更高效,能够捕捉长距离依赖(因为自注意力机制直接关注整段序列)
多头自注意力机制
自注意力机制是一种让模型在处理每个位置的词时,同时关注输入序列中其他所有位置的信息的方法,而多头自注意力机制是将多个自注意力机制并行执行,在拼接到一起的结构,让模型从多个角度理解输入序列的关系。
自注意力机制做的事情:
多头自注意力机制
理解QKV:
QKV三者是从输入中通过不同的线性变换得到的,用来计算注意力(关注度)和输出新表示的。
假设有一个输入序列中有三个字经过词嵌入后会变成三个向量。给每个向量乘上三个不同的权重矩阵,对于每个词都会生成一个Q向量(问题),一个K向量(索引),一个V向量(答案)。自注意力机制中的计算流程如下:1、拿当前词的Query;2、和所有词的Key进行点积,得到每个词的相关性得分(QK越接近,表示两个词越相关、点积越大);3、用softmax把得分变成权重;4、用这个权重加权所有Value,得到一个新的向量表示当前词
扩展
-
编解码器结构:简单来说编码器提取信息(理解),解码器生成信息 (表达),这套结构是输入输出任务的通用神器。在transformer中,编码器结构是这样的
解码器结构是这样的
-
词嵌入方法(Embedding):是一种把离散的符号转成连续的向量的方法,原始方法是one-hot编码,向量间没有语义上的联系,而词嵌入方法通过模型训练中自动学习将每个词表示成一个低维度的连续向量,向量的特点是:向量维度固定,距离有意义,可以通过梯度学习。
transfomer中词嵌入方法是上下文敏感的,同一个词在不同句子中有不同向量;是动态生成的,每次forward都重新计算;需要考虑临近词,要实时计算每个词与所有词的关系。 -
位置编码(为什么需要进行位置编码):transformer完全依靠自注意力机制处理输入,因此他只知道有很多词,但不知道先后顺序,所以需要一种方式告诉transformer每个词在句子里的位置是什么。
-
前馈神经网络
是最基本的、最常见的一种神经网络结构,信息从输入层流向输出层,不形成环路。
- 为什么残差连接和层归一化能让模型训练更稳定
残差连接的核心思想是将输入信息传递到输出层,而不是让网络从零开始学习。通过跳跃连接在每个子层的输出上加上一个原始输入。残差连接能缓解梯度消失和梯度爆炸的问题,更容易优化,避免了信息损失。这样即使我们加入了很深的网络,它依然能够在一定程度上保持稳定的训练过程,而不会因为层数过多导致梯度难以传播或信息丢失。
层归一化通过对每个样本的特征进行标准化,使每一层的输入在训练过程中保持稳定,减少梯度爆炸、消失的问题,提高优化效率,减少了由于输入分布不一致导致的训练波动,加速了训练进程。
二面复盘
忘记录音了。。。只能回忆起几个自己没答上来的问题
讲讲Focal Loss
Focal Loss 是一种针对类别不平衡问题的损失函数,主要用于目标检测中,也能用在图像分类或分割等**,核心目的是通过动态调整易分类样本和难分类样本的权重,从而使模型更加关注那些难以分类的样本。**在类别不平衡的任务中,通常会存在这样的问题:易分类样本占据大量比例,这些样本通常预测准确,而模型关注这些样本较少;难分类样本占据较少比例,但是他们对模型的训练和性能提升有重要作用,尤其是在小物体、边缘区域等情况下。FocalLoss通过为难分类样本分配更大的权重,从而减轻易分类样本的贡献,使模型更加关注“难点”,提升整体性能。
讲讲卷积和池化,以及为什么用这个(优势?)
卷积操作:通过一个卷积核对输入数据进行滑动、计算的过程。主要目的是从输入数据中提取局部特征,并在不同的空间位置上重复应用。
- 卷积涉及到的部分:卷积核(权重矩阵,用于捕捉输入数据中的特征)、滑动窗口(卷积核在输入数据上滑动,每次滑动时计算卷积核与输入数据局部区域的点积,从而获得一个新的特征图)、步长(决定卷积核滑动的步伐,步长为1时,卷积核每次移动一个像素)、填充(为了避免卷积过程丢失边界上的信息,常在输入数据的边缘填充零)
- 卷积的过程:给定一个输入矩阵和一个卷积核,卷积核在图像上滑动,每次计算卷积核与局部区域的点积,然后将结果输出到新的特征图中。卷积过程本质上是通过局部连接学习图像的局部特征。
- 卷积的优势:局部感知(卷积操作通过局部连接来提取图像的局部特征,帮助理解整体图像);参数共享(卷积核的权重在整个输入数据上共享,大大减少了需要学习的参数数量,相比全连接层更高效);空间不变性(卷积操作有助于实现空间不变性,即不管目标在图像中的位置如何变化,卷积网络都能够提取到相同的特征)
池化操作:池化是对卷积层输出的特征图进行降维操作,通常用于减小数据的尺寸和计算复杂度。池化操作通过将一个区域内的数值映射为一个代表性数值,从而压缩特征图的信息。池化的两种常见类型:最大池化(在池化窗口内选择最大值)、平均池化(在池化窗口内计算平均值)
- 池化的过程:池化操作将卷积层生成的特征图分成小区域,在每个区域内进行操作,通过压缩特征图来保留重要的空间信息,同时降低数据的尺寸。
- 池化的优势:降维(通过减少特征图的空间分辨率,显著降低了计算量和内存需求);减少过拟合(池化可以减少特征图中冗余信息,使模型更加简洁、鲁棒);空间不变性(池化操作能提高网络对位置变化的鲁棒性,让网络忽略小的空间变化)
二者的任务是使卷积神经网络能够高效地处理图像数据,提取重要特征,并在进行下游任务时提供更优的性能和更高的计算效率。
transformer在图像中是怎么实现的
传统CNN虽然在图像领域非常成功,但是有以下两个问题:局部感受野限制(卷积核只能看到局部区域,需要叠很多层才能获取全局信息);空间依赖建模(难以直接建模图像中长距离的依赖关系)
transformer通过自注意力机制可以直接建模任意两点之间的关系,从而获得全局信息;更强的建模能力;更灵活地适应结构变化(旋转、缩放等)
transformer在图像中的实现流程(以ViT为例):
1、图像划分为Patch(小块),原图像先被分割成一系列小的图像块,类似于把一句话分成词,每个Patch就是一个词;
2、Patch+位置编码→输入嵌入:每个Patch会通过一个线性层变成固定长度的向量,再加上位置编码;
3、输入Transformer编码器:这个结构由很多EncoderBlock组成。每个Block包括:多头自注意力、层归一化、前馈网络、残差连接;
4、分类或下游任务:加一个CLS Token(分类用);将经过Transformer输出的CLS token送入全连接层进行分类;对于检测、分割等任务也可以进行调整。
拓展
- token是啥:
在自然语言处理中,一句话会被分成若干token,常见的token就是词或子词,然后每个token会被转换为一个向量,这就是transformer的输入。
在图像中:
- 线性层:
DETR深层原理
DETR(DEtection TRansformer)是 Facebook 在 2020 年提出的一个基于 Transformer 的端到端目标检测框架。它打破了传统目标检测依赖手工设计 anchor、NMS、候选框生成等组件的方式,把目标检测变成了一个 直接预测边界框和类别的序列建模问题。
核心组成模块:
1、Backbone(卷积网络):使用ResNet提取图像的特征图;
2、transformer encoder:将二维特征图展平成一系列tokens,添加位置编码后送入Encoder。Encoder用自注意力机制建模全局上下文关系,输出refined特征序列;
3、目标查询向量:初始化一组learnable的Query向量,每个代表一个可能的目标。在Decoder中不断与Encoder的输出进行交互,直到最终每个Query负责输出一个物体预测。
4、Transformer Decoder:输入是目标查询(100个)+Encoder输出。通过多个层的交叉注意力,使得每个query从全图中“抽取”它关注的区域特征。每个Decoder层输出一个序列[100,d]
5、预测头:对Decoder输出的每个token(目标查询结果)预测一个边界框(归一化的中心点位置和尺寸)和一个类别(softmax输出所有类别+一个特殊类别“no object”)
Loss计算:引入了匈牙利匹配,解决谁对应谁的问题,将预测的100个bbox和GTbbox一一匹配,寻找总损失最小的匹配方式。(损失由两部分组成:分类损失、边框损失)
图像分类算法
反卷积
反卷积的主要作用是将低分辨率的特征图还原为高分辨率的图像或特征图,常用于图像生成(GAN)、语义分割(UNet、DeepLab)、特征图上采样
实际上它就是把输入插零后,再做普通卷积操作。
优点:可以端到端学习上采样,比手动插值更灵活;可以学习参数,能自动适应任务需求;
缺点:容易引入棋盘效应,尤其在GAN中常见;结构复杂度高于插值方法
扩展
- 插值: