https://arxiv.org/abs/2309.03893
DiffusionEngine: Diffusion Model is Scalable Data Engine for Object Detection
Data is the cornerstone of deep learning. This paper reveals that the recently developed Diffusion Model is a scalable data engine for object detection. Existing methods for scaling up detection-oriented data often require manual collection or generative m
arxiv.org
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 :
Denosing step (1step) :
where,
condition 을 주는 방식 :

## 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
## Adapter Optimization
Detection Adaptor를 optimize 하기 위해, LDM feature와 GT detection results 간의 align 한 pair 들이 필요하다. 그냥 다 pair 한 이미지를 생성하고 추출하는 것 대신, 여기선 마지막 denosing 단계를 시뮬레이션 하여 LDM의 feature를 얻는 adpater 학습을 위한 기존 detection benchmark를 활용한다. 이에 대해서 설명을 하면
이미지
여기서 의문! 왜 하필 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와 같은 것들을 말한다.
댓글