일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- StableDiffusion #Unity #Inspector #Custom #WordRank
- jpg
- ue5
- NDK
- 1d returned
- Android is not a valid platform
- vscode
- 이미지 엑스 박스
- SDK
- collect2.exe
- Check that the SDK is installed properly
- 코딩 테스트 #leetcode #two sum #coding test
- LNK1168
- AndroidStudio
- Today
- Total
안경말이
[Stable Diffusion 활용] project 진행 전 학습 사항 본문
[목차]
1. Stable Diffusion 설명
2. Stable Diffusion 실습
3. Project 설계
4. 기타
1. Stable Diffusion 설명
1.1 Stable Diffusion이란?
: 2022년 8월 말에 출시된 text-image 모델로, input된 텍스트에 따라 이미지를 생성하는데 사용됩니다. 텍스트에서 이미지를 생성해주는 txt2img 기능과, 이미지에서 또 다른 이미지를 만들어주는 img2img, 세부 이미지를 변경하는 inpainting과 outpainting 기능 등을 사용할 수 있으며 오픈 소스로 무료로 사용도 가능합니다.
1,2 Trainning & Data set
: Stable Diffusion은 웹에서 스크랩한 데이터 셋인 LAION-5B에서 가져온 이미지와 캡션 쌍으로 훈련되었습니다. 이와 같아야 학습 시 discriminator part를 통해 숫자로 변환된 이미지를 정답 캡션(or description)에 맞춰 학습할 수 있기 때문입니다.참고로 학습된 이미지의 크기는 512x512로 출력 이미지가 해당 해상도일 때 최적의 결과를 얻을 수 있습니다.
1.3 Latent space
: Latent space는 데이터를 n가지 특성에 따라 분류해놓은 n-dimensional space로, 임베딩 공간, 잠재적 공간이라고도 합니다. Stable Diffusion은 이러한 차원이 굉장히 많이 모여 text를 입력했을 때 원하는 이미지를 출력할 수 있도록 latent space를 구성하게 됩니다.
즉, 데이터를 학습하며 데이터 텍스트 속 객체 단위에 대한 latent space를 구성하는 것인데, 밑에서 예시로 보여드릴 "snowman in the rainbow"를 예시로 들면 nlp 기법으로 tokenize를 해 snowman, rainbow을 적절한 latent space에 배치하게 되는 것입니다.
1.4 Generation(Diffusion)
: 기존 이미지 생성은 대부분 GAN에 이뤄졌다면, Stable Diffusion은 이름과 걸맞게 diffusion model을 통해 이미지를 생성하게 됩니다. 열역학 법칙에서 살펴보면 '자연계에서 엔트로피는 증가하는 방향으로 변하며, 무용한 상태로 변했을 때 다시 되돌릴 수 없다'란 말이 있습니다. diffusion model은 이러한 법칙에서 착안되었으며, 조금 다르 게 시작 지점으로 돌아가는 계산법을 학습하는 것을 목표하는 모델입니다.
컴퓨터는 이미지를 숫자 배열의 형태로 인식하게 되며, 이러한 배열은 조건부 행렬 연산의 연속을 통해 noise image로 바뀔 수 있습니다. 여기서 noise화 시킨 행렬 연산을 안다면, 반대로 본래의 이미지로도 돌릴 수 있습니다. diffusion model이 바로 이러한 noise -> image로 변환하는 연산(inverse markov)을 통해 이미지 생성 시 새로운 이미지를 만들게 되는 것이죠. 즉, 학습 과정과는 달리 해당 모델을 이용할 때는 noise부터 시작하게 되는 것입니다. input 된 text 값에 따라 속하는 latent space를 탐색하고 이에 따라 연산식이 달라지므로 text2img의 결과값으로 다양한 이미지를 생성할 수 있게 됩니다.
2. Stable Diffusion 실습
2.1. webUI 기반 실습
: 차후 진행하게 될 프로젝트에서 어떠한 모델을 사용할지 결정해야 했기에 Dalle2와의 성능 비교를 위해 가볍게 실습을 진행하게 되었습니다. WebUI 기반으로 Stable Diffusion을 colab으로 돌려보았으며 세부 출처는 하단 '4. 기타' 에 모두 표기해두었습니다.
링크로 들어가면 run을 돌리는 것만으로도 Stable Diffusion을 사용할 수 있는데 몇 가지 확인하셔야할 것이 있습니다. 첫번째로 User_token 입력입니다.https://huggingface.co/CompVis/stable-diffusion-v1-4 에서 회원 가입 후, Settings>Access Tokens>New token에서 roll read로 토큰을 생성하면 "hf~"로 시작하는 문자열을 갖게 되는데 그게 토큰입니다. 해당 토큰을 colab으로 돌아와 user_token: 에 넣어주시면 됩니다.
하다보면 위 과정에서 error 403: forbidden 에러가 나실 수 있는데, 그 때에는 https://huggingface.co/CompVis/stable-diffusion-v-1-4-original 에 약관 동의를 묻는 부분이 있는데 그 부분에 체크 후 Access repository를 눌러 주시면 해결 됩니다.
두 번째는 이 부분인데, 하단과 같은 마지막 줄을 실행하게 되면,
!COMMANDLINE_ARGS="--share --gradio-debug --gradio-auth me:qwerty" REQS_FILE="requirements.txt" python launch.py
다음과 같은 결과가 뜨게 되는데, 이 중 local or public URL로 들어가 다운없이 바로 stable diffusion model을 사용하실 수 있습니다. 링크에 들어가면 id/pw를 입력하는 란이 나오는데, 그 부분에는 다음의 사진에서 표시해뒀듯 me/qwerty를 입력해주시면 됩니다.
링크에 접속 완료했다면, 이제 실습을 진행하시면 되는데, txt2img, img2img... 여러 기능을 택하고 Prompt에 텍스트를 입력해 이미지를 생성할 수 있습니다. 몇 가지 팁이 있다면 Dalle2와 동작 방식이 유사하므로 dalle2 prompt book(https://dallery.gallery/the-dalle-2-prompt-book/)에 나와있는 방식을 참고하여 문장을 쓰면 더욱 효율적이며, "중심 텍스트, 특징, 특징..."이런 식으로 텍스트를 입력하여 이미지 생성 결과값을 얻을 수 있습니다. 그 외에도 batch size를 늘려 한번에 이미지를 여러 가지 생성하거나 hyper realistic, trending, 8k, camera lens 를 붙여 사실적인 이미지를 얻을 수 있는 방법 등 여러가지가 존재합니다. 이와 같이 Stable Diffusion에서 생성한 좋은 결과의 이미지의 prompt이자 팁들을 참고하고 싶을 때는 google에 prompt stable diffusion을 검색하시거나 lexica(https://lexica.art/)에 들어가 확인하시면 됩니다. 개인적으로 게임적인 이미지는 unreal engine, art by ~, illustration 등을 붙이면 원하는 결과값을 얻기가 수월했습니다.
2.2 실습 시 결과 보정
: 생성된 이미지를 좀 더 세부적으로 수정하고 싶을 때에는 txt2img로 생성한 이미지를 다운 받거나 send to img2img로 보내 img2img에서 denoising strength를 조절하거나 inpaint 기능을 사용하시면 됩니다. denoising strength가 강할수록 기존 바탕이 된 이미지가 많이 변형되어 새로운 이미지가 나오게 됩니다. inpaint의 경우 이미지에서 변경할 부분을 색칠해 이미지 안의 특정 부분을 선택하고 새로 prompt를 입력해 해당 영역의 이미지만 변경할 수 있습니다. inpaint와는 조금 다르게 기존 이미지를 중심으로 확장시켜 그려주는 outpaint 기능도 있으니 필요할 때 사용하시면 됩니다. 그 외에도 stable diffusion model을 제공해주는 github에 들어가보시면 step 조절에 따른 결과, cfg scale 조절에 따른 결과 등 여러 가지가 비교 분석되어 있으니 참고하시면 좋을 것 같습니다.
2.3 실습 결과
: colab 왼쪽 폴더에 content>stable-diffusion-webui>outputs>사용한 기능(txt2img, img2img...)에 들어가면 실행시켜 생성한 이미지들을 확인하실 수 있습니다. 하단의 이미지는 조코딩님의 유튜브 채널에서 stable diffusion으로 이렇게도 할 수 있다고 보여주셨던 이미지입니다. 앞서 진행한 실습에서 prompt 및 strength, step등 세부적인 것들을 조절했던 것처럼 이것저것 시도하다보면 정말 원하는 결과값을 얻기 좋은 모델인 것 같습니다.
마지막으로 하단의 이미지는 dalle2와 stable diffusion에서 "happy snowman under the rainbow" 란 text prompt를 주고 생성한 결과입니다. stable diffusion의 경우 좀 더 일러스트레이트적인 분위기와 신비한 분위기를 내고 싶어 세부 조정을 한 결과값입니다. 무료이기도 하며 lexica와 같이 좋은 prompt를 확인할 수 있는 사이트들도 활성화시킬 수 있기에 아마 진행할 프로젝트는 stable diffusion을 사용하지 않을까라는 생각이 듭니다.
3. Project 설계
3.1 아이디어 착안
: 혼자 인디게임을 개발하며, 가장 큰 걸림돌이 되었던 것 중 하나가 바로 '그래픽' 이었습니다. 리터칭이나 아이디어를 기반으로 간략한 그림은 그릴 수 있으나 완성도가 떨어져 보였고, 혼자서 다 그리기에는 시간도 능력도 부족했습니다. 바로 여기에서 생각하고 있던 그림의 장면을 텍스트로 입력하면 이미지를 생성해주는, 더 나아가 세부 작업을 통해 생성된 이미지를 완성해주는 툴이 있으면 좋겠다고 생각하게 되었습니다. 그리고 좀 더 나아가 제 상황과 비슷한 프로그래머나 자신의 아이디어의 설득력을 높이기 위해 그래픽 레퍼런스가 필요하거나 빠르게 예시 레퍼런스를 확인해보고자 하는 기획자 내지는 디자이너가 있다면 그들에게도 도움되는 툴을 제공해주고 싶다는 생각이 들어 이와 같은 프로젝트를 진행하게 되었습니다.
3.2 사용 툴 및 언어
: 게임 제작을 위해 사용되는 대표적인 엔진, Unity 에서 바로 다운받아 사용할 수 있게끔 설계할 예정이며, 파인 튜닝된 모델의 연결 및 이미지 생성을 위해 python을 Unity와 연동하여 사용할 예정입니다.
3.3 세부 설계
: 후에 아키텍쳐를 첨부할 예정이지만, 간략히 설명하자면 Unity에서 UI를 간략히 만들고, 버튼의 기능에 따라 python으로 파인튜닝한 stable diffusion model architecture를 로드하여 사용하게 될 것 같습니다. 여기에서 종료된다면 web기반 -> Unity 기반으로 바뀌는 것과 크게 다를 바 없으므로 해시 태그 기능 같은 것을 추가해 어떠한 이미지에서 원하는 이미지가 있다면 유저가 그 분위기를 선택하면 자동으로 적절한 prompt를 추천해줄 수 있도록 그 부분을 추가해 툴의 편의성을 높여보려고 합니다.
4. 기타
4.1 참조 사이트
https://github.com/Stability-AI/stability-sdk :Stable Diffusion sdk 등
https://github.com/CompVis/stable-diffusion :Stable Diffusion 배포 API 및 모델 등
https://towardsdatascience.com/understanding-latent-space-in-machine-learning-de5a7c687d8d :latent space 설명 등
https://github.com/AUTOMATIC1111/stable-diffusion-webui :WebUI 기반 Stable Diffusion 실습
https://colab.research.google.com/drive/1kw3egmSn-KgWsikYvOMjJkVDsPLjEMzl :WebUI 기반 Stable Diffusion 실습, colab
https://velog.io/@hewas1230/StableDiffusion : Stable Diffusion에 대한 설명
https://www.youtube.com/watch?v=vVdNmnEb--E :조코딩님 stable diffusion 실습
https://crast.net/172271/how-to-use-stable-diffusion-the-free-and-open-source-alternative-to-dall-e/ :Stable Diffusion 사용 법
https://medium.com/@doriadar/how-to-get-dall-e2-ai-to-be-consistent-pro-tips-a54d487d7398 :dalle2 일관성 유지 방법
https://medium.com/@andrewwongai/how-to-come-up-with-good-prompts-for-ai-image-generation-f28355e46d21 :좋은 prompt 생성 방법
https://cdn.openai.com/papers/dall-e-2.pdf
:dalle2 이미지 생성 예시 등
arxiv.org/pdf/2102.12092.pdf :transformer와 text2image 등
4.2 prompt 참조 사이트
https://lexica.art/ :lexica
https://dallery.gallery/the-dalle-2-prompt-book/ : dalle2 prompt book
'AI > Stable Diffusion' 카테고리의 다른 글
[Stable Diffusion 응용 결과] 프롬프트 추천 기반의 이미지 생성 서비스 (2) | 2023.01.25 |
---|