https://arxiv.org/abs/2309.03893
Abstract : object detection 데이터셋을 만들기에는 너무 labeling cost 도 많이 들고 복잡하고, diversity가 부족하다. 따라서 이를 해결하기 위해 DiffusionEngine 을 제안한다. DiffusionEngine은 data scaling up engine으로 single stage로 이를 이룰 수 있게 만든다. pretrained diffusion과 본 저자가 제안한 Detection-Adaptor로 이뤄져 있으며 다양하게 생성할 수 있게 한다. 여기서 Detection-Adaptor는 implicit한 semantic 정보와 위치 정보를 align 하는 것을 학습하여 더 좋은 bounding box 예측을 이룰 수 있게 한다. 추가적으로 이걸 이용해서 데이터셋 공개했다.
# Method
## Preliminary
Latent Diffusion에 대해서 간단한 설명
Forward diffusion : \( z_{t} = \alpha_{t}z_{0} + \sigma_{t}\epsilon \quad \epsilon \sim \mathcal{N}( \epsilon | 0, I ) \)
Denosing step (1step) : \( z_{t-1} = \epsilon_{\theta}(z_{t},t,c_{p}) \)
where, \(c_{p}\) 는 \( \tau_{\theta}(P) \) 로 text prompt 의 embedding을 의미.
condition 을 주는 방식 : \( Attention(Q,K,V) = Attention(\phi (z_t) , c_p , c_p ) \)
\( \phi \) 는 U net의 visual representation
## LDM에서 location information
이미 LDM feature에 encoding 되어 있다고 주장. denosing stage를 거치면서 object를 파악할 수 있게 됨. 이는 Figure 3 (c)에 나타나있음.
## LDM에서 semantic information
visual 과 textual 간의 cross attention 할 때 text condition의 이미지에 대한 정보가 있다. 이는 다른 여러 논문들에서 이미 증명이 많이 됨. 그래서 본 논문의 저자는 모든 time step에서 각 객체의 text prompt에 대한 cross attention map의 평균을 다 계산을 하고 이에 대해 otsu thresholding을 거쳐서 binarize 한다. 이는 Figure 3(d) 에 나타나있음.
## Detection을 하기 위해서 Cross attnetion이 다 일까?
바로 위에서 언급한 cross attention을 하고 이에 대해서 binarize 하는 거 (BCA 라고 이제부터 칭함)에서 bounding box 를 치면 Figure 3 -(a,b) 와 같은 결과가 나온다. 그래서 이에 대한 문제점을 정리한다.
1) Instance Merging : BCA는 instance에 대한 이해보단, patch-wise로 text prompt와 유사한지를 반영하는 것이다. 그래서 이는 같은 카테고리에서 두 객체를 하나로 합치는 merging 현상이 일어나는 것이다.
2) Instance chunking : BCA는 다른 객체에 의해 부분적으로 가려진 경우 이를 여러부분으로 chunk 한다. (커튼 부분 보면 될듯 - figure가 개인적으로 잘 안나타나있는 것 같음)
3) Forcing Detect : BCA는 물체가 실제로 존재할 때만 해석 가능한 결과를 낸다. 만약에 text prompt가 생성하는데 실패를 하면 BCA detection은 이상한 noise 결과를 내놓는다.
4) Missing Detect : text에 표현되지 않은 이상한 물체가 있을 때, missing detection을 이뤄낸다.
따라서 이를 해결하기 위해, Detection Adapter를 제안한다.
# Learning Detection Adapter
## Adapter Architecture
그림에서 위에 부분은 Adapter를 훈련시키는 과정이다. 각 이미지는 LDM의 마지막 이미지 생성 단계를 시뮬레이션하기 위해 1-step 노이즈 추가 및 제거를 거침. Adaptor는 Detection 하기 위해, 각 U-Net에서 추출된 pyramid feature를 잘 활용하는 방법을 학습하게 됨. 그림의 두번째 부분은 DiffusionEngine으로 Data 를 scaling up 하는지 나타내는 부분. reference image 는 random number k step 만큼 oise를 더하고 denoising 하는 부분이 된다. 그리고 low confidence를 갖는 애들은 버린다.
detection frame work는 사실 아무거나 써도 되는데, 여기선 DINO 썼다고 한다. 그래서 결국 이 모듈이 예측을 하는 것은 bounding box \( \hat{y} \) 이다.
## Adapter Optimization
Detection Adaptor를 optimize 하기 위해, LDM feature와 GT detection results 간의 align 한 pair 들이 필요하다. 그냥 다 pair 한 이미지를 생성하고 추출하는 것 대신, 여기선 마지막 denosing 단계를 시뮬레이션 하여 LDM의 feature를 얻는 adpater 학습을 위한 기존 detection benchmark를 활용한다. 이에 대해서 설명을 하면
이미지 \( x \) 와 GT label \(y\)이 주어졌을 때, encoder로 첫번째 feature \( z_{0} \) 으로 latent representation을 얻고, 이에 대한 사이즈는 H/8 x W/8 이다. 그런 다음, t=1 에 최근 noisy sample z_1 을 얻기 위해 single forward step 이 수행된다. 그리고 마지막으로 z_1과 time step t를 U-Net의 input으로 주어 single step 의 denosing을 수행하여 마지막 이미지 생성 단계의 feature와 유사한 중간 feature를 얻을 수 있다. 따라서 이를 detection framework에 넣으면 bounding box label에 대해서 reconstruction을 하게 되고 이는 간단하게 \( L_{DE} = L_{DET}(y, \hat{y} \) 로 나타내진다.
여기서 의문! 왜 하필 single step 이냐? => 걍 하다보니 그렇다더라 (경험적이라고 함)
## Discussion
single one-step을 할 때의 장점들을 말함. 1) corresponding 한 이미지 description이 없어도 됨. 즉, 이미지와 detection label만 있어도 된다. 2) original image의 구성과 layout은 denosing 후에도 잘 보존이 되며 이는 실제 annotation의 신뢰성을 보장한다. 3) 기존에 라벨이 있는 detection benchmakr dataset을 직접 사용하여 추가적인 데이터 수집과 labeling cost가 없다.
# Scaling up data with DiffusionEngine
Image : 이미지 생성은 LDM과 동일. k 번 noise를 입히는 step을 거쳐서 이를 text embedding에 따라 denoising 함. layout 유지할 필요 없어서 제약 없음
Label : 마지막 denoising step 에서 feature 추출하고 이를 adapter 에 넣어서 생성한 이미지에 대한 detection label 추출, confidence threshold는 0.3 으로 필터링.
Diversity : seed 나 encoding 비율, guidance scale, text prompt 를 수정해서 다양성 보장.
Prompt : 캡션이 없는 상황에서 "A [domain] , with [cls-a], [cls-b], ... in the [domain]" 으로 준다. cls 같은 경우는 해당 이미지의 객체를 표현하고 domain 은 photo나 clipart와 같은 것들을 말한다.
댓글