애니퓨전-SD

Dec 23 2022
TL;DR 이것은 애니메이션 이미지를 위한 새로운 Stable-Diffusion과 같은 모델(SD2에서 미세 조정됨)이며 해상도 768x768을 지원하고 평가에 따르면 일부 인기 있는 애니메이션 모델보다 성능이 훨씬 뛰어납니다. 체크포인트는 공개(설치 지침)이며 데모는 한동안 사용할 수 있습니다.

TL;DR

이것은 768x768 해상도를 지원하는 애니메이션 이미지를 위한 새로운 Stable-Diffusion과 같은 모델(SD2에서 미세 조정됨)이며 평가에 따르면 일부 인기 있는 애니메이션 모델보다 성능이 훨씬 뛰어납니다. 체크포인트는 공개( 설치 지침 )이며 데모 는 한동안 사용할 수 있습니다.

  • 소개
  • 배경
    - 확산 모델
    - 잠재 확산
    - 안정 확산
    - Waifu 확산
    - 안정 확산 2
  • 모델: 교육
    - 컨디셔너
    - 기술 문제 및 최적화
    - 교육 세트 업데이트
    - 고해상도 교육
    - 샘플링 변경
  • 결과
  • 다른 애니메이션 모델과 비교
  • 논의
  • 참조
  • 포인터

훈련 확산 모델을 처음부터 실험 한 후 여러 사람이 동일한/유사한 데이터 세트에 미세 조정된 Stable Diffusion 버전이 많이 있음을 지적했습니다. 특히:

  • Waifu Diffusion : 원래 Stable Diffusion에 대한 코드 수정 없이 데이터의 상대적으로 작은 하위 집합을 사용하고 컨디셔닝을 위해 태그 프롬프트를 CLIP에 공급합니다(이는 IMO 문제임). 그럼에도 불구하고 현재 가장 인기있는 애니메이션 확산 모델인 것 같습니다. 차기 모델과 달리 대중을 위한 체크포인트를 공개했다.
  • NovelAI : 독립적인 연구원/엔지니어가 아닌 실제 회사에서 수행합니다. 모델을 출시하지는 않지만 유료 인터페이스를 제공합니다. 분명히 체크포인트와 코드가 유출되는 드라마도 있었는데, 여기에서 원래 Stable Diffusion에 약간의 수정이 있었던 것 같습니다.
  • Anything-v3 : 이 모델은 조금 나중에 나타났습니다. 모델에 대한 정보가 많지 않지만 WaifuDiffusion에서 미세 조정된 것으로 의심됩니다(적어도 CLIP에 공급하기 전에 유사한 프롬프트 변환을 사용합니다). 매우 상세하고 멋지게 보이는 이미지를 생성하지만 프롬프트에 그다지 충실하지 않습니다. 그것의 출력 공간은 매우 작고(다양성이 부족하고, 모든 이미지는 동일한 스타일을 가지며 서로 유사함) 사전 확산 GAN 모델을 연상시킵니다. 다른 모델과 달리 이 모델도 NSFW를 생성할 수 없으므로 단일 아티스트가 고품질 이미지의 작은 데이터 세트를 미세 조정하여 얻은 것일 수 있습니다.

그러나 이 분야에 모델이 많기 때문에 처음에는 관여하지 않고 진행 과정을 진행하기로 결정했습니다. 하지만 지금은 Stable Diffusion 2 가 출시되었고 애니메이션 모델에서는 아직 눈에 띄는 진전이 없습니다. 그래서 시도해 보기로 했습니다. 이 게시물에서는 맞춤형 프롬프트 컨디셔너를 사용하여 Stable Diffusion 2를 미세 조정하고 결과를 보여주는 방법을 설명하고 있습니다. 물론 모델도 게시합니다. 제가 시도한 몇 가지 프롬프트에서 위에 나열된 모델보다 낫습니다. 다음 몇 개의 섹션은 기술적인 세부 사항에 중점을 둡니다. 관심이 없는 경우 결과 로 바로 건너뛸 수 있습니다 .

