본문 바로가기

AI & Big Data/Image

[AI Image] 메타코드M '생성형 AI 입문 완성강의ㅣ스테이블 디퓨전 프로젝트 실습 + 프롬프트 엔지니어링 Skills' 강의 후기 #2 - 스테이블 디퓨전 이론 및 기능 (text to image, image to image, inpaint)

728x90
반응형

  지난 메타코드 강의에서 생성형 AI의 종류와 스테이블 디퓨전의 설치 방법 등을 살펴보았다. 이어서 스테이블 디퓨전으로 어떻게 그림을 만들어내는지 알아볼 것이다. 본 글에서 사용된 이미지는 필자의 실습 결과와 강의를 캡쳐하여 사용하였음을 밝혀둔다.

※ 이전글: 2024.02.29 - [AI & Big Data/Image] - [AI Image] 메타코드M '생성형 AI 입문 완성강의ㅣ스테이블 디퓨전 프로젝트 실습 + 프롬프트 엔지니어링 Skills' 강의 후기 #1 - 생성 AI 종류, Stable Diffusion 설치 및 실행

 

메타코드M

빅데이터 , AI 강의 플랫폼 & IT 현직자 모임 플랫폼ㅣ메타코드 커뮤니티 일원이 되시기 바랍니다.

mcode.co.kr

 

