한국 전통 회화 모델 제작기 (SDXL 기반)

Traditional Korean Painting Model production history (based on SDXL)

(Translated from English using DeepL)

하이퍼네트워크SD1.5 기반의 모델을 만들고 난 뒤 몇 달 지나지 않아 SDXL이란 모델이 나왔습니다. 그 당시 SD2.1 기반의 모델은 작업을 하지 않았습니다. 그 이유는 컨트롤넷을 사용하기 어려운 점과 명확하게 SD1.5 보다는 낫지 않았기 때문에 꺼려졌습니다. 프롬프트에 따른 변화는 명확하게 줄 수 있고, 알려진 피사체에 대한 재현은 좀 더 나아 보이지만 높아진 사양에 비해서는 명확한 이점은 없었습니다. 하지만 SDXL의 경우 컨트롤넷과 여러 가지 기능이 바로 지원될 것이라고 이야기와 지원되는 해상도에 대비해서 그렇게 많은 사양을 요구하지 않았기에 시도를 해보았습니다.

A few months after creating the hypernetwork and the SD1.5-based model, a model called SDXL came out. At that time, I didn’t work on the SD2.1-based model because I was reluctant to use ControlNet and because it wasn’t clearly better than SD1.5. You can definitely change things based on prompts, and the reproduction of known subjects looks a little bit better, but there was no clear advantage over the higher specs. But with SDXL, they said that ControlNet and a bunch of other things would be supported out of the box, and they didn’t ask for that many specs for the supported resolutions, so I gave it a shot.

데이터 준비 / Prepare data

SD1.5 모델에서는 크게 두 개의 데이터를 준비했었습니다. 수묵화 데이터와 김홍도 그림이었습니다. 이번에는 좀 더 화가의 수를 늘렸습니다. 공유마당에 있는 화가 중 상위 7명을 선정했고 디지털 K-art 데이터를 추가했습니다.

In the SD1.5 model, we prepared two types of data. This time, we increased the number of painters. We selected the top 7 painters in the shared yard and added digital K-art data.

조선시대 화가 / Joseon Dynasty Painters Link

조선시대 화가의 그림은 수량이 적기 때문에, 그림을 조각내고 좌우 반전을 통해서 그림 장수를 늘렸습니다. 총 5684장.

Since the paintings of Joseon Dynasty painters are few in number, the paintings were fragmented and reversed to increase their longevity. 5684 paintings in total.

  1. 강세황 / kangsehwang
    520장 / 520 paintings (원본 그림 130장)
  2. 김홍도 / kimhongdo
    1768장 / 1768 paintings (원본 그림 487장)
  3. 신윤복 / sinyunbok
    452장 / 452 paintings (원본 그림 72장)
  4. 심사정 / simsajeong
    652장 / 652 paintings (원본 그림 133장)
  5. 안중식 / anjungsik
    410장 / 410 paintings (원본 그림 69장)
  6. 장승업 / jangseungeop
    496장 / 496 paintings (원본 그림 88장)
  7. 허련 / heoryeon
    1386장 / 1386 paintings (원본 그림 250장)

디지털 K-art 데이터 / Digital K-art data Link

11246장 중 6253장으로 줄였습니다. aihub에 있는 자료는 정말 엄청나게 많기 떄문에, 일단 그중 라벨링이 되어있는 데이터로 줄였습니다. 그렇게 11246장이 나왔으며 그 중 정사각형에 가까운 이미지를 골라서 내서 6253장이 나왔습니다.

So out of the 11,246 images, I narrowed it down to 6,253. There’s a lot of data on AIHUB, so I just narrowed it down to the data that was labeled, and that gave me 11,246 images, and I picked out the ones that were close to a square, and that gave me 6,253 images.

한국 전통 수묵화 화풍별 제작 데이터 / Production data for traditional Korean ink paintings by style Link

5860장의 이미지를 정사각형으로 잘라낸 자료를 사용했습니다. 이 데이터도 엄청 많기 때문에 수량을 늘릴 수 있으나 조선시대 화가의 데이터와 비슷한 양으로 설정했습니다.

I used a baseline of 5860 images cropped into squares. This is a lot of data, so you can increase the quantity, but I set it to a similar amount to that of a Joseon painter.

데이터셋 규모를 비슷하게 설정한 이유 / Reasons for similar dataset sizes

