공부/AI

인공지능(AI) 그림을 크레딧 충전없이 무제한으로 1분만에 그리는 방법 (Stable Diffusion + 구글 Colab 사용)

우주관리자 2022. 11. 20.

 

AI로 1분만에 그린 그림

 

최근 텍스트를 이미지로 만들어주는 Stable diffusion이라는 모델이 공개되어 다양한 활용 및 응용이 되고 있습니다.

그러나 모델과 소스가 공개되었다고 하더라도 일반인들이 접근하기에는 아직 어려운 점이 많을 것입니다.

 

여러 유튜브나 블로그 등에서 재밌게 사용하는 모습들을 보면서 저도 직접 해보고 싶었는데

처음으로 접한 사이트가 이곳이었습니다.

 

Stability.Ai - 알고보니 유료?

 

Stability.Ai

AI for Humanity. Stability AI is a solution studio dedicated to innovating ideas. By using collective intelligence principles and augmented technology we design and implement feasible solutions to seemingly intractable problems.

stability.ai

DreamStudio라는 곳에 들어가서 가입 후 로그인하면 아주 간단하게 AI가 그려주는 이미지를 얻을 수 있었는데요.

신기해서 계속 만들다보니 금방 아래와 같은 메세지가 나타나면서 결제를 요구하였습니다.

크롬 브라우저의 번역 사용

아무리 공개된 소스라도 편리하게 사용할 수 있고 또 그것을 처리하기 위한 자원을 사용하기 위해서는 유료화가 어쩔 수 없는 것 같습니다.

 

해당 코드들을 원활히 돌리기 위해서는 GPU가 필요하고 (CPU 버전도 있다고 하는데 엄청 오래 걸린다고 합니다) 

아무래도 일반 개인 사용자들이 보유한 PC에서 코드를 열심히 돌리는 것보다는 위와 같이 적당한 유료화를 통한 SaaS 방식의 서비스 제공이 속도면에서도 유리할 것으로 생각됩니다.

 

난 가끔씩 1~2장 정도만 필요한데?

 

상업적인 목적을 가지고 지속적으로 필요한 상황이 아니라면 아주 소액이라도 유료 결제를 하고 싶지는 않을 것입니다.

약간의 불편함을 감수할 수 있다면 다음의 방법을 통해 계속 무료로 사용할 수 있습니다.

 

Colaboratory (구글 코랩)

 

Google Colaboratory

 

colab.research.google.com

크롬 기반 브라우저만 있다면 클라우드를 통해 이미 구성된 Python 스크립트 개발 환경을 제공받을 수 있습니다.

무료로 GPU 자원을 사용할 수 있다는 것도 큰 장점이 되겠습니다.

 

다만, 무료 서비스의 경우 런타임 지속 시간에 제한이 있는 것 같습니다.

(무료 버전: 12시간, Pro 버전: 24시간, 그러나 아무런 작업도 하지 않을 경우 90분 내에 연결이 끊긴다고합니다)

 

그래도 작성해놓은 코드 및 노트 내용들은 개인의 구글 드라이브 공간을 통해 저장이 되므로

시간이 지난 뒤에도 언제든지 지난 코드 내용들을 순서대로 실행만 해주면 (이 부분이 앞서 설명했던 약간의 불편한 부분) 이전의 결과를 쉽게 다시 얻을 수 있습니다.

 

여기서는 구글 코랩 준비 및 제공해드리는 코드를 그대로 붙여넣기하여 사용할 수 있도록 진행해보겠습니다.

(일반인들의 쉬운 사용을 목적으로 하므로 여기에서 코드 분석 및 설명은 하지 않도록 하겠습니다)

 

로그인 없이 코랩 페이지를 통해 바로 해볼 수도 있겠으나 최소한 코드 내용은 저장이 된 상태로 사용하는 것이 편리하므로

다음과 같이 구글 계정을 통해 본인만의 코랩 공간을 만들어서 사용해보도록 하겠습니다.

 

 

구글 드라이브에 코랩 추가 및 기본 설정

 

구글에 로그인 후 아래 링크를 통해 구글 드라이브로 들어갑니다.

 

https://drive.google.com/drive/u/2/my-drive

 

Google Drive: 로그인

이메일 또는 휴대전화

accounts.google.com

내 드라이브 항목에 우클릭을 합니다.

가장 아래에 있는 더보기를 누릅니다.

기존에 연결한 코랩 앱이 없다면 '연결할 앱 더보기' 버튼을 클릭합니다.

 

위치가 다를 수는 있겠지만 아래와 같이 Colaboratory 를 찾아서 클릭합니다.

 

설치 버튼을 눌러서 연결해줍니다.

 

계속

 

이후 로그인된 계정 중 코랩을 설치하여 연결할 계정을 다시 한번 선택해줍니다.

 

확인

 

'새로 만들기' 버튼을 클릭합니다.

 

더보기 항목을 클릭하시면 이제 Google Colaboratory 앱이 보입니다. 클릭해줍니다.

 

다음과 같이 나오면 성공입니다.

 

+텍스트 버튼을 누르면 일반 메모장처럼 글을 작성할 수 있고

+코드 버튼을 누르면 파이썬 코드를 작성 후 좌측의 재생 버튼을 눌러서 실행할 수가 있습니다.

모든 실행은 사용자의 PC가 아닌 구글의 클라우드 자원을 통해 원격에서 실행이 됩니다.

 

실제 코드를 입력하여 실행하기 이전에 마지막으로 한가지 설정만 더 해주겠습니다.

