赞
踩
而DETR不采用上面的思想,转而使用CNN + Transformer的方式来进行目标检测。
在整体的实现上,原文完全使用原始bert的transformer结构,主要是对图片转换成类似token的处理,原文引入了一个patch的概念,即将输入图片划分为一个个的patch,然后对于每一个patch转换(主要是flatten操作),转换成类似bert的输入结构。整体的框架如下图所示:
假设输入图片大小是224x224,如果每个patch的大小是16x16,那么就有196个patch。然后将16x16x3的patch展平成 196 ∗ 768 196*768 196∗768的输入向量。然后经过一个768x768的FC层,然后在[cls]的位置也有相同长度(1x768)的token,然后将位置的embedding向量与197x768的输入对应相加,输入到transformer中;(这是patch embedding的方法,而还有hybrid的方法,就是先对原图做卷积池化得到14x14的feature map,将feature map展平得到196xC的,再接一层全连接,得到196x768的输入)
decoder的输入就是初始化100个向量,输出也是100个向量,接FC层,得到向量分别表示框的位置,以及框的所属类别(与机器翻译的串行结构不同,这是并行的)
Enocder学到了什么?
Decoder怎么初始化?
Decoder与NLP中Decoder中的区别
GT与预测输出的匹配问题?
DETR的论文中有这些图,成功的把重叠很严重的物体区分开,其中与框颜色相同的表示自注意力关注的位置,可以看出即使是重叠现象如此严重,transformer也能将他们区分开;
与Inception一样,为了让Encoder的每一层都能学习到与目标检查相关的信息,在每一层的位置都接了一个FC输出结果进行训练;(Inception是为了解决梯度消失问题,这里更多是为了让模型表现地更好,因为transformer本身有LN层,有残差skip-connection思想)
因为DETR就是很简单粗暴,所以能讲的东西也不多了…
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。