티스토리 뷰
https://developer0hye.tistory.com/713
백본을 알아봤으니 이제 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
그럼 어떻게 디자인이 된걸까
논문의 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로 채택!
'Deep Learning' 카테고리의 다른 글
20240519 Colab 에서는 onnxruntime cuda provider 가 동작하지 않는 거 같다. (0) | 2024.05.19 |
---|---|
RT DETR의 Uncertainty-minimal Query Selection 은 무엇일까 (0) | 2024.04.21 |
RT DETR의 백본은 무엇일까 (0) | 2024.04.16 |
action detection 이랑 tracking 논문/코드 찾아보는 중 (0) | 2024.04.13 |
[Python] onnxruntime gpu(device) 에 업로드된 데이터 cpu(host)로 다운로드 안하고 바로 inference 하는 방법 (0) | 2024.04.11 |
- Total
- Today
- Yesterday
- LCA
- 가장 긴 증가하는 부분 수열
- ㅂ
- 조합
- cosine
- 백준 11437
- 백트래킹
- 순열
- 자료구조
- 파이참
- 문제집
- 백준 11053
- 이분탐색
- 백준 1766
- FairMOT
- 단축키
- 백준
- PyCharm
- 인공지능을 위한 선형대수
- C++ Deploy
- MOT
- Lowest Common Ancestor
- 위상 정렬 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |