LoRA를 사용하면, Flux.1 dev 모델 전체를 다시 학습시킬 필요 없이, 맞춤형 스타일을 정의할 수 있습니다. 이 기술을 사용하면 계산과 저장 측면에서 공간을 적게 차지하면서도, 특정 개념, 인물 또는 스타일에 맞춰 모델을 조정할 수 있습니다.
LoRA학습 자체는 그다지 어렵지 않습니다. Flux 용 LoRA 학습 투토리얼에서 설명한 것처럼, 온라인에서도 학습시킬 수 있습니다. 그러나, 효과적인 LoRA 의 핵심은 학습 데이터세트에 달려있습니다. 즉, 학습용으로 선택한 이미지가 LoRA의 성능에 직접적으로 영향을 미치게 됩니다.
이 글에서는 최적의 데이터세트를 만드는 방법을 알아보겠습니다. 이미지의 양, 이미지 다양성 및 품질의 중요성, 캡션의 생성 등과 같은 핵심적인 요소에 대해 알려드리겠습니다. 여기서 캡션이란, AI에게 가르치고하 하는 내용을 잘 알려주기 위한 이미지에 대한 설명입니다.
데이터 세트를 준비하는 방법
데이터세트를 생성하기 위한 첫단계는 학습 데이터로 사용할 이미지를 선택하는 것입니다. 아래에서는 어떻게 LoRA 학습에 사용될 이미지를 선택할 것인가에 대해 설명합니다.
적정량: 너무 많아도, 너무 적어도 안됨
학습용 이미지를 선택할 때의 첫번째 규칙은 적절한 양(충분하되 너무 많지 않은 양)의 이미지를 확보하는 것입니다.
물론 원하는 개념에 대한 전체성(개념 전체가 포함되도록 할 것)과 다양성(가능한 한 다양한 변종을 선택할 것)을 확보할 수 있을 만큼 충분한 이미지가 필요합니다. 이미지 수가 많을 수록 모델의 정확도가 높아집니다.
하지만, 너무 많은 정보를 과도하게 공급하면 (훈련시간이 늘어날 뿐 아니라) 위험성이 높아지며, 특히 나쁜 이미지가 끼어들 경우 결과는 더욱 나빠지게 됩니다.
사람이나 캐릭터의 경우, 10~20장 정도를 목표로 하는게 좋습니다. 자세나 스타일의 경우에는 조금 더 많은 게 좋을 수도 있습니다. 어떤 사람들은 5 장 정도로도 사람에 대한 LoRA를 생성할 수 있다고 주장하지만, 제 생각엔 좀 더 많은 이미지를 사용하는 것이 좋다고 생각합니다.
다양성: 다재다능한 LoRA의 핵심
두번째 규칙은 맥락상의 다양성에 초점을 맞추는 것입니다. 다양성은 다재다능한(여러가지로 활용이 가능한) LoRA의 핵심입니다.
아래는 이미지 데이터세트의 다양성을 확보하는 방법의 예입니다.
- 풍경 바꾸기: 피사체가 여러가지 환경에서 촬영된 이미지를 선택합니다. 실내, 실외, 도시, 자연 등에서 촬영한 인물사진을 넣어주면 LoRA가 모든 상황에 적응하는 방법을 배울 것입니다.
- 자세 바꾸기: 캐릭터나 사물을 작업하는 경우, 촬영각도와 자세를 다양하게 바꾸는 게 좋습니다. 정면에서, 옆에서, 움직이는 모습 등등 다양한 자세를 입력할 수록 LoRA가 3D 구조를 이해하는 데 도움이 됩니다.
- 조명 바꾸기: 동일한 피사체라도 조명에 따라 매우 다르게 보입니다. 햇빛이 강한 곳, 그늘진 곳, 인공조명 등등 조명환경이 달라지만, LoRA가 그림자, 반사, 조명 분위기를 관리하는 방법을 배우게 됩니다.
인물에 대한 LoRA 모델을 생성할 경우, 얼굴의 특징이나 세부 사항을 파악할 수 있도록 초상화 스타일을 절반 정도 사용하는 것이 좋습니다. 또 얼굴이 정면을 향하는 와이드 샷을 1/4, 측면 및 기타 각도로 촬영한 다양한 이미지를 1/4로 나머지를 채우면 좋습니다.
스타일이나 장르에 대한 LoRA의 경우, 다양성은 피사체 그 자체에서 확보할 수 있습니다. 이 경우, 서로 다른 다양한 캐릭터, 사물, 장면을 동질적인 스타일로 유지하는 것이 좋습니다. 달리 말해서 동일한 스타일로 여러가지 대상을 표현한 이미지가 들어가는 것이 중요합니다.
정확도: 혼란 회피
세번째 법칙은 원하는 개념을 정확하게 보여주는 이미지를 사용하는 것입니다. 자신의 개념과 다른 개념의 이미지를 섞으면 혼란을 일으키게 됩니다.
인물이라면 그 인물이 주 피사체인 이미지, 그리고 다른 사람이 없는 이미지를 사용하는 것이 좋습니다. 반대로 사물이나 동물의 경우, 해당 사물/동물이 주 피사체이고, 명확하게 인식될 수 있는지 확인하시는 것이 좋습니다.
품질: 양보다는 질
이미지를 선택할 때 가장 중요한 마지막 기준은 품질입니다. 위에서 언급한 세가지 기준을 따르더라도, 성공적인 LoRA를 생성하기 위해서는 소스 이미지의 품질이 가장 중요함을 기억하셔야 합니다.
해상도보다 좋은 품질이 더 중요합니다. 일반적으로 512x512 정도면 더 큰 이미지만큼 좋은 결과를 제공하며, 크기가 크더라도 품질이 나쁘면 의미가 없거나 혹은 부정적인 영향을 미칠 수 있습니다. 예를 들어 10개의 고품질 이미지를 사용하는 것이 30개의 보통 품질을 사용하는 것보다 훨씬 나은 결과를 생성합니다.
LoRA를 이용하여 구현하려는 결과가 아니라면, 흐릿하거나 손상되었거나 마감이 형편없는 이미지는 절대적으로 피하셔야 합니다. 품질이 별로인 이미지가 하나라도 있으면 학습 결과에 부정적인 영향을 미치게 됩니다. 일반적으로 말씀드리면 품질이 좋지 않은 이미지를 넣느니 차라리 빼는 것이 더 좋은 결과를 만들어 냅니다.
결론적으로, 지금까지 말씀드린 4가지 규칙(적정량, 다양성, 정확도, 품질)을 잘 따르면 LoRA 가 다양하고 사실적이며, 원하는 개념을 잘 표현하는 이미지를 생성할 수 있습니다.
파일 이름과 포맷 엄격한 규칙은 아니며, 일부 프로그램은 여러가지 파일 포맷을 지원하기도 하지만, 파일 포맷은 JPG 또는 PNG로 사용하는 것이 좋습니다. 또한 파일명은 고유한 이름 뒤에 일련번호를 붙여주는 것이 좋습니다. 이러한 명명 규칙을 따르면 아래에서 설명하는 이미지 설명을 이미지와 연결시킬 때 편리합니다. |
예제
저는 스폰지송 LoRA를 만들어보기 위해 구글에서 20개의 이미지를 찾았습니다. 원본 이미지가 많아서 포맷 변환외에는 거의 그대로 사용했습니다.
대부분 품질은 괜찮은 편이고, 크기는 한두개 정도 외에는 한쪽 크기가 1000픽셀 이상입니다.
이 파일들을 사용하고 싶으시면 아래 zip파일을 다운로드 받아 사용하시면 됩니다.
이미지 설명
이 단계는 필수는 아니지만, 이미지 설명을 정확하게 부여할 수록 LoRA의 품질이 좋아질 수 있습니다.
설명을 작성하는 이유
파일 설명(description)은 캡션이라고도 하는데, 역방향 프롬프트와 비슷합니다. 이미지 설명은 학습중에 이미지를 설명하고, 이미지에서 개념에 해당하는 부분(또는 해당하지 않는 부분)을 식별하는데 도움이 됩니다.
각각의 이미지에 대해 이미지에 존재하는 내용에 대한 짧막한 설명(영어로)을 기술합니다. 아울러 LoRA 가 학습할 필요가 없는 부분에 대해서도 기술합니다.
예들 들어, 항상 수염을 기르고 안경을 쓰고 다니는 사람에 대한 LoRA의 경우, 설명에서 이러한 내용은 없어야 합니다. 반대로 어떤 때는 안경을 쓰고, 어떤 때는 안쓰는 경우에는 이를 설명에 기입해 두는 것이 좋습니다. 이렇게 해 두면 프롬프트에 "glass"란 말을 넣는지 아닌지에 따라 안경을 쓴 모습과 안쓴 모습의 초상화 이미지를 생성할 수 있게 됩니다.
또한 설명을 사용하면 하나 이상의 트리거(trigger) 단어를 선택할 수 있습니다. 트리거란, LoRA의 개념 또는 특성을 나타내는데 사용하는, 프롬프트용 키워드를 말합니다.
설명 작성 방법
20개의 이미지를 영어로 설명을 달기는 쉽지 않습니다. 특히 원어민이 아닌 이상 이미지의 세부 정보를 포함하는 긴 설명을 쓰는 것은 무리죠. 이럴 때에는 먼저 영어로 설명을 달고, DeepL과 같은 도구를 사용해서 번역하는 것도 괜찮은 방법입니다.
하지만, 더 좋은 방법이 있습니다. 이미지를 분석해서 설명을 달아주는 AI 도구를 사용하는 것입니다(이를 Image-to-Prompt라고 부르기도 합니다). 이러한 도구도 온라인상에 여러가지가 좋아하는데, HuggingFace에서 무료로 사용할 수 있있는 JoyCaption을 추천합니다.
만들어진 설명(캡션)은 반드시 확인하고 필요하다면 수정하셔야 합니다. AI가 환각을 보고 이미지에 없는 것을 설명하는 경우도 있기 때문입니다. 무엇보다 중요한 것은, 위에서 서술한 것처럼, LoRA에게 가르치고자하는 내용은 설명에서 제거해야 한다는 것입니다.
아울러, 이미지 설명은 LoRA의 캐릭터 또는 개념을 식별하는데 사용되는 키워드(트리거)로 시작하는 것이 좋습니다. 즉, 먼저 키워드를 쓴 다음, JoyCaption에서 얻은 것과 유사한 자세한 설명을 추가하면 됩니다.
설명을 꼭 써야 할까?
반드시 설명을 써야하는 것은 아니며, 아무런 설명 없이 LoRA를 학습시킬 수도 있습니다. 또한 모든 이미지 설명에 단 하나의 트리거 단어만 넣어서 좋은 결과를 얻기도 합니다.
하지만, Civitai에서 mnemic이란 분이 테스트한 결과에 따르면 키워드 + 긴 설명을 조합하면 LoRA의 효율성과 유연성이 높아지는 것으로 나타났습니다.
참고 FluxGym과 같은 LoRA 학습기나, Replicate와 같은 LoRA 학습 사이트에서는 자동 캡션을 제공합니다. 자동 캡션은 이미지를 읽어서 이미지의 내용을 프롬프트로 바꿔주는 역할을 합니다. 따라서, 이미지별로 각각 작업하는 것보다, 이런 자동 캡션을 사용하는 것이 효과적일 수 있습니다. |
예제
먼저 JoyCaption에 이미지를 올린 후, Caption을 눌러 이미지에 대한 설명을 얻습니다. 아래는 맨 마지막 이미지에 대한 설명입니다.
![]() |
This image is a digital cartoon illustration of SpongeBob SquarePants, a popular animated character known for his cheerful and energetic personality. SpongeBob is depicted with a yellow, rectangular body, typical of his design, with a square head and arms that extend out to the sides, giving a sense of joy and exuberance. His eyes are large, blue, and expressive, with thick, black eyelashes. SpongeBob's mouth is open wide, showing his pink tongue and teeth, conveying a sense of excitement or laughter. His skin is textured with small, yellow patches, resembling sponge material, and he has two small, round red spots on his cheeks. SpongeBob wears a white shirt with a red tie, and brown shorts with a white stripe on the sides. His shoes are black with white soles. The background is solid black, making SpongeBob the sole focus of the image, with no other objects or people present. The style of the illustration is bright and colorful, typical of animated cartoons, with smooth lines and vibrant colors that give it a lively and playful feel. |
그 다음 이 설명을 편집합니다. 맨 앞에는 "SpongeBobCharacter"라는 키워드를 넣었고, 설명에서 스폰지송의 일반적인 설명은 생략하고, 맨 마지막에 있는 전반적인 이미지 분위기도 제거했습니다. 아래는 최종 설명입니다.
SpongeBobCharacter. This image is a digital cartoon illustration of SpongeBob SquarePants. SpongeBob's mouth is open wide, showing his pink tongue and teeth, conveying a sense of excitement or laughter.
The background is solid white, making SpongeBob the sole focus of the image, with no other objects or people present.
이미지와 설명을 연결하기 대부분의 LoRA 학습 도구는 이미지 이름과 똑같은 이름의 .txt 파일에 설명을 넣는 방식을 택하고 있습니다. |
아래는 이렇게 해서 생성한 LoRA 학습용 이미지 + 설명 데이터세트입니다. 참고하세요.
결론
LoRA를 위한 품질 좋은 데이터세트를 만드는 것은 창의성과 노하우가 필요한 균형잡힌 작업입니다. 위에서 언급했던 중요사항을 요약하면 아래와 같습니다.
- 이미지 갯수는 15~20개 정도가 좋습니다.
- 다재다능한 LORA를 원하면 다양한 이미지를 선택해야 합니다.
- 이미지의 양보다 질이 중요합니다.
- 표현하려는 개념에 맞는 이미지를 선택합니다.
- 이미지 설명을 캡션에 넣어주면 학습 결과가 좋아집니다.
프롬프트와 이미지 생성과 마찬가지로, LoRA 학습도 연습이 필수적입니다. 따라서 여러가지 방법을 시도하고, 결과를 보면서 조정하는 것을 두려워하지 않는 게 중요합니다. LoRA를 하나 만들 때마다 당신의 기술이 조금씩 더 좋아질 것입니다.
이제 필요한 정보를 모두 갖췄으니 데이터 세트만 준비하면 됩니다. 캐식터용 LoRA, 아트 스타일, 특정한 개념용 LoRA 등 어떠한 LoRA를 만들던지 관계없이, 이 글에서 설명한 원칙들을 적용하면 강력하고 유연한 모델을 만드실 수 있을 것입니다.
이상입니다.
이 글은 stablediffusion.blog의 글을 번역하며 테스트하여 작성한 글입니다.