Eli의 여백

바쁜 나날들 사이에서 생각났던 이런저런 것들을 적어봅니다.

IT/새로운 시도

그림 그리는 AI, 나도 그냥 쓸 수 있게 된 세상. Stable Diffusion으로 세상에 없던 그림 만들기

Eli♪ 2022. 10. 20. 05:41

내가 타이핑 몇 글자 및 클릭 몇 번으로 만든 그림

인공지능으로 멋진 그림을 쉽게 그릴 수 있다는 사실은 2020년대를 살아가는 현대인은 모를 수가 없을 것이다. 보통 이런 서비스는 유료 서비스 또는 정액제 회원가입을 요구하는 경우가 많다. 만약 무료이더라도 반짝 하고 나왔다가 소리소문 없이 사라지고, 결정적으로 온라인에서 써볼 수 있는 그림 그려주는 AI 서비스들은 자기네들이 학습시킨 모델을 공개하지 않고, 온라인 접속이 가능해야만 사용할 수 있기 때문에 사용에 여러 제약이 많았다.

 

그런데 오늘 우연찮은 기회를 통해 돈을 꽤 많이 들여서 만든 약 7GB에 달하는 거대 AI 모델을 대범하게 무료 전체공개로 뿌려버린 사람들이 있다는 사실을 알게 되었다. 심지어 몇몇 사람들이 이걸 일반인들도 쓰기 쉽게 오프라인 그래픽 인터페이스까지 구현 및 공개한 상황이기 때문에 우리는 감사합니다 하면서 쓰기만 하면 되는 것. 제작자들의 공개 링크는 다음과 같다. 2022년 8월 릴리즈라 정말 따끈따끈한 최신 기술인 것은 덤.

 

https://stability.ai/blog/stable-diffusion-public-release

 

 

개인적으로 가장 충격적이었던 그림은 아래와 같다. 디테일까지 살아 있고 위화감도 거의 없는 듯한 그림. 물론 저 그림을 뽑은 사람의 수없이 많은 시행 착오와 오랜 시간을 거쳐서 다듬어진 그림일 것으로 유추할 수 있으나, 최대 이 정도까지 가능한 학습된 모델이 무료 오픈소스 배포라니, 이건 못 참지.

출처: https://stability.ai/blog/stable-diffusion-public-release

 

 

1. Stable diffusion 설치 및 실행 (Google Colab 환경)

백문이 불여일견이라고 역시 일단 무턱대고라도 해 보는게 제일 빨리 익힐 수 있는 방법이라고 생각해서 다른 사람의 가이드(조코딩 유튜브 영상)를 참고하여 Google colab으로 사본 생성 후 실행을 해 보았다. 그 사이에 많은 개선이 이루어졌는지 영상이랑 많이 달랐지만, 대략 아래와 같은 절차로 손쉽게 실행시켜볼 수 있었다.

 

컴퓨터 사양이 많이 안좋아도 상관 없는 것이, 구글에서 무료로 제공하는 메모리, CPU, GPU를 클라우드 서비스로 사용하는 것이기 때문에 웹 브라우저 화면만 볼 수 있으면 된다.

 