배경

무슨 일이 일어나고 있고 무엇이 변경되었는지 이해하기 위해 먼저 기존 모델에 대한 간략한 개요를 살펴보겠습니다.

확산 모델

확산 모델에 대한 자세한 내용은 다루지 않겠습니다. 이미 인터넷에 좋은 리뷰가 많이 있습니다. 우리의 목적을 위해 이미지 생성 프로세스를 일련의 "노이즈 제거" 단계로 분해하는 아이디어라는 것을 아는 것으로 충분합니다. 교육 중에 모델 백본(이미지의 경우 — 일반적으로 UNet)에게 손상된 이미지와 노이즈 제거 단계가 제공되고 단일 손상 단계를 실행 취소하려고 합니다. 추론하는 동안 임의의 노이즈에서 시작하여 백본을 반복적으로 적용하여 가상의 모든 손상 단계를 "실행 취소"합니다. 이것 뒤에 있는 정확한 수학은 정확해야 합니다. 추론 시 대부분의 최신 확산 모델은 샘플링 단계 수를 줄이기 위해 프로세스를 수정합니다(이는 프로세스가 수치적 방법으로 확률적 미분 방정식을 푸는 것과 의심스러울 정도로 유사하다는 것을 알아채고 더 스마트한 DE 솔버를 적용함으로써 가능해졌습니다. 대신에).

잠재 확산

이것은 틀림없이 대부분의 개방형 확산 모델에서 사용되는 가장 중요한 아이디어입니다. Google 또는 OpenAI와 같은 회사는 하드웨어가 많기 때문에 원본 픽셀 공간에서 확산 모델을 교육하고 사용할 수 있습니다. 그러나 평신도의 경우 512x512 픽셀 공간에서 UNet을 교육(또는 실행)하는 것은 매우 비쌉니다. 아이디어는 이미지를 원본 512x512x3 공간에서 잠재 공간(Stable Diffusion — 64x64x4의 경우)으로 압축하는 자동 인코더를 훈련시키는 것입니다. 오토인코더는 잠재 공간을 "좋게" 유지하기 위해 KL 기반 정규화를 사용 하는 VAE 로 훈련됩니다 .

그런 다음 모델은 이 64x64x4 공간에서 확산을 수행하며 이는 분명히 훨씬 더 효율적입니다. 단점은 VAE가 완벽하지 않고 이미지를 압축하는 동안 일부 정보가 손실된다는 것입니다. 그러나 실제로는 매우 잘 작동합니다.

FWIW, 대체 접근 방식이 가능합니다. 예를 들어 Imagen 은 픽셀 공간에서 저차원 이미지를 생성한 다음 점진적으로 확대합니다. 그러나 이것은 이 문서에서 설명하는 모델과 관련이 없습니다.

안정적인 확산

이것은 기술적 돌파구라기보다 사회적인 돌파구에 가깝습니다. 해당 모델 은 LAION 으로 훈련된 "바닐라" 잠재 확산 모델로, 대부분의 이전 이미지 생성 모델과 달리 일반에 공개되었습니다. 이로 인해 기계 학습에 익숙하지 않은 광범위한 청중이 기술을 사용할 수 있게 되었고, 많은 창의성, 토론 및 다양한 데이터 세트(예: 위에서 언급한 애니메이션 모델)에서 미세 조정하는 사람들을 촉발했습니다.

아키텍처에서 우리와 매우 관련이 있는 한 가지 흥미로운 선택은 모델이 컨디셔닝을 수행하는 방법입니다. 일반적으로 모델은 "무조건"( UNet(corrupted image) ~ image ) 및 조건부( UNet(corrupted image, condition) ~ image ) 모드 모두에서 훈련되며 샘플링 시 분류자 없는 지침 이 사용됩니다. UNet ( 손상된 이미지 대신 사용) , 조건 ) 이미지 생성 시 C * UNet ( 손상된 이미지 , 조건 ) ( C — 1) * UNet ( 손상된 이미지 ), C1보다 상당히 높습니다(예: 7). 이것은 매우 직관적이지는 않지만 이미지 품질과 생성된 이미지의 즉각적인 충실도를 크게 향상시킵니다.

우리와 관련된 것은 조건 을 얻는 방법입니다. Stable Diffusion에서는 CLIP 모델의 텍스트 인코더의 마지막 숨겨진 레이어를 사용합니다. 고정되어 있습니다. 즉, 훈련 중에 그래디언트가 역전파되지 않습니다. 이것은 시각적 이해를 향해 언어 이해를 편향시키는 이미지의 일부 부차적인 맛을 가진 언어 인코더 모델로 간주될 수 있습니다.

와이푸 확산

이것은 애니메이션 이미지에 미세 조정된 안정적인 확산입니다. Danbooru2021 (또는 이와 유사한 것) 의 하위 집합을 훈련 세트로 사용한 것으로 보입니다. 그들은 코드를 수정하지 않고 Stable Diffusion을 있는 그대로 사용했습니다(VAE의 디코더 부분을 미세 조정하여 애니메이션 이미지에서 약간 더 잘 작동하도록 했습니다).

결과적으로 유사하게 CLIP을 컨디셔너로 사용하여 프롬프트로 태그가 있는 문자열을 제공합니다. 태그도 사전 처리하기 때문에(예: 밑줄을 공백으로 대체) 제대로 작동하지 않는 것 같습니다. 하지만 그렇다고 해도 CLIP의 프롬프트 이해는 차선책인 것 같습니다.

안정적인 확산 2

이것은 (동일한 크기의) 모델을 처음부터 재교육하고 컨디셔너를 OpenCLIP 으로 교체한 증분 릴리스입니다 . 또한 깊이 기반 img2img 및 고해상도 모델(768x768 픽셀)과 같은 몇 가지 흥미로운 추가 기능이 있습니다.

우리의 모델: 교육

목표는 애니메이션 이미지에서 Stable Diffusion 2를 미세 조정하여 인코더를 CLIP의 자연 언어와 달리 입력으로 태그 세트에 특화된 사용자 정의 모델로 대체하는 것입니다. 더 나은 컨디셔닝 외에도 Anifusion 의 즉각적인 확대 기술을 활성화 하여 품질과 다양성을 크게 도왔습니다.

컨디셔너

우리는 Anifusion에서와 동일한 접근 방식을 사용합니다. 컨디셔닝 모델은 위치 임베딩이 없는 BERT 크기의 변환기입니다(태그 프롬프트의 대칭을 캡처하기 위해: 태그 순서는 중요하지 않아야 함). 확산 백본의 교차 주의 부분을 동일하게 유지하면서 컨디셔너를 교체하기만 하면 됩니다.

여기서 중요한 질문은 가중치 변환기를 초기화하는 방법입니다. 훈련되지 않은 컨디셔너와 훈련된 UNet에서 시작하여 함께 훈련하면 훈련 프로세스가 UNet 가중치를 파괴하거나 크게 저하시킬 수 있습니다. 운 좋게도 이 문제를 해결하는 것은 어렵지 않습니다. UNet을 동결하고 얼마 동안 변압기 부분에 대해서만 교육을 실행할 수 있습니다.

기술적 문제 및 최적화

교육을 효율적으로 하려면 비디오 RAM에 배치 크기를 가능한 한 높게 압축하는 것이 중요합니다(예: 최적화 논리를 적용하는 비용이 배치당 한 번만 지불되기 때문). 여기에는 기본적으로 두 가지 방향이 있습니다.

파이프라인 변경

표준 SD 교육 코드는 VAE 인코더를 온라인으로 실행하여 원본 이미지를 구문 분석하고 인코딩합니다. 이것은 제거해야 할 가장 낮은 매달린 과일입니다. VAE 가중치는 VRAM을 소비하고 이 인코더를 적용하는 중간 변수도 VRAM을 소비하며 인코딩 프로세스에는 시간이 걸립니다. 특히 데이터를 여러 번 전달하는 경우 동일한 이미지를 여러 번 인코딩하는 비용을 지불하는 것은 의미가 없습니다.

운 좋게도 이 부분은 최적화하기 쉽습니다. 훈련 세트의 모든 이미지를 사전 인코딩하기만 하면 됩니다. 추가 이점은 결과 훈련 세트가 픽셀 공간의 원래 512x512 이미지보다 훨씬 작다는 것입니다(디스크 크기 측면에서).

약간의 VRAM을 절약하는 또 다른 방법은 EMA를 비활성화하는 것입니다. 지수 이동 평균은 마지막 체크포인트의 가중치를 (대략) 평균화하여 모델의 품질을 약간 향상시키는 트릭이며, EMA를 저장하지 않는 것은 결과 모델을 크게 손상시키지 않고 VRAM을 적게 사용하는 쉬운 방법입니다.

교육 변경

교육 속도를 높이고 VRAM을 절약하는 일반적인 방법은 낮은 정밀도를 사용하는 것입니다. 일반적인 fp32(32비트 부동 소수점 숫자) 대신 fp16 또는 bf16(16비트 부동 소수점 숫자의 변형)을 사용하거나 혼합 정밀도(수행 fp16의 일부 작업).

나는 그것을 시도했고 실제로 성능에 도움이되었지만 너무 위험합니다. 특히, 주의를 끌기 위해 "with torch.autocast():"(혼합 정밀도)를 추가한 다음 시간이 지남에 따라 모델이 천천히 발산하는 이유를 파악하는 데 상당한 시간을 낭비했습니다.

그 결과 훈련이 이미 상당히 효율적이라는 점을 감안할 때 이러한 성격의 최적화를 모델에 적용하지 않는 것이 더 안전할 것이라고 결정했습니다.

트레이닝 세트 업데이트

Anifusion에서는 이전 버전의 Danbooru 데이터 세트를 사용했기 때문에 업데이트할 적기라고 판단하고 동시에 프롬프트에서 훈련 세트 및 지원되는 태그 세트의 크기를 확장했습니다. 그러나 몇 가지 복잡한 문제가 있었습니다. (1) 데이터 세트의 새 버전은 이전 데이터 세트의 단순한 상위 집합 이 아니었고 (2) 모델이 이미 훈련 중인 동안 수행하기로 결정했기 때문에 기존 데이터 세트를 전환하기 위한 추가 작업이 필요했습니다. 체크포인트가 필요했다.

데이터 세트 차이

이것은 사소하지만 새 데이터세트 버전에 대한 메타데이터를 다운로드한 후 많은 이미지(몇 퍼센트)가 사라진 것을 발견했습니다. 이전에 상위 2.5k에 진입한 일부 태그도 사라졌고(가장 인기 있는 일부 태그 포함), 게다가 제거된 이미지가 제거된 태그와 일치했습니다.

추가 조사 결과 사라진 태그가 모두 "변칙적인 NSFW" 패턴과 일치하는 것으로 나타났습니다(그 중 일부는 너무 변칙적이어서 그런 것이 존재하는지조차 몰랐습니다...). 자연의 다른 유사한 태그와 이미지가 제자리에 유지되었기 때문에 일종의 일관성이 없었습니다. 데이터세트의 관리자나 원본 이미지 호스팅 사이트에서 일부 PR 문제를 해결하기 위한 빠른 해킹으로 구현한 것 같습니다. 어쨌든, 저는 이전 및 새 데이터 세트를 결합하여 약 2백만 개의 이미지를 학습에 사용했습니다. 또한 나중에 고해상도 모델을 미세 조정하기 위해 해상도가 786x768 이상인 800k 이미지를 샘플링했습니다.

태그 세트 확장

이 섹션은 실제로 사소하지 않습니다. 새 데이터 세트가 생성된 시점에서 모델은 잘 수렴된 컨디셔너 변환기를 사용하여 상위 2.5k 태그에서 프롬프트를 입력으로 사용하여 꽤 오랫동안 학습되었습니다. 최신 버전의 경우 대신 상위 12k 태그를 사용하기로 결정했습니다. 모델에 추가하는 방법은 무엇입니까?

업그레이드해야 할 것은 변압기의 임베딩 테이블(2500x1024에서 12000x1024로)입니다. 순진한 접근 방식은 새 임베딩을 무작위로 초기화하고 한동안 고정된 UNet으로 모델을 훈련하여 변환기만 업데이트하는 것입니다. 그러나 이것은 (1) 시간과 컴퓨팅 측면에서 낭비적이고 (2) 지루합니다. 더 잘 초기화할 수 있습니까?

어떤 정보가 제공되는지 살펴보겠습니다. 우리는 이미 2.5k 임베딩을 훈련했으며 새 태그에 대한 임베딩은 다소 유사해야 합니다. 그러나 누구에게? 순진한 아이디어는 의미상 유사한 태그의 임베딩을 사용하는 것입니다. 그러나 의미적 유사성을 어떻게 얻을 수 있습니까? 좋은 오래된 word2vec 은 그것에 매우 능숙하므로 태그 세트를 가져 와서 word2vec 임베딩을 훈련시킬 수 있습니다. 아래는 결과의 t-SNE 시각화입니다(어두운 점은 NSFW 태그에 해당하므로 보고 싶지 않은 사람들이 쉽게 건너뛸 수 있습니다 ) .

변환기에서 2.5k 훈련된 임베딩에 대한 동일한 시각화를 살펴보겠습니다: 대화형 링크 .

따라서 실제로는 동일하지 않으며 의미보다 시각적 외관에 더 중점을 둡니다. 그러나 충분히 가까워야 하므로 다음과 같이 새 태그에 대한 초기 임베딩을 계산할 수 있습니다. 상위 2.5k 항목에서 word2vec 공간의 가장 가까운 이웃을 가져오고 트랜스포머 임베딩을 집계합니다. 사실, 우리는 이를 약간 개선할 수도 있습니다. 가장 가까운 이웃 집계가 처음 2.5k 항목의 실제 임베딩과 일치하도록 word2vec를 변환하는 작은 NN을 훈련하고 나머지 태그에 적용합니다.

이를 통해 새 임베딩에 대한 합리적인 초기화를 얻고 최신 체크포인트를 수정하고 새 데이터에 대한 교육을 있는 그대로 재개합니다.

고해상도 훈련

Stable Diffusion 2에는 768x768 크기(즉, 512x512보다 2.25배 더 큼)의 이미지를 생성하는 버전이 있는데, 이는 몇 가지 흥미로운 속성(예: 저해상도 버전보다 드로잉 손가락을 더 잘 처리하는 것으로 나타남)을 가지고 있습니다. 그래서 우리는 우리 모델에도 똑같이 하기로 결정했습니다. 특히 교육에는 두 단계가 있습니다.

  • 저해상도: 512x512 이미지(64x64x4 잠재 공간)에서 훈련, 배치 크기 11, 학습률 5e-6, 100만 단계
  • 고해상도: 이전 단계에서 다시 시작하여 배치 크기 5, 학습률 5e-6, 80k 단계로 768x768 이미지(96x96x4 잠재 공간)에서 훈련합니다.

샘플링 변경

Anifusion 에서 별도의 모델로 프롬프트를 보강하면 결과가 크게 향상되었습니다. 직관적으로 확산 과정 내부의 암시적 연속 공간과 달리 이산 개념 공간에서 재료를 샘플링하는 것이 더 쉽습니다.

여기서는 동일한 기술을 적용하여 새로운 훈련 세트에서 신속한 증강 변환기를 재훈련합니다. 우리는 동일한 효과를 관찰합니다. 샘플 품질과 다양성은 특히 짧은 프롬프트의 경우 프롬프트 확대로 크게 증가합니다.

결과

768x768 모델이 512x512 모델보다 더 나은 이미지를 생성하는 것으로 보입니다. 해상도 때문만이 아니라 이미지의 전반적인 일관성과 (특히) 캐릭터의 해부학적 세부 사항이 더 좋습니다. 다만, 속기성실함은 조금 떨어지는 것 같습니다.

