Huggingface Diffusers를 이용해서 만든 Diffusion 모델로 이미지 생성하기

김희규
5 min readAug 15, 2022

허깅페이스가 NLP 외에도 컴퓨터 비전과 관련된 라이브러리도 제공하고있는데 최근에 diffusers라는 라이브러리가 나왔습니다. 이를 이용해서 간단히 이미지 생성 모델을 만드는 예제도 공개가 됬는데 이를 사용해보았습니다.

https://developer.nvidia.com/blog/improving-diffusion-models-as-an-alternative-to-gans-part-1/

Diffusion 모델은 열역학에서 아이디어를 따온거라고 하는데, 원본 데이터에 점점 노이즈를 추가하고 최종적으로 완전히 노이즈가 되어버린 데이터를 다시 원본 데이터로 복구하는 방식으로 학습합니다. 학습 이후에는 노이즈를 생성해서 모델에 다시 넣으면 모델이 학습한 데이터의 분포를 따르는 결과물이 생성됩니다.

OpenAI의 Dall-E 2와 구글의 Parti가 사용한 Diffusion 모델은 GAN보다 뛰어난 퀄리티와 다양한 이미지를 생성해면서도 학습은 비교적 쉽고, 대신 생성이 더 오래걸린다는 단점이 있습니다. 오래걸리는 이유는 노이즈를 모델에 넣으면 곧바로 output으로 결과물을 내보내는게 아니라. 노이즈를 조금 제거한 output을 내보내기 때문입니다. 정해진 step(여기서는 1000회)만큼 노이즈 제거를 반복해야하기 때문에 그만큼 시간이 소요됩니다.

https://developer.nvidia.com/blog/improving-diffusion-models-as-an-alternative-to-gans-part-1/

허깅페이스 diffusers 예제 실행해보기

허깅페이스 diffuers training 예제에서는 스미소니언 나비 데이터셋 중 1000개만 샘플링한 데이터를 이용해서 학습을 진행합니다.

코드를 따라서 50에폭을 학습시키고 10에폭마다 결과물을 확인해봤습니다.

10에폭

나비의 형상이 나타나고 있습니다. 아직 노이즈도 많이 보이고 색상도 어둡네요.

20에폭

다양한 색상으로 만들어지지만 아직 노이즈가 많이 보입니다.

30에폭

색상이 화려해졌습니다.

40에폭

노이즈도 많이 사라지고 색상도 다양하고 모양도 일정합니다. 약간 색상이 탁해졌네요.

50에폭

색이 화려해지고 다채로워졌습니다. 더듬이쪽에 주로 노이즈가 발생하는 것 같아서 아쉽네요. 아무래도 학습 데이터가 1000개밖에 없다보니 그런 것 같습니다. 그래도 중간중간 괜찮은 결과물들이 보이네요.

다른 데이터셋으로

이번에는 다른 데이터로 해보겠습니다. 캐글의 animal-faces 데이터셋이 있는데요, 이 데이터를 이용해서 동물 얼굴들을 만들어보겠습니다. 이미지가 16000장가량 되기 때문에 빠른 학습을 위해 생성하는 해상도를 64x64로 줄였습니다.

10에폭
20에폭
30에폭
40에폭
50에폭

얼굴이 찌그러지는 등 디테일한 부분이 아쉽긴한데 그래도 특징이나 무늬는 잘 나타나네요. 이거 말고도 픽토그램 데이터셋으로도 해봤는데 이걸로는 잘 안됬습니다. ㅠㅠ 그래도 상당히 쉽고 재밌네요, 모델을 키우거나 학습 방법을 개선하면 정말 좋은 퀄리티의 이미지가 생성될 것 같습니다.

--

--

김희규

나는 최고의 선수다. 나를 최고라고 믿지 않는 사람은 최고가 될 수 없다.