网站建设 就业方向,zencart 网站建设,有没有免费的写文案的软件,网站建设廾金手指专业壹柒摘要#xff1a;
作者提到#xff0c;该方法将物体检测看做直接的集合预测#xff0c;在传统的目标检测算法中#xff0c;会先生成候选区域#xff0c;然后对每个候选区域进行单独的预测#xff08;包括物体的分类和预测框的回归#xff09;#xff0c;集合预测就是直…摘要
作者提到该方法将物体检测看做直接的集合预测在传统的目标检测算法中会先生成候选区域然后对每个候选区域进行单独的预测包括物体的分类和预测框的回归集合预测就是直接基于原始图像生成一系列预测结果避免了划分区域。不知道我这样理解对不对。这样能够简化流程。该模型基于二分匹配我的理解是预测结果与真实结果之间的匹配以及transformer机制简单来说就是编码和解码过程对目标进行检测的并且是并行输出看来是直接拿transformer的结果来用啊改都不改一点。损失计算是全局损失对预测集合和真实目标整体计算相比二阶段任务而言损失也简化了好多流程。最后还介绍了一下优势在COCO数据集上取的了不错的效果而且模型简单泛化能力很强。 嗯嗯...,我来让ai读读文章来概括一下nonono只是补充。
二分强制匹配是一种特定的匹配机制确保每个预测的物体都是唯一的确实是是将预测结果和真实结果进行一对一的匹配好处是模型被迫在输出的时候对每个物体生成唯一的预测同一个物体不会被多次预测达到比非极大抑制更好的效果但是如果图片中存在多个同一目标呢解决方案是detr中存在多个数量的预测。
基于集合的全局损失损失关注的是预测集合和真实集合的整体损失而不是逐个比较。 介绍
第一段没什么很重要的信息相当于是重复了一遍。第二段自注意力机制精确的模拟了句子之中元素之间的相互关系非常适应有限值的集合预测问题所谓限制是指不能重复预测看得出作者对非极大抑制方法有点瞧不起。在这里科普一下自注意力机制作用是在输入元素的时候动态的关注其他的元素计算查询与键之间的相似性并为其赋予权重。第三段也是重复叙述第四段之前的检测器侧重于使用RNN的逻辑回归我们的匹配机制直接分配预测框给真实框。第四段重复叙述了优势之后指出对于小目标检测精度一般的问题。后面关于全景分割的部分不看我们关注的只是目标检测介绍部分还说要在下文中寻找影响检测精度的重要因素。
相关工作
吐槽一下内容很冗余光是看到相关工作部分我至少听他叙述了四五遍“我们的工作是直接预测之前还没人做过”“我们的模型在COCO数据集上表现很好”。其实这些如果觉得必要叙述三次就行了没必要说这么多次。
2.1这部分没有细讲就是说传统的检测要避免重复检测而我们的模型使用的是基于匈牙利算法的二分匹配有效的避免了后处理但是匈牙利算法是啥没有具体叙述具体数学计算不再赘述匹配原理大概是这样的
我们预测的目标有100个但是图像中真实存在的只有3个对于每一个真实目标在所有目标框中选择唯一一个与之对应但是不同真实目标不能选定同一个预测目标使得损失最小化。
2.2主要是将transformer其在自然语言处理中的地位明显的优势是全局计算以及良好的记忆能力本模型运用了transformer并在算力成本以及全局计算能力之间折中。这里我再简要介绍一下transformer
将原始图像提取特征然后与位置编码相加再推倒我喜欢用这个词虽然不是很合适成一维放入encoder模块得到的结果输出到decoder中在decode之前初始化100个queries随机初始化进行解码解码结果与真实图像进行二分匹配。
详细讲解一下encoder过程跟着代码看如下 这里头是d_model是512nhead是8源码中首先进入到多头注意力机制函数中......有点不适合写进博客上次写博客两万字都卡的要命原代码内容量大可能会影响博客原本的布局美感在此只是截取一段
有点丑直接问AI吧还是
多头注意力机制先随机初始化三个权重矩阵对应Q,K,V。使用随机初始化数值满足Xavier 均匀分布偏置是可以选择的在源代码中默认存在偏置。
好像不对自注意力机制是QKV都是x也就是代码中的原始输入加上位置编码但是这样也就没有了学习的空间没有从输入转化为合适的QKV部分这个非常适合学习。为了使之具有一定的自由度我们生成了3个权重矩阵将其与X相乘得到QKV。 直接看forward过程 def forward_post(self,src,src_mask: Optional[Tensor] None,src_key_padding_mask: Optional[Tensor] None,pos: Optional[Tensor] None):q k self.with_pos_embed(src, pos)src2 self.self_attn(q, k, valuesrc, attn_masksrc_mask,key_padding_masksrc_key_padding_mask)[0]src src self.dropout1(src2)src self.norm1(src)src2 self.linear2(self.dropout(self.activation(self.linear1(src))))src src self.dropout2(src2)src self.norm2(src)return srcdef forward_pre(self, src,src_mask: Optional[Tensor] None,src_key_padding_mask: Optional[Tensor] None,pos: Optional[Tensor] None):src2 self.norm1(src)q k self.with_pos_embed(src2, pos)src2 self.self_attn(q, k, valuesrc2, attn_masksrc_mask,key_padding_masksrc_key_padding_mask)[0]src src self.dropout1(src2)src2 self.norm2(src)src2 self.linear2(self.dropout(self.activation(self.linear1(src2))))src src self.dropout2(src2)return srcdef forward(self, src,src_mask: Optional[Tensor] None,src_key_padding_mask: Optional[Tensor] None,pos: Optional[Tensor] None):if self.normalize_before:return self.forward_pre(src, src_mask, src_key_padding_mask, pos)return self.forward_post(src, src_mask, src_key_padding_mask, pos)
可选择的forward方法有两种根据初始化在自注意力机制和前馈网络的顺序分为post和pre分别表示在自注意力和前馈网络之前进行归一化以及在自注意力和前馈网络之后进行归一化。
以post为例首先先将位置嵌入将qkv放入自注意力机制中对于每个q分别计算其与所有k相乘的结果激活后乘以对应的v得到对于每一个序列的output将所有的output相加得到结果也就是输出当然使用矩阵计算会更加方便。保持形状相同。
然后将dropout之后的finnaloutput与原始输入相加再经过正则化处理。然后经过的一些列操作源码都很清晰的表示出来了我将从图像输入到经过第一个encoder layer的过程绘制出来如下这里是单头的。事实上我们采用的是多头注意力机制原理如下
总结而来就是执行多个单头然后将得到的结果按权重相加这个权重也是学习来的从讲故事的角度来说当然我认为作者是为了圆自己的说法没有事实依据的胡扯每个头会注意到不同的信息。
这里我使用的是forward_post:在源码中是这样的
整体是将6个encoder layers层上下接连起来有意思的是得到的输出本来就是在最后一个layer层里面归一化过了但是仍要选择是否要进行进一步的归一化。最后得到输出。
为了清晰明了作者还将最后一层的输出命名为memory。
编码部分算是过了然后来看解码部分 还是以forward_post为例q和k为原始输入加上位置编码然后将qk以及不包含位置信息的原始特征输入其实是随机初始化的tgt放进自注意力机制中去代码后面使用了一个multihead_attn可能会让人觉得自注意力机制不是多头的其实不然自注意力机制也是多头的。
自注意力机制得到的结果经过一个残差连接之后进行归一化然后再经过一个多头注意力机制模块儿这个注意力机制中的q为正则化结果再进行一次位置编码k为encoder得到的输出经过位置编码之后的结果v为encoder得到的输出。
多头注意力机制得到的结果进行残差相加...光是叙述不够清晰明了我还是作图吧。
等下容我找找tgt在哪。 当然这只是一层的输出源码中是将每个层的输出都记录下来得到6个输出后同样将第6层的结果再归一化且记录下来总的来说有7个输出。 有源码可知最后通过一个线性层来预测得到种类
运用三层感知机来预测边界框
。