Index

    2강. 이론 및 기능 활용

    Text To Image

      프롬프트창에서 단어를 조합하여 원하는 이미지를 만들 수 있는 것은 대부분 알고 있을 것이다. 그런데 여기서 그치지 않고 프롬프트를 일일이 입력하지 않고 이미지의 동작을 설정하는 효율적인 방법이 있어 소개하고자 한다. 바로 ControlNet이다. 

    ControlNet 설치

    1. 스테이블 디퓨전 프롬프트창 위에 txt2img 탭이 선택되어 있을 텐데 가장 오른쪽에 있는 Extensions 탭을 클릭하여 이동한다.
    2. Extensions 화면에서 Install from URL로 이동한 다음, 첫번째 빈칸에 https://github.com/Mikubill/sd-webui-controlnet를 입력하고 Install 버튼을 누른다.
    3. 설치가 끝나면 Installed로 가서 Apply and restart UI 버튼을 클릭. (설치 완료 여부는 [extensions] 폴더 안에 [sd-webui-controlnet] 폴더가 생긴 것으로 알 수 있음.) 

    구글 코랩 폴더 ( sd-webui-controlnet)

      상기 과정이 제대로 끝났다면, 아래와 같이 ControlNet 박스가 생겼을 것이다.

    ControlNet 박스 추가

     

    ControlNet 이미지 추가

      이제 원하는 자세를 취하고 있는 이미지를 준비하여 업로드한다.

      본 강의에서는 openpose, segmentation, lineart, canny, depth 등으로 실습을 진행한다. 이에 대해 간략하게 설명하면, 다음과 같다.

    • openpose: 이미지의 골격을 취득 후, 이를 조정하여 원하는 이미지 생성.
    • segmentation: 이미지 영역을 구분하고 해당 영역에 원하는 이미지 추가.
    • canny: 대상의 외곽선을 추출.
    • softedge: 부드럽게 외곽선을 따서 이에 맞는 이미지 생성.
    • depth: 카메라와 피사체의 거리 (깊이)에 따른 표현.

     실습에 앞서 모델을 다운로드해야 하는데 링크에서 '.pth'로 끝나는 체크포인트 파일을 설치한다. 이 파일은 위에서 추가했던 [sd-webui-controlnet] - [models]에 넣어준다. 

      ControlNet을 적용하고 프롬프트를 실행하면 ControlNet에 추가한 이미지의 동작을 취하는 이미지가 만들어진 것을 알 수 있다. 

    ControlNet Openpose
    ControlNet Segmetation (강의 캡쳐)

      참고로 pixel perfect는 해상도를 최적화하는 것이고, LOW VRAM은 이미지 생성에 자원을 적게 쓰는 것을 뜻한다. 여러 개의 ControlNet을 적용하는 것도 가능하다. 

    ※ Negative Prompt 

      생성된 이미지가 선정적이거나 비정상적인 경우도 종종 있다. 이를 방지하기 위해 Negative Prompt를 넣어 학습에서 제외할 키워드를 넣어줘야 한다. 강의에서는 'easynegative', '7dirtywords'를 폴더에 추가해 수고를 더는 방법을 알려준다. 이 파일은 CIVITAI에서 검색하여 찾을 수 있다.

    Textual Inversion

    1.  [sd-webui-controlnet] - [embeddings] 폴더에 상기 파일을 넣은 다음, 네거티브 프롬프트 밑에 있는 Textual Inversion을 클릭한다. 
    2. 각 파일의 썸네일같은 것이 보이는데 해당 파일을 선택하면 알아서 Negative Prompt에 입력된다.

    ※ Face Restoration

      얼굴을 복원하는 기능이다. Settings 탭으로 이동 후, 좌측 목록에서 Postprocessing에 있는 face restoration을 클릭한다. 

    Face Restoration

      Restore Faces 옵션을 체크하고 원하는 모델을 선택한다. 강사님은 코드포머를 선호한다고 한다.

    GFPGAN, CodeFormer (avclabs)

     설정이 완료됐다면 잊지말고 Apply Settings를 누르도록 하자.

    실습 결과

    스테이블 디퓨전 t2t 실습

      이 생성 이미지에 대한 프롬프트는 아래 더보기를 눌러 확인할 수 있다.

    더보기

    person, man, korean, male, 4k, high resolution

    Negative prompt: 7dirtywords easynegative
    Steps: 20, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 1335445647, Face restoration: CodeFormer, Size: 512x512, Model hash: 4199bcdd14, Model: revAnimated_v122EOL, VAE hash: c6a580b13a, VAE: vae-ft-mse-840000-ema-pruned.vae.pt, Clip skip: 2, ControlNet 0: "Module: openpose_full, Model: control_v11p_sd15_openpose_fp16 [73c2b67d], Weight: 1, Resize Mode: Resize and Fill, Low Vram: False, Processor Res: 512, Guidance Start: 0, Guidance End: 1, Pixel Perfect: True, Control Mode: Balanced, Hr Option: Both, Save Detected Map: True", TI hashes: "7dirtywords: d7a878cee76c, EasyNegative: 66a7279a88dd", Version: 1.7.0

    Image To Image

      텍스트로 이미지를 만드는 text to image (t2i)에 이어 image to image (i2i), 이미지를 학습시켜 다른 이미지를 만드는 것을 배워보고자 한다. 실무에서는 t2i로 스케치를 그리고 i2i로 편집하는 경우가 많기 때문에 이를 잘 익혀두는 것이 좋다고 한다.

      강의는 realistic과 anything ckpt파일을 써서 진행한다. t2t로 만들어 둔 이미지는 [output] - [txt2img-images]에 일별로 저장돼 있으므로 그곳에서 가져와도 되고, 생성된 이미지 아래의 액자를 클릭해 바로 활용하는 것도 가능하다.

    스테이블 디퓨전 image to image 실습1 (고양이 이미지 생성)

    1) 실사 이미지에서 애니 화풍으로 변경

      ckpt 파일에 따라 그림체가 다르기에 원하는 스타일의 모델을 찾는 것이 우선이다. 참고로 프롬프트창 우측의 클립 아이콘을 누르면 생성된 이미지에 들어간 구성요소를 파악해 프롬프트를 자동으로 출력해준다. 

      편집 단계에서 제시한 이미지에 충실한 새로운 결과를 얻기 위해서는 원본형태가 유지되는 ControlNet을 쓰면서 다른 프롬프트를 추가하는 것이 좋다.

    스테이블 디퓨전 image to image 실습2 (anything)

      이 이미지의 프롬프트는 아래와 같다.

    더보기

    a cat wearing a gray jacket sitting on a bed with a white blanket and pillows behind it and a black and white cat sitting on the bed, Carlos Catasse, punk, a stock photo, furry art

     

    Steps: 20, Sampler: DPM++ 2M Karras, CFG scale: 7, Seed: 261394460, Face restoration: CodeFormer, Size: 512x512, Model hash: 812cd9f9d9, Model: anythingV3_fp16, VAE hash: c6a580b13a, VAE: vae-ft-mse-840000-ema-pruned.vae.pt, Denoising strength: 0.75, Clip skip: 2, ControlNet 0: "Module: canny, Model: control_v11p_sd15_canny_fp16 [b18e0966], Weight: 1, Resize Mode: Crop and Resize, Low Vram: False, Guidance Start: 0, Guidance End: 1, Pixel Perfect: True, Control Mode: Balanced, Hr Option: Both, Save Detected Map: True", Version: 1.7.0

     

    스테이블 디퓨전 image to image 실습3 (revAnimated)

      상기 이미지는 3D 애니메이션 스타일로 만들어 본 것이다. 3D 화풍으로 만들 때는 프롬프트창에에 '3D Animation'을 넣어주는 것이 좋다고 한다. 

      한편, 생성된 이미지는 제시한 이미지의 픽셀 구성을 많이 따르는 것으로 보인다. dog와 person을 넣어서 테스트한 결과, 아래 이미지처럼 파랑 후디와 사선의 도로 등이 그대로 남아있음을 알 수 있다. 따라서 학습한 이미지 이외의 요소를 추가하려면 별도의 작업이 요구되는데 이 방법 중 하나로 inpaint가 있다.

    스테이블 디퓨전 i2i 결과

    2) Inpaint 적용

      Inpaint는 특정 영역에 마스크를 씌워 해당 부분만 사용자가 원하는 대로 편집하는 기능이다. Generation 카테고리에서 세번째 탭을 보면 Inpaint라고 적혀 있다.

    inpaint 1 (영역 설정)
    inpaint 2 (ControlNet)

      위의 이미지는 (1) 고양이 오른쪽에 마스크를 넣고 (2) 프롬프트창에 dog를 넣은 다음, 다시 만들어진 이미지를 (3) ControlNet (Lineart 설정)에 넣고 프롬프트창에 red color (가중치 1.3) 를 추가한 결과이다. 

    ※ AIRPM: 프롬프트를 만들어주는 ChatGPT 애드온.

    ※ ControlNet Openpose 사용 시, Editor를 사용해 이미지 편집 가능. 

    스테이블 디퓨전 Openpose Editor

    3) 얼굴 및 기타 편집

      먼저 CIVITAI에서 Korean Idol Female 모델을 다운받아 [models] - [Lora]에 넣는다. 그리고 inpaint에서 얼굴을 영역 설정하고, Generation 카테고리 우측 끝의 Lora를 눌러 kr_girlidolcard (원하는 이미지에 따라 다른 모델 선택)를 클릭한다. 마지막으로 적절한 프롬프트를 지정해가며 얼굴을 바꿔주면 된다.

      강의에서는 카리나 모델도 적용해 본다. 카리나도 마찬가지로 CIVITAI에서 모델을 구하고 anything을 적용해 생성하였다. 

    스테이블 디퓨전 카리나 편집

      팔을 드러낸 이미지를 AI가 만들었는데 팔을 가려주는 이미지로 바꿔봤다. (1) inpaint의 inpaint sketch로 간 다음, 팔레트에서 검정으로 팔 부분을 칠해준다. 그리고 (2) 재차 inpaint로 영역을 설정하고 (3) black t shirt를 넣으면 위와 같은 이미지를 얻을 수 있다. 


      이번 메타코드M '생성형 AI 입문 완성강의ㅣ스테이블 디퓨전 프로젝트 실습 + 프롬프트 엔지니어링 Skills' 강의에서는 text to image로 이미지를 생성하고, image to image 기능으로 생성된 이미지를 편집하였다. 편집 과정에서 inpaint라는 것을 활용해 보다 정교한 편집이 가능하다는 것도 학습하였다. 

      다음 강의에서는 본격적인 실습으로 넘어갈 것이다. 다만, 필자의 사양으로는 한계가 느껴져 최소한의 실습만 할 수도 있을 듯하다. 아래와 같은 에러가 계속 발생해서 순간 욱할 때가 있다. 가능하다면 pc에 탑재하여 가동하는 것이 좋은 것 같다.

    코랩 스테이블 디퓨전 에러

    728x90
    반응형