한 가지 주목해야 할 점은 Anifusion과 비교할 때 모델이 NSFW/선정적인 이미지에 더 편향되어 있는 것 같습니다. 그 중 일부는 신속한 증강에 기인할 수 있지만 UNet 부분도 책임이 있습니다. 왜 그런 일이 일어나고 있는지 잘 모르겠습니다(훈련 세트 변경이 다소 적었습니다. 안정적인 확산에서 크기/시작이 원인일 수 있습니다.).

다양한 유형의 이미지를 단계별로 살펴보겠습니다.

초상화

이것은 가장 간단한 사용 사례이며 애니메이션 초상화는 GAN 시대에도 성공적으로 생성되었습니다. 당연히 모델은 이것으로 문제가 없습니다(아래 몇 가지 예 참조).

단일 문자, 인기 태그

이것은 더 어려운 테스트이며 예상대로 때때로 (드물게) 나쁜 이미지를 얻을 수 있습니다. 일반적인 실패 모드는 잘못된 해부학적 구조, 즉 추가적인 팔이나 다리입니다. 물론 모델에게는 손가락이 상당히 까다롭습니다.

단일 문자, 꼬리 태그

여기에서는 덜 인기 있는 태그, 특히 교육 후반 단계에서 추가된 태그를 테스트하고 있습니다(자세한 내용은 위 참조). 완벽하지는 않지만 꽤 잘 작동하는 것 같습니다. 몇 가지 예가 아래에 나와 있습니다. 일반적으로 캐릭터 태그는 개념 태그보다 모델에 더 쉬운 것으로 보입니다.

새로 추가된 태그, 왼쪽에서 오른쪽으로: "사자"(불분명, 그녀가 타고 있는 것 같음), "facepalm"(작동하지 않음), "venti_(genshin_impact)"(작동함)

캐릭터 상호 작용

마지막으로, 우리는 흥미로운 것에 접근하고 있습니다. 오리지널 애니퓨전은 캐릭터가 상호 작용할 때 제대로 작동하지 않았습니다. 새 모델이 더 나은가요?

서로 옆에 서있는 여러 문자는 괜찮은 것 같습니다.

간단한 작업도 어느 정도 작동합니다.

왼쪽에서 오른쪽으로: "키스", "holding_hands", "포옹"

개체와의 상호 작용도 어느 정도 괜찮습니다.

왼쪽에서 오른쪽으로: "holding_gun", "riding", "holding_food"

그러나 복잡한 상호 작용을 지정하려고 하면 신체 공포가 더 자주 발생합니다(이 사진은 방해가 될 수 있으므로 여기에 게시하지 않겠습니다). 왜 이런 일이 발생합니까? 나는 이것이 프롬프트가 태그 세트일 뿐이고 상호 작용을 충분히 정확하게 지정하지 않기 때문이라고 추측합니다. 확산 모델이 처음에 좋은 이미지를 생성하게 만든 것은 분류기 없는 안내였습니다. 확산 내부의 복잡한 개념을 샘플링하기가 어렵기 때문에 프롬프트를 과도하게 강조하면 즉각적인 샘플링에 비해 품질이 크게 향상되었습니다. 따라서 우리는 프롬프트에 명확하게 지정된 것은 무엇이든 훌륭하게 생성될 것이라고 기대할 수 있지만 모호성은 그리 좋지 않은 방식으로 해결될 것입니다. 이런 의미에서 자연어 프롬프트가 더 나을 수 있습니다.

FWIW, reddit의 원래 Anifusion 게시물에 대한 의견에서 Gwern 은 BLIP 을 사용 하여 이미지에서 자연어 프롬프트를 생성할 것을 제안했습니다. 실제로 해봤는데 프롬프트 퀄리티가 너무 낮아서 쉽지가 않네요.

스타일

원래 Stable Diffusion에서 사람들은 주로 일부 아티스트의 이름을 추가하여 모델에 스타일을 지정하는 다양한 방법을 찾았습니다. 애니메이션 모델도 마찬가지인가요?

