PaddlePaddle / PaddleDetection

Object Detection toolkit based on PaddlePaddle. It supports object detection, instance segmentation, multiple object tracking and real-time multi-person keypoint detection.
Apache License 2.0
12.6k stars 2.86k forks source link

RT-DETR中的input_proj #8313

Open TsingWei opened 1 year ago

TsingWei commented 1 year ago

问题确认 Search before asking

请提出你的问题 Please ask your question

在HybridEncoder里,input_proj已经把所有level的feat处理成了256维,而且紧接着的FPN处理的都是降维后的feat。但是到了后面的transformer部分,这些feat又被transformer自己的input_proj处理了一次,这是为什么?

TsingWei commented 1 year ago

这是HybridEncoder中的第一次降维: https://github.com/PaddlePaddle/PaddleDetection/blob/129ddbb219d22ef697bf2d3d16a5eb0277e40359/ppdet/modeling/transformers/hybrid_encoder.py#L243 这是Transformer中的第二次降维: https://github.com/PaddlePaddle/PaddleDetection/blob/129ddbb219d22ef697bf2d3d16a5eb0277e40359/ppdet/modeling/transformers/rtdetr_transformer.py#L408

TsingWei commented 1 year ago

而且_get_encoder_input()这个方法命名也有点莫名奇妙,按照代码里DETR架构的定义,HybridEncoder是RT-DERT的neck,Transofmer部分已经没有encoder了, 是我哪里看错了吗 @lyuwenyu

lyuwenyu commented 1 year ago

这个就是出发点不一样,第一次是为了降维度,第二次是为了把不同level投影到可融合的特征空间,,,当然这里其实只保留一次也不是不可以

@TsingWei

TsingWei commented 1 year ago

明白了。还有一点小疑问,既然HybridEncoder只对最高层做自注意力交互,可不可以在它降维之前做,做了之后在降维?这样会不会丢失信息少一些?毕竟以前的Encoder之前降维只是为了把不同level特征拉到同一维度才能一起做注意力操作,现在既然只需要对这一层做的话,就不需要先降维了。