主流目标检测算法劣势
YOLO系列,它基于anchor来做,少不了要用MNS,导致速度相对较慢。
但今天介绍一款DETR,基于VIT的目标检测算法。
那么我们需要先深入过一遍VIT。
Vision transform
1、传统RNN网络的问题
单向:只考虑之前的输入
双向:过去和未来的信息都可以参考,但是比如x1默认影响最大的是X0和X2。但是对X1影响最大的也可能是过去未来某个细节,比如X100,X1000等等。
2、vit在做什么事情——Encoder
1、把①号不好的特征转变为②号好的特征。这种楞次分明的特征可以让模型学习的更好。
2、传统词向量Word2vec的问题:同样的词在不同语境中保持不变。
3、transform会结合上下文考虑词语的信息,会一直更新词向量。
4、注意力机制attention,self-attention。it在不同语境中代表不同事物。
it是什么意思,需要结合上下文,而每个上下文词汇都会提供一个贡献值,0-1之间,表示他与it的联系。那么贡献值是怎么计算的呢?
词语向量的内机为0代表完全不关,内机为1表示“兄弟”。
那么可以把这个词向量X1分解为:Q、K、V。
Q:抛出一个问题
K:别人会问你,你答应别人的时候要给别人看的东西,
V:表示自身
当X1和自己计算 :Q1K1
当X1和X2计算时候:Q1K2
那么我们如何产生QKV呢?并且是的他们是可以训练的。也就是QKV不是凭空产生的,而是训练得到的。它与X1,X2有联系。
V在做什么呢?
通过学习,更好的理解自己。V表示实际的特征信息。
词的顺序会不会导致特征发生变化?
比如“我打你”和“你打我”当中的“我”是否是同一个特征。那么我们知道“我”的特征是Q/K/V,那么这个QKV是不变的。三个字关系不变,因此特征。但你打我和我打你并不是一回事!!
因此产生了位置信息表达,位置编码,在向量的维度上加一个维度信息。
最后如何做到自注意力
多次堆叠self-attention,使得输出特征提取更为完善。
4,6,8,10层数,Chatgpt特别多层。
3、vit在做什么事情——Decoder
1、本质:多分类任务。
2、如何decoder:由decoder的特征出Q询问,encoder提取的特征提供应答向量K和本身特征V。
3、Q1和Qn之间测关系是无法见到的,因为decoder不可以以未来信息为依据,不然就是不符合实际情况了——mask机制
MLP输出层
VIT整体结构
:FFN其实就是一个MLP
词(input)->词向量(input embedding)->Positional Encoding(位置编码)。