InstantDrag: Improving Interactivity in Drag-based Image Editing
InstantDrag: Improving Interactivity in Drag-based Image Editing 논문 리뷰
Sep 22, 2024
본 논문에서는 drag라는 interaction을 통해서 입력으로 받은 이미지를 editing한다.
drag라는 에디팅 방식은 실용적이고 좋은데 기존의 방법들은 이걸 complex한 optimization 테크닉으로 풀어내기 때문에 근본적으로 속도가 느려서, interactivity가 안좋게 느껴진다. 하지만 본 연구는 그와 다르게 optimization-free하기 때문에 속도도 빠르고, 오직 이미지와 드래그 정보만을 입력으로 받는다. 두 개의 네트워크로 구성되는데, 1) FlowGen : drag-conditioned optical flow generator 2) FlowDiffusion : optical flow-conditioned dffusion model
본 연구는 현실의 비디오 데이터셋으로부터 Motion dynamics 지식을 습득한다. 데이터셋을 motion generation과 motion-conditioned image generation으로 쪼개어서.
drag 자체가 interactivity를 위한 솔루션이고, 상호작용의 용이함을 위해서는 real-time인지도 중요하기 때문에 속도라는게 꽤 중요한 contribution이 아닐까 생각한다.
네가지 주요 요소를 고려했다.
1) speed 2) real image editing quality 3) text prompt 필요성을 제거 4) 움직일 수 있는 영역을 지정하기 위해 유저가 직접 마스킹을 해야하는 필요성 제거
구체적인 방법은 이렇다.
앞서서, optical flow는?
이미지 내 물체나 픽셀의 움직임을 추적하고 계산하는 방법.
128*128 이미지의 optical flow를 구한다고하면 128*128짜리 이미지 두장이 나온다. 각 이미지의 pixel 값은 그 픽셀이 x, y방향으로 얼마나 이동했는지를 나타낸다. 벡터로 표현한다고 볼 수도 있다.
우선 전체적인 흐름을 설명하면, [입력 이미지, Drag signal, Drag에 따라 변화한 이미지] 데이터셋이 필요하다.
- Drag에 맞게 변화한 이미지와 원본 이미지가 있으면 이걸 사용해서 optical flow를 얻을 수 있다.
- 이걸 GT optical flow로 둔다. 그리고 원본 이미지와 drag-instruction(특정 부분에만 화살표가 있는 것, sparse flow)를 입력으로 받아 dense optical flow를 출력해내는 모델을 학습한다 - FlowGen
Pix2Pix 같은 모델의 성공 사례를 보고, 이것도 one-step에 충분히 잘 될 수 있겠다는 판단을 했다고 한다.
- 학습은 GAN이기 때문에 reconstruction loss와 Discriminator loss로 이루어진다.
- 그리고 원본 이미지 + optical flow(inference 과정에서 드래그 입력으로 부터 FlowGen이 만들어낸)를 가이드로 사용해서 변화한 이미지를 만들어내는 Diffusion model을 학습한다 - FlowDiffusion
- Pix2Pix를 참고했다고 했지만, optical flow가 컨디션으로 들어가는 방법은 다르다. text prompt이외의 추가적인 condition으로 들어가는게 아니라(이렇게하면 cross attention에 사용됨), U-net의 입력단에서 원래 이미지와 concat해서 들어가도록 했다.
원래는 U-net이 4채널 latent noise만 입력으로 받는다고 하면 여기서는 추가적으로 4채널 이미지, 2채널 optical flow를 합쳐 10-channel input을 받게된다.
컨디션을 주는 방식이 직관적으로 어떤게 더 좋은건지 추측하는 방법이 있을까? 여기서는 “our edit signal is encoded in additional channels for the flow dimension, not in the text prompt” 라고 표현한다.
drag 기반 편집에서 텍스트는 애초에 사용하지 않기 때문에 null prompt 사용 → 연산이 가벼워짐
뭐 다 그렇지만, 문제 중 하나는 원본-드래그-변화한 이미지 triplet curated 데이터셋이 그렇게 많지 않다는 것이다. → video dataset을 쓰기로 했다!
비디오를 임의 window size로 잘라서 시작-끝 이미지를 사용한다(두 이미지에서 optical flow 얻는건 FlowFormer라는 모델)
근데 단순히 생각해봐도 이게 쉽진 않다. 여기서 좋은 샘플링 방법이 뭔지 고민 많이 했다고 한다.
segmentation masking 처리해서 핵심 물체의 optical flow만 가져왔다.
그리고 Drag editing 이후에도 배경은 똑같이 유지되길 바래서 비디오 전처리 과정에서 몇가지 추가했다.
결과
우선 다른 컨디션을 사용하지 않았을 때 속도가 월등히 빠르다. 성능은 업치락뒤치락 하면서도
Inversion이 없는 과정이니 디테일이 유지되면서도 속도가 빠르다. 비디오데이터를 활용하겠다는 전략 자체가 좋았다.
Share article
Subscribe to our newsletter