SD1.5에서의 경험이 반영되어 있는데, 김홍도 그림과 수묵화 데이터 의 양이 다른 상태에서 파인튜닝을 하면 두 컨셉의 이미지가 잘 나올때의 설정이 달랐습니다. 구체적으로 CFG scale이 전자는 6-7에서 최상이며 후자는 3-4에서 최상의 결과물이 나왔습니다. 또 파인튜닝이 많이 될수록 최적의 CFG scale이 낮아지는 경향을 보았는데, 비슷한 정도를 학습시키기 위해 크기를 비슷하게 맞추었습니다.

This reflects our experience in SD1.5, where we found that fine-tuning with different amounts of Kim Hong-do painting and ink drawing data resulted in different settings for the best images of the two concepts. Specifically, we found that the CFG scale was best at 6-7 for the former and 3-4 for the latter. We also found that the optimal CFG scale tended to decrease as the amount of fine-tuning increased, so we tried to keep the scales similar in order to train to a similar degree.

캡션 생성 / Create captions

캡션을 만드는데 CLIP Interrogator 2.4를 사용하였습니다. 설정은 git-large-coco, ViT-H-14/laion2b_s32b_b79k를 했는데, 샘플 몇 개를 골라 종류별로 뽑아보고 괜찮다고 생각된 설정을 선택했습니다.

I used CLIP Interrogator 2.4 to create the captions. The settings were git-large-coco, ViT-H-14/laion2b_s32b_b79k, and I picked a few samples to play around with and chose the ones I thought looked good.

그리고 위의 캡션을 생성한 후 몇 가지 텍스트를 추가했습니다. 각 화가의 영문 이름을 추가한 뒤 whtjs이란 텍스트를 추가했습니다. 그리고 K-art에는 gksrnr 이란 텍스트를, 그리고 수묵화에는 tnanr 이란 텍스트와 화풍의 영문 이름을 추가했습니다.

And after creating the caption above, I added some text: I added the English name of each painter, then added the text whtjs, then added the text gksrnr for K-art, then added the text tnanr for ink paintings, then added the English name of the painting style.

전체적인 캡션은 아래와 같이 구성되어 있습니다.

The overall caption is configured as follows

datacaptions
강세황 / kangsehwangwhtjs, kangsehwang,
+ Captions created by CLIP Interrogator 2.4
김홍도 / kimhongdowhtjs, kimhongdo, + …
신윤복 / sinyunbokwhtjs, sinyunbok, + …
심사정 / simsajeongwhtjs, simsajeong, + …
안중식 / anjungsikwhtjs, anjungsik, + …
장승업 / jangseungeopwhtjs, jangseungeop, + …
허련 / heoryeonwhtjs, heoryeon, + …
디지털 K-art 데이터 / Digital K-art datagksrnr, + …
수묵화 백묘법 /
traditional Korean ink paintings baengmyo
tnanr, baengmyo, + …
수묵화 구륵법 /
traditional Korean ink paintings gureuk
tnanr, gureuk, + …
수묵화 몰골법 /
traditional Korean ink paintings molgol
tnanr, molgol, + …

파인 튜닝 / Fine Tuning

SD학습법 5가지 글에 있는 프로그램 중 kohya-ss를 사용했습니다. 이전에 사용하던 StableTuner는 SDXL지원이 없었으며 정신적 후속작인 One Trainer는 클라우드를 지원하지 않았습니다.

Of the programs in this article, I used kohya-ss. My old StableTuner didn’t have SDXL support, and its spiritual successor, One Trainer, didn’t support the cloud.

Runpod에서 학습을 했으며 사용된 RTX 6000 Ada를 사용했습니다. 비용은 125$가 쓰였습니다. 시행착오를 제외하고 예상되는 비용은 80$로 예상됩니다. 그리고 저는 learning rate를 낮게 설정해서 학습을 했기에 실제 비용을 줄일 수 있는 여지는 좀 더 있을 것으로 생각됩니다.

I did the learning on Runpod and used a used RTX 6000 Ada, which cost me 125$. Excluding trial and error, the expected cost is expected to be 80$. And I did the learning with a low learning rate, so I think there is some room to reduce the actual cost.

학습 진행 과정 / Progression of Fine Tuning

