반응형
Notice
Recent Posts
Recent Comments
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
관리 메뉴

Xenon54의 잡다한 이야기

AI가 그림그려주는 프로그램 Stable Diffusion을 알아보자! (1) 본문

AI 연구실

AI가 그림그려주는 프로그램 Stable Diffusion을 알아보자! (1)

Xenon54 2023. 7. 21. 01:09
반응형

오늘은 한창 핫하던 그림그려주는 AI 프로그램을 알아보겠습니다.

아마 이 프로그램이 대중적으로 유명해지게된 계기는 노벨AI 사이트에 내장되어있는 그림생성기능때문에 유명해진걸로 알고있습니다.

그때당시 충격적이었던게, 기존에도 프로그램이 있기는 했지만 그렇게 성능이 좋은편이 아니었고, 속도도 느리다보니 아는 사람은 알지만 대부분은 그런게 있는지도 모르는 분들도 많이있었고, 알고있어도 그런게 있다 라는 정도로만 아시는 분들이 많이 있었습니다.

그 뒤로 노벨AI에서 그림나오는걸 보니 성능이 상당히 좋아졌고, 사이트가 유명해지고 얼마 안지나서 해당사이트가 제로데이 취약점으로 해킹을 당하면서 아주 뜨거워졌었죠.

그때 알아낸것이 노벨AI 의 그림생성 프로그램이 바로 Stable Diffusion 이라는 사실이 알려지게 되었습니다.

이 프로그램을 간단하게 설명하면 A 라는 노이즈를 준다음 이건 B라는 그림이 나온다! 라고 학습시킨거라고 보면되겠습니다.

위에 보이는 노이즈 사진을 복원한다! 라는 느낌으로 작동한다 보시면 되겠습니다.

 

자 그럼 간단하게 이미지를 한번 생성해볼까요?

기본적으로 여러분들이 Stable Diffusion WebUI 를 설치하시면 이런 화면이 보일겁니다.

위에 보이는 Stable Diffusion checkpoint 는 저와 다를수있습니다. (이 글을 보시는 분들이면 이미 아실거라 생각합니다)

 

자 그럼 간단하게 한번 생성해볼까요?

검은색 머리카락을 가진 여성을 생성해봅시다.

기본적으로

위 이미지 처럼 2개의 입력칸이 보일겁니다. 그중에 위에칸에 검은색 머리카락을 가진 여성이 나올수있도록 Black_hair, 1girl 2개의 단어를 입력합니다.

그리고 바로옆에 생성버튼을 누르면 이미지 생성이 시작됩니다.

저 같은 경우는 이런 그림이 나왔네요

이 프로그램은 위쪽 입력칸은 "긍정" 프롬프트라고 해서 이 프롬프트에 써진 내용이 해당되는 이미지를 만들도록 조정합니다. 반대로 아래있는 프롬프트는 "부정"프롬프트라고 해서 이 프롬프트에 써진 내용이 해당되지 않도록 이미지를 조정합니다.

팁으로 만약에 여러분이 여기서 이미지를 생성하는데 자꾸 19금 이미지가 나오게되시는 경우 "부정" 프롬프트에 nsfw 라고 집어 넣으시면 상당부분 해결되실겁니다. 이를 무시하고 계속 자주 19금 이미지가 나오는경우 사용하시는 이미지모델을 바꿔보시는걸 추천드릴께요.

자 그럼 위에 생성된 그림을 보면 정확하게 검은 머리카락을 가진 1명의 여성이 생성되었습니다.

그런데 본인이 위 그림처럼 짧은 머리카락은 싫어! 긴 머리카락이 좋아! 라고 하시면 2가지의 방법이있습니다.

첫번째로 "긍정" 프롬프트에 긴 머리카락 을 입력한다 (long hair)

두번째는 "부정" 프롬프트에 짧은 머리카락 을 입력한다 (short hair)

그럼 2가지 방법을 전부 해보도록 하겠습니다.

1. "긍정" 프롬프트에 long hair 를 넣은경우

2. "부정" 프롬프트에 short hair 를 넣은경우

자... 여러분이 보시기에도 차이가 있죠?

지금 저같은 경우는 여러분들에게 비교를 좀더 편하게 하실수 있도록 베이스를 고정해서 사용하고있어서 실제로 해보시면 좀 다르게 나오실수도 있습니다.

자 그럼 이미지가 다르게 나온 이유를 간단하게 설명드리겠습니다.