사용해 보면 매우 잘 작동합니다(AnythingV3에 비해 장점임). 다음은 다양한 임의 스타일의 예입니다.

다른 애니메이션 모델과 비교

우리는 AnythingV3와 비교하지 않습니다. AnythingV3는 프롬프트를 실제로 존중하지 않고 거의 모든 것에 대해 유사한 이미지를 생성합니다(이름에서 알 수 있듯이). 이것은 WaifuDiffusion과 NovelAI를 남깁니다. NovelAI와의 비교는 유출된 체크포인트를 사용해야 하고 그 드라마를 피하는 것이 더 낫기 때문에 반대하기로 결정했습니다. 이것은 우리에게 WaifuDiffusion을 남깁니다.

한 가지 유의할 점은 짧은 프롬프트에 대한 비교가 WaifuDiffusion에 너무 불공평하다는 것입니다. 짧은 프롬프트에서 매우 좋지 않은 결과를 산출하는 (Anifusion과 달리) 프롬프트 확대를 포함하지 않습니다. 따라서 대신 두 가지 다른 비교를 수행합니다. 하나는 원래 데이터 세트에서 태그 세트를 샘플링하여 고려 사항에서 프롬프트 확대를 효과적으로 제거하고 확산 부분만 비교합니다. 두 번째는 중간 크기의 프롬프트를 수동으로 구성하고 두 모델을 모두 평가합니다(여기에는 프롬프트 확대 효과가 포함됨).

데이터 세트의 태그 세트

데이터 세트에서 97개의 태그 세트를 샘플링합니다(균일하게 "안전한" 등급 이미지로 필터링). Anifusion의 경우 프롬프트에 "rating_s, score_perc_100, Adjustable_score_perc_100"을 추가하여 사전 처리합니다. WaifuDiffusion의 경우 밑줄을 공백으로 대체하여 사전 처리합니다. 두 경우 모두 50단계의 DDIM 샘플링 과 분류기 없는 지침 척도 9를 사용합니다.

사람의 평가를 얻은 후(비교를 위해 무작위로 측면을 뒤집음) Waifu와 비교하여 다음 결과를 얻습니다.

  • 애니퓨전이 더 좋음: 30%
  • 와이푸가 더 낫다: 24%
  • 거의 같음: 46%

Waifu에서 내가 발견한 한 가지 실패 패턴: 종종 전체 이미지 대신 일부 하위 이미지를 생성하여 캐릭터의 머리가 잘립니다. Anifusion의 실패 패턴은 즉흥적이지 않은 NSFW입니다(및 관련 — 나쁜 해부학; 어떤 이유로 이미지가 NSFW에 가까울수록 모델이 해부학을 더 나쁘게 얻음).

참고: 여기 에서 동일한 프롬프트에 대한 AnythingV3 결과를 찾을 수 있습니다. 결과는 좋아 보이지만 비교에 포함하는 것을 주저하는 이유를 알 수 있습니다. 모든 이미지가 정확히 같은 스타일로 보이고 다양성이 심각하게 부족하여 모델의 출력 공간이 훨씬 작다는 의미입니다.

따라서 분포 내 샘플링을 사용하면 크게 나아지지 않습니다. 하지만 모델의 고해상도 버전을 사용하면 어떻게 될까요?

  • 애니퓨전이 더 낫다: 41%
  • 와이푸가 더 낫다: 13%
  • 거의 같음: 46%

"거의 동일"이라는 적지 않은 양이 있음을 알 수 있습니다. 이러한 예의 대부분은 두 모델 모두 똑같이 훌륭하지만 두 모델이 끔찍하게 나쁜 경우도 있습니다(어쨌든 상관관계가 있음).

수동 중간 크기 프롬프트

이전 섹션에서 설명한 것과 동일한 프롬프트 전처리를 사용합니다. 합리적인 중간 크기의 프롬프트 33개를 수동으로 준비합니다(물론 한 사람이 준비한 것이므로 전체 배포를 대표하지 않을 수 있음).

