이게 특정 텍스트 인버전Text Inversion을 주제로 다뤄서 단순 소개로 할까, 튜토로 할까 하다가 나름 내용이 있어서 튜토리얼로 한 번 뽑아봅니다. 튜토를 통한 자연스러운 기능 이해를 목적으로 하기 때매... 음 암튼 텍스트 인버전이 뭔지 시작부터 구구절절 설명하면 재미가 없으니까 일단 제목대로 이걸 이용해서 이미지 속 인물의 연령대부터 막 바꿔봅시다. 아주~ 신기방기하니까 따라해보셈~~
순서는 다음과 같습니다.
1. civitai 가서 나이 조절age-slider 텍스트 인버전text inversion 다운받기
2. 프롬프트Prompt에 텍스트 인버전text inversion 적용하기
끝입니다. 역시 심플 그 자체, 하지만 효과는 아주 놀라우리만큼 좋습니다. 한 번 보시죠.
1. civitai 가서 나이 조절age-slider 텍스트 인버전text inversion 다운받기
아래 주소로 이동합니다.
https://civitai.com/models/65214/age-slider
위쪽에 탭 하나씩 눌러서 파일을 다 다운 받습니다. V2 버전은 V2 버전으로 다운 받으세요. 확장자는 .pt 파일입니다.
다운받은 파일을 전부 아래와 같은 스테이블 디퓨전 웹UI 하위 임베딩 폴더에 넣어줍니다.
stable-diffusion-webui\embeddings
그 다음 스테이블 디퓨전 실행~
2. 프롬프트Prompt에 텍스트 인버전text inversion 적용하기
이제 아주 간단합니다. 그냥 프롬프트에 텍스트 인버전을 작동시키는 키워드를 넣어주기만 하면 됩니다. 대강 다 다운 받았다면 사용법은 civitai에 나온 바, 아래와 같습니다.
사람/생물/캐릭터를 더 젊게 만듭니다.
AS-YoungV2-Neg: 부정적인 프롬프트를 1.0에서 1.3의 강도로 배치하고 성인을 장면에서 제거합니다.
AS-YoungV2: 강도 1.0에서 1.3 사이에서 긍정적인 프롬프트의 시작 부분에 배치합니다. 10대가 나옵니다.
AS-YoungerV2: 강도 1.0에서 1.3 사이에서 긍정적인 프롬프트의 시작 부분에 배치합니다. 어린이가 나옵니다.
AS-YoungestV2: 1.0에서 1.3의 강도로 긍정적인 프롬프트의 시작 부분에 배치합니다. 유아/아기가 나옵니다.
.
사람/생물/캐릭터를 성인 또는 노인으로 만듭니다.
AS-Adult-Neg: 부정적인 프롬프트를 1.0에서 1.3의 강도로 배치합니다. 이렇게 하면 장면에서 모든 청소년이 제거됩니다.
AS-Adult: 1.0에서 1.3의 강도로 긍정적인 프롬프트의 시작 부분에 배치합니다. 완전히 성숙한 성인 20~30대가 나옵니다.
AS-MidAged: 1.0에서 1.3의 강도로 긍정적인 프롬프트의 시작 부분에 배치합니다. 40~60대 중년 성인이 나옵니다.
AS-Elderly: 1.0에서 1.3의 강도로 긍정적인 프롬프트의 시작 부분에 배치합니다. 노인이 나옵니다.
모두 lora 또는 프롬프트에 따라 결과가 달라질 수 있습니다.
앞에 두꺼운 글씨체가 프롬프트에 들어갈 것들입니다. 강도를 1.0~1.3 ? 이전 튜토 기억나시죠? 예를 들어 (AS-YoungV2) 이렇게 쓰면 1.1의 강도입니다. 혹은 (AS-YoungV2:1.1) 이렇게 써도 됩니다. 아무튼 이게 답니다. 그럼 원본이미지와 설정부터 한 번 봅시다.
원본이미지
설정
프롬프트는 portrait of man in black suit 이렇게 쓰고 시드seed를 고정했습니다. 자 그럼 위에서 시키는대로 프롬프트에 키워드를 추가해서 저 아저씨를 10대로 바꿔볼까요?
프롬프트 앞쪽에 이렇게 (AS-YoungV2) 문구를 추가합니다. 제대로 텍스트 인버전 파일을 다운 받았다면 이걸로 끝입니다.
생성Generate버튼 눌러줍니다. 그리고 결과는, 아주 놀랍죠.
프롬프트에 (AS-YoungV2) 추가
제대로 회춘했죠. 10대보다 더 어려보이지만 어쨌든. 자 내친김에 하나 더 해볼까요? 저 아저씨를 노인으로 만들어보겠습니다. 쉽죠. (AS-Elderly) 를 프롬프트 앞에 추가해주면 됩니다. 결과는?
프롬프트에 (AS-Elderly) 추가
얼굴에 살짝 노이즈가 끼긴 했지만 어쨌거나 완전한 노인이 돼버렸죠. 정말 놀랍지 않나요? Deforum으로 늙어가는 트랜지션도 만들 수 있겠네요.
자 그렇다면 과연 이런 일이 어떻게 가능한가?
당연히 텍스트 인버전Text inversion이 제대로 기능했기 때문이겠죠. 이제부터 원리 설명 들어갑니다. 코너 속 코너 <이해해보기> 입니다. ㅋㅋ 그냥 여기까지만 보고 저거만 써먹을실 분은 뒤로가기 하셔도 됩니다. ㅋㅋ뭐 깊이 알 필요 있나요?ㅋㅋ
텍스트 인버전은 위와 같은 용도 외에 프롬프트를 대폭 줄일 수 있는 용도로도 쓰입니다. 여기저기 돌아다니면서 AI ART 구경하다 보면 프롬프트가 엄청나게 긴 것들을 볼 수 있습니다. 뭐 이런 식으로요.
이게 잘못됐다는 건 아닙니다. 어차피 자연어 프롬프트에 정답은 없고 이렇게 쳐서 원하는 결과물을 얻었다면 그걸로 된 겁니다. 하지만 무작정 이거저거 다 넣어서 프롬프트가 길어지다 보면 아무래도 우리가 궁극적으로 도달하고자 하는 '의도를 그대로 표현하는 인공지능' 이미지를 규정하기가 더 어려워질 수 있겠죠. 또 여기저기 찾아다니며 보면 알겠지만 이미지의 퀄리티를 올리기 위해 동어를 반복하고 나열하는 경우가 많습니다. 그리고 그 효과 또한 그때그때 다르기도 하죠.
위의 나이조절 예제도 같습니다. 원래 이미지를 그럴듯한 어린이로 바꾸려면 프롬프트를 남발하고 바꿔가면서 아주 복잡해질 겁니다. 역시나 결과도 장담할 수 없고요.
아- 그럼 텍스트 인버전이란 저런 복잡한 프롬프트를 단순히 하나의 키워드로 축약해놓은 것이구나!!!!!?
삐- 그건 또 아닙니다.
텍스트 인버전text inversion은 아주 쉽게 말해 인공지능에게 새로운 단어, 키워드를 알려주는 겁니다. 방법은 예를 들어 위처럼 AS-Elderly 라는 키워드를 제시하면 노인 이미지를 생성하도록 훈련을 시키는 거죠. 키워드와 그에 맞는 이미지를 추가로 학습시키는 겁니다. 모델 학습과는 달리 그렇게 많은 이미지가 필요하지도 않아서 경제적입니다. 여기서 이해하고 넘어갈 건 추가로 훈련한 이미지가 모델에 포함되는 것은 아니라는 겁니다. 그 특성이 키워드에 반영될 뿐입니다. 그 특성을 기반으로 원래 모델이 가지고 있던 이미지 풀 안에서 생성이 되는 것입니다.
오케이- 그렇다면 이거 파일 다운받아서 넣는 폴더 이름은 왜 임베딩embedding이지?
예전 원리 설명 때 언급하긴 했던 것 같은데 자연어를 인공지능이 알아먹게 바꾸는 벡터화니 인코딩이니 뭐니 하는 과정이 임베딩 아닙니까? 이것도 마찬가지입니다. 다만 임베딩 그 자체는 아니고, 그걸 이용하는 하나의 방법일 뿐입니다. 인공지능이 이미 가지고 있는 임베딩 영역에 새로운 키워드를 학습시키는 것-이 텍스트 인버전입니다. 구분이 됩니다. 걍 중요한 건 둘은 다른 개념이란 거 ㅋㅋ 헷갈리지 맙시다.
예를들어 Dreamshaper V6 모델은 네거티브 프롬프트에 쓰는 용도로 Bad Dream이라는 텍스트 인버전을 제공합니다. 저걸 네거티브 프롬프트에 쓰면 얼굴이 뭉개지거나 하는 오류가 줄고 선명하고 좋은 이미지가 나옵니다. 이런 경우에는 Bad Dream이라는 키워드와 함께 저퀄리티, 오류 이미지를 학습시킨 거겠죠.
그럼 여기까지~ 혹시 오류가 있으면 지적하고 보정해주세요~
전국민 AI 아티스트의 그날까지~ 고고 ㅋㅋㅋ
출처 - AI ARTWORK LAB : 네이버 카페 (naver.com)
'ai 만들어보기(feat ai artwork lab)' 카테고리의 다른 글
[튜토리얼]초초강력 최신 기술을 당장 사용해보자!!!!! <SDXL 0.9> (0) | 2023.07.10 |
---|---|
[튜토리얼]이미지의 크기를 내멋대로 늘려보자! <Upscale -1-> + GAN 이해해보기~ (0) | 2023.07.07 |
[튜토리얼]인공지능 생성이미지 인물의 포즈를 내 멋대로! <ControlNet 깨부수기 -2-> (0) | 2023.07.04 |
[튜토리얼]인공지능 생성이미지를 내 의도에 가깝게 만드는 강력한 도구! <ControlNet 깨부수기 -1-> (0) | 2023.07.03 |
[튜토리얼]사진은 지겹다! 인공지능으로 예술적인 영상을 만들어보자! <deforum 깨부수기 -1-> (0) | 2023.07.03 |