티스토리 뷰

Deep Learning

RT DETR의 Encoder 는 무엇일까

developer0hye 2024. 4. 21. 01:35

https://developer0hye.tistory.com/713

 

RT DETR의 백본은 무엇일까

https://arxiv.org/pdf/2304.08069.pdf https://github.com/lyuwenyu/RT-DETR GitHub - lyuwenyu/RT-DETR: [CVPR 2024] Official RT-DETR (RTDETR paddle pytorch), Real-Time DEtection TRansformer, DETRs Beat YOL [CVPR 2024] Official RT-DETR (RTDETR paddle pytorch),

developer0hye.tistory.com

 

백본을 알아봤으니 이제 Encoder는 어떤식으로 구현했나 봐봐야겠다.

 

 

궁금한 부분은 바로 Efficient Hybrid Encoder 이다. 보통 논문에 제안하는 모듈 혹은 블럭을 저렇게 AIFI, CCFF 라고 해놓았으면  프로젝트에서 모듈명을 검색해야하면 나와야 하는데 안나온다.

 

보니까 hybrid_encoder.py 에 구현해놓은 거 같다.

 

https://github.com/lyuwenyu/RT-DETR/blob/main/rtdetr_pytorch/src/zoo/rtdetr/hybrid_encoder.py

 

RT-DETR/rtdetr_pytorch/src/zoo/rtdetr/hybrid_encoder.py at main · lyuwenyu/RT-DETR

[CVPR 2024] Official RT-DETR (RTDETR paddle pytorch), Real-Time DEtection TRansformer, DETRs Beat YOLOs on Real-time Object Detection. 🔥 🔥 🔥 - lyuwenyu/RT-DETR

github.com

 

그럼 어떻게 디자인이 된걸까

논문의 4.2절을 읽어보면 high-level features 가 이미 low-level features로 부터 추출된 피쳐이기 때문에

(Figure 4 에서 s5가 high-level features,  s3가 low-level features로 생각하면됨)

multi-scale features를 활용하는 거 자체에 multi-scale features간에 중복성이 있음을 주장한다. 그래서 여러 방식으로 인코더를 디자인 했다고한다.

 

 

A: s3, s4, s5 피쳐 냅다 컨캣

 

B: s3, s4, s5 각각 transformer encoder block에 넣어서 동일 scale level에서 뽑힌 피쳐들만 서로 interaction 되도록(=Intra-scale) feature enhancing 함

 

C: s3, s4, s5 피쳐 한 번에 transformer encoder block에 넣어서 서로 다른 scale level, 동일 scale elvel에서 뽑힌 피쳐들이 서로 interaction 되도록(=Intra-scale + Inter-scale) feature enhancing함

 

D: B처럼 한다음 PANet-style 로 multi-scale feature 서로 interaction 되도록 feature enhancing함

 

E: s5에만 Intra-scale interaction 되도록 해주고 multi-scale feature fusion은 convolution 기반으로 함

 

최종적으로 채택한 구조는 E고 아래와 같음

 

 

 

multi scale features 다 보니 scale이 안맞을 수 있는데 이럴때는 nearest neighbor interpolation 이 적용되거나 strided convolution으로 맞춰줍니다.

 

 

transformer encoder를 좀만 더 뜯어보면,

 

 

position embedding은 2d sincos로 하는 걸로 보이고

 

query, key에 더해줌

 

 

 

A, B, C, D, Ds5(D구조에서 s5만 Intra-scale feature interaction되게끔 feature enhancing 한거), E구조를  DINO-Deformable-R50 에 적용했을때의 성능을 Table3 를 통해 확인할 수 있다.


B 구조로 실험해보니 Intra scale이 효과적이긴 한 것을 알 수는 있으나 AP 1.9 오르는 거 치고 Latency 증가폭이 큼을 알 수 있음


C 구조로 실험해보니 +Inter scale 이 효과적이긴 하나 Latency 증가폭이 너무 큼

D 구조로 실험해보니 scale 별로 모조리 transformer encoder 에 입력할 필요 없이 scale 별로 각각 입력해주고 inter scale(=multi scale) features는 convolutional 하게 enhancing 해줘도 되겠다는 가능성 생김

Ds5 구조로 실험해보니 s5만 transformer encoder에 입력해주어서 intra scale interaction 하게끔해서 feature enhancing 해줘도 충분하고 오히려 AP도 오르고 Latency 면에서도 크게 이득을 볼 수 있음을 알 수 있음

E 구조로 실험해보니 multi scale feature enhancing을 convolution 기반으로 좀만 더 신경써서 해주니까 Latency 는 크게 증가하지는 않으면서 AP는 1 정도 올랐음

 

최종적으로 Encoder 는 E로 채택!

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함