조금씩 학습시키면서 데이터셋을 바꾸어서 다음 학습을 이어갔습니다. 각 스텝마다 모델을 저장한 뒤 이미지를 출력하여 테스트했습니다. 이미지는 학 화가별, 화풍별로 뽑아보았고, 주제는 산, 남자, 여자, 고양이, 나무, 집 이렇게 여섯 가지로 뽑았습니다. 각 이미지가 2d의 그림으로 나오는지 테스트한 뒤 괜찮은 결과가 나온 모델을 선택하고 학습을 이어 나갔습니다. 아래는 그 과정을 나타낸 표와 차트입니다.

After each step, I saved the model and tested it by outputting images. The images were selected by artist and painting style, and the subjects were six: mountains, men, women, cats, trees, and houses. I tested each image to see if it came out as a 2D picture, then selected the model with good results and continued training. Below is a table and chart showing the process.

이미지 판정 예시 / Image judgement examples

(테스트는 comfyui를 사용하여, euler, 20 steps, 8cfg, 1024×1024로 이루어졌습니다.)

학습 과정을 기록한 표와 차트
표 / Table

그림에 표시되지 않은 설정은 아래와 같습니다.
The settings not shown in the figure are as follows

mixed_precision: bf16
optimizer: Adafactor
save_every_n_epochs: 1
save_precisio: bf16
train_batch_size: 16 or 32
train_text_encoder: false
training image repeats: 1
full bf16 training

중간에 몇 가지 고비가 있습니다. 학습할수록 품질이 감소하던 구간이 두 번 이었습니다. 그럴 때마다 품질이 나빠지더라도 학습을 진행한 뒤 결과를 테스트했습니다.

There are some bumps in the road. There were two stretches where the quality decreased as we learned, and each time, we kept learning even though the quality got worse and then tested the results.

또한 k-art의 데이터는 잘 학습이 되지 않았습니다. 입력된 데이터에 비해서 결과물이 상당히 아쉬웠는데, 이 부분은 학습시킬수록 개선이 되지 않아서 2d 이미지가 나오는 선에서 학습을 그만두었습니다. 또한 자료가 부족한 화가의 결과물은 제대로 나오기가 어려웠습니다. 안중식 화가의 작품이 그러했습니다. 그리고 심사정 화가의 작품은 어째서인지 여성의 그림으로만 채워지는 현상이 나오기도 했습니다. 캡션에서 어떤 인물과 겹친 것은 아닌가 추측됩니다.

Also, K-ART’s data was not trained well, and the results were quite disappointing compared to the input data, which did not improve as we trained it, so we stopped learning at the point where 2D images appeared. Also, it was difficult to get good results from painters who lacked data. This was the case with Ahn Jung-sik’s work, and for some reason, Shim Seong-jung’s work was filled with only women’s paintings. I’m guessing that the captions overlapped with some figures.

Model file and image example

Civit

https://civitai.com/models/81845

Hugging Face

https://huggingface.co/gagong/Traditional-Korean-Painting-Model-v2.0

Image Example

Image Example

위의 이미지는 아래의 설정으로 나온 이미지 입니다.
The image above was created with the settings below.

  • seed: 12345
  • steps: 30
  • cfg: 8
  • sampler_name: dpmpp_2m
  • scheduler: karras
  • denoise: 1.0

사용 가이드 / User Guide

트리거 단어 리스트 / Trigger Words List

참고로 화가의 실제 그림체를 제대로 반영하지는 못합니다.

Note that this is not a true representation of the painter’s actual painting style.

트리거 단어 / Trigger Words효과 / Effects
whtjs조선시대 화가의 평균적인 화풍을 구현합니다.
Emulates the average painting style of a Joseon era painter.
kangsehwang가장 단순한 형태로 그려집니다.
It is drawn in its simplest form.
kimhongdo가장 품질이 뛰어납니다.
The highest quality.
sinyunbok두 번째로 품질이 뛰어납니다.
Second highest quality.
simsajeong그림에서 여성의 얼굴이 나올 확률이 높습니다.
A woman’s face is more likely to be in the image.
anjungsik가장 품질이 좋지 않습니다.
The lowest quality.
jangseungeop두 번째로 품질이 좋지 않습니다.
Second worst quality.
heoryeon가장 색상이 적은 결과물이 나옵니다.
The result is the one with the least colour.
gksrnr현대적인 형태를 만듭니다. 신체 오류가 자주납니다.
Creates modern shapes. Body errors are frequent.
tnanr아래 세 가지 수묵화 기법의 평균적인 모습을 만듭니다.
Produces an average look of the three ink painting techniques below.
baengmyowhtjs의 결과와 유사하게 나올 때가 많습니다.
The results are often similar to those of ‘whtjs’
gureuk얇은 경계가 있는 느낌으로 그림이 나옵니다.
The result is a picture with a thin border.
molgol경계가 없는 결과물을 만들어 냅니다.
Produces results that have no boundaries.