이 Stable Dissusion 이 작동할때 긍정, 부정 프롬프트를 확인하고 이에따라 이미지를 생성하는것은 맞지만, 각 태그(속성) 별로 가중치 라는것이 있습니다.

저희는 단지 머리카락의 길이만 정의했습니다. 그러나 이 프로그램이 동작할때는 긴 머리카락, 짧은 머리카락 태그에 따라오는 부가적인 속성들이 있습니다.

그러다보니 긍정 프롬프트에 긴 머리카락을 추가했을때 랑 부정 프롬프트에 짧은 머리카락을 추가했을때, 이미지에 일부 가중치가 달라져서 다른 이미지가 생성된것입니다.

그럼 좀 극단적인 예시를 보여드리겠습니다.

이건 긴 머리카락 속성태그를 엄청 강조시켰을때 나온 이미지 입니다.

이번꺼는 부정프롬프트에 짧은 머리카락 속성을 엄청 강조시켰을때 나온 이미지입니다.

아까 좀 전에 강조전에 이미지와 비교해서 확실하게 차이가 보이실겁니다.

저희는 분명 머리카락 길이에관한 태그만 건드렸는데, 긴 머리카락 태그의 경우 장소가 변해버렸고, 짧은 머리카락 태그의 경우 캐릭터의 의상에 변경점이 생겼습니다.

이런식으로 여러분이 이미지를 생성하실때 각 태그들의 가중치를 어느정도 염두해두시면서 만들면 좋습니다.

물론 처음에는 이걸 찾기가 힘들수있지만, 여러번 하시다보면 감을 잡으실수 있으실겁니다.

 

그럼 이제 프롬프트는 어느정도 설명을 드렸으니 이번에는 바로 밑에 있는 옵션을 좀 설명드리겠습니다.

프롬프트 입력창 바로밑에 보시면 Sampling method 랑 Sampling steps 2가지가 보이실겁니다.

이것도 간단하게 설명하면 Sampling method 는 이미지를 어떤방식으로 다듬을 것인지 를 정하는거라고 생각하시면 되고, Sampling steps 은 이미지를 생성하는데 몇번 계산을 할지입니다.

그럼 예시를 한번 보여드리겠습니다. 이번에도 똑같이 이미지베이스는 고정한 상태로 Sampling method만 바꿔보겠습니다. 태그는 white hair, 1girl, student, long hair 4가지 태그를 긍정 프롬프트에 넣고, 부정프롬프트에는 19금 이미지 방지를 위해 nsfw 하나만 입력하고 돌려보겠습니다.

Euler a 를 사용했을때 이미지

DPM++ 2M SDE 를 사용했을때 이미지

DPM++ 2M SDE Karras 를 사용했을때 이미지

확실히 이미지가 달라졌죠? 각 메소드 별로 성능도 다르고, 이미지 결과물의 방향도 다르기 때문에 이부분은 여러분들이 써가면서 원하는걸 사용하시면 됩니다.

자 그럼 이번에는 스탭수 비교를 보여드리겠습니다. 20번, 28번(기본값), 60번, 100번, 150번 총 5장의 이미지를 순서대로 보여드릴께요.

태그는 그대로하고 메소드는 DPM++ 2M SDE Karras 를 사용했습니다.

스탭수 20회일때 이미지

스탭수 28회일때 이미지

스탭수 60회일때 이미지

스탭수 100회일때 이미지

스탭수 150회일때 이미지

모든 설정은 동일합니다. 단지 스탭수만 바꾸었을뿐입니다.

기본적으로 스탭수가 올라가면 이미지를 더 천천히 세분화해서 나누어 생성한다고 생각하시면 편합니다.

따라서 아까 위에 예시로 보여드린 노이즈에서 천천히 따라 올라오다보니 동일한 설정값인데도 불구하고 이미지가 달라지는것입니다.

그리고 이는 이미지마다 조금 차이가있는데, 제가 여기에서 보여드리는 이미지는 전부 2D 이미지 입니다.

기본적으로 2D 이미지는 실제 사람과는 차이가있죠. 사람을 그릴때 일부 디테일부분을 제거하고 그리는것이 2D 그림의 특징입니다.

따라서 2D 이미지는 스탭수가 너무 높으면 이미지가 고장나는 경우가 자주있습니다.

실사 이미지는 반대로 스탭수를 조금 높이시면 이미지가 좀 잘 나옵니다.

 

그러니 여러분들도 사용하실때 본인의 취향에따라 조정하시면서 사용하시면 좋을거같습니다.

나머지 기능은 다음글에서 설명드리겠습니다!

반응형
Comments