런타임 - 런타임 유형 변경을 클릭합니다.

GPU를 선택한 뒤 저장을 눌러줍니다.

 

문서 이름을 변경하지않아도 자동으로 저장이 됩니다만, 다른 문서들과 구분을 하기 위해 이름을 변경해주는 것이 좋습니다.

 

코드 붙여넣고 실행하기

 

!pip install --upgrade keras-cv

import time
import keras_cv
from tensorflow import keras
import matplotlib.pyplot as plt

model = keras_cv.models.StableDiffusion(img_width=512, img_height=512)

def print_image(image):
    plt.figure(figsize=(20, 20))
    for i in range(len(image)):
      ax = plt.subplot(1, len(image), i+1)
      plt.imshow(image[i])
      plt.axis("off")
      plt.tight_layout()

!pip install translate

from translate import Translator
translator = Translator(from_lang="ko", to_lang="en")

def generate_images(text, n):
    print("입력한 한글 문장 : " + text)
    translated = translator.translate(text)
    print("번역된 영어 문장 : " + translated)

    image = model.text_to_image(translated, batch_size = n)

    return image

!pip install -q gradio

import gradio

def inference(text):
    image = generate_images(text, 1).squeeze()
    return image

gradio = gradio.Interface(fn=inference, inputs="text", outputs="image")

 

위의 코드를 코랩의 코드 블럭 (기본적으로 하나 생성되어있는 곳에, 지웠다면 위의 +코드 버튼을 누른 뒤 그 안에 커서를 두고) 내에 붙여넣기 한 뒤 재생 버튼을 누릅니다.

코드 블럭의 아래 쪽으로 스크롤해보시면 실행 중에 표시되는 정보들이 보입니다.

시간이 조금 걸리므로 기다려줍니다.

브라우저 알림 기능을 활성화하면 다른 작업 중에도 완료 알림을 받을 수 있습니다.

완료가 되면 해당 코드의 재생 버튼이 다시 멈춥니다.

이제 런타임이 유지되는동안은 지금 설치하고 설정한 모델을 사용할 수 있게 됩니다.

(연결이 끊기거나 런타임을 재시작한 경우, 다시 위의 코드를 재실행만 해주면 됩니다)

 

 

AI 이미지를 생성해보자#1 (Gradio 사용)

 

+ 코드를 눌러서 아래 코드 한줄을 입력 후 실행합니다.

gradio.launch(debug=True)

위와 같은 화면이 나오면 성공입니다.

text 란에 한글로 원하는 문장을 입력하고 제출하기 버튼을 누르면 됩니다.

 

위에 나온 https://localhost:7860/ 을 클릭하면 인터넷에서도 접속할 수 있는 웹페이지가 열립니다 (당연히 런타임 유지가 되어있는동안만 사용 가능합니다)

 

제 블로그의 로고도 이것을 통해서 만든 이미지를 사용하였습니다.

저는 "우주에 모여있는 주파수들" 이라는 문장을 사용했었는데, 매번 만들 때마다 다른 이미지들이 나오므로 좋은 이미지를 얻었다면 바로 저장하시는 것이 좋습니다.

이번에는 이런 이미지가 생성되었네요.

 

외부 웹페이지를 사용해서 실행을 해도 코랩 내 실행 결과에는 다음과 같이 실행된 내역을 볼 수 있습니다.

 

Gradio를 사용하면 한번에 1장만 생성할 수 있지만 원본 해상도로 그림을 얻을 수 있는 장점이 있습니다.

다만, 히스토리가 남지 않으므로 그 다음 생성 시 기존의 이미지가 사라진다는 단점도 있습니다.

 

 

AI 이미지를 생성해보자#2 (코랩 내 명령어를 통해)

 

+ 코드를 눌러서 아래 코드 한줄을 입력 후,

큰 따옴표 내에는 원하는 문장으로, 그 뒤의 숫자는 한번에 생성할 이미지의 개수로 변경한 뒤 실행합니다.

(이유는 모르겠지만 3개 이상부터는 오류가 발생되네요)

print_image(generate_images("우주에 모여있는 주파수들", 2))

실행이 되고 있습니다.

 

개수를 2로 입력하니 2장의 이미지가 생성되어 나왔습니다.

단, 클릭을 해도 원본 이미지가 나오지 않으며 위의 이미지를 우클릭하여 저장을 해도 2장이 붙어있는 하나의 이미지로 저장이 됩니다.

 

좀 더 큰 해상도의 이미지를 얻고 싶다면 개수를 1로 설정하면 됩니다.

 

그리고 기존 코드의 내용을 수정하여 재실행하면 기존 생성된 이미지가 사라지지만, 코드가 간단하므로 그냥 새로운 코드를 하나 더 추가하여 실행하면 기존 생성된 이미지의 기록도 계속 남게 되므로 유용하게 활용할 수 있을 것 같습니다.

 

 

괴물 기계와 싸우는 여전사
괴물 기계와 싸우는 일반인 일러스트 스타일

코랩에서 런타임 실행 시 할당받는 GPU 종류가 다를 수 있다고 하는데 일단 저의 경우에는 Tesla T4 라는 GPU로 확인이 되었습니다.

이미지 한번 생성 시 1분 정도 소요되네요.

 

 

코드에 다음의 명령어를 입력하고 실행하시면 현재 할당된 GPU 종류를 확인해볼 수 있습니다.

!nvidia-smi

 

재밌는 그림이 나오면 댓글로 공유해주시기 바랍니다.

반응형