사용 팁 / Usage Tips

  1. 일반적으로 CFG scale이 높을수록 품질이 좋지 않습니다. 10 이상으로 설정하는 것은 추천하지 않습니다. 다만 짧은 단어는 영향을 거의 받지 않는 것으로 보입니다.
    In general, the higher the CFG scale, the worse the quality. We don’t recommend setting it above 10. However, shorter words seem to be less affected.
  2. 긴 문장을 입력할수록 일반적인 사진으로 나올 가능성이 높습니다. 그렇다고 트리거 단어의 가중치를 늘린다고 하더라도 결과물이 더 나아지지 않습니다.
    The longer sentences you type, the more likely you are to get a generic photo, and increasing the weight of the trigger word doesn’t make the result any better.
  3. 추천하는 CFG scale은 4-8 사이입니다.
    The recommended CFG scale is between 4-8.
  4. 품질이 떨어지는 트리거 단어를 단독으로 사용하지 마세요.
    Don’t use poor-quality Trigger Words in isolation.
  5. 트리거 단어 여러개를 동시에 사용해서 테스트를 하진 않았지만, 일반적으로 더 좋게 나올 것으로 추측됩니다.
    I haven’t tested using multiple trigger words at the same time, but I’m guessing it will generally work better.
  6. 이미지가 사진처럼 나올 경우 ‘painting’ 이나 ‘style’이란 프롬프트도 같이 사용하면 좀 더 나은 결과를 볼 수 있습니다. ex) kimhongdo painting
    If your image comes out looking like a photo, you may see better results if you also use the “painting” or “style” prompts. ex) kimhongdo painting
  7. 아직은 많이 사용하지 않아서 이후에 제시된 방법이 수정될 수 있습니다.
    I haven’t used it much yet, so the methods presented here may be modified in the future.

Comments

“한국 전통 회화 모델 제작기 (SDXL 기반)”에 대한 5개의 응답

  1. 안녕하세요

    안녕하세요. 혹시 프로젝트를 진행하시면서 도움을 받으셨던 영상이나 자료 공유 가능하실까요..? 제가 런포드도 한번도 안해봤고, koshya-ss도 한번도 안해봐서 너무 막막한데 찾아보면 자료들이 너무 없는 것 같아서 돌고 돌다 여기로 오게 됐습니다 ㅠㅠ

    1. 가공자료

      네 런포드는 사용하시는게 어렵지 않은데 한번 가입해서 써보시는 추천합니다. 아니면 구름 ide 사용하는 느낌과 비슷한데, 저 설정할 때 찾아봤던 페이지가 있어서 1-2일 내로 다시 댓글 달겠습니다. kohya_ss는 저도 이번에 처음 해서 좀 어렵더라구요. 같은 용어나 설정이 조금 다르게 쓰이기도 했던것 같습니다.

    2. 가공자료

      안녕하세요. 제가 kohya를 사용할 때, 참고했던 영상과 글입니다. 
      https://www.youtube.com/watch?v=-xEwaQ54DI4

      https://github.com/FurkanGozukara/Stable-Diffusion/blob/main/Tutorials/How-To-Install-Kohya-LoRA-Web-UI-On-RunPod.md

      일단 여기 튜토리얼 대로 해보시고, 막히거나 모르겠는 부분을 말씀해 주세요.

  2. 지나가는팬

    너무 멋지십니다! civitai에서 보고선 이런걸 만든것에 대해 감탄했었는데 여기 자세하게 설명도 해주셨네요~ 응원하고 갑니다!

    1. 가공자료

      감사합니다!!
      데이터 다시 좀 다듬어서 새로운 버전도 나오지 않을까 싶네요.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다