1. Google Colab 페이지 ( https://colab.research.google.com/drive/1kw3egmSn-KgWsikYvOMjJkVDsPLjEMzl ) 에서 자기 구글 드라이브로 사본 만들기 (구글 로그인 필요)

2. HuggingFace 계정 생성 ( https://huggingface.co/ )

3. HuggingFace 로그인 후 read로 된 access token 생성 ( https://huggingface.co/settings/tokens )

4. CompVis 학습된 모델 액세스 동의 ( https://huggingface.co/CompVis/stable-diffusion-v-1-4-original )

5. 이후 자기 구글 드라이브로 복사된 사본에서 colab에 있는 실행버튼 누르면서 진행 ( 코드 영역에 마우스를 올리면 재생버튼 나오는데 그것 누르는 것임. 중간에 로그인 뭐시기 나올 때 토큰 입력하라는 것이 있는데 위에서 만든 hf로 시작하는 토큰 복붙해서 submit 누르면 됨. 에러 없이 실행됐다면 재생버튼 눌렀을때 왼쪽에 초록 체크표시가 뜬다.)

 

기본은 말 타고있는 우주인 그림인데 기본만 하면 심심하기 때문에 바닷물 위를 뛰는 알파카를 만들어봤다.

입력한 것은 고작 alpaca running above sea 이것 뿐인데 이런 쓸데없는 고퀄 그림이 만들어졌다. 심지어 물에 비치는 반사광 디테일 무엇 ㅋㅋㅋ 하여간 잡다하게 이것저것 입력해 보니 꽤 재밌는 그림들을 많이 얻을 수 있었다.

 

다만 아쉬웠던 점은 역시 별로 익숙하지 않은 Google colab 환경이란 것과 무료 제공 자원이다보니 느려터진 클라우드 성능이 답답했다는 것이다. 깊이 알지도 못하는데 왠지 잘 정리된 튜토리얼을 건드려서 튜닝하기도 조심스럽기도 하고, 어차피 컴퓨터 자원도 CUDA 지원하는 그래픽 카드를 포함하여 CPU랑 램도 그럭저럭 쓸만한 걸 쓰고 있었기 때문에 Colab에서의 체험판보다는 오프라인으로 좀 더 제대로 돌려보고 싶다는 생각이 많이 들었다.

 

 

2. 오프라인에 설치 후 web UI로 실행 (Windows 환경)

다행히도 고마우신 분들이 터미널 환경이 아니라 GUI 환경으로 만들어서 Github에 공개했기 때문에 그냥 시키는 대로 잘 다운받고 실행하면 되는 거였다.

 

https://github.com/AUTOMATIC1111/stable-diffusion-webui

 

GitHub - AUTOMATIC1111/stable-diffusion-webui: Stable Diffusion web UI

Stable Diffusion web UI. Contribute to AUTOMATIC1111/stable-diffusion-webui development by creating an account on GitHub.

github.com

 

윈도우 10 환경에서 설치방법이 적혀 있었는데 이전 글( https://projecteli.tistory.com/171 )에서 언급한 바와 같이 본인은 anaconda를 사용하고 있기 때문에 python을 path 환경변수에 등록하지 않았고, 다만 다음과 같이 나에게 맞는 방법으로 설치 및 실행하였다.

 

1. anaconda 관리자 권한 console에서 다음을 입력하여 python 3.10.6 환경으로 가상환경 생성

conda create -n EliSD python=3.10.6

2. 가상환경 활성화

conda activate EliSD

3. git 설치

conda install git

4. 원하는 폴더로 디렉토리 변경 후 github webui repo 복제

git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git

5. dependency에 적힌 것처럼 학습된 모델 다운로드 (Huggingface 로그인 및 사용약관 동의 필요)

https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Dependencies

 

GitHub - AUTOMATIC1111/stable-diffusion-webui: Stable Diffusion web UI

Stable Diffusion web UI. Contribute to AUTOMATIC1111/stable-diffusion-webui development by creating an account on GitHub.

github.com

ckpt 파일이 두 종류가 있는데 full로 받으면 2022년 10월 기준 약 7.2GB이고 다른 버전은 약 4GB 내외이며, 다운로드는 꽤 오래 걸리므로 인내심이 필요하다.

6. 받은 ckpt 파일을 아까 git clone한 폴더의 models/StableDiffusion/ 안에 넣어 준다.

7. Anaconda 콘솔에서 git clone한 폴더로 cd를 한 후 webui.bat 를 실행 (path에 python 추가 안했으므로 일반 터미널로는 실행 불가하고 Anaconda console에서 해당 가상환경 활성화된 상태로 써야 함)

 

여기까지 하면 갑자기 conda가 install pytorch와 torchvision을 설치한다고 나오면서 오랫동안 굳어있는데, 보이지 않을 뿐이지 GB급의 파일을 다운받는 중이므로 참을성 있게 기다려야 한다. 사전에 pytorch를 설치해 줬었는데도 또 설치하는 것 같다. 참고로 StableDiffusion이 사용하는 pytorch는 2022년 10월 기준 CUDA 11.3으로 동작하기 때문에 다음의 pytorch에서 CUDA 11.3으로 맞추고 conda install command를 사용하였다.

 

https://pytorch.org/

 

PyTorch

An open source machine learning framework that accelerates the path from research prototyping to production deployment.

pytorch.org

 

webui.bat 실행 후 좀 기다리다 보면 다음과 같이 running on local URL이라면서 127로 시작하는 loopback 주소가 뜬다.

 

8. 웹브라우저를 켜고 해당 주소 입력 또는 콘솔에서 ctrl 누르고 URL 클릭

이렇게 하면 아래와 유사한 창이 나온다.

 

맨 위 체크포인트를 아까 다운받은 ckpt 파일로 인식시켜 주면 준비 끝.

 

2-1. webUI 간단 사용법

크게 두 가지 기능이 있다. 하나는 글자를 쓰면 그림으로 바꿔주는 기능(text2img)이고 다른 하나는 그림을 베이스로 원하는 컨셉을 섞어서 새로운 그림으로 만드는 기능(img2img)이다. 각각 positive와 negative라고 된 텍스트 입력창이 있는데 positive에 적으면 그대로 그려주고, negative에 적으면 해당 속성을 빼고 그려준다. 몇 글자 적고 generate를 누르면 약간의 시간 후에 그림이 나온다 (CUDA 지원 GPU가 없거나 컴퓨터 성능이 충분하지 않은 경우 오래 걸릴 수 있음)

 

다양한 parameter들과 script를 사용할 수 있는데 대략적인 각 슬라이더들의 기능은 다음 페이지를 참고한다.

https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Features

 

GitHub - AUTOMATIC1111/stable-diffusion-webui: Stable Diffusion web UI

Stable Diffusion web UI. Contribute to AUTOMATIC1111/stable-diffusion-webui development by creating an account on GitHub.

github.com

 

앞에 적었던 다른사람 영상에서도 언급되었듯이, 모델이 쉽게 처리할 수 있는 방식으로 글자를 적으면 좀 더 고퀄 그림을 빨리 얻을 수 있다는 정보도 있고, 이전에 달리 (초현실주의 시계그림 그사람 이름 딴 다른 모델 맞음) 를 사용하던 사람들이 정립해놓은 가이드북도 다음과 같이 존재하기 때문에 참고하면 된다. 글 상단부에 pdf로 받을 수 있는 링크도 있다.

 

https://dallery.gallery/the-dalle-2-prompt-book/

 

The DALL·E 2 Prompt Book

A guide to OpenAI's DALL·E - prompts, projects, examples, and tips

dallery.gallery

 

참고로 모든 실행결과는 기본적으로 로컬에 자동 저장되며, webUI의 history 탭을 눌러 확인 및 삭제할 수 있다.

 

img2img의 경우 앞에서 text2img로 생성한 그림을 베이스로 사용하거나, 인터넷에 있는 임의의 다른 그림을 벤치마크해서 입력값으로 넣을 수 있다. denoising strength를 높이면 원래 그림의 특성을 배제하고 입력한 텍스트 또는 랜덤한 테마를 섞은 그림을 얻을 수 있다.

 

denoising에 관련해서는 아래의 영상이 잘 설명하고 있는 것 같아서 링크로 남긴다. 기본적인 학습 원리가 noise를 추가한 뒤에 원상복원하는 방식으로 학습을 시켰기 때문에 noise가 심하면 심할수록 원본과는 다른 유추를 하게 되고, 사용자가 입력한 text로 bias를 주면 미지의 영역을 bias에 맞게 채우는 것이라고 이해했다..

https://youtu.be/LDvnLm2illk?t=138 

 

하여간 이것저것을 만들어봤는데 생각지도 못한 결과물들이 뽑혀나오는 것 같다. 다음은 일부 결과물이다.

 

참고로 이 글의 맨 위에 있는 그림도 text2img 후 img2img로 마음에 들 때까지 재생성을 돌린 것이다.

 

내 생각 

사용 내용만 적고 끝내기는 아까워서 사견을 살짝 적어본다. 이전에 carpedm20이 만든 음성합성 모델(원래 3개 다 있었는데 제일 퀄 안좋은 손석희씨꺼만 남았다) 을 봤을 때부터 느꼈지만 정교하게 디자인된 모델의 경우 실제 사람이 한 것과 구별이 불가능할 정도의 결과물을 내놓는 것은 이미 가능한 시대이고, 이제는 일반인도 막 굴릴 수 있는 AI 조차 해당 분야에서 1~2년 경력정도는 가볍게 상회할 수 있는 결과물을 주는 것으로 확인했다는 것이 이번 체험의 의미였던 것 같다. 실제로 Google Copilot 출시를 통해 이제 밑바닥부터 시작하는 초보 프로그래머들은 도태 가능성이 농후해졌으며, 이번 Stable Diffusion의 경우에는 크게 전문성을 요하지 않는 개인들에게 쓸만한 그림을 생성해줄 수 있기 때문에 어정쩡한 실력의 프리랜서 및 단순작업을 요하는 어시스트들은 필요가 없게 되었다.  음악의 경우에도 몇 년 전에 참여한 학회에서 누군가에게 들었던 대로, 앞으로 분위기를 위해 식당이나 카페 등에서 틀어놓는 무난하고 조용한 음악류는 학습된 모델이 생성해낸 것으로 대부분 교체될 것으로 보고 있다. 

 

이런 현상이 앞으로 일상이 될 텐데, 사람이 할 일은 점점 기계가 만들어낸 것의 최종 검수 및 디테일 수정이 될 가능성이 높다고 보고 있다. 평균 이하의 전문성은 기계에 잡아먹히는 특이점, 이미 2020년대 초에 현실화되었다고 생각한다. 일상 생활에 지대한 영향을 주지는 않는 예술 분야에서 먼저 적용되었고, 학계쪽에 적용되는 현상도 이전 2019년 글에서 언급한 바 있다. 내가 파악하기로는 이미 분자설계 등의 분야에서는 이제 뉴럴 넷이 없으면 큰 연구를 하지 못하는 수준까지 잠식당한 것으로 안다. 아마 가장 마지막에 적용될 수 있는 분야가 사법 판단을 내리는 판사가 되지 않을까 싶은데, 이것도 자율주행과 동일하게 윤리적인 문제로 안하고 있는 거지 현재까지 나와 있는 기술로도 평균적인 수행능력은 달성했을 것으로 예상한다. 중국 등에서는 이미 적용해서 시행하고 있기도 하고. 결국 사람에게 최종 판단의 여지를 줄 수 있다고 하면 어느 분야든 침투 가능한 것이 2022년의 패턴 분류 및 생성 모델의 현 주소인 것 같다.

 

다만 이런 시스템을 어떤 기관이나 정부에서 관리하게 되면 전체 입장에서는 편해지겠지만 공용 데이터가 올라가는 블록체인 등의 투명성으로 인해 사생활 및 개인정보에 치명적인 문제가 발생하게 된다. 플랫폼 사업자들이 기술력이 충분함에도 불구하고 개인을 위한 맞춤형 서비스를 제공하지 못하는 것은 결국 데이터 주도성을 쥐기 위해 중앙에 데이터가 모이는 방식을 사용하고 있기 때문으로 생각하며, 이 경우 시스템적으로는 안전할지라도 사람이 개입되지 않을 수 없고 틈만 나면 정보 관리자에 의한 개인정보 노출이라든지 하는 사건이 터지기 때문에 법적으로 틀어막아놔서 라고 생각한다.

 

사실 개인 입장에서는 조금만 노력을 들이면 스마트 스피커라든지 하는 것들에서 제공하지 못하지만 본인의 일상생활 또는 업무에 필요한 기능을 충분히 구현해낼 수 있다고 생각한다. 이 때 외부로 데이터가 새나가는 공공 API를 사용하지만 않으면 데이터 관리도 직접 할 수 있기 때문에 더 이득이다. 나 또한 각종 플랫폼 사업자 (구글 및 카카오 포함) 로부터 최대한 독립성을 가지기 위해 2017년부터 종이보안을 적극적으로 활용하고 있고, 사적인 데이터를 온라인에 업로드하는 일은 극히 자제하고 로컬에서 웬만한 것을 해결하려고 노력하고 있다. 그래서 나온 결과물들이 이전에 만들었던 내 전용 음성 비서나 여타 로컬에서 도는 직접 짠 업무 자동화 프로그램들이었다.

 

그리고 뭐 자주 일어나는 일은 아니겠지만, 며칠 전 카카오 데이터센터가 화재로 문제가 생겨서 상당 기간 동안 카카오 관련 기능이 마비됐을 때도 메신저나 뱅킹 등을 카카오와 연동해서 쓰지 않거나 plan B를 고려한 루트를 미리 뚫어뒀었기 때문에 딱히 불편한 점은 못 느꼈었다. 이 사건이 아마 전 국민에게 플랫폼 의존성이 얼마나 무서운 것인지를 알려 줬다고 생각한다. 물론 비용 및 효율성을 생각하면 대충 플랫폼 기업에 일임하고 믿는 전략도 있을 수 있는데, 앞 일은 어떻게 될 지 모르니 평소에 대안을 마련해 두는 것도 전략이라고 생각한다. 그런 의미에서 이번 Stable diffusion의 오프라인 설치 및 사용 경험도 계속 발전하는 온라인 서비스들이나 직접 illustrator나 여타 프로그램으로 그리는 것에 비해서는 부족한 면이 있겠지만 앞으로 블로그 글의 대표 그림을 그리는 것에 활용해 보려고 한다. (사실 글만 쓰고 싶은데 요즘 사람들은 그림 없이 긴 글만 있으면 지겹다고 안읽는 것 같아서 자꾸 일정 길이마다 그림을 넣어야 할 것 같은 강박 같은게 생겼다)

 

사상 초유의 사태들이 자주 발생하는 상황이 앞으로도 계속될 것으로 보이는 2022년과 그 이후. 예측할 수 없는 것도 예측하고, 예상할 수 없는 경우까지 대비하는 전략이 과거를 학습한 기계 및 알고리즘과 차별화될 수 있는 인간의 적응력에 해당하며, 그것이 당분간은 밥그릇을 유지할 수 있는 살 길이라고 생각한다. 끝.