여기서 결과는 매우 다릅니다.

  • 애니퓨전이 더 낫다: 73%
  • 와이푸가 더 낫다: 9%
  • 거의 같음: 18%

보시다시피 즉각적인 확대는 차이를 만듭니다. 고해상도 모델을 사용하면 어떻게 됩니까? 결과는 매우 유사합니다( 원시 데이터 ).

  • 애니퓨전이 더 낫다: 73%
  • 와이푸가 더 낫다: 3%
  • 거의 같음: 24%

평신도를 위한 접근성

한 가지 흥미로운 관찰은 100만 개의 훈련 미니배치 후에도 모델이 계속 개선된다는 것입니다. 모델이 많은 단계를 거친 후 원래의 안정적인 확산 체크포인트에서 무언가를 기억하는지 확실하지 않습니다. 아마도 애니메이션 데이터 세트는 기존 SD에서 핫 스타트 없이 상용 하드웨어에서 SD 크기의 확산 모델을 처음부터 훈련할 수 있을 만큼 충분히 쉬울까요? 이것은 조사해야 할 방향입니다. 이 경우 LAION 기반 교육의 경우처럼 컴퓨팅에 수백만 달러를 지출할 필요 없이 개인을 위한 새로운 아키텍처를 시도하는 것이 더 쉬워질 것입니다.

추가 품질 개선

현재 모델로 얼마나 멀리 갈 수 있는지 보는 것이 흥미롭기 때문에 2M 하위 집합이 아닌 전체 데이터 세트를 사용하여 조금 더 미세 조정하고 싶습니다. 그러나 제한 요소는 미세 조정의 양이 아니라 데이터 세트 품질이라고 생각합니다(즉, 모델 품질을 향상시키려면 고품질 이미지만 공급하거나 모델을 돕는 컨디셔너에 특수 식별자를 추가해야 함). 더 나은 이미지와 더 나쁜 이미지를 구별하기 위해). 내가 아는 한, 애니메이션에는 이와 같이 신뢰할 수 있는 모델이 없습니다(일반적인 이미지의 경우 사람들은 LAION의 "미학" 하위 집합을 사용합니다). 이 모델이나 WaifuDiffusion과 다르게 보이는 훌륭한 결과를 생성하는 일부 모델이 있지만(예: Midjorney의 애니메이션 모델은 체리픽 이미지의 형태로만 사용할 수 있음) 이것이 가능할 수 있습니다.

고해상도 생성은 해상도 이외의 측면에서 품질을 향상시킨다는 점에 유의하는 것이 중요합니다. 예를 들어 악명 높은 "AI 손"이 더 좋아집니다. 1024x1024로 더 늘리면 더 개선될지 궁금합니다. 잠재 공간(예: 잠재 공간에서 64x64 -> 128x128 -> 256x256, 원래 공간에서 2048x2048 생성 )에서 계단식 확산(예: Imagen )을 사용하는 것이 좋습니다.

유용성

제가 공개하는 것과 관련된 한 가지 우려 사항은 그것이 개념 증명이라는 것입니다. 모델에 대한 코드는 SD와 다르기 때문에 대부분의 도구(특히 프롬프트 토크나이저 부분)와 실제로 호환되지 않습니다. 따라서 이 모델이 사용 가능한 다른 애니메이션 모델보다 좋아 보이지만 사용 편의성은 그다지 좋지 않습니다. 그것에 대한 잠재적인 해결책은 커뮤니티(또는 시간이 있다면 나)가 기존 도구와 적절하게 통합하거나 인터페이스 수준에서 SD와 호환되도록 만드는 것입니다.

참조

  • 안정적인 확산 2
  • 잠재 확산
  • Danbooru2021 데이터 세트
  • 웹 UI 불러오기 지침
  • 모델 체크포인트(huggingface): 512x512 , 768x768 , 프롬프트 오그멘터
  • 모델에 맞게 조정된 SD Github 저장소
  • 768x768 데모 —"등급: 안전"으로 제한됨, 당분간은 계속 실행하지만 결국에는 유지하지 않음