中国最大的销售网站,苏州外贸网站建设运营,福建宏盛建设集团网站,app介绍模板文章目录 VITCLIPBlipSAMLSegFast TransformerYOLO系列问题 BatchNorm是对一个batch-size样本内的每个特征做归一化#xff0c;LayerNorm是对每个样本的所有特征做归一化。 Layer Normalization#xff08;层归一化#xff0c;简称LayerNorm#xff09;是一种在深度学习中… 文章目录 VITCLIPBlipSAMLSegFast TransformerYOLO系列问题 BatchNorm是对一个batch-size样本内的每个特征做归一化LayerNorm是对每个样本的所有特征做归一化。 Layer Normalization层归一化简称LayerNorm是一种在深度学习中常用的归一化技术它与Batch Normalization批归一化不同LayerNorm是在单个样本的特征上进行归一化而不是在批次上。LayerNorm的目的是减少模型训练过程中的内部协变量偏移Internal Covariate Shift即减少模型参数更新时的规模和方向的变化从而加速收敛并提高模型性能。
LayerNorm的计算步骤如下
LayerNorm的优势在于它不依赖于批次的大小因此可以很好地应用于RNNs和LSTMs等序列模型中这些模型的批次大小可能会变化。此外LayerNorm也有助于减少模型对初始化权重的敏感性从而提高模型的稳定性和性能。
VIT
介绍一下Visual Transformer 介绍一下自注意力机制 介绍一下VIT的输出方式 介绍一下VIT做分割任务
VIT是将NLP的transformer迁移到cv领域他的整个流程大概如下将一张图片切成很多个patch每个patch为16x16的大小然后将这些patch拉直并添加一个位置编码然后将这个向量序列输入到标准的transformer encoder中这里的transformer encoder由多个transformer 标准块构成包括multi head attention 然后相加并进行层归一化以及后面的FFN前馈神经网络
FFN层就是feed forward层。他本质上就是一个两层的MLP第一层会将输入的向量升维第二层将向量重新降维。这样子就可以学习到更加抽象的特征。
Transformer encoder 的输出和输入一样有多个输出我们应该拿哪个输出去做最后的分类呢所以说再次借鉴BERT用extra learnable embedding也就是一个特殊字符叫cls叫分类字符它也有一个位置编码0因为所有的token都在跟所有的token做交互信息所以第一个class embedding 可以从别的embedding里面学到有用的信息从而我们只需要根据它的输出做一个MLP Head做最后的判断。 class Attention(nn.Module):def __init__(self,dim, # 输入token的dimnum_heads8,qkv_biasFalse,qk_scaleNone,attn_drop_ratio0.,proj_drop_ratio0.):super(Attention, self).__init__()self.num_heads num_headshead_dim dim // num_headsself.scale qk_scale or head_dim ** -0.5self.qkv nn.Linear(dim, dim * 3, biasqkv_bias)self.attn_drop nn.Dropout(attn_drop_ratio)self.proj nn.Linear(dim, dim)self.proj_drop nn.Dropout(proj_drop_ratio)def forward(self, x):# [batch_size, num_patches 1, total_embed_dim]B, N, C x.shape# qkv(): - [batch_size, num_patches 1, 3 * total_embed_dim]# reshape: - [batch_size, num_patches 1, 3, num_heads, embed_dim_per_head]# permute: - [3, batch_size, num_heads, num_patches 1, embed_dim_per_head]qkv self.qkv(x).reshape(B, N, 3, self.num_heads, C // self.num_heads).permute(2, 0, 3, 1, 4)# [batch_size, num_heads, num_patches 1, embed_dim_per_head]q, k, v qkv[0], qkv[1], qkv[2] # make torchscript happy (cannot use tensor as tuple)# transpose: - [batch_size, num_heads, embed_dim_per_head, num_patches 1]# : multiply - [batch_size, num_heads, num_patches 1, num_patches 1]attn (q k.transpose(-2, -1)) * self.scaleattn attn.softmax(dim-1)attn self.attn_drop(attn)# : multiply - [batch_size, num_heads, num_patches 1, embed_dim_per_head]# transpose: - [batch_size, num_patches 1, num_heads, embed_dim_per_head]# reshape: - [batch_size, num_patches 1, total_embed_dim]x (attn v).transpose(1, 2).reshape(B, N, C)x self.proj(x)x self.proj_drop(x)return xCLIP
介绍一下CLIP CLIP的网络结构 CLIP的损失函数 CLIP的优势 CLIP为什么可以做零样本学习 CLIP的不足 1、文本对过于简单只能实现对图片的简单描述当图片场景复杂时CLIP的图文匹配效果不佳。 2、结构化表征能力弱例如黑色帽子白衬衫和白帽子黑衬衫他们的在CLIP中得到的语义相似度都会很高。 3、CLIP的训练依赖大量的优质文本对。
CLIPContrastive Language-Image Pre-Training模型是一种多模态预训练神经网络,该模型的核心思想是使用大量图像和文本的配对数据进行预训练以学习图像和文本之间的对齐关系,CLIP模型有两个模态一个是文本模态一个是视觉模态:
Text Encoder用于将文本转换为低维向量表示Embeding。Image Encoder用于将图像转换为类似的向量表示Embedding。
在预测阶段CLIP模型通过计算文本和图像向量之间的余弦相似度来生成预测。这种模型特别适用于零样本学习任务即模型不需要看到新的图像或文本的训练示例就能进行预测。CLIP模型在多个领域表现出色如图像文本检索、图文生成等。 模型中使用visual_embedding 叉乘 text_embedding得到一个[N, N]的矩阵那么对角线上的值便是成对特征内积得到的如果visual_embedding和对应的text_embedding越相似那么它的值便越大。
选取[N, N]矩阵中的第一行代表第1个图片与N个文本的相似程度其中第1个文本是正样本将这一行的标签设置为1那么就可以使用交叉熵进行训练尽量把第1个图片和第一个文本的内积变得更大那么它们就越相似。 [交叉熵]一种用于衡量两个概率分布之间差异的度量方式。其定义为 ,其中Px为实际概率分布Qx为预测概率分布。 交叉熵刻画的是两个概率分布的距离也就是说交叉熵值越小相对熵的值越小两个概率分布越接近
Blip SAM
在NLP的领域中存在一些被称为基础模型的模型他们通过预测句子中的下一个词进行训练称为顺序预测。通过这些基础的模型可以轻松地适应到其他的NLP的任务上比如翻译或者是文本摘要这种实现方式也可以称为是零样本迁移学习。其中比较著名的方法就是prompting通过聊天的形式来进行交互。NLP有效的前提是网络上存在大量的文本而对于序列的预测比如说知道一些词然后预测后面的词是什么这种不需要人工标注的标签就能完成训练。但是问题转化到计算机视觉的任务上尽管网络上存在数十亿的图像但是由于缺乏有效标注的mask的信息所以在计算机视觉的任务上建立这样模型成为了挑战。开门见山作者首先提出了三个问题。
针对上面提出的3个问题作者给出的解决方案。作者的目标是通过引入三个相互关联的组件来构建一个分割的基础模型一个可提示的分割任务、一个通过数据标注提供动力并能够通过提示工程实现一系列任务零样本迁移的分割模型SAM以及一个用于收集我们的数据集SA-1B包含超过10亿个掩码的数据引擎。
可提示的分割任务和实际使用目标对模型架构施加了约束。具体而言模型必须支持灵活的提示需要以分摊的实时方式计算掩码以允许交互式使用并且必须具备处理歧义的能力。令人惊讶的是我们发现一个简单的设计就能满足所有这三个约束条件一个强大的图像编码器计算图像嵌入一个提示编码器嵌入提示然后将这两个信息源在一个轻量级的掩码解码器中结合起来预测分割掩码。
图像的编码器
图像编码器。出于可扩展性和强大的预训练方法的考虑我们使用了一个经过最小调整以适应高分辨率输入的MAE预训练视觉TransformerViT[33][62]。图像编码器每张图像运行一次并可在提示模型之前应用这里使用的mae来进行预训练。
提示词的编码器
提示编码器。我们考虑两组提示稀疏提示点、框、文本和密集提示掩码。我们用位置编码[95]来表示点和框并将其与每种提示类型的学习嵌入和来自CLIP的现成文本编码器中的自由格式文本相加。密集提示即掩码使用卷积进行嵌入并与图像嵌入进行逐元素相加。
掩码的解码器
掩码解码器能够高效地将图像嵌入、提示嵌入和输出标记映射到一个掩码。采用了一个经过修改的Transformer解码器块后面跟着一个动态掩码预测头。我们修改后的解码器块在两个方向上从提示到图像嵌入和从图像嵌入到提示使用提示自注意力和交叉注意力来更新所有嵌入。运行两个块之后我们对图像嵌入进行上采样并且一个多层感知机MLP将输出标记映射到一个动态线性分类器然后该分类器计算图像每个位置的前景掩码概率。
解决歧义的问题
解决歧义问题。如果给定一个模糊的提示模型将平均多个有效的掩码作为一个输出。为了解决这个问题我们修改了模型使其能够针对单个提示预测多个输出掩码见图3。我们发现3个掩码输出足以处理大多数常见情况嵌套掩码通常最多有三层整体、部分和子部分。比如上面的剪刀的图像其实由三个有效的掩码。
我们的数据引擎有三个阶段辅助手动、半自动和全自动。在第一阶段SAM辅助标注者标注掩码类似于经典的交互式分割设置。在第二阶段SAM可以通过提示可能的对象位置自动为一部分对象生成掩码而标注者则专注于标注剩余的对象这有助于增加掩码的多样性。在最后阶段我们使用前景点的常规网格提示SAM平均每张图像生成约100个高质量掩码。
介绍一下SAM模型 SAM的创新性在哪里 详细介绍一下SAM的网络结构 SAM的加速和量化你有了解吗 SAM的应用场景
LSeg Image Encoder : dense prediction transformers (DPT)
Fast Transformer 分别对encoder only decoder only encoder-decoder3类transformer模型进行加速优化
对encoder only主要是做算子融合因为encoder涉及到很大小算子的计算包括 transpose、concat 这些简单算子以及softmax涉及到ex指数计算layernorm均值方差gelutanh非线性计算等非线性计算
YOLO系列问题
前处理和后处理具体包括什么 前处理你是如何加速的 YOLOv8的改进点有哪些
Yolov8换成了目前主流的解耦头结构(Decoupled-Head)将分类和检测头分离同时也从Anchor-Based换成了Anchor-Free。
Yolov8使用C2f模块代替C3模块。具体改进如下 第一个卷积层的Kernel size从6×6改为3x3。 所有的C3模块改为C2f模块如下图所示多了更多的跳层连接和额外Split操作。 Block数由C3模块3-6-9-3改为C2f模块的3-6-6-3。