Add files using upload-large-folder tool
Browse files- __pycache__/inference.cpython-310.pyc +0 -0
- __pycache__/train.cpython-310.pyc +0 -0
- demo.py +631 -0
- model/__init__.py +36 -0
- model/__pycache__/__init__.cpython-310.pyc +0 -0
- model/__pycache__/base.cpython-310.pyc +0 -0
- model/__pycache__/causvid.cpython-310.pyc +0 -0
- model/__pycache__/diffusion.cpython-310.pyc +0 -0
- model/__pycache__/dmd.cpython-310.pyc +0 -0
- model/__pycache__/gan.cpython-310.pyc +0 -0
- model/__pycache__/ode_regression.cpython-310.pyc +0 -0
- model/__pycache__/predictor_v4.cpython-310.pyc +0 -0
- model/__pycache__/sid.cpython-310.pyc +0 -0
- model/base.py +222 -0
- model/causvid.py +391 -0
- model/diffusion.py +125 -0
- model/dmd.py +332 -0
- model/gan.py +295 -0
- model/ode_regression.py +138 -0
- model/predictor_v4.py +886 -0
- model/sid.py +283 -0
- predictor_training/__init__.py +25 -0
- predictor_training/__pycache__/__init__.cpython-310.pyc +0 -0
- predictor_training/__pycache__/cache.cpython-310.pyc +0 -0
- predictor_training/__pycache__/checkpoint.cpython-310.pyc +0 -0
- predictor_training/__pycache__/dataset.cpython-310.pyc +0 -0
- predictor_training/__pycache__/rollout_cache.cpython-310.pyc +0 -0
- predictor_training/__pycache__/sampler.cpython-310.pyc +0 -0
- predictor_training/__pycache__/trajectory_dataset.cpython-310.pyc +0 -0
- predictor_training/cache.py +22 -0
- predictor_training/checkpoint.py +103 -0
- predictor_training/dataset.py +364 -0
- predictor_training/rollout_cache.py +114 -0
- predictor_training/sampler.py +84 -0
- predictor_training/trajectory_dataset.py +107 -0
- utils/lmdb.py +72 -0
- wan_models/Wan2.1-T2V-1.3B/.gitattributes +47 -0
- wan_models/Wan2.1-T2V-1.3B/LICENSE.txt +201 -0
- wan_models/Wan2.1-T2V-1.3B/README.md +298 -0
- wan_models/Wan2.1-T2V-1.3B/assets/.DS_Store +0 -0
- wan_models/Wan2.1-T2V-1.3B/assets/logo.png +0 -0
- wan_models/Wan2.1-T2V-1.3B/config.json +14 -0
- wan_models/Wan2.1-T2V-1.3B/google/umt5-xxl/special_tokens_map.json +308 -0
- wan_models/Wan2.1-T2V-1.3B/google/umt5-xxl/tokenizer_config.json +2748 -0
- wan_models/Wan2.1-T2V-14B/LICENSE.txt +201 -0
- wan_models/Wan2.1-T2V-14B/README.md +301 -0
- wan_models/Wan2.1-T2V-14B/assets/logo.png +0 -0
- wan_models/Wan2.1-T2V-14B/diffusion_pytorch_model.safetensors.index.json +1102 -0
- wan_models/Wan2.1-T2V-14B/google/umt5-xxl/special_tokens_map.json +308 -0
- wan_models/Wan2.1-T2V-14B/google/umt5-xxl/tokenizer_config.json +2748 -0
__pycache__/inference.cpython-310.pyc
ADDED
|
Binary file (9.12 kB). View file
|
|
|
__pycache__/train.cpython-310.pyc
ADDED
|
Binary file (2.09 kB). View file
|
|
|
demo.py
ADDED
|
@@ -0,0 +1,631 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
Demo for Self-Forcing.
|
| 3 |
+
"""
|
| 4 |
+
|
| 5 |
+
import os
|
| 6 |
+
import re
|
| 7 |
+
import random
|
| 8 |
+
import time
|
| 9 |
+
import base64
|
| 10 |
+
import argparse
|
| 11 |
+
import hashlib
|
| 12 |
+
import subprocess
|
| 13 |
+
import urllib.request
|
| 14 |
+
from io import BytesIO
|
| 15 |
+
from PIL import Image
|
| 16 |
+
import numpy as np
|
| 17 |
+
import torch
|
| 18 |
+
from omegaconf import OmegaConf
|
| 19 |
+
from flask import Flask, render_template, jsonify
|
| 20 |
+
from flask_socketio import SocketIO, emit
|
| 21 |
+
import queue
|
| 22 |
+
from threading import Thread, Event
|
| 23 |
+
|
| 24 |
+
from pipeline import CausalInferencePipeline
|
| 25 |
+
from demo_utils.constant import ZERO_VAE_CACHE
|
| 26 |
+
from demo_utils.vae_block3 import VAEDecoderWrapper
|
| 27 |
+
from utils.wan_wrapper import WanDiffusionWrapper, WanTextEncoder
|
| 28 |
+
from demo_utils.utils import generate_timestamp
|
| 29 |
+
from demo_utils.memory import gpu, get_cuda_free_memory_gb, DynamicSwapInstaller, move_model_to_device_with_memory_preservation
|
| 30 |
+
|
| 31 |
+
# Parse arguments
|
| 32 |
+
parser = argparse.ArgumentParser()
|
| 33 |
+
parser.add_argument('--port', type=int, default=5001)
|
| 34 |
+
parser.add_argument('--host', type=str, default='0.0.0.0')
|
| 35 |
+
parser.add_argument("--checkpoint_path", type=str, default='./checkpoints/self_forcing_dmd.pt')
|
| 36 |
+
parser.add_argument("--config_path", type=str, default='./configs/self_forcing_dmd.yaml')
|
| 37 |
+
parser.add_argument('--trt', action='store_true')
|
| 38 |
+
args = parser.parse_args()
|
| 39 |
+
|
| 40 |
+
print(f'Free VRAM {get_cuda_free_memory_gb(gpu)} GB')
|
| 41 |
+
low_memory = get_cuda_free_memory_gb(gpu) < 40
|
| 42 |
+
|
| 43 |
+
# Load models
|
| 44 |
+
config = OmegaConf.load(args.config_path)
|
| 45 |
+
default_config = OmegaConf.load("configs/default_config.yaml")
|
| 46 |
+
config = OmegaConf.merge(default_config, config)
|
| 47 |
+
|
| 48 |
+
text_encoder = WanTextEncoder()
|
| 49 |
+
|
| 50 |
+
# Global variables for dynamic model switching
|
| 51 |
+
current_vae_decoder = None
|
| 52 |
+
current_use_taehv = False
|
| 53 |
+
fp8_applied = False
|
| 54 |
+
torch_compile_applied = False
|
| 55 |
+
global frame_number
|
| 56 |
+
frame_number = 0
|
| 57 |
+
anim_name = ""
|
| 58 |
+
frame_rate = 6
|
| 59 |
+
|
| 60 |
+
def initialize_vae_decoder(use_taehv=False, use_trt=False):
|
| 61 |
+
"""Initialize VAE decoder based on the selected option"""
|
| 62 |
+
global current_vae_decoder, current_use_taehv
|
| 63 |
+
|
| 64 |
+
if use_trt:
|
| 65 |
+
from demo_utils.vae import VAETRTWrapper
|
| 66 |
+
current_vae_decoder = VAETRTWrapper()
|
| 67 |
+
return current_vae_decoder
|
| 68 |
+
|
| 69 |
+
if use_taehv:
|
| 70 |
+
from demo_utils.taehv import TAEHV
|
| 71 |
+
# Check if taew2_1.pth exists in checkpoints folder, download if missing
|
| 72 |
+
taehv_checkpoint_path = "checkpoints/taew2_1.pth"
|
| 73 |
+
if not os.path.exists(taehv_checkpoint_path):
|
| 74 |
+
print(f"taew2_1.pth not found in checkpoints folder {taehv_checkpoint_path}. Downloading...")
|
| 75 |
+
os.makedirs("checkpoints", exist_ok=True)
|
| 76 |
+
download_url = "https://github.com/madebyollin/taehv/raw/main/taew2_1.pth"
|
| 77 |
+
try:
|
| 78 |
+
urllib.request.urlretrieve(download_url, taehv_checkpoint_path)
|
| 79 |
+
print(f"Successfully downloaded taew2_1.pth to {taehv_checkpoint_path}")
|
| 80 |
+
except Exception as e:
|
| 81 |
+
print(f"Failed to download taew2_1.pth: {e}")
|
| 82 |
+
raise
|
| 83 |
+
|
| 84 |
+
class DotDict(dict):
|
| 85 |
+
__getattr__ = dict.__getitem__
|
| 86 |
+
__setattr__ = dict.__setitem__
|
| 87 |
+
|
| 88 |
+
class TAEHVDiffusersWrapper(torch.nn.Module):
|
| 89 |
+
def __init__(self):
|
| 90 |
+
super().__init__()
|
| 91 |
+
self.dtype = torch.float16
|
| 92 |
+
self.taehv = TAEHV(checkpoint_path=taehv_checkpoint_path).to(self.dtype)
|
| 93 |
+
self.config = DotDict(scaling_factor=1.0)
|
| 94 |
+
|
| 95 |
+
def decode(self, latents, return_dict=None):
|
| 96 |
+
# n, c, t, h, w = latents.shape
|
| 97 |
+
# low-memory, set parallel=True for faster + higher memory
|
| 98 |
+
return self.taehv.decode_video(latents, parallel=False).mul_(2).sub_(1)
|
| 99 |
+
|
| 100 |
+
current_vae_decoder = TAEHVDiffusersWrapper()
|
| 101 |
+
else:
|
| 102 |
+
current_vae_decoder = VAEDecoderWrapper()
|
| 103 |
+
vae_state_dict = torch.load('wan_models/Wan2.1-T2V-1.3B/Wan2.1_VAE.pth', map_location="cpu")
|
| 104 |
+
decoder_state_dict = {}
|
| 105 |
+
for key, value in vae_state_dict.items():
|
| 106 |
+
if 'decoder.' in key or 'conv2' in key:
|
| 107 |
+
decoder_state_dict[key] = value
|
| 108 |
+
current_vae_decoder.load_state_dict(decoder_state_dict)
|
| 109 |
+
|
| 110 |
+
current_vae_decoder.eval()
|
| 111 |
+
current_vae_decoder.to(dtype=torch.float16)
|
| 112 |
+
current_vae_decoder.requires_grad_(False)
|
| 113 |
+
current_vae_decoder.to(gpu)
|
| 114 |
+
current_use_taehv = use_taehv
|
| 115 |
+
|
| 116 |
+
print(f"✅ VAE decoder initialized with {'TAEHV' if use_taehv else 'default VAE'}")
|
| 117 |
+
return current_vae_decoder
|
| 118 |
+
|
| 119 |
+
|
| 120 |
+
# Initialize with default VAE
|
| 121 |
+
vae_decoder = initialize_vae_decoder(use_taehv=False, use_trt=args.trt)
|
| 122 |
+
|
| 123 |
+
transformer = WanDiffusionWrapper(is_causal=True)
|
| 124 |
+
state_dict = torch.load(args.checkpoint_path, map_location="cpu")
|
| 125 |
+
transformer.load_state_dict(state_dict['generator_ema'])
|
| 126 |
+
|
| 127 |
+
text_encoder.eval()
|
| 128 |
+
transformer.eval()
|
| 129 |
+
|
| 130 |
+
transformer.to(dtype=torch.float16)
|
| 131 |
+
text_encoder.to(dtype=torch.bfloat16)
|
| 132 |
+
|
| 133 |
+
text_encoder.requires_grad_(False)
|
| 134 |
+
transformer.requires_grad_(False)
|
| 135 |
+
|
| 136 |
+
pipeline = CausalInferencePipeline(
|
| 137 |
+
config,
|
| 138 |
+
device=gpu,
|
| 139 |
+
generator=transformer,
|
| 140 |
+
text_encoder=text_encoder,
|
| 141 |
+
vae=vae_decoder
|
| 142 |
+
)
|
| 143 |
+
|
| 144 |
+
if low_memory:
|
| 145 |
+
DynamicSwapInstaller.install_model(text_encoder, device=gpu)
|
| 146 |
+
else:
|
| 147 |
+
text_encoder.to(gpu)
|
| 148 |
+
transformer.to(gpu)
|
| 149 |
+
|
| 150 |
+
# Flask and SocketIO setup
|
| 151 |
+
app = Flask(__name__)
|
| 152 |
+
app.config['SECRET_KEY'] = 'frontend_buffered_demo'
|
| 153 |
+
socketio = SocketIO(app, cors_allowed_origins="*")
|
| 154 |
+
|
| 155 |
+
generation_active = False
|
| 156 |
+
stop_event = Event()
|
| 157 |
+
frame_send_queue = queue.Queue()
|
| 158 |
+
sender_thread = None
|
| 159 |
+
models_compiled = False
|
| 160 |
+
|
| 161 |
+
|
| 162 |
+
def tensor_to_base64_frame(frame_tensor):
|
| 163 |
+
"""Convert a single frame tensor to base64 image string."""
|
| 164 |
+
global frame_number, anim_name
|
| 165 |
+
# Clamp and normalize to 0-255
|
| 166 |
+
frame = torch.clamp(frame_tensor.float(), -1., 1.) * 127.5 + 127.5
|
| 167 |
+
frame = frame.to(torch.uint8).cpu().numpy()
|
| 168 |
+
|
| 169 |
+
# CHW -> HWC
|
| 170 |
+
if len(frame.shape) == 3:
|
| 171 |
+
frame = np.transpose(frame, (1, 2, 0))
|
| 172 |
+
|
| 173 |
+
# Convert to PIL Image
|
| 174 |
+
if frame.shape[2] == 3: # RGB
|
| 175 |
+
image = Image.fromarray(frame, 'RGB')
|
| 176 |
+
else: # Handle other formats
|
| 177 |
+
image = Image.fromarray(frame)
|
| 178 |
+
|
| 179 |
+
# Convert to base64
|
| 180 |
+
buffer = BytesIO()
|
| 181 |
+
image.save(buffer, format='JPEG', quality=100)
|
| 182 |
+
if not os.path.exists("./images/%s" % anim_name):
|
| 183 |
+
os.makedirs("./images/%s" % anim_name)
|
| 184 |
+
frame_number += 1
|
| 185 |
+
image.save("./images/%s/%s_%03d.jpg" % (anim_name, anim_name, frame_number))
|
| 186 |
+
img_str = base64.b64encode(buffer.getvalue()).decode()
|
| 187 |
+
return f"data:image/jpeg;base64,{img_str}"
|
| 188 |
+
|
| 189 |
+
|
| 190 |
+
def frame_sender_worker():
|
| 191 |
+
"""Background thread that processes frame send queue non-blocking."""
|
| 192 |
+
global frame_send_queue, generation_active, stop_event
|
| 193 |
+
|
| 194 |
+
print("📡 Frame sender thread started")
|
| 195 |
+
|
| 196 |
+
while True:
|
| 197 |
+
frame_data = None
|
| 198 |
+
try:
|
| 199 |
+
# Get frame data from queue
|
| 200 |
+
frame_data = frame_send_queue.get(timeout=1.0)
|
| 201 |
+
|
| 202 |
+
if frame_data is None: # Shutdown signal
|
| 203 |
+
frame_send_queue.task_done() # Mark shutdown signal as done
|
| 204 |
+
break
|
| 205 |
+
|
| 206 |
+
frame_tensor, frame_index, block_index, job_id = frame_data
|
| 207 |
+
|
| 208 |
+
# Convert tensor to base64
|
| 209 |
+
base64_frame = tensor_to_base64_frame(frame_tensor)
|
| 210 |
+
|
| 211 |
+
# Send via SocketIO
|
| 212 |
+
try:
|
| 213 |
+
socketio.emit('frame_ready', {
|
| 214 |
+
'data': base64_frame,
|
| 215 |
+
'frame_index': frame_index,
|
| 216 |
+
'block_index': block_index,
|
| 217 |
+
'job_id': job_id
|
| 218 |
+
})
|
| 219 |
+
except Exception as e:
|
| 220 |
+
print(f"⚠️ Failed to send frame {frame_index}: {e}")
|
| 221 |
+
|
| 222 |
+
frame_send_queue.task_done()
|
| 223 |
+
|
| 224 |
+
except queue.Empty:
|
| 225 |
+
# Check if we should continue running
|
| 226 |
+
if not generation_active and frame_send_queue.empty():
|
| 227 |
+
break
|
| 228 |
+
except Exception as e:
|
| 229 |
+
print(f"❌ Frame sender error: {e}")
|
| 230 |
+
# Make sure to mark task as done even if there's an error
|
| 231 |
+
if frame_data is not None:
|
| 232 |
+
try:
|
| 233 |
+
frame_send_queue.task_done()
|
| 234 |
+
except Exception as e:
|
| 235 |
+
print(f"❌ Failed to mark frame task as done: {e}")
|
| 236 |
+
break
|
| 237 |
+
|
| 238 |
+
print("📡 Frame sender thread stopped")
|
| 239 |
+
|
| 240 |
+
|
| 241 |
+
@torch.no_grad()
|
| 242 |
+
def generate_video_stream(prompt, seed, enable_torch_compile=False, enable_fp8=False, use_taehv=False):
|
| 243 |
+
"""Generate video and push frames immediately to frontend."""
|
| 244 |
+
global generation_active, stop_event, frame_send_queue, sender_thread, models_compiled, torch_compile_applied, fp8_applied, current_vae_decoder, current_use_taehv, frame_rate, anim_name
|
| 245 |
+
|
| 246 |
+
try:
|
| 247 |
+
generation_active = True
|
| 248 |
+
stop_event.clear()
|
| 249 |
+
job_id = generate_timestamp()
|
| 250 |
+
|
| 251 |
+
# Start frame sender thread if not already running
|
| 252 |
+
if sender_thread is None or not sender_thread.is_alive():
|
| 253 |
+
sender_thread = Thread(target=frame_sender_worker, daemon=True)
|
| 254 |
+
sender_thread.start()
|
| 255 |
+
|
| 256 |
+
# Emit progress updates
|
| 257 |
+
def emit_progress(message, progress):
|
| 258 |
+
try:
|
| 259 |
+
socketio.emit('progress', {
|
| 260 |
+
'message': message,
|
| 261 |
+
'progress': progress,
|
| 262 |
+
'job_id': job_id
|
| 263 |
+
})
|
| 264 |
+
except Exception as e:
|
| 265 |
+
print(f"❌ Failed to emit progress: {e}")
|
| 266 |
+
|
| 267 |
+
emit_progress('Starting generation...', 0)
|
| 268 |
+
|
| 269 |
+
# Handle VAE decoder switching
|
| 270 |
+
if use_taehv != current_use_taehv:
|
| 271 |
+
emit_progress('Switching VAE decoder...', 2)
|
| 272 |
+
print(f"🔄 Switching VAE decoder to {'TAEHV' if use_taehv else 'default VAE'}")
|
| 273 |
+
current_vae_decoder = initialize_vae_decoder(use_taehv=use_taehv)
|
| 274 |
+
# Update pipeline with new VAE decoder
|
| 275 |
+
pipeline.vae = current_vae_decoder
|
| 276 |
+
|
| 277 |
+
# Handle FP8 quantization
|
| 278 |
+
if enable_fp8 and not fp8_applied:
|
| 279 |
+
emit_progress('Applying FP8 quantization...', 3)
|
| 280 |
+
print("🔧 Applying FP8 quantization to transformer")
|
| 281 |
+
from torchao.quantization.quant_api import quantize_, Float8DynamicActivationFloat8WeightConfig, PerTensor
|
| 282 |
+
quantize_(transformer, Float8DynamicActivationFloat8WeightConfig(granularity=PerTensor()))
|
| 283 |
+
fp8_applied = True
|
| 284 |
+
|
| 285 |
+
# Text encoding
|
| 286 |
+
emit_progress('Encoding text prompt...', 8)
|
| 287 |
+
conditional_dict = text_encoder(text_prompts=[prompt])
|
| 288 |
+
for key, value in conditional_dict.items():
|
| 289 |
+
conditional_dict[key] = value.to(dtype=torch.float16)
|
| 290 |
+
if low_memory:
|
| 291 |
+
gpu_memory_preservation = get_cuda_free_memory_gb(gpu) + 5
|
| 292 |
+
move_model_to_device_with_memory_preservation(
|
| 293 |
+
text_encoder,target_device=gpu, preserved_memory_gb=gpu_memory_preservation)
|
| 294 |
+
|
| 295 |
+
# Handle torch.compile if enabled
|
| 296 |
+
torch_compile_applied = enable_torch_compile
|
| 297 |
+
if enable_torch_compile and not models_compiled:
|
| 298 |
+
# Compile transformer and decoder
|
| 299 |
+
transformer.compile(mode="max-autotune-no-cudagraphs")
|
| 300 |
+
if not current_use_taehv and not low_memory and not args.trt:
|
| 301 |
+
current_vae_decoder.compile(mode="max-autotune-no-cudagraphs")
|
| 302 |
+
|
| 303 |
+
# Initialize generation
|
| 304 |
+
emit_progress('Initializing generation...', 12)
|
| 305 |
+
|
| 306 |
+
rnd = torch.Generator(gpu).manual_seed(seed)
|
| 307 |
+
# all_latents = torch.zeros([1, 21, 16, 60, 104], device=gpu, dtype=torch.bfloat16)
|
| 308 |
+
|
| 309 |
+
pipeline._initialize_kv_cache(batch_size=1, dtype=torch.float16, device=gpu)
|
| 310 |
+
pipeline._initialize_crossattn_cache(batch_size=1, dtype=torch.float16, device=gpu)
|
| 311 |
+
|
| 312 |
+
noise = torch.randn([1, 21, 16, 60, 104], device=gpu, dtype=torch.float16, generator=rnd)
|
| 313 |
+
|
| 314 |
+
# Generation parameters
|
| 315 |
+
num_blocks = 7
|
| 316 |
+
current_start_frame = 0
|
| 317 |
+
num_input_frames = 0
|
| 318 |
+
all_num_frames = [pipeline.num_frame_per_block] * num_blocks
|
| 319 |
+
if current_use_taehv:
|
| 320 |
+
vae_cache = None
|
| 321 |
+
else:
|
| 322 |
+
vae_cache = ZERO_VAE_CACHE
|
| 323 |
+
for i in range(len(vae_cache)):
|
| 324 |
+
vae_cache[i] = vae_cache[i].to(device=gpu, dtype=torch.float16)
|
| 325 |
+
|
| 326 |
+
total_frames_sent = 0
|
| 327 |
+
generation_start_time = time.time()
|
| 328 |
+
|
| 329 |
+
emit_progress('Generating frames... (frontend handles timing)', 15)
|
| 330 |
+
|
| 331 |
+
for idx, current_num_frames in enumerate(all_num_frames):
|
| 332 |
+
if not generation_active or stop_event.is_set():
|
| 333 |
+
break
|
| 334 |
+
|
| 335 |
+
progress = int(((idx + 1) / len(all_num_frames)) * 80) + 15
|
| 336 |
+
|
| 337 |
+
# Special message for first block with torch.compile
|
| 338 |
+
if idx == 0 and torch_compile_applied and not models_compiled:
|
| 339 |
+
emit_progress(
|
| 340 |
+
f'Processing block 1/{len(all_num_frames)} - Compiling models (may take 5-10 minutes)...', progress)
|
| 341 |
+
print(f"🔥 Processing block {idx+1}/{len(all_num_frames)}")
|
| 342 |
+
models_compiled = True
|
| 343 |
+
else:
|
| 344 |
+
emit_progress(f'Processing block {idx+1}/{len(all_num_frames)}...', progress)
|
| 345 |
+
print(f"🔄 Processing block {idx+1}/{len(all_num_frames)}")
|
| 346 |
+
|
| 347 |
+
block_start_time = time.time()
|
| 348 |
+
|
| 349 |
+
noisy_input = noise[:, current_start_frame -
|
| 350 |
+
num_input_frames:current_start_frame + current_num_frames - num_input_frames]
|
| 351 |
+
|
| 352 |
+
# Denoising loop
|
| 353 |
+
denoising_start = time.time()
|
| 354 |
+
for index, current_timestep in enumerate(pipeline.denoising_step_list):
|
| 355 |
+
if not generation_active or stop_event.is_set():
|
| 356 |
+
break
|
| 357 |
+
|
| 358 |
+
timestep = torch.ones([1, current_num_frames], device=noise.device,
|
| 359 |
+
dtype=torch.int64) * current_timestep
|
| 360 |
+
|
| 361 |
+
if index < len(pipeline.denoising_step_list) - 1:
|
| 362 |
+
_, denoised_pred = transformer(
|
| 363 |
+
noisy_image_or_video=noisy_input,
|
| 364 |
+
conditional_dict=conditional_dict,
|
| 365 |
+
timestep=timestep,
|
| 366 |
+
kv_cache=pipeline.kv_cache1,
|
| 367 |
+
crossattn_cache=pipeline.crossattn_cache,
|
| 368 |
+
current_start=current_start_frame * pipeline.frame_seq_length
|
| 369 |
+
)
|
| 370 |
+
next_timestep = pipeline.denoising_step_list[index + 1]
|
| 371 |
+
noisy_input = pipeline.scheduler.add_noise(
|
| 372 |
+
denoised_pred.flatten(0, 1),
|
| 373 |
+
torch.randn_like(denoised_pred.flatten(0, 1)),
|
| 374 |
+
next_timestep * torch.ones([1 * current_num_frames], device=noise.device, dtype=torch.long)
|
| 375 |
+
).unflatten(0, denoised_pred.shape[:2])
|
| 376 |
+
else:
|
| 377 |
+
_, denoised_pred = transformer(
|
| 378 |
+
noisy_image_or_video=noisy_input,
|
| 379 |
+
conditional_dict=conditional_dict,
|
| 380 |
+
timestep=timestep,
|
| 381 |
+
kv_cache=pipeline.kv_cache1,
|
| 382 |
+
crossattn_cache=pipeline.crossattn_cache,
|
| 383 |
+
current_start=current_start_frame * pipeline.frame_seq_length
|
| 384 |
+
)
|
| 385 |
+
|
| 386 |
+
if not generation_active or stop_event.is_set():
|
| 387 |
+
break
|
| 388 |
+
|
| 389 |
+
denoising_time = time.time() - denoising_start
|
| 390 |
+
print(f"⚡ Block {idx+1} denoising completed in {denoising_time:.2f}s")
|
| 391 |
+
|
| 392 |
+
# Record output
|
| 393 |
+
# all_latents[:, current_start_frame:current_start_frame + current_num_frames] = denoised_pred
|
| 394 |
+
|
| 395 |
+
# Update KV cache for next block
|
| 396 |
+
if idx != len(all_num_frames) - 1:
|
| 397 |
+
transformer(
|
| 398 |
+
noisy_image_or_video=denoised_pred,
|
| 399 |
+
conditional_dict=conditional_dict,
|
| 400 |
+
timestep=torch.zeros_like(timestep),
|
| 401 |
+
kv_cache=pipeline.kv_cache1,
|
| 402 |
+
crossattn_cache=pipeline.crossattn_cache,
|
| 403 |
+
current_start=current_start_frame * pipeline.frame_seq_length,
|
| 404 |
+
)
|
| 405 |
+
|
| 406 |
+
# Decode to pixels and send frames immediately
|
| 407 |
+
print(f"🎨 Decoding block {idx+1} to pixels...")
|
| 408 |
+
decode_start = time.time()
|
| 409 |
+
if args.trt:
|
| 410 |
+
all_current_pixels = []
|
| 411 |
+
for i in range(denoised_pred.shape[1]):
|
| 412 |
+
is_first_frame = torch.tensor(1.0).cuda().half() if idx == 0 and i == 0 else \
|
| 413 |
+
torch.tensor(0.0).cuda().half()
|
| 414 |
+
outputs = vae_decoder.forward(denoised_pred[:, i:i + 1, :, :, :].half(), is_first_frame, *vae_cache)
|
| 415 |
+
# outputs = vae_decoder.forward(denoised_pred.float(), *vae_cache)
|
| 416 |
+
current_pixels, vae_cache = outputs[0], outputs[1:]
|
| 417 |
+
print(current_pixels.max(), current_pixels.min())
|
| 418 |
+
all_current_pixels.append(current_pixels.clone())
|
| 419 |
+
pixels = torch.cat(all_current_pixels, dim=1)
|
| 420 |
+
if idx == 0:
|
| 421 |
+
pixels = pixels[:, 3:, :, :, :] # Skip first 3 frames of first block
|
| 422 |
+
else:
|
| 423 |
+
if current_use_taehv:
|
| 424 |
+
if vae_cache is None:
|
| 425 |
+
vae_cache = denoised_pred
|
| 426 |
+
else:
|
| 427 |
+
denoised_pred = torch.cat([vae_cache, denoised_pred], dim=1)
|
| 428 |
+
vae_cache = denoised_pred[:, -3:, :, :, :]
|
| 429 |
+
pixels = current_vae_decoder.decode(denoised_pred)
|
| 430 |
+
print(f"denoised_pred shape: {denoised_pred.shape}")
|
| 431 |
+
print(f"pixels shape: {pixels.shape}")
|
| 432 |
+
if idx == 0:
|
| 433 |
+
pixels = pixels[:, 3:, :, :, :] # Skip first 3 frames of first block
|
| 434 |
+
else:
|
| 435 |
+
pixels = pixels[:, 12:, :, :, :]
|
| 436 |
+
|
| 437 |
+
else:
|
| 438 |
+
pixels, vae_cache = current_vae_decoder(denoised_pred.half(), *vae_cache)
|
| 439 |
+
if idx == 0:
|
| 440 |
+
pixels = pixels[:, 3:, :, :, :] # Skip first 3 frames of first block
|
| 441 |
+
|
| 442 |
+
decode_time = time.time() - decode_start
|
| 443 |
+
print(f"🎨 Block {idx+1} VAE decoding completed in {decode_time:.2f}s")
|
| 444 |
+
|
| 445 |
+
# Queue frames for non-blocking sending
|
| 446 |
+
block_frames = pixels.shape[1]
|
| 447 |
+
print(f"📡 Queueing {block_frames} frames from block {idx+1} for sending...")
|
| 448 |
+
queue_start = time.time()
|
| 449 |
+
|
| 450 |
+
for frame_idx in range(block_frames):
|
| 451 |
+
if not generation_active or stop_event.is_set():
|
| 452 |
+
break
|
| 453 |
+
|
| 454 |
+
frame_tensor = pixels[0, frame_idx].cpu()
|
| 455 |
+
|
| 456 |
+
# Queue frame data in non-blocking way
|
| 457 |
+
frame_send_queue.put((frame_tensor, total_frames_sent, idx, job_id))
|
| 458 |
+
total_frames_sent += 1
|
| 459 |
+
|
| 460 |
+
queue_time = time.time() - queue_start
|
| 461 |
+
block_time = time.time() - block_start_time
|
| 462 |
+
print(f"✅ Block {idx+1} completed in {block_time:.2f}s ({block_frames} frames queued in {queue_time:.3f}s)")
|
| 463 |
+
|
| 464 |
+
current_start_frame += current_num_frames
|
| 465 |
+
|
| 466 |
+
generation_time = time.time() - generation_start_time
|
| 467 |
+
print(f"🎉 Generation completed in {generation_time:.2f}s! {total_frames_sent} frames queued for sending")
|
| 468 |
+
|
| 469 |
+
# Wait for all frames to be sent before completing
|
| 470 |
+
emit_progress('Waiting for all frames to be sent...', 97)
|
| 471 |
+
print("⏳ Waiting for all frames to be sent...")
|
| 472 |
+
frame_send_queue.join() # Wait for all queued frames to be processed
|
| 473 |
+
print("✅ All frames sent successfully!")
|
| 474 |
+
|
| 475 |
+
generate_mp4_from_images("./images","./videos/"+anim_name+".mp4", frame_rate )
|
| 476 |
+
# Final progress update
|
| 477 |
+
emit_progress('Generation complete!', 100)
|
| 478 |
+
|
| 479 |
+
try:
|
| 480 |
+
socketio.emit('generation_complete', {
|
| 481 |
+
'message': 'Video generation completed!',
|
| 482 |
+
'total_frames': total_frames_sent,
|
| 483 |
+
'generation_time': f"{generation_time:.2f}s",
|
| 484 |
+
'job_id': job_id
|
| 485 |
+
})
|
| 486 |
+
except Exception as e:
|
| 487 |
+
print(f"❌ Failed to emit generation complete: {e}")
|
| 488 |
+
|
| 489 |
+
except Exception as e:
|
| 490 |
+
print(f"❌ Generation failed: {e}")
|
| 491 |
+
try:
|
| 492 |
+
socketio.emit('error', {
|
| 493 |
+
'message': f'Generation failed: {str(e)}',
|
| 494 |
+
'job_id': job_id
|
| 495 |
+
})
|
| 496 |
+
except Exception as e:
|
| 497 |
+
print(f"❌ Failed to emit error: {e}")
|
| 498 |
+
finally:
|
| 499 |
+
generation_active = False
|
| 500 |
+
stop_event.set()
|
| 501 |
+
|
| 502 |
+
# Clean up sender thread
|
| 503 |
+
try:
|
| 504 |
+
frame_send_queue.put(None)
|
| 505 |
+
except Exception as e:
|
| 506 |
+
print(f"❌ Failed to put None in frame_send_queue: {e}")
|
| 507 |
+
|
| 508 |
+
|
| 509 |
+
def generate_mp4_from_images(image_directory, output_video_path, fps=24):
|
| 510 |
+
"""
|
| 511 |
+
Generate an MP4 video from a directory of images ordered alphabetically.
|
| 512 |
+
|
| 513 |
+
:param image_directory: Path to the directory containing images.
|
| 514 |
+
:param output_video_path: Path where the output MP4 will be saved.
|
| 515 |
+
:param fps: Frames per second for the output video.
|
| 516 |
+
"""
|
| 517 |
+
global anim_name
|
| 518 |
+
# Construct the ffmpeg command
|
| 519 |
+
cmd = [
|
| 520 |
+
'ffmpeg',
|
| 521 |
+
'-framerate', str(fps),
|
| 522 |
+
'-i', os.path.join(image_directory, anim_name+'/'+anim_name+'_%03d.jpg'), # Adjust the pattern if necessary
|
| 523 |
+
'-c:v', 'libx264',
|
| 524 |
+
'-pix_fmt', 'yuv420p',
|
| 525 |
+
output_video_path
|
| 526 |
+
]
|
| 527 |
+
try:
|
| 528 |
+
subprocess.run(cmd, check=True)
|
| 529 |
+
print(f"Video saved to {output_video_path}")
|
| 530 |
+
except subprocess.CalledProcessError as e:
|
| 531 |
+
print(f"An error occurred: {e}")
|
| 532 |
+
|
| 533 |
+
def calculate_sha256(data):
|
| 534 |
+
# Convert data to bytes if it's not already
|
| 535 |
+
if isinstance(data, str):
|
| 536 |
+
data = data.encode()
|
| 537 |
+
# Calculate SHA-256 hash
|
| 538 |
+
sha256_hash = hashlib.sha256(data).hexdigest()
|
| 539 |
+
return sha256_hash
|
| 540 |
+
|
| 541 |
+
# Socket.IO event handlers
|
| 542 |
+
@socketio.on('connect')
|
| 543 |
+
def handle_connect():
|
| 544 |
+
print('Client connected')
|
| 545 |
+
emit('status', {'message': 'Connected to frontend-buffered demo server'})
|
| 546 |
+
|
| 547 |
+
|
| 548 |
+
@socketio.on('disconnect')
|
| 549 |
+
def handle_disconnect():
|
| 550 |
+
print('Client disconnected')
|
| 551 |
+
|
| 552 |
+
|
| 553 |
+
@socketio.on('start_generation')
|
| 554 |
+
def handle_start_generation(data):
|
| 555 |
+
global generation_active, frame_number, anim_name, frame_rate
|
| 556 |
+
|
| 557 |
+
frame_number = 0
|
| 558 |
+
if generation_active:
|
| 559 |
+
emit('error', {'message': 'Generation already in progress'})
|
| 560 |
+
return
|
| 561 |
+
|
| 562 |
+
prompt = data.get('prompt', '')
|
| 563 |
+
|
| 564 |
+
seed = data.get('seed', -1)
|
| 565 |
+
if seed==-1:
|
| 566 |
+
seed = random.randint(0, 2**32)
|
| 567 |
+
|
| 568 |
+
# Extract words up to the first punctuation or newline
|
| 569 |
+
words_up_to_punctuation = re.split(r'[^\w\s]', prompt)[0].strip() if prompt else ''
|
| 570 |
+
if not words_up_to_punctuation:
|
| 571 |
+
words_up_to_punctuation = re.split(r'[\n\r]', prompt)[0].strip()
|
| 572 |
+
|
| 573 |
+
# Calculate SHA-256 hash of the entire prompt
|
| 574 |
+
sha256_hash = calculate_sha256(prompt)
|
| 575 |
+
|
| 576 |
+
# Create anim_name with the extracted words and first 10 characters of the hash
|
| 577 |
+
anim_name = f"{words_up_to_punctuation[:20]}_{str(seed)}_{sha256_hash[:10]}"
|
| 578 |
+
|
| 579 |
+
generation_active = True
|
| 580 |
+
generation_start_time = time.time()
|
| 581 |
+
enable_torch_compile = data.get('enable_torch_compile', False)
|
| 582 |
+
enable_fp8 = data.get('enable_fp8', False)
|
| 583 |
+
use_taehv = data.get('use_taehv', False)
|
| 584 |
+
frame_rate = data.get('fps', 6)
|
| 585 |
+
|
| 586 |
+
if not prompt:
|
| 587 |
+
emit('error', {'message': 'Prompt is required'})
|
| 588 |
+
return
|
| 589 |
+
|
| 590 |
+
# Start generation in background thread
|
| 591 |
+
socketio.start_background_task(generate_video_stream, prompt, seed,
|
| 592 |
+
enable_torch_compile, enable_fp8, use_taehv)
|
| 593 |
+
emit('status', {'message': 'Generation started - frames will be sent immediately'})
|
| 594 |
+
|
| 595 |
+
|
| 596 |
+
@socketio.on('stop_generation')
|
| 597 |
+
def handle_stop_generation():
|
| 598 |
+
global generation_active, stop_event, frame_send_queue
|
| 599 |
+
generation_active = False
|
| 600 |
+
stop_event.set()
|
| 601 |
+
|
| 602 |
+
# Signal sender thread to stop (will be processed after current frames)
|
| 603 |
+
try:
|
| 604 |
+
frame_send_queue.put(None)
|
| 605 |
+
except Exception as e:
|
| 606 |
+
print(f"❌ Failed to put None in frame_send_queue: {e}")
|
| 607 |
+
|
| 608 |
+
emit('status', {'message': 'Generation stopped'})
|
| 609 |
+
|
| 610 |
+
# Web routes
|
| 611 |
+
|
| 612 |
+
|
| 613 |
+
@app.route('/')
|
| 614 |
+
def index():
|
| 615 |
+
return render_template('demo.html')
|
| 616 |
+
|
| 617 |
+
|
| 618 |
+
@app.route('/api/status')
|
| 619 |
+
def api_status():
|
| 620 |
+
return jsonify({
|
| 621 |
+
'generation_active': generation_active,
|
| 622 |
+
'free_vram_gb': get_cuda_free_memory_gb(gpu),
|
| 623 |
+
'fp8_applied': fp8_applied,
|
| 624 |
+
'torch_compile_applied': torch_compile_applied,
|
| 625 |
+
'current_use_taehv': current_use_taehv
|
| 626 |
+
})
|
| 627 |
+
|
| 628 |
+
|
| 629 |
+
if __name__ == '__main__':
|
| 630 |
+
print(f"🚀 Starting demo on http://{args.host}:{args.port}")
|
| 631 |
+
socketio.run(app, host=args.host, port=args.port, debug=False)
|
model/__init__.py
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Public model exports loaded on demand.
|
| 2 |
+
|
| 3 |
+
Lazy imports preserve the existing ``from model import DMD`` API while avoiding
|
| 4 |
+
the model/pipeline cycle introduced by the standalone Predictor module.
|
| 5 |
+
"""
|
| 6 |
+
|
| 7 |
+
from __future__ import annotations
|
| 8 |
+
|
| 9 |
+
from importlib import import_module
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
_EXPORTS = {
|
| 13 |
+
"CausalDiffusion": ("model.diffusion", "CausalDiffusion"),
|
| 14 |
+
"CausVid": ("model.causvid", "CausVid"),
|
| 15 |
+
"DMD": ("model.dmd", "DMD"),
|
| 16 |
+
"GAN": ("model.gan", "GAN"),
|
| 17 |
+
"SiD": ("model.sid", "SiD"),
|
| 18 |
+
"ODERegression": ("model.ode_regression", "ODERegression"),
|
| 19 |
+
"SelfForcingPredictorV4": (
|
| 20 |
+
"model.predictor_v4",
|
| 21 |
+
"SelfForcingPredictorV4",
|
| 22 |
+
),
|
| 23 |
+
"TripleFeatureFusion": ("model.predictor_v4", "TripleFeatureFusion"),
|
| 24 |
+
"WanPredictorV4Config": ("model.predictor_v4", "WanPredictorV4Config"),
|
| 25 |
+
}
|
| 26 |
+
|
| 27 |
+
__all__ = list(_EXPORTS)
|
| 28 |
+
|
| 29 |
+
|
| 30 |
+
def __getattr__(name: str):
|
| 31 |
+
if name not in _EXPORTS:
|
| 32 |
+
raise AttributeError(name)
|
| 33 |
+
module_name, attribute = _EXPORTS[name]
|
| 34 |
+
value = getattr(import_module(module_name), attribute)
|
| 35 |
+
globals()[name] = value
|
| 36 |
+
return value
|
model/__pycache__/__init__.cpython-310.pyc
ADDED
|
Binary file (1.13 kB). View file
|
|
|
model/__pycache__/base.cpython-310.pyc
ADDED
|
Binary file (7.81 kB). View file
|
|
|
model/__pycache__/causvid.cpython-310.pyc
ADDED
|
Binary file (11.1 kB). View file
|
|
|
model/__pycache__/diffusion.cpython-310.pyc
ADDED
|
Binary file (4.09 kB). View file
|
|
|
model/__pycache__/dmd.cpython-310.pyc
ADDED
|
Binary file (9.76 kB). View file
|
|
|
model/__pycache__/gan.cpython-310.pyc
ADDED
|
Binary file (8.26 kB). View file
|
|
|
model/__pycache__/ode_regression.cpython-310.pyc
ADDED
|
Binary file (4.66 kB). View file
|
|
|
model/__pycache__/predictor_v4.cpython-310.pyc
ADDED
|
Binary file (26.1 kB). View file
|
|
|
model/__pycache__/sid.cpython-310.pyc
ADDED
|
Binary file (7.93 kB). View file
|
|
|
model/base.py
ADDED
|
@@ -0,0 +1,222 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from typing import Tuple
|
| 2 |
+
from einops import rearrange
|
| 3 |
+
from torch import nn
|
| 4 |
+
import torch.distributed as dist
|
| 5 |
+
import torch
|
| 6 |
+
|
| 7 |
+
from pipeline import SelfForcingTrainingPipeline
|
| 8 |
+
from utils.loss import get_denoising_loss
|
| 9 |
+
from utils.wan_wrapper import WanDiffusionWrapper, WanTextEncoder, WanVAEWrapper
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
class BaseModel(nn.Module):
|
| 13 |
+
def __init__(self, args, device):
|
| 14 |
+
super().__init__()
|
| 15 |
+
self._initialize_models(args, device)
|
| 16 |
+
|
| 17 |
+
self.device = device
|
| 18 |
+
self.args = args
|
| 19 |
+
self.dtype = torch.bfloat16 if args.mixed_precision else torch.float32
|
| 20 |
+
if hasattr(args, "denoising_step_list"):
|
| 21 |
+
self.denoising_step_list = torch.tensor(args.denoising_step_list, dtype=torch.long)
|
| 22 |
+
if args.warp_denoising_step:
|
| 23 |
+
timesteps = torch.cat((self.scheduler.timesteps.cpu(), torch.tensor([0], dtype=torch.float32)))
|
| 24 |
+
self.denoising_step_list = timesteps[1000 - self.denoising_step_list]
|
| 25 |
+
|
| 26 |
+
def _initialize_models(self, args, device):
|
| 27 |
+
self.real_model_name = getattr(args, "real_name", "Wan2.1-T2V-1.3B")
|
| 28 |
+
self.fake_model_name = getattr(args, "fake_name", "Wan2.1-T2V-1.3B")
|
| 29 |
+
|
| 30 |
+
self.generator = WanDiffusionWrapper(**getattr(args, "model_kwargs", {}), is_causal=True)
|
| 31 |
+
self.generator.model.requires_grad_(True)
|
| 32 |
+
|
| 33 |
+
self.real_score = WanDiffusionWrapper(model_name=self.real_model_name, is_causal=False)
|
| 34 |
+
self.real_score.model.requires_grad_(False)
|
| 35 |
+
|
| 36 |
+
self.fake_score = WanDiffusionWrapper(model_name=self.fake_model_name, is_causal=False)
|
| 37 |
+
self.fake_score.model.requires_grad_(True)
|
| 38 |
+
|
| 39 |
+
self.text_encoder = WanTextEncoder()
|
| 40 |
+
self.text_encoder.requires_grad_(False)
|
| 41 |
+
|
| 42 |
+
self.vae = WanVAEWrapper()
|
| 43 |
+
self.vae.requires_grad_(False)
|
| 44 |
+
|
| 45 |
+
self.scheduler = self.generator.get_scheduler()
|
| 46 |
+
self.scheduler.timesteps = self.scheduler.timesteps.to(device)
|
| 47 |
+
|
| 48 |
+
def _get_timestep(
|
| 49 |
+
self,
|
| 50 |
+
min_timestep: int,
|
| 51 |
+
max_timestep: int,
|
| 52 |
+
batch_size: int,
|
| 53 |
+
num_frame: int,
|
| 54 |
+
num_frame_per_block: int,
|
| 55 |
+
uniform_timestep: bool = False
|
| 56 |
+
) -> torch.Tensor:
|
| 57 |
+
"""
|
| 58 |
+
Randomly generate a timestep tensor based on the generator's task type. It uniformly samples a timestep
|
| 59 |
+
from the range [min_timestep, max_timestep], and returns a tensor of shape [batch_size, num_frame].
|
| 60 |
+
- If uniform_timestep, it will use the same timestep for all frames.
|
| 61 |
+
- If not uniform_timestep, it will use a different timestep for each block.
|
| 62 |
+
"""
|
| 63 |
+
if uniform_timestep:
|
| 64 |
+
timestep = torch.randint(
|
| 65 |
+
min_timestep,
|
| 66 |
+
max_timestep,
|
| 67 |
+
[batch_size, 1],
|
| 68 |
+
device=self.device,
|
| 69 |
+
dtype=torch.long
|
| 70 |
+
).repeat(1, num_frame)
|
| 71 |
+
return timestep
|
| 72 |
+
else:
|
| 73 |
+
timestep = torch.randint(
|
| 74 |
+
min_timestep,
|
| 75 |
+
max_timestep,
|
| 76 |
+
[batch_size, num_frame],
|
| 77 |
+
device=self.device,
|
| 78 |
+
dtype=torch.long
|
| 79 |
+
)
|
| 80 |
+
# make the noise level the same within every block
|
| 81 |
+
if self.independent_first_frame:
|
| 82 |
+
# the first frame is always kept the same
|
| 83 |
+
timestep_from_second = timestep[:, 1:]
|
| 84 |
+
timestep_from_second = timestep_from_second.reshape(
|
| 85 |
+
timestep_from_second.shape[0], -1, num_frame_per_block)
|
| 86 |
+
timestep_from_second[:, :, 1:] = timestep_from_second[:, :, 0:1]
|
| 87 |
+
timestep_from_second = timestep_from_second.reshape(
|
| 88 |
+
timestep_from_second.shape[0], -1)
|
| 89 |
+
timestep = torch.cat([timestep[:, 0:1], timestep_from_second], dim=1)
|
| 90 |
+
else:
|
| 91 |
+
timestep = timestep.reshape(
|
| 92 |
+
timestep.shape[0], -1, num_frame_per_block)
|
| 93 |
+
timestep[:, :, 1:] = timestep[:, :, 0:1]
|
| 94 |
+
timestep = timestep.reshape(timestep.shape[0], -1)
|
| 95 |
+
return timestep
|
| 96 |
+
|
| 97 |
+
|
| 98 |
+
class SelfForcingModel(BaseModel):
|
| 99 |
+
def __init__(self, args, device):
|
| 100 |
+
super().__init__(args, device)
|
| 101 |
+
self.denoising_loss_func = get_denoising_loss(args.denoising_loss_type)()
|
| 102 |
+
|
| 103 |
+
def _run_generator(
|
| 104 |
+
self,
|
| 105 |
+
image_or_video_shape,
|
| 106 |
+
conditional_dict: dict,
|
| 107 |
+
initial_latent: torch.tensor = None
|
| 108 |
+
) -> Tuple[torch.Tensor, torch.Tensor]:
|
| 109 |
+
"""
|
| 110 |
+
Optionally simulate the generator's input from noise using backward simulation
|
| 111 |
+
and then run the generator for one-step.
|
| 112 |
+
Input:
|
| 113 |
+
- image_or_video_shape: a list containing the shape of the image or video [B, F, C, H, W].
|
| 114 |
+
- conditional_dict: a dictionary containing the conditional information (e.g. text embeddings, image embeddings).
|
| 115 |
+
- unconditional_dict: a dictionary containing the unconditional information (e.g. null/negative text embeddings, null/negative image embeddings).
|
| 116 |
+
- clean_latent: a tensor containing the clean latents [B, F, C, H, W]. Need to be passed when no backward simulation is used.
|
| 117 |
+
- initial_latent: a tensor containing the initial latents [B, F, C, H, W].
|
| 118 |
+
Output:
|
| 119 |
+
- pred_image: a tensor with shape [B, F, C, H, W].
|
| 120 |
+
- denoised_timestep: an integer
|
| 121 |
+
"""
|
| 122 |
+
# Step 1: Sample noise and backward simulate the generator's input
|
| 123 |
+
assert getattr(self.args, "backward_simulation", True), "Backward simulation needs to be enabled"
|
| 124 |
+
if initial_latent is not None:
|
| 125 |
+
conditional_dict["initial_latent"] = initial_latent
|
| 126 |
+
if self.args.i2v:
|
| 127 |
+
noise_shape = [image_or_video_shape[0], image_or_video_shape[1] - 1, *image_or_video_shape[2:]]
|
| 128 |
+
else:
|
| 129 |
+
noise_shape = image_or_video_shape.copy()
|
| 130 |
+
|
| 131 |
+
# During training, the number of generated frames should be uniformly sampled from
|
| 132 |
+
# [21, self.num_training_frames], but still being a multiple of self.num_frame_per_block
|
| 133 |
+
min_num_frames = 20 if self.args.independent_first_frame else 21
|
| 134 |
+
max_num_frames = self.num_training_frames - 1 if self.args.independent_first_frame else self.num_training_frames
|
| 135 |
+
assert max_num_frames % self.num_frame_per_block == 0
|
| 136 |
+
assert min_num_frames % self.num_frame_per_block == 0
|
| 137 |
+
max_num_blocks = max_num_frames // self.num_frame_per_block
|
| 138 |
+
min_num_blocks = min_num_frames // self.num_frame_per_block
|
| 139 |
+
num_generated_blocks = torch.randint(min_num_blocks, max_num_blocks + 1, (1,), device=self.device)
|
| 140 |
+
dist.broadcast(num_generated_blocks, src=0)
|
| 141 |
+
num_generated_blocks = num_generated_blocks.item()
|
| 142 |
+
num_generated_frames = num_generated_blocks * self.num_frame_per_block
|
| 143 |
+
if self.args.independent_first_frame and initial_latent is None:
|
| 144 |
+
num_generated_frames += 1
|
| 145 |
+
min_num_frames += 1
|
| 146 |
+
# Sync num_generated_frames across all processes
|
| 147 |
+
noise_shape[1] = num_generated_frames
|
| 148 |
+
|
| 149 |
+
pred_image_or_video, denoised_timestep_from, denoised_timestep_to = self._consistency_backward_simulation(
|
| 150 |
+
noise=torch.randn(noise_shape,
|
| 151 |
+
device=self.device, dtype=self.dtype),
|
| 152 |
+
**conditional_dict,
|
| 153 |
+
)
|
| 154 |
+
# Slice last 21 frames
|
| 155 |
+
if pred_image_or_video.shape[1] > 21:
|
| 156 |
+
with torch.no_grad():
|
| 157 |
+
# Reencode to get image latent
|
| 158 |
+
latent_to_decode = pred_image_or_video[:, :-20, ...]
|
| 159 |
+
# Deccode to video
|
| 160 |
+
pixels = self.vae.decode_to_pixel(latent_to_decode)
|
| 161 |
+
frame = pixels[:, -1:, ...].to(self.dtype)
|
| 162 |
+
frame = rearrange(frame, "b t c h w -> b c t h w")
|
| 163 |
+
# Encode frame to get image latent
|
| 164 |
+
image_latent = self.vae.encode_to_latent(frame).to(self.dtype)
|
| 165 |
+
pred_image_or_video_last_21 = torch.cat([image_latent, pred_image_or_video[:, -20:, ...]], dim=1)
|
| 166 |
+
else:
|
| 167 |
+
pred_image_or_video_last_21 = pred_image_or_video
|
| 168 |
+
|
| 169 |
+
if num_generated_frames != min_num_frames:
|
| 170 |
+
# Currently, we do not use gradient for the first chunk, since it contains image latents
|
| 171 |
+
gradient_mask = torch.ones_like(pred_image_or_video_last_21, dtype=torch.bool)
|
| 172 |
+
if self.args.independent_first_frame:
|
| 173 |
+
gradient_mask[:, :1] = False
|
| 174 |
+
else:
|
| 175 |
+
gradient_mask[:, :self.num_frame_per_block] = False
|
| 176 |
+
else:
|
| 177 |
+
gradient_mask = None
|
| 178 |
+
|
| 179 |
+
pred_image_or_video_last_21 = pred_image_or_video_last_21.to(self.dtype)
|
| 180 |
+
return pred_image_or_video_last_21, gradient_mask, denoised_timestep_from, denoised_timestep_to
|
| 181 |
+
|
| 182 |
+
def _consistency_backward_simulation(
|
| 183 |
+
self,
|
| 184 |
+
noise: torch.Tensor,
|
| 185 |
+
**conditional_dict: dict
|
| 186 |
+
) -> torch.Tensor:
|
| 187 |
+
"""
|
| 188 |
+
Simulate the generator's input from noise to avoid training/inference mismatch.
|
| 189 |
+
See Sec 4.5 of the DMD2 paper (https://arxiv.org/abs/2405.14867) for details.
|
| 190 |
+
Here we use the consistency sampler (https://arxiv.org/abs/2303.01469)
|
| 191 |
+
Input:
|
| 192 |
+
- noise: a tensor sampled from N(0, 1) with shape [B, F, C, H, W] where the number of frame is 1 for images.
|
| 193 |
+
- conditional_dict: a dictionary containing the conditional information (e.g. text embeddings, image embeddings).
|
| 194 |
+
Output:
|
| 195 |
+
- output: a tensor with shape [B, T, F, C, H, W].
|
| 196 |
+
T is the total number of timesteps. output[0] is a pure noise and output[i] and i>0
|
| 197 |
+
represents the x0 prediction at each timestep.
|
| 198 |
+
"""
|
| 199 |
+
if self.inference_pipeline is None:
|
| 200 |
+
self._initialize_inference_pipeline()
|
| 201 |
+
|
| 202 |
+
return self.inference_pipeline.inference_with_trajectory(
|
| 203 |
+
noise=noise, **conditional_dict
|
| 204 |
+
)
|
| 205 |
+
|
| 206 |
+
def _initialize_inference_pipeline(self):
|
| 207 |
+
"""
|
| 208 |
+
Lazy initialize the inference pipeline during the first backward simulation run.
|
| 209 |
+
Here we encapsulate the inference code with a model-dependent outside function.
|
| 210 |
+
We pass our FSDP-wrapped modules into the pipeline to save memory.
|
| 211 |
+
"""
|
| 212 |
+
self.inference_pipeline = SelfForcingTrainingPipeline(
|
| 213 |
+
denoising_step_list=self.denoising_step_list,
|
| 214 |
+
scheduler=self.scheduler,
|
| 215 |
+
generator=self.generator,
|
| 216 |
+
num_frame_per_block=self.num_frame_per_block,
|
| 217 |
+
independent_first_frame=self.args.independent_first_frame,
|
| 218 |
+
same_step_across_blocks=self.args.same_step_across_blocks,
|
| 219 |
+
last_step_only=self.args.last_step_only,
|
| 220 |
+
num_max_frames=self.num_training_frames,
|
| 221 |
+
context_noise=self.args.context_noise
|
| 222 |
+
)
|
model/causvid.py
ADDED
|
@@ -0,0 +1,391 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import torch.nn.functional as F
|
| 2 |
+
from typing import Tuple
|
| 3 |
+
import torch
|
| 4 |
+
|
| 5 |
+
from model.base import BaseModel
|
| 6 |
+
|
| 7 |
+
|
| 8 |
+
class CausVid(BaseModel):
|
| 9 |
+
def __init__(self, args, device):
|
| 10 |
+
"""
|
| 11 |
+
Initialize the DMD (Distribution Matching Distillation) module.
|
| 12 |
+
This class is self-contained and compute generator and fake score losses
|
| 13 |
+
in the forward pass.
|
| 14 |
+
"""
|
| 15 |
+
super().__init__(args, device)
|
| 16 |
+
self.num_frame_per_block = getattr(args, "num_frame_per_block", 1)
|
| 17 |
+
self.num_training_frames = getattr(args, "num_training_frames", 21)
|
| 18 |
+
|
| 19 |
+
if self.num_frame_per_block > 1:
|
| 20 |
+
self.generator.model.num_frame_per_block = self.num_frame_per_block
|
| 21 |
+
|
| 22 |
+
self.independent_first_frame = getattr(args, "independent_first_frame", False)
|
| 23 |
+
if self.independent_first_frame:
|
| 24 |
+
self.generator.model.independent_first_frame = True
|
| 25 |
+
if args.gradient_checkpointing:
|
| 26 |
+
self.generator.enable_gradient_checkpointing()
|
| 27 |
+
self.fake_score.enable_gradient_checkpointing()
|
| 28 |
+
|
| 29 |
+
# Step 2: Initialize all dmd hyperparameters
|
| 30 |
+
self.num_train_timestep = args.num_train_timestep
|
| 31 |
+
self.min_step = int(0.02 * self.num_train_timestep)
|
| 32 |
+
self.max_step = int(0.98 * self.num_train_timestep)
|
| 33 |
+
if hasattr(args, "real_guidance_scale"):
|
| 34 |
+
self.real_guidance_scale = args.real_guidance_scale
|
| 35 |
+
self.fake_guidance_scale = args.fake_guidance_scale
|
| 36 |
+
else:
|
| 37 |
+
self.real_guidance_scale = args.guidance_scale
|
| 38 |
+
self.fake_guidance_scale = 0.0
|
| 39 |
+
self.timestep_shift = getattr(args, "timestep_shift", 1.0)
|
| 40 |
+
self.teacher_forcing = getattr(args, "teacher_forcing", False)
|
| 41 |
+
|
| 42 |
+
if getattr(self.scheduler, "alphas_cumprod", None) is not None:
|
| 43 |
+
self.scheduler.alphas_cumprod = self.scheduler.alphas_cumprod.to(device)
|
| 44 |
+
else:
|
| 45 |
+
self.scheduler.alphas_cumprod = None
|
| 46 |
+
|
| 47 |
+
def _compute_kl_grad(
|
| 48 |
+
self, noisy_image_or_video: torch.Tensor,
|
| 49 |
+
estimated_clean_image_or_video: torch.Tensor,
|
| 50 |
+
timestep: torch.Tensor,
|
| 51 |
+
conditional_dict: dict, unconditional_dict: dict,
|
| 52 |
+
normalization: bool = True
|
| 53 |
+
) -> Tuple[torch.Tensor, dict]:
|
| 54 |
+
"""
|
| 55 |
+
Compute the KL grad (eq 7 in https://arxiv.org/abs/2311.18828).
|
| 56 |
+
Input:
|
| 57 |
+
- noisy_image_or_video: a tensor with shape [B, F, C, H, W] where the number of frame is 1 for images.
|
| 58 |
+
- estimated_clean_image_or_video: a tensor with shape [B, F, C, H, W] representing the estimated clean image or video.
|
| 59 |
+
- timestep: a tensor with shape [B, F] containing the randomly generated timestep.
|
| 60 |
+
- conditional_dict: a dictionary containing the conditional information (e.g. text embeddings, image embeddings).
|
| 61 |
+
- unconditional_dict: a dictionary containing the unconditional information (e.g. null/negative text embeddings, null/negative image embeddings).
|
| 62 |
+
- normalization: a boolean indicating whether to normalize the gradient.
|
| 63 |
+
Output:
|
| 64 |
+
- kl_grad: a tensor representing the KL grad.
|
| 65 |
+
- kl_log_dict: a dictionary containing the intermediate tensors for logging.
|
| 66 |
+
"""
|
| 67 |
+
# Step 1: Compute the fake score
|
| 68 |
+
_, pred_fake_image_cond = self.fake_score(
|
| 69 |
+
noisy_image_or_video=noisy_image_or_video,
|
| 70 |
+
conditional_dict=conditional_dict,
|
| 71 |
+
timestep=timestep
|
| 72 |
+
)
|
| 73 |
+
|
| 74 |
+
if self.fake_guidance_scale != 0.0:
|
| 75 |
+
_, pred_fake_image_uncond = self.fake_score(
|
| 76 |
+
noisy_image_or_video=noisy_image_or_video,
|
| 77 |
+
conditional_dict=unconditional_dict,
|
| 78 |
+
timestep=timestep
|
| 79 |
+
)
|
| 80 |
+
pred_fake_image = pred_fake_image_cond + (
|
| 81 |
+
pred_fake_image_cond - pred_fake_image_uncond
|
| 82 |
+
) * self.fake_guidance_scale
|
| 83 |
+
else:
|
| 84 |
+
pred_fake_image = pred_fake_image_cond
|
| 85 |
+
|
| 86 |
+
# Step 2: Compute the real score
|
| 87 |
+
# We compute the conditional and unconditional prediction
|
| 88 |
+
# and add them together to achieve cfg (https://arxiv.org/abs/2207.12598)
|
| 89 |
+
_, pred_real_image_cond = self.real_score(
|
| 90 |
+
noisy_image_or_video=noisy_image_or_video,
|
| 91 |
+
conditional_dict=conditional_dict,
|
| 92 |
+
timestep=timestep
|
| 93 |
+
)
|
| 94 |
+
|
| 95 |
+
_, pred_real_image_uncond = self.real_score(
|
| 96 |
+
noisy_image_or_video=noisy_image_or_video,
|
| 97 |
+
conditional_dict=unconditional_dict,
|
| 98 |
+
timestep=timestep
|
| 99 |
+
)
|
| 100 |
+
|
| 101 |
+
pred_real_image = pred_real_image_cond + (
|
| 102 |
+
pred_real_image_cond - pred_real_image_uncond
|
| 103 |
+
) * self.real_guidance_scale
|
| 104 |
+
|
| 105 |
+
# Step 3: Compute the DMD gradient (DMD paper eq. 7).
|
| 106 |
+
grad = (pred_fake_image - pred_real_image)
|
| 107 |
+
|
| 108 |
+
# TODO: Change the normalizer for causal teacher
|
| 109 |
+
if normalization:
|
| 110 |
+
# Step 4: Gradient normalization (DMD paper eq. 8).
|
| 111 |
+
p_real = (estimated_clean_image_or_video - pred_real_image)
|
| 112 |
+
normalizer = torch.abs(p_real).mean(dim=[1, 2, 3, 4], keepdim=True)
|
| 113 |
+
grad = grad / normalizer
|
| 114 |
+
grad = torch.nan_to_num(grad)
|
| 115 |
+
|
| 116 |
+
return grad, {
|
| 117 |
+
"dmdtrain_gradient_norm": torch.mean(torch.abs(grad)).detach(),
|
| 118 |
+
"timestep": timestep.detach()
|
| 119 |
+
}
|
| 120 |
+
|
| 121 |
+
def compute_distribution_matching_loss(
|
| 122 |
+
self,
|
| 123 |
+
image_or_video: torch.Tensor,
|
| 124 |
+
conditional_dict: dict,
|
| 125 |
+
unconditional_dict: dict,
|
| 126 |
+
gradient_mask: torch.Tensor = None,
|
| 127 |
+
) -> Tuple[torch.Tensor, dict]:
|
| 128 |
+
"""
|
| 129 |
+
Compute the DMD loss (eq 7 in https://arxiv.org/abs/2311.18828).
|
| 130 |
+
Input:
|
| 131 |
+
- image_or_video: a tensor with shape [B, F, C, H, W] where the number of frame is 1 for images.
|
| 132 |
+
- conditional_dict: a dictionary containing the conditional information (e.g. text embeddings, image embeddings).
|
| 133 |
+
- unconditional_dict: a dictionary containing the unconditional information (e.g. null/negative text embeddings, null/negative image embeddings).
|
| 134 |
+
- gradient_mask: a boolean tensor with the same shape as image_or_video indicating which pixels to compute loss .
|
| 135 |
+
Output:
|
| 136 |
+
- dmd_loss: a scalar tensor representing the DMD loss.
|
| 137 |
+
- dmd_log_dict: a dictionary containing the intermediate tensors for logging.
|
| 138 |
+
"""
|
| 139 |
+
original_latent = image_or_video
|
| 140 |
+
|
| 141 |
+
batch_size, num_frame = image_or_video.shape[:2]
|
| 142 |
+
|
| 143 |
+
with torch.no_grad():
|
| 144 |
+
# Step 1: Randomly sample timestep based on the given schedule and corresponding noise
|
| 145 |
+
timestep = self._get_timestep(
|
| 146 |
+
0,
|
| 147 |
+
self.num_train_timestep,
|
| 148 |
+
batch_size,
|
| 149 |
+
num_frame,
|
| 150 |
+
self.num_frame_per_block,
|
| 151 |
+
uniform_timestep=True
|
| 152 |
+
)
|
| 153 |
+
|
| 154 |
+
if self.timestep_shift > 1:
|
| 155 |
+
timestep = self.timestep_shift * \
|
| 156 |
+
(timestep / 1000) / \
|
| 157 |
+
(1 + (self.timestep_shift - 1) * (timestep / 1000)) * 1000
|
| 158 |
+
timestep = timestep.clamp(self.min_step, self.max_step)
|
| 159 |
+
|
| 160 |
+
noise = torch.randn_like(image_or_video)
|
| 161 |
+
noisy_latent = self.scheduler.add_noise(
|
| 162 |
+
image_or_video.flatten(0, 1),
|
| 163 |
+
noise.flatten(0, 1),
|
| 164 |
+
timestep.flatten(0, 1)
|
| 165 |
+
).detach().unflatten(0, (batch_size, num_frame))
|
| 166 |
+
|
| 167 |
+
# Step 2: Compute the KL grad
|
| 168 |
+
grad, dmd_log_dict = self._compute_kl_grad(
|
| 169 |
+
noisy_image_or_video=noisy_latent,
|
| 170 |
+
estimated_clean_image_or_video=original_latent,
|
| 171 |
+
timestep=timestep,
|
| 172 |
+
conditional_dict=conditional_dict,
|
| 173 |
+
unconditional_dict=unconditional_dict
|
| 174 |
+
)
|
| 175 |
+
|
| 176 |
+
if gradient_mask is not None:
|
| 177 |
+
dmd_loss = 0.5 * F.mse_loss(original_latent.double(
|
| 178 |
+
)[gradient_mask], (original_latent.double() - grad.double()).detach()[gradient_mask], reduction="mean")
|
| 179 |
+
else:
|
| 180 |
+
dmd_loss = 0.5 * F.mse_loss(original_latent.double(
|
| 181 |
+
), (original_latent.double() - grad.double()).detach(), reduction="mean")
|
| 182 |
+
return dmd_loss, dmd_log_dict
|
| 183 |
+
|
| 184 |
+
def _run_generator(
|
| 185 |
+
self,
|
| 186 |
+
image_or_video_shape,
|
| 187 |
+
conditional_dict: dict,
|
| 188 |
+
clean_latent: torch.tensor
|
| 189 |
+
) -> Tuple[torch.Tensor, torch.Tensor]:
|
| 190 |
+
"""
|
| 191 |
+
Optionally simulate the generator's input from noise using backward simulation
|
| 192 |
+
and then run the generator for one-step.
|
| 193 |
+
Input:
|
| 194 |
+
- image_or_video_shape: a list containing the shape of the image or video [B, F, C, H, W].
|
| 195 |
+
- conditional_dict: a dictionary containing the conditional information (e.g. text embeddings, image embeddings).
|
| 196 |
+
- unconditional_dict: a dictionary containing the unconditional information (e.g. null/negative text embeddings, null/negative image embeddings).
|
| 197 |
+
- clean_latent: a tensor containing the clean latents [B, F, C, H, W]. Need to be passed when no backward simulation is used.
|
| 198 |
+
- initial_latent: a tensor containing the initial latents [B, F, C, H, W].
|
| 199 |
+
Output:
|
| 200 |
+
- pred_image: a tensor with shape [B, F, C, H, W].
|
| 201 |
+
"""
|
| 202 |
+
simulated_noisy_input = []
|
| 203 |
+
for timestep in self.denoising_step_list:
|
| 204 |
+
noise = torch.randn(
|
| 205 |
+
image_or_video_shape, device=self.device, dtype=self.dtype)
|
| 206 |
+
|
| 207 |
+
noisy_timestep = timestep * torch.ones(
|
| 208 |
+
image_or_video_shape[:2], device=self.device, dtype=torch.long)
|
| 209 |
+
|
| 210 |
+
if timestep != 0:
|
| 211 |
+
noisy_image = self.scheduler.add_noise(
|
| 212 |
+
clean_latent.flatten(0, 1),
|
| 213 |
+
noise.flatten(0, 1),
|
| 214 |
+
noisy_timestep.flatten(0, 1)
|
| 215 |
+
).unflatten(0, image_or_video_shape[:2])
|
| 216 |
+
else:
|
| 217 |
+
noisy_image = clean_latent
|
| 218 |
+
|
| 219 |
+
simulated_noisy_input.append(noisy_image)
|
| 220 |
+
|
| 221 |
+
simulated_noisy_input = torch.stack(simulated_noisy_input, dim=1)
|
| 222 |
+
|
| 223 |
+
# Step 2: Randomly sample a timestep and pick the corresponding input
|
| 224 |
+
index = self._get_timestep(
|
| 225 |
+
0,
|
| 226 |
+
len(self.denoising_step_list),
|
| 227 |
+
image_or_video_shape[0],
|
| 228 |
+
image_or_video_shape[1],
|
| 229 |
+
self.num_frame_per_block,
|
| 230 |
+
uniform_timestep=False
|
| 231 |
+
)
|
| 232 |
+
|
| 233 |
+
# select the corresponding timestep's noisy input from the stacked tensor [B, T, F, C, H, W]
|
| 234 |
+
noisy_input = torch.gather(
|
| 235 |
+
simulated_noisy_input, dim=1,
|
| 236 |
+
index=index.reshape(index.shape[0], 1, index.shape[1], 1, 1, 1).expand(
|
| 237 |
+
-1, -1, -1, *image_or_video_shape[2:]).to(self.device)
|
| 238 |
+
).squeeze(1)
|
| 239 |
+
|
| 240 |
+
timestep = self.denoising_step_list[index].to(self.device)
|
| 241 |
+
|
| 242 |
+
_, pred_image_or_video = self.generator(
|
| 243 |
+
noisy_image_or_video=noisy_input,
|
| 244 |
+
conditional_dict=conditional_dict,
|
| 245 |
+
timestep=timestep,
|
| 246 |
+
clean_x=clean_latent if self.teacher_forcing else None,
|
| 247 |
+
)
|
| 248 |
+
|
| 249 |
+
gradient_mask = None # timestep != 0
|
| 250 |
+
|
| 251 |
+
pred_image_or_video = pred_image_or_video.type_as(noisy_input)
|
| 252 |
+
|
| 253 |
+
return pred_image_or_video, gradient_mask
|
| 254 |
+
|
| 255 |
+
def generator_loss(
|
| 256 |
+
self,
|
| 257 |
+
image_or_video_shape,
|
| 258 |
+
conditional_dict: dict,
|
| 259 |
+
unconditional_dict: dict,
|
| 260 |
+
clean_latent: torch.Tensor,
|
| 261 |
+
initial_latent: torch.Tensor = None
|
| 262 |
+
) -> Tuple[torch.Tensor, dict]:
|
| 263 |
+
"""
|
| 264 |
+
Generate image/videos from noise and compute the DMD loss.
|
| 265 |
+
The noisy input to the generator is backward simulated.
|
| 266 |
+
This removes the need of any datasets during distillation.
|
| 267 |
+
See Sec 4.5 of the DMD2 paper (https://arxiv.org/abs/2405.14867) for details.
|
| 268 |
+
Input:
|
| 269 |
+
- image_or_video_shape: a list containing the shape of the image or video [B, F, C, H, W].
|
| 270 |
+
- conditional_dict: a dictionary containing the conditional information (e.g. text embeddings, image embeddings).
|
| 271 |
+
- unconditional_dict: a dictionary containing the unconditional information (e.g. null/negative text embeddings, null/negative image embeddings).
|
| 272 |
+
- clean_latent: a tensor containing the clean latents [B, F, C, H, W]. Need to be passed when no backward simulation is used.
|
| 273 |
+
Output:
|
| 274 |
+
- loss: a scalar tensor representing the generator loss.
|
| 275 |
+
- generator_log_dict: a dictionary containing the intermediate tensors for logging.
|
| 276 |
+
"""
|
| 277 |
+
# Step 1: Run generator on backward simulated noisy input
|
| 278 |
+
pred_image, gradient_mask = self._run_generator(
|
| 279 |
+
image_or_video_shape=image_or_video_shape,
|
| 280 |
+
conditional_dict=conditional_dict,
|
| 281 |
+
clean_latent=clean_latent
|
| 282 |
+
)
|
| 283 |
+
|
| 284 |
+
# Step 2: Compute the DMD loss
|
| 285 |
+
dmd_loss, dmd_log_dict = self.compute_distribution_matching_loss(
|
| 286 |
+
image_or_video=pred_image,
|
| 287 |
+
conditional_dict=conditional_dict,
|
| 288 |
+
unconditional_dict=unconditional_dict,
|
| 289 |
+
gradient_mask=gradient_mask
|
| 290 |
+
)
|
| 291 |
+
|
| 292 |
+
# Step 3: TODO: Implement the GAN loss
|
| 293 |
+
|
| 294 |
+
return dmd_loss, dmd_log_dict
|
| 295 |
+
|
| 296 |
+
def critic_loss(
|
| 297 |
+
self,
|
| 298 |
+
image_or_video_shape,
|
| 299 |
+
conditional_dict: dict,
|
| 300 |
+
unconditional_dict: dict,
|
| 301 |
+
clean_latent: torch.Tensor,
|
| 302 |
+
initial_latent: torch.Tensor = None
|
| 303 |
+
) -> Tuple[torch.Tensor, dict]:
|
| 304 |
+
"""
|
| 305 |
+
Generate image/videos from noise and train the critic with generated samples.
|
| 306 |
+
The noisy input to the generator is backward simulated.
|
| 307 |
+
This removes the need of any datasets during distillation.
|
| 308 |
+
See Sec 4.5 of the DMD2 paper (https://arxiv.org/abs/2405.14867) for details.
|
| 309 |
+
Input:
|
| 310 |
+
- image_or_video_shape: a list containing the shape of the image or video [B, F, C, H, W].
|
| 311 |
+
- conditional_dict: a dictionary containing the conditional information (e.g. text embeddings, image embeddings).
|
| 312 |
+
- unconditional_dict: a dictionary containing the unconditional information (e.g. null/negative text embeddings, null/negative image embeddings).
|
| 313 |
+
- clean_latent: a tensor containing the clean latents [B, F, C, H, W]. Need to be passed when no backward simulation is used.
|
| 314 |
+
Output:
|
| 315 |
+
- loss: a scalar tensor representing the generator loss.
|
| 316 |
+
- critic_log_dict: a dictionary containing the intermediate tensors for logging.
|
| 317 |
+
"""
|
| 318 |
+
|
| 319 |
+
# Step 1: Run generator on backward simulated noisy input
|
| 320 |
+
with torch.no_grad():
|
| 321 |
+
generated_image, _ = self._run_generator(
|
| 322 |
+
image_or_video_shape=image_or_video_shape,
|
| 323 |
+
conditional_dict=conditional_dict,
|
| 324 |
+
clean_latent=clean_latent
|
| 325 |
+
)
|
| 326 |
+
|
| 327 |
+
# Step 2: Compute the fake prediction
|
| 328 |
+
critic_timestep = self._get_timestep(
|
| 329 |
+
0,
|
| 330 |
+
self.num_train_timestep,
|
| 331 |
+
image_or_video_shape[0],
|
| 332 |
+
image_or_video_shape[1],
|
| 333 |
+
self.num_frame_per_block,
|
| 334 |
+
uniform_timestep=True
|
| 335 |
+
)
|
| 336 |
+
|
| 337 |
+
if self.timestep_shift > 1:
|
| 338 |
+
critic_timestep = self.timestep_shift * \
|
| 339 |
+
(critic_timestep / 1000) / (1 + (self.timestep_shift - 1) * (critic_timestep / 1000)) * 1000
|
| 340 |
+
|
| 341 |
+
critic_timestep = critic_timestep.clamp(self.min_step, self.max_step)
|
| 342 |
+
|
| 343 |
+
critic_noise = torch.randn_like(generated_image)
|
| 344 |
+
noisy_generated_image = self.scheduler.add_noise(
|
| 345 |
+
generated_image.flatten(0, 1),
|
| 346 |
+
critic_noise.flatten(0, 1),
|
| 347 |
+
critic_timestep.flatten(0, 1)
|
| 348 |
+
).unflatten(0, image_or_video_shape[:2])
|
| 349 |
+
|
| 350 |
+
_, pred_fake_image = self.fake_score(
|
| 351 |
+
noisy_image_or_video=noisy_generated_image,
|
| 352 |
+
conditional_dict=conditional_dict,
|
| 353 |
+
timestep=critic_timestep
|
| 354 |
+
)
|
| 355 |
+
|
| 356 |
+
# Step 3: Compute the denoising loss for the fake critic
|
| 357 |
+
if self.args.denoising_loss_type == "flow":
|
| 358 |
+
from utils.wan_wrapper import WanDiffusionWrapper
|
| 359 |
+
flow_pred = WanDiffusionWrapper._convert_x0_to_flow_pred(
|
| 360 |
+
scheduler=self.scheduler,
|
| 361 |
+
x0_pred=pred_fake_image.flatten(0, 1),
|
| 362 |
+
xt=noisy_generated_image.flatten(0, 1),
|
| 363 |
+
timestep=critic_timestep.flatten(0, 1)
|
| 364 |
+
)
|
| 365 |
+
pred_fake_noise = None
|
| 366 |
+
else:
|
| 367 |
+
flow_pred = None
|
| 368 |
+
pred_fake_noise = self.scheduler.convert_x0_to_noise(
|
| 369 |
+
x0=pred_fake_image.flatten(0, 1),
|
| 370 |
+
xt=noisy_generated_image.flatten(0, 1),
|
| 371 |
+
timestep=critic_timestep.flatten(0, 1)
|
| 372 |
+
).unflatten(0, image_or_video_shape[:2])
|
| 373 |
+
|
| 374 |
+
denoising_loss = self.denoising_loss_func(
|
| 375 |
+
x=generated_image.flatten(0, 1),
|
| 376 |
+
x_pred=pred_fake_image.flatten(0, 1),
|
| 377 |
+
noise=critic_noise.flatten(0, 1),
|
| 378 |
+
noise_pred=pred_fake_noise,
|
| 379 |
+
alphas_cumprod=self.scheduler.alphas_cumprod,
|
| 380 |
+
timestep=critic_timestep.flatten(0, 1),
|
| 381 |
+
flow_pred=flow_pred
|
| 382 |
+
)
|
| 383 |
+
|
| 384 |
+
# Step 4: TODO: Compute the GAN loss
|
| 385 |
+
|
| 386 |
+
# Step 5: Debugging Log
|
| 387 |
+
critic_log_dict = {
|
| 388 |
+
"critic_timestep": critic_timestep.detach()
|
| 389 |
+
}
|
| 390 |
+
|
| 391 |
+
return denoising_loss, critic_log_dict
|
model/diffusion.py
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from typing import Tuple
|
| 2 |
+
import torch
|
| 3 |
+
|
| 4 |
+
from model.base import BaseModel
|
| 5 |
+
from utils.wan_wrapper import WanDiffusionWrapper, WanTextEncoder, WanVAEWrapper
|
| 6 |
+
|
| 7 |
+
|
| 8 |
+
class CausalDiffusion(BaseModel):
|
| 9 |
+
def __init__(self, args, device):
|
| 10 |
+
"""
|
| 11 |
+
Initialize the Diffusion loss module.
|
| 12 |
+
"""
|
| 13 |
+
super().__init__(args, device)
|
| 14 |
+
self.num_frame_per_block = getattr(args, "num_frame_per_block", 1)
|
| 15 |
+
if self.num_frame_per_block > 1:
|
| 16 |
+
self.generator.model.num_frame_per_block = self.num_frame_per_block
|
| 17 |
+
self.independent_first_frame = getattr(args, "independent_first_frame", False)
|
| 18 |
+
if self.independent_first_frame:
|
| 19 |
+
self.generator.model.independent_first_frame = True
|
| 20 |
+
|
| 21 |
+
if args.gradient_checkpointing:
|
| 22 |
+
self.generator.enable_gradient_checkpointing()
|
| 23 |
+
|
| 24 |
+
# Step 2: Initialize all hyperparameters
|
| 25 |
+
self.num_train_timestep = args.num_train_timestep
|
| 26 |
+
self.min_step = int(0.02 * self.num_train_timestep)
|
| 27 |
+
self.max_step = int(0.98 * self.num_train_timestep)
|
| 28 |
+
self.guidance_scale = args.guidance_scale
|
| 29 |
+
self.timestep_shift = getattr(args, "timestep_shift", 1.0)
|
| 30 |
+
self.teacher_forcing = getattr(args, "teacher_forcing", False)
|
| 31 |
+
# Noise augmentation in teacher forcing, we add small noise to clean context latents
|
| 32 |
+
self.noise_augmentation_max_timestep = getattr(args, "noise_augmentation_max_timestep", 0)
|
| 33 |
+
|
| 34 |
+
def _initialize_models(self, args):
|
| 35 |
+
self.generator = WanDiffusionWrapper(**getattr(args, "model_kwargs", {}), is_causal=True)
|
| 36 |
+
self.generator.model.requires_grad_(True)
|
| 37 |
+
|
| 38 |
+
self.text_encoder = WanTextEncoder()
|
| 39 |
+
self.text_encoder.requires_grad_(False)
|
| 40 |
+
|
| 41 |
+
self.vae = WanVAEWrapper()
|
| 42 |
+
self.vae.requires_grad_(False)
|
| 43 |
+
|
| 44 |
+
def generator_loss(
|
| 45 |
+
self,
|
| 46 |
+
image_or_video_shape,
|
| 47 |
+
conditional_dict: dict,
|
| 48 |
+
unconditional_dict: dict,
|
| 49 |
+
clean_latent: torch.Tensor,
|
| 50 |
+
initial_latent: torch.Tensor = None
|
| 51 |
+
) -> Tuple[torch.Tensor, dict]:
|
| 52 |
+
"""
|
| 53 |
+
Generate image/videos from noise and compute the DMD loss.
|
| 54 |
+
The noisy input to the generator is backward simulated.
|
| 55 |
+
This removes the need of any datasets during distillation.
|
| 56 |
+
See Sec 4.5 of the DMD2 paper (https://arxiv.org/abs/2405.14867) for details.
|
| 57 |
+
Input:
|
| 58 |
+
- image_or_video_shape: a list containing the shape of the image or video [B, F, C, H, W].
|
| 59 |
+
- conditional_dict: a dictionary containing the conditional information (e.g. text embeddings, image embeddings).
|
| 60 |
+
- unconditional_dict: a dictionary containing the unconditional information (e.g. null/negative text embeddings, null/negative image embeddings).
|
| 61 |
+
- clean_latent: a tensor containing the clean latents [B, F, C, H, W]. Need to be passed when no backward simulation is used.
|
| 62 |
+
Output:
|
| 63 |
+
- loss: a scalar tensor representing the generator loss.
|
| 64 |
+
- generator_log_dict: a dictionary containing the intermediate tensors for logging.
|
| 65 |
+
"""
|
| 66 |
+
noise = torch.randn_like(clean_latent)
|
| 67 |
+
batch_size, num_frame = image_or_video_shape[:2]
|
| 68 |
+
|
| 69 |
+
# Step 2: Randomly sample a timestep and add noise to denoiser inputs
|
| 70 |
+
index = self._get_timestep(
|
| 71 |
+
0,
|
| 72 |
+
self.scheduler.num_train_timesteps,
|
| 73 |
+
image_or_video_shape[0],
|
| 74 |
+
image_or_video_shape[1],
|
| 75 |
+
self.num_frame_per_block,
|
| 76 |
+
uniform_timestep=False
|
| 77 |
+
)
|
| 78 |
+
timestep = self.scheduler.timesteps[index].to(dtype=self.dtype, device=self.device)
|
| 79 |
+
noisy_latents = self.scheduler.add_noise(
|
| 80 |
+
clean_latent.flatten(0, 1),
|
| 81 |
+
noise.flatten(0, 1),
|
| 82 |
+
timestep.flatten(0, 1)
|
| 83 |
+
).unflatten(0, (batch_size, num_frame))
|
| 84 |
+
training_target = self.scheduler.training_target(clean_latent, noise, timestep)
|
| 85 |
+
|
| 86 |
+
# Step 3: Noise augmentation, also add small noise to clean context latents
|
| 87 |
+
if self.noise_augmentation_max_timestep > 0:
|
| 88 |
+
index_clean_aug = self._get_timestep(
|
| 89 |
+
0,
|
| 90 |
+
self.noise_augmentation_max_timestep,
|
| 91 |
+
image_or_video_shape[0],
|
| 92 |
+
image_or_video_shape[1],
|
| 93 |
+
self.num_frame_per_block,
|
| 94 |
+
uniform_timestep=False
|
| 95 |
+
)
|
| 96 |
+
timestep_clean_aug = self.scheduler.timesteps[index_clean_aug].to(dtype=self.dtype, device=self.device)
|
| 97 |
+
clean_latent_aug = self.scheduler.add_noise(
|
| 98 |
+
clean_latent.flatten(0, 1),
|
| 99 |
+
noise.flatten(0, 1),
|
| 100 |
+
timestep_clean_aug.flatten(0, 1)
|
| 101 |
+
).unflatten(0, (batch_size, num_frame))
|
| 102 |
+
else:
|
| 103 |
+
clean_latent_aug = clean_latent
|
| 104 |
+
timestep_clean_aug = None
|
| 105 |
+
|
| 106 |
+
# Compute loss
|
| 107 |
+
flow_pred, x0_pred = self.generator(
|
| 108 |
+
noisy_image_or_video=noisy_latents,
|
| 109 |
+
conditional_dict=conditional_dict,
|
| 110 |
+
timestep=timestep,
|
| 111 |
+
clean_x=clean_latent_aug if self.teacher_forcing else None,
|
| 112 |
+
aug_t=timestep_clean_aug if self.teacher_forcing else None
|
| 113 |
+
)
|
| 114 |
+
# loss = torch.nn.functional.mse_loss(flow_pred.float(), training_target.float())
|
| 115 |
+
loss = torch.nn.functional.mse_loss(
|
| 116 |
+
flow_pred.float(), training_target.float(), reduction='none'
|
| 117 |
+
).mean(dim=(2, 3, 4))
|
| 118 |
+
loss = loss * self.scheduler.training_weight(timestep).unflatten(0, (batch_size, num_frame))
|
| 119 |
+
loss = loss.mean()
|
| 120 |
+
|
| 121 |
+
log_dict = {
|
| 122 |
+
"x0": clean_latent.detach(),
|
| 123 |
+
"x0_pred": x0_pred.detach()
|
| 124 |
+
}
|
| 125 |
+
return loss, log_dict
|
model/dmd.py
ADDED
|
@@ -0,0 +1,332 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from pipeline import SelfForcingTrainingPipeline
|
| 2 |
+
import torch.nn.functional as F
|
| 3 |
+
from typing import Optional, Tuple
|
| 4 |
+
import torch
|
| 5 |
+
|
| 6 |
+
from model.base import SelfForcingModel
|
| 7 |
+
|
| 8 |
+
|
| 9 |
+
class DMD(SelfForcingModel):
|
| 10 |
+
def __init__(self, args, device):
|
| 11 |
+
"""
|
| 12 |
+
Initialize the DMD (Distribution Matching Distillation) module.
|
| 13 |
+
This class is self-contained and compute generator and fake score losses
|
| 14 |
+
in the forward pass.
|
| 15 |
+
"""
|
| 16 |
+
super().__init__(args, device)
|
| 17 |
+
self.num_frame_per_block = getattr(args, "num_frame_per_block", 1)
|
| 18 |
+
self.same_step_across_blocks = getattr(args, "same_step_across_blocks", True)
|
| 19 |
+
self.num_training_frames = getattr(args, "num_training_frames", 21)
|
| 20 |
+
|
| 21 |
+
if self.num_frame_per_block > 1:
|
| 22 |
+
self.generator.model.num_frame_per_block = self.num_frame_per_block
|
| 23 |
+
|
| 24 |
+
self.independent_first_frame = getattr(args, "independent_first_frame", False)
|
| 25 |
+
if self.independent_first_frame:
|
| 26 |
+
self.generator.model.independent_first_frame = True
|
| 27 |
+
if args.gradient_checkpointing:
|
| 28 |
+
self.generator.enable_gradient_checkpointing()
|
| 29 |
+
self.fake_score.enable_gradient_checkpointing()
|
| 30 |
+
|
| 31 |
+
# this will be init later with fsdp-wrapped modules
|
| 32 |
+
self.inference_pipeline: SelfForcingTrainingPipeline = None
|
| 33 |
+
|
| 34 |
+
# Step 2: Initialize all dmd hyperparameters
|
| 35 |
+
self.num_train_timestep = args.num_train_timestep
|
| 36 |
+
self.min_step = int(0.02 * self.num_train_timestep)
|
| 37 |
+
self.max_step = int(0.98 * self.num_train_timestep)
|
| 38 |
+
if hasattr(args, "real_guidance_scale"):
|
| 39 |
+
self.real_guidance_scale = args.real_guidance_scale
|
| 40 |
+
self.fake_guidance_scale = args.fake_guidance_scale
|
| 41 |
+
else:
|
| 42 |
+
self.real_guidance_scale = args.guidance_scale
|
| 43 |
+
self.fake_guidance_scale = 0.0
|
| 44 |
+
self.timestep_shift = getattr(args, "timestep_shift", 1.0)
|
| 45 |
+
self.ts_schedule = getattr(args, "ts_schedule", True)
|
| 46 |
+
self.ts_schedule_max = getattr(args, "ts_schedule_max", False)
|
| 47 |
+
self.min_score_timestep = getattr(args, "min_score_timestep", 0)
|
| 48 |
+
|
| 49 |
+
if getattr(self.scheduler, "alphas_cumprod", None) is not None:
|
| 50 |
+
self.scheduler.alphas_cumprod = self.scheduler.alphas_cumprod.to(device)
|
| 51 |
+
else:
|
| 52 |
+
self.scheduler.alphas_cumprod = None
|
| 53 |
+
|
| 54 |
+
def _compute_kl_grad(
|
| 55 |
+
self, noisy_image_or_video: torch.Tensor,
|
| 56 |
+
estimated_clean_image_or_video: torch.Tensor,
|
| 57 |
+
timestep: torch.Tensor,
|
| 58 |
+
conditional_dict: dict, unconditional_dict: dict,
|
| 59 |
+
normalization: bool = True
|
| 60 |
+
) -> Tuple[torch.Tensor, dict]:
|
| 61 |
+
"""
|
| 62 |
+
Compute the KL grad (eq 7 in https://arxiv.org/abs/2311.18828).
|
| 63 |
+
Input:
|
| 64 |
+
- noisy_image_or_video: a tensor with shape [B, F, C, H, W] where the number of frame is 1 for images.
|
| 65 |
+
- estimated_clean_image_or_video: a tensor with shape [B, F, C, H, W] representing the estimated clean image or video.
|
| 66 |
+
- timestep: a tensor with shape [B, F] containing the randomly generated timestep.
|
| 67 |
+
- conditional_dict: a dictionary containing the conditional information (e.g. text embeddings, image embeddings).
|
| 68 |
+
- unconditional_dict: a dictionary containing the unconditional information (e.g. null/negative text embeddings, null/negative image embeddings).
|
| 69 |
+
- normalization: a boolean indicating whether to normalize the gradient.
|
| 70 |
+
Output:
|
| 71 |
+
- kl_grad: a tensor representing the KL grad.
|
| 72 |
+
- kl_log_dict: a dictionary containing the intermediate tensors for logging.
|
| 73 |
+
"""
|
| 74 |
+
# Step 1: Compute the fake score
|
| 75 |
+
_, pred_fake_image_cond = self.fake_score(
|
| 76 |
+
noisy_image_or_video=noisy_image_or_video,
|
| 77 |
+
conditional_dict=conditional_dict,
|
| 78 |
+
timestep=timestep
|
| 79 |
+
)
|
| 80 |
+
|
| 81 |
+
if self.fake_guidance_scale != 0.0:
|
| 82 |
+
_, pred_fake_image_uncond = self.fake_score(
|
| 83 |
+
noisy_image_or_video=noisy_image_or_video,
|
| 84 |
+
conditional_dict=unconditional_dict,
|
| 85 |
+
timestep=timestep
|
| 86 |
+
)
|
| 87 |
+
pred_fake_image = pred_fake_image_cond + (
|
| 88 |
+
pred_fake_image_cond - pred_fake_image_uncond
|
| 89 |
+
) * self.fake_guidance_scale
|
| 90 |
+
else:
|
| 91 |
+
pred_fake_image = pred_fake_image_cond
|
| 92 |
+
|
| 93 |
+
# Step 2: Compute the real score
|
| 94 |
+
# We compute the conditional and unconditional prediction
|
| 95 |
+
# and add them together to achieve cfg (https://arxiv.org/abs/2207.12598)
|
| 96 |
+
_, pred_real_image_cond = self.real_score(
|
| 97 |
+
noisy_image_or_video=noisy_image_or_video,
|
| 98 |
+
conditional_dict=conditional_dict,
|
| 99 |
+
timestep=timestep
|
| 100 |
+
)
|
| 101 |
+
|
| 102 |
+
_, pred_real_image_uncond = self.real_score(
|
| 103 |
+
noisy_image_or_video=noisy_image_or_video,
|
| 104 |
+
conditional_dict=unconditional_dict,
|
| 105 |
+
timestep=timestep
|
| 106 |
+
)
|
| 107 |
+
|
| 108 |
+
pred_real_image = pred_real_image_cond + (
|
| 109 |
+
pred_real_image_cond - pred_real_image_uncond
|
| 110 |
+
) * self.real_guidance_scale
|
| 111 |
+
|
| 112 |
+
# Step 3: Compute the DMD gradient (DMD paper eq. 7).
|
| 113 |
+
grad = (pred_fake_image - pred_real_image)
|
| 114 |
+
|
| 115 |
+
# TODO: Change the normalizer for causal teacher
|
| 116 |
+
if normalization:
|
| 117 |
+
# Step 4: Gradient normalization (DMD paper eq. 8).
|
| 118 |
+
p_real = (estimated_clean_image_or_video - pred_real_image)
|
| 119 |
+
normalizer = torch.abs(p_real).mean(dim=[1, 2, 3, 4], keepdim=True)
|
| 120 |
+
grad = grad / normalizer
|
| 121 |
+
grad = torch.nan_to_num(grad)
|
| 122 |
+
|
| 123 |
+
return grad, {
|
| 124 |
+
"dmdtrain_gradient_norm": torch.mean(torch.abs(grad)).detach(),
|
| 125 |
+
"timestep": timestep.detach()
|
| 126 |
+
}
|
| 127 |
+
|
| 128 |
+
def compute_distribution_matching_loss(
|
| 129 |
+
self,
|
| 130 |
+
image_or_video: torch.Tensor,
|
| 131 |
+
conditional_dict: dict,
|
| 132 |
+
unconditional_dict: dict,
|
| 133 |
+
gradient_mask: Optional[torch.Tensor] = None,
|
| 134 |
+
denoised_timestep_from: int = 0,
|
| 135 |
+
denoised_timestep_to: int = 0
|
| 136 |
+
) -> Tuple[torch.Tensor, dict]:
|
| 137 |
+
"""
|
| 138 |
+
Compute the DMD loss (eq 7 in https://arxiv.org/abs/2311.18828).
|
| 139 |
+
Input:
|
| 140 |
+
- image_or_video: a tensor with shape [B, F, C, H, W] where the number of frame is 1 for images.
|
| 141 |
+
- conditional_dict: a dictionary containing the conditional information (e.g. text embeddings, image embeddings).
|
| 142 |
+
- unconditional_dict: a dictionary containing the unconditional information (e.g. null/negative text embeddings, null/negative image embeddings).
|
| 143 |
+
- gradient_mask: a boolean tensor with the same shape as image_or_video indicating which pixels to compute loss .
|
| 144 |
+
Output:
|
| 145 |
+
- dmd_loss: a scalar tensor representing the DMD loss.
|
| 146 |
+
- dmd_log_dict: a dictionary containing the intermediate tensors for logging.
|
| 147 |
+
"""
|
| 148 |
+
original_latent = image_or_video
|
| 149 |
+
|
| 150 |
+
batch_size, num_frame = image_or_video.shape[:2]
|
| 151 |
+
|
| 152 |
+
with torch.no_grad():
|
| 153 |
+
# Step 1: Randomly sample timestep based on the given schedule and corresponding noise
|
| 154 |
+
min_timestep = denoised_timestep_to if self.ts_schedule and denoised_timestep_to is not None else self.min_score_timestep
|
| 155 |
+
max_timestep = denoised_timestep_from if self.ts_schedule_max and denoised_timestep_from is not None else self.num_train_timestep
|
| 156 |
+
timestep = self._get_timestep(
|
| 157 |
+
min_timestep,
|
| 158 |
+
max_timestep,
|
| 159 |
+
batch_size,
|
| 160 |
+
num_frame,
|
| 161 |
+
self.num_frame_per_block,
|
| 162 |
+
uniform_timestep=True
|
| 163 |
+
)
|
| 164 |
+
|
| 165 |
+
# TODO:should we change it to `timestep = self.scheduler.timesteps[timestep]`?
|
| 166 |
+
if self.timestep_shift > 1:
|
| 167 |
+
timestep = self.timestep_shift * \
|
| 168 |
+
(timestep / 1000) / \
|
| 169 |
+
(1 + (self.timestep_shift - 1) * (timestep / 1000)) * 1000
|
| 170 |
+
timestep = timestep.clamp(self.min_step, self.max_step)
|
| 171 |
+
|
| 172 |
+
noise = torch.randn_like(image_or_video)
|
| 173 |
+
noisy_latent = self.scheduler.add_noise(
|
| 174 |
+
image_or_video.flatten(0, 1),
|
| 175 |
+
noise.flatten(0, 1),
|
| 176 |
+
timestep.flatten(0, 1)
|
| 177 |
+
).detach().unflatten(0, (batch_size, num_frame))
|
| 178 |
+
|
| 179 |
+
# Step 2: Compute the KL grad
|
| 180 |
+
grad, dmd_log_dict = self._compute_kl_grad(
|
| 181 |
+
noisy_image_or_video=noisy_latent,
|
| 182 |
+
estimated_clean_image_or_video=original_latent,
|
| 183 |
+
timestep=timestep,
|
| 184 |
+
conditional_dict=conditional_dict,
|
| 185 |
+
unconditional_dict=unconditional_dict
|
| 186 |
+
)
|
| 187 |
+
|
| 188 |
+
if gradient_mask is not None:
|
| 189 |
+
dmd_loss = 0.5 * F.mse_loss(original_latent.double(
|
| 190 |
+
)[gradient_mask], (original_latent.double() - grad.double()).detach()[gradient_mask], reduction="mean")
|
| 191 |
+
else:
|
| 192 |
+
dmd_loss = 0.5 * F.mse_loss(original_latent.double(
|
| 193 |
+
), (original_latent.double() - grad.double()).detach(), reduction="mean")
|
| 194 |
+
return dmd_loss, dmd_log_dict
|
| 195 |
+
|
| 196 |
+
def generator_loss(
|
| 197 |
+
self,
|
| 198 |
+
image_or_video_shape,
|
| 199 |
+
conditional_dict: dict,
|
| 200 |
+
unconditional_dict: dict,
|
| 201 |
+
clean_latent: torch.Tensor,
|
| 202 |
+
initial_latent: torch.Tensor = None
|
| 203 |
+
) -> Tuple[torch.Tensor, dict]:
|
| 204 |
+
"""
|
| 205 |
+
Generate image/videos from noise and compute the DMD loss.
|
| 206 |
+
The noisy input to the generator is backward simulated.
|
| 207 |
+
This removes the need of any datasets during distillation.
|
| 208 |
+
See Sec 4.5 of the DMD2 paper (https://arxiv.org/abs/2405.14867) for details.
|
| 209 |
+
Input:
|
| 210 |
+
- image_or_video_shape: a list containing the shape of the image or video [B, F, C, H, W].
|
| 211 |
+
- conditional_dict: a dictionary containing the conditional information (e.g. text embeddings, image embeddings).
|
| 212 |
+
- unconditional_dict: a dictionary containing the unconditional information (e.g. null/negative text embeddings, null/negative image embeddings).
|
| 213 |
+
- clean_latent: a tensor containing the clean latents [B, F, C, H, W]. Need to be passed when no backward simulation is used.
|
| 214 |
+
Output:
|
| 215 |
+
- loss: a scalar tensor representing the generator loss.
|
| 216 |
+
- generator_log_dict: a dictionary containing the intermediate tensors for logging.
|
| 217 |
+
"""
|
| 218 |
+
# Step 1: Unroll generator to obtain fake videos
|
| 219 |
+
pred_image, gradient_mask, denoised_timestep_from, denoised_timestep_to = self._run_generator(
|
| 220 |
+
image_or_video_shape=image_or_video_shape,
|
| 221 |
+
conditional_dict=conditional_dict,
|
| 222 |
+
initial_latent=initial_latent
|
| 223 |
+
)
|
| 224 |
+
|
| 225 |
+
# Step 2: Compute the DMD loss
|
| 226 |
+
dmd_loss, dmd_log_dict = self.compute_distribution_matching_loss(
|
| 227 |
+
image_or_video=pred_image,
|
| 228 |
+
conditional_dict=conditional_dict,
|
| 229 |
+
unconditional_dict=unconditional_dict,
|
| 230 |
+
gradient_mask=gradient_mask,
|
| 231 |
+
denoised_timestep_from=denoised_timestep_from,
|
| 232 |
+
denoised_timestep_to=denoised_timestep_to
|
| 233 |
+
)
|
| 234 |
+
|
| 235 |
+
return dmd_loss, dmd_log_dict
|
| 236 |
+
|
| 237 |
+
def critic_loss(
|
| 238 |
+
self,
|
| 239 |
+
image_or_video_shape,
|
| 240 |
+
conditional_dict: dict,
|
| 241 |
+
unconditional_dict: dict,
|
| 242 |
+
clean_latent: torch.Tensor,
|
| 243 |
+
initial_latent: torch.Tensor = None
|
| 244 |
+
) -> Tuple[torch.Tensor, dict]:
|
| 245 |
+
"""
|
| 246 |
+
Generate image/videos from noise and train the critic with generated samples.
|
| 247 |
+
The noisy input to the generator is backward simulated.
|
| 248 |
+
This removes the need of any datasets during distillation.
|
| 249 |
+
See Sec 4.5 of the DMD2 paper (https://arxiv.org/abs/2405.14867) for details.
|
| 250 |
+
Input:
|
| 251 |
+
- image_or_video_shape: a list containing the shape of the image or video [B, F, C, H, W].
|
| 252 |
+
- conditional_dict: a dictionary containing the conditional information (e.g. text embeddings, image embeddings).
|
| 253 |
+
- unconditional_dict: a dictionary containing the unconditional information (e.g. null/negative text embeddings, null/negative image embeddings).
|
| 254 |
+
- clean_latent: a tensor containing the clean latents [B, F, C, H, W]. Need to be passed when no backward simulation is used.
|
| 255 |
+
Output:
|
| 256 |
+
- loss: a scalar tensor representing the generator loss.
|
| 257 |
+
- critic_log_dict: a dictionary containing the intermediate tensors for logging.
|
| 258 |
+
"""
|
| 259 |
+
|
| 260 |
+
# Step 1: Run generator on backward simulated noisy input
|
| 261 |
+
with torch.no_grad():
|
| 262 |
+
generated_image, _, denoised_timestep_from, denoised_timestep_to = self._run_generator(
|
| 263 |
+
image_or_video_shape=image_or_video_shape,
|
| 264 |
+
conditional_dict=conditional_dict,
|
| 265 |
+
initial_latent=initial_latent
|
| 266 |
+
)
|
| 267 |
+
|
| 268 |
+
# Step 2: Compute the fake prediction
|
| 269 |
+
min_timestep = denoised_timestep_to if self.ts_schedule and denoised_timestep_to is not None else self.min_score_timestep
|
| 270 |
+
max_timestep = denoised_timestep_from if self.ts_schedule_max and denoised_timestep_from is not None else self.num_train_timestep
|
| 271 |
+
critic_timestep = self._get_timestep(
|
| 272 |
+
min_timestep,
|
| 273 |
+
max_timestep,
|
| 274 |
+
image_or_video_shape[0],
|
| 275 |
+
image_or_video_shape[1],
|
| 276 |
+
self.num_frame_per_block,
|
| 277 |
+
uniform_timestep=True
|
| 278 |
+
)
|
| 279 |
+
|
| 280 |
+
if self.timestep_shift > 1:
|
| 281 |
+
critic_timestep = self.timestep_shift * \
|
| 282 |
+
(critic_timestep / 1000) / (1 + (self.timestep_shift - 1) * (critic_timestep / 1000)) * 1000
|
| 283 |
+
|
| 284 |
+
critic_timestep = critic_timestep.clamp(self.min_step, self.max_step)
|
| 285 |
+
|
| 286 |
+
critic_noise = torch.randn_like(generated_image)
|
| 287 |
+
noisy_generated_image = self.scheduler.add_noise(
|
| 288 |
+
generated_image.flatten(0, 1),
|
| 289 |
+
critic_noise.flatten(0, 1),
|
| 290 |
+
critic_timestep.flatten(0, 1)
|
| 291 |
+
).unflatten(0, image_or_video_shape[:2])
|
| 292 |
+
|
| 293 |
+
_, pred_fake_image = self.fake_score(
|
| 294 |
+
noisy_image_or_video=noisy_generated_image,
|
| 295 |
+
conditional_dict=conditional_dict,
|
| 296 |
+
timestep=critic_timestep
|
| 297 |
+
)
|
| 298 |
+
|
| 299 |
+
# Step 3: Compute the denoising loss for the fake critic
|
| 300 |
+
if self.args.denoising_loss_type == "flow":
|
| 301 |
+
from utils.wan_wrapper import WanDiffusionWrapper
|
| 302 |
+
flow_pred = WanDiffusionWrapper._convert_x0_to_flow_pred(
|
| 303 |
+
scheduler=self.scheduler,
|
| 304 |
+
x0_pred=pred_fake_image.flatten(0, 1),
|
| 305 |
+
xt=noisy_generated_image.flatten(0, 1),
|
| 306 |
+
timestep=critic_timestep.flatten(0, 1)
|
| 307 |
+
)
|
| 308 |
+
pred_fake_noise = None
|
| 309 |
+
else:
|
| 310 |
+
flow_pred = None
|
| 311 |
+
pred_fake_noise = self.scheduler.convert_x0_to_noise(
|
| 312 |
+
x0=pred_fake_image.flatten(0, 1),
|
| 313 |
+
xt=noisy_generated_image.flatten(0, 1),
|
| 314 |
+
timestep=critic_timestep.flatten(0, 1)
|
| 315 |
+
).unflatten(0, image_or_video_shape[:2])
|
| 316 |
+
|
| 317 |
+
denoising_loss = self.denoising_loss_func(
|
| 318 |
+
x=generated_image.flatten(0, 1),
|
| 319 |
+
x_pred=pred_fake_image.flatten(0, 1),
|
| 320 |
+
noise=critic_noise.flatten(0, 1),
|
| 321 |
+
noise_pred=pred_fake_noise,
|
| 322 |
+
alphas_cumprod=self.scheduler.alphas_cumprod,
|
| 323 |
+
timestep=critic_timestep.flatten(0, 1),
|
| 324 |
+
flow_pred=flow_pred
|
| 325 |
+
)
|
| 326 |
+
|
| 327 |
+
# Step 5: Debugging Log
|
| 328 |
+
critic_log_dict = {
|
| 329 |
+
"critic_timestep": critic_timestep.detach()
|
| 330 |
+
}
|
| 331 |
+
|
| 332 |
+
return denoising_loss, critic_log_dict
|
model/gan.py
ADDED
|
@@ -0,0 +1,295 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import copy
|
| 2 |
+
from pipeline import SelfForcingTrainingPipeline
|
| 3 |
+
import torch.nn.functional as F
|
| 4 |
+
from typing import Tuple
|
| 5 |
+
import torch
|
| 6 |
+
|
| 7 |
+
from model.base import SelfForcingModel
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
class GAN(SelfForcingModel):
|
| 11 |
+
def __init__(self, args, device):
|
| 12 |
+
"""
|
| 13 |
+
Initialize the GAN module.
|
| 14 |
+
This class is self-contained and compute generator and fake score losses
|
| 15 |
+
in the forward pass.
|
| 16 |
+
"""
|
| 17 |
+
super().__init__(args, device)
|
| 18 |
+
self.num_frame_per_block = getattr(args, "num_frame_per_block", 1)
|
| 19 |
+
self.same_step_across_blocks = getattr(args, "same_step_across_blocks", True)
|
| 20 |
+
self.concat_time_embeddings = getattr(args, "concat_time_embeddings", False)
|
| 21 |
+
self.num_class = args.num_class
|
| 22 |
+
self.relativistic_discriminator = getattr(args, "relativistic_discriminator", False)
|
| 23 |
+
|
| 24 |
+
if self.num_frame_per_block > 1:
|
| 25 |
+
self.generator.model.num_frame_per_block = self.num_frame_per_block
|
| 26 |
+
|
| 27 |
+
self.fake_score.adding_cls_branch(
|
| 28 |
+
atten_dim=1536, num_class=args.num_class, time_embed_dim=1536 if self.concat_time_embeddings else 0)
|
| 29 |
+
self.fake_score.model.requires_grad_(True)
|
| 30 |
+
|
| 31 |
+
self.independent_first_frame = getattr(args, "independent_first_frame", False)
|
| 32 |
+
if self.independent_first_frame:
|
| 33 |
+
self.generator.model.independent_first_frame = True
|
| 34 |
+
if args.gradient_checkpointing:
|
| 35 |
+
self.generator.enable_gradient_checkpointing()
|
| 36 |
+
self.fake_score.enable_gradient_checkpointing()
|
| 37 |
+
|
| 38 |
+
# this will be init later with fsdp-wrapped modules
|
| 39 |
+
self.inference_pipeline: SelfForcingTrainingPipeline = None
|
| 40 |
+
|
| 41 |
+
# Step 2: Initialize all dmd hyperparameters
|
| 42 |
+
self.num_train_timestep = args.num_train_timestep
|
| 43 |
+
self.min_step = int(0.02 * self.num_train_timestep)
|
| 44 |
+
self.max_step = int(0.98 * self.num_train_timestep)
|
| 45 |
+
if hasattr(args, "real_guidance_scale"):
|
| 46 |
+
self.real_guidance_scale = args.real_guidance_scale
|
| 47 |
+
self.fake_guidance_scale = args.fake_guidance_scale
|
| 48 |
+
else:
|
| 49 |
+
self.real_guidance_scale = args.guidance_scale
|
| 50 |
+
self.fake_guidance_scale = 0.0
|
| 51 |
+
self.timestep_shift = getattr(args, "timestep_shift", 1.0)
|
| 52 |
+
self.critic_timestep_shift = getattr(args, "critic_timestep_shift", self.timestep_shift)
|
| 53 |
+
self.ts_schedule = getattr(args, "ts_schedule", True)
|
| 54 |
+
self.ts_schedule_max = getattr(args, "ts_schedule_max", False)
|
| 55 |
+
self.min_score_timestep = getattr(args, "min_score_timestep", 0)
|
| 56 |
+
|
| 57 |
+
self.gan_g_weight = getattr(args, "gan_g_weight", 1e-2)
|
| 58 |
+
self.gan_d_weight = getattr(args, "gan_d_weight", 1e-2)
|
| 59 |
+
self.r1_weight = getattr(args, "r1_weight", 0.0)
|
| 60 |
+
self.r2_weight = getattr(args, "r2_weight", 0.0)
|
| 61 |
+
self.r1_sigma = getattr(args, "r1_sigma", 0.01)
|
| 62 |
+
self.r2_sigma = getattr(args, "r2_sigma", 0.01)
|
| 63 |
+
|
| 64 |
+
if getattr(self.scheduler, "alphas_cumprod", None) is not None:
|
| 65 |
+
self.scheduler.alphas_cumprod = self.scheduler.alphas_cumprod.to(device)
|
| 66 |
+
else:
|
| 67 |
+
self.scheduler.alphas_cumprod = None
|
| 68 |
+
|
| 69 |
+
def _run_cls_pred_branch(self,
|
| 70 |
+
noisy_image_or_video: torch.Tensor,
|
| 71 |
+
conditional_dict: dict,
|
| 72 |
+
timestep: torch.Tensor) -> torch.Tensor:
|
| 73 |
+
"""
|
| 74 |
+
Run the classifier prediction branch on the generated image or video.
|
| 75 |
+
Input:
|
| 76 |
+
- image_or_video: a tensor with shape [B, F, C, H, W].
|
| 77 |
+
Output:
|
| 78 |
+
- cls_pred: a tensor with shape [B, 1, 1, 1, 1] representing the feature map for classification.
|
| 79 |
+
"""
|
| 80 |
+
_, _, noisy_logit = self.fake_score(
|
| 81 |
+
noisy_image_or_video=noisy_image_or_video,
|
| 82 |
+
conditional_dict=conditional_dict,
|
| 83 |
+
timestep=timestep,
|
| 84 |
+
classify_mode=True,
|
| 85 |
+
concat_time_embeddings=self.concat_time_embeddings
|
| 86 |
+
)
|
| 87 |
+
|
| 88 |
+
return noisy_logit
|
| 89 |
+
|
| 90 |
+
def generator_loss(
|
| 91 |
+
self,
|
| 92 |
+
image_or_video_shape,
|
| 93 |
+
conditional_dict: dict,
|
| 94 |
+
unconditional_dict: dict,
|
| 95 |
+
clean_latent: torch.Tensor,
|
| 96 |
+
initial_latent: torch.Tensor = None
|
| 97 |
+
) -> Tuple[torch.Tensor, dict]:
|
| 98 |
+
"""
|
| 99 |
+
Generate image/videos from noise and compute the DMD loss.
|
| 100 |
+
The noisy input to the generator is backward simulated.
|
| 101 |
+
This removes the need of any datasets during distillation.
|
| 102 |
+
See Sec 4.5 of the DMD2 paper (https://arxiv.org/abs/2405.14867) for details.
|
| 103 |
+
Input:
|
| 104 |
+
- image_or_video_shape: a list containing the shape of the image or video [B, F, C, H, W].
|
| 105 |
+
- conditional_dict: a dictionary containing the conditional information (e.g. text embeddings, image embeddings).
|
| 106 |
+
- unconditional_dict: a dictionary containing the unconditional information (e.g. null/negative text embeddings, null/negative image embeddings).
|
| 107 |
+
- clean_latent: a tensor containing the clean latents [B, F, C, H, W]. Need to be passed when no backward simulation is used.
|
| 108 |
+
Output:
|
| 109 |
+
- loss: a scalar tensor representing the generator loss.
|
| 110 |
+
- generator_log_dict: a dictionary containing the intermediate tensors for logging.
|
| 111 |
+
"""
|
| 112 |
+
# Step 1: Unroll generator to obtain fake videos
|
| 113 |
+
pred_image, gradient_mask, denoised_timestep_from, denoised_timestep_to = self._run_generator(
|
| 114 |
+
image_or_video_shape=image_or_video_shape,
|
| 115 |
+
conditional_dict=conditional_dict,
|
| 116 |
+
initial_latent=initial_latent
|
| 117 |
+
)
|
| 118 |
+
|
| 119 |
+
# Step 2: Get timestep and add noise to generated/real latents
|
| 120 |
+
min_timestep = denoised_timestep_to if self.ts_schedule and denoised_timestep_to is not None else self.min_score_timestep
|
| 121 |
+
max_timestep = denoised_timestep_from if self.ts_schedule_max and denoised_timestep_from is not None else self.num_train_timestep
|
| 122 |
+
critic_timestep = self._get_timestep(
|
| 123 |
+
min_timestep,
|
| 124 |
+
max_timestep,
|
| 125 |
+
image_or_video_shape[0],
|
| 126 |
+
image_or_video_shape[1],
|
| 127 |
+
self.num_frame_per_block,
|
| 128 |
+
uniform_timestep=True
|
| 129 |
+
)
|
| 130 |
+
|
| 131 |
+
if self.critic_timestep_shift > 1:
|
| 132 |
+
critic_timestep = self.critic_timestep_shift * \
|
| 133 |
+
(critic_timestep / 1000) / (1 + (self.critic_timestep_shift - 1) * (critic_timestep / 1000)) * 1000
|
| 134 |
+
|
| 135 |
+
critic_timestep = critic_timestep.clamp(self.min_step, self.max_step)
|
| 136 |
+
|
| 137 |
+
critic_noise = torch.randn_like(pred_image)
|
| 138 |
+
noisy_fake_latent = self.scheduler.add_noise(
|
| 139 |
+
pred_image.flatten(0, 1),
|
| 140 |
+
critic_noise.flatten(0, 1),
|
| 141 |
+
critic_timestep.flatten(0, 1)
|
| 142 |
+
).unflatten(0, image_or_video_shape[:2])
|
| 143 |
+
|
| 144 |
+
# Step 4: Compute the real GAN discriminator loss
|
| 145 |
+
real_image_or_video = clean_latent.clone()
|
| 146 |
+
critic_noise = torch.randn_like(real_image_or_video)
|
| 147 |
+
noisy_real_latent = self.scheduler.add_noise(
|
| 148 |
+
real_image_or_video.flatten(0, 1),
|
| 149 |
+
critic_noise.flatten(0, 1),
|
| 150 |
+
critic_timestep.flatten(0, 1)
|
| 151 |
+
).unflatten(0, image_or_video_shape[:2])
|
| 152 |
+
|
| 153 |
+
conditional_dict["prompt_embeds"] = torch.concatenate(
|
| 154 |
+
(conditional_dict["prompt_embeds"], conditional_dict["prompt_embeds"]), dim=0)
|
| 155 |
+
critic_timestep = torch.concatenate((critic_timestep, critic_timestep), dim=0)
|
| 156 |
+
noisy_latent = torch.concatenate((noisy_fake_latent, noisy_real_latent), dim=0)
|
| 157 |
+
_, _, noisy_logit = self.fake_score(
|
| 158 |
+
noisy_image_or_video=noisy_latent,
|
| 159 |
+
conditional_dict=conditional_dict,
|
| 160 |
+
timestep=critic_timestep,
|
| 161 |
+
classify_mode=True,
|
| 162 |
+
concat_time_embeddings=self.concat_time_embeddings
|
| 163 |
+
)
|
| 164 |
+
noisy_fake_logit, noisy_real_logit = noisy_logit.chunk(2, dim=0)
|
| 165 |
+
|
| 166 |
+
if not self.relativistic_discriminator:
|
| 167 |
+
gan_G_loss = F.softplus(-noisy_fake_logit.float()).mean() * self.gan_g_weight
|
| 168 |
+
else:
|
| 169 |
+
relative_fake_logit = noisy_fake_logit - noisy_real_logit
|
| 170 |
+
gan_G_loss = F.softplus(-relative_fake_logit.float()).mean() * self.gan_g_weight
|
| 171 |
+
|
| 172 |
+
return gan_G_loss
|
| 173 |
+
|
| 174 |
+
def critic_loss(
|
| 175 |
+
self,
|
| 176 |
+
image_or_video_shape,
|
| 177 |
+
conditional_dict: dict,
|
| 178 |
+
unconditional_dict: dict,
|
| 179 |
+
clean_latent: torch.Tensor,
|
| 180 |
+
real_image_or_video: torch.Tensor,
|
| 181 |
+
initial_latent: torch.Tensor = None
|
| 182 |
+
) -> Tuple[torch.Tensor, dict]:
|
| 183 |
+
"""
|
| 184 |
+
Generate image/videos from noise and train the critic with generated samples.
|
| 185 |
+
The noisy input to the generator is backward simulated.
|
| 186 |
+
This removes the need of any datasets during distillation.
|
| 187 |
+
See Sec 4.5 of the DMD2 paper (https://arxiv.org/abs/2405.14867) for details.
|
| 188 |
+
Input:
|
| 189 |
+
- image_or_video_shape: a list containing the shape of the image or video [B, F, C, H, W].
|
| 190 |
+
- conditional_dict: a dictionary containing the conditional information (e.g. text embeddings, image embeddings).
|
| 191 |
+
- unconditional_dict: a dictionary containing the unconditional information (e.g. null/negative text embeddings, null/negative image embeddings).
|
| 192 |
+
- clean_latent: a tensor containing the clean latents [B, F, C, H, W]. Need to be passed when no backward simulation is used.
|
| 193 |
+
Output:
|
| 194 |
+
- loss: a scalar tensor representing the generator loss.
|
| 195 |
+
- critic_log_dict: a dictionary containing the intermediate tensors for logging.
|
| 196 |
+
"""
|
| 197 |
+
|
| 198 |
+
# Step 1: Run generator on backward simulated noisy input
|
| 199 |
+
with torch.no_grad():
|
| 200 |
+
generated_image, _, denoised_timestep_from, denoised_timestep_to, num_sim_steps = self._run_generator(
|
| 201 |
+
image_or_video_shape=image_or_video_shape,
|
| 202 |
+
conditional_dict=conditional_dict,
|
| 203 |
+
initial_latent=initial_latent
|
| 204 |
+
)
|
| 205 |
+
|
| 206 |
+
# Step 2: Get timestep and add noise to generated/real latents
|
| 207 |
+
min_timestep = denoised_timestep_to if self.ts_schedule and denoised_timestep_to is not None else self.min_score_timestep
|
| 208 |
+
max_timestep = denoised_timestep_from if self.ts_schedule_max and denoised_timestep_from is not None else self.num_train_timestep
|
| 209 |
+
critic_timestep = self._get_timestep(
|
| 210 |
+
min_timestep,
|
| 211 |
+
max_timestep,
|
| 212 |
+
image_or_video_shape[0],
|
| 213 |
+
image_or_video_shape[1],
|
| 214 |
+
self.num_frame_per_block,
|
| 215 |
+
uniform_timestep=True
|
| 216 |
+
)
|
| 217 |
+
|
| 218 |
+
if self.critic_timestep_shift > 1:
|
| 219 |
+
critic_timestep = self.critic_timestep_shift * \
|
| 220 |
+
(critic_timestep / 1000) / (1 + (self.critic_timestep_shift - 1) * (critic_timestep / 1000)) * 1000
|
| 221 |
+
|
| 222 |
+
critic_timestep = critic_timestep.clamp(self.min_step, self.max_step)
|
| 223 |
+
|
| 224 |
+
critic_noise = torch.randn_like(generated_image)
|
| 225 |
+
noisy_fake_latent = self.scheduler.add_noise(
|
| 226 |
+
generated_image.flatten(0, 1),
|
| 227 |
+
critic_noise.flatten(0, 1),
|
| 228 |
+
critic_timestep.flatten(0, 1)
|
| 229 |
+
).unflatten(0, image_or_video_shape[:2])
|
| 230 |
+
|
| 231 |
+
# Step 4: Compute the real GAN discriminator loss
|
| 232 |
+
noisy_real_latent = self.scheduler.add_noise(
|
| 233 |
+
real_image_or_video.flatten(0, 1),
|
| 234 |
+
critic_noise.flatten(0, 1),
|
| 235 |
+
critic_timestep.flatten(0, 1)
|
| 236 |
+
).unflatten(0, image_or_video_shape[:2])
|
| 237 |
+
|
| 238 |
+
conditional_dict_cloned = copy.deepcopy(conditional_dict)
|
| 239 |
+
conditional_dict_cloned["prompt_embeds"] = torch.concatenate(
|
| 240 |
+
(conditional_dict_cloned["prompt_embeds"], conditional_dict_cloned["prompt_embeds"]), dim=0)
|
| 241 |
+
_, _, noisy_logit = self.fake_score(
|
| 242 |
+
noisy_image_or_video=torch.concatenate((noisy_fake_latent, noisy_real_latent), dim=0),
|
| 243 |
+
conditional_dict=conditional_dict_cloned,
|
| 244 |
+
timestep=torch.concatenate((critic_timestep, critic_timestep), dim=0),
|
| 245 |
+
classify_mode=True,
|
| 246 |
+
concat_time_embeddings=self.concat_time_embeddings
|
| 247 |
+
)
|
| 248 |
+
noisy_fake_logit, noisy_real_logit = noisy_logit.chunk(2, dim=0)
|
| 249 |
+
|
| 250 |
+
if not self.relativistic_discriminator:
|
| 251 |
+
gan_D_loss = F.softplus(-noisy_real_logit.float()).mean() + F.softplus(noisy_fake_logit.float()).mean()
|
| 252 |
+
else:
|
| 253 |
+
relative_real_logit = noisy_real_logit - noisy_fake_logit
|
| 254 |
+
gan_D_loss = F.softplus(-relative_real_logit.float()).mean()
|
| 255 |
+
gan_D_loss = gan_D_loss * self.gan_d_weight
|
| 256 |
+
|
| 257 |
+
# R1 regularization
|
| 258 |
+
if self.r1_weight > 0.:
|
| 259 |
+
noisy_real_latent_perturbed = noisy_real_latent.clone()
|
| 260 |
+
epison_real = self.r1_sigma * torch.randn_like(noisy_real_latent_perturbed)
|
| 261 |
+
noisy_real_latent_perturbed = noisy_real_latent_perturbed + epison_real
|
| 262 |
+
noisy_real_logit_perturbed = self._run_cls_pred_branch(
|
| 263 |
+
noisy_image_or_video=noisy_real_latent_perturbed,
|
| 264 |
+
conditional_dict=conditional_dict,
|
| 265 |
+
timestep=critic_timestep
|
| 266 |
+
)
|
| 267 |
+
|
| 268 |
+
r1_grad = (noisy_real_logit_perturbed - noisy_real_logit) / self.r1_sigma
|
| 269 |
+
r1_loss = self.r1_weight * torch.mean((r1_grad)**2)
|
| 270 |
+
else:
|
| 271 |
+
r1_loss = torch.zeros_like(gan_D_loss)
|
| 272 |
+
|
| 273 |
+
# R2 regularization
|
| 274 |
+
if self.r2_weight > 0.:
|
| 275 |
+
noisy_fake_latent_perturbed = noisy_fake_latent.clone()
|
| 276 |
+
epison_generated = self.r2_sigma * torch.randn_like(noisy_fake_latent_perturbed)
|
| 277 |
+
noisy_fake_latent_perturbed = noisy_fake_latent_perturbed + epison_generated
|
| 278 |
+
noisy_fake_logit_perturbed = self._run_cls_pred_branch(
|
| 279 |
+
noisy_image_or_video=noisy_fake_latent_perturbed,
|
| 280 |
+
conditional_dict=conditional_dict,
|
| 281 |
+
timestep=critic_timestep
|
| 282 |
+
)
|
| 283 |
+
|
| 284 |
+
r2_grad = (noisy_fake_logit_perturbed - noisy_fake_logit) / self.r2_sigma
|
| 285 |
+
r2_loss = self.r2_weight * torch.mean((r2_grad)**2)
|
| 286 |
+
else:
|
| 287 |
+
r2_loss = torch.zeros_like(r2_loss)
|
| 288 |
+
|
| 289 |
+
critic_log_dict = {
|
| 290 |
+
"critic_timestep": critic_timestep.detach(),
|
| 291 |
+
'noisy_real_logit': noisy_real_logit.detach(),
|
| 292 |
+
'noisy_fake_logit': noisy_fake_logit.detach(),
|
| 293 |
+
}
|
| 294 |
+
|
| 295 |
+
return (gan_D_loss, r1_loss, r2_loss), critic_log_dict
|
model/ode_regression.py
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import torch.nn.functional as F
|
| 2 |
+
from typing import Tuple
|
| 3 |
+
import torch
|
| 4 |
+
|
| 5 |
+
from model.base import BaseModel
|
| 6 |
+
from utils.wan_wrapper import WanDiffusionWrapper, WanTextEncoder, WanVAEWrapper
|
| 7 |
+
|
| 8 |
+
|
| 9 |
+
class ODERegression(BaseModel):
|
| 10 |
+
def __init__(self, args, device):
|
| 11 |
+
"""
|
| 12 |
+
Initialize the ODERegression module.
|
| 13 |
+
This class is self-contained and compute generator losses
|
| 14 |
+
in the forward pass given precomputed ode solution pairs.
|
| 15 |
+
This class supports the ode regression loss for both causal and bidirectional models.
|
| 16 |
+
See Sec 4.3 of CausVid https://arxiv.org/abs/2412.07772 for details
|
| 17 |
+
"""
|
| 18 |
+
super().__init__(args, device)
|
| 19 |
+
|
| 20 |
+
# Step 1: Initialize all models
|
| 21 |
+
|
| 22 |
+
self.generator = WanDiffusionWrapper(**getattr(args, "model_kwargs", {}), is_causal=True)
|
| 23 |
+
self.generator.model.requires_grad_(True)
|
| 24 |
+
if getattr(args, "generator_ckpt", False):
|
| 25 |
+
print(f"Loading pretrained generator from {args.generator_ckpt}")
|
| 26 |
+
state_dict = torch.load(args.generator_ckpt, map_location="cpu")[
|
| 27 |
+
'generator']
|
| 28 |
+
self.generator.load_state_dict(
|
| 29 |
+
state_dict, strict=True
|
| 30 |
+
)
|
| 31 |
+
|
| 32 |
+
self.num_frame_per_block = getattr(args, "num_frame_per_block", 1)
|
| 33 |
+
|
| 34 |
+
if self.num_frame_per_block > 1:
|
| 35 |
+
self.generator.model.num_frame_per_block = self.num_frame_per_block
|
| 36 |
+
|
| 37 |
+
self.independent_first_frame = getattr(args, "independent_first_frame", False)
|
| 38 |
+
if self.independent_first_frame:
|
| 39 |
+
self.generator.model.independent_first_frame = True
|
| 40 |
+
if args.gradient_checkpointing:
|
| 41 |
+
self.generator.enable_gradient_checkpointing()
|
| 42 |
+
|
| 43 |
+
# Step 2: Initialize all hyperparameters
|
| 44 |
+
self.timestep_shift = getattr(args, "timestep_shift", 1.0)
|
| 45 |
+
|
| 46 |
+
def _initialize_models(self, args):
|
| 47 |
+
self.generator = WanDiffusionWrapper(**getattr(args, "model_kwargs", {}), is_causal=True)
|
| 48 |
+
self.generator.model.requires_grad_(True)
|
| 49 |
+
|
| 50 |
+
self.text_encoder = WanTextEncoder()
|
| 51 |
+
self.text_encoder.requires_grad_(False)
|
| 52 |
+
|
| 53 |
+
self.vae = WanVAEWrapper()
|
| 54 |
+
self.vae.requires_grad_(False)
|
| 55 |
+
|
| 56 |
+
@torch.no_grad()
|
| 57 |
+
def _prepare_generator_input(self, ode_latent: torch.Tensor) -> Tuple[torch.Tensor, torch.Tensor]:
|
| 58 |
+
"""
|
| 59 |
+
Given a tensor containing the whole ODE sampling trajectories,
|
| 60 |
+
randomly choose an intermediate timestep and return the latent as well as the corresponding timestep.
|
| 61 |
+
Input:
|
| 62 |
+
- ode_latent: a tensor containing the whole ODE sampling trajectories [batch_size, num_denoising_steps, num_frames, num_channels, height, width].
|
| 63 |
+
Output:
|
| 64 |
+
- noisy_input: a tensor containing the selected latent [batch_size, num_frames, num_channels, height, width].
|
| 65 |
+
- timestep: a tensor containing the corresponding timestep [batch_size].
|
| 66 |
+
"""
|
| 67 |
+
batch_size, num_denoising_steps, num_frames, num_channels, height, width = ode_latent.shape
|
| 68 |
+
|
| 69 |
+
# Step 1: Randomly choose a timestep for each frame
|
| 70 |
+
index = self._get_timestep(
|
| 71 |
+
0,
|
| 72 |
+
len(self.denoising_step_list),
|
| 73 |
+
batch_size,
|
| 74 |
+
num_frames,
|
| 75 |
+
self.num_frame_per_block,
|
| 76 |
+
uniform_timestep=False
|
| 77 |
+
)
|
| 78 |
+
if self.args.i2v:
|
| 79 |
+
index[:, 0] = len(self.denoising_step_list) - 1
|
| 80 |
+
|
| 81 |
+
noisy_input = torch.gather(
|
| 82 |
+
ode_latent, dim=1,
|
| 83 |
+
index=index.reshape(batch_size, 1, num_frames, 1, 1, 1).expand(
|
| 84 |
+
-1, -1, -1, num_channels, height, width).to(self.device)
|
| 85 |
+
).squeeze(1)
|
| 86 |
+
|
| 87 |
+
timestep = self.denoising_step_list[index].to(self.device)
|
| 88 |
+
|
| 89 |
+
# if self.extra_noise_step > 0:
|
| 90 |
+
# random_timestep = torch.randint(0, self.extra_noise_step, [
|
| 91 |
+
# batch_size, num_frames], device=self.device, dtype=torch.long)
|
| 92 |
+
# perturbed_noisy_input = self.scheduler.add_noise(
|
| 93 |
+
# noisy_input.flatten(0, 1),
|
| 94 |
+
# torch.randn_like(noisy_input.flatten(0, 1)),
|
| 95 |
+
# random_timestep.flatten(0, 1)
|
| 96 |
+
# ).detach().unflatten(0, (batch_size, num_frames)).type_as(noisy_input)
|
| 97 |
+
|
| 98 |
+
# noisy_input[timestep == 0] = perturbed_noisy_input[timestep == 0]
|
| 99 |
+
|
| 100 |
+
return noisy_input, timestep
|
| 101 |
+
|
| 102 |
+
def generator_loss(self, ode_latent: torch.Tensor, conditional_dict: dict) -> Tuple[torch.Tensor, dict]:
|
| 103 |
+
"""
|
| 104 |
+
Generate image/videos from noisy latents and compute the ODE regression loss.
|
| 105 |
+
Input:
|
| 106 |
+
- ode_latent: a tensor containing the ODE latents [batch_size, num_denoising_steps, num_frames, num_channels, height, width].
|
| 107 |
+
They are ordered from most noisy to clean latents.
|
| 108 |
+
- conditional_dict: a dictionary containing the conditional information (e.g. text embeddings, image embeddings).
|
| 109 |
+
Output:
|
| 110 |
+
- loss: a scalar tensor representing the generator loss.
|
| 111 |
+
- log_dict: a dictionary containing additional information for loss timestep breakdown.
|
| 112 |
+
"""
|
| 113 |
+
# Step 1: Run generator on noisy latents
|
| 114 |
+
target_latent = ode_latent[:, -1]
|
| 115 |
+
|
| 116 |
+
noisy_input, timestep = self._prepare_generator_input(
|
| 117 |
+
ode_latent=ode_latent)
|
| 118 |
+
|
| 119 |
+
_, pred_image_or_video = self.generator(
|
| 120 |
+
noisy_image_or_video=noisy_input,
|
| 121 |
+
conditional_dict=conditional_dict,
|
| 122 |
+
timestep=timestep
|
| 123 |
+
)
|
| 124 |
+
|
| 125 |
+
# Step 2: Compute the regression loss
|
| 126 |
+
mask = timestep != 0
|
| 127 |
+
|
| 128 |
+
loss = F.mse_loss(
|
| 129 |
+
pred_image_or_video[mask], target_latent[mask], reduction="mean")
|
| 130 |
+
|
| 131 |
+
log_dict = {
|
| 132 |
+
"unnormalized_loss": F.mse_loss(pred_image_or_video, target_latent, reduction='none').mean(dim=[1, 2, 3, 4]).detach(),
|
| 133 |
+
"timestep": timestep.float().mean(dim=1).detach(),
|
| 134 |
+
"input": noisy_input.detach(),
|
| 135 |
+
"output": pred_image_or_video.detach(),
|
| 136 |
+
}
|
| 137 |
+
|
| 138 |
+
return loss, log_dict
|
model/predictor_v4.py
ADDED
|
@@ -0,0 +1,886 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Wan Predictor-v4 for skipped Self-Forcing denoising steps.
|
| 2 |
+
|
| 3 |
+
The Predictor is initialized from an already-loaded ``CausalWanModel``. It
|
| 4 |
+
keeps the Teacher patch/time/head modules frozen, trains two copied causal Wan
|
| 5 |
+
blocks, and predicts a residual over the same-chunk anchor hidden state.
|
| 6 |
+
|
| 7 |
+
Two history paths are supported:
|
| 8 |
+
|
| 9 |
+
* online F-P-P-F inference can pass the generator's existing KV caches;
|
| 10 |
+
* offline training can rebuild selected-layer history KV from clean-pass
|
| 11 |
+
self-attention prefeatures with :meth:`build_history_kv_cache`.
|
| 12 |
+
|
| 13 |
+
The ordinary ``state_dict`` API is intentionally unchanged. Use
|
| 14 |
+
``trainable_state_dict``/``checkpoint_dict`` for compact Predictor checkpoints
|
| 15 |
+
that omit frozen Teacher weights.
|
| 16 |
+
"""
|
| 17 |
+
|
| 18 |
+
from __future__ import annotations
|
| 19 |
+
|
| 20 |
+
import copy
|
| 21 |
+
import math
|
| 22 |
+
from collections import OrderedDict
|
| 23 |
+
from collections.abc import Mapping, Sequence
|
| 24 |
+
from dataclasses import asdict, dataclass
|
| 25 |
+
from typing import Any
|
| 26 |
+
|
| 27 |
+
import torch
|
| 28 |
+
from torch import nn
|
| 29 |
+
|
| 30 |
+
from wan.modules.causal_model import (
|
| 31 |
+
CausalWanAttentionBlock,
|
| 32 |
+
CausalWanModel,
|
| 33 |
+
causal_rope_apply,
|
| 34 |
+
)
|
| 35 |
+
from wan.modules.model import sinusoidal_embedding_1d
|
| 36 |
+
|
| 37 |
+
|
| 38 |
+
@dataclass(frozen=True)
|
| 39 |
+
class WanPredictorV4Config:
|
| 40 |
+
"""Serializable architecture metadata derived from the loaded Teacher."""
|
| 41 |
+
|
| 42 |
+
format_version: int
|
| 43 |
+
model_type: str
|
| 44 |
+
patch_size: tuple[int, int, int]
|
| 45 |
+
in_dim: int
|
| 46 |
+
dim: int
|
| 47 |
+
ffn_dim: int
|
| 48 |
+
freq_dim: int
|
| 49 |
+
out_dim: int
|
| 50 |
+
num_heads: int
|
| 51 |
+
num_layers: int
|
| 52 |
+
local_attn_size: int
|
| 53 |
+
sink_size: int
|
| 54 |
+
qk_norm: bool
|
| 55 |
+
cross_attn_norm: bool
|
| 56 |
+
eps: float
|
| 57 |
+
source_block_ids: tuple[int, int]
|
| 58 |
+
spatial_grid: tuple[int, int]
|
| 59 |
+
|
| 60 |
+
@property
|
| 61 |
+
def tokens_per_frame(self) -> int:
|
| 62 |
+
return math.prod(self.spatial_grid)
|
| 63 |
+
|
| 64 |
+
def to_dict(self) -> dict[str, Any]:
|
| 65 |
+
return asdict(self)
|
| 66 |
+
|
| 67 |
+
|
| 68 |
+
class TripleFeatureFusion(nn.Module):
|
| 69 |
+
"""Fuse target-latent, same-chunk anchor, and previous-chunk features."""
|
| 70 |
+
|
| 71 |
+
def __init__(self, dim: int, eps: float = 1e-6) -> None:
|
| 72 |
+
super().__init__()
|
| 73 |
+
self.current_norm = nn.LayerNorm(dim, eps=eps)
|
| 74 |
+
self.anchor_norm = nn.LayerNorm(dim, eps=eps)
|
| 75 |
+
self.previous_norm = nn.LayerNorm(dim, eps=eps)
|
| 76 |
+
self.mlp = nn.Sequential(
|
| 77 |
+
nn.Linear(3 * dim, 2 * dim),
|
| 78 |
+
nn.SiLU(),
|
| 79 |
+
nn.Linear(2 * dim, dim),
|
| 80 |
+
)
|
| 81 |
+
|
| 82 |
+
def forward(
|
| 83 |
+
self,
|
| 84 |
+
current: torch.Tensor,
|
| 85 |
+
anchor: torch.Tensor,
|
| 86 |
+
previous: torch.Tensor,
|
| 87 |
+
) -> torch.Tensor:
|
| 88 |
+
if current.shape != anchor.shape or current.shape != previous.shape:
|
| 89 |
+
raise ValueError(
|
| 90 |
+
"TripleFeatureFusion requires identical [B, L, D] shapes, got "
|
| 91 |
+
f"current={tuple(current.shape)}, anchor={tuple(anchor.shape)}, "
|
| 92 |
+
f"previous={tuple(previous.shape)}"
|
| 93 |
+
)
|
| 94 |
+
return self.mlp(
|
| 95 |
+
torch.cat(
|
| 96 |
+
(
|
| 97 |
+
self.current_norm(current),
|
| 98 |
+
self.anchor_norm(anchor),
|
| 99 |
+
self.previous_norm(previous),
|
| 100 |
+
),
|
| 101 |
+
dim=-1,
|
| 102 |
+
)
|
| 103 |
+
)
|
| 104 |
+
|
| 105 |
+
|
| 106 |
+
class _FrozenHistoryProjector(nn.Module):
|
| 107 |
+
"""Frozen copy of one Teacher self-attention K/V projection path."""
|
| 108 |
+
|
| 109 |
+
def __init__(self, teacher_block: CausalWanAttentionBlock) -> None:
|
| 110 |
+
super().__init__()
|
| 111 |
+
self.k = copy.deepcopy(teacher_block.self_attn.k)
|
| 112 |
+
self.v = copy.deepcopy(teacher_block.self_attn.v)
|
| 113 |
+
self.norm_k = copy.deepcopy(teacher_block.self_attn.norm_k)
|
| 114 |
+
self.requires_grad_(False)
|
| 115 |
+
|
| 116 |
+
def forward(
|
| 117 |
+
self,
|
| 118 |
+
self_attn_input: torch.Tensor,
|
| 119 |
+
*,
|
| 120 |
+
num_heads: int,
|
| 121 |
+
) -> tuple[torch.Tensor, torch.Tensor]:
|
| 122 |
+
batch, tokens, dim = self_attn_input.shape
|
| 123 |
+
if dim % num_heads:
|
| 124 |
+
raise ValueError(f"Hidden dim {dim} is not divisible by {num_heads} heads")
|
| 125 |
+
head_dim = dim // num_heads
|
| 126 |
+
key = self.norm_k(self.k(self_attn_input)).view(
|
| 127 |
+
batch, tokens, num_heads, head_dim
|
| 128 |
+
)
|
| 129 |
+
value = self.v(self_attn_input).view(
|
| 130 |
+
batch, tokens, num_heads, head_dim
|
| 131 |
+
)
|
| 132 |
+
return key, value
|
| 133 |
+
|
| 134 |
+
|
| 135 |
+
class SelfForcingPredictorV4(nn.Module):
|
| 136 |
+
"""Two-block Wan Predictor used for the middle denoising steps of F-P-P-F."""
|
| 137 |
+
|
| 138 |
+
requires_previous_chunk_hidden = True
|
| 139 |
+
uses_history_kv = True
|
| 140 |
+
uses_clean_prefeature = True
|
| 141 |
+
checkpoint_format_version = 1
|
| 142 |
+
|
| 143 |
+
def __init__(
|
| 144 |
+
self,
|
| 145 |
+
teacher_model: CausalWanModel,
|
| 146 |
+
*,
|
| 147 |
+
source_block_ids: tuple[int, int] = (1, 28),
|
| 148 |
+
spatial_grid: tuple[int, int] = (30, 52),
|
| 149 |
+
) -> None:
|
| 150 |
+
super().__init__()
|
| 151 |
+
teacher_model = self._unwrap_teacher(teacher_model)
|
| 152 |
+
if teacher_model.model_type != "t2v":
|
| 153 |
+
raise NotImplementedError("SelfForcingPredictorV4 currently supports Wan T2V")
|
| 154 |
+
if len(source_block_ids) != 2 or len(set(source_block_ids)) != 2:
|
| 155 |
+
raise ValueError("Predictor-v4 requires exactly two distinct source blocks")
|
| 156 |
+
if any(index < 0 or index >= len(teacher_model.blocks) for index in source_block_ids):
|
| 157 |
+
raise ValueError(
|
| 158 |
+
f"Invalid source blocks {source_block_ids} for "
|
| 159 |
+
f"{len(teacher_model.blocks)} Teacher blocks"
|
| 160 |
+
)
|
| 161 |
+
if len(spatial_grid) != 2 or any(int(size) <= 0 for size in spatial_grid):
|
| 162 |
+
raise ValueError(f"Invalid Predictor token spatial grid: {spatial_grid}")
|
| 163 |
+
|
| 164 |
+
first_self_attn = teacher_model.blocks[0].self_attn
|
| 165 |
+
self.predictor_config = WanPredictorV4Config(
|
| 166 |
+
format_version=self.checkpoint_format_version,
|
| 167 |
+
model_type=str(teacher_model.model_type),
|
| 168 |
+
patch_size=tuple(int(item) for item in teacher_model.patch_size),
|
| 169 |
+
in_dim=int(teacher_model.in_dim),
|
| 170 |
+
dim=int(teacher_model.dim),
|
| 171 |
+
ffn_dim=int(teacher_model.ffn_dim),
|
| 172 |
+
freq_dim=int(teacher_model.freq_dim),
|
| 173 |
+
out_dim=int(teacher_model.out_dim),
|
| 174 |
+
num_heads=int(teacher_model.num_heads),
|
| 175 |
+
num_layers=len(teacher_model.blocks),
|
| 176 |
+
local_attn_size=int(teacher_model.local_attn_size),
|
| 177 |
+
sink_size=int(first_self_attn.sink_size),
|
| 178 |
+
qk_norm=bool(teacher_model.qk_norm),
|
| 179 |
+
cross_attn_norm=bool(teacher_model.cross_attn_norm),
|
| 180 |
+
eps=float(teacher_model.eps),
|
| 181 |
+
source_block_ids=tuple(int(item) for item in source_block_ids),
|
| 182 |
+
spatial_grid=tuple(int(item) for item in spatial_grid),
|
| 183 |
+
)
|
| 184 |
+
cfg = self.predictor_config
|
| 185 |
+
|
| 186 |
+
# Frozen modules are copied rather than referenced so that calling
|
| 187 |
+
# Predictor.train()/to() cannot alter the loaded generator.
|
| 188 |
+
self.patch_embedding = copy.deepcopy(teacher_model.patch_embedding)
|
| 189 |
+
self.time_embedding = copy.deepcopy(teacher_model.time_embedding)
|
| 190 |
+
self.time_projection = copy.deepcopy(teacher_model.time_projection)
|
| 191 |
+
self.head = copy.deepcopy(teacher_model.head)
|
| 192 |
+
self.predictor_blocks = nn.ModuleList(
|
| 193 |
+
[copy.deepcopy(teacher_model.blocks[index]) for index in source_block_ids]
|
| 194 |
+
)
|
| 195 |
+
self.history_projectors = nn.ModuleDict(
|
| 196 |
+
{
|
| 197 |
+
str(index): _FrozenHistoryProjector(teacher_model.blocks[index])
|
| 198 |
+
for index in source_block_ids
|
| 199 |
+
}
|
| 200 |
+
)
|
| 201 |
+
|
| 202 |
+
self.feature_fusion = TripleFeatureFusion(cfg.dim, cfg.eps)
|
| 203 |
+
self.residual_out = nn.Linear(cfg.dim, cfg.dim)
|
| 204 |
+
|
| 205 |
+
self._freeze_teacher_modules()
|
| 206 |
+
self.predictor_blocks.requires_grad_(True)
|
| 207 |
+
# Text K/V come from the Teacher cross-attention cache. Predictor only
|
| 208 |
+
# executes the query/output side, so keep unused cache-building weights
|
| 209 |
+
# frozen and out of the optimizer/checkpoint.
|
| 210 |
+
for block in self.predictor_blocks:
|
| 211 |
+
block.cross_attn.k.requires_grad_(False)
|
| 212 |
+
block.cross_attn.v.requires_grad_(False)
|
| 213 |
+
block.cross_attn.norm_k.requires_grad_(False)
|
| 214 |
+
|
| 215 |
+
reference = teacher_model.patch_embedding.weight
|
| 216 |
+
self.feature_fusion.to(device=reference.device, dtype=reference.dtype)
|
| 217 |
+
self.residual_out.to(device=reference.device, dtype=reference.dtype)
|
| 218 |
+
nn.init.zeros_(self.residual_out.weight)
|
| 219 |
+
nn.init.zeros_(self.residual_out.bias)
|
| 220 |
+
|
| 221 |
+
# Match CausalWanModel: RoPE frequencies are runtime state rather than a
|
| 222 |
+
# persistent buffer, so compact checkpoints contain no derived table.
|
| 223 |
+
self._freqs = teacher_model.freqs.detach().clone()
|
| 224 |
+
|
| 225 |
+
@staticmethod
|
| 226 |
+
def _unwrap_teacher(model: Any) -> CausalWanModel:
|
| 227 |
+
current = model
|
| 228 |
+
visited: set[int] = set()
|
| 229 |
+
while id(current) not in visited:
|
| 230 |
+
visited.add(id(current))
|
| 231 |
+
if isinstance(current, CausalWanModel):
|
| 232 |
+
return current
|
| 233 |
+
wrapped = getattr(current, "module", None)
|
| 234 |
+
if wrapped is not None:
|
| 235 |
+
current = wrapped
|
| 236 |
+
continue
|
| 237 |
+
nested = getattr(current, "model", None)
|
| 238 |
+
if nested is not None:
|
| 239 |
+
current = nested
|
| 240 |
+
continue
|
| 241 |
+
break
|
| 242 |
+
raise TypeError(
|
| 243 |
+
"teacher_model must be CausalWanModel (normally generator.model), "
|
| 244 |
+
f"got {type(model)!r}"
|
| 245 |
+
)
|
| 246 |
+
|
| 247 |
+
@classmethod
|
| 248 |
+
def from_teacher(
|
| 249 |
+
cls,
|
| 250 |
+
teacher_model: CausalWanModel,
|
| 251 |
+
*,
|
| 252 |
+
source_block_ids: tuple[int, int] = (1, 28),
|
| 253 |
+
spatial_grid: tuple[int, int] = (30, 52),
|
| 254 |
+
) -> "SelfForcingPredictorV4":
|
| 255 |
+
"""Initialize all copied/frozen/trainable weights from a loaded Teacher."""
|
| 256 |
+
|
| 257 |
+
return cls(
|
| 258 |
+
teacher_model,
|
| 259 |
+
source_block_ids=source_block_ids,
|
| 260 |
+
spatial_grid=spatial_grid,
|
| 261 |
+
)
|
| 262 |
+
|
| 263 |
+
@property
|
| 264 |
+
def config_dict(self) -> dict[str, Any]:
|
| 265 |
+
return self.predictor_config.to_dict()
|
| 266 |
+
|
| 267 |
+
@property
|
| 268 |
+
def source_block_ids(self) -> tuple[int, int]:
|
| 269 |
+
return self.predictor_config.source_block_ids
|
| 270 |
+
|
| 271 |
+
def _freeze_teacher_modules(self) -> None:
|
| 272 |
+
for module in (
|
| 273 |
+
self.patch_embedding,
|
| 274 |
+
self.time_embedding,
|
| 275 |
+
self.time_projection,
|
| 276 |
+
self.head,
|
| 277 |
+
self.history_projectors,
|
| 278 |
+
):
|
| 279 |
+
module.requires_grad_(False)
|
| 280 |
+
module.eval()
|
| 281 |
+
|
| 282 |
+
@torch.no_grad()
|
| 283 |
+
def sync_frozen_from_teacher(
|
| 284 |
+
self,
|
| 285 |
+
teacher_model: CausalWanModel,
|
| 286 |
+
) -> None:
|
| 287 |
+
"""Refresh only the frozen Teacher-derived Predictor parameters.
|
| 288 |
+
|
| 289 |
+
Joint DMD changes the Full Generator after Predictor construction. A
|
| 290 |
+
compact Predictor checkpoint is reconstructed from that updated Full
|
| 291 |
+
model at inference time, so the frozen training-time copies must track
|
| 292 |
+
it as well. Predictor-owned trainable blocks/fusion are never
|
| 293 |
+
overwritten here.
|
| 294 |
+
"""
|
| 295 |
+
|
| 296 |
+
teacher_model = self._unwrap_teacher(teacher_model)
|
| 297 |
+
for destination, source in (
|
| 298 |
+
(self.patch_embedding, teacher_model.patch_embedding),
|
| 299 |
+
(self.time_embedding, teacher_model.time_embedding),
|
| 300 |
+
(self.time_projection, teacher_model.time_projection),
|
| 301 |
+
(self.head, teacher_model.head),
|
| 302 |
+
):
|
| 303 |
+
destination.load_state_dict(source.state_dict(), strict=True)
|
| 304 |
+
|
| 305 |
+
for position, source_id in enumerate(self.source_block_ids):
|
| 306 |
+
teacher_block = teacher_model.blocks[source_id]
|
| 307 |
+
while hasattr(teacher_block, "module"):
|
| 308 |
+
teacher_block = teacher_block.module
|
| 309 |
+
history = self.history_projectors[str(source_id)]
|
| 310 |
+
history.k.load_state_dict(
|
| 311 |
+
teacher_block.self_attn.k.state_dict(), strict=True
|
| 312 |
+
)
|
| 313 |
+
history.v.load_state_dict(
|
| 314 |
+
teacher_block.self_attn.v.state_dict(), strict=True
|
| 315 |
+
)
|
| 316 |
+
history.norm_k.load_state_dict(
|
| 317 |
+
teacher_block.self_attn.norm_k.state_dict(), strict=True
|
| 318 |
+
)
|
| 319 |
+
|
| 320 |
+
predictor_cross = self.predictor_blocks[position].cross_attn
|
| 321 |
+
teacher_cross = teacher_block.cross_attn
|
| 322 |
+
predictor_cross.k.load_state_dict(
|
| 323 |
+
teacher_cross.k.state_dict(), strict=True
|
| 324 |
+
)
|
| 325 |
+
predictor_cross.v.load_state_dict(
|
| 326 |
+
teacher_cross.v.state_dict(), strict=True
|
| 327 |
+
)
|
| 328 |
+
predictor_cross.norm_k.load_state_dict(
|
| 329 |
+
teacher_cross.norm_k.state_dict(), strict=True
|
| 330 |
+
)
|
| 331 |
+
|
| 332 |
+
self._freeze_teacher_modules()
|
| 333 |
+
for block in self.predictor_blocks:
|
| 334 |
+
block.cross_attn.k.requires_grad_(False)
|
| 335 |
+
block.cross_attn.v.requires_grad_(False)
|
| 336 |
+
block.cross_attn.norm_k.requires_grad_(False)
|
| 337 |
+
|
| 338 |
+
def train(self, mode: bool = True) -> "SelfForcingPredictorV4":
|
| 339 |
+
super().train(mode)
|
| 340 |
+
# Frozen layers have no stochastic operations today, but pinning their
|
| 341 |
+
# mode makes the intended boundary robust to future Wan changes.
|
| 342 |
+
for module in (
|
| 343 |
+
self.patch_embedding,
|
| 344 |
+
self.time_embedding,
|
| 345 |
+
self.time_projection,
|
| 346 |
+
self.head,
|
| 347 |
+
self.history_projectors,
|
| 348 |
+
):
|
| 349 |
+
module.eval()
|
| 350 |
+
return self
|
| 351 |
+
|
| 352 |
+
def _runtime_freqs(self, device: torch.device) -> torch.Tensor:
|
| 353 |
+
if self._freqs.device != device:
|
| 354 |
+
self._freqs = self._freqs.to(device)
|
| 355 |
+
return self._freqs
|
| 356 |
+
|
| 357 |
+
@staticmethod
|
| 358 |
+
def _scalar_int(value: int | torch.Tensor, name: str) -> int:
|
| 359 |
+
if torch.is_tensor(value):
|
| 360 |
+
if value.numel() != 1:
|
| 361 |
+
raise ValueError(f"{name} must be scalar, got shape {tuple(value.shape)}")
|
| 362 |
+
value = value.detach().item()
|
| 363 |
+
result = int(value)
|
| 364 |
+
if result < 0:
|
| 365 |
+
raise ValueError(f"{name} must be non-negative, got {result}")
|
| 366 |
+
return result
|
| 367 |
+
|
| 368 |
+
@staticmethod
|
| 369 |
+
def _start_values(
|
| 370 |
+
value: int | torch.Tensor,
|
| 371 |
+
*,
|
| 372 |
+
batch: int,
|
| 373 |
+
name: str,
|
| 374 |
+
) -> list[int]:
|
| 375 |
+
if torch.is_tensor(value):
|
| 376 |
+
values = [int(item) for item in value.detach().reshape(-1).cpu().tolist()]
|
| 377 |
+
else:
|
| 378 |
+
values = [int(value)]
|
| 379 |
+
if len(values) == 1:
|
| 380 |
+
values *= batch
|
| 381 |
+
if len(values) != batch:
|
| 382 |
+
raise ValueError(f"{name} has {len(values)} values for batch {batch}")
|
| 383 |
+
if any(item < 0 for item in values):
|
| 384 |
+
raise ValueError(f"{name} must contain non-negative frame indices")
|
| 385 |
+
return values
|
| 386 |
+
|
| 387 |
+
def _rope_history_key(
|
| 388 |
+
self,
|
| 389 |
+
key: torch.Tensor,
|
| 390 |
+
*,
|
| 391 |
+
start_frames: int | torch.Tensor,
|
| 392 |
+
) -> torch.Tensor:
|
| 393 |
+
cfg = self.predictor_config
|
| 394 |
+
batch, tokens = key.shape[:2]
|
| 395 |
+
if tokens % cfg.tokens_per_frame:
|
| 396 |
+
raise ValueError(
|
| 397 |
+
f"History tokens {tokens} are not divisible by "
|
| 398 |
+
f"{cfg.tokens_per_frame} tokens/frame"
|
| 399 |
+
)
|
| 400 |
+
frames = tokens // cfg.tokens_per_frame
|
| 401 |
+
starts = self._start_values(start_frames, batch=batch, name="start_frames")
|
| 402 |
+
freqs = self._runtime_freqs(key.device)
|
| 403 |
+
grid = torch.tensor(
|
| 404 |
+
[[frames, *cfg.spatial_grid]],
|
| 405 |
+
dtype=torch.long,
|
| 406 |
+
device=key.device,
|
| 407 |
+
)
|
| 408 |
+
if len(set(starts)) == 1:
|
| 409 |
+
return causal_rope_apply(
|
| 410 |
+
key,
|
| 411 |
+
grid.expand(batch, -1),
|
| 412 |
+
freqs,
|
| 413 |
+
start_frame=starts[0],
|
| 414 |
+
)
|
| 415 |
+
return torch.cat(
|
| 416 |
+
[
|
| 417 |
+
causal_rope_apply(
|
| 418 |
+
key[index : index + 1],
|
| 419 |
+
grid,
|
| 420 |
+
freqs,
|
| 421 |
+
start_frame=start,
|
| 422 |
+
)
|
| 423 |
+
for index, start in enumerate(starts)
|
| 424 |
+
],
|
| 425 |
+
dim=0,
|
| 426 |
+
)
|
| 427 |
+
|
| 428 |
+
def _project_history_part(
|
| 429 |
+
self,
|
| 430 |
+
block_id: int,
|
| 431 |
+
prefeature: torch.Tensor,
|
| 432 |
+
*,
|
| 433 |
+
start_frames: int | torch.Tensor,
|
| 434 |
+
) -> tuple[torch.Tensor, torch.Tensor]:
|
| 435 |
+
cfg = self.predictor_config
|
| 436 |
+
if prefeature.ndim != 3 or prefeature.shape[-1] != cfg.dim:
|
| 437 |
+
raise ValueError(
|
| 438 |
+
f"Block {block_id} prefeature must be [B, S, {cfg.dim}], got "
|
| 439 |
+
f"{tuple(prefeature.shape)}"
|
| 440 |
+
)
|
| 441 |
+
projector = self.history_projectors[str(block_id)]
|
| 442 |
+
projector_device = projector.k.weight.device
|
| 443 |
+
if prefeature.device != projector_device:
|
| 444 |
+
raise ValueError(
|
| 445 |
+
f"Block {block_id} prefeature is on {prefeature.device}, "
|
| 446 |
+
f"projector is on {projector_device}"
|
| 447 |
+
)
|
| 448 |
+
prefeature = prefeature.to(dtype=projector.k.weight.dtype)
|
| 449 |
+
# Clean-history tensors are fixed offline Teacher data. Avoid retaining
|
| 450 |
+
# a graph through several GiB of reconstructed cache.
|
| 451 |
+
with torch.no_grad():
|
| 452 |
+
key, value = projector(prefeature, num_heads=cfg.num_heads)
|
| 453 |
+
key = self._rope_history_key(key, start_frames=start_frames)
|
| 454 |
+
return key, value
|
| 455 |
+
|
| 456 |
+
def build_history_kv_cache(
|
| 457 |
+
self,
|
| 458 |
+
clean_prefeature_by_block: Mapping[
|
| 459 |
+
int | str, torch.Tensor | Sequence[torch.Tensor]
|
| 460 |
+
],
|
| 461 |
+
*,
|
| 462 |
+
current_start: int | torch.Tensor,
|
| 463 |
+
current_tokens: int | torch.Tensor,
|
| 464 |
+
start_frames: int | torch.Tensor | Sequence[int | torch.Tensor] = 0,
|
| 465 |
+
cache_capacity: int | None = None,
|
| 466 |
+
) -> dict[int, dict[str, torch.Tensor]]:
|
| 467 |
+
"""Rebuild selected-layer clean-history caches for Predictor training.
|
| 468 |
+
|
| 469 |
+
``clean_prefeature_by_block`` may contain one already-concatenated
|
| 470 |
+
``[B, S, D]`` tensor per block, or a sequence of chunk tensors. For a
|
| 471 |
+
sequence, ``start_frames`` can be the matching sequence ``0, 3, ...``.
|
| 472 |
+
``current_start`` is the global token offset used by Wan inference and
|
| 473 |
+
``current_tokens`` reserves the writable current-chunk cache region.
|
| 474 |
+
"""
|
| 475 |
+
|
| 476 |
+
current_start_int = self._scalar_int(current_start, "current_start")
|
| 477 |
+
current_tokens_int = self._scalar_int(current_tokens, "current_tokens")
|
| 478 |
+
if current_tokens_int == 0:
|
| 479 |
+
raise ValueError("current_tokens must be positive")
|
| 480 |
+
|
| 481 |
+
cfg = self.predictor_config
|
| 482 |
+
result: dict[int, dict[str, torch.Tensor]] = {}
|
| 483 |
+
expected_batch: int | None = None
|
| 484 |
+
expected_history_tokens: int | None = None
|
| 485 |
+
for block_id in self.source_block_ids:
|
| 486 |
+
value = clean_prefeature_by_block.get(block_id)
|
| 487 |
+
if value is None:
|
| 488 |
+
value = clean_prefeature_by_block.get(str(block_id))
|
| 489 |
+
if value is None:
|
| 490 |
+
raise ValueError(f"Missing clean prefeature for block {block_id}")
|
| 491 |
+
|
| 492 |
+
if torch.is_tensor(value):
|
| 493 |
+
if isinstance(start_frames, Sequence) and not torch.is_tensor(start_frames):
|
| 494 |
+
if len(start_frames) != 1:
|
| 495 |
+
raise ValueError(
|
| 496 |
+
"Already-concatenated prefeatures require one start_frames value"
|
| 497 |
+
)
|
| 498 |
+
part_start = start_frames[0]
|
| 499 |
+
else:
|
| 500 |
+
part_start = start_frames
|
| 501 |
+
keys, values = self._project_history_part(
|
| 502 |
+
block_id, value, start_frames=part_start
|
| 503 |
+
)
|
| 504 |
+
else:
|
| 505 |
+
parts = list(value)
|
| 506 |
+
if not parts:
|
| 507 |
+
raise ValueError(f"Block {block_id} has no history prefeatures")
|
| 508 |
+
if isinstance(start_frames, Sequence) and not torch.is_tensor(start_frames):
|
| 509 |
+
starts = list(start_frames)
|
| 510 |
+
if len(starts) != len(parts):
|
| 511 |
+
raise ValueError(
|
| 512 |
+
f"start_frames has {len(starts)} entries for "
|
| 513 |
+
f"{len(parts)} history chunks"
|
| 514 |
+
)
|
| 515 |
+
else:
|
| 516 |
+
starts = []
|
| 517 |
+
next_start: int | torch.Tensor = start_frames
|
| 518 |
+
for part in parts:
|
| 519 |
+
starts.append(next_start)
|
| 520 |
+
if torch.is_tensor(next_start) and next_start.numel() > 1:
|
| 521 |
+
next_start = next_start + (
|
| 522 |
+
part.shape[1] // self.predictor_config.tokens_per_frame
|
| 523 |
+
)
|
| 524 |
+
else:
|
| 525 |
+
next_start = self._scalar_int(next_start, "start_frames") + (
|
| 526 |
+
part.shape[1] // self.predictor_config.tokens_per_frame
|
| 527 |
+
)
|
| 528 |
+
projected = [
|
| 529 |
+
self._project_history_part(
|
| 530 |
+
block_id, part, start_frames=part_start
|
| 531 |
+
)
|
| 532 |
+
for part, part_start in zip(parts, starts)
|
| 533 |
+
]
|
| 534 |
+
keys = torch.cat([item[0] for item in projected], dim=1)
|
| 535 |
+
values = torch.cat([item[1] for item in projected], dim=1)
|
| 536 |
+
|
| 537 |
+
batch, history_tokens = keys.shape[:2]
|
| 538 |
+
if expected_batch is None:
|
| 539 |
+
expected_batch = batch
|
| 540 |
+
expected_history_tokens = history_tokens
|
| 541 |
+
elif batch != expected_batch or history_tokens != expected_history_tokens:
|
| 542 |
+
raise ValueError(
|
| 543 |
+
"Selected blocks must have the same history shape, got "
|
| 544 |
+
f"block {block_id}: batch={batch}, tokens={history_tokens}; "
|
| 545 |
+
f"expected batch={expected_batch}, tokens={expected_history_tokens}"
|
| 546 |
+
)
|
| 547 |
+
if history_tokens > current_start_int:
|
| 548 |
+
raise ValueError(
|
| 549 |
+
f"History has {history_tokens} tokens but current_start is "
|
| 550 |
+
f"{current_start_int}"
|
| 551 |
+
)
|
| 552 |
+
|
| 553 |
+
required_capacity = history_tokens + current_tokens_int
|
| 554 |
+
capacity = required_capacity if cache_capacity is None else int(cache_capacity)
|
| 555 |
+
if capacity < required_capacity:
|
| 556 |
+
raise ValueError(
|
| 557 |
+
f"cache_capacity {capacity} is smaller than required "
|
| 558 |
+
f"{required_capacity}"
|
| 559 |
+
)
|
| 560 |
+
cache_k = keys.new_zeros(
|
| 561 |
+
batch, capacity, cfg.num_heads, cfg.dim // cfg.num_heads
|
| 562 |
+
)
|
| 563 |
+
cache_v = values.new_zeros(
|
| 564 |
+
batch, capacity, cfg.num_heads, cfg.dim // cfg.num_heads
|
| 565 |
+
)
|
| 566 |
+
cache_k[:, :history_tokens].copy_(keys)
|
| 567 |
+
cache_v[:, :history_tokens].copy_(values)
|
| 568 |
+
result[block_id] = {
|
| 569 |
+
"k": cache_k,
|
| 570 |
+
"v": cache_v,
|
| 571 |
+
"global_end_index": torch.tensor(
|
| 572 |
+
[current_start_int], dtype=torch.long, device=keys.device
|
| 573 |
+
),
|
| 574 |
+
"local_end_index": torch.tensor(
|
| 575 |
+
[history_tokens], dtype=torch.long, device=keys.device
|
| 576 |
+
),
|
| 577 |
+
}
|
| 578 |
+
return result
|
| 579 |
+
|
| 580 |
+
def _select_cache(
|
| 581 |
+
self,
|
| 582 |
+
caches: Mapping[Any, Any] | Sequence[Any],
|
| 583 |
+
*,
|
| 584 |
+
source_id: int,
|
| 585 |
+
source_position: int,
|
| 586 |
+
name: str,
|
| 587 |
+
) -> Mapping[str, Any]:
|
| 588 |
+
if isinstance(caches, Mapping):
|
| 589 |
+
selected = caches.get(source_id)
|
| 590 |
+
if selected is None:
|
| 591 |
+
selected = caches.get(str(source_id))
|
| 592 |
+
else:
|
| 593 |
+
if len(caches) == self.predictor_config.num_layers:
|
| 594 |
+
selected = caches[source_id]
|
| 595 |
+
elif len(caches) == len(self.source_block_ids):
|
| 596 |
+
selected = caches[source_position]
|
| 597 |
+
else:
|
| 598 |
+
selected = None
|
| 599 |
+
if selected is None:
|
| 600 |
+
raise ValueError(f"{name} is missing source block {source_id}")
|
| 601 |
+
if not isinstance(selected, Mapping):
|
| 602 |
+
raise TypeError(f"{name}[{source_id}] must be a mapping")
|
| 603 |
+
return selected
|
| 604 |
+
|
| 605 |
+
def _selected_crossattn_cache(
|
| 606 |
+
self,
|
| 607 |
+
caches: Mapping[Any, Any] | Sequence[Any],
|
| 608 |
+
*,
|
| 609 |
+
source_id: int,
|
| 610 |
+
source_position: int,
|
| 611 |
+
) -> dict[str, Any]:
|
| 612 |
+
selected = self._select_cache(
|
| 613 |
+
caches,
|
| 614 |
+
source_id=source_id,
|
| 615 |
+
source_position=source_position,
|
| 616 |
+
name="crossattn_cache",
|
| 617 |
+
)
|
| 618 |
+
missing = {"k", "v"}.difference(selected)
|
| 619 |
+
if missing:
|
| 620 |
+
raise ValueError(
|
| 621 |
+
f"crossattn_cache block {source_id} is missing {sorted(missing)}"
|
| 622 |
+
)
|
| 623 |
+
if selected["k"].shape != selected["v"].shape:
|
| 624 |
+
raise ValueError(f"crossattn_cache block {source_id} K/V shape mismatch")
|
| 625 |
+
# Offline files contain K/V but need not serialize the runtime flag.
|
| 626 |
+
# A shallow wrapper avoids mutating the generator-owned dictionary.
|
| 627 |
+
return {**selected, "is_init": True}
|
| 628 |
+
|
| 629 |
+
def _time_condition(
|
| 630 |
+
self,
|
| 631 |
+
target_timestep: torch.Tensor,
|
| 632 |
+
reference: torch.Tensor,
|
| 633 |
+
) -> tuple[torch.Tensor, torch.Tensor]:
|
| 634 |
+
cfg = self.predictor_config
|
| 635 |
+
time_embedding = self.time_embedding(
|
| 636 |
+
sinusoidal_embedding_1d(
|
| 637 |
+
cfg.freq_dim, target_timestep.flatten()
|
| 638 |
+
).type_as(reference)
|
| 639 |
+
)
|
| 640 |
+
block_condition = self.time_projection(time_embedding).unflatten(
|
| 641 |
+
1, (6, cfg.dim)
|
| 642 |
+
).unflatten(0, target_timestep.shape)
|
| 643 |
+
head_condition = time_embedding.unflatten(
|
| 644 |
+
0, target_timestep.shape
|
| 645 |
+
).unsqueeze(2)
|
| 646 |
+
return block_condition, head_condition
|
| 647 |
+
|
| 648 |
+
def _unpatchify(
|
| 649 |
+
self,
|
| 650 |
+
tokens: torch.Tensor,
|
| 651 |
+
grid_sizes: torch.Tensor,
|
| 652 |
+
) -> torch.Tensor:
|
| 653 |
+
cfg = self.predictor_config
|
| 654 |
+
outputs = []
|
| 655 |
+
for sample, grid in zip(tokens, grid_sizes.tolist()):
|
| 656 |
+
sample = sample[: math.prod(grid)].view(
|
| 657 |
+
*grid, *cfg.patch_size, cfg.out_dim
|
| 658 |
+
)
|
| 659 |
+
# [f, h, w, p, q, r, c] -> [f, p, c, h, q, w, r] so the
|
| 660 |
+
# following reshape merges each grid axis with its patch axis.
|
| 661 |
+
sample = torch.einsum("fhwpqrc->fpchqwr", sample)
|
| 662 |
+
outputs.append(
|
| 663 |
+
sample.reshape(
|
| 664 |
+
grid[0] * cfg.patch_size[0],
|
| 665 |
+
cfg.out_dim,
|
| 666 |
+
grid[1] * cfg.patch_size[1],
|
| 667 |
+
grid[2] * cfg.patch_size[2],
|
| 668 |
+
)
|
| 669 |
+
)
|
| 670 |
+
return torch.stack(outputs)
|
| 671 |
+
|
| 672 |
+
def forward(
|
| 673 |
+
self,
|
| 674 |
+
*,
|
| 675 |
+
target_latent: torch.Tensor,
|
| 676 |
+
target_timestep: torch.Tensor,
|
| 677 |
+
anchor_hidden: torch.Tensor,
|
| 678 |
+
previous_chunk_hidden: torch.Tensor,
|
| 679 |
+
kv_cache: Mapping[Any, Any] | Sequence[Any],
|
| 680 |
+
crossattn_cache: Mapping[Any, Any] | Sequence[Any],
|
| 681 |
+
current_start: int | torch.Tensor,
|
| 682 |
+
) -> dict[str, torch.Tensor]:
|
| 683 |
+
"""Predict one skipped denoising step.
|
| 684 |
+
|
| 685 |
+
Args:
|
| 686 |
+
target_latent: Noisy target chunk in ``[B, F, C, H, W]`` layout.
|
| 687 |
+
target_timestep: Per-frame timestep tensor ``[B, F]``.
|
| 688 |
+
anchor_hidden: Same-chunk preceding-step final hidden ``[B, L, D]``.
|
| 689 |
+
previous_chunk_hidden: Previous-chunk same-step hidden ``[B, L, D]``.
|
| 690 |
+
kv_cache: Full 30-layer list or selected-layer mapping/list.
|
| 691 |
+
crossattn_cache: Full list or selected cached text K/V.
|
| 692 |
+
current_start: Current chunk's global token offset.
|
| 693 |
+
"""
|
| 694 |
+
|
| 695 |
+
cfg = self.predictor_config
|
| 696 |
+
if target_latent.ndim != 5:
|
| 697 |
+
raise ValueError(
|
| 698 |
+
f"target_latent must be [B, F, C, H, W], got {tuple(target_latent.shape)}"
|
| 699 |
+
)
|
| 700 |
+
batch, frames, channels, height, width = target_latent.shape
|
| 701 |
+
if channels != cfg.in_dim:
|
| 702 |
+
raise ValueError(f"target_latent channels {channels} != {cfg.in_dim}")
|
| 703 |
+
expected_timestep = (batch, frames // cfg.patch_size[0])
|
| 704 |
+
if tuple(target_timestep.shape) != expected_timestep:
|
| 705 |
+
raise ValueError(
|
| 706 |
+
f"target_timestep shape {tuple(target_timestep.shape)} != "
|
| 707 |
+
f"{expected_timestep}"
|
| 708 |
+
)
|
| 709 |
+
if target_timestep.device != target_latent.device:
|
| 710 |
+
raise ValueError("target_timestep and target_latent must share a device")
|
| 711 |
+
if target_latent.device != self.patch_embedding.weight.device:
|
| 712 |
+
raise ValueError(
|
| 713 |
+
f"target_latent is on {target_latent.device}, Predictor is on "
|
| 714 |
+
f"{self.patch_embedding.weight.device}"
|
| 715 |
+
)
|
| 716 |
+
|
| 717 |
+
latent_cf = target_latent.permute(0, 2, 1, 3, 4).to(
|
| 718 |
+
dtype=self.patch_embedding.weight.dtype
|
| 719 |
+
)
|
| 720 |
+
# Do not wrap frozen patch/time/head modules in no_grad: recursive
|
| 721 |
+
# rollout losses must still backpropagate to an earlier target latent.
|
| 722 |
+
current = self.patch_embedding(latent_cf)
|
| 723 |
+
grid_sizes = torch.tensor(
|
| 724 |
+
[current.shape[2:]] * batch,
|
| 725 |
+
dtype=torch.long,
|
| 726 |
+
device=current.device,
|
| 727 |
+
)
|
| 728 |
+
current = current.flatten(2).transpose(1, 2)
|
| 729 |
+
expected_hidden = (batch, current.shape[1], cfg.dim)
|
| 730 |
+
if tuple(anchor_hidden.shape) != expected_hidden:
|
| 731 |
+
raise ValueError(
|
| 732 |
+
f"anchor_hidden shape {tuple(anchor_hidden.shape)} != {expected_hidden}"
|
| 733 |
+
)
|
| 734 |
+
if tuple(previous_chunk_hidden.shape) != expected_hidden:
|
| 735 |
+
raise ValueError(
|
| 736 |
+
"previous_chunk_hidden shape "
|
| 737 |
+
f"{tuple(previous_chunk_hidden.shape)} != {expected_hidden}"
|
| 738 |
+
)
|
| 739 |
+
current = current.to(dtype=anchor_hidden.dtype)
|
| 740 |
+
hidden = self.feature_fusion(
|
| 741 |
+
current, anchor_hidden, previous_chunk_hidden
|
| 742 |
+
)
|
| 743 |
+
block_condition, head_condition = self._time_condition(
|
| 744 |
+
target_timestep, current
|
| 745 |
+
)
|
| 746 |
+
seq_lens = torch.full(
|
| 747 |
+
(batch,), current.shape[1], dtype=torch.long, device=current.device
|
| 748 |
+
)
|
| 749 |
+
current_start_int = self._scalar_int(current_start, "current_start")
|
| 750 |
+
freqs = self._runtime_freqs(current.device)
|
| 751 |
+
|
| 752 |
+
for position, (source_id, block) in enumerate(
|
| 753 |
+
zip(self.source_block_ids, self.predictor_blocks)
|
| 754 |
+
):
|
| 755 |
+
selected_kv = self._select_cache(
|
| 756 |
+
kv_cache,
|
| 757 |
+
source_id=source_id,
|
| 758 |
+
source_position=position,
|
| 759 |
+
name="kv_cache",
|
| 760 |
+
)
|
| 761 |
+
selected_cross = self._selected_crossattn_cache(
|
| 762 |
+
crossattn_cache,
|
| 763 |
+
source_id=source_id,
|
| 764 |
+
source_position=position,
|
| 765 |
+
)
|
| 766 |
+
hidden = block(
|
| 767 |
+
hidden,
|
| 768 |
+
e=block_condition,
|
| 769 |
+
seq_lens=seq_lens,
|
| 770 |
+
grid_sizes=grid_sizes,
|
| 771 |
+
freqs=freqs,
|
| 772 |
+
context=None,
|
| 773 |
+
context_lens=None,
|
| 774 |
+
block_mask=None,
|
| 775 |
+
kv_cache=selected_kv,
|
| 776 |
+
crossattn_cache=selected_cross,
|
| 777 |
+
current_start=current_start_int,
|
| 778 |
+
cache_start=current_start_int,
|
| 779 |
+
)
|
| 780 |
+
|
| 781 |
+
delta_hidden = self.residual_out(hidden)
|
| 782 |
+
pred_hidden = anchor_hidden + delta_hidden
|
| 783 |
+
pred_tokens = self.head(pred_hidden, head_condition)
|
| 784 |
+
pred_flow = self._unpatchify(pred_tokens, grid_sizes)
|
| 785 |
+
return {
|
| 786 |
+
"pred_hidden": pred_hidden,
|
| 787 |
+
"pred_flow": pred_flow,
|
| 788 |
+
"delta_hidden": delta_hidden,
|
| 789 |
+
}
|
| 790 |
+
|
| 791 |
+
def trainable_parameter_count(self) -> int:
|
| 792 |
+
return sum(
|
| 793 |
+
parameter.numel()
|
| 794 |
+
for parameter in self.parameters()
|
| 795 |
+
if parameter.requires_grad
|
| 796 |
+
)
|
| 797 |
+
|
| 798 |
+
def trainable_parameter_breakdown(self) -> dict[str, int]:
|
| 799 |
+
modules = {
|
| 800 |
+
"feature_fusion": self.feature_fusion,
|
| 801 |
+
"predictor_blocks": self.predictor_blocks,
|
| 802 |
+
"residual_out": self.residual_out,
|
| 803 |
+
}
|
| 804 |
+
return {
|
| 805 |
+
name: sum(
|
| 806 |
+
parameter.numel()
|
| 807 |
+
for parameter in module.parameters()
|
| 808 |
+
if parameter.requires_grad
|
| 809 |
+
)
|
| 810 |
+
for name, module in modules.items()
|
| 811 |
+
}
|
| 812 |
+
|
| 813 |
+
def trainable_state_dict(
|
| 814 |
+
self,
|
| 815 |
+
*,
|
| 816 |
+
keep_vars: bool = False,
|
| 817 |
+
) -> OrderedDict[str, torch.Tensor]:
|
| 818 |
+
"""Return only optimizer-owned parameters, suitable for safetensors."""
|
| 819 |
+
|
| 820 |
+
trainable = {
|
| 821 |
+
name for name, parameter in self.named_parameters()
|
| 822 |
+
if parameter.requires_grad
|
| 823 |
+
}
|
| 824 |
+
state = super().state_dict(keep_vars=keep_vars)
|
| 825 |
+
return OrderedDict(
|
| 826 |
+
(name, value) for name, value in state.items() if name in trainable
|
| 827 |
+
)
|
| 828 |
+
|
| 829 |
+
def load_trainable_state_dict(
|
| 830 |
+
self,
|
| 831 |
+
state_dict: Mapping[str, torch.Tensor],
|
| 832 |
+
*,
|
| 833 |
+
strict: bool = True,
|
| 834 |
+
) -> None:
|
| 835 |
+
"""Load a compact state into a fresh Predictor initialized from Teacher."""
|
| 836 |
+
|
| 837 |
+
expected = set(self.trainable_state_dict())
|
| 838 |
+
received = set(state_dict)
|
| 839 |
+
if strict:
|
| 840 |
+
missing = sorted(expected.difference(received))
|
| 841 |
+
unexpected = sorted(received.difference(expected))
|
| 842 |
+
if missing or unexpected:
|
| 843 |
+
raise RuntimeError(
|
| 844 |
+
"Predictor trainable checkpoint mismatch: "
|
| 845 |
+
f"missing={missing}, unexpected={unexpected}"
|
| 846 |
+
)
|
| 847 |
+
filtered = {
|
| 848 |
+
name: tensor for name, tensor in state_dict.items() if name in expected
|
| 849 |
+
}
|
| 850 |
+
self.load_state_dict(filtered, strict=False)
|
| 851 |
+
|
| 852 |
+
def checkpoint_dict(self) -> dict[str, Any]:
|
| 853 |
+
"""Build a compact torch-save payload with architecture metadata."""
|
| 854 |
+
|
| 855 |
+
return {
|
| 856 |
+
"format": "self_forcing_wan_predictor_v4",
|
| 857 |
+
"format_version": self.checkpoint_format_version,
|
| 858 |
+
"config": self.config_dict,
|
| 859 |
+
"trainable_state_dict": self.trainable_state_dict(),
|
| 860 |
+
}
|
| 861 |
+
|
| 862 |
+
def load_checkpoint_dict(
|
| 863 |
+
self,
|
| 864 |
+
checkpoint: Mapping[str, Any],
|
| 865 |
+
*,
|
| 866 |
+
strict: bool = True,
|
| 867 |
+
) -> None:
|
| 868 |
+
if checkpoint.get("format") != "self_forcing_wan_predictor_v4":
|
| 869 |
+
raise ValueError(f"Unsupported Predictor checkpoint: {checkpoint.get('format')}")
|
| 870 |
+
saved_config = dict(checkpoint.get("config", {}))
|
| 871 |
+
if strict and saved_config != self.config_dict:
|
| 872 |
+
raise ValueError(
|
| 873 |
+
"Predictor checkpoint config does not match the Teacher/config "
|
| 874 |
+
f"used for reconstruction: saved={saved_config}, current={self.config_dict}"
|
| 875 |
+
)
|
| 876 |
+
state = checkpoint.get("trainable_state_dict")
|
| 877 |
+
if not isinstance(state, Mapping):
|
| 878 |
+
raise ValueError("Predictor checkpoint has no trainable_state_dict")
|
| 879 |
+
self.load_trainable_state_dict(state, strict=strict)
|
| 880 |
+
|
| 881 |
+
|
| 882 |
+
__all__ = [
|
| 883 |
+
"SelfForcingPredictorV4",
|
| 884 |
+
"TripleFeatureFusion",
|
| 885 |
+
"WanPredictorV4Config",
|
| 886 |
+
]
|
model/sid.py
ADDED
|
@@ -0,0 +1,283 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from pipeline import SelfForcingTrainingPipeline
|
| 2 |
+
from typing import Optional, Tuple
|
| 3 |
+
import torch
|
| 4 |
+
|
| 5 |
+
from model.base import SelfForcingModel
|
| 6 |
+
|
| 7 |
+
|
| 8 |
+
class SiD(SelfForcingModel):
|
| 9 |
+
def __init__(self, args, device):
|
| 10 |
+
"""
|
| 11 |
+
Initialize the DMD (Distribution Matching Distillation) module.
|
| 12 |
+
This class is self-contained and compute generator and fake score losses
|
| 13 |
+
in the forward pass.
|
| 14 |
+
"""
|
| 15 |
+
super().__init__(args, device)
|
| 16 |
+
self.num_frame_per_block = getattr(args, "num_frame_per_block", 1)
|
| 17 |
+
|
| 18 |
+
if self.num_frame_per_block > 1:
|
| 19 |
+
self.generator.model.num_frame_per_block = self.num_frame_per_block
|
| 20 |
+
|
| 21 |
+
if args.gradient_checkpointing:
|
| 22 |
+
self.generator.enable_gradient_checkpointing()
|
| 23 |
+
self.fake_score.enable_gradient_checkpointing()
|
| 24 |
+
self.real_score.enable_gradient_checkpointing()
|
| 25 |
+
|
| 26 |
+
# this will be init later with fsdp-wrapped modules
|
| 27 |
+
self.inference_pipeline: SelfForcingTrainingPipeline = None
|
| 28 |
+
|
| 29 |
+
# Step 2: Initialize all dmd hyperparameters
|
| 30 |
+
self.num_train_timestep = args.num_train_timestep
|
| 31 |
+
self.min_step = int(0.02 * self.num_train_timestep)
|
| 32 |
+
self.max_step = int(0.98 * self.num_train_timestep)
|
| 33 |
+
if hasattr(args, "real_guidance_scale"):
|
| 34 |
+
self.real_guidance_scale = args.real_guidance_scale
|
| 35 |
+
else:
|
| 36 |
+
self.real_guidance_scale = args.guidance_scale
|
| 37 |
+
self.timestep_shift = getattr(args, "timestep_shift", 1.0)
|
| 38 |
+
self.sid_alpha = getattr(args, "sid_alpha", 1.0)
|
| 39 |
+
self.ts_schedule = getattr(args, "ts_schedule", True)
|
| 40 |
+
self.ts_schedule_max = getattr(args, "ts_schedule_max", False)
|
| 41 |
+
|
| 42 |
+
if getattr(self.scheduler, "alphas_cumprod", None) is not None:
|
| 43 |
+
self.scheduler.alphas_cumprod = self.scheduler.alphas_cumprod.to(device)
|
| 44 |
+
else:
|
| 45 |
+
self.scheduler.alphas_cumprod = None
|
| 46 |
+
|
| 47 |
+
def compute_distribution_matching_loss(
|
| 48 |
+
self,
|
| 49 |
+
image_or_video: torch.Tensor,
|
| 50 |
+
conditional_dict: dict,
|
| 51 |
+
unconditional_dict: dict,
|
| 52 |
+
gradient_mask: Optional[torch.Tensor] = None,
|
| 53 |
+
denoised_timestep_from: int = 0,
|
| 54 |
+
denoised_timestep_to: int = 0
|
| 55 |
+
) -> Tuple[torch.Tensor, dict]:
|
| 56 |
+
"""
|
| 57 |
+
Compute the DMD loss (eq 7 in https://arxiv.org/abs/2311.18828).
|
| 58 |
+
Input:
|
| 59 |
+
- image_or_video: a tensor with shape [B, F, C, H, W] where the number of frame is 1 for images.
|
| 60 |
+
- conditional_dict: a dictionary containing the conditional information (e.g. text embeddings, image embeddings).
|
| 61 |
+
- unconditional_dict: a dictionary containing the unconditional information (e.g. null/negative text embeddings, null/negative image embeddings).
|
| 62 |
+
- gradient_mask: a boolean tensor with the same shape as image_or_video indicating which pixels to compute loss .
|
| 63 |
+
Output:
|
| 64 |
+
- dmd_loss: a scalar tensor representing the DMD loss.
|
| 65 |
+
- dmd_log_dict: a dictionary containing the intermediate tensors for logging.
|
| 66 |
+
"""
|
| 67 |
+
original_latent = image_or_video
|
| 68 |
+
|
| 69 |
+
batch_size, num_frame = image_or_video.shape[:2]
|
| 70 |
+
|
| 71 |
+
# Step 1: Randomly sample timestep based on the given schedule and corresponding noise
|
| 72 |
+
min_timestep = denoised_timestep_to if self.ts_schedule and denoised_timestep_to is not None else self.min_score_timestep
|
| 73 |
+
max_timestep = denoised_timestep_from if self.ts_schedule_max and denoised_timestep_from is not None else self.num_train_timestep
|
| 74 |
+
timestep = self._get_timestep(
|
| 75 |
+
min_timestep,
|
| 76 |
+
max_timestep,
|
| 77 |
+
batch_size,
|
| 78 |
+
num_frame,
|
| 79 |
+
self.num_frame_per_block,
|
| 80 |
+
uniform_timestep=True
|
| 81 |
+
)
|
| 82 |
+
|
| 83 |
+
if self.timestep_shift > 1:
|
| 84 |
+
timestep = self.timestep_shift * \
|
| 85 |
+
(timestep / 1000) / \
|
| 86 |
+
(1 + (self.timestep_shift - 1) * (timestep / 1000)) * 1000
|
| 87 |
+
timestep = timestep.clamp(self.min_step, self.max_step)
|
| 88 |
+
|
| 89 |
+
noise = torch.randn_like(image_or_video)
|
| 90 |
+
noisy_latent = self.scheduler.add_noise(
|
| 91 |
+
image_or_video.flatten(0, 1),
|
| 92 |
+
noise.flatten(0, 1),
|
| 93 |
+
timestep.flatten(0, 1)
|
| 94 |
+
).unflatten(0, (batch_size, num_frame))
|
| 95 |
+
|
| 96 |
+
# Step 2: SiD (May be wrap it?)
|
| 97 |
+
noisy_image_or_video = noisy_latent
|
| 98 |
+
# Step 2.1: Compute the fake score
|
| 99 |
+
_, pred_fake_image = self.fake_score(
|
| 100 |
+
noisy_image_or_video=noisy_image_or_video,
|
| 101 |
+
conditional_dict=conditional_dict,
|
| 102 |
+
timestep=timestep
|
| 103 |
+
)
|
| 104 |
+
# Step 2.2: Compute the real score
|
| 105 |
+
# We compute the conditional and unconditional prediction
|
| 106 |
+
# and add them together to achieve cfg (https://arxiv.org/abs/2207.12598)
|
| 107 |
+
# NOTE: This step may cause OOM issue, which can be addressed by the CFG-free technique
|
| 108 |
+
|
| 109 |
+
_, pred_real_image_cond = self.real_score(
|
| 110 |
+
noisy_image_or_video=noisy_image_or_video,
|
| 111 |
+
conditional_dict=conditional_dict,
|
| 112 |
+
timestep=timestep
|
| 113 |
+
)
|
| 114 |
+
|
| 115 |
+
_, pred_real_image_uncond = self.real_score(
|
| 116 |
+
noisy_image_or_video=noisy_image_or_video,
|
| 117 |
+
conditional_dict=unconditional_dict,
|
| 118 |
+
timestep=timestep
|
| 119 |
+
)
|
| 120 |
+
|
| 121 |
+
pred_real_image = pred_real_image_cond + (
|
| 122 |
+
pred_real_image_cond - pred_real_image_uncond
|
| 123 |
+
) * self.real_guidance_scale
|
| 124 |
+
|
| 125 |
+
# Step 2.3: SiD Loss
|
| 126 |
+
# TODO: Add alpha
|
| 127 |
+
# TODO: Double?
|
| 128 |
+
sid_loss = (pred_real_image.double() - pred_fake_image.double()) * ((pred_real_image.double() - original_latent.double()) - self.sid_alpha * (pred_real_image.double() - pred_fake_image.double()))
|
| 129 |
+
|
| 130 |
+
# Step 2.4: Loss normalizer
|
| 131 |
+
with torch.no_grad():
|
| 132 |
+
p_real = (original_latent - pred_real_image)
|
| 133 |
+
normalizer = torch.abs(p_real).mean(dim=[1, 2, 3, 4], keepdim=True)
|
| 134 |
+
sid_loss = sid_loss / normalizer
|
| 135 |
+
|
| 136 |
+
sid_loss = torch.nan_to_num(sid_loss)
|
| 137 |
+
num_frame = sid_loss.shape[1]
|
| 138 |
+
sid_loss = sid_loss.mean()
|
| 139 |
+
|
| 140 |
+
sid_log_dict = {
|
| 141 |
+
"dmdtrain_gradient_norm": torch.zeros_like(sid_loss),
|
| 142 |
+
"timestep": timestep.detach()
|
| 143 |
+
}
|
| 144 |
+
|
| 145 |
+
return sid_loss, sid_log_dict
|
| 146 |
+
|
| 147 |
+
def generator_loss(
|
| 148 |
+
self,
|
| 149 |
+
image_or_video_shape,
|
| 150 |
+
conditional_dict: dict,
|
| 151 |
+
unconditional_dict: dict,
|
| 152 |
+
clean_latent: torch.Tensor,
|
| 153 |
+
initial_latent: torch.Tensor = None
|
| 154 |
+
) -> Tuple[torch.Tensor, dict]:
|
| 155 |
+
"""
|
| 156 |
+
Generate image/videos from noise and compute the DMD loss.
|
| 157 |
+
The noisy input to the generator is backward simulated.
|
| 158 |
+
This removes the need of any datasets during distillation.
|
| 159 |
+
See Sec 4.5 of the DMD2 paper (https://arxiv.org/abs/2405.14867) for details.
|
| 160 |
+
Input:
|
| 161 |
+
- image_or_video_shape: a list containing the shape of the image or video [B, F, C, H, W].
|
| 162 |
+
- conditional_dict: a dictionary containing the conditional information (e.g. text embeddings, image embeddings).
|
| 163 |
+
- unconditional_dict: a dictionary containing the unconditional information (e.g. null/negative text embeddings, null/negative image embeddings).
|
| 164 |
+
- clean_latent: a tensor containing the clean latents [B, F, C, H, W]. Need to be passed when no backward simulation is used.
|
| 165 |
+
Output:
|
| 166 |
+
- loss: a scalar tensor representing the generator loss.
|
| 167 |
+
- generator_log_dict: a dictionary containing the intermediate tensors for logging.
|
| 168 |
+
"""
|
| 169 |
+
# Step 1: Unroll generator to obtain fake videos
|
| 170 |
+
pred_image, gradient_mask, denoised_timestep_from, denoised_timestep_to = self._run_generator(
|
| 171 |
+
image_or_video_shape=image_or_video_shape,
|
| 172 |
+
conditional_dict=conditional_dict,
|
| 173 |
+
initial_latent=initial_latent
|
| 174 |
+
)
|
| 175 |
+
|
| 176 |
+
# Step 2: Compute the DMD loss
|
| 177 |
+
dmd_loss, dmd_log_dict = self.compute_distribution_matching_loss(
|
| 178 |
+
image_or_video=pred_image,
|
| 179 |
+
conditional_dict=conditional_dict,
|
| 180 |
+
unconditional_dict=unconditional_dict,
|
| 181 |
+
gradient_mask=gradient_mask,
|
| 182 |
+
denoised_timestep_from=denoised_timestep_from,
|
| 183 |
+
denoised_timestep_to=denoised_timestep_to
|
| 184 |
+
)
|
| 185 |
+
|
| 186 |
+
return dmd_loss, dmd_log_dict
|
| 187 |
+
|
| 188 |
+
def critic_loss(
|
| 189 |
+
self,
|
| 190 |
+
image_or_video_shape,
|
| 191 |
+
conditional_dict: dict,
|
| 192 |
+
unconditional_dict: dict,
|
| 193 |
+
clean_latent: torch.Tensor,
|
| 194 |
+
initial_latent: torch.Tensor = None
|
| 195 |
+
) -> Tuple[torch.Tensor, dict]:
|
| 196 |
+
"""
|
| 197 |
+
Generate image/videos from noise and train the critic with generated samples.
|
| 198 |
+
The noisy input to the generator is backward simulated.
|
| 199 |
+
This removes the need of any datasets during distillation.
|
| 200 |
+
See Sec 4.5 of the DMD2 paper (https://arxiv.org/abs/2405.14867) for details.
|
| 201 |
+
Input:
|
| 202 |
+
- image_or_video_shape: a list containing the shape of the image or video [B, F, C, H, W].
|
| 203 |
+
- conditional_dict: a dictionary containing the conditional information (e.g. text embeddings, image embeddings).
|
| 204 |
+
- unconditional_dict: a dictionary containing the unconditional information (e.g. null/negative text embeddings, null/negative image embeddings).
|
| 205 |
+
- clean_latent: a tensor containing the clean latents [B, F, C, H, W]. Need to be passed when no backward simulation is used.
|
| 206 |
+
Output:
|
| 207 |
+
- loss: a scalar tensor representing the generator loss.
|
| 208 |
+
- critic_log_dict: a dictionary containing the intermediate tensors for logging.
|
| 209 |
+
"""
|
| 210 |
+
|
| 211 |
+
# Step 1: Run generator on backward simulated noisy input
|
| 212 |
+
with torch.no_grad():
|
| 213 |
+
generated_image, _, denoised_timestep_from, denoised_timestep_to = self._run_generator(
|
| 214 |
+
image_or_video_shape=image_or_video_shape,
|
| 215 |
+
conditional_dict=conditional_dict,
|
| 216 |
+
initial_latent=initial_latent
|
| 217 |
+
)
|
| 218 |
+
|
| 219 |
+
# Step 2: Compute the fake prediction
|
| 220 |
+
min_timestep = denoised_timestep_to if self.ts_schedule and denoised_timestep_to is not None else self.min_score_timestep
|
| 221 |
+
max_timestep = denoised_timestep_from if self.ts_schedule_max and denoised_timestep_from is not None else self.num_train_timestep
|
| 222 |
+
critic_timestep = self._get_timestep(
|
| 223 |
+
min_timestep,
|
| 224 |
+
max_timestep,
|
| 225 |
+
image_or_video_shape[0],
|
| 226 |
+
image_or_video_shape[1],
|
| 227 |
+
self.num_frame_per_block,
|
| 228 |
+
uniform_timestep=True
|
| 229 |
+
)
|
| 230 |
+
|
| 231 |
+
if self.timestep_shift > 1:
|
| 232 |
+
critic_timestep = self.timestep_shift * \
|
| 233 |
+
(critic_timestep / 1000) / (1 + (self.timestep_shift - 1) * (critic_timestep / 1000)) * 1000
|
| 234 |
+
|
| 235 |
+
critic_timestep = critic_timestep.clamp(self.min_step, self.max_step)
|
| 236 |
+
|
| 237 |
+
critic_noise = torch.randn_like(generated_image)
|
| 238 |
+
noisy_generated_image = self.scheduler.add_noise(
|
| 239 |
+
generated_image.flatten(0, 1),
|
| 240 |
+
critic_noise.flatten(0, 1),
|
| 241 |
+
critic_timestep.flatten(0, 1)
|
| 242 |
+
).unflatten(0, image_or_video_shape[:2])
|
| 243 |
+
|
| 244 |
+
_, pred_fake_image = self.fake_score(
|
| 245 |
+
noisy_image_or_video=noisy_generated_image,
|
| 246 |
+
conditional_dict=conditional_dict,
|
| 247 |
+
timestep=critic_timestep
|
| 248 |
+
)
|
| 249 |
+
|
| 250 |
+
# Step 3: Compute the denoising loss for the fake critic
|
| 251 |
+
if self.args.denoising_loss_type == "flow":
|
| 252 |
+
from utils.wan_wrapper import WanDiffusionWrapper
|
| 253 |
+
flow_pred = WanDiffusionWrapper._convert_x0_to_flow_pred(
|
| 254 |
+
scheduler=self.scheduler,
|
| 255 |
+
x0_pred=pred_fake_image.flatten(0, 1),
|
| 256 |
+
xt=noisy_generated_image.flatten(0, 1),
|
| 257 |
+
timestep=critic_timestep.flatten(0, 1)
|
| 258 |
+
)
|
| 259 |
+
pred_fake_noise = None
|
| 260 |
+
else:
|
| 261 |
+
flow_pred = None
|
| 262 |
+
pred_fake_noise = self.scheduler.convert_x0_to_noise(
|
| 263 |
+
x0=pred_fake_image.flatten(0, 1),
|
| 264 |
+
xt=noisy_generated_image.flatten(0, 1),
|
| 265 |
+
timestep=critic_timestep.flatten(0, 1)
|
| 266 |
+
).unflatten(0, image_or_video_shape[:2])
|
| 267 |
+
|
| 268 |
+
denoising_loss = self.denoising_loss_func(
|
| 269 |
+
x=generated_image.flatten(0, 1),
|
| 270 |
+
x_pred=pred_fake_image.flatten(0, 1),
|
| 271 |
+
noise=critic_noise.flatten(0, 1),
|
| 272 |
+
noise_pred=pred_fake_noise,
|
| 273 |
+
alphas_cumprod=self.scheduler.alphas_cumprod,
|
| 274 |
+
timestep=critic_timestep.flatten(0, 1),
|
| 275 |
+
flow_pred=flow_pred
|
| 276 |
+
)
|
| 277 |
+
|
| 278 |
+
# Step 5: Debugging Log
|
| 279 |
+
critic_log_dict = {
|
| 280 |
+
"critic_timestep": critic_timestep.detach()
|
| 281 |
+
}
|
| 282 |
+
|
| 283 |
+
return denoising_loss, critic_log_dict
|
predictor_training/__init__.py
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Offline Predictor-v4 training utilities."""
|
| 2 |
+
|
| 3 |
+
from .dataset import (
|
| 4 |
+
SUPERVISION_PAIRS,
|
| 5 |
+
PredictorV4PairDataset,
|
| 6 |
+
move_batch_to_device,
|
| 7 |
+
predictor_v4_collate,
|
| 8 |
+
)
|
| 9 |
+
from .sampler import DistributedContextBucketBatchSampler
|
| 10 |
+
from .trajectory_dataset import (
|
| 11 |
+
PredictorV4TrajectoryDataset,
|
| 12 |
+
load_offline_ffff_target,
|
| 13 |
+
trajectory_collate,
|
| 14 |
+
)
|
| 15 |
+
|
| 16 |
+
__all__ = [
|
| 17 |
+
"SUPERVISION_PAIRS",
|
| 18 |
+
"PredictorV4PairDataset",
|
| 19 |
+
"DistributedContextBucketBatchSampler",
|
| 20 |
+
"move_batch_to_device",
|
| 21 |
+
"predictor_v4_collate",
|
| 22 |
+
"PredictorV4TrajectoryDataset",
|
| 23 |
+
"load_offline_ffff_target",
|
| 24 |
+
"trajectory_collate",
|
| 25 |
+
]
|
predictor_training/__pycache__/__init__.cpython-310.pyc
ADDED
|
Binary file (653 Bytes). View file
|
|
|
predictor_training/__pycache__/cache.cpython-310.pyc
ADDED
|
Binary file (917 Bytes). View file
|
|
|
predictor_training/__pycache__/checkpoint.cpython-310.pyc
ADDED
|
Binary file (3.54 kB). View file
|
|
|
predictor_training/__pycache__/dataset.cpython-310.pyc
ADDED
|
Binary file (12.8 kB). View file
|
|
|
predictor_training/__pycache__/rollout_cache.cpython-310.pyc
ADDED
|
Binary file (3.04 kB). View file
|
|
|
predictor_training/__pycache__/sampler.cpython-310.pyc
ADDED
|
Binary file (3.39 kB). View file
|
|
|
predictor_training/__pycache__/trajectory_dataset.cpython-310.pyc
ADDED
|
Binary file (4.28 kB). View file
|
|
|
predictor_training/cache.py
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Small cache adapters for offline Predictor-v4 training."""
|
| 2 |
+
|
| 3 |
+
from __future__ import annotations
|
| 4 |
+
|
| 5 |
+
from typing import Mapping
|
| 6 |
+
|
| 7 |
+
import torch
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
def build_cross_attention_cache(
|
| 11 |
+
text_kv: Mapping[int, Mapping[str, torch.Tensor]],
|
| 12 |
+
source_block_ids: tuple[int, ...],
|
| 13 |
+
) -> dict[int, dict[str, torch.Tensor | bool]]:
|
| 14 |
+
"""Wrap saved Teacher text K/V in Wan's initialized-cache structure."""
|
| 15 |
+
return {
|
| 16 |
+
int(block_id): {
|
| 17 |
+
"k": text_kv[int(block_id)]["k"],
|
| 18 |
+
"v": text_kv[int(block_id)]["v"],
|
| 19 |
+
"is_init": True,
|
| 20 |
+
}
|
| 21 |
+
for block_id in source_block_ids
|
| 22 |
+
}
|
predictor_training/checkpoint.py
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Atomic Predictor-v4 inference and resumable training checkpoints."""
|
| 2 |
+
|
| 3 |
+
from __future__ import annotations
|
| 4 |
+
|
| 5 |
+
import json
|
| 6 |
+
import os
|
| 7 |
+
import random
|
| 8 |
+
from pathlib import Path
|
| 9 |
+
from typing import Any
|
| 10 |
+
|
| 11 |
+
import torch
|
| 12 |
+
from safetensors.torch import load_file, save_file
|
| 13 |
+
|
| 14 |
+
|
| 15 |
+
def unwrap_model(model: torch.nn.Module) -> torch.nn.Module:
|
| 16 |
+
return model.module if hasattr(model, "module") else model
|
| 17 |
+
|
| 18 |
+
|
| 19 |
+
def trainable_state_dict(
|
| 20 |
+
model: torch.nn.Module,
|
| 21 |
+
*,
|
| 22 |
+
floating_dtype: torch.dtype | None = None,
|
| 23 |
+
) -> dict[str, torch.Tensor]:
|
| 24 |
+
model = unwrap_model(model)
|
| 25 |
+
trainable_names = {
|
| 26 |
+
name for name, parameter in model.named_parameters() if parameter.requires_grad
|
| 27 |
+
}
|
| 28 |
+
return {
|
| 29 |
+
name: tensor.detach()
|
| 30 |
+
.to(
|
| 31 |
+
device="cpu",
|
| 32 |
+
dtype=(
|
| 33 |
+
floating_dtype
|
| 34 |
+
if floating_dtype is not None and tensor.is_floating_point()
|
| 35 |
+
else tensor.dtype
|
| 36 |
+
),
|
| 37 |
+
)
|
| 38 |
+
.contiguous()
|
| 39 |
+
for name, tensor in model.state_dict().items()
|
| 40 |
+
if name in trainable_names
|
| 41 |
+
}
|
| 42 |
+
|
| 43 |
+
|
| 44 |
+
def save_predictor_weights(
|
| 45 |
+
model: torch.nn.Module,
|
| 46 |
+
path: str | Path,
|
| 47 |
+
*,
|
| 48 |
+
metadata: dict[str, Any],
|
| 49 |
+
floating_dtype: torch.dtype = torch.bfloat16,
|
| 50 |
+
) -> Path:
|
| 51 |
+
path = Path(path)
|
| 52 |
+
path.parent.mkdir(parents=True, exist_ok=True)
|
| 53 |
+
temporary = path.with_suffix(path.suffix + f".tmp.{os.getpid()}")
|
| 54 |
+
save_file(
|
| 55 |
+
trainable_state_dict(model, floating_dtype=floating_dtype),
|
| 56 |
+
str(temporary),
|
| 57 |
+
metadata={
|
| 58 |
+
"format": "self_forcing_predictor_v4",
|
| 59 |
+
"config": json.dumps(metadata, ensure_ascii=False, sort_keys=True),
|
| 60 |
+
},
|
| 61 |
+
)
|
| 62 |
+
os.replace(temporary, path)
|
| 63 |
+
return path
|
| 64 |
+
|
| 65 |
+
|
| 66 |
+
def load_predictor_weights(model: torch.nn.Module, path: str | Path) -> None:
|
| 67 |
+
state = load_file(str(path), device="cpu")
|
| 68 |
+
result = unwrap_model(model).load_state_dict(state, strict=False)
|
| 69 |
+
trainable = {
|
| 70 |
+
name
|
| 71 |
+
for name, parameter in unwrap_model(model).named_parameters()
|
| 72 |
+
if parameter.requires_grad
|
| 73 |
+
}
|
| 74 |
+
missing_trainable = sorted(trainable.intersection(result.missing_keys))
|
| 75 |
+
if result.unexpected_keys or missing_trainable:
|
| 76 |
+
raise RuntimeError(
|
| 77 |
+
"Predictor weight mismatch: "
|
| 78 |
+
f"unexpected={result.unexpected_keys}, "
|
| 79 |
+
f"missing_trainable={missing_trainable}"
|
| 80 |
+
)
|
| 81 |
+
|
| 82 |
+
|
| 83 |
+
def atomic_torch_save(payload: dict[str, Any], path: str | Path) -> Path:
|
| 84 |
+
path = Path(path)
|
| 85 |
+
path.parent.mkdir(parents=True, exist_ok=True)
|
| 86 |
+
temporary = path.with_suffix(path.suffix + f".tmp.{os.getpid()}")
|
| 87 |
+
torch.save(payload, temporary)
|
| 88 |
+
os.replace(temporary, path)
|
| 89 |
+
return path
|
| 90 |
+
|
| 91 |
+
|
| 92 |
+
def capture_rng_state() -> dict[str, Any]:
|
| 93 |
+
return {
|
| 94 |
+
"python": random.getstate(),
|
| 95 |
+
"torch_cpu": torch.get_rng_state(),
|
| 96 |
+
"torch_cuda": torch.cuda.get_rng_state(),
|
| 97 |
+
}
|
| 98 |
+
|
| 99 |
+
|
| 100 |
+
def restore_rng_state(state: dict[str, Any]) -> None:
|
| 101 |
+
random.setstate(state["python"])
|
| 102 |
+
torch.set_rng_state(state["torch_cpu"])
|
| 103 |
+
torch.cuda.set_rng_state(state["torch_cuda"])
|
predictor_training/dataset.py
ADDED
|
@@ -0,0 +1,364 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Manifest-backed offline dataset for the three Predictor-v4 transitions.
|
| 2 |
+
|
| 3 |
+
One manifest record represents one temporal chunk. This dataset expands every
|
| 4 |
+
usable record into the adjacent denoising pairs 0->1, 1->2 and 2->3. Chunk
|
| 5 |
+
zero is intentionally excluded because v4 conditions on the preceding chunk.
|
| 6 |
+
"""
|
| 7 |
+
|
| 8 |
+
from __future__ import annotations
|
| 9 |
+
|
| 10 |
+
import json
|
| 11 |
+
from functools import lru_cache
|
| 12 |
+
from pathlib import Path
|
| 13 |
+
from typing import Any, Iterable, Mapping
|
| 14 |
+
|
| 15 |
+
import torch
|
| 16 |
+
from safetensors import safe_open
|
| 17 |
+
from torch.utils.data import Dataset
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
SUPERVISION_PAIRS = ((0, 1), (1, 2), (2, 3))
|
| 21 |
+
SCHEMA_VERSION = "self_forcing_predictor_v4_bf16_v1"
|
| 22 |
+
FRAMES_PER_CHUNK = 3
|
| 23 |
+
|
| 24 |
+
|
| 25 |
+
def _resolve(root: Path, value: str | Path) -> Path:
|
| 26 |
+
path = Path(value)
|
| 27 |
+
return path if path.is_absolute() else root / path
|
| 28 |
+
|
| 29 |
+
|
| 30 |
+
def _load_selected(path: Path, names: Iterable[str]) -> dict[str, torch.Tensor]:
|
| 31 |
+
if not path.is_file():
|
| 32 |
+
raise FileNotFoundError(path)
|
| 33 |
+
with safe_open(str(path), framework="pt", device="cpu") as handle:
|
| 34 |
+
available = set(handle.keys())
|
| 35 |
+
missing = set(names).difference(available)
|
| 36 |
+
if missing:
|
| 37 |
+
raise KeyError(f"{path} is missing tensors {sorted(missing)}")
|
| 38 |
+
return {name: handle.get_tensor(name) for name in names}
|
| 39 |
+
|
| 40 |
+
|
| 41 |
+
def _load_clean_prefeature(
|
| 42 |
+
path: Path,
|
| 43 |
+
candidates: Iterable[str],
|
| 44 |
+
*,
|
| 45 |
+
expected_start_frame: int,
|
| 46 |
+
) -> torch.Tensor:
|
| 47 |
+
with safe_open(str(path), framework="pt", device="cpu") as handle:
|
| 48 |
+
available = set(handle.keys())
|
| 49 |
+
for name in candidates:
|
| 50 |
+
if name in available:
|
| 51 |
+
feature = handle.get_tensor(name)
|
| 52 |
+
break
|
| 53 |
+
else:
|
| 54 |
+
raise KeyError(
|
| 55 |
+
f"{path} has none of the expected tensors {tuple(candidates)}"
|
| 56 |
+
)
|
| 57 |
+
if "start_frame" in available:
|
| 58 |
+
actual_start = int(handle.get_tensor("start_frame").item())
|
| 59 |
+
if actual_start != expected_start_frame:
|
| 60 |
+
raise ValueError(
|
| 61 |
+
f"{path} starts at frame {actual_start}, expected "
|
| 62 |
+
f"{expected_start_frame}; history files are not ordered"
|
| 63 |
+
)
|
| 64 |
+
if "num_frames" in available:
|
| 65 |
+
actual_frames = int(handle.get_tensor("num_frames").item())
|
| 66 |
+
if actual_frames != FRAMES_PER_CHUNK:
|
| 67 |
+
raise ValueError(
|
| 68 |
+
f"{path} contains {actual_frames} frames, expected "
|
| 69 |
+
f"{FRAMES_PER_CHUNK}"
|
| 70 |
+
)
|
| 71 |
+
return feature
|
| 72 |
+
|
| 73 |
+
|
| 74 |
+
def _block_entry(mapping: Mapping[Any, Any], block_id: int) -> Any:
|
| 75 |
+
for key in (str(block_id), block_id, f"block_{block_id}", f"block_{block_id:02d}"):
|
| 76 |
+
if key in mapping:
|
| 77 |
+
return mapping[key]
|
| 78 |
+
raise KeyError(f"No prefeature entry for block {block_id}")
|
| 79 |
+
|
| 80 |
+
|
| 81 |
+
def _as_path_list(entry: Any) -> list[str]:
|
| 82 |
+
if isinstance(entry, (str, Path)):
|
| 83 |
+
return [str(entry)]
|
| 84 |
+
if isinstance(entry, Mapping):
|
| 85 |
+
# Builders may use {"files": [...]} or {"file": "..."}.
|
| 86 |
+
for key in ("files", "paths", "history", "file", "path"):
|
| 87 |
+
if key in entry:
|
| 88 |
+
return _as_path_list(entry[key])
|
| 89 |
+
if isinstance(entry, (list, tuple)):
|
| 90 |
+
return [str(value) for value in entry]
|
| 91 |
+
raise TypeError(f"Unsupported prefeature file entry: {entry!r}")
|
| 92 |
+
|
| 93 |
+
|
| 94 |
+
def _prefeature_names(block_id: int) -> tuple[str, ...]:
|
| 95 |
+
return (
|
| 96 |
+
"self_attn_input",
|
| 97 |
+
"clean_prefeature",
|
| 98 |
+
"prefeature",
|
| 99 |
+
"img_modulated",
|
| 100 |
+
f"block_{block_id}_self_attn_input",
|
| 101 |
+
f"block_{block_id:02d}_self_attn_input",
|
| 102 |
+
)
|
| 103 |
+
|
| 104 |
+
|
| 105 |
+
class PredictorV4PairDataset(Dataset):
|
| 106 |
+
"""Read safetensors records and expose adjacent-step supervision pairs."""
|
| 107 |
+
|
| 108 |
+
PAIRS = SUPERVISION_PAIRS
|
| 109 |
+
|
| 110 |
+
def __init__(
|
| 111 |
+
self,
|
| 112 |
+
manifest_path: str | Path,
|
| 113 |
+
*,
|
| 114 |
+
source_block_ids: tuple[int, ...] = (1, 28),
|
| 115 |
+
max_records: int | None = None,
|
| 116 |
+
require_previous_chunk: bool = True,
|
| 117 |
+
) -> None:
|
| 118 |
+
self.manifest_path = Path(manifest_path).resolve()
|
| 119 |
+
self.root = self.manifest_path.parent
|
| 120 |
+
self.source_block_ids = tuple(int(value) for value in source_block_ids)
|
| 121 |
+
with self.manifest_path.open("r", encoding="utf-8") as handle:
|
| 122 |
+
records = [json.loads(line) for line in handle if line.strip()]
|
| 123 |
+
if require_previous_chunk:
|
| 124 |
+
records = [record for record in records if int(record["chunk_id"]) > 0]
|
| 125 |
+
if max_records is not None:
|
| 126 |
+
records = records[: int(max_records)]
|
| 127 |
+
if not records:
|
| 128 |
+
raise ValueError(f"No usable records in {self.manifest_path}")
|
| 129 |
+
for record in records:
|
| 130 |
+
required = {
|
| 131 |
+
"step_tensor_file",
|
| 132 |
+
"previous_step_tensor_file",
|
| 133 |
+
"case_tensor_file",
|
| 134 |
+
"chunk_id",
|
| 135 |
+
}
|
| 136 |
+
missing = required.difference(record)
|
| 137 |
+
if missing:
|
| 138 |
+
raise ValueError(f"Manifest record lacks fields {sorted(missing)}")
|
| 139 |
+
if record.get("schema_version", SCHEMA_VERSION) != SCHEMA_VERSION:
|
| 140 |
+
raise ValueError(
|
| 141 |
+
f"Unsupported Predictor schema {record.get('schema_version')!r}"
|
| 142 |
+
)
|
| 143 |
+
chunk_id = int(record["chunk_id"])
|
| 144 |
+
expected_context_frames = chunk_id * FRAMES_PER_CHUNK
|
| 145 |
+
context_frames = int(
|
| 146 |
+
record.get("context_frames", expected_context_frames)
|
| 147 |
+
)
|
| 148 |
+
if context_frames != expected_context_frames:
|
| 149 |
+
raise ValueError(
|
| 150 |
+
f"chunk {chunk_id} context_frames={context_frames}, expected "
|
| 151 |
+
f"{expected_context_frames}"
|
| 152 |
+
)
|
| 153 |
+
history = record.get("history_clean_prefeature_files")
|
| 154 |
+
if history is None:
|
| 155 |
+
raise ValueError(
|
| 156 |
+
"Manifest record lacks history_clean_prefeature_files; "
|
| 157 |
+
"clean_prefeature_files contains only the current chunk"
|
| 158 |
+
)
|
| 159 |
+
for block_id in self.source_block_ids:
|
| 160 |
+
paths = _as_path_list(_block_entry(history, block_id))
|
| 161 |
+
if len(paths) != int(record["chunk_id"]):
|
| 162 |
+
raise ValueError(
|
| 163 |
+
f"chunk {record['chunk_id']} block {block_id} has "
|
| 164 |
+
f"{len(paths)} history files, expected {record['chunk_id']}"
|
| 165 |
+
)
|
| 166 |
+
self.records = records
|
| 167 |
+
|
| 168 |
+
def __len__(self) -> int:
|
| 169 |
+
return len(self.records) * len(self.PAIRS)
|
| 170 |
+
|
| 171 |
+
@lru_cache(maxsize=8)
|
| 172 |
+
def _load_case(self, relative_path: str) -> dict[str, torch.Tensor]:
|
| 173 |
+
path = _resolve(self.root, relative_path)
|
| 174 |
+
names: list[str] = []
|
| 175 |
+
with safe_open(str(path), framework="pt", device="cpu") as handle:
|
| 176 |
+
keys = set(handle.keys())
|
| 177 |
+
for block_id in self.source_block_ids:
|
| 178 |
+
for kind in ("k", "v"):
|
| 179 |
+
candidates = (
|
| 180 |
+
f"block_{block_id:02d}_cross_{kind}",
|
| 181 |
+
f"block_{block_id}_cross_{kind}",
|
| 182 |
+
f"block_{block_id}_text_{kind}",
|
| 183 |
+
f"block_{block_id:02d}_text_{kind}",
|
| 184 |
+
f"block_{block_id}_{kind}_txt",
|
| 185 |
+
f"text_{kind}_block_{block_id}",
|
| 186 |
+
)
|
| 187 |
+
found = next((name for name in candidates if name in keys), None)
|
| 188 |
+
if found is None:
|
| 189 |
+
raise KeyError(
|
| 190 |
+
f"{path} has no text {kind.upper()} for block {block_id}"
|
| 191 |
+
)
|
| 192 |
+
names.append(found)
|
| 193 |
+
return {name: handle.get_tensor(name) for name in names}
|
| 194 |
+
|
| 195 |
+
def _case_text_kv(
|
| 196 |
+
self,
|
| 197 |
+
relative_path: str,
|
| 198 |
+
) -> dict[int, dict[str, torch.Tensor]]:
|
| 199 |
+
tensors = self._load_case(relative_path)
|
| 200 |
+
result: dict[int, dict[str, torch.Tensor]] = {}
|
| 201 |
+
for block_id in self.source_block_ids:
|
| 202 |
+
result[block_id] = {}
|
| 203 |
+
for kind in ("k", "v"):
|
| 204 |
+
candidates = (
|
| 205 |
+
f"block_{block_id:02d}_cross_{kind}",
|
| 206 |
+
f"block_{block_id}_cross_{kind}",
|
| 207 |
+
f"block_{block_id}_text_{kind}",
|
| 208 |
+
f"block_{block_id:02d}_text_{kind}",
|
| 209 |
+
f"block_{block_id}_{kind}_txt",
|
| 210 |
+
f"text_{kind}_block_{block_id}",
|
| 211 |
+
)
|
| 212 |
+
name = next(name for name in candidates if name in tensors)
|
| 213 |
+
result[block_id][kind] = tensors[name]
|
| 214 |
+
return result
|
| 215 |
+
|
| 216 |
+
def _history_prefeature(
|
| 217 |
+
self,
|
| 218 |
+
record: Mapping[str, Any],
|
| 219 |
+
) -> dict[int, torch.Tensor]:
|
| 220 |
+
history = record["history_clean_prefeature_files"]
|
| 221 |
+
result = {}
|
| 222 |
+
for block_id in self.source_block_ids:
|
| 223 |
+
paths = _as_path_list(_block_entry(history, block_id))
|
| 224 |
+
chunks = [
|
| 225 |
+
_load_clean_prefeature(
|
| 226 |
+
_resolve(self.root, path),
|
| 227 |
+
_prefeature_names(block_id),
|
| 228 |
+
expected_start_frame=chunk_index * FRAMES_PER_CHUNK,
|
| 229 |
+
)
|
| 230 |
+
for chunk_index, path in enumerate(paths)
|
| 231 |
+
]
|
| 232 |
+
# Files are [1, chunk_tokens, dim]. Concatenate temporal chunks.
|
| 233 |
+
result[block_id] = torch.cat(chunks, dim=1)
|
| 234 |
+
return result
|
| 235 |
+
|
| 236 |
+
def __getitem__(self, index: int) -> dict[str, Any]:
|
| 237 |
+
record_index, pair_index = divmod(index, len(self.PAIRS))
|
| 238 |
+
record = self.records[record_index]
|
| 239 |
+
anchor_step, target_step = self.PAIRS[pair_index]
|
| 240 |
+
step_path = _resolve(self.root, record["step_tensor_file"])
|
| 241 |
+
step_names = (
|
| 242 |
+
f"step_{anchor_step}_final_hidden",
|
| 243 |
+
f"step_{target_step}_noisy_latent",
|
| 244 |
+
f"step_{target_step}_timestep",
|
| 245 |
+
f"step_{target_step}_final_hidden",
|
| 246 |
+
f"step_{target_step}_flow",
|
| 247 |
+
)
|
| 248 |
+
step_tensors = _load_selected(step_path, step_names)
|
| 249 |
+
previous_name = f"step_{target_step}_final_hidden"
|
| 250 |
+
previous = _load_selected(
|
| 251 |
+
_resolve(self.root, record["previous_step_tensor_file"]),
|
| 252 |
+
(previous_name,),
|
| 253 |
+
)
|
| 254 |
+
context_frames = int(
|
| 255 |
+
record.get(
|
| 256 |
+
"context_frames",
|
| 257 |
+
int(record["chunk_id"]) * FRAMES_PER_CHUNK,
|
| 258 |
+
)
|
| 259 |
+
)
|
| 260 |
+
return {
|
| 261 |
+
"target_latent": step_tensors[f"step_{target_step}_noisy_latent"],
|
| 262 |
+
"target_timestep": step_tensors[f"step_{target_step}_timestep"],
|
| 263 |
+
"anchor_hidden": step_tensors[f"step_{anchor_step}_final_hidden"],
|
| 264 |
+
"previous_chunk_hidden": previous[previous_name],
|
| 265 |
+
"target_hidden": step_tensors[f"step_{target_step}_final_hidden"],
|
| 266 |
+
"target_flow": step_tensors[f"step_{target_step}_flow"],
|
| 267 |
+
"clean_prefeature": self._history_prefeature(record),
|
| 268 |
+
"text_kv": self._case_text_kv(str(record["case_tensor_file"])),
|
| 269 |
+
"case_id": record.get("case_id"),
|
| 270 |
+
"chunk_id": int(record["chunk_id"]),
|
| 271 |
+
"context_frames": context_frames,
|
| 272 |
+
"anchor_step": anchor_step,
|
| 273 |
+
"target_step": target_step,
|
| 274 |
+
}
|
| 275 |
+
|
| 276 |
+
|
| 277 |
+
def predictor_v4_collate(items: list[dict[str, Any]]) -> dict[str, Any]:
|
| 278 |
+
"""Collate a context-length bucket into one batch."""
|
| 279 |
+
if not items:
|
| 280 |
+
raise ValueError("Cannot collate an empty batch")
|
| 281 |
+
context_frames = {item["context_frames"] for item in items}
|
| 282 |
+
if len(context_frames) != 1:
|
| 283 |
+
raise ValueError(
|
| 284 |
+
"A batch must have one history length; enable bucket_by_context"
|
| 285 |
+
)
|
| 286 |
+
tensor_keys = (
|
| 287 |
+
"target_latent",
|
| 288 |
+
"target_timestep",
|
| 289 |
+
"anchor_hidden",
|
| 290 |
+
"previous_chunk_hidden",
|
| 291 |
+
"target_hidden",
|
| 292 |
+
"target_flow",
|
| 293 |
+
)
|
| 294 |
+
batch: dict[str, Any] = {
|
| 295 |
+
key: torch.cat([item[key] for item in items], dim=0) for key in tensor_keys
|
| 296 |
+
}
|
| 297 |
+
block_ids = tuple(items[0]["clean_prefeature"])
|
| 298 |
+
batch["clean_prefeature"] = {
|
| 299 |
+
block_id: torch.cat(
|
| 300 |
+
[item["clean_prefeature"][block_id] for item in items], dim=0
|
| 301 |
+
)
|
| 302 |
+
for block_id in block_ids
|
| 303 |
+
}
|
| 304 |
+
batch["text_kv"] = {
|
| 305 |
+
block_id: {
|
| 306 |
+
kind: torch.cat(
|
| 307 |
+
[item["text_kv"][block_id][kind] for item in items], dim=0
|
| 308 |
+
)
|
| 309 |
+
for kind in ("k", "v")
|
| 310 |
+
}
|
| 311 |
+
for block_id in block_ids
|
| 312 |
+
}
|
| 313 |
+
for key in (
|
| 314 |
+
"case_id",
|
| 315 |
+
"chunk_id",
|
| 316 |
+
"context_frames",
|
| 317 |
+
"anchor_step",
|
| 318 |
+
"target_step",
|
| 319 |
+
):
|
| 320 |
+
batch[key] = [item[key] for item in items]
|
| 321 |
+
return batch
|
| 322 |
+
|
| 323 |
+
|
| 324 |
+
def _move(
|
| 325 |
+
tensor: torch.Tensor,
|
| 326 |
+
*,
|
| 327 |
+
device: torch.device,
|
| 328 |
+
dtype: torch.dtype,
|
| 329 |
+
) -> torch.Tensor:
|
| 330 |
+
target_dtype = dtype if tensor.is_floating_point() else tensor.dtype
|
| 331 |
+
return tensor.to(device=device, dtype=target_dtype, non_blocking=True)
|
| 332 |
+
|
| 333 |
+
|
| 334 |
+
def move_batch_to_device(
|
| 335 |
+
batch: dict[str, Any],
|
| 336 |
+
*,
|
| 337 |
+
device: torch.device,
|
| 338 |
+
dtype: torch.dtype,
|
| 339 |
+
) -> dict[str, Any]:
|
| 340 |
+
result = {
|
| 341 |
+
key: _move(batch[key], device=device, dtype=dtype)
|
| 342 |
+
for key in (
|
| 343 |
+
"target_latent",
|
| 344 |
+
"target_timestep",
|
| 345 |
+
"anchor_hidden",
|
| 346 |
+
"previous_chunk_hidden",
|
| 347 |
+
"target_hidden",
|
| 348 |
+
"target_flow",
|
| 349 |
+
)
|
| 350 |
+
}
|
| 351 |
+
result["clean_prefeature"] = {
|
| 352 |
+
int(block_id): _move(value, device=device, dtype=dtype)
|
| 353 |
+
for block_id, value in batch["clean_prefeature"].items()
|
| 354 |
+
}
|
| 355 |
+
result["text_kv"] = {
|
| 356 |
+
int(block_id): {
|
| 357 |
+
kind: _move(value, device=device, dtype=dtype)
|
| 358 |
+
for kind, value in values.items()
|
| 359 |
+
}
|
| 360 |
+
for block_id, values in batch["text_kv"].items()
|
| 361 |
+
}
|
| 362 |
+
for key in ("case_id", "chunk_id", "context_frames", "anchor_step", "target_step"):
|
| 363 |
+
result[key] = batch[key]
|
| 364 |
+
return result
|
predictor_training/rollout_cache.py
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Cache workspaces for detached Predictor-v4 trajectory rollout."""
|
| 2 |
+
|
| 3 |
+
from __future__ import annotations
|
| 4 |
+
|
| 5 |
+
from collections.abc import Sequence
|
| 6 |
+
|
| 7 |
+
import torch
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
def reset_main_caches(
|
| 11 |
+
kv_cache: Sequence[dict],
|
| 12 |
+
crossattn_cache: Sequence[dict],
|
| 13 |
+
) -> None:
|
| 14 |
+
"""Reset logical cache extents without clearing unused storage."""
|
| 15 |
+
|
| 16 |
+
for cache in kv_cache:
|
| 17 |
+
cache["global_end_index"].zero_()
|
| 18 |
+
cache["local_end_index"].zero_()
|
| 19 |
+
for cache in crossattn_cache:
|
| 20 |
+
cache["is_init"] = False
|
| 21 |
+
|
| 22 |
+
|
| 23 |
+
def build_predictor_workspace(
|
| 24 |
+
main_cache: Sequence[dict],
|
| 25 |
+
*,
|
| 26 |
+
source_block_ids: tuple[int, int],
|
| 27 |
+
history_tokens: int,
|
| 28 |
+
current_tokens: int,
|
| 29 |
+
) -> dict[int, dict[str, torch.Tensor]]:
|
| 30 |
+
"""Copy committed clean history into a temporary selected-layer workspace.
|
| 31 |
+
|
| 32 |
+
The current-chunk region is intentionally empty. Predictor P1/P2/P3
|
| 33 |
+
overwrite that region, and the entire workspace is discarded after the
|
| 34 |
+
chunk. Only the final Full timestep-zero pass updates persistent history.
|
| 35 |
+
"""
|
| 36 |
+
|
| 37 |
+
history_tokens = int(history_tokens)
|
| 38 |
+
current_tokens = int(current_tokens)
|
| 39 |
+
if history_tokens < 0 or current_tokens <= 0:
|
| 40 |
+
raise ValueError("Invalid history/current token count")
|
| 41 |
+
capacity = history_tokens + current_tokens
|
| 42 |
+
result: dict[int, dict[str, torch.Tensor]] = {}
|
| 43 |
+
for block_id in source_block_ids:
|
| 44 |
+
source = main_cache[int(block_id)]
|
| 45 |
+
if int(source["global_end_index"].item()) < history_tokens:
|
| 46 |
+
raise RuntimeError(
|
| 47 |
+
f"Teacher cache block {block_id} ends before committed history: "
|
| 48 |
+
f"{int(source['global_end_index'].item())} < {history_tokens}"
|
| 49 |
+
)
|
| 50 |
+
key = source["k"].new_zeros(
|
| 51 |
+
source["k"].shape[0], capacity, *source["k"].shape[2:]
|
| 52 |
+
)
|
| 53 |
+
value = source["v"].new_zeros(
|
| 54 |
+
source["v"].shape[0], capacity, *source["v"].shape[2:]
|
| 55 |
+
)
|
| 56 |
+
if history_tokens:
|
| 57 |
+
key[:, :history_tokens].copy_(source["k"][:, :history_tokens])
|
| 58 |
+
value[:, :history_tokens].copy_(source["v"][:, :history_tokens])
|
| 59 |
+
result[int(block_id)] = {
|
| 60 |
+
"k": key,
|
| 61 |
+
"v": value,
|
| 62 |
+
"global_end_index": torch.tensor(
|
| 63 |
+
[history_tokens], dtype=torch.long, device=key.device
|
| 64 |
+
),
|
| 65 |
+
"local_end_index": torch.tensor(
|
| 66 |
+
[history_tokens], dtype=torch.long, device=key.device
|
| 67 |
+
),
|
| 68 |
+
}
|
| 69 |
+
return result
|
| 70 |
+
|
| 71 |
+
|
| 72 |
+
def reset_predictor_workspace(
|
| 73 |
+
workspace: dict[int, dict[str, torch.Tensor]],
|
| 74 |
+
*,
|
| 75 |
+
history_tokens: int,
|
| 76 |
+
) -> None:
|
| 77 |
+
"""Discard the previous timestep's differentiable current-cache region."""
|
| 78 |
+
|
| 79 |
+
history_tokens = int(history_tokens)
|
| 80 |
+
for cache in workspace.values():
|
| 81 |
+
# Slice assignment from Predictor K/V can attach CopySlices autograd
|
| 82 |
+
# history to the workspace tensor. Replace it with a detached tensor
|
| 83 |
+
# before the next timestep so P2/P3 cannot backpropagate through cache.
|
| 84 |
+
cache["k"] = cache["k"].detach()
|
| 85 |
+
cache["v"] = cache["v"].detach()
|
| 86 |
+
if history_tokens < cache["k"].shape[1]:
|
| 87 |
+
cache["k"][:, history_tokens:].zero_()
|
| 88 |
+
cache["v"][:, history_tokens:].zero_()
|
| 89 |
+
cache["global_end_index"].fill_(history_tokens)
|
| 90 |
+
cache["local_end_index"].fill_(history_tokens)
|
| 91 |
+
|
| 92 |
+
|
| 93 |
+
def assert_clean_history_extent(
|
| 94 |
+
kv_cache: Sequence[dict],
|
| 95 |
+
*,
|
| 96 |
+
expected_tokens: int,
|
| 97 |
+
) -> None:
|
| 98 |
+
expected_tokens = int(expected_tokens)
|
| 99 |
+
for block_id, cache in enumerate(kv_cache):
|
| 100 |
+
global_end = int(cache["global_end_index"].item())
|
| 101 |
+
local_end = int(cache["local_end_index"].item())
|
| 102 |
+
if global_end != expected_tokens or local_end != expected_tokens:
|
| 103 |
+
raise RuntimeError(
|
| 104 |
+
f"Cache block {block_id} extent is ({global_end}, {local_end}), "
|
| 105 |
+
f"expected committed clean history {expected_tokens}"
|
| 106 |
+
)
|
| 107 |
+
|
| 108 |
+
|
| 109 |
+
__all__ = [
|
| 110 |
+
"assert_clean_history_extent",
|
| 111 |
+
"build_predictor_workspace",
|
| 112 |
+
"reset_main_caches",
|
| 113 |
+
"reset_predictor_workspace",
|
| 114 |
+
]
|
predictor_training/sampler.py
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Deterministic DDP batches grouped by clean-history length."""
|
| 2 |
+
|
| 3 |
+
from __future__ import annotations
|
| 4 |
+
|
| 5 |
+
import math
|
| 6 |
+
import random
|
| 7 |
+
from collections import defaultdict
|
| 8 |
+
from typing import Iterator
|
| 9 |
+
|
| 10 |
+
from torch.utils.data import Sampler
|
| 11 |
+
|
| 12 |
+
from .dataset import FRAMES_PER_CHUNK
|
| 13 |
+
|
| 14 |
+
|
| 15 |
+
class DistributedContextBucketBatchSampler(Sampler[list[int]]):
|
| 16 |
+
def __init__(
|
| 17 |
+
self,
|
| 18 |
+
dataset,
|
| 19 |
+
*,
|
| 20 |
+
batch_size: int,
|
| 21 |
+
rank: int,
|
| 22 |
+
world_size: int,
|
| 23 |
+
seed: int = 0,
|
| 24 |
+
drop_last: bool = True,
|
| 25 |
+
) -> None:
|
| 26 |
+
self.dataset = dataset
|
| 27 |
+
self.batch_size = int(batch_size)
|
| 28 |
+
self.rank = int(rank)
|
| 29 |
+
self.world_size = int(world_size)
|
| 30 |
+
self.seed = int(seed)
|
| 31 |
+
self.drop_last = bool(drop_last)
|
| 32 |
+
self.epoch = 0
|
| 33 |
+
if self.batch_size <= 0 or not 0 <= self.rank < self.world_size:
|
| 34 |
+
raise ValueError("Invalid distributed bucket sampler configuration")
|
| 35 |
+
self._buckets: dict[int, list[int]] = defaultdict(list)
|
| 36 |
+
for record_index, record in enumerate(dataset.records):
|
| 37 |
+
context_frames = int(
|
| 38 |
+
record.get(
|
| 39 |
+
"context_frames",
|
| 40 |
+
int(record["chunk_id"]) * FRAMES_PER_CHUNK,
|
| 41 |
+
)
|
| 42 |
+
)
|
| 43 |
+
for pair_index in range(len(dataset.PAIRS)):
|
| 44 |
+
self._buckets[context_frames].append(
|
| 45 |
+
record_index * len(dataset.PAIRS) + pair_index
|
| 46 |
+
)
|
| 47 |
+
|
| 48 |
+
def set_epoch(self, epoch: int) -> None:
|
| 49 |
+
self.epoch = int(epoch)
|
| 50 |
+
|
| 51 |
+
def _global_batches(self) -> list[list[int]]:
|
| 52 |
+
rng = random.Random(self.seed + self.epoch)
|
| 53 |
+
global_batch_size = self.batch_size * self.world_size
|
| 54 |
+
batches: list[list[int]] = []
|
| 55 |
+
for bucket in self._buckets.values():
|
| 56 |
+
indices = list(bucket)
|
| 57 |
+
rng.shuffle(indices)
|
| 58 |
+
if not self.drop_last and len(indices) % global_batch_size:
|
| 59 |
+
needed = global_batch_size - len(indices) % global_batch_size
|
| 60 |
+
indices.extend((indices * math.ceil(needed / len(indices)))[:needed])
|
| 61 |
+
usable = len(indices) - len(indices) % global_batch_size
|
| 62 |
+
batches.extend(
|
| 63 |
+
indices[start : start + global_batch_size]
|
| 64 |
+
for start in range(0, usable, global_batch_size)
|
| 65 |
+
)
|
| 66 |
+
rng.shuffle(batches)
|
| 67 |
+
return batches
|
| 68 |
+
|
| 69 |
+
def __iter__(self) -> Iterator[list[int]]:
|
| 70 |
+
start = self.rank * self.batch_size
|
| 71 |
+
end = start + self.batch_size
|
| 72 |
+
for global_batch in self._global_batches():
|
| 73 |
+
yield global_batch[start:end]
|
| 74 |
+
|
| 75 |
+
def __len__(self) -> int:
|
| 76 |
+
global_batch_size = self.batch_size * self.world_size
|
| 77 |
+
if self.drop_last:
|
| 78 |
+
return sum(
|
| 79 |
+
len(values) // global_batch_size for values in self._buckets.values()
|
| 80 |
+
)
|
| 81 |
+
return sum(
|
| 82 |
+
math.ceil(len(values) / global_batch_size)
|
| 83 |
+
for values in self._buckets.values()
|
| 84 |
+
)
|
predictor_training/trajectory_dataset.py
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Prompt trajectories and fixed FFFF targets for Predictor-v4 Stage 2."""
|
| 2 |
+
|
| 3 |
+
from __future__ import annotations
|
| 4 |
+
|
| 5 |
+
import json
|
| 6 |
+
from pathlib import Path
|
| 7 |
+
from typing import Any
|
| 8 |
+
|
| 9 |
+
import torch
|
| 10 |
+
from safetensors import safe_open
|
| 11 |
+
from torch.utils.data import Dataset
|
| 12 |
+
|
| 13 |
+
|
| 14 |
+
class PredictorV4TrajectoryDataset(Dataset):
|
| 15 |
+
"""One deterministic seven-chunk trajectory per training prompt."""
|
| 16 |
+
|
| 17 |
+
def __init__(
|
| 18 |
+
self,
|
| 19 |
+
cases_path: str | Path,
|
| 20 |
+
*,
|
| 21 |
+
data_root: str | Path,
|
| 22 |
+
max_cases: int | None = None,
|
| 23 |
+
) -> None:
|
| 24 |
+
self.cases_path = Path(cases_path).resolve()
|
| 25 |
+
self.data_root = Path(data_root).resolve()
|
| 26 |
+
with self.cases_path.open("r", encoding="utf-8") as handle:
|
| 27 |
+
cases = [json.loads(line) for line in handle if line.strip()]
|
| 28 |
+
if max_cases is not None:
|
| 29 |
+
cases = cases[: int(max_cases)]
|
| 30 |
+
if not cases:
|
| 31 |
+
raise ValueError(f"No trajectory cases in {self.cases_path}")
|
| 32 |
+
for position, case in enumerate(cases):
|
| 33 |
+
if int(case["case_id"]) != position:
|
| 34 |
+
raise ValueError("Stage-2 case_id values must be dense and ordered")
|
| 35 |
+
if int(case.get("seed", -1)) != 0:
|
| 36 |
+
raise ValueError(f"case {position} does not use latent seed 0")
|
| 37 |
+
if not str(case.get("prompt", "")).strip():
|
| 38 |
+
raise ValueError(f"case {position} has an empty prompt")
|
| 39 |
+
self.cases = cases
|
| 40 |
+
|
| 41 |
+
def __len__(self) -> int:
|
| 42 |
+
return len(self.cases)
|
| 43 |
+
|
| 44 |
+
def __getitem__(self, index: int) -> dict[str, Any]:
|
| 45 |
+
case = self.cases[index]
|
| 46 |
+
return {
|
| 47 |
+
"case_id": int(case["case_id"]),
|
| 48 |
+
"prompt": str(case["prompt"]),
|
| 49 |
+
"seed": int(case["seed"]),
|
| 50 |
+
}
|
| 51 |
+
|
| 52 |
+
def offline_step_path(self, case_id: int, chunk_id: int) -> Path:
|
| 53 |
+
path = (
|
| 54 |
+
self.data_root
|
| 55 |
+
/ "steps"
|
| 56 |
+
/ f"case_{int(case_id):06d}"
|
| 57 |
+
/ f"chunk_{int(chunk_id):02d}.safetensors"
|
| 58 |
+
)
|
| 59 |
+
if not path.is_file():
|
| 60 |
+
raise FileNotFoundError(path)
|
| 61 |
+
return path
|
| 62 |
+
|
| 63 |
+
|
| 64 |
+
def trajectory_collate(items: list[dict[str, Any]]) -> dict[str, Any]:
|
| 65 |
+
if len(items) != 1:
|
| 66 |
+
raise ValueError(
|
| 67 |
+
"Stage-2 rollout currently requires one trajectory per rank"
|
| 68 |
+
)
|
| 69 |
+
return items[0]
|
| 70 |
+
|
| 71 |
+
|
| 72 |
+
def load_offline_ffff_target(
|
| 73 |
+
path: str | Path,
|
| 74 |
+
*,
|
| 75 |
+
step_id: int,
|
| 76 |
+
device: torch.device,
|
| 77 |
+
) -> dict[str, torch.Tensor]:
|
| 78 |
+
"""Load one immutable Full-trajectory hidden/flow target."""
|
| 79 |
+
|
| 80 |
+
path = Path(path)
|
| 81 |
+
names = {
|
| 82 |
+
"hidden": f"step_{int(step_id)}_final_hidden",
|
| 83 |
+
"flow": f"step_{int(step_id)}_flow",
|
| 84 |
+
"timestep": f"step_{int(step_id)}_timestep",
|
| 85 |
+
}
|
| 86 |
+
with safe_open(str(path), framework="pt", device="cpu") as handle:
|
| 87 |
+
missing = set(names.values()).difference(handle.keys())
|
| 88 |
+
if missing:
|
| 89 |
+
raise KeyError(f"{path} lacks fixed FFFF tensors {sorted(missing)}")
|
| 90 |
+
result = {key: handle.get_tensor(name) for key, name in names.items()}
|
| 91 |
+
if result["hidden"].dtype != torch.bfloat16:
|
| 92 |
+
raise TypeError(f"{path}: target hidden must be BF16")
|
| 93 |
+
if result["flow"].dtype != torch.bfloat16:
|
| 94 |
+
raise TypeError(f"{path}: target flow must be BF16")
|
| 95 |
+
if result["timestep"].dtype != torch.int64:
|
| 96 |
+
raise TypeError(f"{path}: legacy offline timestep must be INT64")
|
| 97 |
+
return {
|
| 98 |
+
key: value.to(device=device, non_blocking=True)
|
| 99 |
+
for key, value in result.items()
|
| 100 |
+
}
|
| 101 |
+
|
| 102 |
+
|
| 103 |
+
__all__ = [
|
| 104 |
+
"PredictorV4TrajectoryDataset",
|
| 105 |
+
"load_offline_ffff_target",
|
| 106 |
+
"trajectory_collate",
|
| 107 |
+
]
|
utils/lmdb.py
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import numpy as np
|
| 2 |
+
|
| 3 |
+
|
| 4 |
+
def get_array_shape_from_lmdb(env, array_name):
|
| 5 |
+
with env.begin() as txn:
|
| 6 |
+
image_shape = txn.get(f"{array_name}_shape".encode()).decode()
|
| 7 |
+
image_shape = tuple(map(int, image_shape.split()))
|
| 8 |
+
return image_shape
|
| 9 |
+
|
| 10 |
+
|
| 11 |
+
def store_arrays_to_lmdb(env, arrays_dict, start_index=0):
|
| 12 |
+
"""
|
| 13 |
+
Store rows of multiple numpy arrays in a single LMDB.
|
| 14 |
+
Each row is stored separately with a naming convention.
|
| 15 |
+
"""
|
| 16 |
+
with env.begin(write=True) as txn:
|
| 17 |
+
for array_name, array in arrays_dict.items():
|
| 18 |
+
for i, row in enumerate(array):
|
| 19 |
+
# Convert row to bytes
|
| 20 |
+
if isinstance(row, str):
|
| 21 |
+
row_bytes = row.encode()
|
| 22 |
+
else:
|
| 23 |
+
row_bytes = row.tobytes()
|
| 24 |
+
|
| 25 |
+
data_key = f'{array_name}_{start_index + i}_data'.encode()
|
| 26 |
+
|
| 27 |
+
txn.put(data_key, row_bytes)
|
| 28 |
+
|
| 29 |
+
|
| 30 |
+
def process_data_dict(data_dict, seen_prompts):
|
| 31 |
+
output_dict = {}
|
| 32 |
+
|
| 33 |
+
all_videos = []
|
| 34 |
+
all_prompts = []
|
| 35 |
+
for prompt, video in data_dict.items():
|
| 36 |
+
if prompt in seen_prompts:
|
| 37 |
+
continue
|
| 38 |
+
else:
|
| 39 |
+
seen_prompts.add(prompt)
|
| 40 |
+
|
| 41 |
+
video = video.half().numpy()
|
| 42 |
+
all_videos.append(video)
|
| 43 |
+
all_prompts.append(prompt)
|
| 44 |
+
|
| 45 |
+
if len(all_videos) == 0:
|
| 46 |
+
return {"latents": np.array([]), "prompts": np.array([])}
|
| 47 |
+
|
| 48 |
+
all_videos = np.concatenate(all_videos, axis=0)
|
| 49 |
+
|
| 50 |
+
output_dict['latents'] = all_videos
|
| 51 |
+
output_dict['prompts'] = np.array(all_prompts)
|
| 52 |
+
|
| 53 |
+
return output_dict
|
| 54 |
+
|
| 55 |
+
|
| 56 |
+
def retrieve_row_from_lmdb(lmdb_env, array_name, dtype, row_index, shape=None):
|
| 57 |
+
"""
|
| 58 |
+
Retrieve a specific row from a specific array in the LMDB.
|
| 59 |
+
"""
|
| 60 |
+
data_key = f'{array_name}_{row_index}_data'.encode()
|
| 61 |
+
|
| 62 |
+
with lmdb_env.begin() as txn:
|
| 63 |
+
row_bytes = txn.get(data_key)
|
| 64 |
+
|
| 65 |
+
if dtype == str:
|
| 66 |
+
array = row_bytes.decode()
|
| 67 |
+
else:
|
| 68 |
+
array = np.frombuffer(row_bytes, dtype=dtype)
|
| 69 |
+
|
| 70 |
+
if shape is not None and len(shape) > 0:
|
| 71 |
+
array = array.reshape(shape)
|
| 72 |
+
return array
|
wan_models/Wan2.1-T2V-1.3B/.gitattributes
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
*.7z filter=lfs diff=lfs merge=lfs -text
|
| 2 |
+
*.arrow filter=lfs diff=lfs merge=lfs -text
|
| 3 |
+
*.bin filter=lfs diff=lfs merge=lfs -text
|
| 4 |
+
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
| 5 |
+
*.ckpt filter=lfs diff=lfs merge=lfs -text
|
| 6 |
+
*.ftz filter=lfs diff=lfs merge=lfs -text
|
| 7 |
+
*.gz filter=lfs diff=lfs merge=lfs -text
|
| 8 |
+
*.h5 filter=lfs diff=lfs merge=lfs -text
|
| 9 |
+
*.joblib filter=lfs diff=lfs merge=lfs -text
|
| 10 |
+
*.lfs.* filter=lfs diff=lfs merge=lfs -text
|
| 11 |
+
*.mlmodel filter=lfs diff=lfs merge=lfs -text
|
| 12 |
+
*.model filter=lfs diff=lfs merge=lfs -text
|
| 13 |
+
*.msgpack filter=lfs diff=lfs merge=lfs -text
|
| 14 |
+
*.npy filter=lfs diff=lfs merge=lfs -text
|
| 15 |
+
*.npz filter=lfs diff=lfs merge=lfs -text
|
| 16 |
+
*.onnx filter=lfs diff=lfs merge=lfs -text
|
| 17 |
+
*.ot filter=lfs diff=lfs merge=lfs -text
|
| 18 |
+
*.parquet filter=lfs diff=lfs merge=lfs -text
|
| 19 |
+
*.pb filter=lfs diff=lfs merge=lfs -text
|
| 20 |
+
*.pickle filter=lfs diff=lfs merge=lfs -text
|
| 21 |
+
*.pkl filter=lfs diff=lfs merge=lfs -text
|
| 22 |
+
*.pt filter=lfs diff=lfs merge=lfs -text
|
| 23 |
+
*.pth filter=lfs diff=lfs merge=lfs -text
|
| 24 |
+
*.rar filter=lfs diff=lfs merge=lfs -text
|
| 25 |
+
*.safetensors filter=lfs diff=lfs merge=lfs -text
|
| 26 |
+
saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
| 27 |
+
*.tar.* filter=lfs diff=lfs merge=lfs -text
|
| 28 |
+
*.tar filter=lfs diff=lfs merge=lfs -text
|
| 29 |
+
*.tflite filter=lfs diff=lfs merge=lfs -text
|
| 30 |
+
*.tgz filter=lfs diff=lfs merge=lfs -text
|
| 31 |
+
*.wasm filter=lfs diff=lfs merge=lfs -text
|
| 32 |
+
*.xz filter=lfs diff=lfs merge=lfs -text
|
| 33 |
+
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
+
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
+
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
google/umt5-xxl/tokenizer.json filter=lfs diff=lfs merge=lfs -text
|
| 37 |
+
assets/comp_effic.png filter=lfs diff=lfs merge=lfs -text
|
| 38 |
+
assets/data_for_diff_stage.jpg filter=lfs diff=lfs merge=lfs -text
|
| 39 |
+
assets/i2v_res.png filter=lfs diff=lfs merge=lfs -text
|
| 40 |
+
assets/logo.png filter=lfs diff=lfs merge=lfs -text
|
| 41 |
+
assets/t2v_res.jpg filter=lfs diff=lfs merge=lfs -text
|
| 42 |
+
assets/vben_vs_sota.png filter=lfs diff=lfs merge=lfs -text
|
| 43 |
+
assets/vben_vs_sota_t2i.jpg filter=lfs diff=lfs merge=lfs -text
|
| 44 |
+
assets/video_dit_arch.jpg filter=lfs diff=lfs merge=lfs -text
|
| 45 |
+
assets/video_vae_res.jpg filter=lfs diff=lfs merge=lfs -text
|
| 46 |
+
examples/i2v_input.JPG filter=lfs diff=lfs merge=lfs -text
|
| 47 |
+
assets/.DS_Store filter=lfs diff=lfs merge=lfs -text
|
wan_models/Wan2.1-T2V-1.3B/LICENSE.txt
ADDED
|
@@ -0,0 +1,201 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Apache License
|
| 2 |
+
Version 2.0, January 2004
|
| 3 |
+
http://www.apache.org/licenses/
|
| 4 |
+
|
| 5 |
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
| 6 |
+
|
| 7 |
+
1. Definitions.
|
| 8 |
+
|
| 9 |
+
"License" shall mean the terms and conditions for use, reproduction,
|
| 10 |
+
and distribution as defined by Sections 1 through 9 of this document.
|
| 11 |
+
|
| 12 |
+
"Licensor" shall mean the copyright owner or entity authorized by
|
| 13 |
+
the copyright owner that is granting the License.
|
| 14 |
+
|
| 15 |
+
"Legal Entity" shall mean the union of the acting entity and all
|
| 16 |
+
other entities that control, are controlled by, or are under common
|
| 17 |
+
control with that entity. For the purposes of this definition,
|
| 18 |
+
"control" means (i) the power, direct or indirect, to cause the
|
| 19 |
+
direction or management of such entity, whether by contract or
|
| 20 |
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
| 21 |
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
| 22 |
+
|
| 23 |
+
"You" (or "Your") shall mean an individual or Legal Entity
|
| 24 |
+
exercising permissions granted by this License.
|
| 25 |
+
|
| 26 |
+
"Source" form shall mean the preferred form for making modifications,
|
| 27 |
+
including but not limited to software source code, documentation
|
| 28 |
+
source, and configuration files.
|
| 29 |
+
|
| 30 |
+
"Object" form shall mean any form resulting from mechanical
|
| 31 |
+
transformation or translation of a Source form, including but
|
| 32 |
+
not limited to compiled object code, generated documentation,
|
| 33 |
+
and conversions to other media types.
|
| 34 |
+
|
| 35 |
+
"Work" shall mean the work of authorship, whether in Source or
|
| 36 |
+
Object form, made available under the License, as indicated by a
|
| 37 |
+
copyright notice that is included in or attached to the work
|
| 38 |
+
(an example is provided in the Appendix below).
|
| 39 |
+
|
| 40 |
+
"Derivative Works" shall mean any work, whether in Source or Object
|
| 41 |
+
form, that is based on (or derived from) the Work and for which the
|
| 42 |
+
editorial revisions, annotations, elaborations, or other modifications
|
| 43 |
+
represent, as a whole, an original work of authorship. For the purposes
|
| 44 |
+
of this License, Derivative Works shall not include works that remain
|
| 45 |
+
separable from, or merely link (or bind by name) to the interfaces of,
|
| 46 |
+
the Work and Derivative Works thereof.
|
| 47 |
+
|
| 48 |
+
"Contribution" shall mean any work of authorship, including
|
| 49 |
+
the original version of the Work and any modifications or additions
|
| 50 |
+
to that Work or Derivative Works thereof, that is intentionally
|
| 51 |
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
| 52 |
+
or by an individual or Legal Entity authorized to submit on behalf of
|
| 53 |
+
the copyright owner. For the purposes of this definition, "submitted"
|
| 54 |
+
means any form of electronic, verbal, or written communication sent
|
| 55 |
+
to the Licensor or its representatives, including but not limited to
|
| 56 |
+
communication on electronic mailing lists, source code control systems,
|
| 57 |
+
and issue tracking systems that are managed by, or on behalf of, the
|
| 58 |
+
Licensor for the purpose of discussing and improving the Work, but
|
| 59 |
+
excluding communication that is conspicuously marked or otherwise
|
| 60 |
+
designated in writing by the copyright owner as "Not a Contribution."
|
| 61 |
+
|
| 62 |
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
| 63 |
+
on behalf of whom a Contribution has been received by Licensor and
|
| 64 |
+
subsequently incorporated within the Work.
|
| 65 |
+
|
| 66 |
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
| 67 |
+
this License, each Contributor hereby grants to You a perpetual,
|
| 68 |
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
| 69 |
+
copyright license to reproduce, prepare Derivative Works of,
|
| 70 |
+
publicly display, publicly perform, sublicense, and distribute the
|
| 71 |
+
Work and such Derivative Works in Source or Object form.
|
| 72 |
+
|
| 73 |
+
3. Grant of Patent License. Subject to the terms and conditions of
|
| 74 |
+
this License, each Contributor hereby grants to You a perpetual,
|
| 75 |
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
| 76 |
+
(except as stated in this section) patent license to make, have made,
|
| 77 |
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
| 78 |
+
where such license applies only to those patent claims licensable
|
| 79 |
+
by such Contributor that are necessarily infringed by their
|
| 80 |
+
Contribution(s) alone or by combination of their Contribution(s)
|
| 81 |
+
with the Work to which such Contribution(s) was submitted. If You
|
| 82 |
+
institute patent litigation against any entity (including a
|
| 83 |
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
| 84 |
+
or a Contribution incorporated within the Work constitutes direct
|
| 85 |
+
or contributory patent infringement, then any patent licenses
|
| 86 |
+
granted to You under this License for that Work shall terminate
|
| 87 |
+
as of the date such litigation is filed.
|
| 88 |
+
|
| 89 |
+
4. Redistribution. You may reproduce and distribute copies of the
|
| 90 |
+
Work or Derivative Works thereof in any medium, with or without
|
| 91 |
+
modifications, and in Source or Object form, provided that You
|
| 92 |
+
meet the following conditions:
|
| 93 |
+
|
| 94 |
+
(a) You must give any other recipients of the Work or
|
| 95 |
+
Derivative Works a copy of this License; and
|
| 96 |
+
|
| 97 |
+
(b) You must cause any modified files to carry prominent notices
|
| 98 |
+
stating that You changed the files; and
|
| 99 |
+
|
| 100 |
+
(c) You must retain, in the Source form of any Derivative Works
|
| 101 |
+
that You distribute, all copyright, patent, trademark, and
|
| 102 |
+
attribution notices from the Source form of the Work,
|
| 103 |
+
excluding those notices that do not pertain to any part of
|
| 104 |
+
the Derivative Works; and
|
| 105 |
+
|
| 106 |
+
(d) If the Work includes a "NOTICE" text file as part of its
|
| 107 |
+
distribution, then any Derivative Works that You distribute must
|
| 108 |
+
include a readable copy of the attribution notices contained
|
| 109 |
+
within such NOTICE file, excluding those notices that do not
|
| 110 |
+
pertain to any part of the Derivative Works, in at least one
|
| 111 |
+
of the following places: within a NOTICE text file distributed
|
| 112 |
+
as part of the Derivative Works; within the Source form or
|
| 113 |
+
documentation, if provided along with the Derivative Works; or,
|
| 114 |
+
within a display generated by the Derivative Works, if and
|
| 115 |
+
wherever such third-party notices normally appear. The contents
|
| 116 |
+
of the NOTICE file are for informational purposes only and
|
| 117 |
+
do not modify the License. You may add Your own attribution
|
| 118 |
+
notices within Derivative Works that You distribute, alongside
|
| 119 |
+
or as an addendum to the NOTICE text from the Work, provided
|
| 120 |
+
that such additional attribution notices cannot be construed
|
| 121 |
+
as modifying the License.
|
| 122 |
+
|
| 123 |
+
You may add Your own copyright statement to Your modifications and
|
| 124 |
+
may provide additional or different license terms and conditions
|
| 125 |
+
for use, reproduction, or distribution of Your modifications, or
|
| 126 |
+
for any such Derivative Works as a whole, provided Your use,
|
| 127 |
+
reproduction, and distribution of the Work otherwise complies with
|
| 128 |
+
the conditions stated in this License.
|
| 129 |
+
|
| 130 |
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
| 131 |
+
any Contribution intentionally submitted for inclusion in the Work
|
| 132 |
+
by You to the Licensor shall be under the terms and conditions of
|
| 133 |
+
this License, without any additional terms or conditions.
|
| 134 |
+
Notwithstanding the above, nothing herein shall supersede or modify
|
| 135 |
+
the terms of any separate license agreement you may have executed
|
| 136 |
+
with Licensor regarding such Contributions.
|
| 137 |
+
|
| 138 |
+
6. Trademarks. This License does not grant permission to use the trade
|
| 139 |
+
names, trademarks, service marks, or product names of the Licensor,
|
| 140 |
+
except as required for reasonable and customary use in describing the
|
| 141 |
+
origin of the Work and reproducing the content of the NOTICE file.
|
| 142 |
+
|
| 143 |
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
| 144 |
+
agreed to in writing, Licensor provides the Work (and each
|
| 145 |
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
| 146 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
| 147 |
+
implied, including, without limitation, any warranties or conditions
|
| 148 |
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
| 149 |
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
| 150 |
+
appropriateness of using or redistributing the Work and assume any
|
| 151 |
+
risks associated with Your exercise of permissions under this License.
|
| 152 |
+
|
| 153 |
+
8. Limitation of Liability. In no event and under no legal theory,
|
| 154 |
+
whether in tort (including negligence), contract, or otherwise,
|
| 155 |
+
unless required by applicable law (such as deliberate and grossly
|
| 156 |
+
negligent acts) or agreed to in writing, shall any Contributor be
|
| 157 |
+
liable to You for damages, including any direct, indirect, special,
|
| 158 |
+
incidental, or consequential damages of any character arising as a
|
| 159 |
+
result of this License or out of the use or inability to use the
|
| 160 |
+
Work (including but not limited to damages for loss of goodwill,
|
| 161 |
+
work stoppage, computer failure or malfunction, or any and all
|
| 162 |
+
other commercial damages or losses), even if such Contributor
|
| 163 |
+
has been advised of the possibility of such damages.
|
| 164 |
+
|
| 165 |
+
9. Accepting Warranty or Additional Liability. While redistributing
|
| 166 |
+
the Work or Derivative Works thereof, You may choose to offer,
|
| 167 |
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
| 168 |
+
or other liability obligations and/or rights consistent with this
|
| 169 |
+
License. However, in accepting such obligations, You may act only
|
| 170 |
+
on Your own behalf and on Your sole responsibility, not on behalf
|
| 171 |
+
of any other Contributor, and only if You agree to indemnify,
|
| 172 |
+
defend, and hold each Contributor harmless for any liability
|
| 173 |
+
incurred by, or claims asserted against, such Contributor by reason
|
| 174 |
+
of your accepting any such warranty or additional liability.
|
| 175 |
+
|
| 176 |
+
END OF TERMS AND CONDITIONS
|
| 177 |
+
|
| 178 |
+
APPENDIX: How to apply the Apache License to your work.
|
| 179 |
+
|
| 180 |
+
To apply the Apache License to your work, attach the following
|
| 181 |
+
boilerplate notice, with the fields enclosed by brackets "[]"
|
| 182 |
+
replaced with your own identifying information. (Don't include
|
| 183 |
+
the brackets!) The text should be enclosed in the appropriate
|
| 184 |
+
comment syntax for the file format. We also recommend that a
|
| 185 |
+
file or class name and description of purpose be included on the
|
| 186 |
+
same "printed page" as the copyright notice for easier
|
| 187 |
+
identification within third-party archives.
|
| 188 |
+
|
| 189 |
+
Copyright [yyyy] [name of copyright owner]
|
| 190 |
+
|
| 191 |
+
Licensed under the Apache License, Version 2.0 (the "License");
|
| 192 |
+
you may not use this file except in compliance with the License.
|
| 193 |
+
You may obtain a copy of the License at
|
| 194 |
+
|
| 195 |
+
http://www.apache.org/licenses/LICENSE-2.0
|
| 196 |
+
|
| 197 |
+
Unless required by applicable law or agreed to in writing, software
|
| 198 |
+
distributed under the License is distributed on an "AS IS" BASIS,
|
| 199 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 200 |
+
See the License for the specific language governing permissions and
|
| 201 |
+
limitations under the License.
|
wan_models/Wan2.1-T2V-1.3B/README.md
ADDED
|
@@ -0,0 +1,298 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
license: apache-2.0
|
| 3 |
+
language:
|
| 4 |
+
- en
|
| 5 |
+
- zh
|
| 6 |
+
pipeline_tag: text-to-video
|
| 7 |
+
library_name: diffusers
|
| 8 |
+
tags:
|
| 9 |
+
- video
|
| 10 |
+
- video-generation
|
| 11 |
+
---
|
| 12 |
+
# Wan2.1
|
| 13 |
+
|
| 14 |
+
<p align="center">
|
| 15 |
+
<img src="assets/logo.png" width="400"/>
|
| 16 |
+
<p>
|
| 17 |
+
|
| 18 |
+
<p align="center">
|
| 19 |
+
💜 <a href=""><b>Wan</b></a>    |    🖥️ <a href="https://github.com/Wan-Video/Wan2.1">GitHub</a>    |   🤗 <a href="https://huggingface.co/Wan-AI/">Hugging Face</a>   |   🤖 <a href="https://modelscope.cn/organization/Wan-AI">ModelScope</a>   |    📑 <a href="">Paper (Coming soon)</a>    |    📑 <a href="https://wanxai.com">Blog</a>    |   💬 <a href="https://gw.alicdn.com/imgextra/i2/O1CN01tqjWFi1ByuyehkTSB_!!6000000000015-0-tps-611-1279.jpg">WeChat Group</a>   |    📖 <a href="https://discord.gg/p5XbdQV7">Discord</a>  
|
| 20 |
+
<br>
|
| 21 |
+
|
| 22 |
+
-----
|
| 23 |
+
|
| 24 |
+
[**Wan: Open and Advanced Large-Scale Video Generative Models**]("#") <be>
|
| 25 |
+
|
| 26 |
+
In this repository, we present **Wan2.1**, a comprehensive and open suite of video foundation models that pushes the boundaries of video generation. **Wan2.1** offers these key features:
|
| 27 |
+
- 👍 **SOTA Performance**: **Wan2.1** consistently outperforms existing open-source models and state-of-the-art commercial solutions across multiple benchmarks.
|
| 28 |
+
- 👍 **Supports Consumer-grade GPUs**: The T2V-1.3B model requires only 8.19 GB VRAM, making it compatible with almost all consumer-grade GPUs. It can generate a 5-second 480P video on an RTX 4090 in about 4 minutes (without optimization techniques like quantization). Its performance is even comparable to some closed-source models.
|
| 29 |
+
- 👍 **Multiple Tasks**: **Wan2.1** excels in Text-to-Video, Image-to-Video, Video Editing, Text-to-Image, and Video-to-Audio, advancing the field of video generation.
|
| 30 |
+
- 👍 **Visual Text Generation**: **Wan2.1** is the first video model capable of generating both Chinese and English text, featuring robust text generation that enhances its practical applications.
|
| 31 |
+
- 👍 **Powerful Video VAE**: **Wan-VAE** delivers exceptional efficiency and performance, encoding and decoding 1080P videos of any length while preserving temporal information, making it an ideal foundation for video and image generation.
|
| 32 |
+
|
| 33 |
+
|
| 34 |
+
This repository hosts our T2V-1.3B model, a versatile solution for video generation that is compatible with nearly all consumer-grade GPUs. In this way, we hope that **Wan2.1** can serve as an easy-to-use tool for more creative teams in video creation, providing a high-quality foundational model for academic teams with limited computing resources. This will facilitate both the rapid development of the video creation community and the swift advancement of video technology.
|
| 35 |
+
|
| 36 |
+
|
| 37 |
+
## Video Demos
|
| 38 |
+
|
| 39 |
+
<div align="center">
|
| 40 |
+
<video width="80%" controls>
|
| 41 |
+
<source src="https://cloud.video.taobao.com/vod/Jth64Y7wNoPcJki_Bo1ZJTDBvNjsgjlVKsNs05Fqfps.mp4" type="video/mp4">
|
| 42 |
+
Your browser does not support the video tag.
|
| 43 |
+
</video>
|
| 44 |
+
</div>
|
| 45 |
+
|
| 46 |
+
|
| 47 |
+
## 🔥 Latest News!!
|
| 48 |
+
|
| 49 |
+
* Feb 25, 2025: 👋 We've released the inference code and weights of Wan2.1.
|
| 50 |
+
|
| 51 |
+
|
| 52 |
+
## 📑 Todo List
|
| 53 |
+
- Wan2.1 Text-to-Video
|
| 54 |
+
- [x] Multi-GPU Inference code of the 14B and 1.3B models
|
| 55 |
+
- [x] Checkpoints of the 14B and 1.3B models
|
| 56 |
+
- [x] Gradio demo
|
| 57 |
+
- [ ] Diffusers integration
|
| 58 |
+
- [ ] ComfyUI integration
|
| 59 |
+
- Wan2.1 Image-to-Video
|
| 60 |
+
- [x] Multi-GPU Inference code of the 14B model
|
| 61 |
+
- [x] Checkpoints of the 14B model
|
| 62 |
+
- [x] Gradio demo
|
| 63 |
+
- [ ] Diffusers integration
|
| 64 |
+
- [ ] ComfyUI integration
|
| 65 |
+
|
| 66 |
+
|
| 67 |
+
## Quickstart
|
| 68 |
+
|
| 69 |
+
#### Installation
|
| 70 |
+
Clone the repo:
|
| 71 |
+
```
|
| 72 |
+
git clone https://github.com/Wan-Video/Wan2.1.git
|
| 73 |
+
cd Wan2.1
|
| 74 |
+
```
|
| 75 |
+
|
| 76 |
+
Install dependencies:
|
| 77 |
+
```
|
| 78 |
+
# Ensure torch >= 2.4.0
|
| 79 |
+
pip install -r requirements.txt
|
| 80 |
+
```
|
| 81 |
+
|
| 82 |
+
|
| 83 |
+
#### Model Download
|
| 84 |
+
|
| 85 |
+
| Models | Download Link | Notes |
|
| 86 |
+
| --------------|-------------------------------------------------------------------------------|-------------------------------|
|
| 87 |
+
| T2V-14B | 🤗 [Huggingface](https://huggingface.co/Wan-AI/Wan2.1-T2V-14B) 🤖 [ModelScope](https://www.modelscope.cn/models/Wan-AI/Wan2.1-T2V-14B) | Supports both 480P and 720P
|
| 88 |
+
| I2V-14B-720P | 🤗 [Huggingface](https://huggingface.co/Wan-AI/Wan2.1-I2V-14B-720P) 🤖 [ModelScope](https://www.modelscope.cn/models/Wan-AI/Wan2.1-I2V-14B-720P) | Supports 720P
|
| 89 |
+
| I2V-14B-480P | 🤗 [Huggingface](https://huggingface.co/Wan-AI/Wan2.1-I2V-14B-480P) 🤖 [ModelScope](https://www.modelscope.cn/models/Wan-AI/Wan2.1-I2V-14B-480P) | Supports 480P
|
| 90 |
+
| T2V-1.3B | 🤗 [Huggingface](https://huggingface.co/Wan-AI/Wan2.1-T2V-1.3B) 🤖 [ModelScope](https://www.modelscope.cn/models/Wan-AI/Wan2.1-T2V-1.3B) | Supports 480P
|
| 91 |
+
|
| 92 |
+
|
| 93 |
+
> 💡Note: The 1.3B model is capable of generating videos at 720P resolution. However, due to limited training at this resolution, the results are generally less stable compared to 480P. For optimal performance, we recommend using 480P resolution.
|
| 94 |
+
|
| 95 |
+
|
| 96 |
+
Download models using 🤗 huggingface-cli:
|
| 97 |
+
```
|
| 98 |
+
pip install "huggingface_hub[cli]"
|
| 99 |
+
huggingface-cli download Wan-AI/Wan2.1-T2V-1.3B --local-dir ./Wan2.1-T2V-1.3B
|
| 100 |
+
```
|
| 101 |
+
|
| 102 |
+
Download models using 🤖 modelscope-cli:
|
| 103 |
+
```
|
| 104 |
+
pip install modelscope
|
| 105 |
+
modelscope download Wan-AI/Wan2.1-T2V-1.3B --local_dir ./Wan2.1-T2V-1.3B
|
| 106 |
+
```
|
| 107 |
+
|
| 108 |
+
#### Run Text-to-Video Generation
|
| 109 |
+
|
| 110 |
+
This repository supports two Text-to-Video models (1.3B and 14B) and two resolutions (480P and 720P). The parameters and configurations for these models are as follows:
|
| 111 |
+
|
| 112 |
+
<table>
|
| 113 |
+
<thead>
|
| 114 |
+
<tr>
|
| 115 |
+
<th rowspan="2">Task</th>
|
| 116 |
+
<th colspan="2">Resolution</th>
|
| 117 |
+
<th rowspan="2">Model</th>
|
| 118 |
+
</tr>
|
| 119 |
+
<tr>
|
| 120 |
+
<th>480P</th>
|
| 121 |
+
<th>720P</th>
|
| 122 |
+
</tr>
|
| 123 |
+
</thead>
|
| 124 |
+
<tbody>
|
| 125 |
+
<tr>
|
| 126 |
+
<td>t2v-14B</td>
|
| 127 |
+
<td style="color: green;">✔️</td>
|
| 128 |
+
<td style="color: green;">✔️</td>
|
| 129 |
+
<td>Wan2.1-T2V-14B</td>
|
| 130 |
+
</tr>
|
| 131 |
+
<tr>
|
| 132 |
+
<td>t2v-1.3B</td>
|
| 133 |
+
<td style="color: green;">✔️</td>
|
| 134 |
+
<td style="color: red;">❌</td>
|
| 135 |
+
<td>Wan2.1-T2V-1.3B</td>
|
| 136 |
+
</tr>
|
| 137 |
+
</tbody>
|
| 138 |
+
</table>
|
| 139 |
+
|
| 140 |
+
|
| 141 |
+
##### (1) Without Prompt Extention
|
| 142 |
+
|
| 143 |
+
To facilitate implementation, we will start with a basic version of the inference process that skips the [prompt extension](#2-using-prompt-extention) step.
|
| 144 |
+
|
| 145 |
+
- Single-GPU inference
|
| 146 |
+
|
| 147 |
+
```
|
| 148 |
+
python generate.py --task t2v-1.3B --size 832*480 --ckpt_dir ./Wan2.1-T2V-1.3B --sample_shift 8 --sample_guide_scale 6 --prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage."
|
| 149 |
+
```
|
| 150 |
+
|
| 151 |
+
If you encounter OOM (Out-of-Memory) issues, you can use the `--offload_model True` and `--t5_cpu` options to reduce GPU memory usage. For example, on an RTX 4090 GPU:
|
| 152 |
+
|
| 153 |
+
```
|
| 154 |
+
python generate.py --task t2v-1.3B --size 832*480 --ckpt_dir ./Wan2.1-T2V-1.3B --offload_model True --t5_cpu --sample_shift 8 --sample_guide_scale 6 --prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage."
|
| 155 |
+
```
|
| 156 |
+
|
| 157 |
+
> 💡Note: If you are using the `T2V-1.3B` model, we recommend setting the parameter `--sample_guide_scale 6`. The `--sample_shift parameter` can be adjusted within the range of 8 to 12 based on the performance.
|
| 158 |
+
|
| 159 |
+
- Multi-GPU inference using FSDP + xDiT USP
|
| 160 |
+
|
| 161 |
+
```
|
| 162 |
+
pip install "xfuser>=0.4.1"
|
| 163 |
+
torchrun --nproc_per_node=8 generate.py --task t2v-1.3B --size 832*480 --ckpt_dir ./Wan2.1-T2V-1.3B --dit_fsdp --t5_fsdp --ulysses_size 8 --sample_shift 8 --sample_guide_scale 6 --prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage."
|
| 164 |
+
```
|
| 165 |
+
|
| 166 |
+
|
| 167 |
+
##### (2) Using Prompt Extention
|
| 168 |
+
|
| 169 |
+
Extending the prompts can effectively enrich the details in the generated videos, further enhancing the video quality. Therefore, we recommend enabling prompt extension. We provide the following two methods for prompt extension:
|
| 170 |
+
|
| 171 |
+
- Use the Dashscope API for extension.
|
| 172 |
+
- Apply for a `dashscope.api_key` in advance ([EN](https://www.alibabacloud.com/help/en/model-studio/getting-started/first-api-call-to-qwen) | [CN](https://help.aliyun.com/zh/model-studio/getting-started/first-api-call-to-qwen)).
|
| 173 |
+
- Configure the environment variable `DASH_API_KEY` to specify the Dashscope API key. For users of Alibaba Cloud's international site, you also need to set the environment variable `DASH_API_URL` to 'https://dashscope-intl.aliyuncs.com/api/v1'. For more detailed instructions, please refer to the [dashscope document](https://www.alibabacloud.com/help/en/model-studio/developer-reference/use-qwen-by-calling-api?spm=a2c63.p38356.0.i1).
|
| 174 |
+
- Use the `qwen-plus` model for text-to-video tasks and `qwen-vl-max` for image-to-video tasks.
|
| 175 |
+
- You can modify the model used for extension with the parameter `--prompt_extend_model`. For example:
|
| 176 |
+
```
|
| 177 |
+
DASH_API_KEY=your_key python generate.py --task t2v-1.3B --size 832*480 --ckpt_dir ./Wan2.1-T2V-1.3B --prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage" --use_prompt_extend --prompt_extend_method 'dashscope' --prompt_extend_target_lang 'ch'
|
| 178 |
+
```
|
| 179 |
+
|
| 180 |
+
- Using a local model for extension.
|
| 181 |
+
|
| 182 |
+
- By default, the Qwen model on HuggingFace is used for this extension. Users can choose based on the available GPU memory size.
|
| 183 |
+
- For text-to-video tasks, you can use models like `Qwen/Qwen2.5-14B-Instruct`, `Qwen/Qwen2.5-7B-Instruct` and `Qwen/Qwen2.5-3B-Instruct`
|
| 184 |
+
- For image-to-video tasks, you can use models like `Qwen/Qwen2.5-VL-7B-Instruct` and `Qwen/Qwen2.5-VL-3B-Instruct`.
|
| 185 |
+
- Larger models generally provide better extension results but require more GPU memory.
|
| 186 |
+
- You can modify the model used for extension with the parameter `--prompt_extend_model` , allowing you to specify either a local model path or a Hugging Face model. For example:
|
| 187 |
+
|
| 188 |
+
```
|
| 189 |
+
python generate.py --task t2v-1.3B --size 832*480 --ckpt_dir ./Wan2.1-T2V-1.3B --prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage" --use_prompt_extend --prompt_extend_method 'local_qwen' --prompt_extend_target_lang 'ch'
|
| 190 |
+
```
|
| 191 |
+
|
| 192 |
+
##### (3) Runing local gradio
|
| 193 |
+
|
| 194 |
+
```
|
| 195 |
+
cd gradio
|
| 196 |
+
# if one uses dashscope’s API for prompt extension
|
| 197 |
+
DASH_API_KEY=your_key python t2v_1.3B_singleGPU.py --prompt_extend_method 'dashscope' --ckpt_dir ./Wan2.1-T2V-1.3B
|
| 198 |
+
|
| 199 |
+
# if one uses a local model for prompt extension
|
| 200 |
+
python t2v_1.3B_singleGPU.py --prompt_extend_method 'local_qwen' --ckpt_dir ./Wan2.1-T2V-1.3B
|
| 201 |
+
```
|
| 202 |
+
|
| 203 |
+
|
| 204 |
+
|
| 205 |
+
## Evaluation
|
| 206 |
+
|
| 207 |
+
We employ our **Wan-Bench** framework to evaluate the performance of the T2V-1.3B model, with the results displayed in the table below. The results indicate that our smaller 1.3B model surpasses the overall metrics of larger open-source models, demonstrating the effectiveness of **WanX2.1**'s architecture and the data construction pipeline.
|
| 208 |
+
|
| 209 |
+
<div align="center">
|
| 210 |
+
<img src="assets/vben_1.3b_vs_sota.png" alt="" style="width: 80%;" />
|
| 211 |
+
</div>
|
| 212 |
+
|
| 213 |
+
|
| 214 |
+
|
| 215 |
+
## Computational Efficiency on Different GPUs
|
| 216 |
+
|
| 217 |
+
We test the computational efficiency of different **Wan2.1** models on different GPUs in the following table. The results are presented in the format: **Total time (s) / peak GPU memory (GB)**.
|
| 218 |
+
|
| 219 |
+
|
| 220 |
+
<div align="center">
|
| 221 |
+
<img src="assets/comp_effic.png" alt="" style="width: 80%;" />
|
| 222 |
+
</div>
|
| 223 |
+
|
| 224 |
+
> The parameter settings for the tests presented in this table are as follows:
|
| 225 |
+
> (1) For the 1.3B model on 8 GPUs, set `--ring_size 8` and `--ulysses_size 1`;
|
| 226 |
+
> (2) For the 14B model on 1 GPU, use `--offload_model True`;
|
| 227 |
+
> (3) For the 1.3B model on a single 4090 GPU, set `--offload_model True --t5_cpu`;
|
| 228 |
+
> (4) For all testings, no prompt extension was applied, meaning `--use_prompt_extend` was not enabled.
|
| 229 |
+
|
| 230 |
+
-------
|
| 231 |
+
|
| 232 |
+
## Introduction of Wan2.1
|
| 233 |
+
|
| 234 |
+
**Wan2.1** is designed on the mainstream diffusion transformer paradigm, achieving significant advancements in generative capabilities through a series of innovations. These include our novel spatio-temporal variational autoencoder (VAE), scalable training strategies, large-scale data construction, and automated evaluation metrics. Collectively, these contributions enhance the model’s performance and versatility.
|
| 235 |
+
|
| 236 |
+
|
| 237 |
+
##### (1) 3D Variational Autoencoders
|
| 238 |
+
We propose a novel 3D causal VAE architecture, termed **Wan-VAE** specifically designed for video generation. By combining multiple strategies, we improve spatio-temporal compression, reduce memory usage, and ensure temporal causality. **Wan-VAE** demonstrates significant advantages in performance efficiency compared to other open-source VAEs. Furthermore, our **Wan-VAE** can encode and decode unlimited-length 1080P videos without losing historical temporal information, making it particularly well-suited for video generation tasks.
|
| 239 |
+
|
| 240 |
+
|
| 241 |
+
<div align="center">
|
| 242 |
+
<img src="assets/video_vae_res.jpg" alt="" style="width: 80%;" />
|
| 243 |
+
</div>
|
| 244 |
+
|
| 245 |
+
|
| 246 |
+
##### (2) Video Diffusion DiT
|
| 247 |
+
|
| 248 |
+
**Wan2.1** is designed using the Flow Matching framework within the paradigm of mainstream Diffusion Transformers. Our model's architecture uses the T5 Encoder to encode multilingual text input, with cross-attention in each transformer block embedding the text into the model structure. Additionally, we employ an MLP with a Linear layer and a SiLU layer to process the input time embeddings and predict six modulation parameters individually. This MLP is shared across all transformer blocks, with each block learning a distinct set of biases. Our experimental findings reveal a significant performance improvement with this approach at the same parameter scale.
|
| 249 |
+
|
| 250 |
+
<div align="center">
|
| 251 |
+
<img src="assets/video_dit_arch.jpg" alt="" style="width: 80%;" />
|
| 252 |
+
</div>
|
| 253 |
+
|
| 254 |
+
|
| 255 |
+
| Model | Dimension | Input Dimension | Output Dimension | Feedforward Dimension | Frequency Dimension | Number of Heads | Number of Layers |
|
| 256 |
+
|--------|-----------|-----------------|------------------|-----------------------|---------------------|-----------------|------------------|
|
| 257 |
+
| 1.3B | 1536 | 16 | 16 | 8960 | 256 | 12 | 30 |
|
| 258 |
+
| 14B | 5120 | 16 | 16 | 13824 | 256 | 40 | 40 |
|
| 259 |
+
|
| 260 |
+
|
| 261 |
+
|
| 262 |
+
##### Data
|
| 263 |
+
|
| 264 |
+
We curated and deduplicated a candidate dataset comprising a vast amount of image and video data. During the data curation process, we designed a four-step data cleaning process, focusing on fundamental dimensions, visual quality and motion quality. Through the robust data processing pipeline, we can easily obtain high-quality, diverse, and large-scale training sets of images and videos.
|
| 265 |
+
|
| 266 |
+

|
| 267 |
+
|
| 268 |
+
|
| 269 |
+
##### Comparisons to SOTA
|
| 270 |
+
We compared **Wan2.1** with leading open-source and closed-source models to evaluate the performace. Using our carefully designed set of 1,035 internal prompts, we tested across 14 major dimensions and 26 sub-dimensions. Then we calculated the total score through a weighted average based on the importance of each dimension. The detailed results are shown in the table below. These results demonstrate our model's superior performance compared to both open-source and closed-source models.
|
| 271 |
+
|
| 272 |
+

|
| 273 |
+
|
| 274 |
+
|
| 275 |
+
## Citation
|
| 276 |
+
If you find our work helpful, please cite us.
|
| 277 |
+
|
| 278 |
+
```
|
| 279 |
+
@article{wan2.1,
|
| 280 |
+
title = {Wan: Open and Advanced Large-Scale Video Generative Models},
|
| 281 |
+
author = {Wan Team},
|
| 282 |
+
journal = {},
|
| 283 |
+
year = {2025}
|
| 284 |
+
}
|
| 285 |
+
```
|
| 286 |
+
|
| 287 |
+
## License Agreement
|
| 288 |
+
The models in this repository are licensed under the Apache 2.0 License. We claim no rights over the your generate contents, granting you the freedom to use them while ensuring that your usage complies with the provisions of this license. You are fully accountable for your use of the models, which must not involve sharing any content that violates applicable laws, causes harm to individuals or groups, disseminates personal information intended for harm, spreads misinformation, or targets vulnerable populations. For a complete list of restrictions and details regarding your rights, please refer to the full text of the [license](LICENSE.txt).
|
| 289 |
+
|
| 290 |
+
|
| 291 |
+
## Acknowledgements
|
| 292 |
+
|
| 293 |
+
We would like to thank the contributors to the [SD3](https://huggingface.co/stabilityai/stable-diffusion-3-medium), [Qwen](https://huggingface.co/Qwen), [umt5-xxl](https://huggingface.co/google/umt5-xxl), [diffusers](https://github.com/huggingface/diffusers) and [HuggingFace](https://huggingface.co) repositories, for their open research.
|
| 294 |
+
|
| 295 |
+
|
| 296 |
+
|
| 297 |
+
## Contact Us
|
| 298 |
+
If you would like to leave a message to our research or product teams, feel free to join our [Discord](https://discord.gg/p5XbdQV7) or [WeChat groups](https://gw.alicdn.com/imgextra/i2/O1CN01tqjWFi1ByuyehkTSB_!!6000000000015-0-tps-611-1279.jpg)!
|
wan_models/Wan2.1-T2V-1.3B/assets/.DS_Store
ADDED
|
Binary file (6.15 kB). View file
|
|
|
wan_models/Wan2.1-T2V-1.3B/assets/logo.png
ADDED
|
wan_models/Wan2.1-T2V-1.3B/config.json
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"_class_name": "WanModel",
|
| 3 |
+
"_diffusers_version": "0.30.0",
|
| 4 |
+
"dim": 1536,
|
| 5 |
+
"eps": 1e-06,
|
| 6 |
+
"ffn_dim": 8960,
|
| 7 |
+
"freq_dim": 256,
|
| 8 |
+
"in_dim": 16,
|
| 9 |
+
"model_type": "t2v",
|
| 10 |
+
"num_heads": 12,
|
| 11 |
+
"num_layers": 30,
|
| 12 |
+
"out_dim": 16,
|
| 13 |
+
"text_len": 512
|
| 14 |
+
}
|
wan_models/Wan2.1-T2V-1.3B/google/umt5-xxl/special_tokens_map.json
ADDED
|
@@ -0,0 +1,308 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"additional_special_tokens": [
|
| 3 |
+
"<extra_id_0>",
|
| 4 |
+
"<extra_id_1>",
|
| 5 |
+
"<extra_id_2>",
|
| 6 |
+
"<extra_id_3>",
|
| 7 |
+
"<extra_id_4>",
|
| 8 |
+
"<extra_id_5>",
|
| 9 |
+
"<extra_id_6>",
|
| 10 |
+
"<extra_id_7>",
|
| 11 |
+
"<extra_id_8>",
|
| 12 |
+
"<extra_id_9>",
|
| 13 |
+
"<extra_id_10>",
|
| 14 |
+
"<extra_id_11>",
|
| 15 |
+
"<extra_id_12>",
|
| 16 |
+
"<extra_id_13>",
|
| 17 |
+
"<extra_id_14>",
|
| 18 |
+
"<extra_id_15>",
|
| 19 |
+
"<extra_id_16>",
|
| 20 |
+
"<extra_id_17>",
|
| 21 |
+
"<extra_id_18>",
|
| 22 |
+
"<extra_id_19>",
|
| 23 |
+
"<extra_id_20>",
|
| 24 |
+
"<extra_id_21>",
|
| 25 |
+
"<extra_id_22>",
|
| 26 |
+
"<extra_id_23>",
|
| 27 |
+
"<extra_id_24>",
|
| 28 |
+
"<extra_id_25>",
|
| 29 |
+
"<extra_id_26>",
|
| 30 |
+
"<extra_id_27>",
|
| 31 |
+
"<extra_id_28>",
|
| 32 |
+
"<extra_id_29>",
|
| 33 |
+
"<extra_id_30>",
|
| 34 |
+
"<extra_id_31>",
|
| 35 |
+
"<extra_id_32>",
|
| 36 |
+
"<extra_id_33>",
|
| 37 |
+
"<extra_id_34>",
|
| 38 |
+
"<extra_id_35>",
|
| 39 |
+
"<extra_id_36>",
|
| 40 |
+
"<extra_id_37>",
|
| 41 |
+
"<extra_id_38>",
|
| 42 |
+
"<extra_id_39>",
|
| 43 |
+
"<extra_id_40>",
|
| 44 |
+
"<extra_id_41>",
|
| 45 |
+
"<extra_id_42>",
|
| 46 |
+
"<extra_id_43>",
|
| 47 |
+
"<extra_id_44>",
|
| 48 |
+
"<extra_id_45>",
|
| 49 |
+
"<extra_id_46>",
|
| 50 |
+
"<extra_id_47>",
|
| 51 |
+
"<extra_id_48>",
|
| 52 |
+
"<extra_id_49>",
|
| 53 |
+
"<extra_id_50>",
|
| 54 |
+
"<extra_id_51>",
|
| 55 |
+
"<extra_id_52>",
|
| 56 |
+
"<extra_id_53>",
|
| 57 |
+
"<extra_id_54>",
|
| 58 |
+
"<extra_id_55>",
|
| 59 |
+
"<extra_id_56>",
|
| 60 |
+
"<extra_id_57>",
|
| 61 |
+
"<extra_id_58>",
|
| 62 |
+
"<extra_id_59>",
|
| 63 |
+
"<extra_id_60>",
|
| 64 |
+
"<extra_id_61>",
|
| 65 |
+
"<extra_id_62>",
|
| 66 |
+
"<extra_id_63>",
|
| 67 |
+
"<extra_id_64>",
|
| 68 |
+
"<extra_id_65>",
|
| 69 |
+
"<extra_id_66>",
|
| 70 |
+
"<extra_id_67>",
|
| 71 |
+
"<extra_id_68>",
|
| 72 |
+
"<extra_id_69>",
|
| 73 |
+
"<extra_id_70>",
|
| 74 |
+
"<extra_id_71>",
|
| 75 |
+
"<extra_id_72>",
|
| 76 |
+
"<extra_id_73>",
|
| 77 |
+
"<extra_id_74>",
|
| 78 |
+
"<extra_id_75>",
|
| 79 |
+
"<extra_id_76>",
|
| 80 |
+
"<extra_id_77>",
|
| 81 |
+
"<extra_id_78>",
|
| 82 |
+
"<extra_id_79>",
|
| 83 |
+
"<extra_id_80>",
|
| 84 |
+
"<extra_id_81>",
|
| 85 |
+
"<extra_id_82>",
|
| 86 |
+
"<extra_id_83>",
|
| 87 |
+
"<extra_id_84>",
|
| 88 |
+
"<extra_id_85>",
|
| 89 |
+
"<extra_id_86>",
|
| 90 |
+
"<extra_id_87>",
|
| 91 |
+
"<extra_id_88>",
|
| 92 |
+
"<extra_id_89>",
|
| 93 |
+
"<extra_id_90>",
|
| 94 |
+
"<extra_id_91>",
|
| 95 |
+
"<extra_id_92>",
|
| 96 |
+
"<extra_id_93>",
|
| 97 |
+
"<extra_id_94>",
|
| 98 |
+
"<extra_id_95>",
|
| 99 |
+
"<extra_id_96>",
|
| 100 |
+
"<extra_id_97>",
|
| 101 |
+
"<extra_id_98>",
|
| 102 |
+
"<extra_id_99>",
|
| 103 |
+
"<extra_id_100>",
|
| 104 |
+
"<extra_id_101>",
|
| 105 |
+
"<extra_id_102>",
|
| 106 |
+
"<extra_id_103>",
|
| 107 |
+
"<extra_id_104>",
|
| 108 |
+
"<extra_id_105>",
|
| 109 |
+
"<extra_id_106>",
|
| 110 |
+
"<extra_id_107>",
|
| 111 |
+
"<extra_id_108>",
|
| 112 |
+
"<extra_id_109>",
|
| 113 |
+
"<extra_id_110>",
|
| 114 |
+
"<extra_id_111>",
|
| 115 |
+
"<extra_id_112>",
|
| 116 |
+
"<extra_id_113>",
|
| 117 |
+
"<extra_id_114>",
|
| 118 |
+
"<extra_id_115>",
|
| 119 |
+
"<extra_id_116>",
|
| 120 |
+
"<extra_id_117>",
|
| 121 |
+
"<extra_id_118>",
|
| 122 |
+
"<extra_id_119>",
|
| 123 |
+
"<extra_id_120>",
|
| 124 |
+
"<extra_id_121>",
|
| 125 |
+
"<extra_id_122>",
|
| 126 |
+
"<extra_id_123>",
|
| 127 |
+
"<extra_id_124>",
|
| 128 |
+
"<extra_id_125>",
|
| 129 |
+
"<extra_id_126>",
|
| 130 |
+
"<extra_id_127>",
|
| 131 |
+
"<extra_id_128>",
|
| 132 |
+
"<extra_id_129>",
|
| 133 |
+
"<extra_id_130>",
|
| 134 |
+
"<extra_id_131>",
|
| 135 |
+
"<extra_id_132>",
|
| 136 |
+
"<extra_id_133>",
|
| 137 |
+
"<extra_id_134>",
|
| 138 |
+
"<extra_id_135>",
|
| 139 |
+
"<extra_id_136>",
|
| 140 |
+
"<extra_id_137>",
|
| 141 |
+
"<extra_id_138>",
|
| 142 |
+
"<extra_id_139>",
|
| 143 |
+
"<extra_id_140>",
|
| 144 |
+
"<extra_id_141>",
|
| 145 |
+
"<extra_id_142>",
|
| 146 |
+
"<extra_id_143>",
|
| 147 |
+
"<extra_id_144>",
|
| 148 |
+
"<extra_id_145>",
|
| 149 |
+
"<extra_id_146>",
|
| 150 |
+
"<extra_id_147>",
|
| 151 |
+
"<extra_id_148>",
|
| 152 |
+
"<extra_id_149>",
|
| 153 |
+
"<extra_id_150>",
|
| 154 |
+
"<extra_id_151>",
|
| 155 |
+
"<extra_id_152>",
|
| 156 |
+
"<extra_id_153>",
|
| 157 |
+
"<extra_id_154>",
|
| 158 |
+
"<extra_id_155>",
|
| 159 |
+
"<extra_id_156>",
|
| 160 |
+
"<extra_id_157>",
|
| 161 |
+
"<extra_id_158>",
|
| 162 |
+
"<extra_id_159>",
|
| 163 |
+
"<extra_id_160>",
|
| 164 |
+
"<extra_id_161>",
|
| 165 |
+
"<extra_id_162>",
|
| 166 |
+
"<extra_id_163>",
|
| 167 |
+
"<extra_id_164>",
|
| 168 |
+
"<extra_id_165>",
|
| 169 |
+
"<extra_id_166>",
|
| 170 |
+
"<extra_id_167>",
|
| 171 |
+
"<extra_id_168>",
|
| 172 |
+
"<extra_id_169>",
|
| 173 |
+
"<extra_id_170>",
|
| 174 |
+
"<extra_id_171>",
|
| 175 |
+
"<extra_id_172>",
|
| 176 |
+
"<extra_id_173>",
|
| 177 |
+
"<extra_id_174>",
|
| 178 |
+
"<extra_id_175>",
|
| 179 |
+
"<extra_id_176>",
|
| 180 |
+
"<extra_id_177>",
|
| 181 |
+
"<extra_id_178>",
|
| 182 |
+
"<extra_id_179>",
|
| 183 |
+
"<extra_id_180>",
|
| 184 |
+
"<extra_id_181>",
|
| 185 |
+
"<extra_id_182>",
|
| 186 |
+
"<extra_id_183>",
|
| 187 |
+
"<extra_id_184>",
|
| 188 |
+
"<extra_id_185>",
|
| 189 |
+
"<extra_id_186>",
|
| 190 |
+
"<extra_id_187>",
|
| 191 |
+
"<extra_id_188>",
|
| 192 |
+
"<extra_id_189>",
|
| 193 |
+
"<extra_id_190>",
|
| 194 |
+
"<extra_id_191>",
|
| 195 |
+
"<extra_id_192>",
|
| 196 |
+
"<extra_id_193>",
|
| 197 |
+
"<extra_id_194>",
|
| 198 |
+
"<extra_id_195>",
|
| 199 |
+
"<extra_id_196>",
|
| 200 |
+
"<extra_id_197>",
|
| 201 |
+
"<extra_id_198>",
|
| 202 |
+
"<extra_id_199>",
|
| 203 |
+
"<extra_id_200>",
|
| 204 |
+
"<extra_id_201>",
|
| 205 |
+
"<extra_id_202>",
|
| 206 |
+
"<extra_id_203>",
|
| 207 |
+
"<extra_id_204>",
|
| 208 |
+
"<extra_id_205>",
|
| 209 |
+
"<extra_id_206>",
|
| 210 |
+
"<extra_id_207>",
|
| 211 |
+
"<extra_id_208>",
|
| 212 |
+
"<extra_id_209>",
|
| 213 |
+
"<extra_id_210>",
|
| 214 |
+
"<extra_id_211>",
|
| 215 |
+
"<extra_id_212>",
|
| 216 |
+
"<extra_id_213>",
|
| 217 |
+
"<extra_id_214>",
|
| 218 |
+
"<extra_id_215>",
|
| 219 |
+
"<extra_id_216>",
|
| 220 |
+
"<extra_id_217>",
|
| 221 |
+
"<extra_id_218>",
|
| 222 |
+
"<extra_id_219>",
|
| 223 |
+
"<extra_id_220>",
|
| 224 |
+
"<extra_id_221>",
|
| 225 |
+
"<extra_id_222>",
|
| 226 |
+
"<extra_id_223>",
|
| 227 |
+
"<extra_id_224>",
|
| 228 |
+
"<extra_id_225>",
|
| 229 |
+
"<extra_id_226>",
|
| 230 |
+
"<extra_id_227>",
|
| 231 |
+
"<extra_id_228>",
|
| 232 |
+
"<extra_id_229>",
|
| 233 |
+
"<extra_id_230>",
|
| 234 |
+
"<extra_id_231>",
|
| 235 |
+
"<extra_id_232>",
|
| 236 |
+
"<extra_id_233>",
|
| 237 |
+
"<extra_id_234>",
|
| 238 |
+
"<extra_id_235>",
|
| 239 |
+
"<extra_id_236>",
|
| 240 |
+
"<extra_id_237>",
|
| 241 |
+
"<extra_id_238>",
|
| 242 |
+
"<extra_id_239>",
|
| 243 |
+
"<extra_id_240>",
|
| 244 |
+
"<extra_id_241>",
|
| 245 |
+
"<extra_id_242>",
|
| 246 |
+
"<extra_id_243>",
|
| 247 |
+
"<extra_id_244>",
|
| 248 |
+
"<extra_id_245>",
|
| 249 |
+
"<extra_id_246>",
|
| 250 |
+
"<extra_id_247>",
|
| 251 |
+
"<extra_id_248>",
|
| 252 |
+
"<extra_id_249>",
|
| 253 |
+
"<extra_id_250>",
|
| 254 |
+
"<extra_id_251>",
|
| 255 |
+
"<extra_id_252>",
|
| 256 |
+
"<extra_id_253>",
|
| 257 |
+
"<extra_id_254>",
|
| 258 |
+
"<extra_id_255>",
|
| 259 |
+
"<extra_id_256>",
|
| 260 |
+
"<extra_id_257>",
|
| 261 |
+
"<extra_id_258>",
|
| 262 |
+
"<extra_id_259>",
|
| 263 |
+
"<extra_id_260>",
|
| 264 |
+
"<extra_id_261>",
|
| 265 |
+
"<extra_id_262>",
|
| 266 |
+
"<extra_id_263>",
|
| 267 |
+
"<extra_id_264>",
|
| 268 |
+
"<extra_id_265>",
|
| 269 |
+
"<extra_id_266>",
|
| 270 |
+
"<extra_id_267>",
|
| 271 |
+
"<extra_id_268>",
|
| 272 |
+
"<extra_id_269>",
|
| 273 |
+
"<extra_id_270>",
|
| 274 |
+
"<extra_id_271>",
|
| 275 |
+
"<extra_id_272>",
|
| 276 |
+
"<extra_id_273>",
|
| 277 |
+
"<extra_id_274>",
|
| 278 |
+
"<extra_id_275>",
|
| 279 |
+
"<extra_id_276>",
|
| 280 |
+
"<extra_id_277>",
|
| 281 |
+
"<extra_id_278>",
|
| 282 |
+
"<extra_id_279>",
|
| 283 |
+
"<extra_id_280>",
|
| 284 |
+
"<extra_id_281>",
|
| 285 |
+
"<extra_id_282>",
|
| 286 |
+
"<extra_id_283>",
|
| 287 |
+
"<extra_id_284>",
|
| 288 |
+
"<extra_id_285>",
|
| 289 |
+
"<extra_id_286>",
|
| 290 |
+
"<extra_id_287>",
|
| 291 |
+
"<extra_id_288>",
|
| 292 |
+
"<extra_id_289>",
|
| 293 |
+
"<extra_id_290>",
|
| 294 |
+
"<extra_id_291>",
|
| 295 |
+
"<extra_id_292>",
|
| 296 |
+
"<extra_id_293>",
|
| 297 |
+
"<extra_id_294>",
|
| 298 |
+
"<extra_id_295>",
|
| 299 |
+
"<extra_id_296>",
|
| 300 |
+
"<extra_id_297>",
|
| 301 |
+
"<extra_id_298>",
|
| 302 |
+
"<extra_id_299>"
|
| 303 |
+
],
|
| 304 |
+
"bos_token": "<s>",
|
| 305 |
+
"eos_token": "</s>",
|
| 306 |
+
"pad_token": "<pad>",
|
| 307 |
+
"unk_token": "<unk>"
|
| 308 |
+
}
|
wan_models/Wan2.1-T2V-1.3B/google/umt5-xxl/tokenizer_config.json
ADDED
|
@@ -0,0 +1,2748 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"added_tokens_decoder": {
|
| 3 |
+
"0": {
|
| 4 |
+
"content": "<pad>",
|
| 5 |
+
"lstrip": false,
|
| 6 |
+
"normalized": false,
|
| 7 |
+
"rstrip": false,
|
| 8 |
+
"single_word": false,
|
| 9 |
+
"special": true
|
| 10 |
+
},
|
| 11 |
+
"1": {
|
| 12 |
+
"content": "</s>",
|
| 13 |
+
"lstrip": false,
|
| 14 |
+
"normalized": false,
|
| 15 |
+
"rstrip": false,
|
| 16 |
+
"single_word": false,
|
| 17 |
+
"special": true
|
| 18 |
+
},
|
| 19 |
+
"2": {
|
| 20 |
+
"content": "<s>",
|
| 21 |
+
"lstrip": false,
|
| 22 |
+
"normalized": false,
|
| 23 |
+
"rstrip": false,
|
| 24 |
+
"single_word": false,
|
| 25 |
+
"special": true
|
| 26 |
+
},
|
| 27 |
+
"3": {
|
| 28 |
+
"content": "<unk>",
|
| 29 |
+
"lstrip": false,
|
| 30 |
+
"normalized": false,
|
| 31 |
+
"rstrip": false,
|
| 32 |
+
"single_word": false,
|
| 33 |
+
"special": true
|
| 34 |
+
},
|
| 35 |
+
"256000": {
|
| 36 |
+
"content": "<extra_id_299>",
|
| 37 |
+
"lstrip": false,
|
| 38 |
+
"normalized": false,
|
| 39 |
+
"rstrip": false,
|
| 40 |
+
"single_word": false,
|
| 41 |
+
"special": true
|
| 42 |
+
},
|
| 43 |
+
"256001": {
|
| 44 |
+
"content": "<extra_id_298>",
|
| 45 |
+
"lstrip": false,
|
| 46 |
+
"normalized": false,
|
| 47 |
+
"rstrip": false,
|
| 48 |
+
"single_word": false,
|
| 49 |
+
"special": true
|
| 50 |
+
},
|
| 51 |
+
"256002": {
|
| 52 |
+
"content": "<extra_id_297>",
|
| 53 |
+
"lstrip": false,
|
| 54 |
+
"normalized": false,
|
| 55 |
+
"rstrip": false,
|
| 56 |
+
"single_word": false,
|
| 57 |
+
"special": true
|
| 58 |
+
},
|
| 59 |
+
"256003": {
|
| 60 |
+
"content": "<extra_id_296>",
|
| 61 |
+
"lstrip": false,
|
| 62 |
+
"normalized": false,
|
| 63 |
+
"rstrip": false,
|
| 64 |
+
"single_word": false,
|
| 65 |
+
"special": true
|
| 66 |
+
},
|
| 67 |
+
"256004": {
|
| 68 |
+
"content": "<extra_id_295>",
|
| 69 |
+
"lstrip": false,
|
| 70 |
+
"normalized": false,
|
| 71 |
+
"rstrip": false,
|
| 72 |
+
"single_word": false,
|
| 73 |
+
"special": true
|
| 74 |
+
},
|
| 75 |
+
"256005": {
|
| 76 |
+
"content": "<extra_id_294>",
|
| 77 |
+
"lstrip": false,
|
| 78 |
+
"normalized": false,
|
| 79 |
+
"rstrip": false,
|
| 80 |
+
"single_word": false,
|
| 81 |
+
"special": true
|
| 82 |
+
},
|
| 83 |
+
"256006": {
|
| 84 |
+
"content": "<extra_id_293>",
|
| 85 |
+
"lstrip": false,
|
| 86 |
+
"normalized": false,
|
| 87 |
+
"rstrip": false,
|
| 88 |
+
"single_word": false,
|
| 89 |
+
"special": true
|
| 90 |
+
},
|
| 91 |
+
"256007": {
|
| 92 |
+
"content": "<extra_id_292>",
|
| 93 |
+
"lstrip": false,
|
| 94 |
+
"normalized": false,
|
| 95 |
+
"rstrip": false,
|
| 96 |
+
"single_word": false,
|
| 97 |
+
"special": true
|
| 98 |
+
},
|
| 99 |
+
"256008": {
|
| 100 |
+
"content": "<extra_id_291>",
|
| 101 |
+
"lstrip": false,
|
| 102 |
+
"normalized": false,
|
| 103 |
+
"rstrip": false,
|
| 104 |
+
"single_word": false,
|
| 105 |
+
"special": true
|
| 106 |
+
},
|
| 107 |
+
"256009": {
|
| 108 |
+
"content": "<extra_id_290>",
|
| 109 |
+
"lstrip": false,
|
| 110 |
+
"normalized": false,
|
| 111 |
+
"rstrip": false,
|
| 112 |
+
"single_word": false,
|
| 113 |
+
"special": true
|
| 114 |
+
},
|
| 115 |
+
"256010": {
|
| 116 |
+
"content": "<extra_id_289>",
|
| 117 |
+
"lstrip": false,
|
| 118 |
+
"normalized": false,
|
| 119 |
+
"rstrip": false,
|
| 120 |
+
"single_word": false,
|
| 121 |
+
"special": true
|
| 122 |
+
},
|
| 123 |
+
"256011": {
|
| 124 |
+
"content": "<extra_id_288>",
|
| 125 |
+
"lstrip": false,
|
| 126 |
+
"normalized": false,
|
| 127 |
+
"rstrip": false,
|
| 128 |
+
"single_word": false,
|
| 129 |
+
"special": true
|
| 130 |
+
},
|
| 131 |
+
"256012": {
|
| 132 |
+
"content": "<extra_id_287>",
|
| 133 |
+
"lstrip": false,
|
| 134 |
+
"normalized": false,
|
| 135 |
+
"rstrip": false,
|
| 136 |
+
"single_word": false,
|
| 137 |
+
"special": true
|
| 138 |
+
},
|
| 139 |
+
"256013": {
|
| 140 |
+
"content": "<extra_id_286>",
|
| 141 |
+
"lstrip": false,
|
| 142 |
+
"normalized": false,
|
| 143 |
+
"rstrip": false,
|
| 144 |
+
"single_word": false,
|
| 145 |
+
"special": true
|
| 146 |
+
},
|
| 147 |
+
"256014": {
|
| 148 |
+
"content": "<extra_id_285>",
|
| 149 |
+
"lstrip": false,
|
| 150 |
+
"normalized": false,
|
| 151 |
+
"rstrip": false,
|
| 152 |
+
"single_word": false,
|
| 153 |
+
"special": true
|
| 154 |
+
},
|
| 155 |
+
"256015": {
|
| 156 |
+
"content": "<extra_id_284>",
|
| 157 |
+
"lstrip": false,
|
| 158 |
+
"normalized": false,
|
| 159 |
+
"rstrip": false,
|
| 160 |
+
"single_word": false,
|
| 161 |
+
"special": true
|
| 162 |
+
},
|
| 163 |
+
"256016": {
|
| 164 |
+
"content": "<extra_id_283>",
|
| 165 |
+
"lstrip": false,
|
| 166 |
+
"normalized": false,
|
| 167 |
+
"rstrip": false,
|
| 168 |
+
"single_word": false,
|
| 169 |
+
"special": true
|
| 170 |
+
},
|
| 171 |
+
"256017": {
|
| 172 |
+
"content": "<extra_id_282>",
|
| 173 |
+
"lstrip": false,
|
| 174 |
+
"normalized": false,
|
| 175 |
+
"rstrip": false,
|
| 176 |
+
"single_word": false,
|
| 177 |
+
"special": true
|
| 178 |
+
},
|
| 179 |
+
"256018": {
|
| 180 |
+
"content": "<extra_id_281>",
|
| 181 |
+
"lstrip": false,
|
| 182 |
+
"normalized": false,
|
| 183 |
+
"rstrip": false,
|
| 184 |
+
"single_word": false,
|
| 185 |
+
"special": true
|
| 186 |
+
},
|
| 187 |
+
"256019": {
|
| 188 |
+
"content": "<extra_id_280>",
|
| 189 |
+
"lstrip": false,
|
| 190 |
+
"normalized": false,
|
| 191 |
+
"rstrip": false,
|
| 192 |
+
"single_word": false,
|
| 193 |
+
"special": true
|
| 194 |
+
},
|
| 195 |
+
"256020": {
|
| 196 |
+
"content": "<extra_id_279>",
|
| 197 |
+
"lstrip": false,
|
| 198 |
+
"normalized": false,
|
| 199 |
+
"rstrip": false,
|
| 200 |
+
"single_word": false,
|
| 201 |
+
"special": true
|
| 202 |
+
},
|
| 203 |
+
"256021": {
|
| 204 |
+
"content": "<extra_id_278>",
|
| 205 |
+
"lstrip": false,
|
| 206 |
+
"normalized": false,
|
| 207 |
+
"rstrip": false,
|
| 208 |
+
"single_word": false,
|
| 209 |
+
"special": true
|
| 210 |
+
},
|
| 211 |
+
"256022": {
|
| 212 |
+
"content": "<extra_id_277>",
|
| 213 |
+
"lstrip": false,
|
| 214 |
+
"normalized": false,
|
| 215 |
+
"rstrip": false,
|
| 216 |
+
"single_word": false,
|
| 217 |
+
"special": true
|
| 218 |
+
},
|
| 219 |
+
"256023": {
|
| 220 |
+
"content": "<extra_id_276>",
|
| 221 |
+
"lstrip": false,
|
| 222 |
+
"normalized": false,
|
| 223 |
+
"rstrip": false,
|
| 224 |
+
"single_word": false,
|
| 225 |
+
"special": true
|
| 226 |
+
},
|
| 227 |
+
"256024": {
|
| 228 |
+
"content": "<extra_id_275>",
|
| 229 |
+
"lstrip": false,
|
| 230 |
+
"normalized": false,
|
| 231 |
+
"rstrip": false,
|
| 232 |
+
"single_word": false,
|
| 233 |
+
"special": true
|
| 234 |
+
},
|
| 235 |
+
"256025": {
|
| 236 |
+
"content": "<extra_id_274>",
|
| 237 |
+
"lstrip": false,
|
| 238 |
+
"normalized": false,
|
| 239 |
+
"rstrip": false,
|
| 240 |
+
"single_word": false,
|
| 241 |
+
"special": true
|
| 242 |
+
},
|
| 243 |
+
"256026": {
|
| 244 |
+
"content": "<extra_id_273>",
|
| 245 |
+
"lstrip": false,
|
| 246 |
+
"normalized": false,
|
| 247 |
+
"rstrip": false,
|
| 248 |
+
"single_word": false,
|
| 249 |
+
"special": true
|
| 250 |
+
},
|
| 251 |
+
"256027": {
|
| 252 |
+
"content": "<extra_id_272>",
|
| 253 |
+
"lstrip": false,
|
| 254 |
+
"normalized": false,
|
| 255 |
+
"rstrip": false,
|
| 256 |
+
"single_word": false,
|
| 257 |
+
"special": true
|
| 258 |
+
},
|
| 259 |
+
"256028": {
|
| 260 |
+
"content": "<extra_id_271>",
|
| 261 |
+
"lstrip": false,
|
| 262 |
+
"normalized": false,
|
| 263 |
+
"rstrip": false,
|
| 264 |
+
"single_word": false,
|
| 265 |
+
"special": true
|
| 266 |
+
},
|
| 267 |
+
"256029": {
|
| 268 |
+
"content": "<extra_id_270>",
|
| 269 |
+
"lstrip": false,
|
| 270 |
+
"normalized": false,
|
| 271 |
+
"rstrip": false,
|
| 272 |
+
"single_word": false,
|
| 273 |
+
"special": true
|
| 274 |
+
},
|
| 275 |
+
"256030": {
|
| 276 |
+
"content": "<extra_id_269>",
|
| 277 |
+
"lstrip": false,
|
| 278 |
+
"normalized": false,
|
| 279 |
+
"rstrip": false,
|
| 280 |
+
"single_word": false,
|
| 281 |
+
"special": true
|
| 282 |
+
},
|
| 283 |
+
"256031": {
|
| 284 |
+
"content": "<extra_id_268>",
|
| 285 |
+
"lstrip": false,
|
| 286 |
+
"normalized": false,
|
| 287 |
+
"rstrip": false,
|
| 288 |
+
"single_word": false,
|
| 289 |
+
"special": true
|
| 290 |
+
},
|
| 291 |
+
"256032": {
|
| 292 |
+
"content": "<extra_id_267>",
|
| 293 |
+
"lstrip": false,
|
| 294 |
+
"normalized": false,
|
| 295 |
+
"rstrip": false,
|
| 296 |
+
"single_word": false,
|
| 297 |
+
"special": true
|
| 298 |
+
},
|
| 299 |
+
"256033": {
|
| 300 |
+
"content": "<extra_id_266>",
|
| 301 |
+
"lstrip": false,
|
| 302 |
+
"normalized": false,
|
| 303 |
+
"rstrip": false,
|
| 304 |
+
"single_word": false,
|
| 305 |
+
"special": true
|
| 306 |
+
},
|
| 307 |
+
"256034": {
|
| 308 |
+
"content": "<extra_id_265>",
|
| 309 |
+
"lstrip": false,
|
| 310 |
+
"normalized": false,
|
| 311 |
+
"rstrip": false,
|
| 312 |
+
"single_word": false,
|
| 313 |
+
"special": true
|
| 314 |
+
},
|
| 315 |
+
"256035": {
|
| 316 |
+
"content": "<extra_id_264>",
|
| 317 |
+
"lstrip": false,
|
| 318 |
+
"normalized": false,
|
| 319 |
+
"rstrip": false,
|
| 320 |
+
"single_word": false,
|
| 321 |
+
"special": true
|
| 322 |
+
},
|
| 323 |
+
"256036": {
|
| 324 |
+
"content": "<extra_id_263>",
|
| 325 |
+
"lstrip": false,
|
| 326 |
+
"normalized": false,
|
| 327 |
+
"rstrip": false,
|
| 328 |
+
"single_word": false,
|
| 329 |
+
"special": true
|
| 330 |
+
},
|
| 331 |
+
"256037": {
|
| 332 |
+
"content": "<extra_id_262>",
|
| 333 |
+
"lstrip": false,
|
| 334 |
+
"normalized": false,
|
| 335 |
+
"rstrip": false,
|
| 336 |
+
"single_word": false,
|
| 337 |
+
"special": true
|
| 338 |
+
},
|
| 339 |
+
"256038": {
|
| 340 |
+
"content": "<extra_id_261>",
|
| 341 |
+
"lstrip": false,
|
| 342 |
+
"normalized": false,
|
| 343 |
+
"rstrip": false,
|
| 344 |
+
"single_word": false,
|
| 345 |
+
"special": true
|
| 346 |
+
},
|
| 347 |
+
"256039": {
|
| 348 |
+
"content": "<extra_id_260>",
|
| 349 |
+
"lstrip": false,
|
| 350 |
+
"normalized": false,
|
| 351 |
+
"rstrip": false,
|
| 352 |
+
"single_word": false,
|
| 353 |
+
"special": true
|
| 354 |
+
},
|
| 355 |
+
"256040": {
|
| 356 |
+
"content": "<extra_id_259>",
|
| 357 |
+
"lstrip": false,
|
| 358 |
+
"normalized": false,
|
| 359 |
+
"rstrip": false,
|
| 360 |
+
"single_word": false,
|
| 361 |
+
"special": true
|
| 362 |
+
},
|
| 363 |
+
"256041": {
|
| 364 |
+
"content": "<extra_id_258>",
|
| 365 |
+
"lstrip": false,
|
| 366 |
+
"normalized": false,
|
| 367 |
+
"rstrip": false,
|
| 368 |
+
"single_word": false,
|
| 369 |
+
"special": true
|
| 370 |
+
},
|
| 371 |
+
"256042": {
|
| 372 |
+
"content": "<extra_id_257>",
|
| 373 |
+
"lstrip": false,
|
| 374 |
+
"normalized": false,
|
| 375 |
+
"rstrip": false,
|
| 376 |
+
"single_word": false,
|
| 377 |
+
"special": true
|
| 378 |
+
},
|
| 379 |
+
"256043": {
|
| 380 |
+
"content": "<extra_id_256>",
|
| 381 |
+
"lstrip": false,
|
| 382 |
+
"normalized": false,
|
| 383 |
+
"rstrip": false,
|
| 384 |
+
"single_word": false,
|
| 385 |
+
"special": true
|
| 386 |
+
},
|
| 387 |
+
"256044": {
|
| 388 |
+
"content": "<extra_id_255>",
|
| 389 |
+
"lstrip": false,
|
| 390 |
+
"normalized": false,
|
| 391 |
+
"rstrip": false,
|
| 392 |
+
"single_word": false,
|
| 393 |
+
"special": true
|
| 394 |
+
},
|
| 395 |
+
"256045": {
|
| 396 |
+
"content": "<extra_id_254>",
|
| 397 |
+
"lstrip": false,
|
| 398 |
+
"normalized": false,
|
| 399 |
+
"rstrip": false,
|
| 400 |
+
"single_word": false,
|
| 401 |
+
"special": true
|
| 402 |
+
},
|
| 403 |
+
"256046": {
|
| 404 |
+
"content": "<extra_id_253>",
|
| 405 |
+
"lstrip": false,
|
| 406 |
+
"normalized": false,
|
| 407 |
+
"rstrip": false,
|
| 408 |
+
"single_word": false,
|
| 409 |
+
"special": true
|
| 410 |
+
},
|
| 411 |
+
"256047": {
|
| 412 |
+
"content": "<extra_id_252>",
|
| 413 |
+
"lstrip": false,
|
| 414 |
+
"normalized": false,
|
| 415 |
+
"rstrip": false,
|
| 416 |
+
"single_word": false,
|
| 417 |
+
"special": true
|
| 418 |
+
},
|
| 419 |
+
"256048": {
|
| 420 |
+
"content": "<extra_id_251>",
|
| 421 |
+
"lstrip": false,
|
| 422 |
+
"normalized": false,
|
| 423 |
+
"rstrip": false,
|
| 424 |
+
"single_word": false,
|
| 425 |
+
"special": true
|
| 426 |
+
},
|
| 427 |
+
"256049": {
|
| 428 |
+
"content": "<extra_id_250>",
|
| 429 |
+
"lstrip": false,
|
| 430 |
+
"normalized": false,
|
| 431 |
+
"rstrip": false,
|
| 432 |
+
"single_word": false,
|
| 433 |
+
"special": true
|
| 434 |
+
},
|
| 435 |
+
"256050": {
|
| 436 |
+
"content": "<extra_id_249>",
|
| 437 |
+
"lstrip": false,
|
| 438 |
+
"normalized": false,
|
| 439 |
+
"rstrip": false,
|
| 440 |
+
"single_word": false,
|
| 441 |
+
"special": true
|
| 442 |
+
},
|
| 443 |
+
"256051": {
|
| 444 |
+
"content": "<extra_id_248>",
|
| 445 |
+
"lstrip": false,
|
| 446 |
+
"normalized": false,
|
| 447 |
+
"rstrip": false,
|
| 448 |
+
"single_word": false,
|
| 449 |
+
"special": true
|
| 450 |
+
},
|
| 451 |
+
"256052": {
|
| 452 |
+
"content": "<extra_id_247>",
|
| 453 |
+
"lstrip": false,
|
| 454 |
+
"normalized": false,
|
| 455 |
+
"rstrip": false,
|
| 456 |
+
"single_word": false,
|
| 457 |
+
"special": true
|
| 458 |
+
},
|
| 459 |
+
"256053": {
|
| 460 |
+
"content": "<extra_id_246>",
|
| 461 |
+
"lstrip": false,
|
| 462 |
+
"normalized": false,
|
| 463 |
+
"rstrip": false,
|
| 464 |
+
"single_word": false,
|
| 465 |
+
"special": true
|
| 466 |
+
},
|
| 467 |
+
"256054": {
|
| 468 |
+
"content": "<extra_id_245>",
|
| 469 |
+
"lstrip": false,
|
| 470 |
+
"normalized": false,
|
| 471 |
+
"rstrip": false,
|
| 472 |
+
"single_word": false,
|
| 473 |
+
"special": true
|
| 474 |
+
},
|
| 475 |
+
"256055": {
|
| 476 |
+
"content": "<extra_id_244>",
|
| 477 |
+
"lstrip": false,
|
| 478 |
+
"normalized": false,
|
| 479 |
+
"rstrip": false,
|
| 480 |
+
"single_word": false,
|
| 481 |
+
"special": true
|
| 482 |
+
},
|
| 483 |
+
"256056": {
|
| 484 |
+
"content": "<extra_id_243>",
|
| 485 |
+
"lstrip": false,
|
| 486 |
+
"normalized": false,
|
| 487 |
+
"rstrip": false,
|
| 488 |
+
"single_word": false,
|
| 489 |
+
"special": true
|
| 490 |
+
},
|
| 491 |
+
"256057": {
|
| 492 |
+
"content": "<extra_id_242>",
|
| 493 |
+
"lstrip": false,
|
| 494 |
+
"normalized": false,
|
| 495 |
+
"rstrip": false,
|
| 496 |
+
"single_word": false,
|
| 497 |
+
"special": true
|
| 498 |
+
},
|
| 499 |
+
"256058": {
|
| 500 |
+
"content": "<extra_id_241>",
|
| 501 |
+
"lstrip": false,
|
| 502 |
+
"normalized": false,
|
| 503 |
+
"rstrip": false,
|
| 504 |
+
"single_word": false,
|
| 505 |
+
"special": true
|
| 506 |
+
},
|
| 507 |
+
"256059": {
|
| 508 |
+
"content": "<extra_id_240>",
|
| 509 |
+
"lstrip": false,
|
| 510 |
+
"normalized": false,
|
| 511 |
+
"rstrip": false,
|
| 512 |
+
"single_word": false,
|
| 513 |
+
"special": true
|
| 514 |
+
},
|
| 515 |
+
"256060": {
|
| 516 |
+
"content": "<extra_id_239>",
|
| 517 |
+
"lstrip": false,
|
| 518 |
+
"normalized": false,
|
| 519 |
+
"rstrip": false,
|
| 520 |
+
"single_word": false,
|
| 521 |
+
"special": true
|
| 522 |
+
},
|
| 523 |
+
"256061": {
|
| 524 |
+
"content": "<extra_id_238>",
|
| 525 |
+
"lstrip": false,
|
| 526 |
+
"normalized": false,
|
| 527 |
+
"rstrip": false,
|
| 528 |
+
"single_word": false,
|
| 529 |
+
"special": true
|
| 530 |
+
},
|
| 531 |
+
"256062": {
|
| 532 |
+
"content": "<extra_id_237>",
|
| 533 |
+
"lstrip": false,
|
| 534 |
+
"normalized": false,
|
| 535 |
+
"rstrip": false,
|
| 536 |
+
"single_word": false,
|
| 537 |
+
"special": true
|
| 538 |
+
},
|
| 539 |
+
"256063": {
|
| 540 |
+
"content": "<extra_id_236>",
|
| 541 |
+
"lstrip": false,
|
| 542 |
+
"normalized": false,
|
| 543 |
+
"rstrip": false,
|
| 544 |
+
"single_word": false,
|
| 545 |
+
"special": true
|
| 546 |
+
},
|
| 547 |
+
"256064": {
|
| 548 |
+
"content": "<extra_id_235>",
|
| 549 |
+
"lstrip": false,
|
| 550 |
+
"normalized": false,
|
| 551 |
+
"rstrip": false,
|
| 552 |
+
"single_word": false,
|
| 553 |
+
"special": true
|
| 554 |
+
},
|
| 555 |
+
"256065": {
|
| 556 |
+
"content": "<extra_id_234>",
|
| 557 |
+
"lstrip": false,
|
| 558 |
+
"normalized": false,
|
| 559 |
+
"rstrip": false,
|
| 560 |
+
"single_word": false,
|
| 561 |
+
"special": true
|
| 562 |
+
},
|
| 563 |
+
"256066": {
|
| 564 |
+
"content": "<extra_id_233>",
|
| 565 |
+
"lstrip": false,
|
| 566 |
+
"normalized": false,
|
| 567 |
+
"rstrip": false,
|
| 568 |
+
"single_word": false,
|
| 569 |
+
"special": true
|
| 570 |
+
},
|
| 571 |
+
"256067": {
|
| 572 |
+
"content": "<extra_id_232>",
|
| 573 |
+
"lstrip": false,
|
| 574 |
+
"normalized": false,
|
| 575 |
+
"rstrip": false,
|
| 576 |
+
"single_word": false,
|
| 577 |
+
"special": true
|
| 578 |
+
},
|
| 579 |
+
"256068": {
|
| 580 |
+
"content": "<extra_id_231>",
|
| 581 |
+
"lstrip": false,
|
| 582 |
+
"normalized": false,
|
| 583 |
+
"rstrip": false,
|
| 584 |
+
"single_word": false,
|
| 585 |
+
"special": true
|
| 586 |
+
},
|
| 587 |
+
"256069": {
|
| 588 |
+
"content": "<extra_id_230>",
|
| 589 |
+
"lstrip": false,
|
| 590 |
+
"normalized": false,
|
| 591 |
+
"rstrip": false,
|
| 592 |
+
"single_word": false,
|
| 593 |
+
"special": true
|
| 594 |
+
},
|
| 595 |
+
"256070": {
|
| 596 |
+
"content": "<extra_id_229>",
|
| 597 |
+
"lstrip": false,
|
| 598 |
+
"normalized": false,
|
| 599 |
+
"rstrip": false,
|
| 600 |
+
"single_word": false,
|
| 601 |
+
"special": true
|
| 602 |
+
},
|
| 603 |
+
"256071": {
|
| 604 |
+
"content": "<extra_id_228>",
|
| 605 |
+
"lstrip": false,
|
| 606 |
+
"normalized": false,
|
| 607 |
+
"rstrip": false,
|
| 608 |
+
"single_word": false,
|
| 609 |
+
"special": true
|
| 610 |
+
},
|
| 611 |
+
"256072": {
|
| 612 |
+
"content": "<extra_id_227>",
|
| 613 |
+
"lstrip": false,
|
| 614 |
+
"normalized": false,
|
| 615 |
+
"rstrip": false,
|
| 616 |
+
"single_word": false,
|
| 617 |
+
"special": true
|
| 618 |
+
},
|
| 619 |
+
"256073": {
|
| 620 |
+
"content": "<extra_id_226>",
|
| 621 |
+
"lstrip": false,
|
| 622 |
+
"normalized": false,
|
| 623 |
+
"rstrip": false,
|
| 624 |
+
"single_word": false,
|
| 625 |
+
"special": true
|
| 626 |
+
},
|
| 627 |
+
"256074": {
|
| 628 |
+
"content": "<extra_id_225>",
|
| 629 |
+
"lstrip": false,
|
| 630 |
+
"normalized": false,
|
| 631 |
+
"rstrip": false,
|
| 632 |
+
"single_word": false,
|
| 633 |
+
"special": true
|
| 634 |
+
},
|
| 635 |
+
"256075": {
|
| 636 |
+
"content": "<extra_id_224>",
|
| 637 |
+
"lstrip": false,
|
| 638 |
+
"normalized": false,
|
| 639 |
+
"rstrip": false,
|
| 640 |
+
"single_word": false,
|
| 641 |
+
"special": true
|
| 642 |
+
},
|
| 643 |
+
"256076": {
|
| 644 |
+
"content": "<extra_id_223>",
|
| 645 |
+
"lstrip": false,
|
| 646 |
+
"normalized": false,
|
| 647 |
+
"rstrip": false,
|
| 648 |
+
"single_word": false,
|
| 649 |
+
"special": true
|
| 650 |
+
},
|
| 651 |
+
"256077": {
|
| 652 |
+
"content": "<extra_id_222>",
|
| 653 |
+
"lstrip": false,
|
| 654 |
+
"normalized": false,
|
| 655 |
+
"rstrip": false,
|
| 656 |
+
"single_word": false,
|
| 657 |
+
"special": true
|
| 658 |
+
},
|
| 659 |
+
"256078": {
|
| 660 |
+
"content": "<extra_id_221>",
|
| 661 |
+
"lstrip": false,
|
| 662 |
+
"normalized": false,
|
| 663 |
+
"rstrip": false,
|
| 664 |
+
"single_word": false,
|
| 665 |
+
"special": true
|
| 666 |
+
},
|
| 667 |
+
"256079": {
|
| 668 |
+
"content": "<extra_id_220>",
|
| 669 |
+
"lstrip": false,
|
| 670 |
+
"normalized": false,
|
| 671 |
+
"rstrip": false,
|
| 672 |
+
"single_word": false,
|
| 673 |
+
"special": true
|
| 674 |
+
},
|
| 675 |
+
"256080": {
|
| 676 |
+
"content": "<extra_id_219>",
|
| 677 |
+
"lstrip": false,
|
| 678 |
+
"normalized": false,
|
| 679 |
+
"rstrip": false,
|
| 680 |
+
"single_word": false,
|
| 681 |
+
"special": true
|
| 682 |
+
},
|
| 683 |
+
"256081": {
|
| 684 |
+
"content": "<extra_id_218>",
|
| 685 |
+
"lstrip": false,
|
| 686 |
+
"normalized": false,
|
| 687 |
+
"rstrip": false,
|
| 688 |
+
"single_word": false,
|
| 689 |
+
"special": true
|
| 690 |
+
},
|
| 691 |
+
"256082": {
|
| 692 |
+
"content": "<extra_id_217>",
|
| 693 |
+
"lstrip": false,
|
| 694 |
+
"normalized": false,
|
| 695 |
+
"rstrip": false,
|
| 696 |
+
"single_word": false,
|
| 697 |
+
"special": true
|
| 698 |
+
},
|
| 699 |
+
"256083": {
|
| 700 |
+
"content": "<extra_id_216>",
|
| 701 |
+
"lstrip": false,
|
| 702 |
+
"normalized": false,
|
| 703 |
+
"rstrip": false,
|
| 704 |
+
"single_word": false,
|
| 705 |
+
"special": true
|
| 706 |
+
},
|
| 707 |
+
"256084": {
|
| 708 |
+
"content": "<extra_id_215>",
|
| 709 |
+
"lstrip": false,
|
| 710 |
+
"normalized": false,
|
| 711 |
+
"rstrip": false,
|
| 712 |
+
"single_word": false,
|
| 713 |
+
"special": true
|
| 714 |
+
},
|
| 715 |
+
"256085": {
|
| 716 |
+
"content": "<extra_id_214>",
|
| 717 |
+
"lstrip": false,
|
| 718 |
+
"normalized": false,
|
| 719 |
+
"rstrip": false,
|
| 720 |
+
"single_word": false,
|
| 721 |
+
"special": true
|
| 722 |
+
},
|
| 723 |
+
"256086": {
|
| 724 |
+
"content": "<extra_id_213>",
|
| 725 |
+
"lstrip": false,
|
| 726 |
+
"normalized": false,
|
| 727 |
+
"rstrip": false,
|
| 728 |
+
"single_word": false,
|
| 729 |
+
"special": true
|
| 730 |
+
},
|
| 731 |
+
"256087": {
|
| 732 |
+
"content": "<extra_id_212>",
|
| 733 |
+
"lstrip": false,
|
| 734 |
+
"normalized": false,
|
| 735 |
+
"rstrip": false,
|
| 736 |
+
"single_word": false,
|
| 737 |
+
"special": true
|
| 738 |
+
},
|
| 739 |
+
"256088": {
|
| 740 |
+
"content": "<extra_id_211>",
|
| 741 |
+
"lstrip": false,
|
| 742 |
+
"normalized": false,
|
| 743 |
+
"rstrip": false,
|
| 744 |
+
"single_word": false,
|
| 745 |
+
"special": true
|
| 746 |
+
},
|
| 747 |
+
"256089": {
|
| 748 |
+
"content": "<extra_id_210>",
|
| 749 |
+
"lstrip": false,
|
| 750 |
+
"normalized": false,
|
| 751 |
+
"rstrip": false,
|
| 752 |
+
"single_word": false,
|
| 753 |
+
"special": true
|
| 754 |
+
},
|
| 755 |
+
"256090": {
|
| 756 |
+
"content": "<extra_id_209>",
|
| 757 |
+
"lstrip": false,
|
| 758 |
+
"normalized": false,
|
| 759 |
+
"rstrip": false,
|
| 760 |
+
"single_word": false,
|
| 761 |
+
"special": true
|
| 762 |
+
},
|
| 763 |
+
"256091": {
|
| 764 |
+
"content": "<extra_id_208>",
|
| 765 |
+
"lstrip": false,
|
| 766 |
+
"normalized": false,
|
| 767 |
+
"rstrip": false,
|
| 768 |
+
"single_word": false,
|
| 769 |
+
"special": true
|
| 770 |
+
},
|
| 771 |
+
"256092": {
|
| 772 |
+
"content": "<extra_id_207>",
|
| 773 |
+
"lstrip": false,
|
| 774 |
+
"normalized": false,
|
| 775 |
+
"rstrip": false,
|
| 776 |
+
"single_word": false,
|
| 777 |
+
"special": true
|
| 778 |
+
},
|
| 779 |
+
"256093": {
|
| 780 |
+
"content": "<extra_id_206>",
|
| 781 |
+
"lstrip": false,
|
| 782 |
+
"normalized": false,
|
| 783 |
+
"rstrip": false,
|
| 784 |
+
"single_word": false,
|
| 785 |
+
"special": true
|
| 786 |
+
},
|
| 787 |
+
"256094": {
|
| 788 |
+
"content": "<extra_id_205>",
|
| 789 |
+
"lstrip": false,
|
| 790 |
+
"normalized": false,
|
| 791 |
+
"rstrip": false,
|
| 792 |
+
"single_word": false,
|
| 793 |
+
"special": true
|
| 794 |
+
},
|
| 795 |
+
"256095": {
|
| 796 |
+
"content": "<extra_id_204>",
|
| 797 |
+
"lstrip": false,
|
| 798 |
+
"normalized": false,
|
| 799 |
+
"rstrip": false,
|
| 800 |
+
"single_word": false,
|
| 801 |
+
"special": true
|
| 802 |
+
},
|
| 803 |
+
"256096": {
|
| 804 |
+
"content": "<extra_id_203>",
|
| 805 |
+
"lstrip": false,
|
| 806 |
+
"normalized": false,
|
| 807 |
+
"rstrip": false,
|
| 808 |
+
"single_word": false,
|
| 809 |
+
"special": true
|
| 810 |
+
},
|
| 811 |
+
"256097": {
|
| 812 |
+
"content": "<extra_id_202>",
|
| 813 |
+
"lstrip": false,
|
| 814 |
+
"normalized": false,
|
| 815 |
+
"rstrip": false,
|
| 816 |
+
"single_word": false,
|
| 817 |
+
"special": true
|
| 818 |
+
},
|
| 819 |
+
"256098": {
|
| 820 |
+
"content": "<extra_id_201>",
|
| 821 |
+
"lstrip": false,
|
| 822 |
+
"normalized": false,
|
| 823 |
+
"rstrip": false,
|
| 824 |
+
"single_word": false,
|
| 825 |
+
"special": true
|
| 826 |
+
},
|
| 827 |
+
"256099": {
|
| 828 |
+
"content": "<extra_id_200>",
|
| 829 |
+
"lstrip": false,
|
| 830 |
+
"normalized": false,
|
| 831 |
+
"rstrip": false,
|
| 832 |
+
"single_word": false,
|
| 833 |
+
"special": true
|
| 834 |
+
},
|
| 835 |
+
"256100": {
|
| 836 |
+
"content": "<extra_id_199>",
|
| 837 |
+
"lstrip": false,
|
| 838 |
+
"normalized": false,
|
| 839 |
+
"rstrip": false,
|
| 840 |
+
"single_word": false,
|
| 841 |
+
"special": true
|
| 842 |
+
},
|
| 843 |
+
"256101": {
|
| 844 |
+
"content": "<extra_id_198>",
|
| 845 |
+
"lstrip": false,
|
| 846 |
+
"normalized": false,
|
| 847 |
+
"rstrip": false,
|
| 848 |
+
"single_word": false,
|
| 849 |
+
"special": true
|
| 850 |
+
},
|
| 851 |
+
"256102": {
|
| 852 |
+
"content": "<extra_id_197>",
|
| 853 |
+
"lstrip": false,
|
| 854 |
+
"normalized": false,
|
| 855 |
+
"rstrip": false,
|
| 856 |
+
"single_word": false,
|
| 857 |
+
"special": true
|
| 858 |
+
},
|
| 859 |
+
"256103": {
|
| 860 |
+
"content": "<extra_id_196>",
|
| 861 |
+
"lstrip": false,
|
| 862 |
+
"normalized": false,
|
| 863 |
+
"rstrip": false,
|
| 864 |
+
"single_word": false,
|
| 865 |
+
"special": true
|
| 866 |
+
},
|
| 867 |
+
"256104": {
|
| 868 |
+
"content": "<extra_id_195>",
|
| 869 |
+
"lstrip": false,
|
| 870 |
+
"normalized": false,
|
| 871 |
+
"rstrip": false,
|
| 872 |
+
"single_word": false,
|
| 873 |
+
"special": true
|
| 874 |
+
},
|
| 875 |
+
"256105": {
|
| 876 |
+
"content": "<extra_id_194>",
|
| 877 |
+
"lstrip": false,
|
| 878 |
+
"normalized": false,
|
| 879 |
+
"rstrip": false,
|
| 880 |
+
"single_word": false,
|
| 881 |
+
"special": true
|
| 882 |
+
},
|
| 883 |
+
"256106": {
|
| 884 |
+
"content": "<extra_id_193>",
|
| 885 |
+
"lstrip": false,
|
| 886 |
+
"normalized": false,
|
| 887 |
+
"rstrip": false,
|
| 888 |
+
"single_word": false,
|
| 889 |
+
"special": true
|
| 890 |
+
},
|
| 891 |
+
"256107": {
|
| 892 |
+
"content": "<extra_id_192>",
|
| 893 |
+
"lstrip": false,
|
| 894 |
+
"normalized": false,
|
| 895 |
+
"rstrip": false,
|
| 896 |
+
"single_word": false,
|
| 897 |
+
"special": true
|
| 898 |
+
},
|
| 899 |
+
"256108": {
|
| 900 |
+
"content": "<extra_id_191>",
|
| 901 |
+
"lstrip": false,
|
| 902 |
+
"normalized": false,
|
| 903 |
+
"rstrip": false,
|
| 904 |
+
"single_word": false,
|
| 905 |
+
"special": true
|
| 906 |
+
},
|
| 907 |
+
"256109": {
|
| 908 |
+
"content": "<extra_id_190>",
|
| 909 |
+
"lstrip": false,
|
| 910 |
+
"normalized": false,
|
| 911 |
+
"rstrip": false,
|
| 912 |
+
"single_word": false,
|
| 913 |
+
"special": true
|
| 914 |
+
},
|
| 915 |
+
"256110": {
|
| 916 |
+
"content": "<extra_id_189>",
|
| 917 |
+
"lstrip": false,
|
| 918 |
+
"normalized": false,
|
| 919 |
+
"rstrip": false,
|
| 920 |
+
"single_word": false,
|
| 921 |
+
"special": true
|
| 922 |
+
},
|
| 923 |
+
"256111": {
|
| 924 |
+
"content": "<extra_id_188>",
|
| 925 |
+
"lstrip": false,
|
| 926 |
+
"normalized": false,
|
| 927 |
+
"rstrip": false,
|
| 928 |
+
"single_word": false,
|
| 929 |
+
"special": true
|
| 930 |
+
},
|
| 931 |
+
"256112": {
|
| 932 |
+
"content": "<extra_id_187>",
|
| 933 |
+
"lstrip": false,
|
| 934 |
+
"normalized": false,
|
| 935 |
+
"rstrip": false,
|
| 936 |
+
"single_word": false,
|
| 937 |
+
"special": true
|
| 938 |
+
},
|
| 939 |
+
"256113": {
|
| 940 |
+
"content": "<extra_id_186>",
|
| 941 |
+
"lstrip": false,
|
| 942 |
+
"normalized": false,
|
| 943 |
+
"rstrip": false,
|
| 944 |
+
"single_word": false,
|
| 945 |
+
"special": true
|
| 946 |
+
},
|
| 947 |
+
"256114": {
|
| 948 |
+
"content": "<extra_id_185>",
|
| 949 |
+
"lstrip": false,
|
| 950 |
+
"normalized": false,
|
| 951 |
+
"rstrip": false,
|
| 952 |
+
"single_word": false,
|
| 953 |
+
"special": true
|
| 954 |
+
},
|
| 955 |
+
"256115": {
|
| 956 |
+
"content": "<extra_id_184>",
|
| 957 |
+
"lstrip": false,
|
| 958 |
+
"normalized": false,
|
| 959 |
+
"rstrip": false,
|
| 960 |
+
"single_word": false,
|
| 961 |
+
"special": true
|
| 962 |
+
},
|
| 963 |
+
"256116": {
|
| 964 |
+
"content": "<extra_id_183>",
|
| 965 |
+
"lstrip": false,
|
| 966 |
+
"normalized": false,
|
| 967 |
+
"rstrip": false,
|
| 968 |
+
"single_word": false,
|
| 969 |
+
"special": true
|
| 970 |
+
},
|
| 971 |
+
"256117": {
|
| 972 |
+
"content": "<extra_id_182>",
|
| 973 |
+
"lstrip": false,
|
| 974 |
+
"normalized": false,
|
| 975 |
+
"rstrip": false,
|
| 976 |
+
"single_word": false,
|
| 977 |
+
"special": true
|
| 978 |
+
},
|
| 979 |
+
"256118": {
|
| 980 |
+
"content": "<extra_id_181>",
|
| 981 |
+
"lstrip": false,
|
| 982 |
+
"normalized": false,
|
| 983 |
+
"rstrip": false,
|
| 984 |
+
"single_word": false,
|
| 985 |
+
"special": true
|
| 986 |
+
},
|
| 987 |
+
"256119": {
|
| 988 |
+
"content": "<extra_id_180>",
|
| 989 |
+
"lstrip": false,
|
| 990 |
+
"normalized": false,
|
| 991 |
+
"rstrip": false,
|
| 992 |
+
"single_word": false,
|
| 993 |
+
"special": true
|
| 994 |
+
},
|
| 995 |
+
"256120": {
|
| 996 |
+
"content": "<extra_id_179>",
|
| 997 |
+
"lstrip": false,
|
| 998 |
+
"normalized": false,
|
| 999 |
+
"rstrip": false,
|
| 1000 |
+
"single_word": false,
|
| 1001 |
+
"special": true
|
| 1002 |
+
},
|
| 1003 |
+
"256121": {
|
| 1004 |
+
"content": "<extra_id_178>",
|
| 1005 |
+
"lstrip": false,
|
| 1006 |
+
"normalized": false,
|
| 1007 |
+
"rstrip": false,
|
| 1008 |
+
"single_word": false,
|
| 1009 |
+
"special": true
|
| 1010 |
+
},
|
| 1011 |
+
"256122": {
|
| 1012 |
+
"content": "<extra_id_177>",
|
| 1013 |
+
"lstrip": false,
|
| 1014 |
+
"normalized": false,
|
| 1015 |
+
"rstrip": false,
|
| 1016 |
+
"single_word": false,
|
| 1017 |
+
"special": true
|
| 1018 |
+
},
|
| 1019 |
+
"256123": {
|
| 1020 |
+
"content": "<extra_id_176>",
|
| 1021 |
+
"lstrip": false,
|
| 1022 |
+
"normalized": false,
|
| 1023 |
+
"rstrip": false,
|
| 1024 |
+
"single_word": false,
|
| 1025 |
+
"special": true
|
| 1026 |
+
},
|
| 1027 |
+
"256124": {
|
| 1028 |
+
"content": "<extra_id_175>",
|
| 1029 |
+
"lstrip": false,
|
| 1030 |
+
"normalized": false,
|
| 1031 |
+
"rstrip": false,
|
| 1032 |
+
"single_word": false,
|
| 1033 |
+
"special": true
|
| 1034 |
+
},
|
| 1035 |
+
"256125": {
|
| 1036 |
+
"content": "<extra_id_174>",
|
| 1037 |
+
"lstrip": false,
|
| 1038 |
+
"normalized": false,
|
| 1039 |
+
"rstrip": false,
|
| 1040 |
+
"single_word": false,
|
| 1041 |
+
"special": true
|
| 1042 |
+
},
|
| 1043 |
+
"256126": {
|
| 1044 |
+
"content": "<extra_id_173>",
|
| 1045 |
+
"lstrip": false,
|
| 1046 |
+
"normalized": false,
|
| 1047 |
+
"rstrip": false,
|
| 1048 |
+
"single_word": false,
|
| 1049 |
+
"special": true
|
| 1050 |
+
},
|
| 1051 |
+
"256127": {
|
| 1052 |
+
"content": "<extra_id_172>",
|
| 1053 |
+
"lstrip": false,
|
| 1054 |
+
"normalized": false,
|
| 1055 |
+
"rstrip": false,
|
| 1056 |
+
"single_word": false,
|
| 1057 |
+
"special": true
|
| 1058 |
+
},
|
| 1059 |
+
"256128": {
|
| 1060 |
+
"content": "<extra_id_171>",
|
| 1061 |
+
"lstrip": false,
|
| 1062 |
+
"normalized": false,
|
| 1063 |
+
"rstrip": false,
|
| 1064 |
+
"single_word": false,
|
| 1065 |
+
"special": true
|
| 1066 |
+
},
|
| 1067 |
+
"256129": {
|
| 1068 |
+
"content": "<extra_id_170>",
|
| 1069 |
+
"lstrip": false,
|
| 1070 |
+
"normalized": false,
|
| 1071 |
+
"rstrip": false,
|
| 1072 |
+
"single_word": false,
|
| 1073 |
+
"special": true
|
| 1074 |
+
},
|
| 1075 |
+
"256130": {
|
| 1076 |
+
"content": "<extra_id_169>",
|
| 1077 |
+
"lstrip": false,
|
| 1078 |
+
"normalized": false,
|
| 1079 |
+
"rstrip": false,
|
| 1080 |
+
"single_word": false,
|
| 1081 |
+
"special": true
|
| 1082 |
+
},
|
| 1083 |
+
"256131": {
|
| 1084 |
+
"content": "<extra_id_168>",
|
| 1085 |
+
"lstrip": false,
|
| 1086 |
+
"normalized": false,
|
| 1087 |
+
"rstrip": false,
|
| 1088 |
+
"single_word": false,
|
| 1089 |
+
"special": true
|
| 1090 |
+
},
|
| 1091 |
+
"256132": {
|
| 1092 |
+
"content": "<extra_id_167>",
|
| 1093 |
+
"lstrip": false,
|
| 1094 |
+
"normalized": false,
|
| 1095 |
+
"rstrip": false,
|
| 1096 |
+
"single_word": false,
|
| 1097 |
+
"special": true
|
| 1098 |
+
},
|
| 1099 |
+
"256133": {
|
| 1100 |
+
"content": "<extra_id_166>",
|
| 1101 |
+
"lstrip": false,
|
| 1102 |
+
"normalized": false,
|
| 1103 |
+
"rstrip": false,
|
| 1104 |
+
"single_word": false,
|
| 1105 |
+
"special": true
|
| 1106 |
+
},
|
| 1107 |
+
"256134": {
|
| 1108 |
+
"content": "<extra_id_165>",
|
| 1109 |
+
"lstrip": false,
|
| 1110 |
+
"normalized": false,
|
| 1111 |
+
"rstrip": false,
|
| 1112 |
+
"single_word": false,
|
| 1113 |
+
"special": true
|
| 1114 |
+
},
|
| 1115 |
+
"256135": {
|
| 1116 |
+
"content": "<extra_id_164>",
|
| 1117 |
+
"lstrip": false,
|
| 1118 |
+
"normalized": false,
|
| 1119 |
+
"rstrip": false,
|
| 1120 |
+
"single_word": false,
|
| 1121 |
+
"special": true
|
| 1122 |
+
},
|
| 1123 |
+
"256136": {
|
| 1124 |
+
"content": "<extra_id_163>",
|
| 1125 |
+
"lstrip": false,
|
| 1126 |
+
"normalized": false,
|
| 1127 |
+
"rstrip": false,
|
| 1128 |
+
"single_word": false,
|
| 1129 |
+
"special": true
|
| 1130 |
+
},
|
| 1131 |
+
"256137": {
|
| 1132 |
+
"content": "<extra_id_162>",
|
| 1133 |
+
"lstrip": false,
|
| 1134 |
+
"normalized": false,
|
| 1135 |
+
"rstrip": false,
|
| 1136 |
+
"single_word": false,
|
| 1137 |
+
"special": true
|
| 1138 |
+
},
|
| 1139 |
+
"256138": {
|
| 1140 |
+
"content": "<extra_id_161>",
|
| 1141 |
+
"lstrip": false,
|
| 1142 |
+
"normalized": false,
|
| 1143 |
+
"rstrip": false,
|
| 1144 |
+
"single_word": false,
|
| 1145 |
+
"special": true
|
| 1146 |
+
},
|
| 1147 |
+
"256139": {
|
| 1148 |
+
"content": "<extra_id_160>",
|
| 1149 |
+
"lstrip": false,
|
| 1150 |
+
"normalized": false,
|
| 1151 |
+
"rstrip": false,
|
| 1152 |
+
"single_word": false,
|
| 1153 |
+
"special": true
|
| 1154 |
+
},
|
| 1155 |
+
"256140": {
|
| 1156 |
+
"content": "<extra_id_159>",
|
| 1157 |
+
"lstrip": false,
|
| 1158 |
+
"normalized": false,
|
| 1159 |
+
"rstrip": false,
|
| 1160 |
+
"single_word": false,
|
| 1161 |
+
"special": true
|
| 1162 |
+
},
|
| 1163 |
+
"256141": {
|
| 1164 |
+
"content": "<extra_id_158>",
|
| 1165 |
+
"lstrip": false,
|
| 1166 |
+
"normalized": false,
|
| 1167 |
+
"rstrip": false,
|
| 1168 |
+
"single_word": false,
|
| 1169 |
+
"special": true
|
| 1170 |
+
},
|
| 1171 |
+
"256142": {
|
| 1172 |
+
"content": "<extra_id_157>",
|
| 1173 |
+
"lstrip": false,
|
| 1174 |
+
"normalized": false,
|
| 1175 |
+
"rstrip": false,
|
| 1176 |
+
"single_word": false,
|
| 1177 |
+
"special": true
|
| 1178 |
+
},
|
| 1179 |
+
"256143": {
|
| 1180 |
+
"content": "<extra_id_156>",
|
| 1181 |
+
"lstrip": false,
|
| 1182 |
+
"normalized": false,
|
| 1183 |
+
"rstrip": false,
|
| 1184 |
+
"single_word": false,
|
| 1185 |
+
"special": true
|
| 1186 |
+
},
|
| 1187 |
+
"256144": {
|
| 1188 |
+
"content": "<extra_id_155>",
|
| 1189 |
+
"lstrip": false,
|
| 1190 |
+
"normalized": false,
|
| 1191 |
+
"rstrip": false,
|
| 1192 |
+
"single_word": false,
|
| 1193 |
+
"special": true
|
| 1194 |
+
},
|
| 1195 |
+
"256145": {
|
| 1196 |
+
"content": "<extra_id_154>",
|
| 1197 |
+
"lstrip": false,
|
| 1198 |
+
"normalized": false,
|
| 1199 |
+
"rstrip": false,
|
| 1200 |
+
"single_word": false,
|
| 1201 |
+
"special": true
|
| 1202 |
+
},
|
| 1203 |
+
"256146": {
|
| 1204 |
+
"content": "<extra_id_153>",
|
| 1205 |
+
"lstrip": false,
|
| 1206 |
+
"normalized": false,
|
| 1207 |
+
"rstrip": false,
|
| 1208 |
+
"single_word": false,
|
| 1209 |
+
"special": true
|
| 1210 |
+
},
|
| 1211 |
+
"256147": {
|
| 1212 |
+
"content": "<extra_id_152>",
|
| 1213 |
+
"lstrip": false,
|
| 1214 |
+
"normalized": false,
|
| 1215 |
+
"rstrip": false,
|
| 1216 |
+
"single_word": false,
|
| 1217 |
+
"special": true
|
| 1218 |
+
},
|
| 1219 |
+
"256148": {
|
| 1220 |
+
"content": "<extra_id_151>",
|
| 1221 |
+
"lstrip": false,
|
| 1222 |
+
"normalized": false,
|
| 1223 |
+
"rstrip": false,
|
| 1224 |
+
"single_word": false,
|
| 1225 |
+
"special": true
|
| 1226 |
+
},
|
| 1227 |
+
"256149": {
|
| 1228 |
+
"content": "<extra_id_150>",
|
| 1229 |
+
"lstrip": false,
|
| 1230 |
+
"normalized": false,
|
| 1231 |
+
"rstrip": false,
|
| 1232 |
+
"single_word": false,
|
| 1233 |
+
"special": true
|
| 1234 |
+
},
|
| 1235 |
+
"256150": {
|
| 1236 |
+
"content": "<extra_id_149>",
|
| 1237 |
+
"lstrip": false,
|
| 1238 |
+
"normalized": false,
|
| 1239 |
+
"rstrip": false,
|
| 1240 |
+
"single_word": false,
|
| 1241 |
+
"special": true
|
| 1242 |
+
},
|
| 1243 |
+
"256151": {
|
| 1244 |
+
"content": "<extra_id_148>",
|
| 1245 |
+
"lstrip": false,
|
| 1246 |
+
"normalized": false,
|
| 1247 |
+
"rstrip": false,
|
| 1248 |
+
"single_word": false,
|
| 1249 |
+
"special": true
|
| 1250 |
+
},
|
| 1251 |
+
"256152": {
|
| 1252 |
+
"content": "<extra_id_147>",
|
| 1253 |
+
"lstrip": false,
|
| 1254 |
+
"normalized": false,
|
| 1255 |
+
"rstrip": false,
|
| 1256 |
+
"single_word": false,
|
| 1257 |
+
"special": true
|
| 1258 |
+
},
|
| 1259 |
+
"256153": {
|
| 1260 |
+
"content": "<extra_id_146>",
|
| 1261 |
+
"lstrip": false,
|
| 1262 |
+
"normalized": false,
|
| 1263 |
+
"rstrip": false,
|
| 1264 |
+
"single_word": false,
|
| 1265 |
+
"special": true
|
| 1266 |
+
},
|
| 1267 |
+
"256154": {
|
| 1268 |
+
"content": "<extra_id_145>",
|
| 1269 |
+
"lstrip": false,
|
| 1270 |
+
"normalized": false,
|
| 1271 |
+
"rstrip": false,
|
| 1272 |
+
"single_word": false,
|
| 1273 |
+
"special": true
|
| 1274 |
+
},
|
| 1275 |
+
"256155": {
|
| 1276 |
+
"content": "<extra_id_144>",
|
| 1277 |
+
"lstrip": false,
|
| 1278 |
+
"normalized": false,
|
| 1279 |
+
"rstrip": false,
|
| 1280 |
+
"single_word": false,
|
| 1281 |
+
"special": true
|
| 1282 |
+
},
|
| 1283 |
+
"256156": {
|
| 1284 |
+
"content": "<extra_id_143>",
|
| 1285 |
+
"lstrip": false,
|
| 1286 |
+
"normalized": false,
|
| 1287 |
+
"rstrip": false,
|
| 1288 |
+
"single_word": false,
|
| 1289 |
+
"special": true
|
| 1290 |
+
},
|
| 1291 |
+
"256157": {
|
| 1292 |
+
"content": "<extra_id_142>",
|
| 1293 |
+
"lstrip": false,
|
| 1294 |
+
"normalized": false,
|
| 1295 |
+
"rstrip": false,
|
| 1296 |
+
"single_word": false,
|
| 1297 |
+
"special": true
|
| 1298 |
+
},
|
| 1299 |
+
"256158": {
|
| 1300 |
+
"content": "<extra_id_141>",
|
| 1301 |
+
"lstrip": false,
|
| 1302 |
+
"normalized": false,
|
| 1303 |
+
"rstrip": false,
|
| 1304 |
+
"single_word": false,
|
| 1305 |
+
"special": true
|
| 1306 |
+
},
|
| 1307 |
+
"256159": {
|
| 1308 |
+
"content": "<extra_id_140>",
|
| 1309 |
+
"lstrip": false,
|
| 1310 |
+
"normalized": false,
|
| 1311 |
+
"rstrip": false,
|
| 1312 |
+
"single_word": false,
|
| 1313 |
+
"special": true
|
| 1314 |
+
},
|
| 1315 |
+
"256160": {
|
| 1316 |
+
"content": "<extra_id_139>",
|
| 1317 |
+
"lstrip": false,
|
| 1318 |
+
"normalized": false,
|
| 1319 |
+
"rstrip": false,
|
| 1320 |
+
"single_word": false,
|
| 1321 |
+
"special": true
|
| 1322 |
+
},
|
| 1323 |
+
"256161": {
|
| 1324 |
+
"content": "<extra_id_138>",
|
| 1325 |
+
"lstrip": false,
|
| 1326 |
+
"normalized": false,
|
| 1327 |
+
"rstrip": false,
|
| 1328 |
+
"single_word": false,
|
| 1329 |
+
"special": true
|
| 1330 |
+
},
|
| 1331 |
+
"256162": {
|
| 1332 |
+
"content": "<extra_id_137>",
|
| 1333 |
+
"lstrip": false,
|
| 1334 |
+
"normalized": false,
|
| 1335 |
+
"rstrip": false,
|
| 1336 |
+
"single_word": false,
|
| 1337 |
+
"special": true
|
| 1338 |
+
},
|
| 1339 |
+
"256163": {
|
| 1340 |
+
"content": "<extra_id_136>",
|
| 1341 |
+
"lstrip": false,
|
| 1342 |
+
"normalized": false,
|
| 1343 |
+
"rstrip": false,
|
| 1344 |
+
"single_word": false,
|
| 1345 |
+
"special": true
|
| 1346 |
+
},
|
| 1347 |
+
"256164": {
|
| 1348 |
+
"content": "<extra_id_135>",
|
| 1349 |
+
"lstrip": false,
|
| 1350 |
+
"normalized": false,
|
| 1351 |
+
"rstrip": false,
|
| 1352 |
+
"single_word": false,
|
| 1353 |
+
"special": true
|
| 1354 |
+
},
|
| 1355 |
+
"256165": {
|
| 1356 |
+
"content": "<extra_id_134>",
|
| 1357 |
+
"lstrip": false,
|
| 1358 |
+
"normalized": false,
|
| 1359 |
+
"rstrip": false,
|
| 1360 |
+
"single_word": false,
|
| 1361 |
+
"special": true
|
| 1362 |
+
},
|
| 1363 |
+
"256166": {
|
| 1364 |
+
"content": "<extra_id_133>",
|
| 1365 |
+
"lstrip": false,
|
| 1366 |
+
"normalized": false,
|
| 1367 |
+
"rstrip": false,
|
| 1368 |
+
"single_word": false,
|
| 1369 |
+
"special": true
|
| 1370 |
+
},
|
| 1371 |
+
"256167": {
|
| 1372 |
+
"content": "<extra_id_132>",
|
| 1373 |
+
"lstrip": false,
|
| 1374 |
+
"normalized": false,
|
| 1375 |
+
"rstrip": false,
|
| 1376 |
+
"single_word": false,
|
| 1377 |
+
"special": true
|
| 1378 |
+
},
|
| 1379 |
+
"256168": {
|
| 1380 |
+
"content": "<extra_id_131>",
|
| 1381 |
+
"lstrip": false,
|
| 1382 |
+
"normalized": false,
|
| 1383 |
+
"rstrip": false,
|
| 1384 |
+
"single_word": false,
|
| 1385 |
+
"special": true
|
| 1386 |
+
},
|
| 1387 |
+
"256169": {
|
| 1388 |
+
"content": "<extra_id_130>",
|
| 1389 |
+
"lstrip": false,
|
| 1390 |
+
"normalized": false,
|
| 1391 |
+
"rstrip": false,
|
| 1392 |
+
"single_word": false,
|
| 1393 |
+
"special": true
|
| 1394 |
+
},
|
| 1395 |
+
"256170": {
|
| 1396 |
+
"content": "<extra_id_129>",
|
| 1397 |
+
"lstrip": false,
|
| 1398 |
+
"normalized": false,
|
| 1399 |
+
"rstrip": false,
|
| 1400 |
+
"single_word": false,
|
| 1401 |
+
"special": true
|
| 1402 |
+
},
|
| 1403 |
+
"256171": {
|
| 1404 |
+
"content": "<extra_id_128>",
|
| 1405 |
+
"lstrip": false,
|
| 1406 |
+
"normalized": false,
|
| 1407 |
+
"rstrip": false,
|
| 1408 |
+
"single_word": false,
|
| 1409 |
+
"special": true
|
| 1410 |
+
},
|
| 1411 |
+
"256172": {
|
| 1412 |
+
"content": "<extra_id_127>",
|
| 1413 |
+
"lstrip": false,
|
| 1414 |
+
"normalized": false,
|
| 1415 |
+
"rstrip": false,
|
| 1416 |
+
"single_word": false,
|
| 1417 |
+
"special": true
|
| 1418 |
+
},
|
| 1419 |
+
"256173": {
|
| 1420 |
+
"content": "<extra_id_126>",
|
| 1421 |
+
"lstrip": false,
|
| 1422 |
+
"normalized": false,
|
| 1423 |
+
"rstrip": false,
|
| 1424 |
+
"single_word": false,
|
| 1425 |
+
"special": true
|
| 1426 |
+
},
|
| 1427 |
+
"256174": {
|
| 1428 |
+
"content": "<extra_id_125>",
|
| 1429 |
+
"lstrip": false,
|
| 1430 |
+
"normalized": false,
|
| 1431 |
+
"rstrip": false,
|
| 1432 |
+
"single_word": false,
|
| 1433 |
+
"special": true
|
| 1434 |
+
},
|
| 1435 |
+
"256175": {
|
| 1436 |
+
"content": "<extra_id_124>",
|
| 1437 |
+
"lstrip": false,
|
| 1438 |
+
"normalized": false,
|
| 1439 |
+
"rstrip": false,
|
| 1440 |
+
"single_word": false,
|
| 1441 |
+
"special": true
|
| 1442 |
+
},
|
| 1443 |
+
"256176": {
|
| 1444 |
+
"content": "<extra_id_123>",
|
| 1445 |
+
"lstrip": false,
|
| 1446 |
+
"normalized": false,
|
| 1447 |
+
"rstrip": false,
|
| 1448 |
+
"single_word": false,
|
| 1449 |
+
"special": true
|
| 1450 |
+
},
|
| 1451 |
+
"256177": {
|
| 1452 |
+
"content": "<extra_id_122>",
|
| 1453 |
+
"lstrip": false,
|
| 1454 |
+
"normalized": false,
|
| 1455 |
+
"rstrip": false,
|
| 1456 |
+
"single_word": false,
|
| 1457 |
+
"special": true
|
| 1458 |
+
},
|
| 1459 |
+
"256178": {
|
| 1460 |
+
"content": "<extra_id_121>",
|
| 1461 |
+
"lstrip": false,
|
| 1462 |
+
"normalized": false,
|
| 1463 |
+
"rstrip": false,
|
| 1464 |
+
"single_word": false,
|
| 1465 |
+
"special": true
|
| 1466 |
+
},
|
| 1467 |
+
"256179": {
|
| 1468 |
+
"content": "<extra_id_120>",
|
| 1469 |
+
"lstrip": false,
|
| 1470 |
+
"normalized": false,
|
| 1471 |
+
"rstrip": false,
|
| 1472 |
+
"single_word": false,
|
| 1473 |
+
"special": true
|
| 1474 |
+
},
|
| 1475 |
+
"256180": {
|
| 1476 |
+
"content": "<extra_id_119>",
|
| 1477 |
+
"lstrip": false,
|
| 1478 |
+
"normalized": false,
|
| 1479 |
+
"rstrip": false,
|
| 1480 |
+
"single_word": false,
|
| 1481 |
+
"special": true
|
| 1482 |
+
},
|
| 1483 |
+
"256181": {
|
| 1484 |
+
"content": "<extra_id_118>",
|
| 1485 |
+
"lstrip": false,
|
| 1486 |
+
"normalized": false,
|
| 1487 |
+
"rstrip": false,
|
| 1488 |
+
"single_word": false,
|
| 1489 |
+
"special": true
|
| 1490 |
+
},
|
| 1491 |
+
"256182": {
|
| 1492 |
+
"content": "<extra_id_117>",
|
| 1493 |
+
"lstrip": false,
|
| 1494 |
+
"normalized": false,
|
| 1495 |
+
"rstrip": false,
|
| 1496 |
+
"single_word": false,
|
| 1497 |
+
"special": true
|
| 1498 |
+
},
|
| 1499 |
+
"256183": {
|
| 1500 |
+
"content": "<extra_id_116>",
|
| 1501 |
+
"lstrip": false,
|
| 1502 |
+
"normalized": false,
|
| 1503 |
+
"rstrip": false,
|
| 1504 |
+
"single_word": false,
|
| 1505 |
+
"special": true
|
| 1506 |
+
},
|
| 1507 |
+
"256184": {
|
| 1508 |
+
"content": "<extra_id_115>",
|
| 1509 |
+
"lstrip": false,
|
| 1510 |
+
"normalized": false,
|
| 1511 |
+
"rstrip": false,
|
| 1512 |
+
"single_word": false,
|
| 1513 |
+
"special": true
|
| 1514 |
+
},
|
| 1515 |
+
"256185": {
|
| 1516 |
+
"content": "<extra_id_114>",
|
| 1517 |
+
"lstrip": false,
|
| 1518 |
+
"normalized": false,
|
| 1519 |
+
"rstrip": false,
|
| 1520 |
+
"single_word": false,
|
| 1521 |
+
"special": true
|
| 1522 |
+
},
|
| 1523 |
+
"256186": {
|
| 1524 |
+
"content": "<extra_id_113>",
|
| 1525 |
+
"lstrip": false,
|
| 1526 |
+
"normalized": false,
|
| 1527 |
+
"rstrip": false,
|
| 1528 |
+
"single_word": false,
|
| 1529 |
+
"special": true
|
| 1530 |
+
},
|
| 1531 |
+
"256187": {
|
| 1532 |
+
"content": "<extra_id_112>",
|
| 1533 |
+
"lstrip": false,
|
| 1534 |
+
"normalized": false,
|
| 1535 |
+
"rstrip": false,
|
| 1536 |
+
"single_word": false,
|
| 1537 |
+
"special": true
|
| 1538 |
+
},
|
| 1539 |
+
"256188": {
|
| 1540 |
+
"content": "<extra_id_111>",
|
| 1541 |
+
"lstrip": false,
|
| 1542 |
+
"normalized": false,
|
| 1543 |
+
"rstrip": false,
|
| 1544 |
+
"single_word": false,
|
| 1545 |
+
"special": true
|
| 1546 |
+
},
|
| 1547 |
+
"256189": {
|
| 1548 |
+
"content": "<extra_id_110>",
|
| 1549 |
+
"lstrip": false,
|
| 1550 |
+
"normalized": false,
|
| 1551 |
+
"rstrip": false,
|
| 1552 |
+
"single_word": false,
|
| 1553 |
+
"special": true
|
| 1554 |
+
},
|
| 1555 |
+
"256190": {
|
| 1556 |
+
"content": "<extra_id_109>",
|
| 1557 |
+
"lstrip": false,
|
| 1558 |
+
"normalized": false,
|
| 1559 |
+
"rstrip": false,
|
| 1560 |
+
"single_word": false,
|
| 1561 |
+
"special": true
|
| 1562 |
+
},
|
| 1563 |
+
"256191": {
|
| 1564 |
+
"content": "<extra_id_108>",
|
| 1565 |
+
"lstrip": false,
|
| 1566 |
+
"normalized": false,
|
| 1567 |
+
"rstrip": false,
|
| 1568 |
+
"single_word": false,
|
| 1569 |
+
"special": true
|
| 1570 |
+
},
|
| 1571 |
+
"256192": {
|
| 1572 |
+
"content": "<extra_id_107>",
|
| 1573 |
+
"lstrip": false,
|
| 1574 |
+
"normalized": false,
|
| 1575 |
+
"rstrip": false,
|
| 1576 |
+
"single_word": false,
|
| 1577 |
+
"special": true
|
| 1578 |
+
},
|
| 1579 |
+
"256193": {
|
| 1580 |
+
"content": "<extra_id_106>",
|
| 1581 |
+
"lstrip": false,
|
| 1582 |
+
"normalized": false,
|
| 1583 |
+
"rstrip": false,
|
| 1584 |
+
"single_word": false,
|
| 1585 |
+
"special": true
|
| 1586 |
+
},
|
| 1587 |
+
"256194": {
|
| 1588 |
+
"content": "<extra_id_105>",
|
| 1589 |
+
"lstrip": false,
|
| 1590 |
+
"normalized": false,
|
| 1591 |
+
"rstrip": false,
|
| 1592 |
+
"single_word": false,
|
| 1593 |
+
"special": true
|
| 1594 |
+
},
|
| 1595 |
+
"256195": {
|
| 1596 |
+
"content": "<extra_id_104>",
|
| 1597 |
+
"lstrip": false,
|
| 1598 |
+
"normalized": false,
|
| 1599 |
+
"rstrip": false,
|
| 1600 |
+
"single_word": false,
|
| 1601 |
+
"special": true
|
| 1602 |
+
},
|
| 1603 |
+
"256196": {
|
| 1604 |
+
"content": "<extra_id_103>",
|
| 1605 |
+
"lstrip": false,
|
| 1606 |
+
"normalized": false,
|
| 1607 |
+
"rstrip": false,
|
| 1608 |
+
"single_word": false,
|
| 1609 |
+
"special": true
|
| 1610 |
+
},
|
| 1611 |
+
"256197": {
|
| 1612 |
+
"content": "<extra_id_102>",
|
| 1613 |
+
"lstrip": false,
|
| 1614 |
+
"normalized": false,
|
| 1615 |
+
"rstrip": false,
|
| 1616 |
+
"single_word": false,
|
| 1617 |
+
"special": true
|
| 1618 |
+
},
|
| 1619 |
+
"256198": {
|
| 1620 |
+
"content": "<extra_id_101>",
|
| 1621 |
+
"lstrip": false,
|
| 1622 |
+
"normalized": false,
|
| 1623 |
+
"rstrip": false,
|
| 1624 |
+
"single_word": false,
|
| 1625 |
+
"special": true
|
| 1626 |
+
},
|
| 1627 |
+
"256199": {
|
| 1628 |
+
"content": "<extra_id_100>",
|
| 1629 |
+
"lstrip": false,
|
| 1630 |
+
"normalized": false,
|
| 1631 |
+
"rstrip": false,
|
| 1632 |
+
"single_word": false,
|
| 1633 |
+
"special": true
|
| 1634 |
+
},
|
| 1635 |
+
"256200": {
|
| 1636 |
+
"content": "<extra_id_99>",
|
| 1637 |
+
"lstrip": false,
|
| 1638 |
+
"normalized": false,
|
| 1639 |
+
"rstrip": false,
|
| 1640 |
+
"single_word": false,
|
| 1641 |
+
"special": true
|
| 1642 |
+
},
|
| 1643 |
+
"256201": {
|
| 1644 |
+
"content": "<extra_id_98>",
|
| 1645 |
+
"lstrip": false,
|
| 1646 |
+
"normalized": false,
|
| 1647 |
+
"rstrip": false,
|
| 1648 |
+
"single_word": false,
|
| 1649 |
+
"special": true
|
| 1650 |
+
},
|
| 1651 |
+
"256202": {
|
| 1652 |
+
"content": "<extra_id_97>",
|
| 1653 |
+
"lstrip": false,
|
| 1654 |
+
"normalized": false,
|
| 1655 |
+
"rstrip": false,
|
| 1656 |
+
"single_word": false,
|
| 1657 |
+
"special": true
|
| 1658 |
+
},
|
| 1659 |
+
"256203": {
|
| 1660 |
+
"content": "<extra_id_96>",
|
| 1661 |
+
"lstrip": false,
|
| 1662 |
+
"normalized": false,
|
| 1663 |
+
"rstrip": false,
|
| 1664 |
+
"single_word": false,
|
| 1665 |
+
"special": true
|
| 1666 |
+
},
|
| 1667 |
+
"256204": {
|
| 1668 |
+
"content": "<extra_id_95>",
|
| 1669 |
+
"lstrip": false,
|
| 1670 |
+
"normalized": false,
|
| 1671 |
+
"rstrip": false,
|
| 1672 |
+
"single_word": false,
|
| 1673 |
+
"special": true
|
| 1674 |
+
},
|
| 1675 |
+
"256205": {
|
| 1676 |
+
"content": "<extra_id_94>",
|
| 1677 |
+
"lstrip": false,
|
| 1678 |
+
"normalized": false,
|
| 1679 |
+
"rstrip": false,
|
| 1680 |
+
"single_word": false,
|
| 1681 |
+
"special": true
|
| 1682 |
+
},
|
| 1683 |
+
"256206": {
|
| 1684 |
+
"content": "<extra_id_93>",
|
| 1685 |
+
"lstrip": false,
|
| 1686 |
+
"normalized": false,
|
| 1687 |
+
"rstrip": false,
|
| 1688 |
+
"single_word": false,
|
| 1689 |
+
"special": true
|
| 1690 |
+
},
|
| 1691 |
+
"256207": {
|
| 1692 |
+
"content": "<extra_id_92>",
|
| 1693 |
+
"lstrip": false,
|
| 1694 |
+
"normalized": false,
|
| 1695 |
+
"rstrip": false,
|
| 1696 |
+
"single_word": false,
|
| 1697 |
+
"special": true
|
| 1698 |
+
},
|
| 1699 |
+
"256208": {
|
| 1700 |
+
"content": "<extra_id_91>",
|
| 1701 |
+
"lstrip": false,
|
| 1702 |
+
"normalized": false,
|
| 1703 |
+
"rstrip": false,
|
| 1704 |
+
"single_word": false,
|
| 1705 |
+
"special": true
|
| 1706 |
+
},
|
| 1707 |
+
"256209": {
|
| 1708 |
+
"content": "<extra_id_90>",
|
| 1709 |
+
"lstrip": false,
|
| 1710 |
+
"normalized": false,
|
| 1711 |
+
"rstrip": false,
|
| 1712 |
+
"single_word": false,
|
| 1713 |
+
"special": true
|
| 1714 |
+
},
|
| 1715 |
+
"256210": {
|
| 1716 |
+
"content": "<extra_id_89>",
|
| 1717 |
+
"lstrip": false,
|
| 1718 |
+
"normalized": false,
|
| 1719 |
+
"rstrip": false,
|
| 1720 |
+
"single_word": false,
|
| 1721 |
+
"special": true
|
| 1722 |
+
},
|
| 1723 |
+
"256211": {
|
| 1724 |
+
"content": "<extra_id_88>",
|
| 1725 |
+
"lstrip": false,
|
| 1726 |
+
"normalized": false,
|
| 1727 |
+
"rstrip": false,
|
| 1728 |
+
"single_word": false,
|
| 1729 |
+
"special": true
|
| 1730 |
+
},
|
| 1731 |
+
"256212": {
|
| 1732 |
+
"content": "<extra_id_87>",
|
| 1733 |
+
"lstrip": false,
|
| 1734 |
+
"normalized": false,
|
| 1735 |
+
"rstrip": false,
|
| 1736 |
+
"single_word": false,
|
| 1737 |
+
"special": true
|
| 1738 |
+
},
|
| 1739 |
+
"256213": {
|
| 1740 |
+
"content": "<extra_id_86>",
|
| 1741 |
+
"lstrip": false,
|
| 1742 |
+
"normalized": false,
|
| 1743 |
+
"rstrip": false,
|
| 1744 |
+
"single_word": false,
|
| 1745 |
+
"special": true
|
| 1746 |
+
},
|
| 1747 |
+
"256214": {
|
| 1748 |
+
"content": "<extra_id_85>",
|
| 1749 |
+
"lstrip": false,
|
| 1750 |
+
"normalized": false,
|
| 1751 |
+
"rstrip": false,
|
| 1752 |
+
"single_word": false,
|
| 1753 |
+
"special": true
|
| 1754 |
+
},
|
| 1755 |
+
"256215": {
|
| 1756 |
+
"content": "<extra_id_84>",
|
| 1757 |
+
"lstrip": false,
|
| 1758 |
+
"normalized": false,
|
| 1759 |
+
"rstrip": false,
|
| 1760 |
+
"single_word": false,
|
| 1761 |
+
"special": true
|
| 1762 |
+
},
|
| 1763 |
+
"256216": {
|
| 1764 |
+
"content": "<extra_id_83>",
|
| 1765 |
+
"lstrip": false,
|
| 1766 |
+
"normalized": false,
|
| 1767 |
+
"rstrip": false,
|
| 1768 |
+
"single_word": false,
|
| 1769 |
+
"special": true
|
| 1770 |
+
},
|
| 1771 |
+
"256217": {
|
| 1772 |
+
"content": "<extra_id_82>",
|
| 1773 |
+
"lstrip": false,
|
| 1774 |
+
"normalized": false,
|
| 1775 |
+
"rstrip": false,
|
| 1776 |
+
"single_word": false,
|
| 1777 |
+
"special": true
|
| 1778 |
+
},
|
| 1779 |
+
"256218": {
|
| 1780 |
+
"content": "<extra_id_81>",
|
| 1781 |
+
"lstrip": false,
|
| 1782 |
+
"normalized": false,
|
| 1783 |
+
"rstrip": false,
|
| 1784 |
+
"single_word": false,
|
| 1785 |
+
"special": true
|
| 1786 |
+
},
|
| 1787 |
+
"256219": {
|
| 1788 |
+
"content": "<extra_id_80>",
|
| 1789 |
+
"lstrip": false,
|
| 1790 |
+
"normalized": false,
|
| 1791 |
+
"rstrip": false,
|
| 1792 |
+
"single_word": false,
|
| 1793 |
+
"special": true
|
| 1794 |
+
},
|
| 1795 |
+
"256220": {
|
| 1796 |
+
"content": "<extra_id_79>",
|
| 1797 |
+
"lstrip": false,
|
| 1798 |
+
"normalized": false,
|
| 1799 |
+
"rstrip": false,
|
| 1800 |
+
"single_word": false,
|
| 1801 |
+
"special": true
|
| 1802 |
+
},
|
| 1803 |
+
"256221": {
|
| 1804 |
+
"content": "<extra_id_78>",
|
| 1805 |
+
"lstrip": false,
|
| 1806 |
+
"normalized": false,
|
| 1807 |
+
"rstrip": false,
|
| 1808 |
+
"single_word": false,
|
| 1809 |
+
"special": true
|
| 1810 |
+
},
|
| 1811 |
+
"256222": {
|
| 1812 |
+
"content": "<extra_id_77>",
|
| 1813 |
+
"lstrip": false,
|
| 1814 |
+
"normalized": false,
|
| 1815 |
+
"rstrip": false,
|
| 1816 |
+
"single_word": false,
|
| 1817 |
+
"special": true
|
| 1818 |
+
},
|
| 1819 |
+
"256223": {
|
| 1820 |
+
"content": "<extra_id_76>",
|
| 1821 |
+
"lstrip": false,
|
| 1822 |
+
"normalized": false,
|
| 1823 |
+
"rstrip": false,
|
| 1824 |
+
"single_word": false,
|
| 1825 |
+
"special": true
|
| 1826 |
+
},
|
| 1827 |
+
"256224": {
|
| 1828 |
+
"content": "<extra_id_75>",
|
| 1829 |
+
"lstrip": false,
|
| 1830 |
+
"normalized": false,
|
| 1831 |
+
"rstrip": false,
|
| 1832 |
+
"single_word": false,
|
| 1833 |
+
"special": true
|
| 1834 |
+
},
|
| 1835 |
+
"256225": {
|
| 1836 |
+
"content": "<extra_id_74>",
|
| 1837 |
+
"lstrip": false,
|
| 1838 |
+
"normalized": false,
|
| 1839 |
+
"rstrip": false,
|
| 1840 |
+
"single_word": false,
|
| 1841 |
+
"special": true
|
| 1842 |
+
},
|
| 1843 |
+
"256226": {
|
| 1844 |
+
"content": "<extra_id_73>",
|
| 1845 |
+
"lstrip": false,
|
| 1846 |
+
"normalized": false,
|
| 1847 |
+
"rstrip": false,
|
| 1848 |
+
"single_word": false,
|
| 1849 |
+
"special": true
|
| 1850 |
+
},
|
| 1851 |
+
"256227": {
|
| 1852 |
+
"content": "<extra_id_72>",
|
| 1853 |
+
"lstrip": false,
|
| 1854 |
+
"normalized": false,
|
| 1855 |
+
"rstrip": false,
|
| 1856 |
+
"single_word": false,
|
| 1857 |
+
"special": true
|
| 1858 |
+
},
|
| 1859 |
+
"256228": {
|
| 1860 |
+
"content": "<extra_id_71>",
|
| 1861 |
+
"lstrip": false,
|
| 1862 |
+
"normalized": false,
|
| 1863 |
+
"rstrip": false,
|
| 1864 |
+
"single_word": false,
|
| 1865 |
+
"special": true
|
| 1866 |
+
},
|
| 1867 |
+
"256229": {
|
| 1868 |
+
"content": "<extra_id_70>",
|
| 1869 |
+
"lstrip": false,
|
| 1870 |
+
"normalized": false,
|
| 1871 |
+
"rstrip": false,
|
| 1872 |
+
"single_word": false,
|
| 1873 |
+
"special": true
|
| 1874 |
+
},
|
| 1875 |
+
"256230": {
|
| 1876 |
+
"content": "<extra_id_69>",
|
| 1877 |
+
"lstrip": false,
|
| 1878 |
+
"normalized": false,
|
| 1879 |
+
"rstrip": false,
|
| 1880 |
+
"single_word": false,
|
| 1881 |
+
"special": true
|
| 1882 |
+
},
|
| 1883 |
+
"256231": {
|
| 1884 |
+
"content": "<extra_id_68>",
|
| 1885 |
+
"lstrip": false,
|
| 1886 |
+
"normalized": false,
|
| 1887 |
+
"rstrip": false,
|
| 1888 |
+
"single_word": false,
|
| 1889 |
+
"special": true
|
| 1890 |
+
},
|
| 1891 |
+
"256232": {
|
| 1892 |
+
"content": "<extra_id_67>",
|
| 1893 |
+
"lstrip": false,
|
| 1894 |
+
"normalized": false,
|
| 1895 |
+
"rstrip": false,
|
| 1896 |
+
"single_word": false,
|
| 1897 |
+
"special": true
|
| 1898 |
+
},
|
| 1899 |
+
"256233": {
|
| 1900 |
+
"content": "<extra_id_66>",
|
| 1901 |
+
"lstrip": false,
|
| 1902 |
+
"normalized": false,
|
| 1903 |
+
"rstrip": false,
|
| 1904 |
+
"single_word": false,
|
| 1905 |
+
"special": true
|
| 1906 |
+
},
|
| 1907 |
+
"256234": {
|
| 1908 |
+
"content": "<extra_id_65>",
|
| 1909 |
+
"lstrip": false,
|
| 1910 |
+
"normalized": false,
|
| 1911 |
+
"rstrip": false,
|
| 1912 |
+
"single_word": false,
|
| 1913 |
+
"special": true
|
| 1914 |
+
},
|
| 1915 |
+
"256235": {
|
| 1916 |
+
"content": "<extra_id_64>",
|
| 1917 |
+
"lstrip": false,
|
| 1918 |
+
"normalized": false,
|
| 1919 |
+
"rstrip": false,
|
| 1920 |
+
"single_word": false,
|
| 1921 |
+
"special": true
|
| 1922 |
+
},
|
| 1923 |
+
"256236": {
|
| 1924 |
+
"content": "<extra_id_63>",
|
| 1925 |
+
"lstrip": false,
|
| 1926 |
+
"normalized": false,
|
| 1927 |
+
"rstrip": false,
|
| 1928 |
+
"single_word": false,
|
| 1929 |
+
"special": true
|
| 1930 |
+
},
|
| 1931 |
+
"256237": {
|
| 1932 |
+
"content": "<extra_id_62>",
|
| 1933 |
+
"lstrip": false,
|
| 1934 |
+
"normalized": false,
|
| 1935 |
+
"rstrip": false,
|
| 1936 |
+
"single_word": false,
|
| 1937 |
+
"special": true
|
| 1938 |
+
},
|
| 1939 |
+
"256238": {
|
| 1940 |
+
"content": "<extra_id_61>",
|
| 1941 |
+
"lstrip": false,
|
| 1942 |
+
"normalized": false,
|
| 1943 |
+
"rstrip": false,
|
| 1944 |
+
"single_word": false,
|
| 1945 |
+
"special": true
|
| 1946 |
+
},
|
| 1947 |
+
"256239": {
|
| 1948 |
+
"content": "<extra_id_60>",
|
| 1949 |
+
"lstrip": false,
|
| 1950 |
+
"normalized": false,
|
| 1951 |
+
"rstrip": false,
|
| 1952 |
+
"single_word": false,
|
| 1953 |
+
"special": true
|
| 1954 |
+
},
|
| 1955 |
+
"256240": {
|
| 1956 |
+
"content": "<extra_id_59>",
|
| 1957 |
+
"lstrip": false,
|
| 1958 |
+
"normalized": false,
|
| 1959 |
+
"rstrip": false,
|
| 1960 |
+
"single_word": false,
|
| 1961 |
+
"special": true
|
| 1962 |
+
},
|
| 1963 |
+
"256241": {
|
| 1964 |
+
"content": "<extra_id_58>",
|
| 1965 |
+
"lstrip": false,
|
| 1966 |
+
"normalized": false,
|
| 1967 |
+
"rstrip": false,
|
| 1968 |
+
"single_word": false,
|
| 1969 |
+
"special": true
|
| 1970 |
+
},
|
| 1971 |
+
"256242": {
|
| 1972 |
+
"content": "<extra_id_57>",
|
| 1973 |
+
"lstrip": false,
|
| 1974 |
+
"normalized": false,
|
| 1975 |
+
"rstrip": false,
|
| 1976 |
+
"single_word": false,
|
| 1977 |
+
"special": true
|
| 1978 |
+
},
|
| 1979 |
+
"256243": {
|
| 1980 |
+
"content": "<extra_id_56>",
|
| 1981 |
+
"lstrip": false,
|
| 1982 |
+
"normalized": false,
|
| 1983 |
+
"rstrip": false,
|
| 1984 |
+
"single_word": false,
|
| 1985 |
+
"special": true
|
| 1986 |
+
},
|
| 1987 |
+
"256244": {
|
| 1988 |
+
"content": "<extra_id_55>",
|
| 1989 |
+
"lstrip": false,
|
| 1990 |
+
"normalized": false,
|
| 1991 |
+
"rstrip": false,
|
| 1992 |
+
"single_word": false,
|
| 1993 |
+
"special": true
|
| 1994 |
+
},
|
| 1995 |
+
"256245": {
|
| 1996 |
+
"content": "<extra_id_54>",
|
| 1997 |
+
"lstrip": false,
|
| 1998 |
+
"normalized": false,
|
| 1999 |
+
"rstrip": false,
|
| 2000 |
+
"single_word": false,
|
| 2001 |
+
"special": true
|
| 2002 |
+
},
|
| 2003 |
+
"256246": {
|
| 2004 |
+
"content": "<extra_id_53>",
|
| 2005 |
+
"lstrip": false,
|
| 2006 |
+
"normalized": false,
|
| 2007 |
+
"rstrip": false,
|
| 2008 |
+
"single_word": false,
|
| 2009 |
+
"special": true
|
| 2010 |
+
},
|
| 2011 |
+
"256247": {
|
| 2012 |
+
"content": "<extra_id_52>",
|
| 2013 |
+
"lstrip": false,
|
| 2014 |
+
"normalized": false,
|
| 2015 |
+
"rstrip": false,
|
| 2016 |
+
"single_word": false,
|
| 2017 |
+
"special": true
|
| 2018 |
+
},
|
| 2019 |
+
"256248": {
|
| 2020 |
+
"content": "<extra_id_51>",
|
| 2021 |
+
"lstrip": false,
|
| 2022 |
+
"normalized": false,
|
| 2023 |
+
"rstrip": false,
|
| 2024 |
+
"single_word": false,
|
| 2025 |
+
"special": true
|
| 2026 |
+
},
|
| 2027 |
+
"256249": {
|
| 2028 |
+
"content": "<extra_id_50>",
|
| 2029 |
+
"lstrip": false,
|
| 2030 |
+
"normalized": false,
|
| 2031 |
+
"rstrip": false,
|
| 2032 |
+
"single_word": false,
|
| 2033 |
+
"special": true
|
| 2034 |
+
},
|
| 2035 |
+
"256250": {
|
| 2036 |
+
"content": "<extra_id_49>",
|
| 2037 |
+
"lstrip": false,
|
| 2038 |
+
"normalized": false,
|
| 2039 |
+
"rstrip": false,
|
| 2040 |
+
"single_word": false,
|
| 2041 |
+
"special": true
|
| 2042 |
+
},
|
| 2043 |
+
"256251": {
|
| 2044 |
+
"content": "<extra_id_48>",
|
| 2045 |
+
"lstrip": false,
|
| 2046 |
+
"normalized": false,
|
| 2047 |
+
"rstrip": false,
|
| 2048 |
+
"single_word": false,
|
| 2049 |
+
"special": true
|
| 2050 |
+
},
|
| 2051 |
+
"256252": {
|
| 2052 |
+
"content": "<extra_id_47>",
|
| 2053 |
+
"lstrip": false,
|
| 2054 |
+
"normalized": false,
|
| 2055 |
+
"rstrip": false,
|
| 2056 |
+
"single_word": false,
|
| 2057 |
+
"special": true
|
| 2058 |
+
},
|
| 2059 |
+
"256253": {
|
| 2060 |
+
"content": "<extra_id_46>",
|
| 2061 |
+
"lstrip": false,
|
| 2062 |
+
"normalized": false,
|
| 2063 |
+
"rstrip": false,
|
| 2064 |
+
"single_word": false,
|
| 2065 |
+
"special": true
|
| 2066 |
+
},
|
| 2067 |
+
"256254": {
|
| 2068 |
+
"content": "<extra_id_45>",
|
| 2069 |
+
"lstrip": false,
|
| 2070 |
+
"normalized": false,
|
| 2071 |
+
"rstrip": false,
|
| 2072 |
+
"single_word": false,
|
| 2073 |
+
"special": true
|
| 2074 |
+
},
|
| 2075 |
+
"256255": {
|
| 2076 |
+
"content": "<extra_id_44>",
|
| 2077 |
+
"lstrip": false,
|
| 2078 |
+
"normalized": false,
|
| 2079 |
+
"rstrip": false,
|
| 2080 |
+
"single_word": false,
|
| 2081 |
+
"special": true
|
| 2082 |
+
},
|
| 2083 |
+
"256256": {
|
| 2084 |
+
"content": "<extra_id_43>",
|
| 2085 |
+
"lstrip": false,
|
| 2086 |
+
"normalized": false,
|
| 2087 |
+
"rstrip": false,
|
| 2088 |
+
"single_word": false,
|
| 2089 |
+
"special": true
|
| 2090 |
+
},
|
| 2091 |
+
"256257": {
|
| 2092 |
+
"content": "<extra_id_42>",
|
| 2093 |
+
"lstrip": false,
|
| 2094 |
+
"normalized": false,
|
| 2095 |
+
"rstrip": false,
|
| 2096 |
+
"single_word": false,
|
| 2097 |
+
"special": true
|
| 2098 |
+
},
|
| 2099 |
+
"256258": {
|
| 2100 |
+
"content": "<extra_id_41>",
|
| 2101 |
+
"lstrip": false,
|
| 2102 |
+
"normalized": false,
|
| 2103 |
+
"rstrip": false,
|
| 2104 |
+
"single_word": false,
|
| 2105 |
+
"special": true
|
| 2106 |
+
},
|
| 2107 |
+
"256259": {
|
| 2108 |
+
"content": "<extra_id_40>",
|
| 2109 |
+
"lstrip": false,
|
| 2110 |
+
"normalized": false,
|
| 2111 |
+
"rstrip": false,
|
| 2112 |
+
"single_word": false,
|
| 2113 |
+
"special": true
|
| 2114 |
+
},
|
| 2115 |
+
"256260": {
|
| 2116 |
+
"content": "<extra_id_39>",
|
| 2117 |
+
"lstrip": false,
|
| 2118 |
+
"normalized": false,
|
| 2119 |
+
"rstrip": false,
|
| 2120 |
+
"single_word": false,
|
| 2121 |
+
"special": true
|
| 2122 |
+
},
|
| 2123 |
+
"256261": {
|
| 2124 |
+
"content": "<extra_id_38>",
|
| 2125 |
+
"lstrip": false,
|
| 2126 |
+
"normalized": false,
|
| 2127 |
+
"rstrip": false,
|
| 2128 |
+
"single_word": false,
|
| 2129 |
+
"special": true
|
| 2130 |
+
},
|
| 2131 |
+
"256262": {
|
| 2132 |
+
"content": "<extra_id_37>",
|
| 2133 |
+
"lstrip": false,
|
| 2134 |
+
"normalized": false,
|
| 2135 |
+
"rstrip": false,
|
| 2136 |
+
"single_word": false,
|
| 2137 |
+
"special": true
|
| 2138 |
+
},
|
| 2139 |
+
"256263": {
|
| 2140 |
+
"content": "<extra_id_36>",
|
| 2141 |
+
"lstrip": false,
|
| 2142 |
+
"normalized": false,
|
| 2143 |
+
"rstrip": false,
|
| 2144 |
+
"single_word": false,
|
| 2145 |
+
"special": true
|
| 2146 |
+
},
|
| 2147 |
+
"256264": {
|
| 2148 |
+
"content": "<extra_id_35>",
|
| 2149 |
+
"lstrip": false,
|
| 2150 |
+
"normalized": false,
|
| 2151 |
+
"rstrip": false,
|
| 2152 |
+
"single_word": false,
|
| 2153 |
+
"special": true
|
| 2154 |
+
},
|
| 2155 |
+
"256265": {
|
| 2156 |
+
"content": "<extra_id_34>",
|
| 2157 |
+
"lstrip": false,
|
| 2158 |
+
"normalized": false,
|
| 2159 |
+
"rstrip": false,
|
| 2160 |
+
"single_word": false,
|
| 2161 |
+
"special": true
|
| 2162 |
+
},
|
| 2163 |
+
"256266": {
|
| 2164 |
+
"content": "<extra_id_33>",
|
| 2165 |
+
"lstrip": false,
|
| 2166 |
+
"normalized": false,
|
| 2167 |
+
"rstrip": false,
|
| 2168 |
+
"single_word": false,
|
| 2169 |
+
"special": true
|
| 2170 |
+
},
|
| 2171 |
+
"256267": {
|
| 2172 |
+
"content": "<extra_id_32>",
|
| 2173 |
+
"lstrip": false,
|
| 2174 |
+
"normalized": false,
|
| 2175 |
+
"rstrip": false,
|
| 2176 |
+
"single_word": false,
|
| 2177 |
+
"special": true
|
| 2178 |
+
},
|
| 2179 |
+
"256268": {
|
| 2180 |
+
"content": "<extra_id_31>",
|
| 2181 |
+
"lstrip": false,
|
| 2182 |
+
"normalized": false,
|
| 2183 |
+
"rstrip": false,
|
| 2184 |
+
"single_word": false,
|
| 2185 |
+
"special": true
|
| 2186 |
+
},
|
| 2187 |
+
"256269": {
|
| 2188 |
+
"content": "<extra_id_30>",
|
| 2189 |
+
"lstrip": false,
|
| 2190 |
+
"normalized": false,
|
| 2191 |
+
"rstrip": false,
|
| 2192 |
+
"single_word": false,
|
| 2193 |
+
"special": true
|
| 2194 |
+
},
|
| 2195 |
+
"256270": {
|
| 2196 |
+
"content": "<extra_id_29>",
|
| 2197 |
+
"lstrip": false,
|
| 2198 |
+
"normalized": false,
|
| 2199 |
+
"rstrip": false,
|
| 2200 |
+
"single_word": false,
|
| 2201 |
+
"special": true
|
| 2202 |
+
},
|
| 2203 |
+
"256271": {
|
| 2204 |
+
"content": "<extra_id_28>",
|
| 2205 |
+
"lstrip": false,
|
| 2206 |
+
"normalized": false,
|
| 2207 |
+
"rstrip": false,
|
| 2208 |
+
"single_word": false,
|
| 2209 |
+
"special": true
|
| 2210 |
+
},
|
| 2211 |
+
"256272": {
|
| 2212 |
+
"content": "<extra_id_27>",
|
| 2213 |
+
"lstrip": false,
|
| 2214 |
+
"normalized": false,
|
| 2215 |
+
"rstrip": false,
|
| 2216 |
+
"single_word": false,
|
| 2217 |
+
"special": true
|
| 2218 |
+
},
|
| 2219 |
+
"256273": {
|
| 2220 |
+
"content": "<extra_id_26>",
|
| 2221 |
+
"lstrip": false,
|
| 2222 |
+
"normalized": false,
|
| 2223 |
+
"rstrip": false,
|
| 2224 |
+
"single_word": false,
|
| 2225 |
+
"special": true
|
| 2226 |
+
},
|
| 2227 |
+
"256274": {
|
| 2228 |
+
"content": "<extra_id_25>",
|
| 2229 |
+
"lstrip": false,
|
| 2230 |
+
"normalized": false,
|
| 2231 |
+
"rstrip": false,
|
| 2232 |
+
"single_word": false,
|
| 2233 |
+
"special": true
|
| 2234 |
+
},
|
| 2235 |
+
"256275": {
|
| 2236 |
+
"content": "<extra_id_24>",
|
| 2237 |
+
"lstrip": false,
|
| 2238 |
+
"normalized": false,
|
| 2239 |
+
"rstrip": false,
|
| 2240 |
+
"single_word": false,
|
| 2241 |
+
"special": true
|
| 2242 |
+
},
|
| 2243 |
+
"256276": {
|
| 2244 |
+
"content": "<extra_id_23>",
|
| 2245 |
+
"lstrip": false,
|
| 2246 |
+
"normalized": false,
|
| 2247 |
+
"rstrip": false,
|
| 2248 |
+
"single_word": false,
|
| 2249 |
+
"special": true
|
| 2250 |
+
},
|
| 2251 |
+
"256277": {
|
| 2252 |
+
"content": "<extra_id_22>",
|
| 2253 |
+
"lstrip": false,
|
| 2254 |
+
"normalized": false,
|
| 2255 |
+
"rstrip": false,
|
| 2256 |
+
"single_word": false,
|
| 2257 |
+
"special": true
|
| 2258 |
+
},
|
| 2259 |
+
"256278": {
|
| 2260 |
+
"content": "<extra_id_21>",
|
| 2261 |
+
"lstrip": false,
|
| 2262 |
+
"normalized": false,
|
| 2263 |
+
"rstrip": false,
|
| 2264 |
+
"single_word": false,
|
| 2265 |
+
"special": true
|
| 2266 |
+
},
|
| 2267 |
+
"256279": {
|
| 2268 |
+
"content": "<extra_id_20>",
|
| 2269 |
+
"lstrip": false,
|
| 2270 |
+
"normalized": false,
|
| 2271 |
+
"rstrip": false,
|
| 2272 |
+
"single_word": false,
|
| 2273 |
+
"special": true
|
| 2274 |
+
},
|
| 2275 |
+
"256280": {
|
| 2276 |
+
"content": "<extra_id_19>",
|
| 2277 |
+
"lstrip": false,
|
| 2278 |
+
"normalized": false,
|
| 2279 |
+
"rstrip": false,
|
| 2280 |
+
"single_word": false,
|
| 2281 |
+
"special": true
|
| 2282 |
+
},
|
| 2283 |
+
"256281": {
|
| 2284 |
+
"content": "<extra_id_18>",
|
| 2285 |
+
"lstrip": false,
|
| 2286 |
+
"normalized": false,
|
| 2287 |
+
"rstrip": false,
|
| 2288 |
+
"single_word": false,
|
| 2289 |
+
"special": true
|
| 2290 |
+
},
|
| 2291 |
+
"256282": {
|
| 2292 |
+
"content": "<extra_id_17>",
|
| 2293 |
+
"lstrip": false,
|
| 2294 |
+
"normalized": false,
|
| 2295 |
+
"rstrip": false,
|
| 2296 |
+
"single_word": false,
|
| 2297 |
+
"special": true
|
| 2298 |
+
},
|
| 2299 |
+
"256283": {
|
| 2300 |
+
"content": "<extra_id_16>",
|
| 2301 |
+
"lstrip": false,
|
| 2302 |
+
"normalized": false,
|
| 2303 |
+
"rstrip": false,
|
| 2304 |
+
"single_word": false,
|
| 2305 |
+
"special": true
|
| 2306 |
+
},
|
| 2307 |
+
"256284": {
|
| 2308 |
+
"content": "<extra_id_15>",
|
| 2309 |
+
"lstrip": false,
|
| 2310 |
+
"normalized": false,
|
| 2311 |
+
"rstrip": false,
|
| 2312 |
+
"single_word": false,
|
| 2313 |
+
"special": true
|
| 2314 |
+
},
|
| 2315 |
+
"256285": {
|
| 2316 |
+
"content": "<extra_id_14>",
|
| 2317 |
+
"lstrip": false,
|
| 2318 |
+
"normalized": false,
|
| 2319 |
+
"rstrip": false,
|
| 2320 |
+
"single_word": false,
|
| 2321 |
+
"special": true
|
| 2322 |
+
},
|
| 2323 |
+
"256286": {
|
| 2324 |
+
"content": "<extra_id_13>",
|
| 2325 |
+
"lstrip": false,
|
| 2326 |
+
"normalized": false,
|
| 2327 |
+
"rstrip": false,
|
| 2328 |
+
"single_word": false,
|
| 2329 |
+
"special": true
|
| 2330 |
+
},
|
| 2331 |
+
"256287": {
|
| 2332 |
+
"content": "<extra_id_12>",
|
| 2333 |
+
"lstrip": false,
|
| 2334 |
+
"normalized": false,
|
| 2335 |
+
"rstrip": false,
|
| 2336 |
+
"single_word": false,
|
| 2337 |
+
"special": true
|
| 2338 |
+
},
|
| 2339 |
+
"256288": {
|
| 2340 |
+
"content": "<extra_id_11>",
|
| 2341 |
+
"lstrip": false,
|
| 2342 |
+
"normalized": false,
|
| 2343 |
+
"rstrip": false,
|
| 2344 |
+
"single_word": false,
|
| 2345 |
+
"special": true
|
| 2346 |
+
},
|
| 2347 |
+
"256289": {
|
| 2348 |
+
"content": "<extra_id_10>",
|
| 2349 |
+
"lstrip": false,
|
| 2350 |
+
"normalized": false,
|
| 2351 |
+
"rstrip": false,
|
| 2352 |
+
"single_word": false,
|
| 2353 |
+
"special": true
|
| 2354 |
+
},
|
| 2355 |
+
"256290": {
|
| 2356 |
+
"content": "<extra_id_9>",
|
| 2357 |
+
"lstrip": false,
|
| 2358 |
+
"normalized": false,
|
| 2359 |
+
"rstrip": false,
|
| 2360 |
+
"single_word": false,
|
| 2361 |
+
"special": true
|
| 2362 |
+
},
|
| 2363 |
+
"256291": {
|
| 2364 |
+
"content": "<extra_id_8>",
|
| 2365 |
+
"lstrip": false,
|
| 2366 |
+
"normalized": false,
|
| 2367 |
+
"rstrip": false,
|
| 2368 |
+
"single_word": false,
|
| 2369 |
+
"special": true
|
| 2370 |
+
},
|
| 2371 |
+
"256292": {
|
| 2372 |
+
"content": "<extra_id_7>",
|
| 2373 |
+
"lstrip": false,
|
| 2374 |
+
"normalized": false,
|
| 2375 |
+
"rstrip": false,
|
| 2376 |
+
"single_word": false,
|
| 2377 |
+
"special": true
|
| 2378 |
+
},
|
| 2379 |
+
"256293": {
|
| 2380 |
+
"content": "<extra_id_6>",
|
| 2381 |
+
"lstrip": false,
|
| 2382 |
+
"normalized": false,
|
| 2383 |
+
"rstrip": false,
|
| 2384 |
+
"single_word": false,
|
| 2385 |
+
"special": true
|
| 2386 |
+
},
|
| 2387 |
+
"256294": {
|
| 2388 |
+
"content": "<extra_id_5>",
|
| 2389 |
+
"lstrip": false,
|
| 2390 |
+
"normalized": false,
|
| 2391 |
+
"rstrip": false,
|
| 2392 |
+
"single_word": false,
|
| 2393 |
+
"special": true
|
| 2394 |
+
},
|
| 2395 |
+
"256295": {
|
| 2396 |
+
"content": "<extra_id_4>",
|
| 2397 |
+
"lstrip": false,
|
| 2398 |
+
"normalized": false,
|
| 2399 |
+
"rstrip": false,
|
| 2400 |
+
"single_word": false,
|
| 2401 |
+
"special": true
|
| 2402 |
+
},
|
| 2403 |
+
"256296": {
|
| 2404 |
+
"content": "<extra_id_3>",
|
| 2405 |
+
"lstrip": false,
|
| 2406 |
+
"normalized": false,
|
| 2407 |
+
"rstrip": false,
|
| 2408 |
+
"single_word": false,
|
| 2409 |
+
"special": true
|
| 2410 |
+
},
|
| 2411 |
+
"256297": {
|
| 2412 |
+
"content": "<extra_id_2>",
|
| 2413 |
+
"lstrip": false,
|
| 2414 |
+
"normalized": false,
|
| 2415 |
+
"rstrip": false,
|
| 2416 |
+
"single_word": false,
|
| 2417 |
+
"special": true
|
| 2418 |
+
},
|
| 2419 |
+
"256298": {
|
| 2420 |
+
"content": "<extra_id_1>",
|
| 2421 |
+
"lstrip": false,
|
| 2422 |
+
"normalized": false,
|
| 2423 |
+
"rstrip": false,
|
| 2424 |
+
"single_word": false,
|
| 2425 |
+
"special": true
|
| 2426 |
+
},
|
| 2427 |
+
"256299": {
|
| 2428 |
+
"content": "<extra_id_0>",
|
| 2429 |
+
"lstrip": false,
|
| 2430 |
+
"normalized": false,
|
| 2431 |
+
"rstrip": false,
|
| 2432 |
+
"single_word": false,
|
| 2433 |
+
"special": true
|
| 2434 |
+
}
|
| 2435 |
+
},
|
| 2436 |
+
"additional_special_tokens": [
|
| 2437 |
+
"<extra_id_0>",
|
| 2438 |
+
"<extra_id_1>",
|
| 2439 |
+
"<extra_id_2>",
|
| 2440 |
+
"<extra_id_3>",
|
| 2441 |
+
"<extra_id_4>",
|
| 2442 |
+
"<extra_id_5>",
|
| 2443 |
+
"<extra_id_6>",
|
| 2444 |
+
"<extra_id_7>",
|
| 2445 |
+
"<extra_id_8>",
|
| 2446 |
+
"<extra_id_9>",
|
| 2447 |
+
"<extra_id_10>",
|
| 2448 |
+
"<extra_id_11>",
|
| 2449 |
+
"<extra_id_12>",
|
| 2450 |
+
"<extra_id_13>",
|
| 2451 |
+
"<extra_id_14>",
|
| 2452 |
+
"<extra_id_15>",
|
| 2453 |
+
"<extra_id_16>",
|
| 2454 |
+
"<extra_id_17>",
|
| 2455 |
+
"<extra_id_18>",
|
| 2456 |
+
"<extra_id_19>",
|
| 2457 |
+
"<extra_id_20>",
|
| 2458 |
+
"<extra_id_21>",
|
| 2459 |
+
"<extra_id_22>",
|
| 2460 |
+
"<extra_id_23>",
|
| 2461 |
+
"<extra_id_24>",
|
| 2462 |
+
"<extra_id_25>",
|
| 2463 |
+
"<extra_id_26>",
|
| 2464 |
+
"<extra_id_27>",
|
| 2465 |
+
"<extra_id_28>",
|
| 2466 |
+
"<extra_id_29>",
|
| 2467 |
+
"<extra_id_30>",
|
| 2468 |
+
"<extra_id_31>",
|
| 2469 |
+
"<extra_id_32>",
|
| 2470 |
+
"<extra_id_33>",
|
| 2471 |
+
"<extra_id_34>",
|
| 2472 |
+
"<extra_id_35>",
|
| 2473 |
+
"<extra_id_36>",
|
| 2474 |
+
"<extra_id_37>",
|
| 2475 |
+
"<extra_id_38>",
|
| 2476 |
+
"<extra_id_39>",
|
| 2477 |
+
"<extra_id_40>",
|
| 2478 |
+
"<extra_id_41>",
|
| 2479 |
+
"<extra_id_42>",
|
| 2480 |
+
"<extra_id_43>",
|
| 2481 |
+
"<extra_id_44>",
|
| 2482 |
+
"<extra_id_45>",
|
| 2483 |
+
"<extra_id_46>",
|
| 2484 |
+
"<extra_id_47>",
|
| 2485 |
+
"<extra_id_48>",
|
| 2486 |
+
"<extra_id_49>",
|
| 2487 |
+
"<extra_id_50>",
|
| 2488 |
+
"<extra_id_51>",
|
| 2489 |
+
"<extra_id_52>",
|
| 2490 |
+
"<extra_id_53>",
|
| 2491 |
+
"<extra_id_54>",
|
| 2492 |
+
"<extra_id_55>",
|
| 2493 |
+
"<extra_id_56>",
|
| 2494 |
+
"<extra_id_57>",
|
| 2495 |
+
"<extra_id_58>",
|
| 2496 |
+
"<extra_id_59>",
|
| 2497 |
+
"<extra_id_60>",
|
| 2498 |
+
"<extra_id_61>",
|
| 2499 |
+
"<extra_id_62>",
|
| 2500 |
+
"<extra_id_63>",
|
| 2501 |
+
"<extra_id_64>",
|
| 2502 |
+
"<extra_id_65>",
|
| 2503 |
+
"<extra_id_66>",
|
| 2504 |
+
"<extra_id_67>",
|
| 2505 |
+
"<extra_id_68>",
|
| 2506 |
+
"<extra_id_69>",
|
| 2507 |
+
"<extra_id_70>",
|
| 2508 |
+
"<extra_id_71>",
|
| 2509 |
+
"<extra_id_72>",
|
| 2510 |
+
"<extra_id_73>",
|
| 2511 |
+
"<extra_id_74>",
|
| 2512 |
+
"<extra_id_75>",
|
| 2513 |
+
"<extra_id_76>",
|
| 2514 |
+
"<extra_id_77>",
|
| 2515 |
+
"<extra_id_78>",
|
| 2516 |
+
"<extra_id_79>",
|
| 2517 |
+
"<extra_id_80>",
|
| 2518 |
+
"<extra_id_81>",
|
| 2519 |
+
"<extra_id_82>",
|
| 2520 |
+
"<extra_id_83>",
|
| 2521 |
+
"<extra_id_84>",
|
| 2522 |
+
"<extra_id_85>",
|
| 2523 |
+
"<extra_id_86>",
|
| 2524 |
+
"<extra_id_87>",
|
| 2525 |
+
"<extra_id_88>",
|
| 2526 |
+
"<extra_id_89>",
|
| 2527 |
+
"<extra_id_90>",
|
| 2528 |
+
"<extra_id_91>",
|
| 2529 |
+
"<extra_id_92>",
|
| 2530 |
+
"<extra_id_93>",
|
| 2531 |
+
"<extra_id_94>",
|
| 2532 |
+
"<extra_id_95>",
|
| 2533 |
+
"<extra_id_96>",
|
| 2534 |
+
"<extra_id_97>",
|
| 2535 |
+
"<extra_id_98>",
|
| 2536 |
+
"<extra_id_99>",
|
| 2537 |
+
"<extra_id_100>",
|
| 2538 |
+
"<extra_id_101>",
|
| 2539 |
+
"<extra_id_102>",
|
| 2540 |
+
"<extra_id_103>",
|
| 2541 |
+
"<extra_id_104>",
|
| 2542 |
+
"<extra_id_105>",
|
| 2543 |
+
"<extra_id_106>",
|
| 2544 |
+
"<extra_id_107>",
|
| 2545 |
+
"<extra_id_108>",
|
| 2546 |
+
"<extra_id_109>",
|
| 2547 |
+
"<extra_id_110>",
|
| 2548 |
+
"<extra_id_111>",
|
| 2549 |
+
"<extra_id_112>",
|
| 2550 |
+
"<extra_id_113>",
|
| 2551 |
+
"<extra_id_114>",
|
| 2552 |
+
"<extra_id_115>",
|
| 2553 |
+
"<extra_id_116>",
|
| 2554 |
+
"<extra_id_117>",
|
| 2555 |
+
"<extra_id_118>",
|
| 2556 |
+
"<extra_id_119>",
|
| 2557 |
+
"<extra_id_120>",
|
| 2558 |
+
"<extra_id_121>",
|
| 2559 |
+
"<extra_id_122>",
|
| 2560 |
+
"<extra_id_123>",
|
| 2561 |
+
"<extra_id_124>",
|
| 2562 |
+
"<extra_id_125>",
|
| 2563 |
+
"<extra_id_126>",
|
| 2564 |
+
"<extra_id_127>",
|
| 2565 |
+
"<extra_id_128>",
|
| 2566 |
+
"<extra_id_129>",
|
| 2567 |
+
"<extra_id_130>",
|
| 2568 |
+
"<extra_id_131>",
|
| 2569 |
+
"<extra_id_132>",
|
| 2570 |
+
"<extra_id_133>",
|
| 2571 |
+
"<extra_id_134>",
|
| 2572 |
+
"<extra_id_135>",
|
| 2573 |
+
"<extra_id_136>",
|
| 2574 |
+
"<extra_id_137>",
|
| 2575 |
+
"<extra_id_138>",
|
| 2576 |
+
"<extra_id_139>",
|
| 2577 |
+
"<extra_id_140>",
|
| 2578 |
+
"<extra_id_141>",
|
| 2579 |
+
"<extra_id_142>",
|
| 2580 |
+
"<extra_id_143>",
|
| 2581 |
+
"<extra_id_144>",
|
| 2582 |
+
"<extra_id_145>",
|
| 2583 |
+
"<extra_id_146>",
|
| 2584 |
+
"<extra_id_147>",
|
| 2585 |
+
"<extra_id_148>",
|
| 2586 |
+
"<extra_id_149>",
|
| 2587 |
+
"<extra_id_150>",
|
| 2588 |
+
"<extra_id_151>",
|
| 2589 |
+
"<extra_id_152>",
|
| 2590 |
+
"<extra_id_153>",
|
| 2591 |
+
"<extra_id_154>",
|
| 2592 |
+
"<extra_id_155>",
|
| 2593 |
+
"<extra_id_156>",
|
| 2594 |
+
"<extra_id_157>",
|
| 2595 |
+
"<extra_id_158>",
|
| 2596 |
+
"<extra_id_159>",
|
| 2597 |
+
"<extra_id_160>",
|
| 2598 |
+
"<extra_id_161>",
|
| 2599 |
+
"<extra_id_162>",
|
| 2600 |
+
"<extra_id_163>",
|
| 2601 |
+
"<extra_id_164>",
|
| 2602 |
+
"<extra_id_165>",
|
| 2603 |
+
"<extra_id_166>",
|
| 2604 |
+
"<extra_id_167>",
|
| 2605 |
+
"<extra_id_168>",
|
| 2606 |
+
"<extra_id_169>",
|
| 2607 |
+
"<extra_id_170>",
|
| 2608 |
+
"<extra_id_171>",
|
| 2609 |
+
"<extra_id_172>",
|
| 2610 |
+
"<extra_id_173>",
|
| 2611 |
+
"<extra_id_174>",
|
| 2612 |
+
"<extra_id_175>",
|
| 2613 |
+
"<extra_id_176>",
|
| 2614 |
+
"<extra_id_177>",
|
| 2615 |
+
"<extra_id_178>",
|
| 2616 |
+
"<extra_id_179>",
|
| 2617 |
+
"<extra_id_180>",
|
| 2618 |
+
"<extra_id_181>",
|
| 2619 |
+
"<extra_id_182>",
|
| 2620 |
+
"<extra_id_183>",
|
| 2621 |
+
"<extra_id_184>",
|
| 2622 |
+
"<extra_id_185>",
|
| 2623 |
+
"<extra_id_186>",
|
| 2624 |
+
"<extra_id_187>",
|
| 2625 |
+
"<extra_id_188>",
|
| 2626 |
+
"<extra_id_189>",
|
| 2627 |
+
"<extra_id_190>",
|
| 2628 |
+
"<extra_id_191>",
|
| 2629 |
+
"<extra_id_192>",
|
| 2630 |
+
"<extra_id_193>",
|
| 2631 |
+
"<extra_id_194>",
|
| 2632 |
+
"<extra_id_195>",
|
| 2633 |
+
"<extra_id_196>",
|
| 2634 |
+
"<extra_id_197>",
|
| 2635 |
+
"<extra_id_198>",
|
| 2636 |
+
"<extra_id_199>",
|
| 2637 |
+
"<extra_id_200>",
|
| 2638 |
+
"<extra_id_201>",
|
| 2639 |
+
"<extra_id_202>",
|
| 2640 |
+
"<extra_id_203>",
|
| 2641 |
+
"<extra_id_204>",
|
| 2642 |
+
"<extra_id_205>",
|
| 2643 |
+
"<extra_id_206>",
|
| 2644 |
+
"<extra_id_207>",
|
| 2645 |
+
"<extra_id_208>",
|
| 2646 |
+
"<extra_id_209>",
|
| 2647 |
+
"<extra_id_210>",
|
| 2648 |
+
"<extra_id_211>",
|
| 2649 |
+
"<extra_id_212>",
|
| 2650 |
+
"<extra_id_213>",
|
| 2651 |
+
"<extra_id_214>",
|
| 2652 |
+
"<extra_id_215>",
|
| 2653 |
+
"<extra_id_216>",
|
| 2654 |
+
"<extra_id_217>",
|
| 2655 |
+
"<extra_id_218>",
|
| 2656 |
+
"<extra_id_219>",
|
| 2657 |
+
"<extra_id_220>",
|
| 2658 |
+
"<extra_id_221>",
|
| 2659 |
+
"<extra_id_222>",
|
| 2660 |
+
"<extra_id_223>",
|
| 2661 |
+
"<extra_id_224>",
|
| 2662 |
+
"<extra_id_225>",
|
| 2663 |
+
"<extra_id_226>",
|
| 2664 |
+
"<extra_id_227>",
|
| 2665 |
+
"<extra_id_228>",
|
| 2666 |
+
"<extra_id_229>",
|
| 2667 |
+
"<extra_id_230>",
|
| 2668 |
+
"<extra_id_231>",
|
| 2669 |
+
"<extra_id_232>",
|
| 2670 |
+
"<extra_id_233>",
|
| 2671 |
+
"<extra_id_234>",
|
| 2672 |
+
"<extra_id_235>",
|
| 2673 |
+
"<extra_id_236>",
|
| 2674 |
+
"<extra_id_237>",
|
| 2675 |
+
"<extra_id_238>",
|
| 2676 |
+
"<extra_id_239>",
|
| 2677 |
+
"<extra_id_240>",
|
| 2678 |
+
"<extra_id_241>",
|
| 2679 |
+
"<extra_id_242>",
|
| 2680 |
+
"<extra_id_243>",
|
| 2681 |
+
"<extra_id_244>",
|
| 2682 |
+
"<extra_id_245>",
|
| 2683 |
+
"<extra_id_246>",
|
| 2684 |
+
"<extra_id_247>",
|
| 2685 |
+
"<extra_id_248>",
|
| 2686 |
+
"<extra_id_249>",
|
| 2687 |
+
"<extra_id_250>",
|
| 2688 |
+
"<extra_id_251>",
|
| 2689 |
+
"<extra_id_252>",
|
| 2690 |
+
"<extra_id_253>",
|
| 2691 |
+
"<extra_id_254>",
|
| 2692 |
+
"<extra_id_255>",
|
| 2693 |
+
"<extra_id_256>",
|
| 2694 |
+
"<extra_id_257>",
|
| 2695 |
+
"<extra_id_258>",
|
| 2696 |
+
"<extra_id_259>",
|
| 2697 |
+
"<extra_id_260>",
|
| 2698 |
+
"<extra_id_261>",
|
| 2699 |
+
"<extra_id_262>",
|
| 2700 |
+
"<extra_id_263>",
|
| 2701 |
+
"<extra_id_264>",
|
| 2702 |
+
"<extra_id_265>",
|
| 2703 |
+
"<extra_id_266>",
|
| 2704 |
+
"<extra_id_267>",
|
| 2705 |
+
"<extra_id_268>",
|
| 2706 |
+
"<extra_id_269>",
|
| 2707 |
+
"<extra_id_270>",
|
| 2708 |
+
"<extra_id_271>",
|
| 2709 |
+
"<extra_id_272>",
|
| 2710 |
+
"<extra_id_273>",
|
| 2711 |
+
"<extra_id_274>",
|
| 2712 |
+
"<extra_id_275>",
|
| 2713 |
+
"<extra_id_276>",
|
| 2714 |
+
"<extra_id_277>",
|
| 2715 |
+
"<extra_id_278>",
|
| 2716 |
+
"<extra_id_279>",
|
| 2717 |
+
"<extra_id_280>",
|
| 2718 |
+
"<extra_id_281>",
|
| 2719 |
+
"<extra_id_282>",
|
| 2720 |
+
"<extra_id_283>",
|
| 2721 |
+
"<extra_id_284>",
|
| 2722 |
+
"<extra_id_285>",
|
| 2723 |
+
"<extra_id_286>",
|
| 2724 |
+
"<extra_id_287>",
|
| 2725 |
+
"<extra_id_288>",
|
| 2726 |
+
"<extra_id_289>",
|
| 2727 |
+
"<extra_id_290>",
|
| 2728 |
+
"<extra_id_291>",
|
| 2729 |
+
"<extra_id_292>",
|
| 2730 |
+
"<extra_id_293>",
|
| 2731 |
+
"<extra_id_294>",
|
| 2732 |
+
"<extra_id_295>",
|
| 2733 |
+
"<extra_id_296>",
|
| 2734 |
+
"<extra_id_297>",
|
| 2735 |
+
"<extra_id_298>",
|
| 2736 |
+
"<extra_id_299>"
|
| 2737 |
+
],
|
| 2738 |
+
"bos_token": "<s>",
|
| 2739 |
+
"clean_up_tokenization_spaces": true,
|
| 2740 |
+
"eos_token": "</s>",
|
| 2741 |
+
"extra_ids": 300,
|
| 2742 |
+
"model_max_length": 1000000000000000019884624838656,
|
| 2743 |
+
"pad_token": "<pad>",
|
| 2744 |
+
"sp_model_kwargs": {},
|
| 2745 |
+
"spaces_between_special_tokens": false,
|
| 2746 |
+
"tokenizer_class": "T5Tokenizer",
|
| 2747 |
+
"unk_token": "<unk>"
|
| 2748 |
+
}
|
wan_models/Wan2.1-T2V-14B/LICENSE.txt
ADDED
|
@@ -0,0 +1,201 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Apache License
|
| 2 |
+
Version 2.0, January 2004
|
| 3 |
+
http://www.apache.org/licenses/
|
| 4 |
+
|
| 5 |
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
| 6 |
+
|
| 7 |
+
1. Definitions.
|
| 8 |
+
|
| 9 |
+
"License" shall mean the terms and conditions for use, reproduction,
|
| 10 |
+
and distribution as defined by Sections 1 through 9 of this document.
|
| 11 |
+
|
| 12 |
+
"Licensor" shall mean the copyright owner or entity authorized by
|
| 13 |
+
the copyright owner that is granting the License.
|
| 14 |
+
|
| 15 |
+
"Legal Entity" shall mean the union of the acting entity and all
|
| 16 |
+
other entities that control, are controlled by, or are under common
|
| 17 |
+
control with that entity. For the purposes of this definition,
|
| 18 |
+
"control" means (i) the power, direct or indirect, to cause the
|
| 19 |
+
direction or management of such entity, whether by contract or
|
| 20 |
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
| 21 |
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
| 22 |
+
|
| 23 |
+
"You" (or "Your") shall mean an individual or Legal Entity
|
| 24 |
+
exercising permissions granted by this License.
|
| 25 |
+
|
| 26 |
+
"Source" form shall mean the preferred form for making modifications,
|
| 27 |
+
including but not limited to software source code, documentation
|
| 28 |
+
source, and configuration files.
|
| 29 |
+
|
| 30 |
+
"Object" form shall mean any form resulting from mechanical
|
| 31 |
+
transformation or translation of a Source form, including but
|
| 32 |
+
not limited to compiled object code, generated documentation,
|
| 33 |
+
and conversions to other media types.
|
| 34 |
+
|
| 35 |
+
"Work" shall mean the work of authorship, whether in Source or
|
| 36 |
+
Object form, made available under the License, as indicated by a
|
| 37 |
+
copyright notice that is included in or attached to the work
|
| 38 |
+
(an example is provided in the Appendix below).
|
| 39 |
+
|
| 40 |
+
"Derivative Works" shall mean any work, whether in Source or Object
|
| 41 |
+
form, that is based on (or derived from) the Work and for which the
|
| 42 |
+
editorial revisions, annotations, elaborations, or other modifications
|
| 43 |
+
represent, as a whole, an original work of authorship. For the purposes
|
| 44 |
+
of this License, Derivative Works shall not include works that remain
|
| 45 |
+
separable from, or merely link (or bind by name) to the interfaces of,
|
| 46 |
+
the Work and Derivative Works thereof.
|
| 47 |
+
|
| 48 |
+
"Contribution" shall mean any work of authorship, including
|
| 49 |
+
the original version of the Work and any modifications or additions
|
| 50 |
+
to that Work or Derivative Works thereof, that is intentionally
|
| 51 |
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
| 52 |
+
or by an individual or Legal Entity authorized to submit on behalf of
|
| 53 |
+
the copyright owner. For the purposes of this definition, "submitted"
|
| 54 |
+
means any form of electronic, verbal, or written communication sent
|
| 55 |
+
to the Licensor or its representatives, including but not limited to
|
| 56 |
+
communication on electronic mailing lists, source code control systems,
|
| 57 |
+
and issue tracking systems that are managed by, or on behalf of, the
|
| 58 |
+
Licensor for the purpose of discussing and improving the Work, but
|
| 59 |
+
excluding communication that is conspicuously marked or otherwise
|
| 60 |
+
designated in writing by the copyright owner as "Not a Contribution."
|
| 61 |
+
|
| 62 |
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
| 63 |
+
on behalf of whom a Contribution has been received by Licensor and
|
| 64 |
+
subsequently incorporated within the Work.
|
| 65 |
+
|
| 66 |
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
| 67 |
+
this License, each Contributor hereby grants to You a perpetual,
|
| 68 |
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
| 69 |
+
copyright license to reproduce, prepare Derivative Works of,
|
| 70 |
+
publicly display, publicly perform, sublicense, and distribute the
|
| 71 |
+
Work and such Derivative Works in Source or Object form.
|
| 72 |
+
|
| 73 |
+
3. Grant of Patent License. Subject to the terms and conditions of
|
| 74 |
+
this License, each Contributor hereby grants to You a perpetual,
|
| 75 |
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
| 76 |
+
(except as stated in this section) patent license to make, have made,
|
| 77 |
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
| 78 |
+
where such license applies only to those patent claims licensable
|
| 79 |
+
by such Contributor that are necessarily infringed by their
|
| 80 |
+
Contribution(s) alone or by combination of their Contribution(s)
|
| 81 |
+
with the Work to which such Contribution(s) was submitted. If You
|
| 82 |
+
institute patent litigation against any entity (including a
|
| 83 |
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
| 84 |
+
or a Contribution incorporated within the Work constitutes direct
|
| 85 |
+
or contributory patent infringement, then any patent licenses
|
| 86 |
+
granted to You under this License for that Work shall terminate
|
| 87 |
+
as of the date such litigation is filed.
|
| 88 |
+
|
| 89 |
+
4. Redistribution. You may reproduce and distribute copies of the
|
| 90 |
+
Work or Derivative Works thereof in any medium, with or without
|
| 91 |
+
modifications, and in Source or Object form, provided that You
|
| 92 |
+
meet the following conditions:
|
| 93 |
+
|
| 94 |
+
(a) You must give any other recipients of the Work or
|
| 95 |
+
Derivative Works a copy of this License; and
|
| 96 |
+
|
| 97 |
+
(b) You must cause any modified files to carry prominent notices
|
| 98 |
+
stating that You changed the files; and
|
| 99 |
+
|
| 100 |
+
(c) You must retain, in the Source form of any Derivative Works
|
| 101 |
+
that You distribute, all copyright, patent, trademark, and
|
| 102 |
+
attribution notices from the Source form of the Work,
|
| 103 |
+
excluding those notices that do not pertain to any part of
|
| 104 |
+
the Derivative Works; and
|
| 105 |
+
|
| 106 |
+
(d) If the Work includes a "NOTICE" text file as part of its
|
| 107 |
+
distribution, then any Derivative Works that You distribute must
|
| 108 |
+
include a readable copy of the attribution notices contained
|
| 109 |
+
within such NOTICE file, excluding those notices that do not
|
| 110 |
+
pertain to any part of the Derivative Works, in at least one
|
| 111 |
+
of the following places: within a NOTICE text file distributed
|
| 112 |
+
as part of the Derivative Works; within the Source form or
|
| 113 |
+
documentation, if provided along with the Derivative Works; or,
|
| 114 |
+
within a display generated by the Derivative Works, if and
|
| 115 |
+
wherever such third-party notices normally appear. The contents
|
| 116 |
+
of the NOTICE file are for informational purposes only and
|
| 117 |
+
do not modify the License. You may add Your own attribution
|
| 118 |
+
notices within Derivative Works that You distribute, alongside
|
| 119 |
+
or as an addendum to the NOTICE text from the Work, provided
|
| 120 |
+
that such additional attribution notices cannot be construed
|
| 121 |
+
as modifying the License.
|
| 122 |
+
|
| 123 |
+
You may add Your own copyright statement to Your modifications and
|
| 124 |
+
may provide additional or different license terms and conditions
|
| 125 |
+
for use, reproduction, or distribution of Your modifications, or
|
| 126 |
+
for any such Derivative Works as a whole, provided Your use,
|
| 127 |
+
reproduction, and distribution of the Work otherwise complies with
|
| 128 |
+
the conditions stated in this License.
|
| 129 |
+
|
| 130 |
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
| 131 |
+
any Contribution intentionally submitted for inclusion in the Work
|
| 132 |
+
by You to the Licensor shall be under the terms and conditions of
|
| 133 |
+
this License, without any additional terms or conditions.
|
| 134 |
+
Notwithstanding the above, nothing herein shall supersede or modify
|
| 135 |
+
the terms of any separate license agreement you may have executed
|
| 136 |
+
with Licensor regarding such Contributions.
|
| 137 |
+
|
| 138 |
+
6. Trademarks. This License does not grant permission to use the trade
|
| 139 |
+
names, trademarks, service marks, or product names of the Licensor,
|
| 140 |
+
except as required for reasonable and customary use in describing the
|
| 141 |
+
origin of the Work and reproducing the content of the NOTICE file.
|
| 142 |
+
|
| 143 |
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
| 144 |
+
agreed to in writing, Licensor provides the Work (and each
|
| 145 |
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
| 146 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
| 147 |
+
implied, including, without limitation, any warranties or conditions
|
| 148 |
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
| 149 |
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
| 150 |
+
appropriateness of using or redistributing the Work and assume any
|
| 151 |
+
risks associated with Your exercise of permissions under this License.
|
| 152 |
+
|
| 153 |
+
8. Limitation of Liability. In no event and under no legal theory,
|
| 154 |
+
whether in tort (including negligence), contract, or otherwise,
|
| 155 |
+
unless required by applicable law (such as deliberate and grossly
|
| 156 |
+
negligent acts) or agreed to in writing, shall any Contributor be
|
| 157 |
+
liable to You for damages, including any direct, indirect, special,
|
| 158 |
+
incidental, or consequential damages of any character arising as a
|
| 159 |
+
result of this License or out of the use or inability to use the
|
| 160 |
+
Work (including but not limited to damages for loss of goodwill,
|
| 161 |
+
work stoppage, computer failure or malfunction, or any and all
|
| 162 |
+
other commercial damages or losses), even if such Contributor
|
| 163 |
+
has been advised of the possibility of such damages.
|
| 164 |
+
|
| 165 |
+
9. Accepting Warranty or Additional Liability. While redistributing
|
| 166 |
+
the Work or Derivative Works thereof, You may choose to offer,
|
| 167 |
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
| 168 |
+
or other liability obligations and/or rights consistent with this
|
| 169 |
+
License. However, in accepting such obligations, You may act only
|
| 170 |
+
on Your own behalf and on Your sole responsibility, not on behalf
|
| 171 |
+
of any other Contributor, and only if You agree to indemnify,
|
| 172 |
+
defend, and hold each Contributor harmless for any liability
|
| 173 |
+
incurred by, or claims asserted against, such Contributor by reason
|
| 174 |
+
of your accepting any such warranty or additional liability.
|
| 175 |
+
|
| 176 |
+
END OF TERMS AND CONDITIONS
|
| 177 |
+
|
| 178 |
+
APPENDIX: How to apply the Apache License to your work.
|
| 179 |
+
|
| 180 |
+
To apply the Apache License to your work, attach the following
|
| 181 |
+
boilerplate notice, with the fields enclosed by brackets "[]"
|
| 182 |
+
replaced with your own identifying information. (Don't include
|
| 183 |
+
the brackets!) The text should be enclosed in the appropriate
|
| 184 |
+
comment syntax for the file format. We also recommend that a
|
| 185 |
+
file or class name and description of purpose be included on the
|
| 186 |
+
same "printed page" as the copyright notice for easier
|
| 187 |
+
identification within third-party archives.
|
| 188 |
+
|
| 189 |
+
Copyright [yyyy] [name of copyright owner]
|
| 190 |
+
|
| 191 |
+
Licensed under the Apache License, Version 2.0 (the "License");
|
| 192 |
+
you may not use this file except in compliance with the License.
|
| 193 |
+
You may obtain a copy of the License at
|
| 194 |
+
|
| 195 |
+
http://www.apache.org/licenses/LICENSE-2.0
|
| 196 |
+
|
| 197 |
+
Unless required by applicable law or agreed to in writing, software
|
| 198 |
+
distributed under the License is distributed on an "AS IS" BASIS,
|
| 199 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 200 |
+
See the License for the specific language governing permissions and
|
| 201 |
+
limitations under the License.
|
wan_models/Wan2.1-T2V-14B/README.md
ADDED
|
@@ -0,0 +1,301 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
license: apache-2.0
|
| 3 |
+
language:
|
| 4 |
+
- en
|
| 5 |
+
- zh
|
| 6 |
+
pipeline_tag: text-to-video
|
| 7 |
+
tags:
|
| 8 |
+
- video generation
|
| 9 |
+
library_name: diffusers
|
| 10 |
+
inference:
|
| 11 |
+
parameters:
|
| 12 |
+
num_inference_steps: 10
|
| 13 |
+
---
|
| 14 |
+
# Wan2.1
|
| 15 |
+
|
| 16 |
+
<p align="center">
|
| 17 |
+
<img src="assets/logo.png" width="400"/>
|
| 18 |
+
<p>
|
| 19 |
+
|
| 20 |
+
<p align="center">
|
| 21 |
+
💜 <a href=""><b>Wan</b></a>    |    🖥️ <a href="https://github.com/Wan-Video/Wan2.1">GitHub</a>    |   🤗 <a href="https://huggingface.co/Wan-AI/">Hugging Face</a>   |   🤖 <a href="https://modelscope.cn/organization/Wan-AI">ModelScope</a>   |    📑 <a href="">Paper (Coming soon)</a>    |    📑 <a href="https://wanxai.com">Blog</a>    |   💬 <a href="https://gw.alicdn.com/imgextra/i2/O1CN01tqjWFi1ByuyehkTSB_!!6000000000015-0-tps-611-1279.jpg">WeChat Group</a>   |    📖 <a href="https://discord.gg/p5XbdQV7">Discord</a>  
|
| 22 |
+
<br>
|
| 23 |
+
|
| 24 |
+
-----
|
| 25 |
+
|
| 26 |
+
[**Wan: Open and Advanced Large-Scale Video Generative Models**]("") <be>
|
| 27 |
+
|
| 28 |
+
In this repository, we present **Wan2.1**, a comprehensive and open suite of video foundation models that pushes the boundaries of video generation. **Wan2.1** offers these key features:
|
| 29 |
+
- 👍 **SOTA Performance**: **Wan2.1** consistently outperforms existing open-source models and state-of-the-art commercial solutions across multiple benchmarks.
|
| 30 |
+
- 👍 **Supports Consumer-grade GPUs**: The T2V-1.3B model requires only 8.19 GB VRAM, making it compatible with almost all consumer-grade GPUs. It can generate a 5-second 480P video on an RTX 4090 in about 4 minutes (without optimization techniques like quantization). Its performance is even comparable to some closed-source models.
|
| 31 |
+
- 👍 **Multiple Tasks**: **Wan2.1** excels in Text-to-Video, Image-to-Video, Video Editing, Text-to-Image, and Video-to-Audio, advancing the field of video generation.
|
| 32 |
+
- 👍 **Visual Text Generation**: **Wan2.1** is the first video model capable of generating both Chinese and English text, featuring robust text generation that enhances its practical applications.
|
| 33 |
+
- 👍 **Powerful Video VAE**: **Wan-VAE** delivers exceptional efficiency and performance, encoding and decoding 1080P videos of any length while preserving temporal information, making it an ideal foundation for video and image generation.
|
| 34 |
+
|
| 35 |
+
This repository features our T2V-14B model, which establishes a new SOTA performance benchmark among both open-source and closed-source models. It demonstrates exceptional capabilities in generating high-quality visuals with significant motion dynamics. It is also the only video model capable of producing both Chinese and English text and supports video generation at both 480P and 720P resolutions.
|
| 36 |
+
|
| 37 |
+
|
| 38 |
+
## Video Demos
|
| 39 |
+
|
| 40 |
+
<div align="center">
|
| 41 |
+
<video width="80%" controls>
|
| 42 |
+
<source src="https://cloud.video.taobao.com/vod/Jth64Y7wNoPcJki_Bo1ZJTDBvNjsgjlVKsNs05Fqfps.mp4" type="video/mp4">
|
| 43 |
+
Your browser does not support the video tag.
|
| 44 |
+
</video>
|
| 45 |
+
</div>
|
| 46 |
+
|
| 47 |
+
## 🔥 Latest News!!
|
| 48 |
+
|
| 49 |
+
* Feb 22, 2025: 👋 We've released the inference code and weights of Wan2.1.
|
| 50 |
+
|
| 51 |
+
|
| 52 |
+
## 📑 Todo List
|
| 53 |
+
- Wan2.1 Text-to-Video
|
| 54 |
+
- [x] Multi-GPU Inference code of the 14B and 1.3B models
|
| 55 |
+
- [x] Checkpoints of the 14B and 1.3B models
|
| 56 |
+
- [x] Gradio demo
|
| 57 |
+
- [ ] Diffusers integration
|
| 58 |
+
- [ ] ComfyUI integration
|
| 59 |
+
- Wan2.1 Image-to-Video
|
| 60 |
+
- [x] Multi-GPU Inference code of the 14B model
|
| 61 |
+
- [x] Checkpoints of the 14B model
|
| 62 |
+
- [x] Gradio demo
|
| 63 |
+
- [ ] Diffusers integration
|
| 64 |
+
- [ ] ComfyUI integration
|
| 65 |
+
|
| 66 |
+
|
| 67 |
+
## Quickstart
|
| 68 |
+
|
| 69 |
+
#### Installation
|
| 70 |
+
Clone the repo:
|
| 71 |
+
```
|
| 72 |
+
git clone https://github.com/Wan-Video/Wan2.1.git
|
| 73 |
+
cd Wan2.1
|
| 74 |
+
```
|
| 75 |
+
|
| 76 |
+
Install dependencies:
|
| 77 |
+
```
|
| 78 |
+
# Ensure torch >= 2.4.0
|
| 79 |
+
pip install -r requirements.txt
|
| 80 |
+
```
|
| 81 |
+
|
| 82 |
+
|
| 83 |
+
#### Model Download
|
| 84 |
+
|
| 85 |
+
| Models | Download Link | Notes |
|
| 86 |
+
| --------------|-------------------------------------------------------------------------------|-------------------------------|
|
| 87 |
+
| T2V-14B | 🤗 [Huggingface](https://huggingface.co/Wan-AI/Wan2.1-T2V-14B) 🤖 [ModelScope](https://www.modelscope.cn/models/Wan-AI/Wan2.1-T2V-14B) | Supports both 480P and 720P
|
| 88 |
+
| I2V-14B-720P | 🤗 [Huggingface](https://huggingface.co/Wan-AI/Wan2.1-I2V-14B-720P) 🤖 [ModelScope](https://www.modelscope.cn/models/Wan-AI/Wan2.1-I2V-14B-720P) | Supports 720P
|
| 89 |
+
| I2V-14B-480P | 🤗 [Huggingface](https://huggingface.co/Wan-AI/Wan2.1-I2V-14B-480P) 🤖 [ModelScope](https://www.modelscope.cn/models/Wan-AI/Wan2.1-I2V-14B-480P) | Supports 480P
|
| 90 |
+
| T2V-1.3B | 🤗 [Huggingface](https://huggingface.co/Wan-AI/Wan2.1-T2V-1.3B) 🤖 [ModelScope](https://www.modelscope.cn/models/Wan-AI/Wan2.1-T2V-1.3B) | Supports 480P
|
| 91 |
+
|
| 92 |
+
> 💡Note: The 1.3B model is capable of generating videos at 720P resolution. However, due to limited training at this resolution, the results are generally less stable compared to 480P. For optimal performance, we recommend using 480P resolution.
|
| 93 |
+
|
| 94 |
+
|
| 95 |
+
Download models using 🤗 huggingface-cli:
|
| 96 |
+
```
|
| 97 |
+
pip install "huggingface_hub[cli]"
|
| 98 |
+
huggingface-cli download Wan-AI/Wan2.1-T2V-14B --local-dir ./Wan2.1-T2V-14B
|
| 99 |
+
```
|
| 100 |
+
|
| 101 |
+
Download models using 🤖 modelscope-cli:
|
| 102 |
+
```
|
| 103 |
+
pip install modelscope
|
| 104 |
+
modelscope download Wan-AI/Wan2.1-T2V-14B --local_dir ./Wan2.1-T2V-14B
|
| 105 |
+
```
|
| 106 |
+
#### Run Text-to-Video Generation
|
| 107 |
+
|
| 108 |
+
This repository supports two Text-to-Video models (1.3B and 14B) and two resolutions (480P and 720P). The parameters and configurations for these models are as follows:
|
| 109 |
+
|
| 110 |
+
<table>
|
| 111 |
+
<thead>
|
| 112 |
+
<tr>
|
| 113 |
+
<th rowspan="2">Task</th>
|
| 114 |
+
<th colspan="2">Resolution</th>
|
| 115 |
+
<th rowspan="2">Model</th>
|
| 116 |
+
</tr>
|
| 117 |
+
<tr>
|
| 118 |
+
<th>480P</th>
|
| 119 |
+
<th>720P</th>
|
| 120 |
+
</tr>
|
| 121 |
+
</thead>
|
| 122 |
+
<tbody>
|
| 123 |
+
<tr>
|
| 124 |
+
<td>t2v-14B</td>
|
| 125 |
+
<td style="color: green;">✔️</td>
|
| 126 |
+
<td style="color: green;">✔️</td>
|
| 127 |
+
<td>Wan2.1-T2V-14B</td>
|
| 128 |
+
</tr>
|
| 129 |
+
<tr>
|
| 130 |
+
<td>t2v-1.3B</td>
|
| 131 |
+
<td style="color: green;">✔️</td>
|
| 132 |
+
<td style="color: red;">❌</td>
|
| 133 |
+
<td>Wan2.1-T2V-1.3B</td>
|
| 134 |
+
</tr>
|
| 135 |
+
</tbody>
|
| 136 |
+
</table>
|
| 137 |
+
|
| 138 |
+
|
| 139 |
+
##### (1) Without Prompt Extention
|
| 140 |
+
|
| 141 |
+
To facilitate implementation, we will start with a basic version of the inference process that skips the [prompt extension](#2-using-prompt-extention) step.
|
| 142 |
+
|
| 143 |
+
- Single-GPU inference
|
| 144 |
+
|
| 145 |
+
```
|
| 146 |
+
python generate.py --task t2v-14B --size 1280*720 --ckpt_dir ./Wan2.1-T2V-14B --prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage."
|
| 147 |
+
```
|
| 148 |
+
|
| 149 |
+
If you encounter OOM (Out-of-Memory) issues, you can use the `--offload_model True` and `--t5_cpu` options to reduce GPU memory usage. For example, on an RTX 4090 GPU:
|
| 150 |
+
|
| 151 |
+
```
|
| 152 |
+
python generate.py --task t2v-1.3B --size 832*480 --ckpt_dir ./Wan2.1-T2V-1.3B --offload_model True --t5_cpu --sample_shift 8 --sample_guide_scale 6 --prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage."
|
| 153 |
+
```
|
| 154 |
+
|
| 155 |
+
> 💡Note: If you are using the `T2V-1.3B` model, we recommend setting the parameter `--sample_guide_scale 6`. The `--sample_shift parameter` can be adjusted within the range of 8 to 12 based on the performance.
|
| 156 |
+
|
| 157 |
+
|
| 158 |
+
- Multi-GPU inference using FSDP + xDiT USP
|
| 159 |
+
|
| 160 |
+
```
|
| 161 |
+
pip install "xfuser>=0.4.1"
|
| 162 |
+
torchrun --nproc_per_node=8 generate.py --task t2v-14B --size 1280*720 --ckpt_dir ./Wan2.1-T2V-14B --dit_fsdp --t5_fsdp --ulysses_size 8 --prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage."
|
| 163 |
+
```
|
| 164 |
+
|
| 165 |
+
|
| 166 |
+
##### (2) Using Prompt Extention
|
| 167 |
+
|
| 168 |
+
Extending the prompts can effectively enrich the details in the generated videos, further enhancing the video quality. Therefore, we recommend enabling prompt extension. We provide the following two methods for prompt extension:
|
| 169 |
+
|
| 170 |
+
- Use the Dashscope API for extension.
|
| 171 |
+
- Apply for a `dashscope.api_key` in advance ([EN](https://www.alibabacloud.com/help/en/model-studio/getting-started/first-api-call-to-qwen) | [CN](https://help.aliyun.com/zh/model-studio/getting-started/first-api-call-to-qwen)).
|
| 172 |
+
- Configure the environment variable `DASH_API_KEY` to specify the Dashscope API key. For users of Alibaba Cloud's international site, you also need to set the environment variable `DASH_API_URL` to 'https://dashscope-intl.aliyuncs.com/api/v1'. For more detailed instructions, please refer to the [dashscope document](https://www.alibabacloud.com/help/en/model-studio/developer-reference/use-qwen-by-calling-api?spm=a2c63.p38356.0.i1).
|
| 173 |
+
- Use the `qwen-plus` model for text-to-video tasks and `qwen-vl-max` for image-to-video tasks.
|
| 174 |
+
- You can modify the model used for extension with the parameter `--prompt_extend_model`. For example:
|
| 175 |
+
```
|
| 176 |
+
DASH_API_KEY=your_key python generate.py --task t2v-14B --size 1280*720 --ckpt_dir ./Wan2.1-T2V-14B --prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage" --use_prompt_extend --prompt_extend_method 'dashscope' --prompt_extend_target_lang 'ch'
|
| 177 |
+
```
|
| 178 |
+
|
| 179 |
+
- Using a local model for extension.
|
| 180 |
+
|
| 181 |
+
- By default, the Qwen model on HuggingFace is used for this extension. Users can choose based on the available GPU memory size.
|
| 182 |
+
- For text-to-video tasks, you can use models like `Qwen/Qwen2.5-14B-Instruct`, `Qwen/Qwen2.5-7B-Instruct` and `Qwen/Qwen2.5-3B-Instruct`
|
| 183 |
+
- For image-to-video tasks, you can use models like `Qwen/Qwen2.5-VL-7B-Instruct` and `Qwen/Qwen2.5-VL-3B-Instruct`.
|
| 184 |
+
- Larger models generally provide better extension results but require more GPU memory.
|
| 185 |
+
- You can modify the model used for extension with the parameter `--prompt_extend_model` , allowing you to specify either a local model path or a Hugging Face model. For example:
|
| 186 |
+
|
| 187 |
+
```
|
| 188 |
+
python generate.py --task t2v-14B --size 1280*720 --ckpt_dir ./Wan2.1-T2V-14B --prompt "Two anthropomorphic cats in comfy boxing gear and bright gloves fight intensely on a spotlighted stage" --use_prompt_extend --prompt_extend_method 'local_qwen' --prompt_extend_target_lang 'ch'
|
| 189 |
+
```
|
| 190 |
+
|
| 191 |
+
##### (3) Runing local gradio
|
| 192 |
+
|
| 193 |
+
```
|
| 194 |
+
cd gradio
|
| 195 |
+
# if one uses dashscope’s API for prompt extension
|
| 196 |
+
DASH_API_KEY=your_key python t2v_14B_singleGPU.py --prompt_extend_method 'dashscope' --ckpt_dir ./Wan2.1-T2V-14B
|
| 197 |
+
|
| 198 |
+
# if one uses a local model for prompt extension
|
| 199 |
+
python t2v_14B_singleGPU.py --prompt_extend_method 'local_qwen' --ckpt_dir ./Wan2.1-T2V-14B
|
| 200 |
+
```
|
| 201 |
+
|
| 202 |
+
|
| 203 |
+
## Manual Evaluation
|
| 204 |
+
|
| 205 |
+
|
| 206 |
+
Through manual evaluation, the results generated after prompt extension are superior to those from both closed-source and open-source models.
|
| 207 |
+
|
| 208 |
+
<div align="center">
|
| 209 |
+
<img src="assets/t2v_res.jpg" alt="" style="width: 80%;" />
|
| 210 |
+
</div>
|
| 211 |
+
|
| 212 |
+
|
| 213 |
+
|
| 214 |
+
## Computational Efficiency on Different GPUs
|
| 215 |
+
|
| 216 |
+
We test the computational efficiency of different **Wan2.1** models on different GPUs in the following table. The results are presented in the format: **Total time (s) / peak GPU memory (GB)**.
|
| 217 |
+
|
| 218 |
+
|
| 219 |
+
<div align="center">
|
| 220 |
+
<img src="assets/comp_effic.png" alt="" style="width: 80%;" />
|
| 221 |
+
</div>
|
| 222 |
+
|
| 223 |
+
> The parameter settings for the tests presented in this table are as follows:
|
| 224 |
+
> (1) For the 1.3B model on 8 GPUs, set `--ring_size 8` and `--ulysses_size 1`;
|
| 225 |
+
> (2) For the 14B model on 1 GPU, use `--offload_model True`;
|
| 226 |
+
> (3) For the 1.3B model on a single 4090 GPU, set `--offload_model True --t5_cpu`;
|
| 227 |
+
> (4) For all testings, no prompt extension was applied, meaning `--use_prompt_extend` was not enabled.
|
| 228 |
+
|
| 229 |
+
|
| 230 |
+
## Community Contributions
|
| 231 |
+
- [DiffSynth-Studio](https://github.com/modelscope/DiffSynth-Studio) provides more support for Wan, including video-to-video, FP8 quantization, VRAM optimization, LoRA training, and more. Please refer to [their examples](https://github.com/modelscope/DiffSynth-Studio/tree/main/examples/wanvideo).
|
| 232 |
+
|
| 233 |
+
-------
|
| 234 |
+
|
| 235 |
+
## Introduction of Wan2.1
|
| 236 |
+
|
| 237 |
+
**Wan2.1** is designed on the mainstream diffusion transformer paradigm, achieving significant advancements in generative capabilities through a series of innovations. These include our novel spatio-temporal variational autoencoder (VAE), scalable training strategies, large-scale data construction, and automated evaluation metrics. Collectively, these contributions enhance the model’s performance and versatility.
|
| 238 |
+
|
| 239 |
+
|
| 240 |
+
##### (1) 3D Variational Autoencoders
|
| 241 |
+
We propose a novel 3D causal VAE architecture, termed **Wan-VAE** specifically designed for video generation. By combining multiple strategies, we improve spatio-temporal compression, reduce memory usage, and ensure temporal causality. **Wan-VAE** demonstrates significant advantages in performance efficiency compared to other open-source VAEs. Furthermore, our **Wan-VAE** can encode and decode unlimited-length 1080P videos without losing historical temporal information, making it particularly well-suited for video generation tasks.
|
| 242 |
+
|
| 243 |
+
|
| 244 |
+
<div align="center">
|
| 245 |
+
<img src="assets/video_vae_res.jpg" alt="" style="width: 80%;" />
|
| 246 |
+
</div>
|
| 247 |
+
|
| 248 |
+
|
| 249 |
+
##### (2) Video Diffusion DiT
|
| 250 |
+
|
| 251 |
+
**Wan2.1** is designed using the Flow Matching framework within the paradigm of mainstream Diffusion Transformers. Our model's architecture uses the T5 Encoder to encode multilingual text input, with cross-attention in each transformer block embedding the text into the model structure. Additionally, we employ an MLP with a Linear layer and a SiLU layer to process the input time embeddings and predict six modulation parameters individually. This MLP is shared across all transformer blocks, with each block learning a distinct set of biases. Our experimental findings reveal a significant performance improvement with this approach at the same parameter scale.
|
| 252 |
+
|
| 253 |
+
<div align="center">
|
| 254 |
+
<img src="assets/video_dit_arch.jpg" alt="" style="width: 80%;" />
|
| 255 |
+
</div>
|
| 256 |
+
|
| 257 |
+
|
| 258 |
+
| Model | Dimension | Input Dimension | Output Dimension | Feedforward Dimension | Frequency Dimension | Number of Heads | Number of Layers |
|
| 259 |
+
|--------|-----------|-----------------|------------------|-----------------------|---------------------|-----------------|------------------|
|
| 260 |
+
| 1.3B | 1536 | 16 | 16 | 8960 | 256 | 12 | 30 |
|
| 261 |
+
| 14B | 5120 | 16 | 16 | 13824 | 256 | 40 | 40 |
|
| 262 |
+
|
| 263 |
+
|
| 264 |
+
|
| 265 |
+
##### Data
|
| 266 |
+
|
| 267 |
+
We curated and deduplicated a candidate dataset comprising a vast amount of image and video data. During the data curation process, we designed a four-step data cleaning process, focusing on fundamental dimensions, visual quality and motion quality. Through the robust data processing pipeline, we can easily obtain high-quality, diverse, and large-scale training sets of images and videos.
|
| 268 |
+
|
| 269 |
+

|
| 270 |
+
|
| 271 |
+
|
| 272 |
+
##### Comparisons to SOTA
|
| 273 |
+
We compared **Wan2.1** with leading open-source and closed-source models to evaluate the performace. Using our carefully designed set of 1,035 internal prompts, we tested across 14 major dimensions and 26 sub-dimensions. We then compute the total score by performing a weighted calculation on the scores of each dimension, utilizing weights derived from human preferences in the matching process. The detailed results are shown in the table below. These results demonstrate our model's superior performance compared to both open-source and closed-source models.
|
| 274 |
+
|
| 275 |
+

|
| 276 |
+
|
| 277 |
+
|
| 278 |
+
## Citation
|
| 279 |
+
If you find our work helpful, please cite us.
|
| 280 |
+
|
| 281 |
+
```
|
| 282 |
+
@article{wan2.1,
|
| 283 |
+
title = {Wan: Open and Advanced Large-Scale Video Generative Models},
|
| 284 |
+
author = {Wan Team},
|
| 285 |
+
journal = {},
|
| 286 |
+
year = {2025}
|
| 287 |
+
}
|
| 288 |
+
```
|
| 289 |
+
|
| 290 |
+
## License Agreement
|
| 291 |
+
The models in this repository are licensed under the Apache 2.0 License. We claim no rights over the your generate contents, granting you the freedom to use them while ensuring that your usage complies with the provisions of this license. You are fully accountable for your use of the models, which must not involve sharing any content that violates applicable laws, causes harm to individuals or groups, disseminates personal information intended for harm, spreads misinformation, or targets vulnerable populations. For a complete list of restrictions and details regarding your rights, please refer to the full text of the [license](LICENSE.txt).
|
| 292 |
+
|
| 293 |
+
|
| 294 |
+
## Acknowledgements
|
| 295 |
+
|
| 296 |
+
We would like to thank the contributors to the [SD3](https://huggingface.co/stabilityai/stable-diffusion-3-medium), [Qwen](https://huggingface.co/Qwen), [umt5-xxl](https://huggingface.co/google/umt5-xxl), [diffusers](https://github.com/huggingface/diffusers) and [HuggingFace](https://huggingface.co) repositories, for their open research.
|
| 297 |
+
|
| 298 |
+
|
| 299 |
+
|
| 300 |
+
## Contact Us
|
| 301 |
+
If you would like to leave a message to our research or product teams, feel free to join our [Discord](https://discord.gg/p5XbdQV7) or [WeChat groups](https://gw.alicdn.com/imgextra/i2/O1CN01tqjWFi1ByuyehkTSB_!!6000000000015-0-tps-611-1279.jpg)!
|
wan_models/Wan2.1-T2V-14B/assets/logo.png
ADDED
|
wan_models/Wan2.1-T2V-14B/diffusion_pytorch_model.safetensors.index.json
ADDED
|
@@ -0,0 +1,1102 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"metadata": {
|
| 3 |
+
"total_size": 57153966336
|
| 4 |
+
},
|
| 5 |
+
"weight_map": {
|
| 6 |
+
"blocks.0.cross_attn.k.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 7 |
+
"blocks.0.cross_attn.k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 8 |
+
"blocks.0.cross_attn.norm_k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 9 |
+
"blocks.0.cross_attn.norm_q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 10 |
+
"blocks.0.cross_attn.o.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 11 |
+
"blocks.0.cross_attn.o.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 12 |
+
"blocks.0.cross_attn.q.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 13 |
+
"blocks.0.cross_attn.q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 14 |
+
"blocks.0.cross_attn.v.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 15 |
+
"blocks.0.cross_attn.v.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 16 |
+
"blocks.0.ffn.0.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 17 |
+
"blocks.0.ffn.0.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 18 |
+
"blocks.0.ffn.2.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 19 |
+
"blocks.0.ffn.2.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 20 |
+
"blocks.0.modulation": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 21 |
+
"blocks.0.norm3.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 22 |
+
"blocks.0.norm3.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 23 |
+
"blocks.0.self_attn.k.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 24 |
+
"blocks.0.self_attn.k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 25 |
+
"blocks.0.self_attn.norm_k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 26 |
+
"blocks.0.self_attn.norm_q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 27 |
+
"blocks.0.self_attn.o.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 28 |
+
"blocks.0.self_attn.o.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 29 |
+
"blocks.0.self_attn.q.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 30 |
+
"blocks.0.self_attn.q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 31 |
+
"blocks.0.self_attn.v.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 32 |
+
"blocks.0.self_attn.v.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 33 |
+
"blocks.1.cross_attn.k.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 34 |
+
"blocks.1.cross_attn.k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 35 |
+
"blocks.1.cross_attn.norm_k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 36 |
+
"blocks.1.cross_attn.norm_q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 37 |
+
"blocks.1.cross_attn.o.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 38 |
+
"blocks.1.cross_attn.o.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 39 |
+
"blocks.1.cross_attn.q.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 40 |
+
"blocks.1.cross_attn.q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 41 |
+
"blocks.1.cross_attn.v.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 42 |
+
"blocks.1.cross_attn.v.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 43 |
+
"blocks.1.ffn.0.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 44 |
+
"blocks.1.ffn.0.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 45 |
+
"blocks.1.ffn.2.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 46 |
+
"blocks.1.ffn.2.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 47 |
+
"blocks.1.modulation": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 48 |
+
"blocks.1.norm3.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 49 |
+
"blocks.1.norm3.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 50 |
+
"blocks.1.self_attn.k.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 51 |
+
"blocks.1.self_attn.k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 52 |
+
"blocks.1.self_attn.norm_k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 53 |
+
"blocks.1.self_attn.norm_q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 54 |
+
"blocks.1.self_attn.o.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 55 |
+
"blocks.1.self_attn.o.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 56 |
+
"blocks.1.self_attn.q.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 57 |
+
"blocks.1.self_attn.q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 58 |
+
"blocks.1.self_attn.v.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 59 |
+
"blocks.1.self_attn.v.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 60 |
+
"blocks.10.cross_attn.k.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 61 |
+
"blocks.10.cross_attn.k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 62 |
+
"blocks.10.cross_attn.norm_k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 63 |
+
"blocks.10.cross_attn.norm_q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 64 |
+
"blocks.10.cross_attn.o.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 65 |
+
"blocks.10.cross_attn.o.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 66 |
+
"blocks.10.cross_attn.q.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 67 |
+
"blocks.10.cross_attn.q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 68 |
+
"blocks.10.cross_attn.v.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 69 |
+
"blocks.10.cross_attn.v.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 70 |
+
"blocks.10.ffn.0.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 71 |
+
"blocks.10.ffn.0.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 72 |
+
"blocks.10.ffn.2.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 73 |
+
"blocks.10.ffn.2.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 74 |
+
"blocks.10.modulation": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 75 |
+
"blocks.10.norm3.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 76 |
+
"blocks.10.norm3.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 77 |
+
"blocks.10.self_attn.k.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 78 |
+
"blocks.10.self_attn.k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 79 |
+
"blocks.10.self_attn.norm_k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 80 |
+
"blocks.10.self_attn.norm_q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 81 |
+
"blocks.10.self_attn.o.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 82 |
+
"blocks.10.self_attn.o.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 83 |
+
"blocks.10.self_attn.q.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 84 |
+
"blocks.10.self_attn.q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 85 |
+
"blocks.10.self_attn.v.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 86 |
+
"blocks.10.self_attn.v.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 87 |
+
"blocks.11.cross_attn.k.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 88 |
+
"blocks.11.cross_attn.k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 89 |
+
"blocks.11.cross_attn.norm_k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 90 |
+
"blocks.11.cross_attn.norm_q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 91 |
+
"blocks.11.cross_attn.o.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 92 |
+
"blocks.11.cross_attn.o.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 93 |
+
"blocks.11.cross_attn.q.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 94 |
+
"blocks.11.cross_attn.q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 95 |
+
"blocks.11.cross_attn.v.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 96 |
+
"blocks.11.cross_attn.v.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 97 |
+
"blocks.11.ffn.0.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 98 |
+
"blocks.11.ffn.0.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 99 |
+
"blocks.11.ffn.2.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 100 |
+
"blocks.11.ffn.2.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 101 |
+
"blocks.11.modulation": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 102 |
+
"blocks.11.norm3.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 103 |
+
"blocks.11.norm3.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 104 |
+
"blocks.11.self_attn.k.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 105 |
+
"blocks.11.self_attn.k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 106 |
+
"blocks.11.self_attn.norm_k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 107 |
+
"blocks.11.self_attn.norm_q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 108 |
+
"blocks.11.self_attn.o.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 109 |
+
"blocks.11.self_attn.o.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 110 |
+
"blocks.11.self_attn.q.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 111 |
+
"blocks.11.self_attn.q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 112 |
+
"blocks.11.self_attn.v.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 113 |
+
"blocks.11.self_attn.v.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 114 |
+
"blocks.12.cross_attn.k.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 115 |
+
"blocks.12.cross_attn.k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 116 |
+
"blocks.12.cross_attn.norm_k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 117 |
+
"blocks.12.cross_attn.norm_q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 118 |
+
"blocks.12.cross_attn.o.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 119 |
+
"blocks.12.cross_attn.o.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 120 |
+
"blocks.12.cross_attn.q.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 121 |
+
"blocks.12.cross_attn.q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 122 |
+
"blocks.12.cross_attn.v.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 123 |
+
"blocks.12.cross_attn.v.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 124 |
+
"blocks.12.ffn.0.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 125 |
+
"blocks.12.ffn.0.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 126 |
+
"blocks.12.ffn.2.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 127 |
+
"blocks.12.ffn.2.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 128 |
+
"blocks.12.modulation": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 129 |
+
"blocks.12.norm3.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 130 |
+
"blocks.12.norm3.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 131 |
+
"blocks.12.self_attn.k.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 132 |
+
"blocks.12.self_attn.k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 133 |
+
"blocks.12.self_attn.norm_k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 134 |
+
"blocks.12.self_attn.norm_q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 135 |
+
"blocks.12.self_attn.o.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 136 |
+
"blocks.12.self_attn.o.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 137 |
+
"blocks.12.self_attn.q.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 138 |
+
"blocks.12.self_attn.q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 139 |
+
"blocks.12.self_attn.v.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 140 |
+
"blocks.12.self_attn.v.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 141 |
+
"blocks.13.cross_attn.k.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 142 |
+
"blocks.13.cross_attn.k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 143 |
+
"blocks.13.cross_attn.norm_k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 144 |
+
"blocks.13.cross_attn.norm_q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 145 |
+
"blocks.13.cross_attn.o.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 146 |
+
"blocks.13.cross_attn.o.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 147 |
+
"blocks.13.cross_attn.q.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 148 |
+
"blocks.13.cross_attn.q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 149 |
+
"blocks.13.cross_attn.v.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 150 |
+
"blocks.13.cross_attn.v.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 151 |
+
"blocks.13.ffn.0.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 152 |
+
"blocks.13.ffn.0.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 153 |
+
"blocks.13.ffn.2.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 154 |
+
"blocks.13.ffn.2.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 155 |
+
"blocks.13.modulation": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 156 |
+
"blocks.13.norm3.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 157 |
+
"blocks.13.norm3.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 158 |
+
"blocks.13.self_attn.k.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 159 |
+
"blocks.13.self_attn.k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 160 |
+
"blocks.13.self_attn.norm_k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 161 |
+
"blocks.13.self_attn.norm_q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 162 |
+
"blocks.13.self_attn.o.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 163 |
+
"blocks.13.self_attn.o.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 164 |
+
"blocks.13.self_attn.q.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 165 |
+
"blocks.13.self_attn.q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 166 |
+
"blocks.13.self_attn.v.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 167 |
+
"blocks.13.self_attn.v.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 168 |
+
"blocks.14.cross_attn.k.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 169 |
+
"blocks.14.cross_attn.k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 170 |
+
"blocks.14.cross_attn.norm_k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 171 |
+
"blocks.14.cross_attn.norm_q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 172 |
+
"blocks.14.cross_attn.o.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 173 |
+
"blocks.14.cross_attn.o.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 174 |
+
"blocks.14.cross_attn.q.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 175 |
+
"blocks.14.cross_attn.q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 176 |
+
"blocks.14.cross_attn.v.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 177 |
+
"blocks.14.cross_attn.v.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 178 |
+
"blocks.14.ffn.0.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 179 |
+
"blocks.14.ffn.0.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 180 |
+
"blocks.14.ffn.2.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 181 |
+
"blocks.14.ffn.2.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 182 |
+
"blocks.14.modulation": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 183 |
+
"blocks.14.norm3.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 184 |
+
"blocks.14.norm3.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 185 |
+
"blocks.14.self_attn.k.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 186 |
+
"blocks.14.self_attn.k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 187 |
+
"blocks.14.self_attn.norm_k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 188 |
+
"blocks.14.self_attn.norm_q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 189 |
+
"blocks.14.self_attn.o.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 190 |
+
"blocks.14.self_attn.o.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 191 |
+
"blocks.14.self_attn.q.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 192 |
+
"blocks.14.self_attn.q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 193 |
+
"blocks.14.self_attn.v.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 194 |
+
"blocks.14.self_attn.v.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 195 |
+
"blocks.15.cross_attn.k.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 196 |
+
"blocks.15.cross_attn.k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 197 |
+
"blocks.15.cross_attn.norm_k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 198 |
+
"blocks.15.cross_attn.norm_q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 199 |
+
"blocks.15.cross_attn.o.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 200 |
+
"blocks.15.cross_attn.o.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 201 |
+
"blocks.15.cross_attn.q.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 202 |
+
"blocks.15.cross_attn.q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 203 |
+
"blocks.15.cross_attn.v.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 204 |
+
"blocks.15.cross_attn.v.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 205 |
+
"blocks.15.ffn.0.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 206 |
+
"blocks.15.ffn.0.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 207 |
+
"blocks.15.ffn.2.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 208 |
+
"blocks.15.ffn.2.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 209 |
+
"blocks.15.modulation": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 210 |
+
"blocks.15.norm3.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 211 |
+
"blocks.15.norm3.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 212 |
+
"blocks.15.self_attn.k.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 213 |
+
"blocks.15.self_attn.k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 214 |
+
"blocks.15.self_attn.norm_k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 215 |
+
"blocks.15.self_attn.norm_q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 216 |
+
"blocks.15.self_attn.o.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 217 |
+
"blocks.15.self_attn.o.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 218 |
+
"blocks.15.self_attn.q.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 219 |
+
"blocks.15.self_attn.q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 220 |
+
"blocks.15.self_attn.v.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 221 |
+
"blocks.15.self_attn.v.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 222 |
+
"blocks.16.cross_attn.k.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 223 |
+
"blocks.16.cross_attn.k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 224 |
+
"blocks.16.cross_attn.norm_k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 225 |
+
"blocks.16.cross_attn.norm_q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 226 |
+
"blocks.16.cross_attn.o.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 227 |
+
"blocks.16.cross_attn.o.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 228 |
+
"blocks.16.cross_attn.q.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 229 |
+
"blocks.16.cross_attn.q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 230 |
+
"blocks.16.cross_attn.v.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 231 |
+
"blocks.16.cross_attn.v.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 232 |
+
"blocks.16.ffn.0.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 233 |
+
"blocks.16.ffn.0.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 234 |
+
"blocks.16.ffn.2.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 235 |
+
"blocks.16.ffn.2.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 236 |
+
"blocks.16.modulation": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 237 |
+
"blocks.16.norm3.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 238 |
+
"blocks.16.norm3.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 239 |
+
"blocks.16.self_attn.k.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 240 |
+
"blocks.16.self_attn.k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 241 |
+
"blocks.16.self_attn.norm_k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 242 |
+
"blocks.16.self_attn.norm_q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 243 |
+
"blocks.16.self_attn.o.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 244 |
+
"blocks.16.self_attn.o.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 245 |
+
"blocks.16.self_attn.q.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 246 |
+
"blocks.16.self_attn.q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 247 |
+
"blocks.16.self_attn.v.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 248 |
+
"blocks.16.self_attn.v.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 249 |
+
"blocks.17.cross_attn.k.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 250 |
+
"blocks.17.cross_attn.k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 251 |
+
"blocks.17.cross_attn.norm_k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 252 |
+
"blocks.17.cross_attn.norm_q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 253 |
+
"blocks.17.cross_attn.o.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 254 |
+
"blocks.17.cross_attn.o.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 255 |
+
"blocks.17.cross_attn.q.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 256 |
+
"blocks.17.cross_attn.q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 257 |
+
"blocks.17.cross_attn.v.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 258 |
+
"blocks.17.cross_attn.v.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 259 |
+
"blocks.17.ffn.0.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 260 |
+
"blocks.17.ffn.0.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 261 |
+
"blocks.17.ffn.2.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 262 |
+
"blocks.17.ffn.2.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 263 |
+
"blocks.17.modulation": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 264 |
+
"blocks.17.norm3.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 265 |
+
"blocks.17.norm3.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 266 |
+
"blocks.17.self_attn.k.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 267 |
+
"blocks.17.self_attn.k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 268 |
+
"blocks.17.self_attn.norm_k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 269 |
+
"blocks.17.self_attn.norm_q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 270 |
+
"blocks.17.self_attn.o.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 271 |
+
"blocks.17.self_attn.o.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 272 |
+
"blocks.17.self_attn.q.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 273 |
+
"blocks.17.self_attn.q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 274 |
+
"blocks.17.self_attn.v.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 275 |
+
"blocks.17.self_attn.v.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 276 |
+
"blocks.18.cross_attn.k.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 277 |
+
"blocks.18.cross_attn.k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 278 |
+
"blocks.18.cross_attn.norm_k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 279 |
+
"blocks.18.cross_attn.norm_q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 280 |
+
"blocks.18.cross_attn.o.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 281 |
+
"blocks.18.cross_attn.o.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 282 |
+
"blocks.18.cross_attn.q.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 283 |
+
"blocks.18.cross_attn.q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 284 |
+
"blocks.18.cross_attn.v.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 285 |
+
"blocks.18.cross_attn.v.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 286 |
+
"blocks.18.ffn.0.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 287 |
+
"blocks.18.ffn.0.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 288 |
+
"blocks.18.ffn.2.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 289 |
+
"blocks.18.ffn.2.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 290 |
+
"blocks.18.modulation": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 291 |
+
"blocks.18.norm3.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 292 |
+
"blocks.18.norm3.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 293 |
+
"blocks.18.self_attn.k.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 294 |
+
"blocks.18.self_attn.k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 295 |
+
"blocks.18.self_attn.norm_k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 296 |
+
"blocks.18.self_attn.norm_q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 297 |
+
"blocks.18.self_attn.o.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 298 |
+
"blocks.18.self_attn.o.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 299 |
+
"blocks.18.self_attn.q.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 300 |
+
"blocks.18.self_attn.q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 301 |
+
"blocks.18.self_attn.v.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 302 |
+
"blocks.18.self_attn.v.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 303 |
+
"blocks.19.cross_attn.k.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 304 |
+
"blocks.19.cross_attn.k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 305 |
+
"blocks.19.cross_attn.norm_k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 306 |
+
"blocks.19.cross_attn.norm_q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 307 |
+
"blocks.19.cross_attn.o.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 308 |
+
"blocks.19.cross_attn.o.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 309 |
+
"blocks.19.cross_attn.q.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 310 |
+
"blocks.19.cross_attn.q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 311 |
+
"blocks.19.cross_attn.v.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 312 |
+
"blocks.19.cross_attn.v.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 313 |
+
"blocks.19.ffn.0.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 314 |
+
"blocks.19.ffn.0.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 315 |
+
"blocks.19.ffn.2.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 316 |
+
"blocks.19.ffn.2.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 317 |
+
"blocks.19.modulation": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 318 |
+
"blocks.19.norm3.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 319 |
+
"blocks.19.norm3.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 320 |
+
"blocks.19.self_attn.k.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 321 |
+
"blocks.19.self_attn.k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 322 |
+
"blocks.19.self_attn.norm_k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 323 |
+
"blocks.19.self_attn.norm_q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 324 |
+
"blocks.19.self_attn.o.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 325 |
+
"blocks.19.self_attn.o.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 326 |
+
"blocks.19.self_attn.q.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 327 |
+
"blocks.19.self_attn.q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 328 |
+
"blocks.19.self_attn.v.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 329 |
+
"blocks.19.self_attn.v.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 330 |
+
"blocks.2.cross_attn.k.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 331 |
+
"blocks.2.cross_attn.k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 332 |
+
"blocks.2.cross_attn.norm_k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 333 |
+
"blocks.2.cross_attn.norm_q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 334 |
+
"blocks.2.cross_attn.o.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 335 |
+
"blocks.2.cross_attn.o.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 336 |
+
"blocks.2.cross_attn.q.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 337 |
+
"blocks.2.cross_attn.q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 338 |
+
"blocks.2.cross_attn.v.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 339 |
+
"blocks.2.cross_attn.v.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 340 |
+
"blocks.2.ffn.0.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 341 |
+
"blocks.2.ffn.0.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 342 |
+
"blocks.2.ffn.2.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 343 |
+
"blocks.2.ffn.2.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 344 |
+
"blocks.2.modulation": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 345 |
+
"blocks.2.norm3.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 346 |
+
"blocks.2.norm3.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 347 |
+
"blocks.2.self_attn.k.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 348 |
+
"blocks.2.self_attn.k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 349 |
+
"blocks.2.self_attn.norm_k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 350 |
+
"blocks.2.self_attn.norm_q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 351 |
+
"blocks.2.self_attn.o.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 352 |
+
"blocks.2.self_attn.o.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 353 |
+
"blocks.2.self_attn.q.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 354 |
+
"blocks.2.self_attn.q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 355 |
+
"blocks.2.self_attn.v.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 356 |
+
"blocks.2.self_attn.v.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 357 |
+
"blocks.20.cross_attn.k.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 358 |
+
"blocks.20.cross_attn.k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 359 |
+
"blocks.20.cross_attn.norm_k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 360 |
+
"blocks.20.cross_attn.norm_q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 361 |
+
"blocks.20.cross_attn.o.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 362 |
+
"blocks.20.cross_attn.o.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 363 |
+
"blocks.20.cross_attn.q.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 364 |
+
"blocks.20.cross_attn.q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 365 |
+
"blocks.20.cross_attn.v.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 366 |
+
"blocks.20.cross_attn.v.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 367 |
+
"blocks.20.ffn.0.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 368 |
+
"blocks.20.ffn.0.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 369 |
+
"blocks.20.ffn.2.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 370 |
+
"blocks.20.ffn.2.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 371 |
+
"blocks.20.modulation": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 372 |
+
"blocks.20.norm3.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 373 |
+
"blocks.20.norm3.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 374 |
+
"blocks.20.self_attn.k.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 375 |
+
"blocks.20.self_attn.k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 376 |
+
"blocks.20.self_attn.norm_k.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 377 |
+
"blocks.20.self_attn.norm_q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 378 |
+
"blocks.20.self_attn.o.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 379 |
+
"blocks.20.self_attn.o.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 380 |
+
"blocks.20.self_attn.q.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 381 |
+
"blocks.20.self_attn.q.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 382 |
+
"blocks.20.self_attn.v.bias": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 383 |
+
"blocks.20.self_attn.v.weight": "diffusion_pytorch_model-00003-of-00006.safetensors",
|
| 384 |
+
"blocks.21.cross_attn.k.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 385 |
+
"blocks.21.cross_attn.k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 386 |
+
"blocks.21.cross_attn.norm_k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 387 |
+
"blocks.21.cross_attn.norm_q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 388 |
+
"blocks.21.cross_attn.o.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 389 |
+
"blocks.21.cross_attn.o.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 390 |
+
"blocks.21.cross_attn.q.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 391 |
+
"blocks.21.cross_attn.q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 392 |
+
"blocks.21.cross_attn.v.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 393 |
+
"blocks.21.cross_attn.v.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 394 |
+
"blocks.21.ffn.0.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 395 |
+
"blocks.21.ffn.0.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 396 |
+
"blocks.21.ffn.2.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 397 |
+
"blocks.21.ffn.2.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 398 |
+
"blocks.21.modulation": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 399 |
+
"blocks.21.norm3.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 400 |
+
"blocks.21.norm3.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 401 |
+
"blocks.21.self_attn.k.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 402 |
+
"blocks.21.self_attn.k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 403 |
+
"blocks.21.self_attn.norm_k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 404 |
+
"blocks.21.self_attn.norm_q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 405 |
+
"blocks.21.self_attn.o.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 406 |
+
"blocks.21.self_attn.o.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 407 |
+
"blocks.21.self_attn.q.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 408 |
+
"blocks.21.self_attn.q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 409 |
+
"blocks.21.self_attn.v.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 410 |
+
"blocks.21.self_attn.v.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 411 |
+
"blocks.22.cross_attn.k.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 412 |
+
"blocks.22.cross_attn.k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 413 |
+
"blocks.22.cross_attn.norm_k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 414 |
+
"blocks.22.cross_attn.norm_q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 415 |
+
"blocks.22.cross_attn.o.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 416 |
+
"blocks.22.cross_attn.o.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 417 |
+
"blocks.22.cross_attn.q.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 418 |
+
"blocks.22.cross_attn.q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 419 |
+
"blocks.22.cross_attn.v.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 420 |
+
"blocks.22.cross_attn.v.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 421 |
+
"blocks.22.ffn.0.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 422 |
+
"blocks.22.ffn.0.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 423 |
+
"blocks.22.ffn.2.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 424 |
+
"blocks.22.ffn.2.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 425 |
+
"blocks.22.modulation": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 426 |
+
"blocks.22.norm3.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 427 |
+
"blocks.22.norm3.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 428 |
+
"blocks.22.self_attn.k.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 429 |
+
"blocks.22.self_attn.k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 430 |
+
"blocks.22.self_attn.norm_k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 431 |
+
"blocks.22.self_attn.norm_q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 432 |
+
"blocks.22.self_attn.o.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 433 |
+
"blocks.22.self_attn.o.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 434 |
+
"blocks.22.self_attn.q.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 435 |
+
"blocks.22.self_attn.q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 436 |
+
"blocks.22.self_attn.v.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 437 |
+
"blocks.22.self_attn.v.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 438 |
+
"blocks.23.cross_attn.k.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 439 |
+
"blocks.23.cross_attn.k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 440 |
+
"blocks.23.cross_attn.norm_k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 441 |
+
"blocks.23.cross_attn.norm_q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 442 |
+
"blocks.23.cross_attn.o.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 443 |
+
"blocks.23.cross_attn.o.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 444 |
+
"blocks.23.cross_attn.q.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 445 |
+
"blocks.23.cross_attn.q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 446 |
+
"blocks.23.cross_attn.v.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 447 |
+
"blocks.23.cross_attn.v.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 448 |
+
"blocks.23.ffn.0.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 449 |
+
"blocks.23.ffn.0.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 450 |
+
"blocks.23.ffn.2.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 451 |
+
"blocks.23.ffn.2.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 452 |
+
"blocks.23.modulation": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 453 |
+
"blocks.23.norm3.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 454 |
+
"blocks.23.norm3.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 455 |
+
"blocks.23.self_attn.k.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 456 |
+
"blocks.23.self_attn.k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 457 |
+
"blocks.23.self_attn.norm_k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 458 |
+
"blocks.23.self_attn.norm_q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 459 |
+
"blocks.23.self_attn.o.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 460 |
+
"blocks.23.self_attn.o.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 461 |
+
"blocks.23.self_attn.q.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 462 |
+
"blocks.23.self_attn.q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 463 |
+
"blocks.23.self_attn.v.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 464 |
+
"blocks.23.self_attn.v.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 465 |
+
"blocks.24.cross_attn.k.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 466 |
+
"blocks.24.cross_attn.k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 467 |
+
"blocks.24.cross_attn.norm_k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 468 |
+
"blocks.24.cross_attn.norm_q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 469 |
+
"blocks.24.cross_attn.o.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 470 |
+
"blocks.24.cross_attn.o.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 471 |
+
"blocks.24.cross_attn.q.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 472 |
+
"blocks.24.cross_attn.q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 473 |
+
"blocks.24.cross_attn.v.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 474 |
+
"blocks.24.cross_attn.v.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 475 |
+
"blocks.24.ffn.0.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 476 |
+
"blocks.24.ffn.0.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 477 |
+
"blocks.24.ffn.2.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 478 |
+
"blocks.24.ffn.2.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 479 |
+
"blocks.24.modulation": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 480 |
+
"blocks.24.norm3.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 481 |
+
"blocks.24.norm3.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 482 |
+
"blocks.24.self_attn.k.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 483 |
+
"blocks.24.self_attn.k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 484 |
+
"blocks.24.self_attn.norm_k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 485 |
+
"blocks.24.self_attn.norm_q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 486 |
+
"blocks.24.self_attn.o.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 487 |
+
"blocks.24.self_attn.o.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 488 |
+
"blocks.24.self_attn.q.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 489 |
+
"blocks.24.self_attn.q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 490 |
+
"blocks.24.self_attn.v.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 491 |
+
"blocks.24.self_attn.v.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 492 |
+
"blocks.25.cross_attn.k.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 493 |
+
"blocks.25.cross_attn.k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 494 |
+
"blocks.25.cross_attn.norm_k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 495 |
+
"blocks.25.cross_attn.norm_q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 496 |
+
"blocks.25.cross_attn.o.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 497 |
+
"blocks.25.cross_attn.o.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 498 |
+
"blocks.25.cross_attn.q.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 499 |
+
"blocks.25.cross_attn.q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 500 |
+
"blocks.25.cross_attn.v.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 501 |
+
"blocks.25.cross_attn.v.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 502 |
+
"blocks.25.ffn.0.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 503 |
+
"blocks.25.ffn.0.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 504 |
+
"blocks.25.ffn.2.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 505 |
+
"blocks.25.ffn.2.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 506 |
+
"blocks.25.modulation": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 507 |
+
"blocks.25.norm3.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 508 |
+
"blocks.25.norm3.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 509 |
+
"blocks.25.self_attn.k.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 510 |
+
"blocks.25.self_attn.k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 511 |
+
"blocks.25.self_attn.norm_k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 512 |
+
"blocks.25.self_attn.norm_q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 513 |
+
"blocks.25.self_attn.o.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 514 |
+
"blocks.25.self_attn.o.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 515 |
+
"blocks.25.self_attn.q.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 516 |
+
"blocks.25.self_attn.q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 517 |
+
"blocks.25.self_attn.v.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 518 |
+
"blocks.25.self_attn.v.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 519 |
+
"blocks.26.cross_attn.k.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 520 |
+
"blocks.26.cross_attn.k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 521 |
+
"blocks.26.cross_attn.norm_k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 522 |
+
"blocks.26.cross_attn.norm_q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 523 |
+
"blocks.26.cross_attn.o.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 524 |
+
"blocks.26.cross_attn.o.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 525 |
+
"blocks.26.cross_attn.q.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 526 |
+
"blocks.26.cross_attn.q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 527 |
+
"blocks.26.cross_attn.v.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 528 |
+
"blocks.26.cross_attn.v.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 529 |
+
"blocks.26.ffn.0.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 530 |
+
"blocks.26.ffn.0.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 531 |
+
"blocks.26.ffn.2.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 532 |
+
"blocks.26.ffn.2.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 533 |
+
"blocks.26.modulation": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 534 |
+
"blocks.26.norm3.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 535 |
+
"blocks.26.norm3.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 536 |
+
"blocks.26.self_attn.k.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 537 |
+
"blocks.26.self_attn.k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 538 |
+
"blocks.26.self_attn.norm_k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 539 |
+
"blocks.26.self_attn.norm_q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 540 |
+
"blocks.26.self_attn.o.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 541 |
+
"blocks.26.self_attn.o.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 542 |
+
"blocks.26.self_attn.q.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 543 |
+
"blocks.26.self_attn.q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 544 |
+
"blocks.26.self_attn.v.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 545 |
+
"blocks.26.self_attn.v.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 546 |
+
"blocks.27.cross_attn.k.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 547 |
+
"blocks.27.cross_attn.k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 548 |
+
"blocks.27.cross_attn.norm_k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 549 |
+
"blocks.27.cross_attn.norm_q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 550 |
+
"blocks.27.cross_attn.o.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 551 |
+
"blocks.27.cross_attn.o.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 552 |
+
"blocks.27.cross_attn.q.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 553 |
+
"blocks.27.cross_attn.q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 554 |
+
"blocks.27.cross_attn.v.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 555 |
+
"blocks.27.cross_attn.v.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 556 |
+
"blocks.27.ffn.0.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 557 |
+
"blocks.27.ffn.0.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 558 |
+
"blocks.27.ffn.2.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 559 |
+
"blocks.27.ffn.2.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 560 |
+
"blocks.27.modulation": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 561 |
+
"blocks.27.norm3.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 562 |
+
"blocks.27.norm3.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 563 |
+
"blocks.27.self_attn.k.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 564 |
+
"blocks.27.self_attn.k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 565 |
+
"blocks.27.self_attn.norm_k.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 566 |
+
"blocks.27.self_attn.norm_q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 567 |
+
"blocks.27.self_attn.o.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 568 |
+
"blocks.27.self_attn.o.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 569 |
+
"blocks.27.self_attn.q.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 570 |
+
"blocks.27.self_attn.q.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 571 |
+
"blocks.27.self_attn.v.bias": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 572 |
+
"blocks.27.self_attn.v.weight": "diffusion_pytorch_model-00004-of-00006.safetensors",
|
| 573 |
+
"blocks.28.cross_attn.k.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 574 |
+
"blocks.28.cross_attn.k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 575 |
+
"blocks.28.cross_attn.norm_k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 576 |
+
"blocks.28.cross_attn.norm_q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 577 |
+
"blocks.28.cross_attn.o.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 578 |
+
"blocks.28.cross_attn.o.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 579 |
+
"blocks.28.cross_attn.q.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 580 |
+
"blocks.28.cross_attn.q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 581 |
+
"blocks.28.cross_attn.v.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 582 |
+
"blocks.28.cross_attn.v.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 583 |
+
"blocks.28.ffn.0.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 584 |
+
"blocks.28.ffn.0.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 585 |
+
"blocks.28.ffn.2.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 586 |
+
"blocks.28.ffn.2.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 587 |
+
"blocks.28.modulation": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 588 |
+
"blocks.28.norm3.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 589 |
+
"blocks.28.norm3.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 590 |
+
"blocks.28.self_attn.k.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 591 |
+
"blocks.28.self_attn.k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 592 |
+
"blocks.28.self_attn.norm_k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 593 |
+
"blocks.28.self_attn.norm_q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 594 |
+
"blocks.28.self_attn.o.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 595 |
+
"blocks.28.self_attn.o.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 596 |
+
"blocks.28.self_attn.q.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 597 |
+
"blocks.28.self_attn.q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 598 |
+
"blocks.28.self_attn.v.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 599 |
+
"blocks.28.self_attn.v.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 600 |
+
"blocks.29.cross_attn.k.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 601 |
+
"blocks.29.cross_attn.k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 602 |
+
"blocks.29.cross_attn.norm_k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 603 |
+
"blocks.29.cross_attn.norm_q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 604 |
+
"blocks.29.cross_attn.o.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 605 |
+
"blocks.29.cross_attn.o.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 606 |
+
"blocks.29.cross_attn.q.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 607 |
+
"blocks.29.cross_attn.q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 608 |
+
"blocks.29.cross_attn.v.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 609 |
+
"blocks.29.cross_attn.v.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 610 |
+
"blocks.29.ffn.0.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 611 |
+
"blocks.29.ffn.0.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 612 |
+
"blocks.29.ffn.2.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 613 |
+
"blocks.29.ffn.2.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 614 |
+
"blocks.29.modulation": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 615 |
+
"blocks.29.norm3.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 616 |
+
"blocks.29.norm3.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 617 |
+
"blocks.29.self_attn.k.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 618 |
+
"blocks.29.self_attn.k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 619 |
+
"blocks.29.self_attn.norm_k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 620 |
+
"blocks.29.self_attn.norm_q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 621 |
+
"blocks.29.self_attn.o.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 622 |
+
"blocks.29.self_attn.o.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 623 |
+
"blocks.29.self_attn.q.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 624 |
+
"blocks.29.self_attn.q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 625 |
+
"blocks.29.self_attn.v.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 626 |
+
"blocks.29.self_attn.v.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 627 |
+
"blocks.3.cross_attn.k.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 628 |
+
"blocks.3.cross_attn.k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 629 |
+
"blocks.3.cross_attn.norm_k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 630 |
+
"blocks.3.cross_attn.norm_q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 631 |
+
"blocks.3.cross_attn.o.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 632 |
+
"blocks.3.cross_attn.o.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 633 |
+
"blocks.3.cross_attn.q.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 634 |
+
"blocks.3.cross_attn.q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 635 |
+
"blocks.3.cross_attn.v.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 636 |
+
"blocks.3.cross_attn.v.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 637 |
+
"blocks.3.ffn.0.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 638 |
+
"blocks.3.ffn.0.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 639 |
+
"blocks.3.ffn.2.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 640 |
+
"blocks.3.ffn.2.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 641 |
+
"blocks.3.modulation": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 642 |
+
"blocks.3.norm3.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 643 |
+
"blocks.3.norm3.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 644 |
+
"blocks.3.self_attn.k.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 645 |
+
"blocks.3.self_attn.k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 646 |
+
"blocks.3.self_attn.norm_k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 647 |
+
"blocks.3.self_attn.norm_q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 648 |
+
"blocks.3.self_attn.o.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 649 |
+
"blocks.3.self_attn.o.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 650 |
+
"blocks.3.self_attn.q.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 651 |
+
"blocks.3.self_attn.q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 652 |
+
"blocks.3.self_attn.v.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 653 |
+
"blocks.3.self_attn.v.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 654 |
+
"blocks.30.cross_attn.k.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 655 |
+
"blocks.30.cross_attn.k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 656 |
+
"blocks.30.cross_attn.norm_k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 657 |
+
"blocks.30.cross_attn.norm_q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 658 |
+
"blocks.30.cross_attn.o.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 659 |
+
"blocks.30.cross_attn.o.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 660 |
+
"blocks.30.cross_attn.q.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 661 |
+
"blocks.30.cross_attn.q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 662 |
+
"blocks.30.cross_attn.v.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 663 |
+
"blocks.30.cross_attn.v.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 664 |
+
"blocks.30.ffn.0.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 665 |
+
"blocks.30.ffn.0.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 666 |
+
"blocks.30.ffn.2.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 667 |
+
"blocks.30.ffn.2.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 668 |
+
"blocks.30.modulation": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 669 |
+
"blocks.30.norm3.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 670 |
+
"blocks.30.norm3.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 671 |
+
"blocks.30.self_attn.k.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 672 |
+
"blocks.30.self_attn.k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 673 |
+
"blocks.30.self_attn.norm_k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 674 |
+
"blocks.30.self_attn.norm_q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 675 |
+
"blocks.30.self_attn.o.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 676 |
+
"blocks.30.self_attn.o.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 677 |
+
"blocks.30.self_attn.q.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 678 |
+
"blocks.30.self_attn.q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 679 |
+
"blocks.30.self_attn.v.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 680 |
+
"blocks.30.self_attn.v.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 681 |
+
"blocks.31.cross_attn.k.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 682 |
+
"blocks.31.cross_attn.k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 683 |
+
"blocks.31.cross_attn.norm_k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 684 |
+
"blocks.31.cross_attn.norm_q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 685 |
+
"blocks.31.cross_attn.o.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 686 |
+
"blocks.31.cross_attn.o.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 687 |
+
"blocks.31.cross_attn.q.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 688 |
+
"blocks.31.cross_attn.q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 689 |
+
"blocks.31.cross_attn.v.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 690 |
+
"blocks.31.cross_attn.v.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 691 |
+
"blocks.31.ffn.0.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 692 |
+
"blocks.31.ffn.0.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 693 |
+
"blocks.31.ffn.2.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 694 |
+
"blocks.31.ffn.2.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 695 |
+
"blocks.31.modulation": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 696 |
+
"blocks.31.norm3.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 697 |
+
"blocks.31.norm3.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 698 |
+
"blocks.31.self_attn.k.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 699 |
+
"blocks.31.self_attn.k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 700 |
+
"blocks.31.self_attn.norm_k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 701 |
+
"blocks.31.self_attn.norm_q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 702 |
+
"blocks.31.self_attn.o.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 703 |
+
"blocks.31.self_attn.o.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 704 |
+
"blocks.31.self_attn.q.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 705 |
+
"blocks.31.self_attn.q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 706 |
+
"blocks.31.self_attn.v.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 707 |
+
"blocks.31.self_attn.v.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 708 |
+
"blocks.32.cross_attn.k.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 709 |
+
"blocks.32.cross_attn.k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 710 |
+
"blocks.32.cross_attn.norm_k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 711 |
+
"blocks.32.cross_attn.norm_q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 712 |
+
"blocks.32.cross_attn.o.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 713 |
+
"blocks.32.cross_attn.o.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 714 |
+
"blocks.32.cross_attn.q.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 715 |
+
"blocks.32.cross_attn.q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 716 |
+
"blocks.32.cross_attn.v.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 717 |
+
"blocks.32.cross_attn.v.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 718 |
+
"blocks.32.ffn.0.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 719 |
+
"blocks.32.ffn.0.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 720 |
+
"blocks.32.ffn.2.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 721 |
+
"blocks.32.ffn.2.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 722 |
+
"blocks.32.modulation": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 723 |
+
"blocks.32.norm3.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 724 |
+
"blocks.32.norm3.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 725 |
+
"blocks.32.self_attn.k.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 726 |
+
"blocks.32.self_attn.k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 727 |
+
"blocks.32.self_attn.norm_k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 728 |
+
"blocks.32.self_attn.norm_q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 729 |
+
"blocks.32.self_attn.o.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 730 |
+
"blocks.32.self_attn.o.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 731 |
+
"blocks.32.self_attn.q.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 732 |
+
"blocks.32.self_attn.q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 733 |
+
"blocks.32.self_attn.v.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 734 |
+
"blocks.32.self_attn.v.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 735 |
+
"blocks.33.cross_attn.k.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 736 |
+
"blocks.33.cross_attn.k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 737 |
+
"blocks.33.cross_attn.norm_k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 738 |
+
"blocks.33.cross_attn.norm_q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 739 |
+
"blocks.33.cross_attn.o.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 740 |
+
"blocks.33.cross_attn.o.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 741 |
+
"blocks.33.cross_attn.q.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 742 |
+
"blocks.33.cross_attn.q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 743 |
+
"blocks.33.cross_attn.v.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 744 |
+
"blocks.33.cross_attn.v.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 745 |
+
"blocks.33.ffn.0.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 746 |
+
"blocks.33.ffn.0.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 747 |
+
"blocks.33.ffn.2.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 748 |
+
"blocks.33.ffn.2.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 749 |
+
"blocks.33.modulation": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 750 |
+
"blocks.33.norm3.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 751 |
+
"blocks.33.norm3.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 752 |
+
"blocks.33.self_attn.k.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 753 |
+
"blocks.33.self_attn.k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 754 |
+
"blocks.33.self_attn.norm_k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 755 |
+
"blocks.33.self_attn.norm_q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 756 |
+
"blocks.33.self_attn.o.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 757 |
+
"blocks.33.self_attn.o.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 758 |
+
"blocks.33.self_attn.q.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 759 |
+
"blocks.33.self_attn.q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 760 |
+
"blocks.33.self_attn.v.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 761 |
+
"blocks.33.self_attn.v.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 762 |
+
"blocks.34.cross_attn.k.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 763 |
+
"blocks.34.cross_attn.k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 764 |
+
"blocks.34.cross_attn.norm_k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 765 |
+
"blocks.34.cross_attn.norm_q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 766 |
+
"blocks.34.cross_attn.o.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 767 |
+
"blocks.34.cross_attn.o.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 768 |
+
"blocks.34.cross_attn.q.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 769 |
+
"blocks.34.cross_attn.q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 770 |
+
"blocks.34.cross_attn.v.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 771 |
+
"blocks.34.cross_attn.v.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 772 |
+
"blocks.34.ffn.0.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 773 |
+
"blocks.34.ffn.0.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 774 |
+
"blocks.34.ffn.2.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 775 |
+
"blocks.34.ffn.2.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 776 |
+
"blocks.34.modulation": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 777 |
+
"blocks.34.norm3.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 778 |
+
"blocks.34.norm3.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 779 |
+
"blocks.34.self_attn.k.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 780 |
+
"blocks.34.self_attn.k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 781 |
+
"blocks.34.self_attn.norm_k.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 782 |
+
"blocks.34.self_attn.norm_q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 783 |
+
"blocks.34.self_attn.o.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 784 |
+
"blocks.34.self_attn.o.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 785 |
+
"blocks.34.self_attn.q.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 786 |
+
"blocks.34.self_attn.q.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 787 |
+
"blocks.34.self_attn.v.bias": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 788 |
+
"blocks.34.self_attn.v.weight": "diffusion_pytorch_model-00005-of-00006.safetensors",
|
| 789 |
+
"blocks.35.cross_attn.k.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 790 |
+
"blocks.35.cross_attn.k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 791 |
+
"blocks.35.cross_attn.norm_k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 792 |
+
"blocks.35.cross_attn.norm_q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 793 |
+
"blocks.35.cross_attn.o.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 794 |
+
"blocks.35.cross_attn.o.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 795 |
+
"blocks.35.cross_attn.q.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 796 |
+
"blocks.35.cross_attn.q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 797 |
+
"blocks.35.cross_attn.v.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 798 |
+
"blocks.35.cross_attn.v.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 799 |
+
"blocks.35.ffn.0.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 800 |
+
"blocks.35.ffn.0.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 801 |
+
"blocks.35.ffn.2.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 802 |
+
"blocks.35.ffn.2.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 803 |
+
"blocks.35.modulation": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 804 |
+
"blocks.35.norm3.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 805 |
+
"blocks.35.norm3.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 806 |
+
"blocks.35.self_attn.k.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 807 |
+
"blocks.35.self_attn.k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 808 |
+
"blocks.35.self_attn.norm_k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 809 |
+
"blocks.35.self_attn.norm_q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 810 |
+
"blocks.35.self_attn.o.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 811 |
+
"blocks.35.self_attn.o.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 812 |
+
"blocks.35.self_attn.q.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 813 |
+
"blocks.35.self_attn.q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 814 |
+
"blocks.35.self_attn.v.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 815 |
+
"blocks.35.self_attn.v.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 816 |
+
"blocks.36.cross_attn.k.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 817 |
+
"blocks.36.cross_attn.k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 818 |
+
"blocks.36.cross_attn.norm_k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 819 |
+
"blocks.36.cross_attn.norm_q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 820 |
+
"blocks.36.cross_attn.o.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 821 |
+
"blocks.36.cross_attn.o.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 822 |
+
"blocks.36.cross_attn.q.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 823 |
+
"blocks.36.cross_attn.q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 824 |
+
"blocks.36.cross_attn.v.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 825 |
+
"blocks.36.cross_attn.v.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 826 |
+
"blocks.36.ffn.0.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 827 |
+
"blocks.36.ffn.0.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 828 |
+
"blocks.36.ffn.2.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 829 |
+
"blocks.36.ffn.2.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 830 |
+
"blocks.36.modulation": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 831 |
+
"blocks.36.norm3.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 832 |
+
"blocks.36.norm3.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 833 |
+
"blocks.36.self_attn.k.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 834 |
+
"blocks.36.self_attn.k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 835 |
+
"blocks.36.self_attn.norm_k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 836 |
+
"blocks.36.self_attn.norm_q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 837 |
+
"blocks.36.self_attn.o.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 838 |
+
"blocks.36.self_attn.o.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 839 |
+
"blocks.36.self_attn.q.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 840 |
+
"blocks.36.self_attn.q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 841 |
+
"blocks.36.self_attn.v.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 842 |
+
"blocks.36.self_attn.v.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 843 |
+
"blocks.37.cross_attn.k.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 844 |
+
"blocks.37.cross_attn.k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 845 |
+
"blocks.37.cross_attn.norm_k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 846 |
+
"blocks.37.cross_attn.norm_q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 847 |
+
"blocks.37.cross_attn.o.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 848 |
+
"blocks.37.cross_attn.o.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 849 |
+
"blocks.37.cross_attn.q.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 850 |
+
"blocks.37.cross_attn.q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 851 |
+
"blocks.37.cross_attn.v.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 852 |
+
"blocks.37.cross_attn.v.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 853 |
+
"blocks.37.ffn.0.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 854 |
+
"blocks.37.ffn.0.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 855 |
+
"blocks.37.ffn.2.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 856 |
+
"blocks.37.ffn.2.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 857 |
+
"blocks.37.modulation": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 858 |
+
"blocks.37.norm3.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 859 |
+
"blocks.37.norm3.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 860 |
+
"blocks.37.self_attn.k.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 861 |
+
"blocks.37.self_attn.k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 862 |
+
"blocks.37.self_attn.norm_k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 863 |
+
"blocks.37.self_attn.norm_q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 864 |
+
"blocks.37.self_attn.o.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 865 |
+
"blocks.37.self_attn.o.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 866 |
+
"blocks.37.self_attn.q.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 867 |
+
"blocks.37.self_attn.q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 868 |
+
"blocks.37.self_attn.v.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 869 |
+
"blocks.37.self_attn.v.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 870 |
+
"blocks.38.cross_attn.k.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 871 |
+
"blocks.38.cross_attn.k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 872 |
+
"blocks.38.cross_attn.norm_k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 873 |
+
"blocks.38.cross_attn.norm_q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 874 |
+
"blocks.38.cross_attn.o.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 875 |
+
"blocks.38.cross_attn.o.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 876 |
+
"blocks.38.cross_attn.q.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 877 |
+
"blocks.38.cross_attn.q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 878 |
+
"blocks.38.cross_attn.v.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 879 |
+
"blocks.38.cross_attn.v.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 880 |
+
"blocks.38.ffn.0.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 881 |
+
"blocks.38.ffn.0.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 882 |
+
"blocks.38.ffn.2.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 883 |
+
"blocks.38.ffn.2.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 884 |
+
"blocks.38.modulation": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 885 |
+
"blocks.38.norm3.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 886 |
+
"blocks.38.norm3.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 887 |
+
"blocks.38.self_attn.k.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 888 |
+
"blocks.38.self_attn.k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 889 |
+
"blocks.38.self_attn.norm_k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 890 |
+
"blocks.38.self_attn.norm_q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 891 |
+
"blocks.38.self_attn.o.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 892 |
+
"blocks.38.self_attn.o.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 893 |
+
"blocks.38.self_attn.q.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 894 |
+
"blocks.38.self_attn.q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 895 |
+
"blocks.38.self_attn.v.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 896 |
+
"blocks.38.self_attn.v.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 897 |
+
"blocks.39.cross_attn.k.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 898 |
+
"blocks.39.cross_attn.k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 899 |
+
"blocks.39.cross_attn.norm_k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 900 |
+
"blocks.39.cross_attn.norm_q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 901 |
+
"blocks.39.cross_attn.o.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 902 |
+
"blocks.39.cross_attn.o.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 903 |
+
"blocks.39.cross_attn.q.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 904 |
+
"blocks.39.cross_attn.q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 905 |
+
"blocks.39.cross_attn.v.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 906 |
+
"blocks.39.cross_attn.v.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 907 |
+
"blocks.39.ffn.0.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 908 |
+
"blocks.39.ffn.0.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 909 |
+
"blocks.39.ffn.2.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 910 |
+
"blocks.39.ffn.2.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 911 |
+
"blocks.39.modulation": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 912 |
+
"blocks.39.norm3.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 913 |
+
"blocks.39.norm3.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 914 |
+
"blocks.39.self_attn.k.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 915 |
+
"blocks.39.self_attn.k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 916 |
+
"blocks.39.self_attn.norm_k.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 917 |
+
"blocks.39.self_attn.norm_q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 918 |
+
"blocks.39.self_attn.o.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 919 |
+
"blocks.39.self_attn.o.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 920 |
+
"blocks.39.self_attn.q.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 921 |
+
"blocks.39.self_attn.q.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 922 |
+
"blocks.39.self_attn.v.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 923 |
+
"blocks.39.self_attn.v.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 924 |
+
"blocks.4.cross_attn.k.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 925 |
+
"blocks.4.cross_attn.k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 926 |
+
"blocks.4.cross_attn.norm_k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 927 |
+
"blocks.4.cross_attn.norm_q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 928 |
+
"blocks.4.cross_attn.o.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 929 |
+
"blocks.4.cross_attn.o.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 930 |
+
"blocks.4.cross_attn.q.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 931 |
+
"blocks.4.cross_attn.q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 932 |
+
"blocks.4.cross_attn.v.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 933 |
+
"blocks.4.cross_attn.v.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 934 |
+
"blocks.4.ffn.0.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 935 |
+
"blocks.4.ffn.0.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 936 |
+
"blocks.4.ffn.2.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 937 |
+
"blocks.4.ffn.2.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 938 |
+
"blocks.4.modulation": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 939 |
+
"blocks.4.norm3.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 940 |
+
"blocks.4.norm3.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 941 |
+
"blocks.4.self_attn.k.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 942 |
+
"blocks.4.self_attn.k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 943 |
+
"blocks.4.self_attn.norm_k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 944 |
+
"blocks.4.self_attn.norm_q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 945 |
+
"blocks.4.self_attn.o.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 946 |
+
"blocks.4.self_attn.o.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 947 |
+
"blocks.4.self_attn.q.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 948 |
+
"blocks.4.self_attn.q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 949 |
+
"blocks.4.self_attn.v.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 950 |
+
"blocks.4.self_attn.v.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 951 |
+
"blocks.5.cross_attn.k.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 952 |
+
"blocks.5.cross_attn.k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 953 |
+
"blocks.5.cross_attn.norm_k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 954 |
+
"blocks.5.cross_attn.norm_q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 955 |
+
"blocks.5.cross_attn.o.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 956 |
+
"blocks.5.cross_attn.o.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 957 |
+
"blocks.5.cross_attn.q.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 958 |
+
"blocks.5.cross_attn.q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 959 |
+
"blocks.5.cross_attn.v.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 960 |
+
"blocks.5.cross_attn.v.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 961 |
+
"blocks.5.ffn.0.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 962 |
+
"blocks.5.ffn.0.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 963 |
+
"blocks.5.ffn.2.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 964 |
+
"blocks.5.ffn.2.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 965 |
+
"blocks.5.modulation": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 966 |
+
"blocks.5.norm3.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 967 |
+
"blocks.5.norm3.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 968 |
+
"blocks.5.self_attn.k.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 969 |
+
"blocks.5.self_attn.k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 970 |
+
"blocks.5.self_attn.norm_k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 971 |
+
"blocks.5.self_attn.norm_q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 972 |
+
"blocks.5.self_attn.o.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 973 |
+
"blocks.5.self_attn.o.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 974 |
+
"blocks.5.self_attn.q.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 975 |
+
"blocks.5.self_attn.q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 976 |
+
"blocks.5.self_attn.v.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 977 |
+
"blocks.5.self_attn.v.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 978 |
+
"blocks.6.cross_attn.k.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 979 |
+
"blocks.6.cross_attn.k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 980 |
+
"blocks.6.cross_attn.norm_k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 981 |
+
"blocks.6.cross_attn.norm_q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 982 |
+
"blocks.6.cross_attn.o.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 983 |
+
"blocks.6.cross_attn.o.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 984 |
+
"blocks.6.cross_attn.q.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 985 |
+
"blocks.6.cross_attn.q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 986 |
+
"blocks.6.cross_attn.v.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 987 |
+
"blocks.6.cross_attn.v.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 988 |
+
"blocks.6.ffn.0.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 989 |
+
"blocks.6.ffn.0.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 990 |
+
"blocks.6.ffn.2.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 991 |
+
"blocks.6.ffn.2.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 992 |
+
"blocks.6.modulation": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 993 |
+
"blocks.6.norm3.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 994 |
+
"blocks.6.norm3.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 995 |
+
"blocks.6.self_attn.k.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 996 |
+
"blocks.6.self_attn.k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 997 |
+
"blocks.6.self_attn.norm_k.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 998 |
+
"blocks.6.self_attn.norm_q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 999 |
+
"blocks.6.self_attn.o.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 1000 |
+
"blocks.6.self_attn.o.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 1001 |
+
"blocks.6.self_attn.q.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 1002 |
+
"blocks.6.self_attn.q.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 1003 |
+
"blocks.6.self_attn.v.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 1004 |
+
"blocks.6.self_attn.v.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 1005 |
+
"blocks.7.cross_attn.k.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1006 |
+
"blocks.7.cross_attn.k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1007 |
+
"blocks.7.cross_attn.norm_k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1008 |
+
"blocks.7.cross_attn.norm_q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1009 |
+
"blocks.7.cross_attn.o.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1010 |
+
"blocks.7.cross_attn.o.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1011 |
+
"blocks.7.cross_attn.q.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1012 |
+
"blocks.7.cross_attn.q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1013 |
+
"blocks.7.cross_attn.v.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1014 |
+
"blocks.7.cross_attn.v.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1015 |
+
"blocks.7.ffn.0.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1016 |
+
"blocks.7.ffn.0.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1017 |
+
"blocks.7.ffn.2.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1018 |
+
"blocks.7.ffn.2.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1019 |
+
"blocks.7.modulation": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1020 |
+
"blocks.7.norm3.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1021 |
+
"blocks.7.norm3.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1022 |
+
"blocks.7.self_attn.k.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1023 |
+
"blocks.7.self_attn.k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1024 |
+
"blocks.7.self_attn.norm_k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1025 |
+
"blocks.7.self_attn.norm_q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1026 |
+
"blocks.7.self_attn.o.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1027 |
+
"blocks.7.self_attn.o.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1028 |
+
"blocks.7.self_attn.q.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1029 |
+
"blocks.7.self_attn.q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1030 |
+
"blocks.7.self_attn.v.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1031 |
+
"blocks.7.self_attn.v.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1032 |
+
"blocks.8.cross_attn.k.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1033 |
+
"blocks.8.cross_attn.k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1034 |
+
"blocks.8.cross_attn.norm_k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1035 |
+
"blocks.8.cross_attn.norm_q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1036 |
+
"blocks.8.cross_attn.o.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1037 |
+
"blocks.8.cross_attn.o.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1038 |
+
"blocks.8.cross_attn.q.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1039 |
+
"blocks.8.cross_attn.q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1040 |
+
"blocks.8.cross_attn.v.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1041 |
+
"blocks.8.cross_attn.v.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1042 |
+
"blocks.8.ffn.0.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1043 |
+
"blocks.8.ffn.0.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1044 |
+
"blocks.8.ffn.2.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1045 |
+
"blocks.8.ffn.2.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1046 |
+
"blocks.8.modulation": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1047 |
+
"blocks.8.norm3.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1048 |
+
"blocks.8.norm3.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1049 |
+
"blocks.8.self_attn.k.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1050 |
+
"blocks.8.self_attn.k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1051 |
+
"blocks.8.self_attn.norm_k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1052 |
+
"blocks.8.self_attn.norm_q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1053 |
+
"blocks.8.self_attn.o.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1054 |
+
"blocks.8.self_attn.o.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1055 |
+
"blocks.8.self_attn.q.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1056 |
+
"blocks.8.self_attn.q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1057 |
+
"blocks.8.self_attn.v.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1058 |
+
"blocks.8.self_attn.v.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1059 |
+
"blocks.9.cross_attn.k.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1060 |
+
"blocks.9.cross_attn.k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1061 |
+
"blocks.9.cross_attn.norm_k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1062 |
+
"blocks.9.cross_attn.norm_q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1063 |
+
"blocks.9.cross_attn.o.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1064 |
+
"blocks.9.cross_attn.o.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1065 |
+
"blocks.9.cross_attn.q.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1066 |
+
"blocks.9.cross_attn.q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1067 |
+
"blocks.9.cross_attn.v.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1068 |
+
"blocks.9.cross_attn.v.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1069 |
+
"blocks.9.ffn.0.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1070 |
+
"blocks.9.ffn.0.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1071 |
+
"blocks.9.ffn.2.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1072 |
+
"blocks.9.ffn.2.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1073 |
+
"blocks.9.modulation": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1074 |
+
"blocks.9.norm3.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1075 |
+
"blocks.9.norm3.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1076 |
+
"blocks.9.self_attn.k.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1077 |
+
"blocks.9.self_attn.k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1078 |
+
"blocks.9.self_attn.norm_k.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1079 |
+
"blocks.9.self_attn.norm_q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1080 |
+
"blocks.9.self_attn.o.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1081 |
+
"blocks.9.self_attn.o.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1082 |
+
"blocks.9.self_attn.q.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1083 |
+
"blocks.9.self_attn.q.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1084 |
+
"blocks.9.self_attn.v.bias": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1085 |
+
"blocks.9.self_attn.v.weight": "diffusion_pytorch_model-00002-of-00006.safetensors",
|
| 1086 |
+
"head.head.bias": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 1087 |
+
"head.head.weight": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 1088 |
+
"head.modulation": "diffusion_pytorch_model-00006-of-00006.safetensors",
|
| 1089 |
+
"patch_embedding.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 1090 |
+
"patch_embedding.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 1091 |
+
"text_embedding.0.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 1092 |
+
"text_embedding.0.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 1093 |
+
"text_embedding.2.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 1094 |
+
"text_embedding.2.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 1095 |
+
"time_embedding.0.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 1096 |
+
"time_embedding.0.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 1097 |
+
"time_embedding.2.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 1098 |
+
"time_embedding.2.weight": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 1099 |
+
"time_projection.1.bias": "diffusion_pytorch_model-00001-of-00006.safetensors",
|
| 1100 |
+
"time_projection.1.weight": "diffusion_pytorch_model-00001-of-00006.safetensors"
|
| 1101 |
+
}
|
| 1102 |
+
}
|
wan_models/Wan2.1-T2V-14B/google/umt5-xxl/special_tokens_map.json
ADDED
|
@@ -0,0 +1,308 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"additional_special_tokens": [
|
| 3 |
+
"<extra_id_0>",
|
| 4 |
+
"<extra_id_1>",
|
| 5 |
+
"<extra_id_2>",
|
| 6 |
+
"<extra_id_3>",
|
| 7 |
+
"<extra_id_4>",
|
| 8 |
+
"<extra_id_5>",
|
| 9 |
+
"<extra_id_6>",
|
| 10 |
+
"<extra_id_7>",
|
| 11 |
+
"<extra_id_8>",
|
| 12 |
+
"<extra_id_9>",
|
| 13 |
+
"<extra_id_10>",
|
| 14 |
+
"<extra_id_11>",
|
| 15 |
+
"<extra_id_12>",
|
| 16 |
+
"<extra_id_13>",
|
| 17 |
+
"<extra_id_14>",
|
| 18 |
+
"<extra_id_15>",
|
| 19 |
+
"<extra_id_16>",
|
| 20 |
+
"<extra_id_17>",
|
| 21 |
+
"<extra_id_18>",
|
| 22 |
+
"<extra_id_19>",
|
| 23 |
+
"<extra_id_20>",
|
| 24 |
+
"<extra_id_21>",
|
| 25 |
+
"<extra_id_22>",
|
| 26 |
+
"<extra_id_23>",
|
| 27 |
+
"<extra_id_24>",
|
| 28 |
+
"<extra_id_25>",
|
| 29 |
+
"<extra_id_26>",
|
| 30 |
+
"<extra_id_27>",
|
| 31 |
+
"<extra_id_28>",
|
| 32 |
+
"<extra_id_29>",
|
| 33 |
+
"<extra_id_30>",
|
| 34 |
+
"<extra_id_31>",
|
| 35 |
+
"<extra_id_32>",
|
| 36 |
+
"<extra_id_33>",
|
| 37 |
+
"<extra_id_34>",
|
| 38 |
+
"<extra_id_35>",
|
| 39 |
+
"<extra_id_36>",
|
| 40 |
+
"<extra_id_37>",
|
| 41 |
+
"<extra_id_38>",
|
| 42 |
+
"<extra_id_39>",
|
| 43 |
+
"<extra_id_40>",
|
| 44 |
+
"<extra_id_41>",
|
| 45 |
+
"<extra_id_42>",
|
| 46 |
+
"<extra_id_43>",
|
| 47 |
+
"<extra_id_44>",
|
| 48 |
+
"<extra_id_45>",
|
| 49 |
+
"<extra_id_46>",
|
| 50 |
+
"<extra_id_47>",
|
| 51 |
+
"<extra_id_48>",
|
| 52 |
+
"<extra_id_49>",
|
| 53 |
+
"<extra_id_50>",
|
| 54 |
+
"<extra_id_51>",
|
| 55 |
+
"<extra_id_52>",
|
| 56 |
+
"<extra_id_53>",
|
| 57 |
+
"<extra_id_54>",
|
| 58 |
+
"<extra_id_55>",
|
| 59 |
+
"<extra_id_56>",
|
| 60 |
+
"<extra_id_57>",
|
| 61 |
+
"<extra_id_58>",
|
| 62 |
+
"<extra_id_59>",
|
| 63 |
+
"<extra_id_60>",
|
| 64 |
+
"<extra_id_61>",
|
| 65 |
+
"<extra_id_62>",
|
| 66 |
+
"<extra_id_63>",
|
| 67 |
+
"<extra_id_64>",
|
| 68 |
+
"<extra_id_65>",
|
| 69 |
+
"<extra_id_66>",
|
| 70 |
+
"<extra_id_67>",
|
| 71 |
+
"<extra_id_68>",
|
| 72 |
+
"<extra_id_69>",
|
| 73 |
+
"<extra_id_70>",
|
| 74 |
+
"<extra_id_71>",
|
| 75 |
+
"<extra_id_72>",
|
| 76 |
+
"<extra_id_73>",
|
| 77 |
+
"<extra_id_74>",
|
| 78 |
+
"<extra_id_75>",
|
| 79 |
+
"<extra_id_76>",
|
| 80 |
+
"<extra_id_77>",
|
| 81 |
+
"<extra_id_78>",
|
| 82 |
+
"<extra_id_79>",
|
| 83 |
+
"<extra_id_80>",
|
| 84 |
+
"<extra_id_81>",
|
| 85 |
+
"<extra_id_82>",
|
| 86 |
+
"<extra_id_83>",
|
| 87 |
+
"<extra_id_84>",
|
| 88 |
+
"<extra_id_85>",
|
| 89 |
+
"<extra_id_86>",
|
| 90 |
+
"<extra_id_87>",
|
| 91 |
+
"<extra_id_88>",
|
| 92 |
+
"<extra_id_89>",
|
| 93 |
+
"<extra_id_90>",
|
| 94 |
+
"<extra_id_91>",
|
| 95 |
+
"<extra_id_92>",
|
| 96 |
+
"<extra_id_93>",
|
| 97 |
+
"<extra_id_94>",
|
| 98 |
+
"<extra_id_95>",
|
| 99 |
+
"<extra_id_96>",
|
| 100 |
+
"<extra_id_97>",
|
| 101 |
+
"<extra_id_98>",
|
| 102 |
+
"<extra_id_99>",
|
| 103 |
+
"<extra_id_100>",
|
| 104 |
+
"<extra_id_101>",
|
| 105 |
+
"<extra_id_102>",
|
| 106 |
+
"<extra_id_103>",
|
| 107 |
+
"<extra_id_104>",
|
| 108 |
+
"<extra_id_105>",
|
| 109 |
+
"<extra_id_106>",
|
| 110 |
+
"<extra_id_107>",
|
| 111 |
+
"<extra_id_108>",
|
| 112 |
+
"<extra_id_109>",
|
| 113 |
+
"<extra_id_110>",
|
| 114 |
+
"<extra_id_111>",
|
| 115 |
+
"<extra_id_112>",
|
| 116 |
+
"<extra_id_113>",
|
| 117 |
+
"<extra_id_114>",
|
| 118 |
+
"<extra_id_115>",
|
| 119 |
+
"<extra_id_116>",
|
| 120 |
+
"<extra_id_117>",
|
| 121 |
+
"<extra_id_118>",
|
| 122 |
+
"<extra_id_119>",
|
| 123 |
+
"<extra_id_120>",
|
| 124 |
+
"<extra_id_121>",
|
| 125 |
+
"<extra_id_122>",
|
| 126 |
+
"<extra_id_123>",
|
| 127 |
+
"<extra_id_124>",
|
| 128 |
+
"<extra_id_125>",
|
| 129 |
+
"<extra_id_126>",
|
| 130 |
+
"<extra_id_127>",
|
| 131 |
+
"<extra_id_128>",
|
| 132 |
+
"<extra_id_129>",
|
| 133 |
+
"<extra_id_130>",
|
| 134 |
+
"<extra_id_131>",
|
| 135 |
+
"<extra_id_132>",
|
| 136 |
+
"<extra_id_133>",
|
| 137 |
+
"<extra_id_134>",
|
| 138 |
+
"<extra_id_135>",
|
| 139 |
+
"<extra_id_136>",
|
| 140 |
+
"<extra_id_137>",
|
| 141 |
+
"<extra_id_138>",
|
| 142 |
+
"<extra_id_139>",
|
| 143 |
+
"<extra_id_140>",
|
| 144 |
+
"<extra_id_141>",
|
| 145 |
+
"<extra_id_142>",
|
| 146 |
+
"<extra_id_143>",
|
| 147 |
+
"<extra_id_144>",
|
| 148 |
+
"<extra_id_145>",
|
| 149 |
+
"<extra_id_146>",
|
| 150 |
+
"<extra_id_147>",
|
| 151 |
+
"<extra_id_148>",
|
| 152 |
+
"<extra_id_149>",
|
| 153 |
+
"<extra_id_150>",
|
| 154 |
+
"<extra_id_151>",
|
| 155 |
+
"<extra_id_152>",
|
| 156 |
+
"<extra_id_153>",
|
| 157 |
+
"<extra_id_154>",
|
| 158 |
+
"<extra_id_155>",
|
| 159 |
+
"<extra_id_156>",
|
| 160 |
+
"<extra_id_157>",
|
| 161 |
+
"<extra_id_158>",
|
| 162 |
+
"<extra_id_159>",
|
| 163 |
+
"<extra_id_160>",
|
| 164 |
+
"<extra_id_161>",
|
| 165 |
+
"<extra_id_162>",
|
| 166 |
+
"<extra_id_163>",
|
| 167 |
+
"<extra_id_164>",
|
| 168 |
+
"<extra_id_165>",
|
| 169 |
+
"<extra_id_166>",
|
| 170 |
+
"<extra_id_167>",
|
| 171 |
+
"<extra_id_168>",
|
| 172 |
+
"<extra_id_169>",
|
| 173 |
+
"<extra_id_170>",
|
| 174 |
+
"<extra_id_171>",
|
| 175 |
+
"<extra_id_172>",
|
| 176 |
+
"<extra_id_173>",
|
| 177 |
+
"<extra_id_174>",
|
| 178 |
+
"<extra_id_175>",
|
| 179 |
+
"<extra_id_176>",
|
| 180 |
+
"<extra_id_177>",
|
| 181 |
+
"<extra_id_178>",
|
| 182 |
+
"<extra_id_179>",
|
| 183 |
+
"<extra_id_180>",
|
| 184 |
+
"<extra_id_181>",
|
| 185 |
+
"<extra_id_182>",
|
| 186 |
+
"<extra_id_183>",
|
| 187 |
+
"<extra_id_184>",
|
| 188 |
+
"<extra_id_185>",
|
| 189 |
+
"<extra_id_186>",
|
| 190 |
+
"<extra_id_187>",
|
| 191 |
+
"<extra_id_188>",
|
| 192 |
+
"<extra_id_189>",
|
| 193 |
+
"<extra_id_190>",
|
| 194 |
+
"<extra_id_191>",
|
| 195 |
+
"<extra_id_192>",
|
| 196 |
+
"<extra_id_193>",
|
| 197 |
+
"<extra_id_194>",
|
| 198 |
+
"<extra_id_195>",
|
| 199 |
+
"<extra_id_196>",
|
| 200 |
+
"<extra_id_197>",
|
| 201 |
+
"<extra_id_198>",
|
| 202 |
+
"<extra_id_199>",
|
| 203 |
+
"<extra_id_200>",
|
| 204 |
+
"<extra_id_201>",
|
| 205 |
+
"<extra_id_202>",
|
| 206 |
+
"<extra_id_203>",
|
| 207 |
+
"<extra_id_204>",
|
| 208 |
+
"<extra_id_205>",
|
| 209 |
+
"<extra_id_206>",
|
| 210 |
+
"<extra_id_207>",
|
| 211 |
+
"<extra_id_208>",
|
| 212 |
+
"<extra_id_209>",
|
| 213 |
+
"<extra_id_210>",
|
| 214 |
+
"<extra_id_211>",
|
| 215 |
+
"<extra_id_212>",
|
| 216 |
+
"<extra_id_213>",
|
| 217 |
+
"<extra_id_214>",
|
| 218 |
+
"<extra_id_215>",
|
| 219 |
+
"<extra_id_216>",
|
| 220 |
+
"<extra_id_217>",
|
| 221 |
+
"<extra_id_218>",
|
| 222 |
+
"<extra_id_219>",
|
| 223 |
+
"<extra_id_220>",
|
| 224 |
+
"<extra_id_221>",
|
| 225 |
+
"<extra_id_222>",
|
| 226 |
+
"<extra_id_223>",
|
| 227 |
+
"<extra_id_224>",
|
| 228 |
+
"<extra_id_225>",
|
| 229 |
+
"<extra_id_226>",
|
| 230 |
+
"<extra_id_227>",
|
| 231 |
+
"<extra_id_228>",
|
| 232 |
+
"<extra_id_229>",
|
| 233 |
+
"<extra_id_230>",
|
| 234 |
+
"<extra_id_231>",
|
| 235 |
+
"<extra_id_232>",
|
| 236 |
+
"<extra_id_233>",
|
| 237 |
+
"<extra_id_234>",
|
| 238 |
+
"<extra_id_235>",
|
| 239 |
+
"<extra_id_236>",
|
| 240 |
+
"<extra_id_237>",
|
| 241 |
+
"<extra_id_238>",
|
| 242 |
+
"<extra_id_239>",
|
| 243 |
+
"<extra_id_240>",
|
| 244 |
+
"<extra_id_241>",
|
| 245 |
+
"<extra_id_242>",
|
| 246 |
+
"<extra_id_243>",
|
| 247 |
+
"<extra_id_244>",
|
| 248 |
+
"<extra_id_245>",
|
| 249 |
+
"<extra_id_246>",
|
| 250 |
+
"<extra_id_247>",
|
| 251 |
+
"<extra_id_248>",
|
| 252 |
+
"<extra_id_249>",
|
| 253 |
+
"<extra_id_250>",
|
| 254 |
+
"<extra_id_251>",
|
| 255 |
+
"<extra_id_252>",
|
| 256 |
+
"<extra_id_253>",
|
| 257 |
+
"<extra_id_254>",
|
| 258 |
+
"<extra_id_255>",
|
| 259 |
+
"<extra_id_256>",
|
| 260 |
+
"<extra_id_257>",
|
| 261 |
+
"<extra_id_258>",
|
| 262 |
+
"<extra_id_259>",
|
| 263 |
+
"<extra_id_260>",
|
| 264 |
+
"<extra_id_261>",
|
| 265 |
+
"<extra_id_262>",
|
| 266 |
+
"<extra_id_263>",
|
| 267 |
+
"<extra_id_264>",
|
| 268 |
+
"<extra_id_265>",
|
| 269 |
+
"<extra_id_266>",
|
| 270 |
+
"<extra_id_267>",
|
| 271 |
+
"<extra_id_268>",
|
| 272 |
+
"<extra_id_269>",
|
| 273 |
+
"<extra_id_270>",
|
| 274 |
+
"<extra_id_271>",
|
| 275 |
+
"<extra_id_272>",
|
| 276 |
+
"<extra_id_273>",
|
| 277 |
+
"<extra_id_274>",
|
| 278 |
+
"<extra_id_275>",
|
| 279 |
+
"<extra_id_276>",
|
| 280 |
+
"<extra_id_277>",
|
| 281 |
+
"<extra_id_278>",
|
| 282 |
+
"<extra_id_279>",
|
| 283 |
+
"<extra_id_280>",
|
| 284 |
+
"<extra_id_281>",
|
| 285 |
+
"<extra_id_282>",
|
| 286 |
+
"<extra_id_283>",
|
| 287 |
+
"<extra_id_284>",
|
| 288 |
+
"<extra_id_285>",
|
| 289 |
+
"<extra_id_286>",
|
| 290 |
+
"<extra_id_287>",
|
| 291 |
+
"<extra_id_288>",
|
| 292 |
+
"<extra_id_289>",
|
| 293 |
+
"<extra_id_290>",
|
| 294 |
+
"<extra_id_291>",
|
| 295 |
+
"<extra_id_292>",
|
| 296 |
+
"<extra_id_293>",
|
| 297 |
+
"<extra_id_294>",
|
| 298 |
+
"<extra_id_295>",
|
| 299 |
+
"<extra_id_296>",
|
| 300 |
+
"<extra_id_297>",
|
| 301 |
+
"<extra_id_298>",
|
| 302 |
+
"<extra_id_299>"
|
| 303 |
+
],
|
| 304 |
+
"bos_token": "<s>",
|
| 305 |
+
"eos_token": "</s>",
|
| 306 |
+
"pad_token": "<pad>",
|
| 307 |
+
"unk_token": "<unk>"
|
| 308 |
+
}
|
wan_models/Wan2.1-T2V-14B/google/umt5-xxl/tokenizer_config.json
ADDED
|
@@ -0,0 +1,2748 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"added_tokens_decoder": {
|
| 3 |
+
"0": {
|
| 4 |
+
"content": "<pad>",
|
| 5 |
+
"lstrip": false,
|
| 6 |
+
"normalized": false,
|
| 7 |
+
"rstrip": false,
|
| 8 |
+
"single_word": false,
|
| 9 |
+
"special": true
|
| 10 |
+
},
|
| 11 |
+
"1": {
|
| 12 |
+
"content": "</s>",
|
| 13 |
+
"lstrip": false,
|
| 14 |
+
"normalized": false,
|
| 15 |
+
"rstrip": false,
|
| 16 |
+
"single_word": false,
|
| 17 |
+
"special": true
|
| 18 |
+
},
|
| 19 |
+
"2": {
|
| 20 |
+
"content": "<s>",
|
| 21 |
+
"lstrip": false,
|
| 22 |
+
"normalized": false,
|
| 23 |
+
"rstrip": false,
|
| 24 |
+
"single_word": false,
|
| 25 |
+
"special": true
|
| 26 |
+
},
|
| 27 |
+
"3": {
|
| 28 |
+
"content": "<unk>",
|
| 29 |
+
"lstrip": false,
|
| 30 |
+
"normalized": false,
|
| 31 |
+
"rstrip": false,
|
| 32 |
+
"single_word": false,
|
| 33 |
+
"special": true
|
| 34 |
+
},
|
| 35 |
+
"256000": {
|
| 36 |
+
"content": "<extra_id_299>",
|
| 37 |
+
"lstrip": false,
|
| 38 |
+
"normalized": false,
|
| 39 |
+
"rstrip": false,
|
| 40 |
+
"single_word": false,
|
| 41 |
+
"special": true
|
| 42 |
+
},
|
| 43 |
+
"256001": {
|
| 44 |
+
"content": "<extra_id_298>",
|
| 45 |
+
"lstrip": false,
|
| 46 |
+
"normalized": false,
|
| 47 |
+
"rstrip": false,
|
| 48 |
+
"single_word": false,
|
| 49 |
+
"special": true
|
| 50 |
+
},
|
| 51 |
+
"256002": {
|
| 52 |
+
"content": "<extra_id_297>",
|
| 53 |
+
"lstrip": false,
|
| 54 |
+
"normalized": false,
|
| 55 |
+
"rstrip": false,
|
| 56 |
+
"single_word": false,
|
| 57 |
+
"special": true
|
| 58 |
+
},
|
| 59 |
+
"256003": {
|
| 60 |
+
"content": "<extra_id_296>",
|
| 61 |
+
"lstrip": false,
|
| 62 |
+
"normalized": false,
|
| 63 |
+
"rstrip": false,
|
| 64 |
+
"single_word": false,
|
| 65 |
+
"special": true
|
| 66 |
+
},
|
| 67 |
+
"256004": {
|
| 68 |
+
"content": "<extra_id_295>",
|
| 69 |
+
"lstrip": false,
|
| 70 |
+
"normalized": false,
|
| 71 |
+
"rstrip": false,
|
| 72 |
+
"single_word": false,
|
| 73 |
+
"special": true
|
| 74 |
+
},
|
| 75 |
+
"256005": {
|
| 76 |
+
"content": "<extra_id_294>",
|
| 77 |
+
"lstrip": false,
|
| 78 |
+
"normalized": false,
|
| 79 |
+
"rstrip": false,
|
| 80 |
+
"single_word": false,
|
| 81 |
+
"special": true
|
| 82 |
+
},
|
| 83 |
+
"256006": {
|
| 84 |
+
"content": "<extra_id_293>",
|
| 85 |
+
"lstrip": false,
|
| 86 |
+
"normalized": false,
|
| 87 |
+
"rstrip": false,
|
| 88 |
+
"single_word": false,
|
| 89 |
+
"special": true
|
| 90 |
+
},
|
| 91 |
+
"256007": {
|
| 92 |
+
"content": "<extra_id_292>",
|
| 93 |
+
"lstrip": false,
|
| 94 |
+
"normalized": false,
|
| 95 |
+
"rstrip": false,
|
| 96 |
+
"single_word": false,
|
| 97 |
+
"special": true
|
| 98 |
+
},
|
| 99 |
+
"256008": {
|
| 100 |
+
"content": "<extra_id_291>",
|
| 101 |
+
"lstrip": false,
|
| 102 |
+
"normalized": false,
|
| 103 |
+
"rstrip": false,
|
| 104 |
+
"single_word": false,
|
| 105 |
+
"special": true
|
| 106 |
+
},
|
| 107 |
+
"256009": {
|
| 108 |
+
"content": "<extra_id_290>",
|
| 109 |
+
"lstrip": false,
|
| 110 |
+
"normalized": false,
|
| 111 |
+
"rstrip": false,
|
| 112 |
+
"single_word": false,
|
| 113 |
+
"special": true
|
| 114 |
+
},
|
| 115 |
+
"256010": {
|
| 116 |
+
"content": "<extra_id_289>",
|
| 117 |
+
"lstrip": false,
|
| 118 |
+
"normalized": false,
|
| 119 |
+
"rstrip": false,
|
| 120 |
+
"single_word": false,
|
| 121 |
+
"special": true
|
| 122 |
+
},
|
| 123 |
+
"256011": {
|
| 124 |
+
"content": "<extra_id_288>",
|
| 125 |
+
"lstrip": false,
|
| 126 |
+
"normalized": false,
|
| 127 |
+
"rstrip": false,
|
| 128 |
+
"single_word": false,
|
| 129 |
+
"special": true
|
| 130 |
+
},
|
| 131 |
+
"256012": {
|
| 132 |
+
"content": "<extra_id_287>",
|
| 133 |
+
"lstrip": false,
|
| 134 |
+
"normalized": false,
|
| 135 |
+
"rstrip": false,
|
| 136 |
+
"single_word": false,
|
| 137 |
+
"special": true
|
| 138 |
+
},
|
| 139 |
+
"256013": {
|
| 140 |
+
"content": "<extra_id_286>",
|
| 141 |
+
"lstrip": false,
|
| 142 |
+
"normalized": false,
|
| 143 |
+
"rstrip": false,
|
| 144 |
+
"single_word": false,
|
| 145 |
+
"special": true
|
| 146 |
+
},
|
| 147 |
+
"256014": {
|
| 148 |
+
"content": "<extra_id_285>",
|
| 149 |
+
"lstrip": false,
|
| 150 |
+
"normalized": false,
|
| 151 |
+
"rstrip": false,
|
| 152 |
+
"single_word": false,
|
| 153 |
+
"special": true
|
| 154 |
+
},
|
| 155 |
+
"256015": {
|
| 156 |
+
"content": "<extra_id_284>",
|
| 157 |
+
"lstrip": false,
|
| 158 |
+
"normalized": false,
|
| 159 |
+
"rstrip": false,
|
| 160 |
+
"single_word": false,
|
| 161 |
+
"special": true
|
| 162 |
+
},
|
| 163 |
+
"256016": {
|
| 164 |
+
"content": "<extra_id_283>",
|
| 165 |
+
"lstrip": false,
|
| 166 |
+
"normalized": false,
|
| 167 |
+
"rstrip": false,
|
| 168 |
+
"single_word": false,
|
| 169 |
+
"special": true
|
| 170 |
+
},
|
| 171 |
+
"256017": {
|
| 172 |
+
"content": "<extra_id_282>",
|
| 173 |
+
"lstrip": false,
|
| 174 |
+
"normalized": false,
|
| 175 |
+
"rstrip": false,
|
| 176 |
+
"single_word": false,
|
| 177 |
+
"special": true
|
| 178 |
+
},
|
| 179 |
+
"256018": {
|
| 180 |
+
"content": "<extra_id_281>",
|
| 181 |
+
"lstrip": false,
|
| 182 |
+
"normalized": false,
|
| 183 |
+
"rstrip": false,
|
| 184 |
+
"single_word": false,
|
| 185 |
+
"special": true
|
| 186 |
+
},
|
| 187 |
+
"256019": {
|
| 188 |
+
"content": "<extra_id_280>",
|
| 189 |
+
"lstrip": false,
|
| 190 |
+
"normalized": false,
|
| 191 |
+
"rstrip": false,
|
| 192 |
+
"single_word": false,
|
| 193 |
+
"special": true
|
| 194 |
+
},
|
| 195 |
+
"256020": {
|
| 196 |
+
"content": "<extra_id_279>",
|
| 197 |
+
"lstrip": false,
|
| 198 |
+
"normalized": false,
|
| 199 |
+
"rstrip": false,
|
| 200 |
+
"single_word": false,
|
| 201 |
+
"special": true
|
| 202 |
+
},
|
| 203 |
+
"256021": {
|
| 204 |
+
"content": "<extra_id_278>",
|
| 205 |
+
"lstrip": false,
|
| 206 |
+
"normalized": false,
|
| 207 |
+
"rstrip": false,
|
| 208 |
+
"single_word": false,
|
| 209 |
+
"special": true
|
| 210 |
+
},
|
| 211 |
+
"256022": {
|
| 212 |
+
"content": "<extra_id_277>",
|
| 213 |
+
"lstrip": false,
|
| 214 |
+
"normalized": false,
|
| 215 |
+
"rstrip": false,
|
| 216 |
+
"single_word": false,
|
| 217 |
+
"special": true
|
| 218 |
+
},
|
| 219 |
+
"256023": {
|
| 220 |
+
"content": "<extra_id_276>",
|
| 221 |
+
"lstrip": false,
|
| 222 |
+
"normalized": false,
|
| 223 |
+
"rstrip": false,
|
| 224 |
+
"single_word": false,
|
| 225 |
+
"special": true
|
| 226 |
+
},
|
| 227 |
+
"256024": {
|
| 228 |
+
"content": "<extra_id_275>",
|
| 229 |
+
"lstrip": false,
|
| 230 |
+
"normalized": false,
|
| 231 |
+
"rstrip": false,
|
| 232 |
+
"single_word": false,
|
| 233 |
+
"special": true
|
| 234 |
+
},
|
| 235 |
+
"256025": {
|
| 236 |
+
"content": "<extra_id_274>",
|
| 237 |
+
"lstrip": false,
|
| 238 |
+
"normalized": false,
|
| 239 |
+
"rstrip": false,
|
| 240 |
+
"single_word": false,
|
| 241 |
+
"special": true
|
| 242 |
+
},
|
| 243 |
+
"256026": {
|
| 244 |
+
"content": "<extra_id_273>",
|
| 245 |
+
"lstrip": false,
|
| 246 |
+
"normalized": false,
|
| 247 |
+
"rstrip": false,
|
| 248 |
+
"single_word": false,
|
| 249 |
+
"special": true
|
| 250 |
+
},
|
| 251 |
+
"256027": {
|
| 252 |
+
"content": "<extra_id_272>",
|
| 253 |
+
"lstrip": false,
|
| 254 |
+
"normalized": false,
|
| 255 |
+
"rstrip": false,
|
| 256 |
+
"single_word": false,
|
| 257 |
+
"special": true
|
| 258 |
+
},
|
| 259 |
+
"256028": {
|
| 260 |
+
"content": "<extra_id_271>",
|
| 261 |
+
"lstrip": false,
|
| 262 |
+
"normalized": false,
|
| 263 |
+
"rstrip": false,
|
| 264 |
+
"single_word": false,
|
| 265 |
+
"special": true
|
| 266 |
+
},
|
| 267 |
+
"256029": {
|
| 268 |
+
"content": "<extra_id_270>",
|
| 269 |
+
"lstrip": false,
|
| 270 |
+
"normalized": false,
|
| 271 |
+
"rstrip": false,
|
| 272 |
+
"single_word": false,
|
| 273 |
+
"special": true
|
| 274 |
+
},
|
| 275 |
+
"256030": {
|
| 276 |
+
"content": "<extra_id_269>",
|
| 277 |
+
"lstrip": false,
|
| 278 |
+
"normalized": false,
|
| 279 |
+
"rstrip": false,
|
| 280 |
+
"single_word": false,
|
| 281 |
+
"special": true
|
| 282 |
+
},
|
| 283 |
+
"256031": {
|
| 284 |
+
"content": "<extra_id_268>",
|
| 285 |
+
"lstrip": false,
|
| 286 |
+
"normalized": false,
|
| 287 |
+
"rstrip": false,
|
| 288 |
+
"single_word": false,
|
| 289 |
+
"special": true
|
| 290 |
+
},
|
| 291 |
+
"256032": {
|
| 292 |
+
"content": "<extra_id_267>",
|
| 293 |
+
"lstrip": false,
|
| 294 |
+
"normalized": false,
|
| 295 |
+
"rstrip": false,
|
| 296 |
+
"single_word": false,
|
| 297 |
+
"special": true
|
| 298 |
+
},
|
| 299 |
+
"256033": {
|
| 300 |
+
"content": "<extra_id_266>",
|
| 301 |
+
"lstrip": false,
|
| 302 |
+
"normalized": false,
|
| 303 |
+
"rstrip": false,
|
| 304 |
+
"single_word": false,
|
| 305 |
+
"special": true
|
| 306 |
+
},
|
| 307 |
+
"256034": {
|
| 308 |
+
"content": "<extra_id_265>",
|
| 309 |
+
"lstrip": false,
|
| 310 |
+
"normalized": false,
|
| 311 |
+
"rstrip": false,
|
| 312 |
+
"single_word": false,
|
| 313 |
+
"special": true
|
| 314 |
+
},
|
| 315 |
+
"256035": {
|
| 316 |
+
"content": "<extra_id_264>",
|
| 317 |
+
"lstrip": false,
|
| 318 |
+
"normalized": false,
|
| 319 |
+
"rstrip": false,
|
| 320 |
+
"single_word": false,
|
| 321 |
+
"special": true
|
| 322 |
+
},
|
| 323 |
+
"256036": {
|
| 324 |
+
"content": "<extra_id_263>",
|
| 325 |
+
"lstrip": false,
|
| 326 |
+
"normalized": false,
|
| 327 |
+
"rstrip": false,
|
| 328 |
+
"single_word": false,
|
| 329 |
+
"special": true
|
| 330 |
+
},
|
| 331 |
+
"256037": {
|
| 332 |
+
"content": "<extra_id_262>",
|
| 333 |
+
"lstrip": false,
|
| 334 |
+
"normalized": false,
|
| 335 |
+
"rstrip": false,
|
| 336 |
+
"single_word": false,
|
| 337 |
+
"special": true
|
| 338 |
+
},
|
| 339 |
+
"256038": {
|
| 340 |
+
"content": "<extra_id_261>",
|
| 341 |
+
"lstrip": false,
|
| 342 |
+
"normalized": false,
|
| 343 |
+
"rstrip": false,
|
| 344 |
+
"single_word": false,
|
| 345 |
+
"special": true
|
| 346 |
+
},
|
| 347 |
+
"256039": {
|
| 348 |
+
"content": "<extra_id_260>",
|
| 349 |
+
"lstrip": false,
|
| 350 |
+
"normalized": false,
|
| 351 |
+
"rstrip": false,
|
| 352 |
+
"single_word": false,
|
| 353 |
+
"special": true
|
| 354 |
+
},
|
| 355 |
+
"256040": {
|
| 356 |
+
"content": "<extra_id_259>",
|
| 357 |
+
"lstrip": false,
|
| 358 |
+
"normalized": false,
|
| 359 |
+
"rstrip": false,
|
| 360 |
+
"single_word": false,
|
| 361 |
+
"special": true
|
| 362 |
+
},
|
| 363 |
+
"256041": {
|
| 364 |
+
"content": "<extra_id_258>",
|
| 365 |
+
"lstrip": false,
|
| 366 |
+
"normalized": false,
|
| 367 |
+
"rstrip": false,
|
| 368 |
+
"single_word": false,
|
| 369 |
+
"special": true
|
| 370 |
+
},
|
| 371 |
+
"256042": {
|
| 372 |
+
"content": "<extra_id_257>",
|
| 373 |
+
"lstrip": false,
|
| 374 |
+
"normalized": false,
|
| 375 |
+
"rstrip": false,
|
| 376 |
+
"single_word": false,
|
| 377 |
+
"special": true
|
| 378 |
+
},
|
| 379 |
+
"256043": {
|
| 380 |
+
"content": "<extra_id_256>",
|
| 381 |
+
"lstrip": false,
|
| 382 |
+
"normalized": false,
|
| 383 |
+
"rstrip": false,
|
| 384 |
+
"single_word": false,
|
| 385 |
+
"special": true
|
| 386 |
+
},
|
| 387 |
+
"256044": {
|
| 388 |
+
"content": "<extra_id_255>",
|
| 389 |
+
"lstrip": false,
|
| 390 |
+
"normalized": false,
|
| 391 |
+
"rstrip": false,
|
| 392 |
+
"single_word": false,
|
| 393 |
+
"special": true
|
| 394 |
+
},
|
| 395 |
+
"256045": {
|
| 396 |
+
"content": "<extra_id_254>",
|
| 397 |
+
"lstrip": false,
|
| 398 |
+
"normalized": false,
|
| 399 |
+
"rstrip": false,
|
| 400 |
+
"single_word": false,
|
| 401 |
+
"special": true
|
| 402 |
+
},
|
| 403 |
+
"256046": {
|
| 404 |
+
"content": "<extra_id_253>",
|
| 405 |
+
"lstrip": false,
|
| 406 |
+
"normalized": false,
|
| 407 |
+
"rstrip": false,
|
| 408 |
+
"single_word": false,
|
| 409 |
+
"special": true
|
| 410 |
+
},
|
| 411 |
+
"256047": {
|
| 412 |
+
"content": "<extra_id_252>",
|
| 413 |
+
"lstrip": false,
|
| 414 |
+
"normalized": false,
|
| 415 |
+
"rstrip": false,
|
| 416 |
+
"single_word": false,
|
| 417 |
+
"special": true
|
| 418 |
+
},
|
| 419 |
+
"256048": {
|
| 420 |
+
"content": "<extra_id_251>",
|
| 421 |
+
"lstrip": false,
|
| 422 |
+
"normalized": false,
|
| 423 |
+
"rstrip": false,
|
| 424 |
+
"single_word": false,
|
| 425 |
+
"special": true
|
| 426 |
+
},
|
| 427 |
+
"256049": {
|
| 428 |
+
"content": "<extra_id_250>",
|
| 429 |
+
"lstrip": false,
|
| 430 |
+
"normalized": false,
|
| 431 |
+
"rstrip": false,
|
| 432 |
+
"single_word": false,
|
| 433 |
+
"special": true
|
| 434 |
+
},
|
| 435 |
+
"256050": {
|
| 436 |
+
"content": "<extra_id_249>",
|
| 437 |
+
"lstrip": false,
|
| 438 |
+
"normalized": false,
|
| 439 |
+
"rstrip": false,
|
| 440 |
+
"single_word": false,
|
| 441 |
+
"special": true
|
| 442 |
+
},
|
| 443 |
+
"256051": {
|
| 444 |
+
"content": "<extra_id_248>",
|
| 445 |
+
"lstrip": false,
|
| 446 |
+
"normalized": false,
|
| 447 |
+
"rstrip": false,
|
| 448 |
+
"single_word": false,
|
| 449 |
+
"special": true
|
| 450 |
+
},
|
| 451 |
+
"256052": {
|
| 452 |
+
"content": "<extra_id_247>",
|
| 453 |
+
"lstrip": false,
|
| 454 |
+
"normalized": false,
|
| 455 |
+
"rstrip": false,
|
| 456 |
+
"single_word": false,
|
| 457 |
+
"special": true
|
| 458 |
+
},
|
| 459 |
+
"256053": {
|
| 460 |
+
"content": "<extra_id_246>",
|
| 461 |
+
"lstrip": false,
|
| 462 |
+
"normalized": false,
|
| 463 |
+
"rstrip": false,
|
| 464 |
+
"single_word": false,
|
| 465 |
+
"special": true
|
| 466 |
+
},
|
| 467 |
+
"256054": {
|
| 468 |
+
"content": "<extra_id_245>",
|
| 469 |
+
"lstrip": false,
|
| 470 |
+
"normalized": false,
|
| 471 |
+
"rstrip": false,
|
| 472 |
+
"single_word": false,
|
| 473 |
+
"special": true
|
| 474 |
+
},
|
| 475 |
+
"256055": {
|
| 476 |
+
"content": "<extra_id_244>",
|
| 477 |
+
"lstrip": false,
|
| 478 |
+
"normalized": false,
|
| 479 |
+
"rstrip": false,
|
| 480 |
+
"single_word": false,
|
| 481 |
+
"special": true
|
| 482 |
+
},
|
| 483 |
+
"256056": {
|
| 484 |
+
"content": "<extra_id_243>",
|
| 485 |
+
"lstrip": false,
|
| 486 |
+
"normalized": false,
|
| 487 |
+
"rstrip": false,
|
| 488 |
+
"single_word": false,
|
| 489 |
+
"special": true
|
| 490 |
+
},
|
| 491 |
+
"256057": {
|
| 492 |
+
"content": "<extra_id_242>",
|
| 493 |
+
"lstrip": false,
|
| 494 |
+
"normalized": false,
|
| 495 |
+
"rstrip": false,
|
| 496 |
+
"single_word": false,
|
| 497 |
+
"special": true
|
| 498 |
+
},
|
| 499 |
+
"256058": {
|
| 500 |
+
"content": "<extra_id_241>",
|
| 501 |
+
"lstrip": false,
|
| 502 |
+
"normalized": false,
|
| 503 |
+
"rstrip": false,
|
| 504 |
+
"single_word": false,
|
| 505 |
+
"special": true
|
| 506 |
+
},
|
| 507 |
+
"256059": {
|
| 508 |
+
"content": "<extra_id_240>",
|
| 509 |
+
"lstrip": false,
|
| 510 |
+
"normalized": false,
|
| 511 |
+
"rstrip": false,
|
| 512 |
+
"single_word": false,
|
| 513 |
+
"special": true
|
| 514 |
+
},
|
| 515 |
+
"256060": {
|
| 516 |
+
"content": "<extra_id_239>",
|
| 517 |
+
"lstrip": false,
|
| 518 |
+
"normalized": false,
|
| 519 |
+
"rstrip": false,
|
| 520 |
+
"single_word": false,
|
| 521 |
+
"special": true
|
| 522 |
+
},
|
| 523 |
+
"256061": {
|
| 524 |
+
"content": "<extra_id_238>",
|
| 525 |
+
"lstrip": false,
|
| 526 |
+
"normalized": false,
|
| 527 |
+
"rstrip": false,
|
| 528 |
+
"single_word": false,
|
| 529 |
+
"special": true
|
| 530 |
+
},
|
| 531 |
+
"256062": {
|
| 532 |
+
"content": "<extra_id_237>",
|
| 533 |
+
"lstrip": false,
|
| 534 |
+
"normalized": false,
|
| 535 |
+
"rstrip": false,
|
| 536 |
+
"single_word": false,
|
| 537 |
+
"special": true
|
| 538 |
+
},
|
| 539 |
+
"256063": {
|
| 540 |
+
"content": "<extra_id_236>",
|
| 541 |
+
"lstrip": false,
|
| 542 |
+
"normalized": false,
|
| 543 |
+
"rstrip": false,
|
| 544 |
+
"single_word": false,
|
| 545 |
+
"special": true
|
| 546 |
+
},
|
| 547 |
+
"256064": {
|
| 548 |
+
"content": "<extra_id_235>",
|
| 549 |
+
"lstrip": false,
|
| 550 |
+
"normalized": false,
|
| 551 |
+
"rstrip": false,
|
| 552 |
+
"single_word": false,
|
| 553 |
+
"special": true
|
| 554 |
+
},
|
| 555 |
+
"256065": {
|
| 556 |
+
"content": "<extra_id_234>",
|
| 557 |
+
"lstrip": false,
|
| 558 |
+
"normalized": false,
|
| 559 |
+
"rstrip": false,
|
| 560 |
+
"single_word": false,
|
| 561 |
+
"special": true
|
| 562 |
+
},
|
| 563 |
+
"256066": {
|
| 564 |
+
"content": "<extra_id_233>",
|
| 565 |
+
"lstrip": false,
|
| 566 |
+
"normalized": false,
|
| 567 |
+
"rstrip": false,
|
| 568 |
+
"single_word": false,
|
| 569 |
+
"special": true
|
| 570 |
+
},
|
| 571 |
+
"256067": {
|
| 572 |
+
"content": "<extra_id_232>",
|
| 573 |
+
"lstrip": false,
|
| 574 |
+
"normalized": false,
|
| 575 |
+
"rstrip": false,
|
| 576 |
+
"single_word": false,
|
| 577 |
+
"special": true
|
| 578 |
+
},
|
| 579 |
+
"256068": {
|
| 580 |
+
"content": "<extra_id_231>",
|
| 581 |
+
"lstrip": false,
|
| 582 |
+
"normalized": false,
|
| 583 |
+
"rstrip": false,
|
| 584 |
+
"single_word": false,
|
| 585 |
+
"special": true
|
| 586 |
+
},
|
| 587 |
+
"256069": {
|
| 588 |
+
"content": "<extra_id_230>",
|
| 589 |
+
"lstrip": false,
|
| 590 |
+
"normalized": false,
|
| 591 |
+
"rstrip": false,
|
| 592 |
+
"single_word": false,
|
| 593 |
+
"special": true
|
| 594 |
+
},
|
| 595 |
+
"256070": {
|
| 596 |
+
"content": "<extra_id_229>",
|
| 597 |
+
"lstrip": false,
|
| 598 |
+
"normalized": false,
|
| 599 |
+
"rstrip": false,
|
| 600 |
+
"single_word": false,
|
| 601 |
+
"special": true
|
| 602 |
+
},
|
| 603 |
+
"256071": {
|
| 604 |
+
"content": "<extra_id_228>",
|
| 605 |
+
"lstrip": false,
|
| 606 |
+
"normalized": false,
|
| 607 |
+
"rstrip": false,
|
| 608 |
+
"single_word": false,
|
| 609 |
+
"special": true
|
| 610 |
+
},
|
| 611 |
+
"256072": {
|
| 612 |
+
"content": "<extra_id_227>",
|
| 613 |
+
"lstrip": false,
|
| 614 |
+
"normalized": false,
|
| 615 |
+
"rstrip": false,
|
| 616 |
+
"single_word": false,
|
| 617 |
+
"special": true
|
| 618 |
+
},
|
| 619 |
+
"256073": {
|
| 620 |
+
"content": "<extra_id_226>",
|
| 621 |
+
"lstrip": false,
|
| 622 |
+
"normalized": false,
|
| 623 |
+
"rstrip": false,
|
| 624 |
+
"single_word": false,
|
| 625 |
+
"special": true
|
| 626 |
+
},
|
| 627 |
+
"256074": {
|
| 628 |
+
"content": "<extra_id_225>",
|
| 629 |
+
"lstrip": false,
|
| 630 |
+
"normalized": false,
|
| 631 |
+
"rstrip": false,
|
| 632 |
+
"single_word": false,
|
| 633 |
+
"special": true
|
| 634 |
+
},
|
| 635 |
+
"256075": {
|
| 636 |
+
"content": "<extra_id_224>",
|
| 637 |
+
"lstrip": false,
|
| 638 |
+
"normalized": false,
|
| 639 |
+
"rstrip": false,
|
| 640 |
+
"single_word": false,
|
| 641 |
+
"special": true
|
| 642 |
+
},
|
| 643 |
+
"256076": {
|
| 644 |
+
"content": "<extra_id_223>",
|
| 645 |
+
"lstrip": false,
|
| 646 |
+
"normalized": false,
|
| 647 |
+
"rstrip": false,
|
| 648 |
+
"single_word": false,
|
| 649 |
+
"special": true
|
| 650 |
+
},
|
| 651 |
+
"256077": {
|
| 652 |
+
"content": "<extra_id_222>",
|
| 653 |
+
"lstrip": false,
|
| 654 |
+
"normalized": false,
|
| 655 |
+
"rstrip": false,
|
| 656 |
+
"single_word": false,
|
| 657 |
+
"special": true
|
| 658 |
+
},
|
| 659 |
+
"256078": {
|
| 660 |
+
"content": "<extra_id_221>",
|
| 661 |
+
"lstrip": false,
|
| 662 |
+
"normalized": false,
|
| 663 |
+
"rstrip": false,
|
| 664 |
+
"single_word": false,
|
| 665 |
+
"special": true
|
| 666 |
+
},
|
| 667 |
+
"256079": {
|
| 668 |
+
"content": "<extra_id_220>",
|
| 669 |
+
"lstrip": false,
|
| 670 |
+
"normalized": false,
|
| 671 |
+
"rstrip": false,
|
| 672 |
+
"single_word": false,
|
| 673 |
+
"special": true
|
| 674 |
+
},
|
| 675 |
+
"256080": {
|
| 676 |
+
"content": "<extra_id_219>",
|
| 677 |
+
"lstrip": false,
|
| 678 |
+
"normalized": false,
|
| 679 |
+
"rstrip": false,
|
| 680 |
+
"single_word": false,
|
| 681 |
+
"special": true
|
| 682 |
+
},
|
| 683 |
+
"256081": {
|
| 684 |
+
"content": "<extra_id_218>",
|
| 685 |
+
"lstrip": false,
|
| 686 |
+
"normalized": false,
|
| 687 |
+
"rstrip": false,
|
| 688 |
+
"single_word": false,
|
| 689 |
+
"special": true
|
| 690 |
+
},
|
| 691 |
+
"256082": {
|
| 692 |
+
"content": "<extra_id_217>",
|
| 693 |
+
"lstrip": false,
|
| 694 |
+
"normalized": false,
|
| 695 |
+
"rstrip": false,
|
| 696 |
+
"single_word": false,
|
| 697 |
+
"special": true
|
| 698 |
+
},
|
| 699 |
+
"256083": {
|
| 700 |
+
"content": "<extra_id_216>",
|
| 701 |
+
"lstrip": false,
|
| 702 |
+
"normalized": false,
|
| 703 |
+
"rstrip": false,
|
| 704 |
+
"single_word": false,
|
| 705 |
+
"special": true
|
| 706 |
+
},
|
| 707 |
+
"256084": {
|
| 708 |
+
"content": "<extra_id_215>",
|
| 709 |
+
"lstrip": false,
|
| 710 |
+
"normalized": false,
|
| 711 |
+
"rstrip": false,
|
| 712 |
+
"single_word": false,
|
| 713 |
+
"special": true
|
| 714 |
+
},
|
| 715 |
+
"256085": {
|
| 716 |
+
"content": "<extra_id_214>",
|
| 717 |
+
"lstrip": false,
|
| 718 |
+
"normalized": false,
|
| 719 |
+
"rstrip": false,
|
| 720 |
+
"single_word": false,
|
| 721 |
+
"special": true
|
| 722 |
+
},
|
| 723 |
+
"256086": {
|
| 724 |
+
"content": "<extra_id_213>",
|
| 725 |
+
"lstrip": false,
|
| 726 |
+
"normalized": false,
|
| 727 |
+
"rstrip": false,
|
| 728 |
+
"single_word": false,
|
| 729 |
+
"special": true
|
| 730 |
+
},
|
| 731 |
+
"256087": {
|
| 732 |
+
"content": "<extra_id_212>",
|
| 733 |
+
"lstrip": false,
|
| 734 |
+
"normalized": false,
|
| 735 |
+
"rstrip": false,
|
| 736 |
+
"single_word": false,
|
| 737 |
+
"special": true
|
| 738 |
+
},
|
| 739 |
+
"256088": {
|
| 740 |
+
"content": "<extra_id_211>",
|
| 741 |
+
"lstrip": false,
|
| 742 |
+
"normalized": false,
|
| 743 |
+
"rstrip": false,
|
| 744 |
+
"single_word": false,
|
| 745 |
+
"special": true
|
| 746 |
+
},
|
| 747 |
+
"256089": {
|
| 748 |
+
"content": "<extra_id_210>",
|
| 749 |
+
"lstrip": false,
|
| 750 |
+
"normalized": false,
|
| 751 |
+
"rstrip": false,
|
| 752 |
+
"single_word": false,
|
| 753 |
+
"special": true
|
| 754 |
+
},
|
| 755 |
+
"256090": {
|
| 756 |
+
"content": "<extra_id_209>",
|
| 757 |
+
"lstrip": false,
|
| 758 |
+
"normalized": false,
|
| 759 |
+
"rstrip": false,
|
| 760 |
+
"single_word": false,
|
| 761 |
+
"special": true
|
| 762 |
+
},
|
| 763 |
+
"256091": {
|
| 764 |
+
"content": "<extra_id_208>",
|
| 765 |
+
"lstrip": false,
|
| 766 |
+
"normalized": false,
|
| 767 |
+
"rstrip": false,
|
| 768 |
+
"single_word": false,
|
| 769 |
+
"special": true
|
| 770 |
+
},
|
| 771 |
+
"256092": {
|
| 772 |
+
"content": "<extra_id_207>",
|
| 773 |
+
"lstrip": false,
|
| 774 |
+
"normalized": false,
|
| 775 |
+
"rstrip": false,
|
| 776 |
+
"single_word": false,
|
| 777 |
+
"special": true
|
| 778 |
+
},
|
| 779 |
+
"256093": {
|
| 780 |
+
"content": "<extra_id_206>",
|
| 781 |
+
"lstrip": false,
|
| 782 |
+
"normalized": false,
|
| 783 |
+
"rstrip": false,
|
| 784 |
+
"single_word": false,
|
| 785 |
+
"special": true
|
| 786 |
+
},
|
| 787 |
+
"256094": {
|
| 788 |
+
"content": "<extra_id_205>",
|
| 789 |
+
"lstrip": false,
|
| 790 |
+
"normalized": false,
|
| 791 |
+
"rstrip": false,
|
| 792 |
+
"single_word": false,
|
| 793 |
+
"special": true
|
| 794 |
+
},
|
| 795 |
+
"256095": {
|
| 796 |
+
"content": "<extra_id_204>",
|
| 797 |
+
"lstrip": false,
|
| 798 |
+
"normalized": false,
|
| 799 |
+
"rstrip": false,
|
| 800 |
+
"single_word": false,
|
| 801 |
+
"special": true
|
| 802 |
+
},
|
| 803 |
+
"256096": {
|
| 804 |
+
"content": "<extra_id_203>",
|
| 805 |
+
"lstrip": false,
|
| 806 |
+
"normalized": false,
|
| 807 |
+
"rstrip": false,
|
| 808 |
+
"single_word": false,
|
| 809 |
+
"special": true
|
| 810 |
+
},
|
| 811 |
+
"256097": {
|
| 812 |
+
"content": "<extra_id_202>",
|
| 813 |
+
"lstrip": false,
|
| 814 |
+
"normalized": false,
|
| 815 |
+
"rstrip": false,
|
| 816 |
+
"single_word": false,
|
| 817 |
+
"special": true
|
| 818 |
+
},
|
| 819 |
+
"256098": {
|
| 820 |
+
"content": "<extra_id_201>",
|
| 821 |
+
"lstrip": false,
|
| 822 |
+
"normalized": false,
|
| 823 |
+
"rstrip": false,
|
| 824 |
+
"single_word": false,
|
| 825 |
+
"special": true
|
| 826 |
+
},
|
| 827 |
+
"256099": {
|
| 828 |
+
"content": "<extra_id_200>",
|
| 829 |
+
"lstrip": false,
|
| 830 |
+
"normalized": false,
|
| 831 |
+
"rstrip": false,
|
| 832 |
+
"single_word": false,
|
| 833 |
+
"special": true
|
| 834 |
+
},
|
| 835 |
+
"256100": {
|
| 836 |
+
"content": "<extra_id_199>",
|
| 837 |
+
"lstrip": false,
|
| 838 |
+
"normalized": false,
|
| 839 |
+
"rstrip": false,
|
| 840 |
+
"single_word": false,
|
| 841 |
+
"special": true
|
| 842 |
+
},
|
| 843 |
+
"256101": {
|
| 844 |
+
"content": "<extra_id_198>",
|
| 845 |
+
"lstrip": false,
|
| 846 |
+
"normalized": false,
|
| 847 |
+
"rstrip": false,
|
| 848 |
+
"single_word": false,
|
| 849 |
+
"special": true
|
| 850 |
+
},
|
| 851 |
+
"256102": {
|
| 852 |
+
"content": "<extra_id_197>",
|
| 853 |
+
"lstrip": false,
|
| 854 |
+
"normalized": false,
|
| 855 |
+
"rstrip": false,
|
| 856 |
+
"single_word": false,
|
| 857 |
+
"special": true
|
| 858 |
+
},
|
| 859 |
+
"256103": {
|
| 860 |
+
"content": "<extra_id_196>",
|
| 861 |
+
"lstrip": false,
|
| 862 |
+
"normalized": false,
|
| 863 |
+
"rstrip": false,
|
| 864 |
+
"single_word": false,
|
| 865 |
+
"special": true
|
| 866 |
+
},
|
| 867 |
+
"256104": {
|
| 868 |
+
"content": "<extra_id_195>",
|
| 869 |
+
"lstrip": false,
|
| 870 |
+
"normalized": false,
|
| 871 |
+
"rstrip": false,
|
| 872 |
+
"single_word": false,
|
| 873 |
+
"special": true
|
| 874 |
+
},
|
| 875 |
+
"256105": {
|
| 876 |
+
"content": "<extra_id_194>",
|
| 877 |
+
"lstrip": false,
|
| 878 |
+
"normalized": false,
|
| 879 |
+
"rstrip": false,
|
| 880 |
+
"single_word": false,
|
| 881 |
+
"special": true
|
| 882 |
+
},
|
| 883 |
+
"256106": {
|
| 884 |
+
"content": "<extra_id_193>",
|
| 885 |
+
"lstrip": false,
|
| 886 |
+
"normalized": false,
|
| 887 |
+
"rstrip": false,
|
| 888 |
+
"single_word": false,
|
| 889 |
+
"special": true
|
| 890 |
+
},
|
| 891 |
+
"256107": {
|
| 892 |
+
"content": "<extra_id_192>",
|
| 893 |
+
"lstrip": false,
|
| 894 |
+
"normalized": false,
|
| 895 |
+
"rstrip": false,
|
| 896 |
+
"single_word": false,
|
| 897 |
+
"special": true
|
| 898 |
+
},
|
| 899 |
+
"256108": {
|
| 900 |
+
"content": "<extra_id_191>",
|
| 901 |
+
"lstrip": false,
|
| 902 |
+
"normalized": false,
|
| 903 |
+
"rstrip": false,
|
| 904 |
+
"single_word": false,
|
| 905 |
+
"special": true
|
| 906 |
+
},
|
| 907 |
+
"256109": {
|
| 908 |
+
"content": "<extra_id_190>",
|
| 909 |
+
"lstrip": false,
|
| 910 |
+
"normalized": false,
|
| 911 |
+
"rstrip": false,
|
| 912 |
+
"single_word": false,
|
| 913 |
+
"special": true
|
| 914 |
+
},
|
| 915 |
+
"256110": {
|
| 916 |
+
"content": "<extra_id_189>",
|
| 917 |
+
"lstrip": false,
|
| 918 |
+
"normalized": false,
|
| 919 |
+
"rstrip": false,
|
| 920 |
+
"single_word": false,
|
| 921 |
+
"special": true
|
| 922 |
+
},
|
| 923 |
+
"256111": {
|
| 924 |
+
"content": "<extra_id_188>",
|
| 925 |
+
"lstrip": false,
|
| 926 |
+
"normalized": false,
|
| 927 |
+
"rstrip": false,
|
| 928 |
+
"single_word": false,
|
| 929 |
+
"special": true
|
| 930 |
+
},
|
| 931 |
+
"256112": {
|
| 932 |
+
"content": "<extra_id_187>",
|
| 933 |
+
"lstrip": false,
|
| 934 |
+
"normalized": false,
|
| 935 |
+
"rstrip": false,
|
| 936 |
+
"single_word": false,
|
| 937 |
+
"special": true
|
| 938 |
+
},
|
| 939 |
+
"256113": {
|
| 940 |
+
"content": "<extra_id_186>",
|
| 941 |
+
"lstrip": false,
|
| 942 |
+
"normalized": false,
|
| 943 |
+
"rstrip": false,
|
| 944 |
+
"single_word": false,
|
| 945 |
+
"special": true
|
| 946 |
+
},
|
| 947 |
+
"256114": {
|
| 948 |
+
"content": "<extra_id_185>",
|
| 949 |
+
"lstrip": false,
|
| 950 |
+
"normalized": false,
|
| 951 |
+
"rstrip": false,
|
| 952 |
+
"single_word": false,
|
| 953 |
+
"special": true
|
| 954 |
+
},
|
| 955 |
+
"256115": {
|
| 956 |
+
"content": "<extra_id_184>",
|
| 957 |
+
"lstrip": false,
|
| 958 |
+
"normalized": false,
|
| 959 |
+
"rstrip": false,
|
| 960 |
+
"single_word": false,
|
| 961 |
+
"special": true
|
| 962 |
+
},
|
| 963 |
+
"256116": {
|
| 964 |
+
"content": "<extra_id_183>",
|
| 965 |
+
"lstrip": false,
|
| 966 |
+
"normalized": false,
|
| 967 |
+
"rstrip": false,
|
| 968 |
+
"single_word": false,
|
| 969 |
+
"special": true
|
| 970 |
+
},
|
| 971 |
+
"256117": {
|
| 972 |
+
"content": "<extra_id_182>",
|
| 973 |
+
"lstrip": false,
|
| 974 |
+
"normalized": false,
|
| 975 |
+
"rstrip": false,
|
| 976 |
+
"single_word": false,
|
| 977 |
+
"special": true
|
| 978 |
+
},
|
| 979 |
+
"256118": {
|
| 980 |
+
"content": "<extra_id_181>",
|
| 981 |
+
"lstrip": false,
|
| 982 |
+
"normalized": false,
|
| 983 |
+
"rstrip": false,
|
| 984 |
+
"single_word": false,
|
| 985 |
+
"special": true
|
| 986 |
+
},
|
| 987 |
+
"256119": {
|
| 988 |
+
"content": "<extra_id_180>",
|
| 989 |
+
"lstrip": false,
|
| 990 |
+
"normalized": false,
|
| 991 |
+
"rstrip": false,
|
| 992 |
+
"single_word": false,
|
| 993 |
+
"special": true
|
| 994 |
+
},
|
| 995 |
+
"256120": {
|
| 996 |
+
"content": "<extra_id_179>",
|
| 997 |
+
"lstrip": false,
|
| 998 |
+
"normalized": false,
|
| 999 |
+
"rstrip": false,
|
| 1000 |
+
"single_word": false,
|
| 1001 |
+
"special": true
|
| 1002 |
+
},
|
| 1003 |
+
"256121": {
|
| 1004 |
+
"content": "<extra_id_178>",
|
| 1005 |
+
"lstrip": false,
|
| 1006 |
+
"normalized": false,
|
| 1007 |
+
"rstrip": false,
|
| 1008 |
+
"single_word": false,
|
| 1009 |
+
"special": true
|
| 1010 |
+
},
|
| 1011 |
+
"256122": {
|
| 1012 |
+
"content": "<extra_id_177>",
|
| 1013 |
+
"lstrip": false,
|
| 1014 |
+
"normalized": false,
|
| 1015 |
+
"rstrip": false,
|
| 1016 |
+
"single_word": false,
|
| 1017 |
+
"special": true
|
| 1018 |
+
},
|
| 1019 |
+
"256123": {
|
| 1020 |
+
"content": "<extra_id_176>",
|
| 1021 |
+
"lstrip": false,
|
| 1022 |
+
"normalized": false,
|
| 1023 |
+
"rstrip": false,
|
| 1024 |
+
"single_word": false,
|
| 1025 |
+
"special": true
|
| 1026 |
+
},
|
| 1027 |
+
"256124": {
|
| 1028 |
+
"content": "<extra_id_175>",
|
| 1029 |
+
"lstrip": false,
|
| 1030 |
+
"normalized": false,
|
| 1031 |
+
"rstrip": false,
|
| 1032 |
+
"single_word": false,
|
| 1033 |
+
"special": true
|
| 1034 |
+
},
|
| 1035 |
+
"256125": {
|
| 1036 |
+
"content": "<extra_id_174>",
|
| 1037 |
+
"lstrip": false,
|
| 1038 |
+
"normalized": false,
|
| 1039 |
+
"rstrip": false,
|
| 1040 |
+
"single_word": false,
|
| 1041 |
+
"special": true
|
| 1042 |
+
},
|
| 1043 |
+
"256126": {
|
| 1044 |
+
"content": "<extra_id_173>",
|
| 1045 |
+
"lstrip": false,
|
| 1046 |
+
"normalized": false,
|
| 1047 |
+
"rstrip": false,
|
| 1048 |
+
"single_word": false,
|
| 1049 |
+
"special": true
|
| 1050 |
+
},
|
| 1051 |
+
"256127": {
|
| 1052 |
+
"content": "<extra_id_172>",
|
| 1053 |
+
"lstrip": false,
|
| 1054 |
+
"normalized": false,
|
| 1055 |
+
"rstrip": false,
|
| 1056 |
+
"single_word": false,
|
| 1057 |
+
"special": true
|
| 1058 |
+
},
|
| 1059 |
+
"256128": {
|
| 1060 |
+
"content": "<extra_id_171>",
|
| 1061 |
+
"lstrip": false,
|
| 1062 |
+
"normalized": false,
|
| 1063 |
+
"rstrip": false,
|
| 1064 |
+
"single_word": false,
|
| 1065 |
+
"special": true
|
| 1066 |
+
},
|
| 1067 |
+
"256129": {
|
| 1068 |
+
"content": "<extra_id_170>",
|
| 1069 |
+
"lstrip": false,
|
| 1070 |
+
"normalized": false,
|
| 1071 |
+
"rstrip": false,
|
| 1072 |
+
"single_word": false,
|
| 1073 |
+
"special": true
|
| 1074 |
+
},
|
| 1075 |
+
"256130": {
|
| 1076 |
+
"content": "<extra_id_169>",
|
| 1077 |
+
"lstrip": false,
|
| 1078 |
+
"normalized": false,
|
| 1079 |
+
"rstrip": false,
|
| 1080 |
+
"single_word": false,
|
| 1081 |
+
"special": true
|
| 1082 |
+
},
|
| 1083 |
+
"256131": {
|
| 1084 |
+
"content": "<extra_id_168>",
|
| 1085 |
+
"lstrip": false,
|
| 1086 |
+
"normalized": false,
|
| 1087 |
+
"rstrip": false,
|
| 1088 |
+
"single_word": false,
|
| 1089 |
+
"special": true
|
| 1090 |
+
},
|
| 1091 |
+
"256132": {
|
| 1092 |
+
"content": "<extra_id_167>",
|
| 1093 |
+
"lstrip": false,
|
| 1094 |
+
"normalized": false,
|
| 1095 |
+
"rstrip": false,
|
| 1096 |
+
"single_word": false,
|
| 1097 |
+
"special": true
|
| 1098 |
+
},
|
| 1099 |
+
"256133": {
|
| 1100 |
+
"content": "<extra_id_166>",
|
| 1101 |
+
"lstrip": false,
|
| 1102 |
+
"normalized": false,
|
| 1103 |
+
"rstrip": false,
|
| 1104 |
+
"single_word": false,
|
| 1105 |
+
"special": true
|
| 1106 |
+
},
|
| 1107 |
+
"256134": {
|
| 1108 |
+
"content": "<extra_id_165>",
|
| 1109 |
+
"lstrip": false,
|
| 1110 |
+
"normalized": false,
|
| 1111 |
+
"rstrip": false,
|
| 1112 |
+
"single_word": false,
|
| 1113 |
+
"special": true
|
| 1114 |
+
},
|
| 1115 |
+
"256135": {
|
| 1116 |
+
"content": "<extra_id_164>",
|
| 1117 |
+
"lstrip": false,
|
| 1118 |
+
"normalized": false,
|
| 1119 |
+
"rstrip": false,
|
| 1120 |
+
"single_word": false,
|
| 1121 |
+
"special": true
|
| 1122 |
+
},
|
| 1123 |
+
"256136": {
|
| 1124 |
+
"content": "<extra_id_163>",
|
| 1125 |
+
"lstrip": false,
|
| 1126 |
+
"normalized": false,
|
| 1127 |
+
"rstrip": false,
|
| 1128 |
+
"single_word": false,
|
| 1129 |
+
"special": true
|
| 1130 |
+
},
|
| 1131 |
+
"256137": {
|
| 1132 |
+
"content": "<extra_id_162>",
|
| 1133 |
+
"lstrip": false,
|
| 1134 |
+
"normalized": false,
|
| 1135 |
+
"rstrip": false,
|
| 1136 |
+
"single_word": false,
|
| 1137 |
+
"special": true
|
| 1138 |
+
},
|
| 1139 |
+
"256138": {
|
| 1140 |
+
"content": "<extra_id_161>",
|
| 1141 |
+
"lstrip": false,
|
| 1142 |
+
"normalized": false,
|
| 1143 |
+
"rstrip": false,
|
| 1144 |
+
"single_word": false,
|
| 1145 |
+
"special": true
|
| 1146 |
+
},
|
| 1147 |
+
"256139": {
|
| 1148 |
+
"content": "<extra_id_160>",
|
| 1149 |
+
"lstrip": false,
|
| 1150 |
+
"normalized": false,
|
| 1151 |
+
"rstrip": false,
|
| 1152 |
+
"single_word": false,
|
| 1153 |
+
"special": true
|
| 1154 |
+
},
|
| 1155 |
+
"256140": {
|
| 1156 |
+
"content": "<extra_id_159>",
|
| 1157 |
+
"lstrip": false,
|
| 1158 |
+
"normalized": false,
|
| 1159 |
+
"rstrip": false,
|
| 1160 |
+
"single_word": false,
|
| 1161 |
+
"special": true
|
| 1162 |
+
},
|
| 1163 |
+
"256141": {
|
| 1164 |
+
"content": "<extra_id_158>",
|
| 1165 |
+
"lstrip": false,
|
| 1166 |
+
"normalized": false,
|
| 1167 |
+
"rstrip": false,
|
| 1168 |
+
"single_word": false,
|
| 1169 |
+
"special": true
|
| 1170 |
+
},
|
| 1171 |
+
"256142": {
|
| 1172 |
+
"content": "<extra_id_157>",
|
| 1173 |
+
"lstrip": false,
|
| 1174 |
+
"normalized": false,
|
| 1175 |
+
"rstrip": false,
|
| 1176 |
+
"single_word": false,
|
| 1177 |
+
"special": true
|
| 1178 |
+
},
|
| 1179 |
+
"256143": {
|
| 1180 |
+
"content": "<extra_id_156>",
|
| 1181 |
+
"lstrip": false,
|
| 1182 |
+
"normalized": false,
|
| 1183 |
+
"rstrip": false,
|
| 1184 |
+
"single_word": false,
|
| 1185 |
+
"special": true
|
| 1186 |
+
},
|
| 1187 |
+
"256144": {
|
| 1188 |
+
"content": "<extra_id_155>",
|
| 1189 |
+
"lstrip": false,
|
| 1190 |
+
"normalized": false,
|
| 1191 |
+
"rstrip": false,
|
| 1192 |
+
"single_word": false,
|
| 1193 |
+
"special": true
|
| 1194 |
+
},
|
| 1195 |
+
"256145": {
|
| 1196 |
+
"content": "<extra_id_154>",
|
| 1197 |
+
"lstrip": false,
|
| 1198 |
+
"normalized": false,
|
| 1199 |
+
"rstrip": false,
|
| 1200 |
+
"single_word": false,
|
| 1201 |
+
"special": true
|
| 1202 |
+
},
|
| 1203 |
+
"256146": {
|
| 1204 |
+
"content": "<extra_id_153>",
|
| 1205 |
+
"lstrip": false,
|
| 1206 |
+
"normalized": false,
|
| 1207 |
+
"rstrip": false,
|
| 1208 |
+
"single_word": false,
|
| 1209 |
+
"special": true
|
| 1210 |
+
},
|
| 1211 |
+
"256147": {
|
| 1212 |
+
"content": "<extra_id_152>",
|
| 1213 |
+
"lstrip": false,
|
| 1214 |
+
"normalized": false,
|
| 1215 |
+
"rstrip": false,
|
| 1216 |
+
"single_word": false,
|
| 1217 |
+
"special": true
|
| 1218 |
+
},
|
| 1219 |
+
"256148": {
|
| 1220 |
+
"content": "<extra_id_151>",
|
| 1221 |
+
"lstrip": false,
|
| 1222 |
+
"normalized": false,
|
| 1223 |
+
"rstrip": false,
|
| 1224 |
+
"single_word": false,
|
| 1225 |
+
"special": true
|
| 1226 |
+
},
|
| 1227 |
+
"256149": {
|
| 1228 |
+
"content": "<extra_id_150>",
|
| 1229 |
+
"lstrip": false,
|
| 1230 |
+
"normalized": false,
|
| 1231 |
+
"rstrip": false,
|
| 1232 |
+
"single_word": false,
|
| 1233 |
+
"special": true
|
| 1234 |
+
},
|
| 1235 |
+
"256150": {
|
| 1236 |
+
"content": "<extra_id_149>",
|
| 1237 |
+
"lstrip": false,
|
| 1238 |
+
"normalized": false,
|
| 1239 |
+
"rstrip": false,
|
| 1240 |
+
"single_word": false,
|
| 1241 |
+
"special": true
|
| 1242 |
+
},
|
| 1243 |
+
"256151": {
|
| 1244 |
+
"content": "<extra_id_148>",
|
| 1245 |
+
"lstrip": false,
|
| 1246 |
+
"normalized": false,
|
| 1247 |
+
"rstrip": false,
|
| 1248 |
+
"single_word": false,
|
| 1249 |
+
"special": true
|
| 1250 |
+
},
|
| 1251 |
+
"256152": {
|
| 1252 |
+
"content": "<extra_id_147>",
|
| 1253 |
+
"lstrip": false,
|
| 1254 |
+
"normalized": false,
|
| 1255 |
+
"rstrip": false,
|
| 1256 |
+
"single_word": false,
|
| 1257 |
+
"special": true
|
| 1258 |
+
},
|
| 1259 |
+
"256153": {
|
| 1260 |
+
"content": "<extra_id_146>",
|
| 1261 |
+
"lstrip": false,
|
| 1262 |
+
"normalized": false,
|
| 1263 |
+
"rstrip": false,
|
| 1264 |
+
"single_word": false,
|
| 1265 |
+
"special": true
|
| 1266 |
+
},
|
| 1267 |
+
"256154": {
|
| 1268 |
+
"content": "<extra_id_145>",
|
| 1269 |
+
"lstrip": false,
|
| 1270 |
+
"normalized": false,
|
| 1271 |
+
"rstrip": false,
|
| 1272 |
+
"single_word": false,
|
| 1273 |
+
"special": true
|
| 1274 |
+
},
|
| 1275 |
+
"256155": {
|
| 1276 |
+
"content": "<extra_id_144>",
|
| 1277 |
+
"lstrip": false,
|
| 1278 |
+
"normalized": false,
|
| 1279 |
+
"rstrip": false,
|
| 1280 |
+
"single_word": false,
|
| 1281 |
+
"special": true
|
| 1282 |
+
},
|
| 1283 |
+
"256156": {
|
| 1284 |
+
"content": "<extra_id_143>",
|
| 1285 |
+
"lstrip": false,
|
| 1286 |
+
"normalized": false,
|
| 1287 |
+
"rstrip": false,
|
| 1288 |
+
"single_word": false,
|
| 1289 |
+
"special": true
|
| 1290 |
+
},
|
| 1291 |
+
"256157": {
|
| 1292 |
+
"content": "<extra_id_142>",
|
| 1293 |
+
"lstrip": false,
|
| 1294 |
+
"normalized": false,
|
| 1295 |
+
"rstrip": false,
|
| 1296 |
+
"single_word": false,
|
| 1297 |
+
"special": true
|
| 1298 |
+
},
|
| 1299 |
+
"256158": {
|
| 1300 |
+
"content": "<extra_id_141>",
|
| 1301 |
+
"lstrip": false,
|
| 1302 |
+
"normalized": false,
|
| 1303 |
+
"rstrip": false,
|
| 1304 |
+
"single_word": false,
|
| 1305 |
+
"special": true
|
| 1306 |
+
},
|
| 1307 |
+
"256159": {
|
| 1308 |
+
"content": "<extra_id_140>",
|
| 1309 |
+
"lstrip": false,
|
| 1310 |
+
"normalized": false,
|
| 1311 |
+
"rstrip": false,
|
| 1312 |
+
"single_word": false,
|
| 1313 |
+
"special": true
|
| 1314 |
+
},
|
| 1315 |
+
"256160": {
|
| 1316 |
+
"content": "<extra_id_139>",
|
| 1317 |
+
"lstrip": false,
|
| 1318 |
+
"normalized": false,
|
| 1319 |
+
"rstrip": false,
|
| 1320 |
+
"single_word": false,
|
| 1321 |
+
"special": true
|
| 1322 |
+
},
|
| 1323 |
+
"256161": {
|
| 1324 |
+
"content": "<extra_id_138>",
|
| 1325 |
+
"lstrip": false,
|
| 1326 |
+
"normalized": false,
|
| 1327 |
+
"rstrip": false,
|
| 1328 |
+
"single_word": false,
|
| 1329 |
+
"special": true
|
| 1330 |
+
},
|
| 1331 |
+
"256162": {
|
| 1332 |
+
"content": "<extra_id_137>",
|
| 1333 |
+
"lstrip": false,
|
| 1334 |
+
"normalized": false,
|
| 1335 |
+
"rstrip": false,
|
| 1336 |
+
"single_word": false,
|
| 1337 |
+
"special": true
|
| 1338 |
+
},
|
| 1339 |
+
"256163": {
|
| 1340 |
+
"content": "<extra_id_136>",
|
| 1341 |
+
"lstrip": false,
|
| 1342 |
+
"normalized": false,
|
| 1343 |
+
"rstrip": false,
|
| 1344 |
+
"single_word": false,
|
| 1345 |
+
"special": true
|
| 1346 |
+
},
|
| 1347 |
+
"256164": {
|
| 1348 |
+
"content": "<extra_id_135>",
|
| 1349 |
+
"lstrip": false,
|
| 1350 |
+
"normalized": false,
|
| 1351 |
+
"rstrip": false,
|
| 1352 |
+
"single_word": false,
|
| 1353 |
+
"special": true
|
| 1354 |
+
},
|
| 1355 |
+
"256165": {
|
| 1356 |
+
"content": "<extra_id_134>",
|
| 1357 |
+
"lstrip": false,
|
| 1358 |
+
"normalized": false,
|
| 1359 |
+
"rstrip": false,
|
| 1360 |
+
"single_word": false,
|
| 1361 |
+
"special": true
|
| 1362 |
+
},
|
| 1363 |
+
"256166": {
|
| 1364 |
+
"content": "<extra_id_133>",
|
| 1365 |
+
"lstrip": false,
|
| 1366 |
+
"normalized": false,
|
| 1367 |
+
"rstrip": false,
|
| 1368 |
+
"single_word": false,
|
| 1369 |
+
"special": true
|
| 1370 |
+
},
|
| 1371 |
+
"256167": {
|
| 1372 |
+
"content": "<extra_id_132>",
|
| 1373 |
+
"lstrip": false,
|
| 1374 |
+
"normalized": false,
|
| 1375 |
+
"rstrip": false,
|
| 1376 |
+
"single_word": false,
|
| 1377 |
+
"special": true
|
| 1378 |
+
},
|
| 1379 |
+
"256168": {
|
| 1380 |
+
"content": "<extra_id_131>",
|
| 1381 |
+
"lstrip": false,
|
| 1382 |
+
"normalized": false,
|
| 1383 |
+
"rstrip": false,
|
| 1384 |
+
"single_word": false,
|
| 1385 |
+
"special": true
|
| 1386 |
+
},
|
| 1387 |
+
"256169": {
|
| 1388 |
+
"content": "<extra_id_130>",
|
| 1389 |
+
"lstrip": false,
|
| 1390 |
+
"normalized": false,
|
| 1391 |
+
"rstrip": false,
|
| 1392 |
+
"single_word": false,
|
| 1393 |
+
"special": true
|
| 1394 |
+
},
|
| 1395 |
+
"256170": {
|
| 1396 |
+
"content": "<extra_id_129>",
|
| 1397 |
+
"lstrip": false,
|
| 1398 |
+
"normalized": false,
|
| 1399 |
+
"rstrip": false,
|
| 1400 |
+
"single_word": false,
|
| 1401 |
+
"special": true
|
| 1402 |
+
},
|
| 1403 |
+
"256171": {
|
| 1404 |
+
"content": "<extra_id_128>",
|
| 1405 |
+
"lstrip": false,
|
| 1406 |
+
"normalized": false,
|
| 1407 |
+
"rstrip": false,
|
| 1408 |
+
"single_word": false,
|
| 1409 |
+
"special": true
|
| 1410 |
+
},
|
| 1411 |
+
"256172": {
|
| 1412 |
+
"content": "<extra_id_127>",
|
| 1413 |
+
"lstrip": false,
|
| 1414 |
+
"normalized": false,
|
| 1415 |
+
"rstrip": false,
|
| 1416 |
+
"single_word": false,
|
| 1417 |
+
"special": true
|
| 1418 |
+
},
|
| 1419 |
+
"256173": {
|
| 1420 |
+
"content": "<extra_id_126>",
|
| 1421 |
+
"lstrip": false,
|
| 1422 |
+
"normalized": false,
|
| 1423 |
+
"rstrip": false,
|
| 1424 |
+
"single_word": false,
|
| 1425 |
+
"special": true
|
| 1426 |
+
},
|
| 1427 |
+
"256174": {
|
| 1428 |
+
"content": "<extra_id_125>",
|
| 1429 |
+
"lstrip": false,
|
| 1430 |
+
"normalized": false,
|
| 1431 |
+
"rstrip": false,
|
| 1432 |
+
"single_word": false,
|
| 1433 |
+
"special": true
|
| 1434 |
+
},
|
| 1435 |
+
"256175": {
|
| 1436 |
+
"content": "<extra_id_124>",
|
| 1437 |
+
"lstrip": false,
|
| 1438 |
+
"normalized": false,
|
| 1439 |
+
"rstrip": false,
|
| 1440 |
+
"single_word": false,
|
| 1441 |
+
"special": true
|
| 1442 |
+
},
|
| 1443 |
+
"256176": {
|
| 1444 |
+
"content": "<extra_id_123>",
|
| 1445 |
+
"lstrip": false,
|
| 1446 |
+
"normalized": false,
|
| 1447 |
+
"rstrip": false,
|
| 1448 |
+
"single_word": false,
|
| 1449 |
+
"special": true
|
| 1450 |
+
},
|
| 1451 |
+
"256177": {
|
| 1452 |
+
"content": "<extra_id_122>",
|
| 1453 |
+
"lstrip": false,
|
| 1454 |
+
"normalized": false,
|
| 1455 |
+
"rstrip": false,
|
| 1456 |
+
"single_word": false,
|
| 1457 |
+
"special": true
|
| 1458 |
+
},
|
| 1459 |
+
"256178": {
|
| 1460 |
+
"content": "<extra_id_121>",
|
| 1461 |
+
"lstrip": false,
|
| 1462 |
+
"normalized": false,
|
| 1463 |
+
"rstrip": false,
|
| 1464 |
+
"single_word": false,
|
| 1465 |
+
"special": true
|
| 1466 |
+
},
|
| 1467 |
+
"256179": {
|
| 1468 |
+
"content": "<extra_id_120>",
|
| 1469 |
+
"lstrip": false,
|
| 1470 |
+
"normalized": false,
|
| 1471 |
+
"rstrip": false,
|
| 1472 |
+
"single_word": false,
|
| 1473 |
+
"special": true
|
| 1474 |
+
},
|
| 1475 |
+
"256180": {
|
| 1476 |
+
"content": "<extra_id_119>",
|
| 1477 |
+
"lstrip": false,
|
| 1478 |
+
"normalized": false,
|
| 1479 |
+
"rstrip": false,
|
| 1480 |
+
"single_word": false,
|
| 1481 |
+
"special": true
|
| 1482 |
+
},
|
| 1483 |
+
"256181": {
|
| 1484 |
+
"content": "<extra_id_118>",
|
| 1485 |
+
"lstrip": false,
|
| 1486 |
+
"normalized": false,
|
| 1487 |
+
"rstrip": false,
|
| 1488 |
+
"single_word": false,
|
| 1489 |
+
"special": true
|
| 1490 |
+
},
|
| 1491 |
+
"256182": {
|
| 1492 |
+
"content": "<extra_id_117>",
|
| 1493 |
+
"lstrip": false,
|
| 1494 |
+
"normalized": false,
|
| 1495 |
+
"rstrip": false,
|
| 1496 |
+
"single_word": false,
|
| 1497 |
+
"special": true
|
| 1498 |
+
},
|
| 1499 |
+
"256183": {
|
| 1500 |
+
"content": "<extra_id_116>",
|
| 1501 |
+
"lstrip": false,
|
| 1502 |
+
"normalized": false,
|
| 1503 |
+
"rstrip": false,
|
| 1504 |
+
"single_word": false,
|
| 1505 |
+
"special": true
|
| 1506 |
+
},
|
| 1507 |
+
"256184": {
|
| 1508 |
+
"content": "<extra_id_115>",
|
| 1509 |
+
"lstrip": false,
|
| 1510 |
+
"normalized": false,
|
| 1511 |
+
"rstrip": false,
|
| 1512 |
+
"single_word": false,
|
| 1513 |
+
"special": true
|
| 1514 |
+
},
|
| 1515 |
+
"256185": {
|
| 1516 |
+
"content": "<extra_id_114>",
|
| 1517 |
+
"lstrip": false,
|
| 1518 |
+
"normalized": false,
|
| 1519 |
+
"rstrip": false,
|
| 1520 |
+
"single_word": false,
|
| 1521 |
+
"special": true
|
| 1522 |
+
},
|
| 1523 |
+
"256186": {
|
| 1524 |
+
"content": "<extra_id_113>",
|
| 1525 |
+
"lstrip": false,
|
| 1526 |
+
"normalized": false,
|
| 1527 |
+
"rstrip": false,
|
| 1528 |
+
"single_word": false,
|
| 1529 |
+
"special": true
|
| 1530 |
+
},
|
| 1531 |
+
"256187": {
|
| 1532 |
+
"content": "<extra_id_112>",
|
| 1533 |
+
"lstrip": false,
|
| 1534 |
+
"normalized": false,
|
| 1535 |
+
"rstrip": false,
|
| 1536 |
+
"single_word": false,
|
| 1537 |
+
"special": true
|
| 1538 |
+
},
|
| 1539 |
+
"256188": {
|
| 1540 |
+
"content": "<extra_id_111>",
|
| 1541 |
+
"lstrip": false,
|
| 1542 |
+
"normalized": false,
|
| 1543 |
+
"rstrip": false,
|
| 1544 |
+
"single_word": false,
|
| 1545 |
+
"special": true
|
| 1546 |
+
},
|
| 1547 |
+
"256189": {
|
| 1548 |
+
"content": "<extra_id_110>",
|
| 1549 |
+
"lstrip": false,
|
| 1550 |
+
"normalized": false,
|
| 1551 |
+
"rstrip": false,
|
| 1552 |
+
"single_word": false,
|
| 1553 |
+
"special": true
|
| 1554 |
+
},
|
| 1555 |
+
"256190": {
|
| 1556 |
+
"content": "<extra_id_109>",
|
| 1557 |
+
"lstrip": false,
|
| 1558 |
+
"normalized": false,
|
| 1559 |
+
"rstrip": false,
|
| 1560 |
+
"single_word": false,
|
| 1561 |
+
"special": true
|
| 1562 |
+
},
|
| 1563 |
+
"256191": {
|
| 1564 |
+
"content": "<extra_id_108>",
|
| 1565 |
+
"lstrip": false,
|
| 1566 |
+
"normalized": false,
|
| 1567 |
+
"rstrip": false,
|
| 1568 |
+
"single_word": false,
|
| 1569 |
+
"special": true
|
| 1570 |
+
},
|
| 1571 |
+
"256192": {
|
| 1572 |
+
"content": "<extra_id_107>",
|
| 1573 |
+
"lstrip": false,
|
| 1574 |
+
"normalized": false,
|
| 1575 |
+
"rstrip": false,
|
| 1576 |
+
"single_word": false,
|
| 1577 |
+
"special": true
|
| 1578 |
+
},
|
| 1579 |
+
"256193": {
|
| 1580 |
+
"content": "<extra_id_106>",
|
| 1581 |
+
"lstrip": false,
|
| 1582 |
+
"normalized": false,
|
| 1583 |
+
"rstrip": false,
|
| 1584 |
+
"single_word": false,
|
| 1585 |
+
"special": true
|
| 1586 |
+
},
|
| 1587 |
+
"256194": {
|
| 1588 |
+
"content": "<extra_id_105>",
|
| 1589 |
+
"lstrip": false,
|
| 1590 |
+
"normalized": false,
|
| 1591 |
+
"rstrip": false,
|
| 1592 |
+
"single_word": false,
|
| 1593 |
+
"special": true
|
| 1594 |
+
},
|
| 1595 |
+
"256195": {
|
| 1596 |
+
"content": "<extra_id_104>",
|
| 1597 |
+
"lstrip": false,
|
| 1598 |
+
"normalized": false,
|
| 1599 |
+
"rstrip": false,
|
| 1600 |
+
"single_word": false,
|
| 1601 |
+
"special": true
|
| 1602 |
+
},
|
| 1603 |
+
"256196": {
|
| 1604 |
+
"content": "<extra_id_103>",
|
| 1605 |
+
"lstrip": false,
|
| 1606 |
+
"normalized": false,
|
| 1607 |
+
"rstrip": false,
|
| 1608 |
+
"single_word": false,
|
| 1609 |
+
"special": true
|
| 1610 |
+
},
|
| 1611 |
+
"256197": {
|
| 1612 |
+
"content": "<extra_id_102>",
|
| 1613 |
+
"lstrip": false,
|
| 1614 |
+
"normalized": false,
|
| 1615 |
+
"rstrip": false,
|
| 1616 |
+
"single_word": false,
|
| 1617 |
+
"special": true
|
| 1618 |
+
},
|
| 1619 |
+
"256198": {
|
| 1620 |
+
"content": "<extra_id_101>",
|
| 1621 |
+
"lstrip": false,
|
| 1622 |
+
"normalized": false,
|
| 1623 |
+
"rstrip": false,
|
| 1624 |
+
"single_word": false,
|
| 1625 |
+
"special": true
|
| 1626 |
+
},
|
| 1627 |
+
"256199": {
|
| 1628 |
+
"content": "<extra_id_100>",
|
| 1629 |
+
"lstrip": false,
|
| 1630 |
+
"normalized": false,
|
| 1631 |
+
"rstrip": false,
|
| 1632 |
+
"single_word": false,
|
| 1633 |
+
"special": true
|
| 1634 |
+
},
|
| 1635 |
+
"256200": {
|
| 1636 |
+
"content": "<extra_id_99>",
|
| 1637 |
+
"lstrip": false,
|
| 1638 |
+
"normalized": false,
|
| 1639 |
+
"rstrip": false,
|
| 1640 |
+
"single_word": false,
|
| 1641 |
+
"special": true
|
| 1642 |
+
},
|
| 1643 |
+
"256201": {
|
| 1644 |
+
"content": "<extra_id_98>",
|
| 1645 |
+
"lstrip": false,
|
| 1646 |
+
"normalized": false,
|
| 1647 |
+
"rstrip": false,
|
| 1648 |
+
"single_word": false,
|
| 1649 |
+
"special": true
|
| 1650 |
+
},
|
| 1651 |
+
"256202": {
|
| 1652 |
+
"content": "<extra_id_97>",
|
| 1653 |
+
"lstrip": false,
|
| 1654 |
+
"normalized": false,
|
| 1655 |
+
"rstrip": false,
|
| 1656 |
+
"single_word": false,
|
| 1657 |
+
"special": true
|
| 1658 |
+
},
|
| 1659 |
+
"256203": {
|
| 1660 |
+
"content": "<extra_id_96>",
|
| 1661 |
+
"lstrip": false,
|
| 1662 |
+
"normalized": false,
|
| 1663 |
+
"rstrip": false,
|
| 1664 |
+
"single_word": false,
|
| 1665 |
+
"special": true
|
| 1666 |
+
},
|
| 1667 |
+
"256204": {
|
| 1668 |
+
"content": "<extra_id_95>",
|
| 1669 |
+
"lstrip": false,
|
| 1670 |
+
"normalized": false,
|
| 1671 |
+
"rstrip": false,
|
| 1672 |
+
"single_word": false,
|
| 1673 |
+
"special": true
|
| 1674 |
+
},
|
| 1675 |
+
"256205": {
|
| 1676 |
+
"content": "<extra_id_94>",
|
| 1677 |
+
"lstrip": false,
|
| 1678 |
+
"normalized": false,
|
| 1679 |
+
"rstrip": false,
|
| 1680 |
+
"single_word": false,
|
| 1681 |
+
"special": true
|
| 1682 |
+
},
|
| 1683 |
+
"256206": {
|
| 1684 |
+
"content": "<extra_id_93>",
|
| 1685 |
+
"lstrip": false,
|
| 1686 |
+
"normalized": false,
|
| 1687 |
+
"rstrip": false,
|
| 1688 |
+
"single_word": false,
|
| 1689 |
+
"special": true
|
| 1690 |
+
},
|
| 1691 |
+
"256207": {
|
| 1692 |
+
"content": "<extra_id_92>",
|
| 1693 |
+
"lstrip": false,
|
| 1694 |
+
"normalized": false,
|
| 1695 |
+
"rstrip": false,
|
| 1696 |
+
"single_word": false,
|
| 1697 |
+
"special": true
|
| 1698 |
+
},
|
| 1699 |
+
"256208": {
|
| 1700 |
+
"content": "<extra_id_91>",
|
| 1701 |
+
"lstrip": false,
|
| 1702 |
+
"normalized": false,
|
| 1703 |
+
"rstrip": false,
|
| 1704 |
+
"single_word": false,
|
| 1705 |
+
"special": true
|
| 1706 |
+
},
|
| 1707 |
+
"256209": {
|
| 1708 |
+
"content": "<extra_id_90>",
|
| 1709 |
+
"lstrip": false,
|
| 1710 |
+
"normalized": false,
|
| 1711 |
+
"rstrip": false,
|
| 1712 |
+
"single_word": false,
|
| 1713 |
+
"special": true
|
| 1714 |
+
},
|
| 1715 |
+
"256210": {
|
| 1716 |
+
"content": "<extra_id_89>",
|
| 1717 |
+
"lstrip": false,
|
| 1718 |
+
"normalized": false,
|
| 1719 |
+
"rstrip": false,
|
| 1720 |
+
"single_word": false,
|
| 1721 |
+
"special": true
|
| 1722 |
+
},
|
| 1723 |
+
"256211": {
|
| 1724 |
+
"content": "<extra_id_88>",
|
| 1725 |
+
"lstrip": false,
|
| 1726 |
+
"normalized": false,
|
| 1727 |
+
"rstrip": false,
|
| 1728 |
+
"single_word": false,
|
| 1729 |
+
"special": true
|
| 1730 |
+
},
|
| 1731 |
+
"256212": {
|
| 1732 |
+
"content": "<extra_id_87>",
|
| 1733 |
+
"lstrip": false,
|
| 1734 |
+
"normalized": false,
|
| 1735 |
+
"rstrip": false,
|
| 1736 |
+
"single_word": false,
|
| 1737 |
+
"special": true
|
| 1738 |
+
},
|
| 1739 |
+
"256213": {
|
| 1740 |
+
"content": "<extra_id_86>",
|
| 1741 |
+
"lstrip": false,
|
| 1742 |
+
"normalized": false,
|
| 1743 |
+
"rstrip": false,
|
| 1744 |
+
"single_word": false,
|
| 1745 |
+
"special": true
|
| 1746 |
+
},
|
| 1747 |
+
"256214": {
|
| 1748 |
+
"content": "<extra_id_85>",
|
| 1749 |
+
"lstrip": false,
|
| 1750 |
+
"normalized": false,
|
| 1751 |
+
"rstrip": false,
|
| 1752 |
+
"single_word": false,
|
| 1753 |
+
"special": true
|
| 1754 |
+
},
|
| 1755 |
+
"256215": {
|
| 1756 |
+
"content": "<extra_id_84>",
|
| 1757 |
+
"lstrip": false,
|
| 1758 |
+
"normalized": false,
|
| 1759 |
+
"rstrip": false,
|
| 1760 |
+
"single_word": false,
|
| 1761 |
+
"special": true
|
| 1762 |
+
},
|
| 1763 |
+
"256216": {
|
| 1764 |
+
"content": "<extra_id_83>",
|
| 1765 |
+
"lstrip": false,
|
| 1766 |
+
"normalized": false,
|
| 1767 |
+
"rstrip": false,
|
| 1768 |
+
"single_word": false,
|
| 1769 |
+
"special": true
|
| 1770 |
+
},
|
| 1771 |
+
"256217": {
|
| 1772 |
+
"content": "<extra_id_82>",
|
| 1773 |
+
"lstrip": false,
|
| 1774 |
+
"normalized": false,
|
| 1775 |
+
"rstrip": false,
|
| 1776 |
+
"single_word": false,
|
| 1777 |
+
"special": true
|
| 1778 |
+
},
|
| 1779 |
+
"256218": {
|
| 1780 |
+
"content": "<extra_id_81>",
|
| 1781 |
+
"lstrip": false,
|
| 1782 |
+
"normalized": false,
|
| 1783 |
+
"rstrip": false,
|
| 1784 |
+
"single_word": false,
|
| 1785 |
+
"special": true
|
| 1786 |
+
},
|
| 1787 |
+
"256219": {
|
| 1788 |
+
"content": "<extra_id_80>",
|
| 1789 |
+
"lstrip": false,
|
| 1790 |
+
"normalized": false,
|
| 1791 |
+
"rstrip": false,
|
| 1792 |
+
"single_word": false,
|
| 1793 |
+
"special": true
|
| 1794 |
+
},
|
| 1795 |
+
"256220": {
|
| 1796 |
+
"content": "<extra_id_79>",
|
| 1797 |
+
"lstrip": false,
|
| 1798 |
+
"normalized": false,
|
| 1799 |
+
"rstrip": false,
|
| 1800 |
+
"single_word": false,
|
| 1801 |
+
"special": true
|
| 1802 |
+
},
|
| 1803 |
+
"256221": {
|
| 1804 |
+
"content": "<extra_id_78>",
|
| 1805 |
+
"lstrip": false,
|
| 1806 |
+
"normalized": false,
|
| 1807 |
+
"rstrip": false,
|
| 1808 |
+
"single_word": false,
|
| 1809 |
+
"special": true
|
| 1810 |
+
},
|
| 1811 |
+
"256222": {
|
| 1812 |
+
"content": "<extra_id_77>",
|
| 1813 |
+
"lstrip": false,
|
| 1814 |
+
"normalized": false,
|
| 1815 |
+
"rstrip": false,
|
| 1816 |
+
"single_word": false,
|
| 1817 |
+
"special": true
|
| 1818 |
+
},
|
| 1819 |
+
"256223": {
|
| 1820 |
+
"content": "<extra_id_76>",
|
| 1821 |
+
"lstrip": false,
|
| 1822 |
+
"normalized": false,
|
| 1823 |
+
"rstrip": false,
|
| 1824 |
+
"single_word": false,
|
| 1825 |
+
"special": true
|
| 1826 |
+
},
|
| 1827 |
+
"256224": {
|
| 1828 |
+
"content": "<extra_id_75>",
|
| 1829 |
+
"lstrip": false,
|
| 1830 |
+
"normalized": false,
|
| 1831 |
+
"rstrip": false,
|
| 1832 |
+
"single_word": false,
|
| 1833 |
+
"special": true
|
| 1834 |
+
},
|
| 1835 |
+
"256225": {
|
| 1836 |
+
"content": "<extra_id_74>",
|
| 1837 |
+
"lstrip": false,
|
| 1838 |
+
"normalized": false,
|
| 1839 |
+
"rstrip": false,
|
| 1840 |
+
"single_word": false,
|
| 1841 |
+
"special": true
|
| 1842 |
+
},
|
| 1843 |
+
"256226": {
|
| 1844 |
+
"content": "<extra_id_73>",
|
| 1845 |
+
"lstrip": false,
|
| 1846 |
+
"normalized": false,
|
| 1847 |
+
"rstrip": false,
|
| 1848 |
+
"single_word": false,
|
| 1849 |
+
"special": true
|
| 1850 |
+
},
|
| 1851 |
+
"256227": {
|
| 1852 |
+
"content": "<extra_id_72>",
|
| 1853 |
+
"lstrip": false,
|
| 1854 |
+
"normalized": false,
|
| 1855 |
+
"rstrip": false,
|
| 1856 |
+
"single_word": false,
|
| 1857 |
+
"special": true
|
| 1858 |
+
},
|
| 1859 |
+
"256228": {
|
| 1860 |
+
"content": "<extra_id_71>",
|
| 1861 |
+
"lstrip": false,
|
| 1862 |
+
"normalized": false,
|
| 1863 |
+
"rstrip": false,
|
| 1864 |
+
"single_word": false,
|
| 1865 |
+
"special": true
|
| 1866 |
+
},
|
| 1867 |
+
"256229": {
|
| 1868 |
+
"content": "<extra_id_70>",
|
| 1869 |
+
"lstrip": false,
|
| 1870 |
+
"normalized": false,
|
| 1871 |
+
"rstrip": false,
|
| 1872 |
+
"single_word": false,
|
| 1873 |
+
"special": true
|
| 1874 |
+
},
|
| 1875 |
+
"256230": {
|
| 1876 |
+
"content": "<extra_id_69>",
|
| 1877 |
+
"lstrip": false,
|
| 1878 |
+
"normalized": false,
|
| 1879 |
+
"rstrip": false,
|
| 1880 |
+
"single_word": false,
|
| 1881 |
+
"special": true
|
| 1882 |
+
},
|
| 1883 |
+
"256231": {
|
| 1884 |
+
"content": "<extra_id_68>",
|
| 1885 |
+
"lstrip": false,
|
| 1886 |
+
"normalized": false,
|
| 1887 |
+
"rstrip": false,
|
| 1888 |
+
"single_word": false,
|
| 1889 |
+
"special": true
|
| 1890 |
+
},
|
| 1891 |
+
"256232": {
|
| 1892 |
+
"content": "<extra_id_67>",
|
| 1893 |
+
"lstrip": false,
|
| 1894 |
+
"normalized": false,
|
| 1895 |
+
"rstrip": false,
|
| 1896 |
+
"single_word": false,
|
| 1897 |
+
"special": true
|
| 1898 |
+
},
|
| 1899 |
+
"256233": {
|
| 1900 |
+
"content": "<extra_id_66>",
|
| 1901 |
+
"lstrip": false,
|
| 1902 |
+
"normalized": false,
|
| 1903 |
+
"rstrip": false,
|
| 1904 |
+
"single_word": false,
|
| 1905 |
+
"special": true
|
| 1906 |
+
},
|
| 1907 |
+
"256234": {
|
| 1908 |
+
"content": "<extra_id_65>",
|
| 1909 |
+
"lstrip": false,
|
| 1910 |
+
"normalized": false,
|
| 1911 |
+
"rstrip": false,
|
| 1912 |
+
"single_word": false,
|
| 1913 |
+
"special": true
|
| 1914 |
+
},
|
| 1915 |
+
"256235": {
|
| 1916 |
+
"content": "<extra_id_64>",
|
| 1917 |
+
"lstrip": false,
|
| 1918 |
+
"normalized": false,
|
| 1919 |
+
"rstrip": false,
|
| 1920 |
+
"single_word": false,
|
| 1921 |
+
"special": true
|
| 1922 |
+
},
|
| 1923 |
+
"256236": {
|
| 1924 |
+
"content": "<extra_id_63>",
|
| 1925 |
+
"lstrip": false,
|
| 1926 |
+
"normalized": false,
|
| 1927 |
+
"rstrip": false,
|
| 1928 |
+
"single_word": false,
|
| 1929 |
+
"special": true
|
| 1930 |
+
},
|
| 1931 |
+
"256237": {
|
| 1932 |
+
"content": "<extra_id_62>",
|
| 1933 |
+
"lstrip": false,
|
| 1934 |
+
"normalized": false,
|
| 1935 |
+
"rstrip": false,
|
| 1936 |
+
"single_word": false,
|
| 1937 |
+
"special": true
|
| 1938 |
+
},
|
| 1939 |
+
"256238": {
|
| 1940 |
+
"content": "<extra_id_61>",
|
| 1941 |
+
"lstrip": false,
|
| 1942 |
+
"normalized": false,
|
| 1943 |
+
"rstrip": false,
|
| 1944 |
+
"single_word": false,
|
| 1945 |
+
"special": true
|
| 1946 |
+
},
|
| 1947 |
+
"256239": {
|
| 1948 |
+
"content": "<extra_id_60>",
|
| 1949 |
+
"lstrip": false,
|
| 1950 |
+
"normalized": false,
|
| 1951 |
+
"rstrip": false,
|
| 1952 |
+
"single_word": false,
|
| 1953 |
+
"special": true
|
| 1954 |
+
},
|
| 1955 |
+
"256240": {
|
| 1956 |
+
"content": "<extra_id_59>",
|
| 1957 |
+
"lstrip": false,
|
| 1958 |
+
"normalized": false,
|
| 1959 |
+
"rstrip": false,
|
| 1960 |
+
"single_word": false,
|
| 1961 |
+
"special": true
|
| 1962 |
+
},
|
| 1963 |
+
"256241": {
|
| 1964 |
+
"content": "<extra_id_58>",
|
| 1965 |
+
"lstrip": false,
|
| 1966 |
+
"normalized": false,
|
| 1967 |
+
"rstrip": false,
|
| 1968 |
+
"single_word": false,
|
| 1969 |
+
"special": true
|
| 1970 |
+
},
|
| 1971 |
+
"256242": {
|
| 1972 |
+
"content": "<extra_id_57>",
|
| 1973 |
+
"lstrip": false,
|
| 1974 |
+
"normalized": false,
|
| 1975 |
+
"rstrip": false,
|
| 1976 |
+
"single_word": false,
|
| 1977 |
+
"special": true
|
| 1978 |
+
},
|
| 1979 |
+
"256243": {
|
| 1980 |
+
"content": "<extra_id_56>",
|
| 1981 |
+
"lstrip": false,
|
| 1982 |
+
"normalized": false,
|
| 1983 |
+
"rstrip": false,
|
| 1984 |
+
"single_word": false,
|
| 1985 |
+
"special": true
|
| 1986 |
+
},
|
| 1987 |
+
"256244": {
|
| 1988 |
+
"content": "<extra_id_55>",
|
| 1989 |
+
"lstrip": false,
|
| 1990 |
+
"normalized": false,
|
| 1991 |
+
"rstrip": false,
|
| 1992 |
+
"single_word": false,
|
| 1993 |
+
"special": true
|
| 1994 |
+
},
|
| 1995 |
+
"256245": {
|
| 1996 |
+
"content": "<extra_id_54>",
|
| 1997 |
+
"lstrip": false,
|
| 1998 |
+
"normalized": false,
|
| 1999 |
+
"rstrip": false,
|
| 2000 |
+
"single_word": false,
|
| 2001 |
+
"special": true
|
| 2002 |
+
},
|
| 2003 |
+
"256246": {
|
| 2004 |
+
"content": "<extra_id_53>",
|
| 2005 |
+
"lstrip": false,
|
| 2006 |
+
"normalized": false,
|
| 2007 |
+
"rstrip": false,
|
| 2008 |
+
"single_word": false,
|
| 2009 |
+
"special": true
|
| 2010 |
+
},
|
| 2011 |
+
"256247": {
|
| 2012 |
+
"content": "<extra_id_52>",
|
| 2013 |
+
"lstrip": false,
|
| 2014 |
+
"normalized": false,
|
| 2015 |
+
"rstrip": false,
|
| 2016 |
+
"single_word": false,
|
| 2017 |
+
"special": true
|
| 2018 |
+
},
|
| 2019 |
+
"256248": {
|
| 2020 |
+
"content": "<extra_id_51>",
|
| 2021 |
+
"lstrip": false,
|
| 2022 |
+
"normalized": false,
|
| 2023 |
+
"rstrip": false,
|
| 2024 |
+
"single_word": false,
|
| 2025 |
+
"special": true
|
| 2026 |
+
},
|
| 2027 |
+
"256249": {
|
| 2028 |
+
"content": "<extra_id_50>",
|
| 2029 |
+
"lstrip": false,
|
| 2030 |
+
"normalized": false,
|
| 2031 |
+
"rstrip": false,
|
| 2032 |
+
"single_word": false,
|
| 2033 |
+
"special": true
|
| 2034 |
+
},
|
| 2035 |
+
"256250": {
|
| 2036 |
+
"content": "<extra_id_49>",
|
| 2037 |
+
"lstrip": false,
|
| 2038 |
+
"normalized": false,
|
| 2039 |
+
"rstrip": false,
|
| 2040 |
+
"single_word": false,
|
| 2041 |
+
"special": true
|
| 2042 |
+
},
|
| 2043 |
+
"256251": {
|
| 2044 |
+
"content": "<extra_id_48>",
|
| 2045 |
+
"lstrip": false,
|
| 2046 |
+
"normalized": false,
|
| 2047 |
+
"rstrip": false,
|
| 2048 |
+
"single_word": false,
|
| 2049 |
+
"special": true
|
| 2050 |
+
},
|
| 2051 |
+
"256252": {
|
| 2052 |
+
"content": "<extra_id_47>",
|
| 2053 |
+
"lstrip": false,
|
| 2054 |
+
"normalized": false,
|
| 2055 |
+
"rstrip": false,
|
| 2056 |
+
"single_word": false,
|
| 2057 |
+
"special": true
|
| 2058 |
+
},
|
| 2059 |
+
"256253": {
|
| 2060 |
+
"content": "<extra_id_46>",
|
| 2061 |
+
"lstrip": false,
|
| 2062 |
+
"normalized": false,
|
| 2063 |
+
"rstrip": false,
|
| 2064 |
+
"single_word": false,
|
| 2065 |
+
"special": true
|
| 2066 |
+
},
|
| 2067 |
+
"256254": {
|
| 2068 |
+
"content": "<extra_id_45>",
|
| 2069 |
+
"lstrip": false,
|
| 2070 |
+
"normalized": false,
|
| 2071 |
+
"rstrip": false,
|
| 2072 |
+
"single_word": false,
|
| 2073 |
+
"special": true
|
| 2074 |
+
},
|
| 2075 |
+
"256255": {
|
| 2076 |
+
"content": "<extra_id_44>",
|
| 2077 |
+
"lstrip": false,
|
| 2078 |
+
"normalized": false,
|
| 2079 |
+
"rstrip": false,
|
| 2080 |
+
"single_word": false,
|
| 2081 |
+
"special": true
|
| 2082 |
+
},
|
| 2083 |
+
"256256": {
|
| 2084 |
+
"content": "<extra_id_43>",
|
| 2085 |
+
"lstrip": false,
|
| 2086 |
+
"normalized": false,
|
| 2087 |
+
"rstrip": false,
|
| 2088 |
+
"single_word": false,
|
| 2089 |
+
"special": true
|
| 2090 |
+
},
|
| 2091 |
+
"256257": {
|
| 2092 |
+
"content": "<extra_id_42>",
|
| 2093 |
+
"lstrip": false,
|
| 2094 |
+
"normalized": false,
|
| 2095 |
+
"rstrip": false,
|
| 2096 |
+
"single_word": false,
|
| 2097 |
+
"special": true
|
| 2098 |
+
},
|
| 2099 |
+
"256258": {
|
| 2100 |
+
"content": "<extra_id_41>",
|
| 2101 |
+
"lstrip": false,
|
| 2102 |
+
"normalized": false,
|
| 2103 |
+
"rstrip": false,
|
| 2104 |
+
"single_word": false,
|
| 2105 |
+
"special": true
|
| 2106 |
+
},
|
| 2107 |
+
"256259": {
|
| 2108 |
+
"content": "<extra_id_40>",
|
| 2109 |
+
"lstrip": false,
|
| 2110 |
+
"normalized": false,
|
| 2111 |
+
"rstrip": false,
|
| 2112 |
+
"single_word": false,
|
| 2113 |
+
"special": true
|
| 2114 |
+
},
|
| 2115 |
+
"256260": {
|
| 2116 |
+
"content": "<extra_id_39>",
|
| 2117 |
+
"lstrip": false,
|
| 2118 |
+
"normalized": false,
|
| 2119 |
+
"rstrip": false,
|
| 2120 |
+
"single_word": false,
|
| 2121 |
+
"special": true
|
| 2122 |
+
},
|
| 2123 |
+
"256261": {
|
| 2124 |
+
"content": "<extra_id_38>",
|
| 2125 |
+
"lstrip": false,
|
| 2126 |
+
"normalized": false,
|
| 2127 |
+
"rstrip": false,
|
| 2128 |
+
"single_word": false,
|
| 2129 |
+
"special": true
|
| 2130 |
+
},
|
| 2131 |
+
"256262": {
|
| 2132 |
+
"content": "<extra_id_37>",
|
| 2133 |
+
"lstrip": false,
|
| 2134 |
+
"normalized": false,
|
| 2135 |
+
"rstrip": false,
|
| 2136 |
+
"single_word": false,
|
| 2137 |
+
"special": true
|
| 2138 |
+
},
|
| 2139 |
+
"256263": {
|
| 2140 |
+
"content": "<extra_id_36>",
|
| 2141 |
+
"lstrip": false,
|
| 2142 |
+
"normalized": false,
|
| 2143 |
+
"rstrip": false,
|
| 2144 |
+
"single_word": false,
|
| 2145 |
+
"special": true
|
| 2146 |
+
},
|
| 2147 |
+
"256264": {
|
| 2148 |
+
"content": "<extra_id_35>",
|
| 2149 |
+
"lstrip": false,
|
| 2150 |
+
"normalized": false,
|
| 2151 |
+
"rstrip": false,
|
| 2152 |
+
"single_word": false,
|
| 2153 |
+
"special": true
|
| 2154 |
+
},
|
| 2155 |
+
"256265": {
|
| 2156 |
+
"content": "<extra_id_34>",
|
| 2157 |
+
"lstrip": false,
|
| 2158 |
+
"normalized": false,
|
| 2159 |
+
"rstrip": false,
|
| 2160 |
+
"single_word": false,
|
| 2161 |
+
"special": true
|
| 2162 |
+
},
|
| 2163 |
+
"256266": {
|
| 2164 |
+
"content": "<extra_id_33>",
|
| 2165 |
+
"lstrip": false,
|
| 2166 |
+
"normalized": false,
|
| 2167 |
+
"rstrip": false,
|
| 2168 |
+
"single_word": false,
|
| 2169 |
+
"special": true
|
| 2170 |
+
},
|
| 2171 |
+
"256267": {
|
| 2172 |
+
"content": "<extra_id_32>",
|
| 2173 |
+
"lstrip": false,
|
| 2174 |
+
"normalized": false,
|
| 2175 |
+
"rstrip": false,
|
| 2176 |
+
"single_word": false,
|
| 2177 |
+
"special": true
|
| 2178 |
+
},
|
| 2179 |
+
"256268": {
|
| 2180 |
+
"content": "<extra_id_31>",
|
| 2181 |
+
"lstrip": false,
|
| 2182 |
+
"normalized": false,
|
| 2183 |
+
"rstrip": false,
|
| 2184 |
+
"single_word": false,
|
| 2185 |
+
"special": true
|
| 2186 |
+
},
|
| 2187 |
+
"256269": {
|
| 2188 |
+
"content": "<extra_id_30>",
|
| 2189 |
+
"lstrip": false,
|
| 2190 |
+
"normalized": false,
|
| 2191 |
+
"rstrip": false,
|
| 2192 |
+
"single_word": false,
|
| 2193 |
+
"special": true
|
| 2194 |
+
},
|
| 2195 |
+
"256270": {
|
| 2196 |
+
"content": "<extra_id_29>",
|
| 2197 |
+
"lstrip": false,
|
| 2198 |
+
"normalized": false,
|
| 2199 |
+
"rstrip": false,
|
| 2200 |
+
"single_word": false,
|
| 2201 |
+
"special": true
|
| 2202 |
+
},
|
| 2203 |
+
"256271": {
|
| 2204 |
+
"content": "<extra_id_28>",
|
| 2205 |
+
"lstrip": false,
|
| 2206 |
+
"normalized": false,
|
| 2207 |
+
"rstrip": false,
|
| 2208 |
+
"single_word": false,
|
| 2209 |
+
"special": true
|
| 2210 |
+
},
|
| 2211 |
+
"256272": {
|
| 2212 |
+
"content": "<extra_id_27>",
|
| 2213 |
+
"lstrip": false,
|
| 2214 |
+
"normalized": false,
|
| 2215 |
+
"rstrip": false,
|
| 2216 |
+
"single_word": false,
|
| 2217 |
+
"special": true
|
| 2218 |
+
},
|
| 2219 |
+
"256273": {
|
| 2220 |
+
"content": "<extra_id_26>",
|
| 2221 |
+
"lstrip": false,
|
| 2222 |
+
"normalized": false,
|
| 2223 |
+
"rstrip": false,
|
| 2224 |
+
"single_word": false,
|
| 2225 |
+
"special": true
|
| 2226 |
+
},
|
| 2227 |
+
"256274": {
|
| 2228 |
+
"content": "<extra_id_25>",
|
| 2229 |
+
"lstrip": false,
|
| 2230 |
+
"normalized": false,
|
| 2231 |
+
"rstrip": false,
|
| 2232 |
+
"single_word": false,
|
| 2233 |
+
"special": true
|
| 2234 |
+
},
|
| 2235 |
+
"256275": {
|
| 2236 |
+
"content": "<extra_id_24>",
|
| 2237 |
+
"lstrip": false,
|
| 2238 |
+
"normalized": false,
|
| 2239 |
+
"rstrip": false,
|
| 2240 |
+
"single_word": false,
|
| 2241 |
+
"special": true
|
| 2242 |
+
},
|
| 2243 |
+
"256276": {
|
| 2244 |
+
"content": "<extra_id_23>",
|
| 2245 |
+
"lstrip": false,
|
| 2246 |
+
"normalized": false,
|
| 2247 |
+
"rstrip": false,
|
| 2248 |
+
"single_word": false,
|
| 2249 |
+
"special": true
|
| 2250 |
+
},
|
| 2251 |
+
"256277": {
|
| 2252 |
+
"content": "<extra_id_22>",
|
| 2253 |
+
"lstrip": false,
|
| 2254 |
+
"normalized": false,
|
| 2255 |
+
"rstrip": false,
|
| 2256 |
+
"single_word": false,
|
| 2257 |
+
"special": true
|
| 2258 |
+
},
|
| 2259 |
+
"256278": {
|
| 2260 |
+
"content": "<extra_id_21>",
|
| 2261 |
+
"lstrip": false,
|
| 2262 |
+
"normalized": false,
|
| 2263 |
+
"rstrip": false,
|
| 2264 |
+
"single_word": false,
|
| 2265 |
+
"special": true
|
| 2266 |
+
},
|
| 2267 |
+
"256279": {
|
| 2268 |
+
"content": "<extra_id_20>",
|
| 2269 |
+
"lstrip": false,
|
| 2270 |
+
"normalized": false,
|
| 2271 |
+
"rstrip": false,
|
| 2272 |
+
"single_word": false,
|
| 2273 |
+
"special": true
|
| 2274 |
+
},
|
| 2275 |
+
"256280": {
|
| 2276 |
+
"content": "<extra_id_19>",
|
| 2277 |
+
"lstrip": false,
|
| 2278 |
+
"normalized": false,
|
| 2279 |
+
"rstrip": false,
|
| 2280 |
+
"single_word": false,
|
| 2281 |
+
"special": true
|
| 2282 |
+
},
|
| 2283 |
+
"256281": {
|
| 2284 |
+
"content": "<extra_id_18>",
|
| 2285 |
+
"lstrip": false,
|
| 2286 |
+
"normalized": false,
|
| 2287 |
+
"rstrip": false,
|
| 2288 |
+
"single_word": false,
|
| 2289 |
+
"special": true
|
| 2290 |
+
},
|
| 2291 |
+
"256282": {
|
| 2292 |
+
"content": "<extra_id_17>",
|
| 2293 |
+
"lstrip": false,
|
| 2294 |
+
"normalized": false,
|
| 2295 |
+
"rstrip": false,
|
| 2296 |
+
"single_word": false,
|
| 2297 |
+
"special": true
|
| 2298 |
+
},
|
| 2299 |
+
"256283": {
|
| 2300 |
+
"content": "<extra_id_16>",
|
| 2301 |
+
"lstrip": false,
|
| 2302 |
+
"normalized": false,
|
| 2303 |
+
"rstrip": false,
|
| 2304 |
+
"single_word": false,
|
| 2305 |
+
"special": true
|
| 2306 |
+
},
|
| 2307 |
+
"256284": {
|
| 2308 |
+
"content": "<extra_id_15>",
|
| 2309 |
+
"lstrip": false,
|
| 2310 |
+
"normalized": false,
|
| 2311 |
+
"rstrip": false,
|
| 2312 |
+
"single_word": false,
|
| 2313 |
+
"special": true
|
| 2314 |
+
},
|
| 2315 |
+
"256285": {
|
| 2316 |
+
"content": "<extra_id_14>",
|
| 2317 |
+
"lstrip": false,
|
| 2318 |
+
"normalized": false,
|
| 2319 |
+
"rstrip": false,
|
| 2320 |
+
"single_word": false,
|
| 2321 |
+
"special": true
|
| 2322 |
+
},
|
| 2323 |
+
"256286": {
|
| 2324 |
+
"content": "<extra_id_13>",
|
| 2325 |
+
"lstrip": false,
|
| 2326 |
+
"normalized": false,
|
| 2327 |
+
"rstrip": false,
|
| 2328 |
+
"single_word": false,
|
| 2329 |
+
"special": true
|
| 2330 |
+
},
|
| 2331 |
+
"256287": {
|
| 2332 |
+
"content": "<extra_id_12>",
|
| 2333 |
+
"lstrip": false,
|
| 2334 |
+
"normalized": false,
|
| 2335 |
+
"rstrip": false,
|
| 2336 |
+
"single_word": false,
|
| 2337 |
+
"special": true
|
| 2338 |
+
},
|
| 2339 |
+
"256288": {
|
| 2340 |
+
"content": "<extra_id_11>",
|
| 2341 |
+
"lstrip": false,
|
| 2342 |
+
"normalized": false,
|
| 2343 |
+
"rstrip": false,
|
| 2344 |
+
"single_word": false,
|
| 2345 |
+
"special": true
|
| 2346 |
+
},
|
| 2347 |
+
"256289": {
|
| 2348 |
+
"content": "<extra_id_10>",
|
| 2349 |
+
"lstrip": false,
|
| 2350 |
+
"normalized": false,
|
| 2351 |
+
"rstrip": false,
|
| 2352 |
+
"single_word": false,
|
| 2353 |
+
"special": true
|
| 2354 |
+
},
|
| 2355 |
+
"256290": {
|
| 2356 |
+
"content": "<extra_id_9>",
|
| 2357 |
+
"lstrip": false,
|
| 2358 |
+
"normalized": false,
|
| 2359 |
+
"rstrip": false,
|
| 2360 |
+
"single_word": false,
|
| 2361 |
+
"special": true
|
| 2362 |
+
},
|
| 2363 |
+
"256291": {
|
| 2364 |
+
"content": "<extra_id_8>",
|
| 2365 |
+
"lstrip": false,
|
| 2366 |
+
"normalized": false,
|
| 2367 |
+
"rstrip": false,
|
| 2368 |
+
"single_word": false,
|
| 2369 |
+
"special": true
|
| 2370 |
+
},
|
| 2371 |
+
"256292": {
|
| 2372 |
+
"content": "<extra_id_7>",
|
| 2373 |
+
"lstrip": false,
|
| 2374 |
+
"normalized": false,
|
| 2375 |
+
"rstrip": false,
|
| 2376 |
+
"single_word": false,
|
| 2377 |
+
"special": true
|
| 2378 |
+
},
|
| 2379 |
+
"256293": {
|
| 2380 |
+
"content": "<extra_id_6>",
|
| 2381 |
+
"lstrip": false,
|
| 2382 |
+
"normalized": false,
|
| 2383 |
+
"rstrip": false,
|
| 2384 |
+
"single_word": false,
|
| 2385 |
+
"special": true
|
| 2386 |
+
},
|
| 2387 |
+
"256294": {
|
| 2388 |
+
"content": "<extra_id_5>",
|
| 2389 |
+
"lstrip": false,
|
| 2390 |
+
"normalized": false,
|
| 2391 |
+
"rstrip": false,
|
| 2392 |
+
"single_word": false,
|
| 2393 |
+
"special": true
|
| 2394 |
+
},
|
| 2395 |
+
"256295": {
|
| 2396 |
+
"content": "<extra_id_4>",
|
| 2397 |
+
"lstrip": false,
|
| 2398 |
+
"normalized": false,
|
| 2399 |
+
"rstrip": false,
|
| 2400 |
+
"single_word": false,
|
| 2401 |
+
"special": true
|
| 2402 |
+
},
|
| 2403 |
+
"256296": {
|
| 2404 |
+
"content": "<extra_id_3>",
|
| 2405 |
+
"lstrip": false,
|
| 2406 |
+
"normalized": false,
|
| 2407 |
+
"rstrip": false,
|
| 2408 |
+
"single_word": false,
|
| 2409 |
+
"special": true
|
| 2410 |
+
},
|
| 2411 |
+
"256297": {
|
| 2412 |
+
"content": "<extra_id_2>",
|
| 2413 |
+
"lstrip": false,
|
| 2414 |
+
"normalized": false,
|
| 2415 |
+
"rstrip": false,
|
| 2416 |
+
"single_word": false,
|
| 2417 |
+
"special": true
|
| 2418 |
+
},
|
| 2419 |
+
"256298": {
|
| 2420 |
+
"content": "<extra_id_1>",
|
| 2421 |
+
"lstrip": false,
|
| 2422 |
+
"normalized": false,
|
| 2423 |
+
"rstrip": false,
|
| 2424 |
+
"single_word": false,
|
| 2425 |
+
"special": true
|
| 2426 |
+
},
|
| 2427 |
+
"256299": {
|
| 2428 |
+
"content": "<extra_id_0>",
|
| 2429 |
+
"lstrip": false,
|
| 2430 |
+
"normalized": false,
|
| 2431 |
+
"rstrip": false,
|
| 2432 |
+
"single_word": false,
|
| 2433 |
+
"special": true
|
| 2434 |
+
}
|
| 2435 |
+
},
|
| 2436 |
+
"additional_special_tokens": [
|
| 2437 |
+
"<extra_id_0>",
|
| 2438 |
+
"<extra_id_1>",
|
| 2439 |
+
"<extra_id_2>",
|
| 2440 |
+
"<extra_id_3>",
|
| 2441 |
+
"<extra_id_4>",
|
| 2442 |
+
"<extra_id_5>",
|
| 2443 |
+
"<extra_id_6>",
|
| 2444 |
+
"<extra_id_7>",
|
| 2445 |
+
"<extra_id_8>",
|
| 2446 |
+
"<extra_id_9>",
|
| 2447 |
+
"<extra_id_10>",
|
| 2448 |
+
"<extra_id_11>",
|
| 2449 |
+
"<extra_id_12>",
|
| 2450 |
+
"<extra_id_13>",
|
| 2451 |
+
"<extra_id_14>",
|
| 2452 |
+
"<extra_id_15>",
|
| 2453 |
+
"<extra_id_16>",
|
| 2454 |
+
"<extra_id_17>",
|
| 2455 |
+
"<extra_id_18>",
|
| 2456 |
+
"<extra_id_19>",
|
| 2457 |
+
"<extra_id_20>",
|
| 2458 |
+
"<extra_id_21>",
|
| 2459 |
+
"<extra_id_22>",
|
| 2460 |
+
"<extra_id_23>",
|
| 2461 |
+
"<extra_id_24>",
|
| 2462 |
+
"<extra_id_25>",
|
| 2463 |
+
"<extra_id_26>",
|
| 2464 |
+
"<extra_id_27>",
|
| 2465 |
+
"<extra_id_28>",
|
| 2466 |
+
"<extra_id_29>",
|
| 2467 |
+
"<extra_id_30>",
|
| 2468 |
+
"<extra_id_31>",
|
| 2469 |
+
"<extra_id_32>",
|
| 2470 |
+
"<extra_id_33>",
|
| 2471 |
+
"<extra_id_34>",
|
| 2472 |
+
"<extra_id_35>",
|
| 2473 |
+
"<extra_id_36>",
|
| 2474 |
+
"<extra_id_37>",
|
| 2475 |
+
"<extra_id_38>",
|
| 2476 |
+
"<extra_id_39>",
|
| 2477 |
+
"<extra_id_40>",
|
| 2478 |
+
"<extra_id_41>",
|
| 2479 |
+
"<extra_id_42>",
|
| 2480 |
+
"<extra_id_43>",
|
| 2481 |
+
"<extra_id_44>",
|
| 2482 |
+
"<extra_id_45>",
|
| 2483 |
+
"<extra_id_46>",
|
| 2484 |
+
"<extra_id_47>",
|
| 2485 |
+
"<extra_id_48>",
|
| 2486 |
+
"<extra_id_49>",
|
| 2487 |
+
"<extra_id_50>",
|
| 2488 |
+
"<extra_id_51>",
|
| 2489 |
+
"<extra_id_52>",
|
| 2490 |
+
"<extra_id_53>",
|
| 2491 |
+
"<extra_id_54>",
|
| 2492 |
+
"<extra_id_55>",
|
| 2493 |
+
"<extra_id_56>",
|
| 2494 |
+
"<extra_id_57>",
|
| 2495 |
+
"<extra_id_58>",
|
| 2496 |
+
"<extra_id_59>",
|
| 2497 |
+
"<extra_id_60>",
|
| 2498 |
+
"<extra_id_61>",
|
| 2499 |
+
"<extra_id_62>",
|
| 2500 |
+
"<extra_id_63>",
|
| 2501 |
+
"<extra_id_64>",
|
| 2502 |
+
"<extra_id_65>",
|
| 2503 |
+
"<extra_id_66>",
|
| 2504 |
+
"<extra_id_67>",
|
| 2505 |
+
"<extra_id_68>",
|
| 2506 |
+
"<extra_id_69>",
|
| 2507 |
+
"<extra_id_70>",
|
| 2508 |
+
"<extra_id_71>",
|
| 2509 |
+
"<extra_id_72>",
|
| 2510 |
+
"<extra_id_73>",
|
| 2511 |
+
"<extra_id_74>",
|
| 2512 |
+
"<extra_id_75>",
|
| 2513 |
+
"<extra_id_76>",
|
| 2514 |
+
"<extra_id_77>",
|
| 2515 |
+
"<extra_id_78>",
|
| 2516 |
+
"<extra_id_79>",
|
| 2517 |
+
"<extra_id_80>",
|
| 2518 |
+
"<extra_id_81>",
|
| 2519 |
+
"<extra_id_82>",
|
| 2520 |
+
"<extra_id_83>",
|
| 2521 |
+
"<extra_id_84>",
|
| 2522 |
+
"<extra_id_85>",
|
| 2523 |
+
"<extra_id_86>",
|
| 2524 |
+
"<extra_id_87>",
|
| 2525 |
+
"<extra_id_88>",
|
| 2526 |
+
"<extra_id_89>",
|
| 2527 |
+
"<extra_id_90>",
|
| 2528 |
+
"<extra_id_91>",
|
| 2529 |
+
"<extra_id_92>",
|
| 2530 |
+
"<extra_id_93>",
|
| 2531 |
+
"<extra_id_94>",
|
| 2532 |
+
"<extra_id_95>",
|
| 2533 |
+
"<extra_id_96>",
|
| 2534 |
+
"<extra_id_97>",
|
| 2535 |
+
"<extra_id_98>",
|
| 2536 |
+
"<extra_id_99>",
|
| 2537 |
+
"<extra_id_100>",
|
| 2538 |
+
"<extra_id_101>",
|
| 2539 |
+
"<extra_id_102>",
|
| 2540 |
+
"<extra_id_103>",
|
| 2541 |
+
"<extra_id_104>",
|
| 2542 |
+
"<extra_id_105>",
|
| 2543 |
+
"<extra_id_106>",
|
| 2544 |
+
"<extra_id_107>",
|
| 2545 |
+
"<extra_id_108>",
|
| 2546 |
+
"<extra_id_109>",
|
| 2547 |
+
"<extra_id_110>",
|
| 2548 |
+
"<extra_id_111>",
|
| 2549 |
+
"<extra_id_112>",
|
| 2550 |
+
"<extra_id_113>",
|
| 2551 |
+
"<extra_id_114>",
|
| 2552 |
+
"<extra_id_115>",
|
| 2553 |
+
"<extra_id_116>",
|
| 2554 |
+
"<extra_id_117>",
|
| 2555 |
+
"<extra_id_118>",
|
| 2556 |
+
"<extra_id_119>",
|
| 2557 |
+
"<extra_id_120>",
|
| 2558 |
+
"<extra_id_121>",
|
| 2559 |
+
"<extra_id_122>",
|
| 2560 |
+
"<extra_id_123>",
|
| 2561 |
+
"<extra_id_124>",
|
| 2562 |
+
"<extra_id_125>",
|
| 2563 |
+
"<extra_id_126>",
|
| 2564 |
+
"<extra_id_127>",
|
| 2565 |
+
"<extra_id_128>",
|
| 2566 |
+
"<extra_id_129>",
|
| 2567 |
+
"<extra_id_130>",
|
| 2568 |
+
"<extra_id_131>",
|
| 2569 |
+
"<extra_id_132>",
|
| 2570 |
+
"<extra_id_133>",
|
| 2571 |
+
"<extra_id_134>",
|
| 2572 |
+
"<extra_id_135>",
|
| 2573 |
+
"<extra_id_136>",
|
| 2574 |
+
"<extra_id_137>",
|
| 2575 |
+
"<extra_id_138>",
|
| 2576 |
+
"<extra_id_139>",
|
| 2577 |
+
"<extra_id_140>",
|
| 2578 |
+
"<extra_id_141>",
|
| 2579 |
+
"<extra_id_142>",
|
| 2580 |
+
"<extra_id_143>",
|
| 2581 |
+
"<extra_id_144>",
|
| 2582 |
+
"<extra_id_145>",
|
| 2583 |
+
"<extra_id_146>",
|
| 2584 |
+
"<extra_id_147>",
|
| 2585 |
+
"<extra_id_148>",
|
| 2586 |
+
"<extra_id_149>",
|
| 2587 |
+
"<extra_id_150>",
|
| 2588 |
+
"<extra_id_151>",
|
| 2589 |
+
"<extra_id_152>",
|
| 2590 |
+
"<extra_id_153>",
|
| 2591 |
+
"<extra_id_154>",
|
| 2592 |
+
"<extra_id_155>",
|
| 2593 |
+
"<extra_id_156>",
|
| 2594 |
+
"<extra_id_157>",
|
| 2595 |
+
"<extra_id_158>",
|
| 2596 |
+
"<extra_id_159>",
|
| 2597 |
+
"<extra_id_160>",
|
| 2598 |
+
"<extra_id_161>",
|
| 2599 |
+
"<extra_id_162>",
|
| 2600 |
+
"<extra_id_163>",
|
| 2601 |
+
"<extra_id_164>",
|
| 2602 |
+
"<extra_id_165>",
|
| 2603 |
+
"<extra_id_166>",
|
| 2604 |
+
"<extra_id_167>",
|
| 2605 |
+
"<extra_id_168>",
|
| 2606 |
+
"<extra_id_169>",
|
| 2607 |
+
"<extra_id_170>",
|
| 2608 |
+
"<extra_id_171>",
|
| 2609 |
+
"<extra_id_172>",
|
| 2610 |
+
"<extra_id_173>",
|
| 2611 |
+
"<extra_id_174>",
|
| 2612 |
+
"<extra_id_175>",
|
| 2613 |
+
"<extra_id_176>",
|
| 2614 |
+
"<extra_id_177>",
|
| 2615 |
+
"<extra_id_178>",
|
| 2616 |
+
"<extra_id_179>",
|
| 2617 |
+
"<extra_id_180>",
|
| 2618 |
+
"<extra_id_181>",
|
| 2619 |
+
"<extra_id_182>",
|
| 2620 |
+
"<extra_id_183>",
|
| 2621 |
+
"<extra_id_184>",
|
| 2622 |
+
"<extra_id_185>",
|
| 2623 |
+
"<extra_id_186>",
|
| 2624 |
+
"<extra_id_187>",
|
| 2625 |
+
"<extra_id_188>",
|
| 2626 |
+
"<extra_id_189>",
|
| 2627 |
+
"<extra_id_190>",
|
| 2628 |
+
"<extra_id_191>",
|
| 2629 |
+
"<extra_id_192>",
|
| 2630 |
+
"<extra_id_193>",
|
| 2631 |
+
"<extra_id_194>",
|
| 2632 |
+
"<extra_id_195>",
|
| 2633 |
+
"<extra_id_196>",
|
| 2634 |
+
"<extra_id_197>",
|
| 2635 |
+
"<extra_id_198>",
|
| 2636 |
+
"<extra_id_199>",
|
| 2637 |
+
"<extra_id_200>",
|
| 2638 |
+
"<extra_id_201>",
|
| 2639 |
+
"<extra_id_202>",
|
| 2640 |
+
"<extra_id_203>",
|
| 2641 |
+
"<extra_id_204>",
|
| 2642 |
+
"<extra_id_205>",
|
| 2643 |
+
"<extra_id_206>",
|
| 2644 |
+
"<extra_id_207>",
|
| 2645 |
+
"<extra_id_208>",
|
| 2646 |
+
"<extra_id_209>",
|
| 2647 |
+
"<extra_id_210>",
|
| 2648 |
+
"<extra_id_211>",
|
| 2649 |
+
"<extra_id_212>",
|
| 2650 |
+
"<extra_id_213>",
|
| 2651 |
+
"<extra_id_214>",
|
| 2652 |
+
"<extra_id_215>",
|
| 2653 |
+
"<extra_id_216>",
|
| 2654 |
+
"<extra_id_217>",
|
| 2655 |
+
"<extra_id_218>",
|
| 2656 |
+
"<extra_id_219>",
|
| 2657 |
+
"<extra_id_220>",
|
| 2658 |
+
"<extra_id_221>",
|
| 2659 |
+
"<extra_id_222>",
|
| 2660 |
+
"<extra_id_223>",
|
| 2661 |
+
"<extra_id_224>",
|
| 2662 |
+
"<extra_id_225>",
|
| 2663 |
+
"<extra_id_226>",
|
| 2664 |
+
"<extra_id_227>",
|
| 2665 |
+
"<extra_id_228>",
|
| 2666 |
+
"<extra_id_229>",
|
| 2667 |
+
"<extra_id_230>",
|
| 2668 |
+
"<extra_id_231>",
|
| 2669 |
+
"<extra_id_232>",
|
| 2670 |
+
"<extra_id_233>",
|
| 2671 |
+
"<extra_id_234>",
|
| 2672 |
+
"<extra_id_235>",
|
| 2673 |
+
"<extra_id_236>",
|
| 2674 |
+
"<extra_id_237>",
|
| 2675 |
+
"<extra_id_238>",
|
| 2676 |
+
"<extra_id_239>",
|
| 2677 |
+
"<extra_id_240>",
|
| 2678 |
+
"<extra_id_241>",
|
| 2679 |
+
"<extra_id_242>",
|
| 2680 |
+
"<extra_id_243>",
|
| 2681 |
+
"<extra_id_244>",
|
| 2682 |
+
"<extra_id_245>",
|
| 2683 |
+
"<extra_id_246>",
|
| 2684 |
+
"<extra_id_247>",
|
| 2685 |
+
"<extra_id_248>",
|
| 2686 |
+
"<extra_id_249>",
|
| 2687 |
+
"<extra_id_250>",
|
| 2688 |
+
"<extra_id_251>",
|
| 2689 |
+
"<extra_id_252>",
|
| 2690 |
+
"<extra_id_253>",
|
| 2691 |
+
"<extra_id_254>",
|
| 2692 |
+
"<extra_id_255>",
|
| 2693 |
+
"<extra_id_256>",
|
| 2694 |
+
"<extra_id_257>",
|
| 2695 |
+
"<extra_id_258>",
|
| 2696 |
+
"<extra_id_259>",
|
| 2697 |
+
"<extra_id_260>",
|
| 2698 |
+
"<extra_id_261>",
|
| 2699 |
+
"<extra_id_262>",
|
| 2700 |
+
"<extra_id_263>",
|
| 2701 |
+
"<extra_id_264>",
|
| 2702 |
+
"<extra_id_265>",
|
| 2703 |
+
"<extra_id_266>",
|
| 2704 |
+
"<extra_id_267>",
|
| 2705 |
+
"<extra_id_268>",
|
| 2706 |
+
"<extra_id_269>",
|
| 2707 |
+
"<extra_id_270>",
|
| 2708 |
+
"<extra_id_271>",
|
| 2709 |
+
"<extra_id_272>",
|
| 2710 |
+
"<extra_id_273>",
|
| 2711 |
+
"<extra_id_274>",
|
| 2712 |
+
"<extra_id_275>",
|
| 2713 |
+
"<extra_id_276>",
|
| 2714 |
+
"<extra_id_277>",
|
| 2715 |
+
"<extra_id_278>",
|
| 2716 |
+
"<extra_id_279>",
|
| 2717 |
+
"<extra_id_280>",
|
| 2718 |
+
"<extra_id_281>",
|
| 2719 |
+
"<extra_id_282>",
|
| 2720 |
+
"<extra_id_283>",
|
| 2721 |
+
"<extra_id_284>",
|
| 2722 |
+
"<extra_id_285>",
|
| 2723 |
+
"<extra_id_286>",
|
| 2724 |
+
"<extra_id_287>",
|
| 2725 |
+
"<extra_id_288>",
|
| 2726 |
+
"<extra_id_289>",
|
| 2727 |
+
"<extra_id_290>",
|
| 2728 |
+
"<extra_id_291>",
|
| 2729 |
+
"<extra_id_292>",
|
| 2730 |
+
"<extra_id_293>",
|
| 2731 |
+
"<extra_id_294>",
|
| 2732 |
+
"<extra_id_295>",
|
| 2733 |
+
"<extra_id_296>",
|
| 2734 |
+
"<extra_id_297>",
|
| 2735 |
+
"<extra_id_298>",
|
| 2736 |
+
"<extra_id_299>"
|
| 2737 |
+
],
|
| 2738 |
+
"bos_token": "<s>",
|
| 2739 |
+
"clean_up_tokenization_spaces": true,
|
| 2740 |
+
"eos_token": "</s>",
|
| 2741 |
+
"extra_ids": 300,
|
| 2742 |
+
"model_max_length": 1000000000000000019884624838656,
|
| 2743 |
+
"pad_token": "<pad>",
|
| 2744 |
+
"sp_model_kwargs": {},
|
| 2745 |
+
"spaces_between_special_tokens": false,
|
| 2746 |
+
"tokenizer_class": "T5Tokenizer",
|
| 2747 |
+
"unk_token": "<unk>"
|
| 2748 |
+
}
|