-
[코드 분석] GLIDE 코랩 데모 : Text-guided Image Editing(feat. in-painting)Machine Learning/Multimodal Learning 2022. 5. 24. 02:38728x90
지난 포스트에서 DALL-E 2의 디코더로 사용된 GLIDE에 대해 알아보았습니다.
Diffusion models을 Text-to-Image에 적용했으며, 그 결과 텍스트를 잘 반영하는 사실적인 이미지를 생성했습니다.
추가로 텍스트를 기반으로 이미지의 부분적인 영역을 편집하는 기능을 소개했습니다.
이번 포스트에서는 해당 기능에 대한 예제 코드를 분석하며 코랩을 이용한 데모도 소개하겠습니다.
[ paper | code ]
Recap
저자들은 GLIDE 모델의 악용(DeepFake 등)을 막기 위해 필터링된 데이터로 학습한 작은 모델을 공개했습니다. 논문의 이미지를 생성한 original 모델은 3.5B(35억) 파라미터를 가지고 있지만 GLIDE (filtered) 모델은 385M(약 4억) 파라미터를 가지고 있습니다. 따라서 데모 결과가 논문의 결과보다는 다소 품질이 떨어질 수 있지만, 이를 기반해 다양한 연구를 위한 프로토타입 모델 개발 및 테스트를 할 수 있다는 점에서 의미가 있다고 생각합니다.
GLIDE의 inpainting 과정은 크게 두 부분으로 나눠서 생각할 수 있습니다.
1. Base model ( Text-conditional diffusion model )
텍스트를 Transformer에 포워딩해 feature를 얻고, 이를 masked image와 함께 ADM 모델의 인풋으로 넣어줍니다. 그 결과 텍스트 정보를 반영한 64x64 이미지를 얻습니다.
2. Upsampling diffusion model
Base model이 생성한 이미지를 upsampling diffusion model을 이용해 256x256으로 해상도를 높입니다.
(자세한 설명은 이전 포스트 참고)
Quick Tutorial [ link ]
GLIDE의 GitHub을 참고하면, 아래와 같이 코랩을 이용한 inpaint(text-guided image editing) 데모 외에도 텍스트 기반 이미지 생성 데모도 실행해 볼 수 있습니다. 우선 inpaint 예시와 함께 전체 과정을 간략하게 살펴보고, 이후에 코드에 대한 분석을 이어가겠습니다.
1. 수정할 이미지 업로드
수정을 원하는 이미지를 위와 같이 코랩에 업로드합니다.
이번 예시에서는 GLIDE 깃헙에 있는 grass.png 이미지를 업로드했습니다.2. 텍스트 입력
7번째 셀의 prompt를 원하는 문장으로 수정합니다. 이번 예시에서는 "a horse in a field"를 prompt로 주었습니다.
# Sampling parameters prompt = "a horse in a field" batch_size = 1 guidance_scale = 5.0
3. 모든 셀 실행 ( Base model + Upsampling model )
각 셀에 대한 설명에 앞서, 우선 결과를 확인하기 위해 아래와 같이 [런타임] > [모두 실행]을 눌러 모든 셀을 실행합니다.
잘 작동한다면, 우선 base model과 upsampling model을 불러옵니다.
이후 grass 이미지에서 수정을 원하는 부분에 mask를 씌운 이미지를 확인할 수 있습니다.그 아래 셀에는 base model이 prompt를 기반으로 64x64 해상도로 수정한 이미지가 출력됩니다.
이후에는 upsampling model을 이용해 256x256 해상도로 화질을 높인 이미지가 출력됩니다.
위의 과정을 정리하면 아래와 같습니다.
4. Resampling
"Sample from the base model", "Upsample the 64x64 samples"이 적혀있는 마지막 두 셀을 다시 실행하면 전과 다른 이미지가 생성됩니다. 여러 번 반복할 수 있으며, 아래 이미지는 "a horse in a field"를 반영하여 원본 이미지를 편집한 결과들입니다.
5. 다른 prompt에 대한 결과
whale와 같이 field와 자주 나오지 않는 단어에 대해서도 납득이 갈만한 이미지를 생성합니다.
6. 다른 mask region에 대한 결과
원하는 영역을 지정해 이미지를 편집할 수 있습니다.
하지만 작은 모델의 한계로, 자세히 보면 사실성은 조금 떨어집니다.7. 다른 image에 대한 결과
들판만 있던 원본 이미지에 의자(위)와 텐트(아래)를 추가한 후, 그 이미지를 다시 input으로 줘서 수정한 이미지들입니다. cherry-pick 한 결과들로, 두 개 이상의 object에 대해서는 다소 성능이 떨어지는 것을 확인했습니다.
하지만 아래 텐트 그림들처럼 텍스트를 꽤나 잘 반영한 이미지들도 생성되었습니다.
GLIDE 논문에서 보여준 복잡하고 긴 문장을 이처럼 나눠서 순차적으로 수정하는 것도 가능함을 알 수 있습니다.ing..
관련 포스트
[논문 리뷰] GLIDE: Towards Photorealistic Image Generation and Editing with Text-Guided Diffusion Models
[논문 리뷰] DALL-E 2 : Hierarchical Text-Conditional Image Generation with CLIP Latents
728x90'Machine Learning > Multimodal Learning' 카테고리의 다른 글