gatilin commited on
Commit
f69e160
·
verified ·
1 Parent(s): f35273f

Extract pinned native components; verify source bytes, strict loading and native encode/decode interfaces

Browse files
LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Meituan
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
LICENSES.md ADDED
@@ -0,0 +1 @@
 
 
1
+ LongCat-Next source weights and native code: MIT, retained in LICENSE. The compatibility Qwen2.5-VL window-attention implementation retains its original Apache-2.0 notices in native/qwen2_5_vl_vit.py. Other per-file upstream notices remain intact. The language and audio components are excluded.
README.md ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: mit
3
+ library_name: pytorch
4
+ pipeline_tag: image-to-image
5
+ tags:
6
+ - multimodal
7
+ - image-tokenizer
8
+ - residual-vector-quantization
9
+ - longcat-next
10
+ - component-extraction
11
+ base_model: meituan-longcat/LongCat-Next
12
+ ---
13
+ # LongCat-Next: complete standalone visual codec and flow refiner
14
+
15
+ This bundle retains the native dNaViT visual encoder, bridge, RVQ, visual embedding interface, base pixel decoder, full flow-refinement Transformer, refiner VAE and conditioning projection. The language/audio backbone is excluded. It can reconstruct images from pixels or compatible RVQ IDs; it cannot synthesize images from text by itself.
16
+
17
+ ## Load the base codec
18
+
19
+ ```python
20
+ from huggingface_hub import snapshot_download
21
+ import sys, torch
22
+ folder=snapshot_download("gatilin/longcat_next_visual_codec")
23
+ sys.path.insert(0,folder)
24
+ from component import load_model,encode_pixels,decode_codes
25
+ codec=load_model(folder)
26
+ pixels=torch.linspace(0,1,3*112*112).reshape(1,3,112,112)
27
+ with torch.inference_mode():
28
+ ids,grid=encode_pixels(codec,pixels)
29
+ reconstructed=decode_codes(codec,ids,grid)
30
+ ```
31
+
32
+ `patchify_pixels` accepts NCHW RGB in [0,1], applies native CLIP normalization, duplicates the temporal frame, and packs the original Qwen2.5-VL patch order. Spatial dimensions must be divisible by 28; no implicit resize is performed. `decode_codes` returns native CLIP-normalized RGB tensors. Decode values back to RGB with the same mean/std when displaying.
33
+
34
+ RVQ uses **8 residual steps with one shared learned codebook**, 16384 valid codes per step and one padding entry. IDs are `[positions,8]` in native residual order. Do not add the language vocabulary offset before passing IDs to this codec. The original global `visual_offset=150581` is preserved in source_config.json for integration with the full LongCat backbone.
35
+
36
+ ## Full flow refinement
37
+
38
+ ```python
39
+ from component import load_refiner,refine_codes
40
+ refiner=load_refiner(folder,device="cuda")
41
+ with torch.inference_mode():
42
+ refined=refine_codes(codec,refiner,ids,grid,seed=1019,num_inference_steps=28)
43
+ ```
44
+
45
+ The refiner is approximately 7.934 GB of native BF16 Transformer weights, plus the shared VAE and condition projection. Base reconstruction and flow refinement are separate stages; noise and sampling settings affect the latter. Pixel dimensions divisible by both 28 and 16 (e.g. 112,224,448) suit the two-stage image path. CPU compatibility is included; CUDA performance and numerical equivalence are not benchmarked.
46
+
47
+ ## Exact extraction and alias preservation
48
+
49
+ The source main-model visual subtree has 425 serialized tensor entries and 5,314,251,776 payload bytes. Its 21 duplicate codebook/EMA-buffer entries were individually downloaded and verified byte-exact by SHA-256 against their canonical shared values. We store 404 entries, 2,025,358,336 payload bytes, and restore the native shared object/storage aliases in the loader. No quantization or dtype conversion is performed during extraction.
50
+
51
+ `decoder/model.safetensors` contains all base-decoder parameters, the refiner VAE and condition projection. `refiner/model.safetensors` contains every flow Transformer parameter. The additional outer `visual_model` copy in the upstream image-decoder container is unused by the native inference decode path and is excluded; the actual input visual encoder from the main checkpoint is retained. Tensor mapping and per-tensor source hashes for every stage are included.
52
+
53
+ ## Validation
54
+
55
+ Run `python validate.py` and `python validate_refiner.py` after installing requirements. The reports cover strict native loading; shared codebook object/storage; exact patch-layout inversion; 112x112 and rectangular56x84 pixels→8-stage RVQ→base reconstruction; visual embedding interface; refiner VAE and condition projection; full flow-weight loading; conditioned BF16 Transformer forward with reference-image latents; finite Euler update; and conditioning sensitivity. Tests use deterministic synthetic inputs and small spatial grids. They do not establish full-resolution perceptual quality, VQA or text-to-image benchmark performance.
56
+
57
+ CPU uses the preserved Qwen2.5-VL window-attention implementation because newer transformers removed the original get_window_index entry point. FlashAttention calls have a segment-preserving PyTorch fallback; native data layout, attention boundaries and weights remain explicit. The input visual model retains BF16 weights and F32 codebooks; base decoder/VAE are cast to F32 at runtime on CPU.
58
+
59
+ Sources: [official weights](https://huggingface.co/meituan-longcat/LongCat-Next), [official code](https://github.com/meituan-longcat/LongCat-Next), [paper](https://arxiv.org/abs/2603.27538). Source revisions, modifications, separate MIT/Apache notices and exact extraction records accompany the release.
alias_verification.json ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.1.embed": {
3
+ "canonical": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.embed",
4
+ "sha256": "fc65e921fe9fd960a9e623e2417d32b0439d1fa82fa45af99af03319e7a6eda3"
5
+ },
6
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.1.embed_ema": {
7
+ "canonical": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.embed_ema",
8
+ "sha256": "b190da7cc5c132efb5dc66587dbe9fc90df832f8e5e28e8eea0c59c84c1668a1"
9
+ },
10
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.2.embed": {
11
+ "canonical": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.embed",
12
+ "sha256": "fc65e921fe9fd960a9e623e2417d32b0439d1fa82fa45af99af03319e7a6eda3"
13
+ },
14
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.2.embed_ema": {
15
+ "canonical": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.embed_ema",
16
+ "sha256": "b190da7cc5c132efb5dc66587dbe9fc90df832f8e5e28e8eea0c59c84c1668a1"
17
+ },
18
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.3.embed": {
19
+ "canonical": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.embed",
20
+ "sha256": "fc65e921fe9fd960a9e623e2417d32b0439d1fa82fa45af99af03319e7a6eda3"
21
+ },
22
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.3.embed_ema": {
23
+ "canonical": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.embed_ema",
24
+ "sha256": "b190da7cc5c132efb5dc66587dbe9fc90df832f8e5e28e8eea0c59c84c1668a1"
25
+ },
26
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.4.embed": {
27
+ "canonical": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.embed",
28
+ "sha256": "fc65e921fe9fd960a9e623e2417d32b0439d1fa82fa45af99af03319e7a6eda3"
29
+ },
30
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.4.embed_ema": {
31
+ "canonical": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.embed_ema",
32
+ "sha256": "b190da7cc5c132efb5dc66587dbe9fc90df832f8e5e28e8eea0c59c84c1668a1"
33
+ },
34
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.5.embed": {
35
+ "canonical": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.embed",
36
+ "sha256": "fc65e921fe9fd960a9e623e2417d32b0439d1fa82fa45af99af03319e7a6eda3"
37
+ },
38
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.5.embed_ema": {
39
+ "canonical": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.embed_ema",
40
+ "sha256": "b190da7cc5c132efb5dc66587dbe9fc90df832f8e5e28e8eea0c59c84c1668a1"
41
+ },
42
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.6.embed": {
43
+ "canonical": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.embed",
44
+ "sha256": "fc65e921fe9fd960a9e623e2417d32b0439d1fa82fa45af99af03319e7a6eda3"
45
+ },
46
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.6.embed_ema": {
47
+ "canonical": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.embed_ema",
48
+ "sha256": "b190da7cc5c132efb5dc66587dbe9fc90df832f8e5e28e8eea0c59c84c1668a1"
49
+ },
50
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.7.embed": {
51
+ "canonical": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.embed",
52
+ "sha256": "fc65e921fe9fd960a9e623e2417d32b0439d1fa82fa45af99af03319e7a6eda3"
53
+ },
54
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.7.embed_ema": {
55
+ "canonical": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.embed_ema",
56
+ "sha256": "b190da7cc5c132efb5dc66587dbe9fc90df832f8e5e28e8eea0c59c84c1668a1"
57
+ },
58
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.1.cluster_size_ema": {
59
+ "canonical": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.cluster_size_ema",
60
+ "sha256": "4e9a6e4b9b1e203ebe18ed20095cb95c429a537a3cf814c7c5b357b823607850"
61
+ },
62
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.2.cluster_size_ema": {
63
+ "canonical": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.cluster_size_ema",
64
+ "sha256": "4e9a6e4b9b1e203ebe18ed20095cb95c429a537a3cf814c7c5b357b823607850"
65
+ },
66
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.3.cluster_size_ema": {
67
+ "canonical": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.cluster_size_ema",
68
+ "sha256": "4e9a6e4b9b1e203ebe18ed20095cb95c429a537a3cf814c7c5b357b823607850"
69
+ },
70
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.4.cluster_size_ema": {
71
+ "canonical": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.cluster_size_ema",
72
+ "sha256": "4e9a6e4b9b1e203ebe18ed20095cb95c429a537a3cf814c7c5b357b823607850"
73
+ },
74
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.5.cluster_size_ema": {
75
+ "canonical": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.cluster_size_ema",
76
+ "sha256": "4e9a6e4b9b1e203ebe18ed20095cb95c429a537a3cf814c7c5b357b823607850"
77
+ },
78
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.6.cluster_size_ema": {
79
+ "canonical": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.cluster_size_ema",
80
+ "sha256": "4e9a6e4b9b1e203ebe18ed20095cb95c429a537a3cf814c7c5b357b823607850"
81
+ },
82
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.7.cluster_size_ema": {
83
+ "canonical": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.cluster_size_ema",
84
+ "sha256": "4e9a6e4b9b1e203ebe18ed20095cb95c429a537a3cf814c7c5b357b823607850"
85
+ }
86
+ }
aliases.json ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.1.embed": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.embed",
3
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.1.embed_ema": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.embed_ema",
4
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.2.embed": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.embed",
5
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.2.embed_ema": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.embed_ema",
6
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.3.embed": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.embed",
7
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.3.embed_ema": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.embed_ema",
8
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.4.embed": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.embed",
9
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.4.embed_ema": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.embed_ema",
10
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.5.embed": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.embed",
11
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.5.embed_ema": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.embed_ema",
12
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.6.embed": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.embed",
13
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.6.embed_ema": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.embed_ema",
14
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.7.embed": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.embed",
15
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.7.embed_ema": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.embed_ema",
16
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.1.cluster_size_ema": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.cluster_size_ema",
17
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.2.cluster_size_ema": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.cluster_size_ema",
18
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.3.cluster_size_ema": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.cluster_size_ema",
19
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.4.cluster_size_ema": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.cluster_size_ema",
20
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.5.cluster_size_ema": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.cluster_size_ema",
21
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.6.cluster_size_ema": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.cluster_size_ema",
22
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.7.cluster_size_ema": "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.cluster_size_ema"
23
+ }
code_provenance.json ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "source_repo": "meituan-longcat/LongCat-Next",
3
+ "source_revision": "0cf0631862402ff36366e513e4023d22e7e5c84c",
4
+ "compatibility_base": "Qwen2.5-VL window-attention implementation from the previously pinned/tested Lance release; original notices retained.",
5
+ "changes": [
6
+ "CPU selects eager attention instead of forced FlashAttention",
7
+ "Lazy import of optional image-refiner pipeline",
8
+ "PyTorch segmented-attention fallback for CPU",
9
+ "No tensor mutation during extraction; CPU decoder/VAE runtime casts are explicit."
10
+ ]
11
+ }
component.py ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """LongCat-Next dNaViT/RVQ codec and base pixel decoder. Full AR backbone excluded."""
2
+ from pathlib import Path
3
+ import json,torch
4
+ from torch import nn
5
+ from accelerate import init_empty_weights
6
+ from safetensors.torch import load_file
7
+ from native.configuration_longcat_next import LongcatNextConfig
8
+ from native.visual import LongcatNextVisualTokenizer,VisionTransformerDecoder
9
+
10
+ def build(config,decoder=False,decoder_state=None):
11
+ cfg=LongcatNextConfig(**config);m=nn.Module();m.model=nn.Module();m.model.visual_tokenizer=LongcatNextVisualTokenizer(cfg)
12
+ if decoder:
13
+ from diffusers import AutoencoderKL
14
+ m.image_decoder=VisionTransformerDecoder(cfg.visual_config.visual_decoder_config.image_decoder_config)
15
+ m.image_refiner=nn.Module();m.image_refiner.vae=AutoencoderKL.from_config(config["visual_config"]["visual_decoder_config"]["vae_config"])
16
+ w=decoder_state["image_refiner.cond_proj.weight"];m.image_refiner.cond_proj=nn.Linear(w.shape[1],w.shape[0],bias=True)
17
+ return m
18
+
19
+ def load_model(path=None,device="cpu",decoder=True):
20
+ root=Path(path or Path(__file__).parent);c=json.loads((root/"source_config.json").read_text());s=load_file(root/"model.safetensors")
21
+ aliases=json.loads((root/"aliases.json").read_text())
22
+ for alias,canonical in aliases.items():s[alias]=s[canonical]
23
+ ds=load_file(root/"decoder/model.safetensors") if decoder else None
24
+ if ds:s.update(ds)
25
+ with init_empty_weights():m=build(c,decoder,ds)
26
+ m.load_state_dict(s,strict=True,assign=True);m=m.to(device=device).eval()
27
+ # Preserve F32 codebooks and BF16 input weights. Base decoder and optional VAE
28
+ # use F32 on CPU so quantized F32 features do not hit BF16 linear weights.
29
+ if decoder:m.image_decoder.float();m.image_refiner.float()
30
+ return m
31
+
32
+ def patchify_pixels(pixels):
33
+ """NCHW RGB in [0,1]; no resize. Spatial dimensions must be divisible by 28."""
34
+ if pixels.ndim!=4 or pixels.shape[1]!=3 or any(v%28 for v in pixels.shape[-2:]):raise ValueError("Expected NCHW RGB with dimensions divisible by 28")
35
+ if pixels.min()<0 or pixels.max()>1:raise ValueError("Expected pixels in [0,1]")
36
+ mean=pixels.new_tensor([.48145466,.4578275,.40821073])[None,:,None,None];std=pixels.new_tensor([.26862954,.26130258,.27577711])[None,:,None,None]
37
+ x=(pixels-mean)/std;patches=[];grids=[]
38
+ for image in x:
39
+ _,h,w=image.shape;gh,gw=h//14,w//14
40
+ p=image.unsqueeze(0).expand(2,-1,-1,-1).reshape(1,2,3,gh//2,2,14,gw//2,2,14).permute(0,3,6,4,7,2,1,5,8).reshape(gh*gw,-1)
41
+ patches.append(p);grids.append([1,gh,gw])
42
+ return torch.cat(patches),torch.tensor(grids,device=pixels.device,dtype=torch.long)
43
+
44
+ def encode_pixels(model,pixels):
45
+ patches,grid=patchify_pixels(pixels);ids=model.model.visual_tokenizer.encode(patches,grid)
46
+ return ids,grid
47
+
48
+ def code_features(model,ids):
49
+ if ids.shape[-1]!=8 or ids.min()<0 or ids.max()>=16384:raise ValueError("Expected 8 residual-stage IDs in [0,16383]")
50
+ books=model.model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks
51
+ return sum(books[i].embed[ids[...,i].long()] for i in range(8))
52
+
53
+ def decode_codes(model,ids,grid_thw):
54
+ features=code_features(model,ids).reshape(-1,3584).to(next(model.image_decoder.parameters()))
55
+ decoded=model.image_decoder(features,grid_thw)["images"]
56
+ return decoded # native CLIP-normalized RGB; first frame of each temporal patch
57
+
58
+
59
+ def load_refiner(path=None,device="cpu"):
60
+ """Load the complete native flow Transformer, refiner VAE and conditioning projection."""
61
+ from native.image_refiner import ImageRefinerContainer
62
+ root=Path(path or Path(__file__).parent);cfg=LongcatNextConfig(**json.loads((root/"source_config.json").read_text())).visual_config.visual_decoder_config
63
+ with init_empty_weights():m=ImageRefinerContainer(cfg)
64
+ state={k.removeprefix("image_refiner."):v for k,v in load_file(root/"decoder/model.safetensors").items() if k.startswith("image_refiner.")}
65
+ state.update({k.removeprefix("image_refiner."):v for k,v in load_file(root/"refiner/model.safetensors").items()})
66
+ m.load_state_dict(state,strict=True,assign=True)
67
+ return m.to(device=device).eval()
68
+
69
+ def refine_codes(codec,refiner,ids,grid_thw,seed=1019,num_inference_steps=28,output_type="pt"):
70
+ """Native flow refinement of the base reconstruction. Requires both bundles loaded."""
71
+ from native.image_refiner import RefinerPipeline,RefinerImageProcessor,de_transform
72
+ from native.refiner_modules import FlowMatchEulerDiscreteScheduler
73
+ device=next(refiner.parameters()).device;cfg=json.loads((Path(__file__).parent/"source_config.json").read_text())["visual_config"]["visual_decoder_config"]
74
+ scheduler=FlowMatchEulerDiscreteScheduler(**cfg["scheduler_config"])
75
+ pipeline=RefinerPipeline(vae=refiner.vae,transformer=refiner.base_transformer,cond_proj=refiner.cond_proj,scheduler=scheduler)
76
+ raw=decode_codes(codec,ids,grid_thw);images=[]
77
+ for image in raw:
78
+ x=de_transform(image,mean=[.48145466,.4578275,.40821073],std=[.26862954,.26130258,.27577711],rescale_factor=1/255)
79
+ images.append(RefinerImageProcessor.normalize(x).squeeze(0).to(device))
80
+ features=code_features(codec,ids)
81
+ if features.ndim==2:features=features.unsqueeze(0)
82
+ result=pipeline(encoder_hidden_states=features.to(device=device,dtype=next(refiner.cond_proj.parameters()).dtype),grid_thw_list=[tuple(map(int,g)) for g in grid_thw],image=images,generator=torch.Generator(device=device).manual_seed(seed),num_inference_steps=num_inference_steps,output_type=output_type,return_dict=True,enable_processor_bar=False)
83
+ return result.images
decoder/alias_verification.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {}
decoder/aliases.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {}
decoder/extraction.json ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "source_repo": "meituan-longcat/LongCat-Next",
3
+ "source_revision": "0cf0631862402ff36366e513e4023d22e7e5c84c",
4
+ "source_tensor_entries": 804,
5
+ "stored_tensor_entries": 804,
6
+ "tensor_bytes": 1049811242,
7
+ "source_tensor_bytes_equal": true,
8
+ "aliases_verified": 0,
9
+ "sha256": "2a0e46b2a40ed901d5b0f839df183cb8b679cd43975b59211c03999164327f71",
10
+ "transform": "Selection only; names, shapes, dtype and payload bytes unchanged."
11
+ }
decoder/model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:2a0e46b2a40ed901d5b0f839df183cb8b679cd43975b59211c03999164327f71
3
+ size 1049912922
decoder/source_config.json ADDED
@@ -0,0 +1,286 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "architectures": [
3
+ "LongcatNextForCausalLM"
4
+ ],
5
+ "attention_bias": false,
6
+ "attention_dropout": 0.0,
7
+ "auto_map": {
8
+ "AutoConfig": "configuration_longcat_next.LongcatNextConfig",
9
+ "AutoModel": "modeling_longcat_next.LongcatNextModel",
10
+ "AutoModelForCausalLM": "modeling_longcat_next.LongcatNextForCausalLM"
11
+ },
12
+ "vocab_size": 282624,
13
+ "hidden_size": 3072,
14
+ "ffn_hidden_size": 6144,
15
+ "expert_ffn_hidden_size": 1024,
16
+ "num_layers": 14,
17
+ "num_attention_heads": 32,
18
+ "kv_lora_rank": 512,
19
+ "q_lora_rank": 1536,
20
+ "qk_rope_head_dim": 64,
21
+ "v_head_dim": 128,
22
+ "qk_nope_head_dim": 128,
23
+ "mla_scale_q_lora": true,
24
+ "mla_scale_kv_lora": true,
25
+ "routed_scaling_factor": 6.0,
26
+ "n_routed_experts": 256,
27
+ "rms_norm_eps": 1e-5,
28
+ "use_cache": true,
29
+ "bos_token_id": 1,
30
+ "eos_token_id": 2,
31
+ "rope_theta": 10000000,
32
+ "max_position_embeddings": 131072,
33
+ "zero_expert_num": 128,
34
+ "zero_expert_type": "identity",
35
+ "moe_topk": 12,
36
+ "ngram_vocab_size_ratio": 78,
37
+ "emb_neighbor_num": 4,
38
+ "emb_split_num": 4,
39
+ "torch_dtype": "bfloat16",
40
+ "transformers_version": "4.57.6",
41
+ "model_type": "longcat_next",
42
+
43
+ "text_vocab_size": 131072,
44
+ "text_vocab_plus_multimodal_special_token_size": 131125,
45
+ "visual_embedding_layer_intermediate_size": 8192,
46
+ "visual_embedding_layer_hidden_act": "silu",
47
+ "visual_offset": 150581,
48
+ "audio_offset": 131125,
49
+
50
+
51
+ "visual_config": {
52
+ "image_start_token_id": 131106,
53
+ "image_end_token_id": 131107,
54
+ "image_pad_token_id": 131108,
55
+ "image_newline_token_id": 131109,
56
+
57
+ "_attn_implementation": "flash_attention_2",
58
+ "hidden_size": 1280,
59
+
60
+ "image_head_transformer_dims": 2048,
61
+ "image_head_transformer_ffn_scale": 16,
62
+ "image_head_transformer_layers": 4,
63
+
64
+ "vq_config": {
65
+ "codebook_dim": 3584,
66
+ "codebook_size": 16384,
67
+ "codebook_sizes": [
68
+ 16384,
69
+ 16384,
70
+ 16384,
71
+ 16384,
72
+ 16384,
73
+ 16384,
74
+ 16384,
75
+ 16384
76
+ ],
77
+ "decay": 0.99,
78
+ "depth": 8,
79
+
80
+ "commit_loss_ratio": 0.25,
81
+ "entropy_loss_ratio": 0,
82
+
83
+ "in_channels": 3584,
84
+ "quant_conv": true,
85
+ "quantizer_type": "rq",
86
+ "restart_unused_codes": true,
87
+ "shared_codebook": true,
88
+
89
+ "vq_loss_ratio": 0
90
+ },
91
+
92
+ "visual_decoder_config": {
93
+ "codebook_dim": 3584,
94
+
95
+ "image_decoder_config": {
96
+ "attention_dropout": 0.0,
97
+ "codebook_dim": 3584,
98
+ "distill_taps": [
99
+ 3,
100
+ 7,
101
+ 15,
102
+ 23
103
+ ],
104
+ "hidden_act": "gelu",
105
+ "hidden_size": 1024,
106
+ "intermediate_size": 2730,
107
+ "k_bias": false,
108
+ "layer_norm_eps": 1e-06,
109
+ "num_attention_heads": 16,
110
+ "num_hidden_layers": 32,
111
+ "patch_size": 14,
112
+ "q_bias": true,
113
+ "spatial_merge_size": 2,
114
+ "subln": true,
115
+ "swiglu": true,
116
+ "teacher_dims": {
117
+ "15": 1280,
118
+ "23": 1280,
119
+ "3": 1280,
120
+ "7": 1280
121
+ },
122
+ "temporal_patch_size": 2,
123
+ "v_bias": true
124
+ },
125
+
126
+ "transformer_config": {
127
+ "patch_size": 2,
128
+ "in_channels": 16,
129
+ "hidden_size": 2520,
130
+ "num_layers": 32,
131
+ "num_refiner_layers": 2,
132
+ "num_attention_heads": 21,
133
+ "num_kv_heads": 7,
134
+ "multiple_of": 256,
135
+ "norm_eps": 1e-5,
136
+ "axes_dim_rope": [40, 40, 40],
137
+ "axes_lens": [10000, 10000, 10000],
138
+ "text_feat_dim": 2048,
139
+ "timestep_scale": 1000.0
140
+ },
141
+
142
+ "vae_config": {
143
+ "act_fn": "silu",
144
+ "block_out_channels": [128, 256, 512, 512],
145
+ "down_block_types": [
146
+ "DownEncoderBlock2D",
147
+ "DownEncoderBlock2D",
148
+ "DownEncoderBlock2D",
149
+ "DownEncoderBlock2D"
150
+ ],
151
+ "in_channels": 3,
152
+ "latent_channels": 16,
153
+ "layers_per_block": 2,
154
+ "mid_block_add_attention": true,
155
+ "norm_num_groups": 32,
156
+ "out_channels": 3,
157
+ "sample_size": 1024,
158
+ "scaling_factor": 0.3611,
159
+ "shift_factor": 0.1159,
160
+ "up_block_types": [
161
+ "UpDecoderBlock2D",
162
+ "UpDecoderBlock2D",
163
+ "UpDecoderBlock2D",
164
+ "UpDecoderBlock2D"
165
+ ],
166
+ "use_post_quant_conv": false,
167
+ "use_quant_conv": false,
168
+ "force_upcast": true
169
+ },
170
+
171
+ "scheduler_config": {
172
+ "num_train_timesteps": 1000,
173
+ "dynamic_time_shift": true
174
+ },
175
+
176
+ "weight_path": "WEIGHT_PATH_TO_LONGCAT_NEXT/image_decoder/image_decoder.safetensors"
177
+ }
178
+ },
179
+
180
+
181
+ "audio_config": {
182
+ "audio_head_transformer_dims": 3072,
183
+ "audio_head_transformer_ffn_scale": 16,
184
+ "audio_head_transformer_layers": 4,
185
+
186
+ "audio_delim_token_id": 131116,
187
+ "audio_end_token_id": 131104,
188
+ "audio_pad_token_id": 131105,
189
+ "audio_start_token_id": 131103,
190
+ "audiogen_end_token_id": 131124,
191
+ "audiogen_start_token_id": 131123,
192
+ "audiotext_end_token_id": 131121,
193
+ "audiotext_pad_token_id": 131122,
194
+ "audiotext_start_token_id": 131120,
195
+
196
+ "_attn_implementation": "flash_attention_2",
197
+ "d_model": 1280,
198
+ "decoder_attention_heads": 20,
199
+ "decoder_ffn_dim": 5120,
200
+ "decoder_layers": 8,
201
+ "encoder_attention_heads": 20,
202
+ "encoder_ffn_dim": 5120,
203
+ "encoder_layers": 32,
204
+ "num_mel_bins": 128,
205
+
206
+ "avg_pooler": 4,
207
+ "decoder_kernel_size": 3,
208
+ "decoder_stride_size": 2,
209
+ "hop_length": 160,
210
+ "kernel_size": 3,
211
+ "max_audio_seconds": 30,
212
+ "n_fft": 400,
213
+ "num_hidden_layers": 32,
214
+ "sampling_rate": 16000,
215
+ "stride_size": 2,
216
+
217
+ "vq_config": {
218
+ "codebook_sizes": [
219
+ 8192,
220
+ 4096,
221
+ 2048,
222
+ 1024,
223
+ 1024,
224
+ 1024,
225
+ 1024,
226
+ 1024
227
+ ]
228
+ },
229
+
230
+ "vocoder_config": {
231
+ "channels": [
232
+ 256,
233
+ 256,
234
+ 256,
235
+ 256,
236
+ 256
237
+ ],
238
+ "hop_length": 256,
239
+ "num_mel_bins": 80,
240
+ "sampling_rate": 16000
241
+ },
242
+
243
+
244
+ "flow_matching_config": {
245
+ "in_channels": 80,
246
+ "spk_emb_dim": 0,
247
+ "diffusion_steps": 10,
248
+ "cal_mel_mae": true,
249
+
250
+ "prenet_activation_function": "gelu",
251
+ "prenet_attention_heads": 8,
252
+ "prenet_d_model": 512,
253
+ "prenet_ffn_dim": 2048,
254
+ "prenet_in_dim": 1280,
255
+ "prenet_max_source_positions": 5000,
256
+ "prenet_nlayers": 12,
257
+ "prenet_out_dim": 80,
258
+ "prenet_target_mel_length_scale_ratio": 1.0,
259
+
260
+ "channels": [
261
+ 256
262
+ ],
263
+ "dropout": 0.0,
264
+ "attention_head_dim": 64,
265
+ "n_blocks": 4,
266
+ "num_heads": 8,
267
+ "num_mid_blocks": 12,
268
+ "act_fn": "gelu",
269
+
270
+ "cfm_params": {
271
+ "inference_cfg_rate": 0.7,
272
+ "sigma_min": 1e-06,
273
+ "solver": "euler",
274
+ "t_scheduler": "cosine",
275
+ "training_cfg_rate": 0.2
276
+ },
277
+
278
+ "use_hidden_states_before_dconv2": true
279
+ },
280
+
281
+ "cosy24kvocoder_config": {
282
+ "weight_path": "WEIGHT_PATH_TO_LONGCAT_NEXT/cosy24k_vocoder/hift.pt"
283
+ }
284
+
285
+ }
286
+ }
decoder/tensor_mapping.json ADDED
The diff for this file is too large to render. See raw diff
 
decoder/tensor_sha256.json ADDED
The diff for this file is too large to render. See raw diff
 
extraction.json ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "source_repo": "meituan-longcat/LongCat-Next",
3
+ "source_revision": "0cf0631862402ff36366e513e4023d22e7e5c84c",
4
+ "source_tensor_entries": 425,
5
+ "stored_tensor_entries": 404,
6
+ "tensor_bytes": 2025358336,
7
+ "source_tensor_bytes_equal": true,
8
+ "aliases_verified": 21,
9
+ "sha256": "a57489db93bc60c1167c9f565c3a3f85d4ff1505477cd3b9ff95ef390fa3fe35",
10
+ "transform": "Original selected tensor bytes; exact-value shared aliases stored once and restored by loader."
11
+ }
model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a57489db93bc60c1167c9f565c3a3f85d4ff1505477cd3b9ff95ef390fa3fe35
3
+ size 2025414272
native/__init__.py ADDED
File without changes
native/compat.py ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Segment-preserving PyTorch fallback for CPU FlashAttention calls."""
2
+ import torch
3
+ from torch.nn import functional as F
4
+ def flash_attn_varlen_func(q,k,v,cu_seqlens_q,cu_seqlens_k,max_seqlen_q,max_seqlen_k,dropout_p=0.,softmax_scale=None,causal=False,**kwargs):
5
+ output=torch.empty_like(q)
6
+ for i in range(len(cu_seqlens_q)-1):
7
+ a,b=int(cu_seqlens_q[i]),int(cu_seqlens_q[i+1]);c,d=int(cu_seqlens_k[i]),int(cu_seqlens_k[i+1])
8
+ if a==b:continue
9
+ qq=q[a:b].transpose(0,1).unsqueeze(0);kk=k[c:d].transpose(0,1).unsqueeze(0);vv=v[c:d].transpose(0,1).unsqueeze(0)
10
+ y=F.scaled_dot_product_attention(qq,kk,vv,dropout_p=dropout_p,is_causal=causal,scale=softmax_scale,enable_gqa=qq.shape[1]!=kk.shape[1]);output[a:b]=y.squeeze(0).transpose(0,1)
11
+ return output
12
+ def index_first_axis(x,indices):return x[indices]
13
+ def unpad_input(x,attention_mask):
14
+ lengths=attention_mask.sum(-1,dtype=torch.int32);indices=torch.nonzero(attention_mask.flatten(),as_tuple=False).flatten();cu=F.pad(lengths.cumsum(0,dtype=torch.int32),(1,0));return x.flatten(0,1)[indices],indices,cu,int(lengths.max())
15
+ def pad_input(x,indices,batch,seqlen):
16
+ y=x.new_zeros((batch*seqlen,*x.shape[1:]));y[indices]=x;return y.reshape(batch,seqlen,*x.shape[1:])
native/configuration_longcat_next.py ADDED
@@ -0,0 +1,153 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from transformers.configuration_utils import PretrainedConfig
2
+ from transformers.models.qwen2_5_vl.configuration_qwen2_5_vl import Qwen2_5_VLVisionConfig
3
+ from transformers.models.whisper.configuration_whisper import WhisperConfig
4
+
5
+ from .configuration_longcat_ngram import LongcatFlashNgramConfig
6
+
7
+ class LongcatNextConfig(LongcatFlashNgramConfig):
8
+ model_type = "longcat_next"
9
+ def __init__(
10
+ self,
11
+ vocab_size=131072,
12
+ hidden_size=6144,
13
+ num_hidden_layers=56,
14
+ num_layers=28,
15
+ num_attention_heads=64,
16
+ num_key_value_heads=None,
17
+ hidden_act="silu",
18
+ max_position_embeddings=131072,
19
+ initializer_range=0.02,
20
+ rms_norm_eps=1e-5,
21
+ use_cache=True,
22
+ pad_token_id=None,
23
+ bos_token_id=1,
24
+ eos_token_id=2,
25
+ tie_word_embeddings=False,
26
+ rope_theta=10000000.0,
27
+ rope_scaling=None,
28
+ attention_bias=False,
29
+ attention_dropout=0.0,
30
+ ffn_hidden_size=12288,
31
+ q_lora_rank=1536,
32
+ kv_lora_rank=512,
33
+ qk_nope_head_dim=128,
34
+ qk_rope_head_dim=64,
35
+ head_dim=64,
36
+ v_head_dim=128,
37
+ qk_head_dim=None,
38
+ moe_topk=12,
39
+ n_routed_experts=512,
40
+ zero_expert_num=256,
41
+ expert_ffn_hidden_size=2048,
42
+ routed_scaling_factor=6.0,
43
+ emb_neighbor_num=None,
44
+ emb_split_num=None,
45
+ ngram_vocab_size_ratio=None,
46
+ oe_ignored_token_ids=[],
47
+ text_vocab_size=131072, # text vocab size (vocab_size = text_vocab_size + audio_token + visual_token + multimodal_special_token_list)
48
+ text_vocab_plus_multimodal_special_token_size=131125,
49
+ visual_embedding_layer_intermediate_size=8192,
50
+ visual_embedding_layer_hidden_act="silu",
51
+ visual_offset=150581,
52
+ audio_offset=131125,
53
+ visual_config={},
54
+ audio_config={},
55
+ **kwargs,
56
+ ):
57
+ self.text_vocab_size = text_vocab_size
58
+ self.text_vocab_plus_multimodal_special_token_size = text_vocab_plus_multimodal_special_token_size
59
+ self.visual_embedding_layer_intermediate_size = visual_embedding_layer_intermediate_size
60
+ self.visual_embedding_layer_hidden_act = visual_embedding_layer_hidden_act
61
+ self.visual_offset = visual_offset
62
+ self.audio_offset = audio_offset
63
+ self.visual_config = LongcatNextVisualConfig(**visual_config)
64
+ self.audio_config = LongcatNextAudioConfig(**audio_config)
65
+ oe_ignored_token_ids = oe_ignored_token_ids or list(range(self.text_vocab_size, self.text_vocab_plus_multimodal_special_token_size))
66
+
67
+ super().__init__(
68
+ vocab_size=vocab_size,
69
+ hidden_size=hidden_size,
70
+ num_hidden_layers=num_hidden_layers,
71
+ num_layers=num_layers,
72
+ num_attention_heads=num_attention_heads,
73
+ num_key_value_heads=num_key_value_heads,
74
+ hidden_act=hidden_act,
75
+ max_position_embeddings=max_position_embeddings,
76
+ initializer_range=initializer_range,
77
+ rms_norm_eps=rms_norm_eps,
78
+ use_cache=use_cache,
79
+ pad_token_id=pad_token_id,
80
+ bos_token_id=bos_token_id,
81
+ eos_token_id=eos_token_id,
82
+ tie_word_embeddings=tie_word_embeddings,
83
+ rope_theta=rope_theta,
84
+ rope_scaling=rope_scaling,
85
+ attention_bias=attention_bias,
86
+ attention_dropout=attention_dropout,
87
+ ffn_hidden_size=ffn_hidden_size,
88
+ q_lora_rank=q_lora_rank,
89
+ kv_lora_rank=kv_lora_rank,
90
+ qk_nope_head_dim=qk_nope_head_dim,
91
+ qk_rope_head_dim=qk_rope_head_dim,
92
+ head_dim=head_dim,
93
+ v_head_dim=v_head_dim,
94
+ qk_head_dim=qk_head_dim,
95
+ moe_topk=moe_topk,
96
+ n_routed_experts=n_routed_experts,
97
+ zero_expert_num=zero_expert_num,
98
+ expert_ffn_hidden_size=expert_ffn_hidden_size,
99
+ routed_scaling_factor=routed_scaling_factor,
100
+ emb_neighbor_num=emb_neighbor_num,
101
+ emb_split_num=emb_split_num,
102
+ ngram_vocab_size_ratio=ngram_vocab_size_ratio,
103
+ oe_ignored_token_ids=oe_ignored_token_ids,
104
+ **kwargs,
105
+ )
106
+
107
+ class LongcatNextVisualConfig(Qwen2_5_VLVisionConfig):
108
+ model_type = "longcat_next_visual"
109
+ base_config_key = ""
110
+
111
+ def __init__(
112
+ self,
113
+ image_start_token_id=131106,
114
+ image_end_token_id=131107,
115
+ image_pad_token_id=131108,
116
+ image_newline_token_id=131109,
117
+ vq_config={},
118
+ visual_decoder_config={},
119
+ **kwargs,
120
+ ):
121
+ self.image_start_token_id = image_start_token_id
122
+ self.image_end_token_id = image_end_token_id
123
+ self.image_pad_token_id = image_pad_token_id
124
+ self.image_newline_token_id = image_newline_token_id
125
+ self.vq_config = PretrainedConfig(**vq_config)
126
+ self.visual_decoder_config = PretrainedConfig(**visual_decoder_config)
127
+ self.visual_decoder_config.image_decoder_config = PretrainedConfig(**getattr(self.visual_decoder_config, "image_decoder_config", {}))
128
+ self.visual_decoder_config.transformer_config = PretrainedConfig(**getattr(self.visual_decoder_config, "transformer_config", {}))
129
+ self.visual_decoder_config.vae_config = PretrainedConfig(**getattr(self.visual_decoder_config, "vae_config", {}))
130
+ self.visual_decoder_config.scheduler_config = PretrainedConfig(**getattr(self.visual_decoder_config, "scheduler_config", {}))
131
+ super().__init__(**kwargs)
132
+
133
+ class LongcatNextAudioConfig(WhisperConfig):
134
+ model_type = "longcat_next_audio"
135
+ base_config_key = ""
136
+
137
+ def __init__(
138
+ self,
139
+ vq_config={},
140
+ vocoder_config={},
141
+ flow_matching_config={},
142
+ cosy24kvocoder_config={},
143
+ **kwargs
144
+ ):
145
+ self.vq_config = PretrainedConfig(**vq_config)
146
+ self.vocoder_config = PretrainedConfig(**vocoder_config)
147
+ self.flow_matching_config = PretrainedConfig(**flow_matching_config)
148
+ self.flow_matching_config.cfm_params = PretrainedConfig(**getattr(self.flow_matching_config, "cfm_params", {}))
149
+ self.cosy24kvocoder_config = PretrainedConfig(**cosy24kvocoder_config)
150
+ super().__init__(**kwargs)
151
+
152
+
153
+ __all__ = ["LongcatNextConfig", "LongcatNextVisualConfig", "LongcatNextAudioConfig"]
native/configuration_longcat_ngram.py ADDED
@@ -0,0 +1,218 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from transformers.models.longcat_flash import LongcatFlashConfig
2
+
3
+
4
+ class LongcatFlashNgramConfig(LongcatFlashConfig):
5
+ r"""
6
+ This is the configuration class to store the configuration of a [`LongcatFlashNgramModel`]. It is used to instantiate
7
+ a LongCat Flash model with N-gram enhanced embeddings according to the specified arguments, defining the model architecture.
8
+ Configuration objects inherit from [`PretrainedConfig`] and can be used to control the model outputs. Read the
9
+ documentation from [`PretrainedConfig`] for more information.
10
+
11
+
12
+ Args:
13
+ vocab_size (`int`, *optional*, defaults to 131072):
14
+ Vocabulary size of the LongCat Flash model. Defines the number of different tokens that can be represented by the
15
+ `input_ids` passed when calling [`LongcatFlashNgramModel`]
16
+ hidden_size (`int`, *optional*, defaults to 6144):
17
+ Dimension of the hidden representations.
18
+ num_hidden_layers (`int`, *optional*, defaults to 56):
19
+ Number of hidden layers in the Transformer decoder.
20
+ num_layers (`int`, *optional*, defaults to 28):
21
+ Number of layers, each with 2 sublayers.
22
+ num_attention_heads (`int`, *optional*, defaults to 64):
23
+ Number of attention heads for each attention layer in the Transformer decoder.
24
+ num_key_value_heads (`int`, *optional*):
25
+ This is the number of key_value heads that should be used to implement Grouped Query Attention. If
26
+ `num_key_value_heads=num_attention_heads`, the model will use Multi Head Attention (MHA), if
27
+ `num_key_value_heads=1` the model will use Multi Query Attention (MQA) otherwise GQA is used. When
28
+ converting from a multi-head checkpoint to a GQA checkpoint, each group key and value head should be
29
+ constructed by meanpooling all the original heads within that group. For more details checkout [this
30
+ paper](https://arxiv.org/pdf/2305.13245.pdf). If it is not specified, will default to
31
+ `num_attention_heads`.
32
+ hidden_act (`str` or `function`, *optional*, defaults to `"silu"`):
33
+ The non-linear activation function (function or string) in the decoder.
34
+ max_position_embeddings (`int`, *optional*, defaults to 131072):
35
+ The maximum sequence length that this model might ever be used with. Typically set this to something large
36
+ just in case (e.g., 512 or 1024 or 2048).
37
+ initializer_range (`float`, *optional*, defaults to 0.02):
38
+ The standard deviation of the truncated_normal_initializer for initializing all weight matrices.
39
+ rms_norm_eps (`float`, *optional*, defaults to 1e-05):
40
+ The epsilon value used by the RMS normalization layers.
41
+ use_cache (`bool`, *optional*, defaults to `True`):
42
+ Whether or not the model should return the last key/values attentions (not used by all models). Only
43
+ relevant if `config.is_decoder=True`.
44
+ pad_token_id (`int`, *optional*):
45
+ Padding token id.
46
+ bos_token_id (`int`, *optional*, defaults to 1):
47
+ Beginning of stream token id.
48
+ eos_token_id (`int`, *optional*, defaults to 2):
49
+ End of stream token id.
50
+ tie_word_embeddings (`bool`, *optional*, defaults to `False`):
51
+ Whether to tie input and output embeddings.
52
+ rope_theta (`float`, *optional*, defaults to 10000000.0):
53
+ The base period of the RoPE embeddings.
54
+ rope_scaling (`Dict`, *optional*):
55
+ Dictionary containing the scaling configuration for the RoPE embeddings. Currently supports two scaling
56
+ strategies: linear and dynamic. Their scaling factor must be a float greater than 1. The expected format is
57
+ `{"type": strategy name, "factor": scaling factor}`.
58
+ attention_bias (`bool`, *optional*, defaults to `False`):
59
+ Whether to use a bias in the query, key, value and output projection layers during self-attention.
60
+ attention_dropout (`float`, *optional*, defaults to 0.0):
61
+ The dropout ratio for the attention probabilities.
62
+ ffn_hidden_size (`int`, *optional*, defaults to 12288):
63
+ Dimension of the MLP representations.
64
+ q_lora_rank (`int`, *optional*, defaults to 1536):
65
+ The rank of the query LoRA projection in MLA (Multi-head Latent Attention).
66
+ kv_lora_rank (`int`, *optional*, defaults to 512):
67
+ The rank of the key-value LoRA projection in MLA.
68
+ qk_nope_head_dim (`int`, *optional*, defaults to 128):
69
+ The dimension of the non-position encoding part of query/key heads.
70
+ qk_rope_head_dim (`int`, *optional*, defaults to 64):
71
+ The dimension of the RoPE part of query/key heads.
72
+ head_dim (`int`, *optional*, defaults to 64):
73
+ Standard dimension of qk heads, unused except for CI.
74
+ v_head_dim (`int`, *optional*, defaults to 128):
75
+ The dimension of value heads.
76
+ qk_head_dim (`int`, *optional*):
77
+ The total dimension of query/key heads. If not specified, set to `qk_nope_head_dim + qk_rope_head_dim`.
78
+ moe_topk (`int`, *optional*, defaults to 12):
79
+ Number of experts to route to for each token in the MoE layer.
80
+ n_routed_experts (`int`, *optional*, defaults to 512):
81
+ Number of routed experts in the MoE layer.
82
+ zero_expert_num (`int`, *optional*, defaults to 256):
83
+ Number of zero experts (identity function) to add to the expert pool.
84
+ expert_ffn_hidden_size (`int`, *optional*, defaults to 2048):
85
+ Hidden size of individual expert FFN layers.
86
+ routed_scaling_factor (`float`, *optional*, defaults to 6.0):
87
+ Scaling factor applied to the routing weights.
88
+ emb_neighbor_num (`int`, *optional*):
89
+ Maximum N-gram length for N-gram embeddings. This parameter determines the context window size for N-gram computation. Higher values capture
90
+ longer-range lexical patterns but increase memory usage.
91
+ emb_split_num (`int`, *optional*):
92
+ Number of hash functions (or splits) to use for N-gram embeddings. Multiple hash functions help improve the quality of N-gram representations.
93
+ ngram_vocab_size_ratio (`float`, *optional*):
94
+ Ratio multiplier for N-gram vocabulary size relative to the base vocabulary size. The N-gram vocabulary
95
+ size is calculated as `vocab_size * ngram_vocab_size_ratio`.
96
+
97
+ Example:
98
+ ```python
99
+ >>> from transformers import LongcatFlashNgramModel, LongcatFlashNgramConfig
100
+
101
+ >>> # Initializing a LongCat Flash N-gram style configuration
102
+ >>> configuration = LongcatFlashNgramConfig(
103
+ ... emb_neighbor_num=3,
104
+ ... emb_split_num=4,
105
+ ... ngram_vocab_size_ratio=1.5
106
+ ... )
107
+
108
+ >>> # Initializing a model from the configuration
109
+ >>> model = LongcatFlashNgramModel(configuration)
110
+
111
+ >>> # Accessing the model configuration
112
+ >>> configuration = model.config
113
+ ```"""
114
+
115
+ model_type = "longcat_flash_ngram"
116
+ keys_to_ignore_at_inference = ["past_key_values"]
117
+ base_model_tp_plan = {
118
+ "layers.*.self_attn.*.q_b_proj": "colwise",
119
+ "layers.*.self_attn.*.kv_b_proj": "colwise",
120
+ "layers.*.self_attn.*.o_proj": "rowwise",
121
+ "layers.*.mlps.*.gate_proj": "colwise",
122
+ "layers.*.mlps.*.up_proj": "colwise",
123
+ "layers.*.mlps.*.down_proj": "rowwise",
124
+ "layers.*.mlp.experts.*.gate_proj": "colwise",
125
+ "layers.*.mlp.experts.*.up_proj": "colwise",
126
+ "layers.*.mlp.experts.*.down_proj": "rowwise",
127
+ }
128
+
129
+ base_model_pp_plan = {
130
+ "embed_tokens": (["input_ids"], ["inputs_embeds"]),
131
+ "layers": (["hidden_states", "attention_mask"], ["hidden_states"]),
132
+ "norm": (["hidden_states"], ["hidden_states"]),
133
+ }
134
+
135
+ def __init__(
136
+ self,
137
+ vocab_size=131072,
138
+ hidden_size=6144,
139
+ num_hidden_layers=56,
140
+ num_layers=28,
141
+ num_attention_heads=64,
142
+ num_key_value_heads=None,
143
+ hidden_act="silu",
144
+ max_position_embeddings=131072,
145
+ initializer_range=0.02,
146
+ rms_norm_eps=1e-5,
147
+ use_cache=True,
148
+ pad_token_id=None,
149
+ bos_token_id=1,
150
+ eos_token_id=2,
151
+ tie_word_embeddings=False,
152
+ rope_theta=10000000.0,
153
+ rope_scaling=None,
154
+ attention_bias=False,
155
+ attention_dropout=0.0,
156
+ ffn_hidden_size=12288,
157
+ q_lora_rank=1536,
158
+ kv_lora_rank=512,
159
+ qk_nope_head_dim=128,
160
+ qk_rope_head_dim=64,
161
+ head_dim=64,
162
+ v_head_dim=128,
163
+ qk_head_dim=None,
164
+ moe_topk=12,
165
+ n_routed_experts=512,
166
+ zero_expert_num=256,
167
+ expert_ffn_hidden_size=2048,
168
+ routed_scaling_factor=6.0,
169
+ emb_neighbor_num=None,
170
+ emb_split_num=None,
171
+ ngram_vocab_size_ratio=None,
172
+ oe_ignored_token_ids=[],
173
+ **kwargs,
174
+ ):
175
+ # N-gram embedding specific parameters
176
+ self.emb_neighbor_num = emb_neighbor_num
177
+ self.emb_split_num = emb_split_num
178
+ self.ngram_vocab_size_ratio = ngram_vocab_size_ratio
179
+ self.oe_ignored_token_ids = oe_ignored_token_ids
180
+
181
+ super().__init__(
182
+ vocab_size=vocab_size,
183
+ hidden_size=hidden_size,
184
+ num_hidden_layers=num_hidden_layers,
185
+ num_layers=num_layers,
186
+ num_attention_heads=num_attention_heads,
187
+ num_key_value_heads=num_key_value_heads,
188
+ hidden_act=hidden_act,
189
+ max_position_embeddings=max_position_embeddings,
190
+ initializer_range=initializer_range,
191
+ rms_norm_eps=rms_norm_eps,
192
+ use_cache=use_cache,
193
+ pad_token_id=pad_token_id,
194
+ bos_token_id=bos_token_id,
195
+ eos_token_id=eos_token_id,
196
+ tie_word_embeddings=tie_word_embeddings,
197
+ rope_theta=rope_theta,
198
+ rope_scaling=rope_scaling,
199
+ attention_bias=attention_bias,
200
+ attention_dropout=attention_dropout,
201
+ ffn_hidden_size=ffn_hidden_size,
202
+ q_lora_rank=q_lora_rank,
203
+ kv_lora_rank=kv_lora_rank,
204
+ qk_nope_head_dim=qk_nope_head_dim,
205
+ qk_rope_head_dim=qk_rope_head_dim,
206
+ head_dim=head_dim,
207
+ v_head_dim=v_head_dim,
208
+ qk_head_dim=qk_head_dim,
209
+ moe_topk=moe_topk,
210
+ n_routed_experts=n_routed_experts,
211
+ zero_expert_num=zero_expert_num,
212
+ expert_ffn_hidden_size=expert_ffn_hidden_size,
213
+ routed_scaling_factor=routed_scaling_factor,
214
+ **kwargs,
215
+ )
216
+
217
+
218
+ __all__ = ["LongcatFlashNgramConfig"]
native/image_refiner.py ADDED
@@ -0,0 +1,748 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Image refiner: refiner pipeline, refiner container, and utilities.
2
+
3
+ Contains:
4
+ - RefinerImageProcessor: Image pre/post-processing for the diffusion pipeline
5
+ - RefinerPipeline: DiffusionPipeline for image refinement
6
+ - ImageRefinerContainer: nn.Module container for refiner sub-modules
7
+ - IdentityWithArgs: Placeholder module for cond_proj
8
+ - de_transform / tensor2pil: Tensor-to-PIL conversion utilities
9
+ """
10
+
11
+ import inspect
12
+ import math
13
+ import warnings
14
+ from dataclasses import dataclass
15
+ from typing import Any, Dict, List, Optional, Tuple, Union
16
+
17
+ import numpy as np
18
+ from safetensors.torch import load_file
19
+ import torch
20
+ import torch.nn as nn
21
+ import torch.nn.functional as F
22
+ from PIL import Image
23
+
24
+ from diffusers import DiffusionPipeline
25
+ from diffusers.configuration_utils import register_to_config
26
+ from diffusers.image_processor import PipelineImageInput, VaeImageProcessor, is_valid_image_imagelist
27
+ from diffusers.models.autoencoders.autoencoder_kl import AutoencoderKL
28
+ from .refiner_modules import FlowMatchEulerDiscreteScheduler
29
+
30
+ from .refiner_modules import Transformer2DModel, RotaryPosEmbed
31
+
32
+ # ---------------------------------------------------------------------------
33
+ # Helpers
34
+ # ---------------------------------------------------------------------------
35
+
36
+
37
+ def _clean_config_dict(cfg, cls=None) -> dict:
38
+ """Convert a PretrainedConfig to a clean dict for model construction.
39
+
40
+ If ``cls`` is provided, only keeps keys that match the cls.__init__ params
41
+ (allowlist approach). Otherwise falls back to blocklist filtering.
42
+ """
43
+ if hasattr(cfg, "to_dict"):
44
+ d = cfg.to_dict()
45
+ elif isinstance(cfg, dict):
46
+ d = dict(cfg)
47
+ else:
48
+ d = {k: v for k, v in vars(cfg).items()}
49
+
50
+ if cls is not None:
51
+ import inspect
52
+ sig = inspect.signature(cls.__init__)
53
+ valid_keys = set(sig.parameters.keys()) - {"self"}
54
+ if any(p.kind == inspect.Parameter.VAR_KEYWORD for p in sig.parameters.values()):
55
+ # Has **kwargs — can't filter by allowlist, fall through to blocklist
56
+ pass
57
+ else:
58
+ return {k: v for k, v in d.items() if k in valid_keys}
59
+
60
+ # Blocklist: remove HuggingFace PretrainedConfig metadata
61
+ _PRETRAINED_CONFIG_KEYS = {
62
+ "_name_or_path", "transformers_version", "model_type", "_commit_hash",
63
+ "_attn_implementation", "_attn_implementation_autoset", "return_dict",
64
+ "output_hidden_states", "output_attentions", "use_bfloat16",
65
+ "torchscript", "torch_dtype", "is_encoder_decoder", "is_decoder",
66
+ "add_cross_attention", "tie_encoder_decoder", "tie_word_embeddings",
67
+ "cross_attention_hidden_size", "chunk_size_feed_forward", "decoder_start_token_id",
68
+ "architectures", "finetuning_task", "id2label", "label2id", "prefix",
69
+ "problem_type", "tokenizer_class", "task_specific_params", "pruned_heads",
70
+ "bos_token_id", "eos_token_id", "pad_token_id", "sep_token_id",
71
+ "max_length", "min_length", "do_sample", "early_stopping",
72
+ "num_beams", "num_beam_groups", "diversity_penalty", "temperature",
73
+ "top_k", "top_p", "typical_p", "repetition_penalty", "length_penalty",
74
+ "no_repeat_ngram_size", "encoder_no_repeat_ngram_size", "bad_words_ids",
75
+ "num_return_sequences", "output_scores", "return_dict_in_generate",
76
+ "forced_bos_token_id", "forced_eos_token_id", "remove_invalid_values",
77
+ "exponential_decay_length_penalty", "suppress_tokens", "begin_suppress_tokens",
78
+ "tf_legacy_loss", "dtype",
79
+ }
80
+ return {k: v for k, v in d.items() if not k.startswith("_") and k not in _PRETRAINED_CONFIG_KEYS}
81
+
82
+
83
+ # ---------------------------------------------------------------------------
84
+ # Image Refiner Container (nn.Module for state_dict loading)
85
+ # ---------------------------------------------------------------------------
86
+
87
+
88
+ class ImageRefinerContainer(nn.Module):
89
+ """Container for refiner components.
90
+
91
+ Holds base_transformer, vae, cond_proj as nn.Module children so their
92
+ parameters appear in the parent model's state_dict and are loaded
93
+ automatically via from_pretrained.
94
+ """
95
+
96
+ def __init__(self, visual_decoder_config):
97
+ super().__init__()
98
+
99
+ tc = visual_decoder_config.transformer_config
100
+ vc = visual_decoder_config.vae_config
101
+
102
+ self.base_transformer = Transformer2DModel(**_clean_config_dict(tc))
103
+
104
+ self.vae = AutoencoderKL(**_clean_config_dict(vc))
105
+ self.vae.requires_grad_(False)
106
+
107
+ text_feat_dim = getattr(tc, "text_feat_dim", 3584)
108
+ codebook_dim = getattr(visual_decoder_config, "codebook_dim", text_feat_dim)
109
+ if codebook_dim != text_feat_dim:
110
+ self.cond_proj = nn.Linear(codebook_dim, text_feat_dim)
111
+ else:
112
+ self.cond_proj = IdentityWithArgs()
113
+
114
+ @classmethod
115
+ def from_pretrained(cls, config, model_path: str):
116
+ model = cls(config)
117
+ weight_dict = load_file(model_path, device="cpu")
118
+ model.load_state_dict({k.removeprefix("image_refiner."): v for k, v in weight_dict.items() if k.startswith("image_refiner.")}, strict=True)
119
+ model.eval()
120
+ return model
121
+
122
+ @property
123
+ def device(self):
124
+ return next(self.parameters()).device
125
+
126
+ @property
127
+ def dtype(self):
128
+ return next(self.parameters()).dtype
129
+
130
+
131
+ class RefinerImageProcessor(VaeImageProcessor):
132
+ """Image processor for refiner - extends diffusers' VaeImageProcessor."""
133
+
134
+ @register_to_config
135
+ def __init__(
136
+ self,
137
+ do_resize: bool = True,
138
+ vae_scale_factor: int = 16,
139
+ resample: str = "lanczos",
140
+ max_pixels: Optional[int] = None,
141
+ max_side_length: Optional[int] = None,
142
+ do_normalize: bool = True,
143
+ do_binarize: bool = False,
144
+ do_convert_grayscale: bool = False,
145
+ ):
146
+ super().__init__(
147
+ do_resize=do_resize,
148
+ vae_scale_factor=vae_scale_factor,
149
+ resample=resample,
150
+ do_normalize=do_normalize,
151
+ do_binarize=do_binarize,
152
+ do_convert_grayscale=do_convert_grayscale,
153
+ )
154
+ self.max_pixels = max_pixels
155
+ self.max_side_length = max_side_length
156
+
157
+ def get_new_height_width(
158
+ self,
159
+ image: Union["PIL.Image.Image", np.ndarray, torch.Tensor],
160
+ height: Optional[int] = None,
161
+ width: Optional[int] = None,
162
+ max_pixels: Optional[int] = None,
163
+ max_side_length: Optional[int] = None,
164
+ ) -> Tuple[int, int]:
165
+ import PIL.Image
166
+
167
+ if height is None:
168
+ if isinstance(image, PIL.Image.Image):
169
+ height = image.height
170
+ elif isinstance(image, torch.Tensor):
171
+ height = image.shape[2]
172
+ else:
173
+ height = image.shape[1]
174
+
175
+ if width is None:
176
+ if isinstance(image, PIL.Image.Image):
177
+ width = image.width
178
+ elif isinstance(image, torch.Tensor):
179
+ width = image.shape[3]
180
+ else:
181
+ width = image.shape[2]
182
+
183
+ if max_side_length is None:
184
+ max_side_length = self.max_side_length
185
+ if max_pixels is None:
186
+ max_pixels = self.max_pixels
187
+
188
+ ratio = 1.0
189
+ if max_side_length is not None:
190
+ max_side_length_ratio = max_side_length / max(height, width)
191
+ else:
192
+ max_side_length_ratio = 1.0
193
+
194
+ cur_pixels = height * width
195
+ max_pixels_ratio = (max_pixels / cur_pixels) ** 0.5 if max_pixels is not None else 1.0
196
+ ratio = min(max_pixels_ratio, max_side_length_ratio, 1.0)
197
+
198
+ sf = self.config.vae_scale_factor
199
+ new_height = int(height * ratio) // sf * sf
200
+ new_width = int(width * ratio) // sf * sf
201
+ return new_height, new_width
202
+
203
+ def preprocess(
204
+ self,
205
+ image: PipelineImageInput,
206
+ height: Optional[int] = None,
207
+ width: Optional[int] = None,
208
+ max_pixels: Optional[int] = None,
209
+ max_side_length: Optional[int] = None,
210
+ resize_mode: str = "default",
211
+ crops_coords: Optional[Tuple[int, int, int, int]] = None,
212
+ ) -> torch.Tensor:
213
+ import PIL.Image
214
+
215
+ supported_formats = (PIL.Image.Image, np.ndarray, torch.Tensor)
216
+
217
+ if self.config.do_convert_grayscale and isinstance(image, (torch.Tensor, np.ndarray)) and image.ndim == 3:
218
+ if isinstance(image, torch.Tensor):
219
+ image = image.unsqueeze(1)
220
+ else:
221
+ if image.shape[-1] == 1:
222
+ image = np.expand_dims(image, axis=0)
223
+ else:
224
+ image = np.expand_dims(image, axis=-1)
225
+
226
+ if isinstance(image, list) and isinstance(image[0], np.ndarray) and image[0].ndim == 4:
227
+ warnings.warn(
228
+ "Passing `image` as a list of 4d np.ndarray is deprecated. "
229
+ "Please concatenate the list along the batch dimension and pass it as a single 4d np.ndarray",
230
+ FutureWarning,
231
+ )
232
+ image = np.concatenate(image, axis=0)
233
+ if isinstance(image, list) and isinstance(image[0], torch.Tensor) and image[0].ndim == 4:
234
+ warnings.warn(
235
+ "Passing `image` as a list of 4d torch.Tensor is deprecated. "
236
+ "Please concatenate the list along the batch dimension and pass it as a single 4d torch.Tensor",
237
+ FutureWarning,
238
+ )
239
+ image = torch.cat(image, axis=0)
240
+
241
+ if not is_valid_image_imagelist(image):
242
+ raise ValueError(
243
+ f"Input is in incorrect format. Currently, we only support "
244
+ f"{', '.join(str(x) for x in supported_formats)}"
245
+ )
246
+ if not isinstance(image, list):
247
+ image = [image]
248
+
249
+ if isinstance(image[0], PIL.Image.Image):
250
+ if crops_coords is not None:
251
+ image = [i.crop(crops_coords) for i in image]
252
+ if self.config.do_resize:
253
+ height, width = self.get_new_height_width(image[0], height, width, max_pixels, max_side_length)
254
+ image = [self.resize(i, height, width, resize_mode=resize_mode) for i in image]
255
+ if self.config.do_convert_grayscale:
256
+ image = [self.convert_to_grayscale(i) for i in image]
257
+ image = self.pil_to_numpy(image)
258
+ image = self.numpy_to_pt(image)
259
+ elif isinstance(image[0], np.ndarray):
260
+ image = np.concatenate(image, axis=0) if image[0].ndim == 4 else np.stack(image, axis=0)
261
+ image = self.numpy_to_pt(image)
262
+ height, width = self.get_new_height_width(image, height, width, max_pixels, max_side_length)
263
+ if self.config.do_resize:
264
+ image = self.resize(image, height, width)
265
+ elif isinstance(image[0], torch.Tensor):
266
+ image = torch.cat(image, axis=0) if image[0].ndim == 4 else torch.stack(image, axis=0)
267
+ if self.config.do_convert_grayscale and image.ndim == 3:
268
+ image = image.unsqueeze(1)
269
+ channel = image.shape[1]
270
+ if channel == self.config.vae_latent_channels:
271
+ return image
272
+ height, width = self.get_new_height_width(image, height, width, max_pixels, max_side_length)
273
+ if self.config.do_resize:
274
+ image = self.resize(image, height, width)
275
+
276
+ do_normalize = self.config.do_normalize
277
+ if do_normalize and image.min() < 0:
278
+ warnings.warn(
279
+ "Passing `image` as torch tensor with value range in [-1,1] is deprecated. "
280
+ f"The expected value range for image tensor is [0,1] when passing as pytorch tensor or numpy Array. "
281
+ f"You passed `image` with value range [{image.min()},{image.max()}]",
282
+ FutureWarning,
283
+ )
284
+ do_normalize = False
285
+ if do_normalize:
286
+ image = self.normalize(image)
287
+
288
+ if self.config.do_binarize:
289
+ image = self.binarize(image)
290
+
291
+ return image
292
+
293
+
294
+ @dataclass
295
+ class RefinerOutput:
296
+ images: Union[List[Image.Image], torch.Tensor]
297
+
298
+
299
+ class IdentityWithArgs(nn.Module):
300
+ """Placeholder Identity module for cond_proj."""
301
+
302
+ def __init__(self, dtype=torch.float32, device=None):
303
+ super().__init__()
304
+ self.register_buffer("_dummy", torch.zeros((), dtype=dtype, device=device))
305
+
306
+ @property
307
+ def dtype(self):
308
+ return self._dummy.dtype
309
+
310
+ @property
311
+ def device(self):
312
+ return self._dummy.device
313
+
314
+ def forward(self, x, *args, **kwargs):
315
+ return x
316
+
317
+
318
+ def _retrieve_timesteps(
319
+ scheduler: FlowMatchEulerDiscreteScheduler,
320
+ num_inference_steps: Optional[int] = None,
321
+ device: Optional[Union[str, torch.device]] = None,
322
+ timesteps: Optional[List[int]] = None,
323
+ **kwargs,
324
+ ):
325
+ # If scheduler uses dynamic shifting and caller passed num_tokens, compute mu
326
+ # (same as training code refiner pipeline)
327
+ num_tokens = kwargs.pop("num_tokens", None)
328
+ if num_tokens is not None and getattr(scheduler.config, "use_dynamic_shifting", False):
329
+ # Compute mu from num_tokens using scheduler's linear interpolation
330
+ base_shift = getattr(scheduler.config, "base_shift", 0.5)
331
+ max_shift = getattr(scheduler.config, "max_shift", 1.15)
332
+ base_seq_len = getattr(scheduler.config, "base_image_seq_len", 256)
333
+ max_seq_len = getattr(scheduler.config, "max_image_seq_len", 4096)
334
+ m = (max_shift - base_shift) / (max_seq_len - base_seq_len)
335
+ b = base_shift - m * base_seq_len
336
+ mu = num_tokens * m + b
337
+ kwargs["mu"] = mu
338
+
339
+ accepted = set(inspect.signature(scheduler.set_timesteps).parameters.keys())
340
+ filtered_kwargs = {k: v for k, v in kwargs.items() if k in accepted}
341
+
342
+ if timesteps is not None:
343
+ if "timesteps" not in accepted:
344
+ raise ValueError(
345
+ f"The current scheduler class {scheduler.__class__}'s `set_timesteps` does not support custom"
346
+ f" timestep schedules. Please check whether you are using the correct scheduler."
347
+ )
348
+ scheduler.set_timesteps(timesteps=timesteps, device=device, **filtered_kwargs)
349
+ timesteps = scheduler.timesteps
350
+ num_inference_steps = len(timesteps)
351
+ else:
352
+ scheduler.set_timesteps(num_inference_steps, device=device, **filtered_kwargs)
353
+ timesteps = scheduler.timesteps
354
+ return timesteps, num_inference_steps
355
+
356
+
357
+ class RefinerPipeline(DiffusionPipeline):
358
+ """
359
+ Image refiner evaluation pipeline.
360
+
361
+ - cond comes from upstream model: encoder_hidden_states (quants / last_latent)
362
+ - grid_thw_list is used to split cond (consistent with training)
363
+ - image as ref image
364
+ - Supports FlowMatchEulerDiscreteScheduler + velocity model
365
+ """
366
+
367
+ def __init__(
368
+ self,
369
+ vae: AutoencoderKL,
370
+ transformer: Transformer2DModel,
371
+ scheduler: FlowMatchEulerDiscreteScheduler,
372
+ cond_proj: Optional[nn.Module] = None,
373
+ ):
374
+ super().__init__()
375
+
376
+ self.register_modules(
377
+ vae=vae,
378
+ transformer=transformer,
379
+ scheduler=scheduler,
380
+ cond_proj=cond_proj if cond_proj is not None else IdentityWithArgs(),
381
+ )
382
+
383
+ self.vae_scale_factor = (
384
+ 2 ** (len(self.vae.config.block_out_channels) - 1)
385
+ if hasattr(self.vae.config, "block_out_channels")
386
+ else 8
387
+ )
388
+ self.image_processor = RefinerImageProcessor(
389
+ vae_scale_factor=self.vae_scale_factor * 2, do_resize=True
390
+ )
391
+ self.patch_size = int(getattr(self.transformer.config, "patch_size", 16))
392
+
393
+ self._num_timesteps: int = 0
394
+ self._current_timestep: Optional[torch.Tensor] = None
395
+ self._interrupt: bool = False
396
+ self._freqs_cis: Optional[torch.Tensor] = None
397
+ self._text_guidance_scale: float = 1.0
398
+ self._image_guidance_scale: float = 1.0
399
+ self._cfg_range: Tuple[float, float] = (0.0, 1.0)
400
+
401
+ @torch.no_grad()
402
+ def _get_freqs_cis(self, device, dtype):
403
+ if self._freqs_cis is None:
404
+ self._freqs_cis = RotaryPosEmbed.get_freqs_cis(
405
+ self.transformer.config.axes_dim_rope,
406
+ self.transformer.config.axes_lens,
407
+ theta=10000,
408
+ )
409
+ return self._freqs_cis
410
+
411
+ @staticmethod
412
+ def _split_tokens(
413
+ encoder_hidden_states: torch.Tensor,
414
+ grid_thw_list: List[Tuple[int, int, int]],
415
+ ) -> List[torch.Tensor]:
416
+ splits = [int(h) * int(w) // 4 for (_, h, w) in grid_thw_list]
417
+ return list(torch.split(encoder_hidden_states, splits, dim=1))
418
+
419
+ @staticmethod
420
+ def _looks_like_latents(x: Union[torch.Tensor, Image.Image], latent_ch_hint: int = 16) -> bool:
421
+ if not isinstance(x, torch.Tensor):
422
+ return False
423
+ if x.ndim not in (3, 4):
424
+ return False
425
+ c = int(x.shape[-3])
426
+ if c == 3:
427
+ return False
428
+ if c == latent_ch_hint:
429
+ return True
430
+ if c > 3 and c <= 32:
431
+ return True
432
+ return False
433
+
434
+ @torch.no_grad()
435
+ def _preprocess_to_vae_range(self, img: torch.Tensor) -> torch.Tensor:
436
+ if img.dtype not in (torch.float32, torch.float16, torch.bfloat16):
437
+ img = img.float()
438
+ if img.max() > 1.5:
439
+ img = img / 255.0
440
+ if img.min() >= 0.0 and img.max() <= 1.0:
441
+ img = img * 2.0 - 1.0
442
+ return img.clamp(-1, 1)
443
+
444
+ @torch.no_grad()
445
+ def _encode_image_to_latents(
446
+ self,
447
+ img_any: Union[Image.Image, torch.Tensor],
448
+ device,
449
+ dtype,
450
+ ) -> Tuple[torch.Tensor, int, int]:
451
+ latent_ch_hint = int(getattr(getattr(self.vae, "config", None), "latent_channels", 16))
452
+
453
+ if self._looks_like_latents(img_any, latent_ch_hint=latent_ch_hint):
454
+ z = img_any
455
+ if z.ndim == 3:
456
+ z = z.unsqueeze(0)
457
+ z = z.to(device=device, dtype=dtype)
458
+ H_lat, W_lat = z.shape[-2], z.shape[-1]
459
+ return z, H_lat, W_lat
460
+
461
+ if isinstance(img_any, Image.Image):
462
+ img = torch.from_numpy(
463
+ np.array(img_any).astype("float32") / 255.0
464
+ ).permute(2, 0, 1).unsqueeze(0)
465
+ elif isinstance(img_any, torch.Tensor):
466
+ img = img_any
467
+ if img.ndim == 3:
468
+ img = img.unsqueeze(0)
469
+ else:
470
+ raise TypeError("Unsupported image type. Use PIL.Image or torch.Tensor or latent Tensor.")
471
+
472
+ img = self._preprocess_to_vae_range(img)
473
+
474
+ H, W = img.shape[-2:]
475
+ base = self.patch_size * self.vae_scale_factor
476
+ target_H = max(base, math.ceil(H / base) * base)
477
+ target_W = max(base, math.ceil(W / base) * base)
478
+ if (H != target_H) or (W != target_W):
479
+ img = F.interpolate(img, size=(target_H, target_W), mode="bilinear", align_corners=False)
480
+
481
+ img = img.to(device=device, dtype=self.vae.dtype)
482
+
483
+ posterior = self.vae.encode(img).latent_dist
484
+ z0 = posterior.sample()
485
+ if getattr(self.vae.config, "shift_factor", None) is not None:
486
+ z0 = z0 - self.vae.config.shift_factor
487
+ if getattr(self.vae.config, "scaling_factor", None) is not None:
488
+ z0 = z0 * self.vae.config.scaling_factor
489
+
490
+ z0 = z0.to(device=device, dtype=dtype)
491
+ H_lat, W_lat = z0.shape[-2], z0.shape[-1]
492
+ return z0, H_lat, W_lat
493
+
494
+ @staticmethod
495
+ def _expand_to_list(x, n):
496
+ if x is None:
497
+ return [None] * n
498
+ if isinstance(x, (Image.Image, torch.Tensor)):
499
+ return [x] * n
500
+ assert isinstance(x, list), "`image` must be PIL / Tensor or list of them."
501
+ assert len(x) == n, "`len(image)` must equal number of image chunks"
502
+ return x
503
+
504
+ @torch.no_grad()
505
+ def _denoise_once(
506
+ self,
507
+ cond_tokens: torch.Tensor,
508
+ ref_img: Optional[Union[Image.Image, torch.Tensor]],
509
+ num_inference_steps: int = 28,
510
+ timesteps: Optional[List[int]] = None,
511
+ generator: Optional[Union[torch.Generator, List[torch.Generator]]] = None,
512
+ output_type: str = "pil",
513
+ text_guidance_scale: float = 1.0,
514
+ image_guidance_scale: float = 1.0,
515
+ cfg_range: Tuple[float, float] = (0.0, 1.0),
516
+ enable_processor_bar: bool = True,
517
+ ):
518
+ device = cond_tokens.device
519
+ weight_dtype = self.transformer.dtype
520
+
521
+ self._text_guidance_scale = text_guidance_scale
522
+ self._image_guidance_scale = image_guidance_scale
523
+ self._cfg_range = cfg_range
524
+
525
+ cond_tokens = cond_tokens.to(device=device, dtype=weight_dtype)
526
+ text_feats = self.cond_proj(cond_tokens)
527
+ B, L, _ = text_feats.shape
528
+ text_mask = torch.ones(B, L, device=device, dtype=torch.bool)
529
+
530
+ ref_image_hidden_states = None
531
+ H_lat: int
532
+ W_lat: int
533
+
534
+ if ref_img is not None:
535
+ if isinstance(ref_img, torch.Tensor) and ref_img.ndim == 4 and ref_img.shape[0] == B:
536
+ z_ref, H_lat, W_lat = self._encode_image_to_latents(ref_img, device=device, dtype=weight_dtype)
537
+ ref_image_hidden_states = [[z_ref[b]] for b in range(B)]
538
+ else:
539
+ z_ref, H_lat, W_lat = self._encode_image_to_latents(ref_img, device=device, dtype=weight_dtype)
540
+ z_single = z_ref[0]
541
+ ref_image_hidden_states = [[z_single] for _ in range(B)]
542
+ else:
543
+ H_lat = W_lat = 128 // self.vae_scale_factor
544
+
545
+ C_lat = getattr(self.transformer.config, "in_channels", None)
546
+ if C_lat is None:
547
+ if ref_image_hidden_states is not None:
548
+ C_lat = ref_image_hidden_states[0][0].shape[0]
549
+ else:
550
+ raise ValueError("transformer.config.in_channels is None and no ref_img was provided.")
551
+ latents_shape = (B, C_lat, H_lat, W_lat)
552
+
553
+ if isinstance(generator, list):
554
+ if len(generator) != B:
555
+ raise ValueError(
556
+ f"len(generator)={len(generator)} must equal B={B} when passing list of generators."
557
+ )
558
+ latents = torch.stack(
559
+ [
560
+ torch.randn(
561
+ (1, C_lat, H_lat, W_lat),
562
+ generator=generator[i],
563
+ device=device,
564
+ dtype=weight_dtype,
565
+ ).squeeze(0)
566
+ for i in range(B)
567
+ ],
568
+ dim=0,
569
+ )
570
+ else:
571
+ latents = torch.randn(latents_shape, generator=generator, device=device, dtype=weight_dtype)
572
+
573
+ num_tokens = H_lat * W_lat
574
+ timesteps_sched, num_inference_steps = _retrieve_timesteps(
575
+ self.scheduler,
576
+ num_inference_steps=num_inference_steps,
577
+ device=device,
578
+ timesteps=timesteps,
579
+ num_tokens=num_tokens,
580
+ )
581
+ num_warmup_steps = max(len(timesteps_sched) - num_inference_steps * self.scheduler.order, 0)
582
+ self._num_timesteps = len(timesteps_sched)
583
+
584
+ freqs_cis = self._get_freqs_cis(device=device, dtype=weight_dtype)
585
+
586
+ progress_bar = self.progress_bar(total=num_inference_steps) if enable_processor_bar else None
587
+ for i, t in enumerate(timesteps_sched):
588
+ if self._interrupt:
589
+ continue
590
+ self._current_timestep = t
591
+
592
+ timestep = t.expand(latents.shape[0]).to(latents.dtype)
593
+
594
+ step_frac = i / max(len(timesteps_sched) - 1, 1)
595
+ use_cfg = (cfg_range[0] <= step_frac <= cfg_range[1]) and (
596
+ text_guidance_scale > 1.0 or image_guidance_scale > 1.0
597
+ )
598
+
599
+ if not use_cfg:
600
+ optional_kwargs: Dict[str, Any] = {}
601
+ if "ref_image_hidden_states" in inspect.signature(self.transformer.forward).parameters:
602
+ optional_kwargs["ref_image_hidden_states"] = ref_image_hidden_states
603
+ model_pred = self.transformer(
604
+ latents, timestep, text_feats, freqs_cis, text_mask, **optional_kwargs
605
+ )
606
+ else:
607
+ text_uncond = torch.zeros_like(text_feats)
608
+
609
+ opt_kwargs_text: Dict[str, Any] = {}
610
+ if "ref_image_hidden_states" in inspect.signature(self.transformer.forward).parameters:
611
+ opt_kwargs_text["ref_image_hidden_states"] = ref_image_hidden_states
612
+
613
+ model_pred_text = self.transformer(
614
+ latents, timestep, text_feats, freqs_cis, text_mask, **opt_kwargs_text
615
+ )
616
+
617
+ opt_kwargs_ref: Dict[str, Any] = {}
618
+ if "ref_image_hidden_states" in inspect.signature(self.transformer.forward).parameters:
619
+ opt_kwargs_ref["ref_image_hidden_states"] = ref_image_hidden_states
620
+
621
+ model_pred_ref = self.transformer(
622
+ latents, timestep, text_uncond, freqs_cis, text_mask, **opt_kwargs_ref
623
+ )
624
+
625
+ opt_kwargs_uncond: Dict[str, Any] = {}
626
+ if "ref_image_hidden_states" in inspect.signature(self.transformer.forward).parameters:
627
+ opt_kwargs_uncond["ref_image_hidden_states"] = None
628
+
629
+ model_pred_uncond = self.transformer(
630
+ latents, timestep, text_uncond, freqs_cis, text_mask, **opt_kwargs_uncond
631
+ )
632
+
633
+ if text_guidance_scale > 1.0 and image_guidance_scale > 1.0:
634
+ model_pred = (
635
+ model_pred_uncond
636
+ + image_guidance_scale * (model_pred_ref - model_pred_uncond)
637
+ + text_guidance_scale * (model_pred_text - model_pred_ref)
638
+ )
639
+ elif text_guidance_scale > 1.0:
640
+ model_pred = model_pred_uncond + text_guidance_scale * (model_pred_text - model_pred_uncond)
641
+ elif image_guidance_scale > 1.0:
642
+ model_pred = model_pred_uncond + image_guidance_scale * (model_pred_ref - model_pred_uncond)
643
+ else:
644
+ model_pred = model_pred_text
645
+
646
+ latents = self.scheduler.step(model_pred, t, latents, return_dict=False)[0]
647
+ latents = latents.to(dtype=weight_dtype)
648
+
649
+ if progress_bar is not None:
650
+ if i == len(timesteps_sched) - 1 or (
651
+ (i + 1) > num_warmup_steps and (i + 1) % self.scheduler.order == 0
652
+ ):
653
+ progress_bar.update()
654
+
655
+ if progress_bar is not None:
656
+ progress_bar.close()
657
+
658
+ self._current_timestep = None
659
+
660
+ latents = latents.to(dtype=self.vae.dtype)
661
+ if getattr(self.vae.config, "scaling_factor", None) is not None:
662
+ latents = latents / self.vae.config.scaling_factor
663
+ if getattr(self.vae.config, "shift_factor", None) is not None:
664
+ latents = latents + self.vae.config.shift_factor
665
+ image = self.vae.decode(latents, return_dict=False)[0]
666
+
667
+ images = self.image_processor.postprocess(image, output_type=output_type)
668
+ return images
669
+
670
+ @torch.no_grad()
671
+ def __call__(
672
+ self,
673
+ *,
674
+ encoder_hidden_states: torch.Tensor,
675
+ grid_thw_list: List[Tuple[int, int, int]],
676
+ image: Union[Image.Image, torch.Tensor, List[Union[Image.Image, torch.Tensor]], None] = None,
677
+ num_inference_steps: int = 28,
678
+ timesteps: Optional[List[int]] = None,
679
+ generator: Optional[Union[torch.Generator, List[torch.Generator]]] = None,
680
+ output_type: str = "pil",
681
+ return_dict: bool = True,
682
+ text_guidance_scale: float = 1.5,
683
+ image_guidance_scale: float = 1.5,
684
+ cfg_range: Tuple[float, float] = (0.0, 1.0),
685
+ enable_processor_bar: bool = True,
686
+ **kwargs,
687
+ ) -> Union[RefinerOutput, List[Image.Image], torch.Tensor]:
688
+ self._interrupt = False
689
+
690
+ token_chunks = self._split_tokens(encoder_hidden_states, grid_thw_list)
691
+ ref_list = self._expand_to_list(image, len(token_chunks))
692
+
693
+ results_pil: List[Image.Image] = []
694
+ results_pt: Optional[torch.Tensor] = None
695
+
696
+ for tok, _, img_any in zip(token_chunks, grid_thw_list, ref_list):
697
+ imgs = self._denoise_once(
698
+ cond_tokens=tok,
699
+ ref_img=img_any,
700
+ num_inference_steps=num_inference_steps,
701
+ timesteps=timesteps,
702
+ generator=generator,
703
+ output_type=output_type,
704
+ text_guidance_scale=text_guidance_scale,
705
+ image_guidance_scale=image_guidance_scale,
706
+ cfg_range=cfg_range,
707
+ enable_processor_bar=enable_processor_bar,
708
+ )
709
+
710
+ if output_type == "pil":
711
+ results_pil += imgs
712
+ else:
713
+ results_pt = imgs if results_pt is None else torch.cat([results_pt, imgs], dim=0)
714
+
715
+ if not return_dict:
716
+ return results_pil if output_type == "pil" else results_pt
717
+ return RefinerOutput(images=results_pil if output_type == "pil" else results_pt)
718
+
719
+
720
+ def de_transform(
721
+ tensor: torch.Tensor,
722
+ mean=(0.48145466, 0.4578275, 0.40821073),
723
+ std=(0.26862954, 0.26130258, 0.27577711),
724
+ rescale_factor: float = 1 / 255,
725
+ ) -> torch.Tensor:
726
+ """De-normalize and de-rescale, suitable for images processed by Qwen2VLImageProcessor."""
727
+ if tensor.ndim == 3:
728
+ tensor = tensor.unsqueeze(0)
729
+ mean_t = torch.tensor(mean).view(1, -1, 1, 1).to(tensor.device)
730
+ std_t = torch.tensor(std).view(1, -1, 1, 1).to(tensor.device)
731
+ tensor = tensor * std_t + mean_t
732
+ tensor = tensor / rescale_factor
733
+ tensor = torch.clamp(tensor / 255.0, 0, 1)
734
+ return tensor
735
+
736
+
737
+ def tensor2pil(image_t: torch.Tensor, image_mean, image_std) -> Image.Image:
738
+ """Convert a tensor to a PIL Image."""
739
+ image_t = image_t.detach().cpu()
740
+ rescale_factor = 1 / 255
741
+ sample = de_transform(
742
+ image_t,
743
+ mean=image_mean,
744
+ std=image_std,
745
+ rescale_factor=rescale_factor,
746
+ )[0]
747
+ ndarr = sample.mul(255).add_(0.5).clamp_(0, 255).permute(1, 2, 0).to("cpu", torch.uint8).numpy()
748
+ return Image.fromarray(ndarr)
native/qwen2_5_vl_vit.py ADDED
@@ -0,0 +1,494 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copyright (c) 2025 ByteDance Ltd. and/or its affiliates.
2
+ # Copyright 2024 The Qwen Team and The HuggingFace Inc. team.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ # coding: utf-8
16
+
17
+ # Licensed under the Apache License, Version 2.0 (the "License");
18
+ # you may not use this file except in compliance with the License.
19
+ # You may obtain a copy of the License at
20
+ #
21
+ # http://www.apache.org/licenses/LICENSE-2.0
22
+ #
23
+ # Unless required by applicable law or agreed to in writing, software
24
+ # distributed under the License is distributed on an "AS IS" BASIS,
25
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
26
+ # See the License for the specific language governing permissions and
27
+ # limitations under the License.
28
+ # Copyright (c) 2025 ByteDance Ltd. and/or its affiliates.
29
+ #
30
+ # Licensed under the Apache License, Version 2.0 (the "License");
31
+ # you may not use this file except in compliance with the License.
32
+ # You may obtain a copy of the License at
33
+ #
34
+ # http://www.apache.org/licenses/LICENSE-2.0
35
+ #
36
+ # Unless required by applicable law or agreed to in writing, software
37
+ # distributed under the License is distributed on an "AS IS" BASIS,
38
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
39
+ # See the License for the specific language governing permissions and
40
+ # limitations under the License.
41
+
42
+ import math
43
+ import torch
44
+ import torch.nn as nn
45
+ import torch.nn.functional as F
46
+ from typing import Optional, Tuple
47
+ from transformers.models.qwen2_5_vl.configuration_qwen2_5_vl import Qwen2_5_VLVisionConfig
48
+ from transformers.models.qwen2_5_vl.modeling_qwen2_5_vl import Qwen2_5_VLPreTrainedModel
49
+ from transformers.utils import is_flash_attn_2_available
50
+ from transformers.activations import ACT2FN
51
+
52
+ if is_flash_attn_2_available():
53
+ from flash_attn import flash_attn_varlen_func
54
+ from flash_attn.layers.rotary import apply_rotary_emb
55
+
56
+ else:
57
+ flash_attn_varlen_func = None
58
+ apply_rotary_emb = None
59
+
60
+ def rotate_half(x):
61
+ """Rotates half the hidden dims of the input."""
62
+ x1 = x[..., : x.shape[-1] // 2]
63
+ x2 = x[..., x.shape[-1] // 2 :]
64
+ return torch.cat((-x2, x1), dim=-1)
65
+
66
+ def apply_rotary_pos_emb_vision(
67
+ q: torch.Tensor, k: torch.Tensor, cos: torch.Tensor, sin: torch.Tensor
68
+ ) -> Tuple[torch.Tensor, torch.Tensor]:
69
+ orig_q_dtype = q.dtype
70
+ orig_k_dtype = k.dtype
71
+ q, k = q.float(), k.float()
72
+ cos, sin = cos.unsqueeze(-2), sin.unsqueeze(-2)
73
+ q_embed = (q * cos) + (rotate_half(q) * sin)
74
+ k_embed = (k * cos) + (rotate_half(k) * sin)
75
+ q_embed = q_embed.to(orig_q_dtype)
76
+ k_embed = k_embed.to(orig_k_dtype)
77
+ return q_embed, k_embed
78
+
79
+ class Qwen2_5_VLVisionAttention(nn.Module):
80
+ def __init__(self, dim: int, num_heads: int = 16) -> None:
81
+ super().__init__()
82
+ self.num_heads = num_heads
83
+ self.head_dim = dim // num_heads
84
+ self.qkv = nn.Linear(dim, dim * 3, bias=True)
85
+ self.proj = nn.Linear(dim, dim)
86
+
87
+ def forward(
88
+ self,
89
+ hidden_states: torch.Tensor,
90
+ cu_seqlens: torch.Tensor,
91
+ rotary_pos_emb: Optional[torch.Tensor] = None,
92
+ position_embeddings: Optional[Tuple[torch.Tensor, torch.Tensor]] = None,
93
+ ) -> torch.Tensor:
94
+ seq_length = hidden_states.shape[0]
95
+ q, k, v = self.qkv(hidden_states).reshape(seq_length, 3, self.num_heads, -1).permute(1, 0, 2, 3).unbind(0)
96
+ if position_embeddings is None:
97
+ # logger.warning_once(
98
+ # "The attention layers in this model are transitioning from computing the RoPE embeddings internally "
99
+ # "through `rotary_pos_emb` (2D tensor of RoPE theta values), to using externally computed "
100
+ # "`position_embeddings` (Tuple of tensors, containing cos and sin). In v4.54 `rotary_pos_emb` will be "
101
+ # "removed and `position_embeddings` will be mandatory."
102
+ # )
103
+ emb = torch.cat((rotary_pos_emb, rotary_pos_emb), dim=-1)
104
+ cos = emb.cos().float()
105
+ sin = emb.sin().float()
106
+ else:
107
+ cos, sin = position_embeddings
108
+ q, k = apply_rotary_pos_emb_vision(q, k, cos, sin)
109
+
110
+ attention_mask = torch.full(
111
+ [1, seq_length, seq_length], torch.finfo(q.dtype).min, device=q.device, dtype=q.dtype
112
+ )
113
+ for i in range(1, len(cu_seqlens)):
114
+ attention_mask[..., cu_seqlens[i - 1] : cu_seqlens[i], cu_seqlens[i - 1] : cu_seqlens[i]] = 0
115
+
116
+ q = q.transpose(0, 1)
117
+ k = k.transpose(0, 1)
118
+ v = v.transpose(0, 1)
119
+ attn_weights = torch.matmul(q, k.transpose(1, 2)) / math.sqrt(self.head_dim)
120
+ attn_weights = attn_weights + attention_mask
121
+ attn_weights = nn.functional.softmax(attn_weights, dim=-1, dtype=torch.float32).to(q.dtype)
122
+ attn_output = torch.matmul(attn_weights, v)
123
+ attn_output = attn_output.transpose(0, 1)
124
+ attn_output = attn_output.reshape(seq_length, -1)
125
+ attn_output = self.proj(attn_output)
126
+ return attn_output
127
+
128
+ def apply_rotary_pos_emb_flashatt(
129
+ q: torch.Tensor, k: torch.Tensor, cos: torch.Tensor, sin: torch.Tensor
130
+ ) -> Tuple[torch.Tensor, torch.Tensor]:
131
+ cos = cos.chunk(2, dim=-1)[0].contiguous()
132
+ sin = sin.chunk(2, dim=-1)[0].contiguous()
133
+ q_embed = apply_rotary_emb(q.float(), cos, sin).type_as(q)
134
+ k_embed = apply_rotary_emb(k.float(), cos, sin).type_as(k)
135
+ return q_embed, k_embed
136
+
137
+ class Qwen2_5_VLVisionFlashAttention2(nn.Module):
138
+ def __init__(self, dim: int, num_heads: int = 16) -> None:
139
+ super().__init__()
140
+ self.num_heads = num_heads
141
+ self.qkv = nn.Linear(dim, dim * 3, bias=True)
142
+ self.proj = nn.Linear(dim, dim)
143
+
144
+ def forward(
145
+ self,
146
+ hidden_states: torch.Tensor,
147
+ cu_seqlens: torch.Tensor,
148
+ rotary_pos_emb: Optional[torch.Tensor] = None,
149
+ position_embeddings: Optional[Tuple[torch.Tensor, torch.Tensor]] = None,
150
+ ) -> torch.Tensor:
151
+ seq_length = hidden_states.shape[0]
152
+ q, k, v = self.qkv(hidden_states).reshape(seq_length, 3, self.num_heads, -1).permute(1, 0, 2, 3).unbind(0)
153
+ if position_embeddings is None:
154
+ # logger.warning_once(
155
+ # "The attention layers in this model are transitioning from computing the RoPE embeddings internally "
156
+ # "through `rotary_pos_emb` (2D tensor of RoPE theta values), to using externally computed "
157
+ # "`position_embeddings` (Tuple of tensors, containing cos and sin). In v4.54 `rotary_pos_emb` will be "
158
+ # "removed and `position_embeddings` will be mandatory."
159
+ # )
160
+ emb = torch.cat((rotary_pos_emb, rotary_pos_emb), dim=-1)
161
+ cos = emb.cos().float()
162
+ sin = emb.sin().float()
163
+ else:
164
+ cos, sin = position_embeddings
165
+ cos, sin = cos.float(), sin.float() # NOTE: BAGEL expects input and cos/sin to have the same dtype.
166
+ q, k = apply_rotary_pos_emb_flashatt(q.unsqueeze(0), k.unsqueeze(0), cos, sin)
167
+ q = q.squeeze(0)
168
+ k = k.squeeze(0)
169
+
170
+ max_seqlen = (cu_seqlens[1:] - cu_seqlens[:-1]).max().item()
171
+ attn_output = flash_attn_varlen_func(q, k, v, cu_seqlens, cu_seqlens, max_seqlen, max_seqlen).reshape(
172
+ seq_length, -1
173
+ )
174
+ attn_output = self.proj(attn_output)
175
+ return attn_output
176
+
177
+ class Qwen2_5_VLVisionSdpaAttention(nn.Module):
178
+ def __init__(self, dim: int, num_heads: int = 16) -> None:
179
+ super().__init__()
180
+ self.num_heads = num_heads
181
+ self.qkv = nn.Linear(dim, dim * 3, bias=True)
182
+ self.proj = nn.Linear(dim, dim)
183
+
184
+ def forward(
185
+ self,
186
+ hidden_states: torch.Tensor,
187
+ cu_seqlens: torch.Tensor,
188
+ rotary_pos_emb: Optional[torch.Tensor] = None,
189
+ position_embeddings: Optional[Tuple[torch.Tensor, torch.Tensor]] = None,
190
+ ) -> torch.Tensor:
191
+ seq_length = hidden_states.shape[0]
192
+ q, k, v = self.qkv(hidden_states).reshape(seq_length, 3, self.num_heads, -1).permute(1, 0, 2, 3).unbind(0)
193
+ if position_embeddings is None:
194
+ # logger.warning_once(
195
+ # "The attention layers in this model are transitioning from computing the RoPE embeddings internally "
196
+ # "through `rotary_pos_emb` (2D tensor of RoPE theta values), to using externally computed "
197
+ # "`position_embeddings` (Tuple of tensors, containing cos and sin). In v4.54 `rotary_pos_emb` will be "
198
+ # "removed and `position_embeddings` will be mandatory."
199
+ # )
200
+ emb = torch.cat((rotary_pos_emb, rotary_pos_emb), dim=-1)
201
+ cos = emb.cos().float()
202
+ sin = emb.sin().float()
203
+ else:
204
+ cos, sin = position_embeddings
205
+ q, k = apply_rotary_pos_emb_vision(q, k, cos, sin)
206
+
207
+ attention_mask = torch.zeros([1, seq_length, seq_length], device=q.device, dtype=torch.bool)
208
+ for i in range(1, len(cu_seqlens)):
209
+ attention_mask[..., cu_seqlens[i - 1] : cu_seqlens[i], cu_seqlens[i - 1] : cu_seqlens[i]] = True
210
+ q = q.transpose(0, 1)
211
+ k = k.transpose(0, 1)
212
+ v = v.transpose(0, 1)
213
+ attn_output = F.scaled_dot_product_attention(q, k, v, attention_mask, dropout_p=0.0)
214
+ attn_output = attn_output.transpose(0, 1)
215
+ attn_output = attn_output.reshape(seq_length, -1)
216
+ attn_output = self.proj(attn_output)
217
+ return attn_output
218
+
219
+ QWEN2_5_VL_VISION_ATTENTION_CLASSES = {
220
+ "eager": Qwen2_5_VLVisionAttention,
221
+ "flash_attention_2": Qwen2_5_VLVisionFlashAttention2,
222
+ "sdpa": Qwen2_5_VLVisionSdpaAttention,
223
+ }
224
+
225
+ class Qwen2_5_VisionPatchEmbed(nn.Module):
226
+ def __init__(
227
+ self,
228
+ patch_size: int = 14,
229
+ temporal_patch_size: int = 2,
230
+ in_channels: int = 3,
231
+ embed_dim: int = 1152,
232
+ ) -> None:
233
+ super().__init__()
234
+ self.patch_size = patch_size
235
+ self.temporal_patch_size = temporal_patch_size
236
+ self.in_channels = in_channels
237
+ self.embed_dim = embed_dim
238
+
239
+ kernel_size = [temporal_patch_size, patch_size, patch_size]
240
+ self.proj = nn.Conv3d(in_channels, embed_dim, kernel_size=kernel_size, stride=kernel_size, bias=False)
241
+
242
+ def forward(self, hidden_states: torch.Tensor) -> torch.Tensor:
243
+ target_dtype = self.proj.weight.dtype
244
+ hidden_states = hidden_states.view(
245
+ -1, self.in_channels, self.temporal_patch_size, self.patch_size, self.patch_size
246
+ )
247
+ hidden_states = self.proj(hidden_states.to(dtype=target_dtype)).view(-1, self.embed_dim)
248
+ return hidden_states
249
+
250
+ class Qwen2_5_VisionRotaryEmbedding(nn.Module):
251
+ def __init__(self, dim: int, theta: float = 10000.0) -> None:
252
+ super().__init__()
253
+ inv_freq = 1.0 / (theta ** (torch.arange(0, dim, 2, dtype=torch.float) / dim))
254
+ self.register_buffer("inv_freq", inv_freq, persistent=False)
255
+
256
+ def forward(self, seqlen: int) -> torch.Tensor:
257
+ seq = torch.arange(seqlen, device=self.inv_freq.device, dtype=self.inv_freq.dtype)
258
+ freqs = torch.outer(seq, self.inv_freq)
259
+ return freqs
260
+
261
+ class Qwen2RMSNorm(nn.Module):
262
+ def __init__(self, hidden_size, eps=1e-6):
263
+ """
264
+ Qwen2RMSNorm is equivalent to T5LayerNorm
265
+ """
266
+ super().__init__()
267
+ self.weight = nn.Parameter(torch.ones(hidden_size))
268
+ self.variance_epsilon = eps
269
+
270
+ def forward(self, hidden_states):
271
+ input_dtype = hidden_states.dtype
272
+ hidden_states = hidden_states.to(torch.float32)
273
+ variance = hidden_states.pow(2).mean(-1, keepdim=True)
274
+ hidden_states = hidden_states * torch.rsqrt(variance + self.variance_epsilon)
275
+ return self.weight * hidden_states.to(input_dtype)
276
+
277
+ def extra_repr(self):
278
+ return f"{tuple(self.weight.shape)}, eps={self.variance_epsilon}"
279
+
280
+ class Qwen2_5_VLMLP(nn.Module):
281
+ def __init__(self, config, bias: bool = False):
282
+ super().__init__()
283
+ self.hidden_size = config.hidden_size
284
+ self.intermediate_size = config.intermediate_size
285
+ self.gate_proj = nn.Linear(self.hidden_size, self.intermediate_size, bias=bias)
286
+ self.up_proj = nn.Linear(self.hidden_size, self.intermediate_size, bias=bias)
287
+ self.down_proj = nn.Linear(self.intermediate_size, self.hidden_size, bias=bias)
288
+ self.act_fn = ACT2FN[config.hidden_act]
289
+
290
+ def forward(self, hidden_state):
291
+ return self.down_proj(self.act_fn(self.gate_proj(hidden_state)) * self.up_proj(hidden_state))
292
+
293
+ class Qwen2_5_VLVisionBlock(nn.Module):
294
+ def __init__(self, config, attn_implementation: str = "sdpa") -> None:
295
+ super().__init__()
296
+ self.norm1 = Qwen2RMSNorm(config.hidden_size, eps=1e-6)
297
+ self.norm2 = Qwen2RMSNorm(config.hidden_size, eps=1e-6)
298
+ self.attn = QWEN2_5_VL_VISION_ATTENTION_CLASSES[attn_implementation](
299
+ config.hidden_size, num_heads=config.num_heads
300
+ )
301
+ self.mlp = Qwen2_5_VLMLP(config, bias=True)
302
+
303
+ def forward(
304
+ self,
305
+ hidden_states: torch.Tensor,
306
+ cu_seqlens: torch.Tensor,
307
+ rotary_pos_emb: Optional[torch.Tensor] = None,
308
+ position_embeddings: Optional[Tuple[torch.Tensor, torch.Tensor]] = None,
309
+ ) -> torch.Tensor:
310
+ hidden_states = hidden_states + self.attn(
311
+ self.norm1(hidden_states),
312
+ cu_seqlens=cu_seqlens,
313
+ rotary_pos_emb=rotary_pos_emb,
314
+ position_embeddings=position_embeddings,
315
+ )
316
+ hidden_states = hidden_states + self.mlp(self.norm2(hidden_states))
317
+ return hidden_states
318
+
319
+ class Qwen2_5_VLPatchMerger(nn.Module):
320
+ def __init__(self, dim: int, context_dim: int, spatial_merge_size: int = 2) -> None:
321
+ super().__init__()
322
+ self.hidden_size = context_dim * (spatial_merge_size**2)
323
+ self.ln_q = Qwen2RMSNorm(context_dim, eps=1e-6)
324
+ self.mlp = nn.Sequential(
325
+ nn.Linear(self.hidden_size, self.hidden_size),
326
+ nn.GELU(),
327
+ nn.Linear(self.hidden_size, dim),
328
+ )
329
+
330
+ def forward(self, x: torch.Tensor) -> torch.Tensor:
331
+ x = self.mlp(self.ln_q(x).view(-1, self.hidden_size))
332
+ return x
333
+
334
+ class Qwen2_5_VisionTransformerPretrainedModel(Qwen2_5_VLPreTrainedModel):
335
+ config_class = Qwen2_5_VLVisionConfig
336
+ _no_split_modules = ["Qwen2_5_VLVisionBlock"]
337
+
338
+ def __init__(self, config, *inputs, **kwargs) -> None:
339
+ super().__init__(config, *inputs, **kwargs)
340
+ self.spatial_merge_size = config.spatial_merge_size
341
+ self.patch_size = config.patch_size
342
+ self.fullatt_block_indexes = config.fullatt_block_indexes
343
+ self.window_size = config.window_size
344
+ self.spatial_merge_unit = self.spatial_merge_size * self.spatial_merge_size
345
+
346
+ self.patch_embed = Qwen2_5_VisionPatchEmbed(
347
+ patch_size=config.patch_size,
348
+ temporal_patch_size=config.temporal_patch_size,
349
+ in_channels=config.in_channels,
350
+ embed_dim=config.hidden_size,
351
+ )
352
+
353
+ head_dim = config.hidden_size // config.num_heads
354
+ self.rotary_pos_emb = Qwen2_5_VisionRotaryEmbedding(head_dim // 2)
355
+
356
+ self.blocks = nn.ModuleList(
357
+ [Qwen2_5_VLVisionBlock(config, config._attn_implementation) for _ in range(config.depth)]
358
+ )
359
+ self.merger = Qwen2_5_VLPatchMerger(
360
+ dim=config.out_hidden_size,
361
+ context_dim=config.hidden_size,
362
+ spatial_merge_size=config.spatial_merge_size,
363
+ )
364
+ # Merge each 2x2 patch group into one token via concat plus an MLP projection.
365
+ self.gradient_checkpointing = False
366
+
367
+ def rot_pos_emb(self, grid_thw):
368
+ pos_ids = []
369
+ for t, h, w in grid_thw: # Generate 2D position indexes for each (t, h, w) grid.
370
+ hpos_ids = torch.arange(h).unsqueeze(1).expand(-1, w) # Height-axis position indexes.
371
+ hpos_ids = hpos_ids.reshape(
372
+ h // self.spatial_merge_size,
373
+ self.spatial_merge_size,
374
+ w // self.spatial_merge_size,
375
+ self.spatial_merge_size,
376
+ )
377
+ hpos_ids = hpos_ids.permute(0, 2, 1, 3)
378
+ hpos_ids = hpos_ids.flatten()
379
+
380
+ wpos_ids = torch.arange(w).unsqueeze(0).expand(h, -1) # Width-axis position indexes.
381
+ wpos_ids = wpos_ids.reshape(
382
+ h // self.spatial_merge_size,
383
+ self.spatial_merge_size,
384
+ w // self.spatial_merge_size,
385
+ self.spatial_merge_size,
386
+ )
387
+ wpos_ids = wpos_ids.permute(0, 2, 1, 3)
388
+ wpos_ids = wpos_ids.flatten()
389
+ pos_ids.append(torch.stack([hpos_ids, wpos_ids], dim=-1).repeat(t, 1))
390
+ pos_ids = torch.cat(pos_ids, dim=0)
391
+ max_grid_size = grid_thw[:, 1:].max()
392
+ rotary_pos_emb_full = self.rotary_pos_emb(max_grid_size) # Rotary embeddings for the largest grid.
393
+ rotary_pos_emb = rotary_pos_emb_full[pos_ids].flatten(1) # Gather embeddings by patch position index.
394
+ return rotary_pos_emb
395
+
396
+ def get_window_index(self, grid_thw):
397
+ window_index: list = []
398
+ cu_window_seqlens: list = [0]
399
+ window_index_id = 0
400
+ vit_merger_window_size = self.window_size // self.spatial_merge_size // self.patch_size
401
+
402
+ for grid_t, grid_h, grid_w in grid_thw:
403
+ llm_grid_h, llm_grid_w = (
404
+ grid_h // self.spatial_merge_size,
405
+ grid_w // self.spatial_merge_size,
406
+ )
407
+ index = torch.arange(grid_t * llm_grid_h * llm_grid_w).reshape(grid_t, llm_grid_h, llm_grid_w)
408
+ pad_h = vit_merger_window_size - llm_grid_h % vit_merger_window_size
409
+ pad_w = vit_merger_window_size - llm_grid_w % vit_merger_window_size
410
+ num_windows_h = (llm_grid_h + pad_h) // vit_merger_window_size
411
+ num_windows_w = (llm_grid_w + pad_w) // vit_merger_window_size
412
+ index_padded = F.pad(index, (0, pad_w, 0, pad_h), "constant", -100)
413
+ index_padded = index_padded.reshape(
414
+ grid_t,
415
+ num_windows_h,
416
+ vit_merger_window_size,
417
+ num_windows_w,
418
+ vit_merger_window_size,
419
+ )
420
+ index_padded = index_padded.permute(0, 1, 3, 2, 4).reshape(
421
+ grid_t,
422
+ num_windows_h * num_windows_w,
423
+ vit_merger_window_size,
424
+ vit_merger_window_size,
425
+ )
426
+ seqlens = (index_padded != -100).sum([2, 3]).reshape(-1)
427
+ index_padded = index_padded.reshape(-1)
428
+ index_new = index_padded[index_padded != -100]
429
+ window_index.append(index_new + window_index_id)
430
+ cu_seqlens_tmp = seqlens.cumsum(0) * self.spatial_merge_unit + cu_window_seqlens[-1]
431
+ cu_window_seqlens.extend(cu_seqlens_tmp.tolist())
432
+ window_index_id += (grid_t * llm_grid_h * llm_grid_w).item()
433
+ window_index = torch.cat(window_index, dim=0)
434
+
435
+ return window_index, cu_window_seqlens
436
+
437
+ def forward(self, hidden_states: torch.Tensor, grid_thw: torch.Tensor) -> torch.Tensor:
438
+ """
439
+ Args:
440
+ hidden_states (`torch.Tensor` of shape `(seq_len, hidden_size)`):
441
+ The final hidden states of the model.
442
+ grid_thw (`torch.Tensor` of shape `(num_images_or_videos, 3)`):
443
+ The temporal, height and width of feature shape of each image in LLM.
444
+
445
+ Returns:
446
+ `torch.Tensor`: hidden_states.
447
+ """
448
+ hidden_states = self.patch_embed(hidden_states)
449
+ rotary_pos_emb = self.rot_pos_emb(grid_thw) # Compute RoPE for each input video.
450
+ window_index, cu_window_seqlens = self.get_window_index(grid_thw)
451
+ cu_window_seqlens = torch.tensor(
452
+ cu_window_seqlens,
453
+ device=hidden_states.device,
454
+ dtype=grid_thw.dtype if torch.jit.is_tracing() else torch.int32,
455
+ )
456
+ cu_window_seqlens = torch.unique_consecutive(cu_window_seqlens)
457
+
458
+ seq_len, _ = hidden_states.size()
459
+ hidden_states = hidden_states.reshape(seq_len // self.spatial_merge_unit, self.spatial_merge_unit, -1)
460
+ hidden_states = hidden_states[window_index, :, :]
461
+ hidden_states = hidden_states.reshape(seq_len, -1)
462
+ rotary_pos_emb = rotary_pos_emb.reshape(seq_len // self.spatial_merge_unit, self.spatial_merge_unit, -1)
463
+ rotary_pos_emb = rotary_pos_emb[window_index, :, :]
464
+ rotary_pos_emb = rotary_pos_emb.reshape(seq_len, -1)
465
+ emb = torch.cat((rotary_pos_emb, rotary_pos_emb), dim=-1)
466
+ position_embeddings = (emb.cos(), emb.sin())
467
+
468
+ cu_seqlens = torch.repeat_interleave(grid_thw[:, 1] * grid_thw[:, 2], grid_thw[:, 0]).cumsum(
469
+ dim=0,
470
+ # Select dtype based on the following factors:
471
+ # - FA2 requires that cu_seqlens_q must have dtype int32
472
+ # - torch.onnx.export requires that cu_seqlens_q must have same dtype as grid_thw
473
+ # See https://github.com/huggingface/transformers/pull/34852 for more information
474
+ dtype=grid_thw.dtype if torch.jit.is_tracing() else torch.int32,
475
+ )
476
+ cu_seqlens = F.pad(cu_seqlens, (1, 0), value=0)
477
+
478
+ for layer_num, blk in enumerate(self.blocks):
479
+ if layer_num in self.fullatt_block_indexes:
480
+ cu_seqlens_now = cu_seqlens
481
+ else:
482
+ cu_seqlens_now = cu_window_seqlens
483
+ if self.gradient_checkpointing and self.training:
484
+ hidden_states = self._gradient_checkpointing_func(
485
+ blk.__call__, hidden_states, cu_seqlens_now, None, position_embeddings
486
+ )
487
+ else:
488
+ hidden_states = blk(hidden_states, cu_seqlens=cu_seqlens_now, position_embeddings=position_embeddings)
489
+
490
+ hidden_states = self.merger(hidden_states) # L x 1280 -> L//4 x 2048
491
+ reverse_indices = torch.argsort(window_index)
492
+ hidden_states = hidden_states[reverse_indices, :] # Still L//4 x 2048.
493
+
494
+ return hidden_states
native/refiner_modules.py ADDED
@@ -0,0 +1,1330 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # ---------------------------------------------------------------------------
2
+ # Standard / third-party imports shared by all sections
3
+ # ---------------------------------------------------------------------------
4
+
5
+ import itertools
6
+ import math
7
+ from dataclasses import dataclass
8
+ from typing import Any, Dict, List, Optional, Tuple, Union
9
+
10
+ from .compat import flash_attn_varlen_func
11
+ from .compat import index_first_axis, pad_input, unpad_input
12
+ import numpy as np
13
+ import torch
14
+ import torch.nn as nn
15
+ import torch.nn.functional as F
16
+ from torch.nn import RMSNorm
17
+
18
+ from einops import rearrange, repeat
19
+
20
+ from diffusers.configuration_utils import ConfigMixin, register_to_config
21
+ from diffusers.loaders import PeftAdapterMixin
22
+ from diffusers.loaders.single_file_model import FromOriginalModelMixin
23
+ from diffusers.models.activations import get_activation
24
+ from diffusers.models.attention_processor import Attention
25
+ from diffusers.models.embeddings import Timesteps, get_1d_rotary_pos_embed
26
+ from diffusers.models.modeling_outputs import Transformer2DModelOutput
27
+ from diffusers.models.modeling_utils import ModelMixin
28
+ from diffusers.schedulers.scheduling_utils import SchedulerMixin
29
+ from diffusers.utils import USE_PEFT_BACKEND, BaseOutput, logging, scale_lora_layers, unscale_lora_layers
30
+
31
+ logger = logging.get_logger(__name__)
32
+
33
+
34
+ def swiglu(x, y):
35
+ return F.silu(x.float(), inplace=False).to(x.dtype) * y
36
+
37
+
38
+ class TimestepEmbedding(nn.Module):
39
+ def __init__(
40
+ self,
41
+ in_channels: int,
42
+ time_embed_dim: int,
43
+ act_fn: str = "silu",
44
+ out_dim: int = None,
45
+ post_act_fn: Optional[str] = None,
46
+ cond_proj_dim=None,
47
+ sample_proj_bias=True,
48
+ ):
49
+ super().__init__()
50
+
51
+ self.linear_1 = nn.Linear(in_channels, time_embed_dim, sample_proj_bias)
52
+
53
+ if cond_proj_dim is not None:
54
+ self.cond_proj = nn.Linear(cond_proj_dim, in_channels, bias=False)
55
+ else:
56
+ self.cond_proj = None
57
+
58
+ self.act = get_activation(act_fn)
59
+
60
+ if out_dim is not None:
61
+ time_embed_dim_out = out_dim
62
+ else:
63
+ time_embed_dim_out = time_embed_dim
64
+ self.linear_2 = nn.Linear(time_embed_dim, time_embed_dim_out, sample_proj_bias)
65
+
66
+ if post_act_fn is None:
67
+ self.post_act = None
68
+ else:
69
+ self.post_act = get_activation(post_act_fn)
70
+
71
+ self.initialize_weights()
72
+
73
+ def initialize_weights(self):
74
+ nn.init.normal_(self.linear_1.weight, std=0.02)
75
+ nn.init.zeros_(self.linear_1.bias)
76
+ nn.init.normal_(self.linear_2.weight, std=0.02)
77
+ nn.init.zeros_(self.linear_2.bias)
78
+
79
+ def forward(self, sample, condition=None):
80
+ if condition is not None:
81
+ sample = sample + self.cond_proj(condition)
82
+ sample = self.linear_1(sample)
83
+ if self.act is not None:
84
+ sample = self.act(sample)
85
+ sample = self.linear_2(sample)
86
+ if self.post_act is not None:
87
+ sample = self.post_act(sample)
88
+ return sample
89
+
90
+
91
+ def apply_rotary_emb(
92
+ x: torch.Tensor,
93
+ freqs_cis: Union[torch.Tensor, Tuple[torch.Tensor]],
94
+ use_real: bool = True,
95
+ use_real_unbind_dim: int = -1,
96
+ ) -> Tuple[torch.Tensor, torch.Tensor]:
97
+ """
98
+ Apply rotary embeddings to input tensors using the given frequency tensor.
99
+ """
100
+ if use_real:
101
+ cos, sin = freqs_cis # [S, D]
102
+ cos = cos[None, None]
103
+ sin = sin[None, None]
104
+ cos, sin = cos.to(x.device), sin.to(x.device)
105
+
106
+ if use_real_unbind_dim == -1:
107
+ x_real, x_imag = x.reshape(*x.shape[:-1], -1, 2).unbind(-1)
108
+ x_rotated = torch.stack([-x_imag, x_real], dim=-1).flatten(3)
109
+ elif use_real_unbind_dim == -2:
110
+ x_real, x_imag = x.reshape(*x.shape[:-1], 2, -1).unbind(-2)
111
+ x_rotated = torch.cat([-x_imag, x_real], dim=-1)
112
+ else:
113
+ raise ValueError(f"`use_real_unbind_dim={use_real_unbind_dim}` but should be -1 or -2.")
114
+
115
+ out = (x.float() * cos + x_rotated.float() * sin).to(x.dtype)
116
+ return out
117
+ else:
118
+ x_rotated = torch.view_as_complex(x.float().reshape(*x.shape[:-1], x.shape[-1] // 2, 2))
119
+ freqs_cis = freqs_cis.unsqueeze(2)
120
+ x_out = torch.view_as_real(x_rotated * freqs_cis).flatten(3)
121
+ return x_out.type_as(x)
122
+
123
+
124
+ @dataclass
125
+ class TeaCacheParams:
126
+ """
127
+ TeaCache parameters for Transformer2DModel.
128
+ See https://github.com/ali-vilab/TeaCache/ for a more comprehensive understanding.
129
+ """
130
+ previous_residual: Optional[torch.Tensor] = None
131
+ previous_modulated_inp: Optional[torch.Tensor] = None
132
+ accumulated_rel_l1_distance: float = 0
133
+ is_first_or_last_step: bool = False
134
+
135
+
136
+ def derivative_approximation(*args, **kwargs):
137
+ pass
138
+
139
+
140
+ def taylor_formula(*args, **kwargs):
141
+ pass
142
+
143
+
144
+ def taylor_cache_init(*args, **kwargs):
145
+ pass
146
+
147
+
148
+ def cache_init(*args, **kwargs):
149
+ pass
150
+
151
+
152
+ def cal_type(*args, **kwargs):
153
+ pass
154
+
155
+
156
+ class LuminaRMSNormZero(nn.Module):
157
+ """
158
+ Norm layer adaptive RMS normalization zero.
159
+ """
160
+
161
+ def __init__(
162
+ self,
163
+ embedding_dim: int,
164
+ norm_eps: float,
165
+ norm_elementwise_affine: bool,
166
+ ):
167
+ super().__init__()
168
+ self.silu = nn.SiLU()
169
+ self.linear = nn.Linear(
170
+ min(embedding_dim, 1024),
171
+ 4 * embedding_dim,
172
+ bias=True,
173
+ )
174
+ self.norm = RMSNorm(embedding_dim, eps=norm_eps)
175
+
176
+ def forward(
177
+ self,
178
+ x: torch.Tensor,
179
+ emb: Optional[torch.Tensor] = None,
180
+ ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor]:
181
+ emb = self.linear(self.silu(emb))
182
+ scale_msa, gate_msa, scale_mlp, gate_mlp = emb.chunk(4, dim=1)
183
+ x = self.norm(x) * (1 + scale_msa[:, None])
184
+ return x, gate_msa, scale_mlp, gate_mlp
185
+
186
+
187
+ class LuminaLayerNormContinuous(nn.Module):
188
+ def __init__(
189
+ self,
190
+ embedding_dim: int,
191
+ conditioning_embedding_dim: int,
192
+ elementwise_affine=True,
193
+ eps=1e-5,
194
+ bias=True,
195
+ norm_type="layer_norm",
196
+ out_dim: Optional[int] = None,
197
+ ):
198
+ super().__init__()
199
+
200
+ self.silu = nn.SiLU()
201
+ self.linear_1 = nn.Linear(conditioning_embedding_dim, embedding_dim, bias=bias)
202
+
203
+ if norm_type == "layer_norm":
204
+ self.norm = nn.LayerNorm(embedding_dim, eps, elementwise_affine, bias)
205
+ elif norm_type == "rms_norm":
206
+ self.norm = RMSNorm(embedding_dim, eps=eps, elementwise_affine=elementwise_affine)
207
+ else:
208
+ raise ValueError(f"unknown norm_type {norm_type}")
209
+
210
+ self.linear_2 = None
211
+ if out_dim is not None:
212
+ self.linear_2 = nn.Linear(embedding_dim, out_dim, bias=bias)
213
+
214
+ def forward(
215
+ self,
216
+ x: torch.Tensor,
217
+ conditioning_embedding: torch.Tensor,
218
+ ) -> torch.Tensor:
219
+ emb = self.linear_1(self.silu(conditioning_embedding).to(x.dtype))
220
+ scale = emb
221
+ x = self.norm(x) * (1 + scale)[:, None, :]
222
+ if self.linear_2 is not None:
223
+ x = self.linear_2(x)
224
+ return x
225
+
226
+
227
+ class LuminaFeedForward(nn.Module):
228
+ def __init__(
229
+ self,
230
+ dim: int,
231
+ inner_dim: int,
232
+ multiple_of: Optional[int] = 256,
233
+ ffn_dim_multiplier: Optional[float] = None,
234
+ ):
235
+ super().__init__()
236
+
237
+ if ffn_dim_multiplier is not None:
238
+ inner_dim = int(ffn_dim_multiplier * inner_dim)
239
+ inner_dim = multiple_of * ((inner_dim + multiple_of - 1) // multiple_of)
240
+
241
+ self.linear_1 = nn.Linear(dim, inner_dim, bias=False)
242
+ self.linear_2 = nn.Linear(inner_dim, dim, bias=False)
243
+ self.linear_3 = nn.Linear(dim, inner_dim, bias=False)
244
+
245
+ def forward(self, x):
246
+ h1, h2 = self.linear_1(x), self.linear_3(x)
247
+ return self.linear_2(swiglu(h1, h2))
248
+
249
+
250
+ class Lumina2CombinedTimestepCaptionEmbedding(nn.Module):
251
+ def __init__(
252
+ self,
253
+ hidden_size: int = 4096,
254
+ text_feat_dim: int = 2048,
255
+ frequency_embedding_size: int = 256,
256
+ norm_eps: float = 1e-5,
257
+ timestep_scale: float = 1.0,
258
+ ) -> None:
259
+ super().__init__()
260
+
261
+ self.time_proj = Timesteps(
262
+ num_channels=frequency_embedding_size,
263
+ flip_sin_to_cos=True,
264
+ downscale_freq_shift=0.0,
265
+ scale=timestep_scale,
266
+ )
267
+ self.timestep_embedder = TimestepEmbedding(
268
+ in_channels=frequency_embedding_size,
269
+ time_embed_dim=min(hidden_size, 1024),
270
+ )
271
+ self.caption_embedder = nn.Sequential(
272
+ RMSNorm(text_feat_dim, eps=norm_eps),
273
+ nn.Linear(text_feat_dim, hidden_size, bias=True),
274
+ )
275
+ self._initialize_weights()
276
+
277
+ def _initialize_weights(self):
278
+ nn.init.trunc_normal_(self.caption_embedder[1].weight, std=0.02)
279
+ nn.init.zeros_(self.caption_embedder[1].bias)
280
+
281
+ def forward(
282
+ self, timestep: torch.Tensor, text_hidden_states: torch.Tensor, dtype: torch.dtype
283
+ ) -> Tuple[torch.Tensor, torch.Tensor]:
284
+ timestep_proj = self.time_proj(timestep).to(dtype=dtype)
285
+ time_embed = self.timestep_embedder(timestep_proj)
286
+ caption_embed = self.caption_embedder(text_hidden_states)
287
+ return time_embed, caption_embed
288
+
289
+
290
+ class AttnProcessorFlash2Varlen:
291
+ """
292
+ Processor for implementing scaled dot-product attention with flash attention
293
+ and variable length sequences.
294
+ """
295
+
296
+ def __init__(self) -> None:
297
+ pass
298
+ # if not is_flash_attn_available():
299
+ # raise ImportError(
300
+ # "AttnProcessorFlash2Varlen requires flash_attn. "
301
+ # "Please install flash_attn."
302
+ # )
303
+
304
+ def _upad_input(
305
+ self,
306
+ query_layer: torch.Tensor,
307
+ key_layer: torch.Tensor,
308
+ value_layer: torch.Tensor,
309
+ attention_mask: torch.Tensor,
310
+ query_length: int,
311
+ num_heads: int,
312
+ ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor, Tuple[torch.Tensor, torch.Tensor], Tuple[int, int]]:
313
+ def _get_unpad_data(attention_mask: torch.Tensor) -> Tuple[torch.Tensor, torch.Tensor, int]:
314
+ seqlens_in_batch = attention_mask.sum(dim=-1, dtype=torch.int32)
315
+ indices = torch.nonzero(attention_mask.flatten(), as_tuple=False).flatten()
316
+ max_seqlen_in_batch = seqlens_in_batch.max().item()
317
+ cu_seqlens = F.pad(torch.cumsum(seqlens_in_batch, dim=0, dtype=torch.int32), (1, 0))
318
+ return indices, cu_seqlens, max_seqlen_in_batch
319
+
320
+ indices_k, cu_seqlens_k, max_seqlen_in_batch_k = _get_unpad_data(attention_mask)
321
+ batch_size, kv_seq_len, num_key_value_heads, head_dim = key_layer.shape
322
+
323
+ key_layer = index_first_axis(
324
+ key_layer.reshape(batch_size * kv_seq_len, num_key_value_heads, head_dim), indices_k,
325
+ )
326
+ value_layer = index_first_axis(
327
+ value_layer.reshape(batch_size * kv_seq_len, num_key_value_heads, head_dim), indices_k,
328
+ )
329
+
330
+ if query_length == kv_seq_len:
331
+ query_layer = index_first_axis(
332
+ query_layer.reshape(batch_size * kv_seq_len, num_heads, head_dim), indices_k,
333
+ )
334
+ cu_seqlens_q = cu_seqlens_k
335
+ max_seqlen_in_batch_q = max_seqlen_in_batch_k
336
+ indices_q = indices_k
337
+ elif query_length == 1:
338
+ max_seqlen_in_batch_q = 1
339
+ cu_seqlens_q = torch.arange(
340
+ batch_size + 1, dtype=torch.int32, device=query_layer.device
341
+ )
342
+ indices_q = cu_seqlens_q[:-1]
343
+ query_layer = query_layer.squeeze(1)
344
+ else:
345
+ attention_mask = attention_mask[:, -query_length:]
346
+ query_layer, indices_q, cu_seqlens_q, max_seqlen_in_batch_q = unpad_input(
347
+ query_layer, attention_mask
348
+ )
349
+
350
+ return (
351
+ query_layer, key_layer, value_layer, indices_q,
352
+ (cu_seqlens_q, cu_seqlens_k),
353
+ (max_seqlen_in_batch_q, max_seqlen_in_batch_k),
354
+ )
355
+
356
+ def __call__(
357
+ self,
358
+ attn: Attention,
359
+ hidden_states: torch.Tensor,
360
+ encoder_hidden_states: torch.Tensor,
361
+ attention_mask: Optional[torch.Tensor] = None,
362
+ image_rotary_emb: Optional[torch.Tensor] = None,
363
+ base_sequence_length: Optional[int] = None,
364
+ ) -> torch.Tensor:
365
+ batch_size, sequence_length, _ = hidden_states.shape
366
+
367
+ query = attn.to_q(hidden_states)
368
+ key = attn.to_k(encoder_hidden_states)
369
+ value = attn.to_v(encoder_hidden_states)
370
+
371
+ query_dim = query.shape[-1]
372
+ inner_dim = key.shape[-1]
373
+ head_dim = query_dim // attn.heads
374
+ dtype = query.dtype
375
+ kv_heads = inner_dim // head_dim
376
+
377
+ query = query.view(batch_size, -1, attn.heads, head_dim)
378
+ key = key.view(batch_size, -1, kv_heads, head_dim)
379
+ value = value.view(batch_size, -1, kv_heads, head_dim)
380
+
381
+ if attn.norm_q is not None:
382
+ query = attn.norm_q(query)
383
+ if attn.norm_k is not None:
384
+ key = attn.norm_k(key)
385
+
386
+ if image_rotary_emb is not None:
387
+ query = apply_rotary_emb(query, image_rotary_emb, use_real=False)
388
+ key = apply_rotary_emb(key, image_rotary_emb, use_real=False)
389
+
390
+ query, key = query.to(dtype), key.to(dtype)
391
+
392
+ if base_sequence_length is not None:
393
+ softmax_scale = math.sqrt(math.log(sequence_length, base_sequence_length)) * attn.scale
394
+ else:
395
+ softmax_scale = attn.scale
396
+
397
+ (
398
+ query_states, key_states, value_states, indices_q,
399
+ cu_seq_lens, max_seq_lens,
400
+ ) = self._upad_input(query, key, value, attention_mask, sequence_length, attn.heads)
401
+
402
+ cu_seqlens_q, cu_seqlens_k = cu_seq_lens
403
+ max_seqlen_in_batch_q, max_seqlen_in_batch_k = max_seq_lens
404
+
405
+ if kv_heads < attn.heads:
406
+ key_states = repeat(key_states, "l h c -> l (h k) c", k=attn.heads // kv_heads)
407
+ value_states = repeat(value_states, "l h c -> l (h k) c", k=attn.heads // kv_heads)
408
+
409
+ attn_output_unpad = flash_attn_varlen_func(
410
+ query_states, key_states, value_states,
411
+ cu_seqlens_q=cu_seqlens_q, cu_seqlens_k=cu_seqlens_k,
412
+ max_seqlen_q=max_seqlen_in_batch_q, max_seqlen_k=max_seqlen_in_batch_k,
413
+ dropout_p=0.0, causal=False, softmax_scale=softmax_scale,
414
+ )
415
+
416
+ hidden_states = pad_input(attn_output_unpad, indices_q, batch_size, sequence_length)
417
+ hidden_states = hidden_states.flatten(-2)
418
+ hidden_states = hidden_states.type_as(query)
419
+
420
+ hidden_states = attn.to_out[0](hidden_states)
421
+ hidden_states = attn.to_out[1](hidden_states)
422
+ return hidden_states
423
+
424
+
425
+ class AttnProcessor:
426
+ """
427
+ Processor for implementing scaled dot-product attention (PyTorch 2.0+).
428
+ """
429
+
430
+ def __init__(self) -> None:
431
+ if not hasattr(F, "scaled_dot_product_attention"):
432
+ raise ImportError(
433
+ "AttnProcessor requires PyTorch 2.0. "
434
+ "Please upgrade PyTorch to version 2.0 or later."
435
+ )
436
+
437
+ def __call__(
438
+ self,
439
+ attn: Attention,
440
+ hidden_states: torch.Tensor,
441
+ encoder_hidden_states: torch.Tensor,
442
+ attention_mask: Optional[torch.Tensor] = None,
443
+ image_rotary_emb: Optional[torch.Tensor] = None,
444
+ base_sequence_length: Optional[int] = None,
445
+ ) -> torch.Tensor:
446
+ batch_size, sequence_length, _ = hidden_states.shape
447
+
448
+ query = attn.to_q(hidden_states)
449
+ key = attn.to_k(encoder_hidden_states)
450
+ value = attn.to_v(encoder_hidden_states)
451
+
452
+ query_dim = query.shape[-1]
453
+ inner_dim = key.shape[-1]
454
+ head_dim = query_dim // attn.heads
455
+ dtype = query.dtype
456
+ kv_heads = inner_dim // head_dim
457
+
458
+ query = query.view(batch_size, -1, attn.heads, head_dim)
459
+ key = key.view(batch_size, -1, kv_heads, head_dim)
460
+ value = value.view(batch_size, -1, kv_heads, head_dim)
461
+
462
+ if attn.norm_q is not None:
463
+ query = attn.norm_q(query)
464
+ if attn.norm_k is not None:
465
+ key = attn.norm_k(key)
466
+
467
+ if image_rotary_emb is not None:
468
+ query = apply_rotary_emb(query, image_rotary_emb, use_real=False)
469
+ key = apply_rotary_emb(key, image_rotary_emb, use_real=False)
470
+
471
+ query, key = query.to(dtype), key.to(dtype)
472
+
473
+ if base_sequence_length is not None:
474
+ softmax_scale = math.sqrt(math.log(sequence_length, base_sequence_length)) * attn.scale
475
+ else:
476
+ softmax_scale = attn.scale
477
+
478
+ if attention_mask is not None:
479
+ attention_mask = attention_mask.bool().view(batch_size, 1, 1, -1)
480
+
481
+ query = query.transpose(1, 2)
482
+ key = key.transpose(1, 2)
483
+ value = value.transpose(1, 2)
484
+
485
+ key = key.repeat_interleave(query.size(-3) // key.size(-3), -3)
486
+ value = value.repeat_interleave(query.size(-3) // value.size(-3), -3)
487
+
488
+ hidden_states = F.scaled_dot_product_attention(
489
+ query, key, value, attn_mask=attention_mask, scale=softmax_scale
490
+ )
491
+ hidden_states = hidden_states.transpose(1, 2).reshape(batch_size, -1, attn.heads * head_dim)
492
+ hidden_states = hidden_states.type_as(query)
493
+
494
+ hidden_states = attn.to_out[0](hidden_states)
495
+ hidden_states = attn.to_out[1](hidden_states)
496
+ return hidden_states
497
+
498
+
499
+
500
+ class RotaryPosEmbed(nn.Module):
501
+ def __init__(
502
+ self,
503
+ theta: int,
504
+ axes_dim: Tuple[int, int, int],
505
+ axes_lens: Tuple[int, int, int] = (300, 512, 512),
506
+ patch_size: int = 2,
507
+ ):
508
+ super().__init__()
509
+ self.theta = theta
510
+ self.axes_dim = axes_dim
511
+ self.axes_lens = axes_lens
512
+ self.patch_size = patch_size
513
+
514
+ @staticmethod
515
+ def get_freqs_cis(
516
+ axes_dim: Tuple[int, int, int],
517
+ axes_lens: Tuple[int, int, int],
518
+ theta: int,
519
+ ) -> List[torch.Tensor]:
520
+ freqs_cis = []
521
+ freqs_dtype = torch.float32 if torch.backends.mps.is_available() else torch.float64
522
+ for i, (d, e) in enumerate(zip(axes_dim, axes_lens)):
523
+ emb = get_1d_rotary_pos_embed(d, e, theta=theta, freqs_dtype=freqs_dtype)
524
+ freqs_cis.append(emb)
525
+ return freqs_cis
526
+
527
+ def _get_freqs_cis(self, freqs_cis, ids: torch.Tensor) -> torch.Tensor:
528
+ device = ids.device
529
+ if ids.device.type == "mps":
530
+ ids = ids.to("cpu")
531
+
532
+ result = []
533
+ for i in range(len(self.axes_dim)):
534
+ freqs = freqs_cis[i].to(ids.device)
535
+ index = ids[:, :, i : i + 1].repeat(1, 1, freqs.shape[-1]).to(torch.int64)
536
+ result.append(
537
+ torch.gather(freqs.unsqueeze(0).repeat(index.shape[0], 1, 1), dim=1, index=index)
538
+ )
539
+ return torch.cat(result, dim=-1).to(device)
540
+
541
+ def forward(
542
+ self,
543
+ freqs_cis,
544
+ attention_mask,
545
+ l_effective_ref_img_len,
546
+ l_effective_img_len,
547
+ ref_img_sizes,
548
+ img_sizes,
549
+ device,
550
+ ):
551
+ batch_size = len(attention_mask)
552
+ p = self.patch_size
553
+
554
+ encoder_seq_len = attention_mask.shape[1]
555
+ l_effective_cap_len = attention_mask.sum(dim=1).tolist()
556
+
557
+ seq_lengths = [
558
+ cap_len + sum(ref_img_len) + img_len
559
+ for cap_len, ref_img_len, img_len in zip(
560
+ l_effective_cap_len, l_effective_ref_img_len, l_effective_img_len
561
+ )
562
+ ]
563
+
564
+ max_seq_len = max(seq_lengths)
565
+ max_ref_img_len = max([sum(ref_img_len) for ref_img_len in l_effective_ref_img_len])
566
+ max_img_len = max(l_effective_img_len)
567
+
568
+ position_ids = torch.zeros(batch_size, max_seq_len, 3, dtype=torch.int32, device=device)
569
+
570
+ for i, (cap_seq_len, seq_len) in enumerate(zip(l_effective_cap_len, seq_lengths)):
571
+ position_ids[i, :cap_seq_len] = repeat(
572
+ torch.arange(cap_seq_len, dtype=torch.int32, device=device), "l -> l 3"
573
+ )
574
+
575
+ pe_shift = cap_seq_len
576
+ pe_shift_len = cap_seq_len
577
+
578
+ if ref_img_sizes[i] is not None:
579
+ for ref_img_size, ref_img_len in zip(ref_img_sizes[i], l_effective_ref_img_len[i]):
580
+ H, W = ref_img_size
581
+ ref_H_tokens, ref_W_tokens = H // p, W // p
582
+ assert ref_H_tokens * ref_W_tokens == ref_img_len
583
+
584
+ row_ids = repeat(
585
+ torch.arange(ref_H_tokens, dtype=torch.int32, device=device),
586
+ "h -> h w", w=ref_W_tokens,
587
+ ).flatten()
588
+ col_ids = repeat(
589
+ torch.arange(ref_W_tokens, dtype=torch.int32, device=device),
590
+ "w -> h w", h=ref_H_tokens,
591
+ ).flatten()
592
+ position_ids[i, pe_shift_len:pe_shift_len + ref_img_len, 0] = pe_shift
593
+ position_ids[i, pe_shift_len:pe_shift_len + ref_img_len, 1] = row_ids
594
+ position_ids[i, pe_shift_len:pe_shift_len + ref_img_len, 2] = col_ids
595
+
596
+ pe_shift += max(ref_H_tokens, ref_W_tokens)
597
+ pe_shift_len += ref_img_len
598
+
599
+ H, W = img_sizes[i]
600
+ H_tokens, W_tokens = H // p, W // p
601
+ assert H_tokens * W_tokens == l_effective_img_len[i]
602
+
603
+ row_ids = repeat(
604
+ torch.arange(H_tokens, dtype=torch.int32, device=device), "h -> h w", w=W_tokens
605
+ ).flatten()
606
+ col_ids = repeat(
607
+ torch.arange(W_tokens, dtype=torch.int32, device=device), "w -> h w", h=H_tokens
608
+ ).flatten()
609
+
610
+ assert pe_shift_len + l_effective_img_len[i] == seq_len
611
+ position_ids[i, pe_shift_len: seq_len, 0] = pe_shift
612
+ position_ids[i, pe_shift_len: seq_len, 1] = row_ids
613
+ position_ids[i, pe_shift_len: seq_len, 2] = col_ids
614
+
615
+ freqs_cis = self._get_freqs_cis(freqs_cis, position_ids)
616
+
617
+ cap_freqs_cis = torch.zeros(
618
+ batch_size, encoder_seq_len, freqs_cis.shape[-1], device=device, dtype=freqs_cis.dtype
619
+ )
620
+ ref_img_freqs_cis = torch.zeros(
621
+ batch_size, max_ref_img_len, freqs_cis.shape[-1], device=device, dtype=freqs_cis.dtype
622
+ )
623
+ img_freqs_cis = torch.zeros(
624
+ batch_size, max_img_len, freqs_cis.shape[-1], device=device, dtype=freqs_cis.dtype
625
+ )
626
+
627
+ for i, (cap_seq_len, ref_img_len, img_len, seq_len) in enumerate(
628
+ zip(l_effective_cap_len, l_effective_ref_img_len, l_effective_img_len, seq_lengths)
629
+ ):
630
+ cap_freqs_cis[i, :cap_seq_len] = freqs_cis[i, :cap_seq_len]
631
+ ref_img_freqs_cis[i, :sum(ref_img_len)] = freqs_cis[
632
+ i, cap_seq_len:cap_seq_len + sum(ref_img_len)
633
+ ]
634
+ img_freqs_cis[i, :img_len] = freqs_cis[
635
+ i,
636
+ cap_seq_len + sum(ref_img_len):cap_seq_len + sum(ref_img_len) + img_len,
637
+ ]
638
+
639
+ return (
640
+ cap_freqs_cis,
641
+ ref_img_freqs_cis,
642
+ img_freqs_cis,
643
+ freqs_cis,
644
+ l_effective_cap_len,
645
+ seq_lengths,
646
+ )
647
+
648
+
649
+ class TransformerBlock(nn.Module):
650
+ """
651
+ Transformer block for refiner model.
652
+ """
653
+
654
+ def __init__(
655
+ self,
656
+ dim: int,
657
+ num_attention_heads: int,
658
+ num_kv_heads: int,
659
+ multiple_of: int,
660
+ ffn_dim_multiplier: float,
661
+ norm_eps: float,
662
+ modulation: bool = True,
663
+ ) -> None:
664
+ super().__init__()
665
+ self.head_dim = dim // num_attention_heads
666
+ self.modulation = modulation
667
+
668
+ try:
669
+ processor = AttnProcessorFlash2Varlen()
670
+ except ImportError:
671
+ processor = AttnProcessor()
672
+
673
+ self.attn = Attention(
674
+ query_dim=dim,
675
+ cross_attention_dim=None,
676
+ dim_head=dim // num_attention_heads,
677
+ qk_norm="rms_norm",
678
+ heads=num_attention_heads,
679
+ kv_heads=num_kv_heads,
680
+ eps=1e-5,
681
+ bias=False,
682
+ out_bias=False,
683
+ processor=processor,
684
+ )
685
+
686
+ self.feed_forward = LuminaFeedForward(
687
+ dim=dim,
688
+ inner_dim=4 * dim,
689
+ multiple_of=multiple_of,
690
+ ffn_dim_multiplier=ffn_dim_multiplier,
691
+ )
692
+
693
+ if modulation:
694
+ self.norm1 = LuminaRMSNormZero(
695
+ embedding_dim=dim,
696
+ norm_eps=norm_eps,
697
+ norm_elementwise_affine=True,
698
+ )
699
+ else:
700
+ self.norm1 = RMSNorm(dim, eps=norm_eps)
701
+
702
+ self.ffn_norm1 = RMSNorm(dim, eps=norm_eps)
703
+ self.norm2 = RMSNorm(dim, eps=norm_eps)
704
+ self.ffn_norm2 = RMSNorm(dim, eps=norm_eps)
705
+
706
+ self.initialize_weights()
707
+
708
+ def initialize_weights(self) -> None:
709
+ nn.init.xavier_uniform_(self.attn.to_q.weight)
710
+ nn.init.xavier_uniform_(self.attn.to_k.weight)
711
+ nn.init.xavier_uniform_(self.attn.to_v.weight)
712
+ nn.init.xavier_uniform_(self.attn.to_out[0].weight)
713
+
714
+ nn.init.xavier_uniform_(self.feed_forward.linear_1.weight)
715
+ nn.init.xavier_uniform_(self.feed_forward.linear_2.weight)
716
+ nn.init.xavier_uniform_(self.feed_forward.linear_3.weight)
717
+
718
+ if self.modulation:
719
+ nn.init.zeros_(self.norm1.linear.weight)
720
+ nn.init.zeros_(self.norm1.linear.bias)
721
+
722
+ def forward(
723
+ self,
724
+ hidden_states: torch.Tensor,
725
+ attention_mask: torch.Tensor,
726
+ image_rotary_emb: torch.Tensor,
727
+ temb: Optional[torch.Tensor] = None,
728
+ ) -> torch.Tensor:
729
+ enable_taylorseer = getattr(self, 'enable_taylorseer', False)
730
+ if enable_taylorseer:
731
+ if self.modulation:
732
+ if temb is None:
733
+ raise ValueError("temb must be provided when modulation is enabled")
734
+
735
+ if self.current['type'] == 'full':
736
+ self.current['module'] = 'total'
737
+ taylor_cache_init(cache_dic=self.cache_dic, current=self.current)
738
+
739
+ norm_hidden_states, gate_msa, scale_mlp, gate_mlp = self.norm1(hidden_states, temb)
740
+ attn_output = self.attn(
741
+ hidden_states=norm_hidden_states,
742
+ encoder_hidden_states=norm_hidden_states,
743
+ attention_mask=attention_mask,
744
+ image_rotary_emb=image_rotary_emb,
745
+ )
746
+ hidden_states = hidden_states + gate_msa.unsqueeze(1).tanh() * self.norm2(attn_output)
747
+ mlp_output = self.feed_forward(self.ffn_norm1(hidden_states) * (1 + scale_mlp.unsqueeze(1)))
748
+ hidden_states = hidden_states + gate_mlp.unsqueeze(1).tanh() * self.ffn_norm2(mlp_output)
749
+
750
+ derivative_approximation(cache_dic=self.cache_dic, current=self.current, feature=hidden_states)
751
+
752
+ elif self.current['type'] == 'Taylor':
753
+ self.current['module'] = 'total'
754
+ hidden_states = taylor_formula(cache_dic=self.cache_dic, current=self.current)
755
+ else:
756
+ norm_hidden_states = self.norm1(hidden_states)
757
+ attn_output = self.attn(
758
+ hidden_states=norm_hidden_states,
759
+ encoder_hidden_states=norm_hidden_states,
760
+ attention_mask=attention_mask,
761
+ image_rotary_emb=image_rotary_emb,
762
+ )
763
+ hidden_states = hidden_states + self.norm2(attn_output)
764
+ mlp_output = self.feed_forward(self.ffn_norm1(hidden_states))
765
+ hidden_states = hidden_states + self.ffn_norm2(mlp_output)
766
+ else:
767
+ if self.modulation:
768
+ if temb is None:
769
+ raise ValueError("temb must be provided when modulation is enabled")
770
+
771
+ norm_hidden_states, gate_msa, scale_mlp, gate_mlp = self.norm1(hidden_states, temb)
772
+ attn_output = self.attn(
773
+ hidden_states=norm_hidden_states,
774
+ encoder_hidden_states=norm_hidden_states,
775
+ attention_mask=attention_mask,
776
+ image_rotary_emb=image_rotary_emb,
777
+ )
778
+ hidden_states = hidden_states + gate_msa.unsqueeze(1).tanh() * self.norm2(attn_output)
779
+ mlp_output = self.feed_forward(self.ffn_norm1(hidden_states) * (1 + scale_mlp.unsqueeze(1)))
780
+ hidden_states = hidden_states + gate_mlp.unsqueeze(1).tanh() * self.ffn_norm2(mlp_output)
781
+ else:
782
+ norm_hidden_states = self.norm1(hidden_states)
783
+ attn_output = self.attn(
784
+ hidden_states=norm_hidden_states,
785
+ encoder_hidden_states=norm_hidden_states,
786
+ attention_mask=attention_mask,
787
+ image_rotary_emb=image_rotary_emb,
788
+ )
789
+ hidden_states = hidden_states + self.norm2(attn_output)
790
+ mlp_output = self.feed_forward(self.ffn_norm1(hidden_states))
791
+ hidden_states = hidden_states + self.ffn_norm2(mlp_output)
792
+
793
+ return hidden_states
794
+
795
+
796
+ class Transformer2DModel(ModelMixin, ConfigMixin, PeftAdapterMixin, FromOriginalModelMixin):
797
+ """
798
+ Transformer 2D Model.
799
+ """
800
+
801
+ _supports_gradient_checkpointing = True
802
+ _no_split_modules = ["TransformerBlock"]
803
+ _skip_layerwise_casting_patterns = ["x_embedder", "norm"]
804
+
805
+ @register_to_config
806
+ def __init__(
807
+ self,
808
+ patch_size: int = 2,
809
+ in_channels: int = 16,
810
+ out_channels: Optional[int] = None,
811
+ hidden_size: int = 2304,
812
+ num_layers: int = 26,
813
+ num_refiner_layers: int = 2,
814
+ num_attention_heads: int = 24,
815
+ num_kv_heads: int = 8,
816
+ multiple_of: int = 256,
817
+ ffn_dim_multiplier: Optional[float] = None,
818
+ norm_eps: float = 1e-5,
819
+ axes_dim_rope: Tuple[int, int, int] = (32, 32, 32),
820
+ axes_lens: Tuple[int, int, int] = (300, 512, 512),
821
+ text_feat_dim: int = 1024,
822
+ timestep_scale: float = 1.0,
823
+ ) -> None:
824
+ super().__init__()
825
+
826
+ if (hidden_size // num_attention_heads) != sum(axes_dim_rope):
827
+ raise ValueError(
828
+ f"hidden_size // num_attention_heads ({hidden_size // num_attention_heads}) "
829
+ f"must equal sum(axes_dim_rope) ({sum(axes_dim_rope)})"
830
+ )
831
+
832
+ self.out_channels = out_channels or in_channels
833
+
834
+ self.rope_embedder = RotaryPosEmbed(
835
+ theta=10000,
836
+ axes_dim=axes_dim_rope,
837
+ axes_lens=axes_lens,
838
+ patch_size=patch_size,
839
+ )
840
+
841
+ self.x_embedder = nn.Linear(
842
+ in_features=patch_size * patch_size * in_channels,
843
+ out_features=hidden_size,
844
+ )
845
+
846
+ self.ref_image_patch_embedder = nn.Linear(
847
+ in_features=patch_size * patch_size * in_channels,
848
+ out_features=hidden_size,
849
+ )
850
+
851
+ self.time_caption_embed = Lumina2CombinedTimestepCaptionEmbedding(
852
+ hidden_size=hidden_size,
853
+ text_feat_dim=text_feat_dim,
854
+ norm_eps=norm_eps,
855
+ timestep_scale=timestep_scale,
856
+ )
857
+
858
+ self.noise_refiner = nn.ModuleList([
859
+ TransformerBlock(
860
+ hidden_size, num_attention_heads, num_kv_heads,
861
+ multiple_of, ffn_dim_multiplier, norm_eps, modulation=True,
862
+ )
863
+ for _ in range(num_refiner_layers)
864
+ ])
865
+
866
+ self.ref_image_refiner = nn.ModuleList([
867
+ TransformerBlock(
868
+ hidden_size, num_attention_heads, num_kv_heads,
869
+ multiple_of, ffn_dim_multiplier, norm_eps, modulation=True,
870
+ )
871
+ for _ in range(num_refiner_layers)
872
+ ])
873
+
874
+ self.context_refiner = nn.ModuleList([
875
+ TransformerBlock(
876
+ hidden_size, num_attention_heads, num_kv_heads,
877
+ multiple_of, ffn_dim_multiplier, norm_eps, modulation=False,
878
+ )
879
+ for _ in range(num_refiner_layers)
880
+ ])
881
+
882
+ self.layers = nn.ModuleList([
883
+ TransformerBlock(
884
+ hidden_size, num_attention_heads, num_kv_heads,
885
+ multiple_of, ffn_dim_multiplier, norm_eps, modulation=True,
886
+ )
887
+ for _ in range(num_layers)
888
+ ])
889
+
890
+ self.norm_out = LuminaLayerNormContinuous(
891
+ embedding_dim=hidden_size,
892
+ conditioning_embedding_dim=min(hidden_size, 1024),
893
+ elementwise_affine=False,
894
+ eps=1e-6,
895
+ bias=True,
896
+ out_dim=patch_size * patch_size * self.out_channels,
897
+ )
898
+
899
+ self.image_index_embedding = nn.Parameter(torch.randn(5, hidden_size))
900
+
901
+ self.gradient_checkpointing = False
902
+
903
+ self.initialize_weights()
904
+
905
+ self.enable_teacache = False
906
+ self.teacache_rel_l1_thresh = 0.05
907
+ self.teacache_params = TeaCacheParams()
908
+
909
+ coefficients = [-5.48259225, 11.48772289, -4.47407401, 2.47730926, -0.03316487]
910
+ self.rescale_func = np.poly1d(coefficients)
911
+
912
+ def initialize_weights(self) -> None:
913
+ nn.init.xavier_uniform_(self.x_embedder.weight)
914
+ nn.init.constant_(self.x_embedder.bias, 0.0)
915
+
916
+ nn.init.xavier_uniform_(self.ref_image_patch_embedder.weight)
917
+ nn.init.constant_(self.ref_image_patch_embedder.bias, 0.0)
918
+
919
+ nn.init.zeros_(self.norm_out.linear_1.weight)
920
+ nn.init.zeros_(self.norm_out.linear_1.bias)
921
+ nn.init.zeros_(self.norm_out.linear_2.weight)
922
+ nn.init.zeros_(self.norm_out.linear_2.bias)
923
+
924
+ nn.init.normal_(self.image_index_embedding, std=0.02)
925
+
926
+ def img_patch_embed_and_refine(
927
+ self,
928
+ hidden_states,
929
+ ref_image_hidden_states,
930
+ padded_img_mask,
931
+ padded_ref_img_mask,
932
+ noise_rotary_emb,
933
+ ref_img_rotary_emb,
934
+ l_effective_ref_img_len,
935
+ l_effective_img_len,
936
+ temb,
937
+ ):
938
+ batch_size = len(hidden_states)
939
+ max_combined_img_len = max([
940
+ img_len + sum(ref_img_len)
941
+ for img_len, ref_img_len in zip(l_effective_img_len, l_effective_ref_img_len)
942
+ ])
943
+
944
+ hidden_states = self.x_embedder(hidden_states)
945
+ ref_image_hidden_states = self.ref_image_patch_embedder(ref_image_hidden_states)
946
+
947
+ for i in range(batch_size):
948
+ shift = 0
949
+ for j, ref_img_len in enumerate(l_effective_ref_img_len[i]):
950
+ ref_image_hidden_states[i, shift:shift + ref_img_len, :] = (
951
+ ref_image_hidden_states[i, shift:shift + ref_img_len, :]
952
+ + self.image_index_embedding[j]
953
+ )
954
+ shift += ref_img_len
955
+
956
+ for layer in self.noise_refiner:
957
+ hidden_states = layer(hidden_states, padded_img_mask, noise_rotary_emb, temb)
958
+
959
+ flat_l_effective_ref_img_len = list(itertools.chain(*l_effective_ref_img_len))
960
+ num_ref_images = len(flat_l_effective_ref_img_len)
961
+ max_ref_img_len = max(flat_l_effective_ref_img_len)
962
+
963
+ batch_ref_img_mask = ref_image_hidden_states.new_zeros(num_ref_images, max_ref_img_len, dtype=torch.bool)
964
+ batch_ref_image_hidden_states = ref_image_hidden_states.new_zeros(
965
+ num_ref_images, max_ref_img_len, self.config.hidden_size
966
+ )
967
+ batch_ref_img_rotary_emb = hidden_states.new_zeros(
968
+ num_ref_images, max_ref_img_len, ref_img_rotary_emb.shape[-1], dtype=ref_img_rotary_emb.dtype
969
+ )
970
+ batch_temb = temb.new_zeros(num_ref_images, *temb.shape[1:], dtype=temb.dtype)
971
+
972
+ idx = 0
973
+ for i in range(batch_size):
974
+ shift = 0
975
+ for ref_img_len in l_effective_ref_img_len[i]:
976
+ batch_ref_img_mask[idx, :ref_img_len] = True
977
+ batch_ref_image_hidden_states[idx, :ref_img_len] = ref_image_hidden_states[i, shift:shift + ref_img_len]
978
+ batch_ref_img_rotary_emb[idx, :ref_img_len] = ref_img_rotary_emb[i, shift:shift + ref_img_len]
979
+ batch_temb[idx] = temb[i]
980
+ shift += ref_img_len
981
+ idx += 1
982
+
983
+ for layer in self.ref_image_refiner:
984
+ batch_ref_image_hidden_states = layer(
985
+ batch_ref_image_hidden_states, batch_ref_img_mask, batch_ref_img_rotary_emb, batch_temb
986
+ )
987
+
988
+ idx = 0
989
+ for i in range(batch_size):
990
+ shift = 0
991
+ for ref_img_len in l_effective_ref_img_len[i]:
992
+ ref_image_hidden_states[i, shift:shift + ref_img_len] = batch_ref_image_hidden_states[idx, :ref_img_len]
993
+ shift += ref_img_len
994
+ idx += 1
995
+
996
+ combined_img_hidden_states = hidden_states.new_zeros(
997
+ batch_size, max_combined_img_len, self.config.hidden_size
998
+ )
999
+ for i, (ref_img_len, img_len) in enumerate(zip(l_effective_ref_img_len, l_effective_img_len)):
1000
+ combined_img_hidden_states[i, :sum(ref_img_len)] = ref_image_hidden_states[i, :sum(ref_img_len)]
1001
+ combined_img_hidden_states[i, sum(ref_img_len):sum(ref_img_len) + img_len] = hidden_states[i, :img_len]
1002
+
1003
+ return combined_img_hidden_states
1004
+
1005
+ def flat_and_pad_to_seq(self, hidden_states, ref_image_hidden_states):
1006
+ batch_size = len(hidden_states)
1007
+ p = self.config.patch_size
1008
+ device = hidden_states[0].device
1009
+
1010
+ img_sizes = [(img.size(1), img.size(2)) for img in hidden_states]
1011
+ l_effective_img_len = [(H // p) * (W // p) for (H, W) in img_sizes]
1012
+
1013
+ if ref_image_hidden_states is not None and len(ref_image_hidden_states) > 0:
1014
+ ref_img_sizes = [
1015
+ [(img.size(1), img.size(2)) for img in imgs] if imgs is not None else None
1016
+ for imgs in ref_image_hidden_states
1017
+ ]
1018
+ l_effective_ref_img_len = [
1019
+ [(ref_img_size[0] // p) * (ref_img_size[1] // p) for ref_img_size in _ref_img_sizes]
1020
+ if _ref_img_sizes is not None else [0]
1021
+ for _ref_img_sizes in ref_img_sizes
1022
+ ]
1023
+ else:
1024
+ ref_img_sizes = [None for _ in range(batch_size)]
1025
+ l_effective_ref_img_len = [[0] for _ in range(batch_size)]
1026
+
1027
+ max_ref_img_len = max([sum(ref_img_len) for ref_img_len in l_effective_ref_img_len])
1028
+ max_img_len = max(l_effective_img_len)
1029
+
1030
+ flat_ref_img_hidden_states = []
1031
+ for i in range(batch_size):
1032
+ if ref_img_sizes[i] is not None:
1033
+ imgs = []
1034
+ for ref_img in ref_image_hidden_states[i]:
1035
+ C, H, W = ref_img.size()
1036
+ ref_img = rearrange(ref_img, 'c (h p1) (w p2) -> (h w) (p1 p2 c)', p1=p, p2=p)
1037
+ imgs.append(ref_img)
1038
+ flat_ref_img_hidden_states.append(torch.cat(imgs, dim=0))
1039
+ else:
1040
+ flat_ref_img_hidden_states.append(None)
1041
+
1042
+ flat_hidden_states = []
1043
+ for i in range(batch_size):
1044
+ img = hidden_states[i]
1045
+ C, H, W = img.size()
1046
+ img = rearrange(img, 'c (h p1) (w p2) -> (h w) (p1 p2 c)', p1=p, p2=p)
1047
+ flat_hidden_states.append(img)
1048
+
1049
+ padded_ref_img_hidden_states = torch.zeros(
1050
+ batch_size, max_ref_img_len, flat_hidden_states[0].shape[-1],
1051
+ device=device, dtype=flat_hidden_states[0].dtype,
1052
+ )
1053
+ padded_ref_img_mask = torch.zeros(batch_size, max_ref_img_len, dtype=torch.bool, device=device)
1054
+ for i in range(batch_size):
1055
+ if ref_img_sizes[i] is not None:
1056
+ padded_ref_img_hidden_states[i, :sum(l_effective_ref_img_len[i])] = flat_ref_img_hidden_states[i]
1057
+ padded_ref_img_mask[i, :sum(l_effective_ref_img_len[i])] = True
1058
+
1059
+ padded_hidden_states = torch.zeros(
1060
+ batch_size, max_img_len, flat_hidden_states[0].shape[-1],
1061
+ device=device, dtype=flat_hidden_states[0].dtype,
1062
+ )
1063
+ padded_img_mask = torch.zeros(batch_size, max_img_len, dtype=torch.bool, device=device)
1064
+ for i in range(batch_size):
1065
+ padded_hidden_states[i, :l_effective_img_len[i]] = flat_hidden_states[i]
1066
+ padded_img_mask[i, :l_effective_img_len[i]] = True
1067
+
1068
+ return (
1069
+ padded_hidden_states,
1070
+ padded_ref_img_hidden_states,
1071
+ padded_img_mask,
1072
+ padded_ref_img_mask,
1073
+ l_effective_ref_img_len,
1074
+ l_effective_img_len,
1075
+ ref_img_sizes,
1076
+ img_sizes,
1077
+ )
1078
+
1079
+ def forward(
1080
+ self,
1081
+ hidden_states: Union[torch.Tensor, List[torch.Tensor]],
1082
+ timestep: torch.Tensor,
1083
+ text_hidden_states: torch.Tensor,
1084
+ freqs_cis: torch.Tensor,
1085
+ text_attention_mask: torch.Tensor,
1086
+ ref_image_hidden_states: Optional[List[List[torch.Tensor]]] = None,
1087
+ attention_kwargs: Optional[Dict[str, Any]] = None,
1088
+ return_dict: bool = False,
1089
+ ) -> Union[torch.Tensor, Transformer2DModelOutput]:
1090
+ enable_taylorseer = getattr(self, 'enable_taylorseer', False)
1091
+ if enable_taylorseer:
1092
+ cal_type(self.cache_dic, self.current)
1093
+
1094
+ if attention_kwargs is not None:
1095
+ attention_kwargs = attention_kwargs.copy()
1096
+ lora_scale = attention_kwargs.pop("scale", 1.0)
1097
+ else:
1098
+ lora_scale = 1.0
1099
+
1100
+ if USE_PEFT_BACKEND:
1101
+ scale_lora_layers(self, lora_scale)
1102
+ else:
1103
+ if attention_kwargs is not None and attention_kwargs.get("scale", None) is not None:
1104
+ logger.warning(
1105
+ "Passing `scale` via `attention_kwargs` when not using the PEFT backend is ineffective."
1106
+ )
1107
+
1108
+ batch_size = len(hidden_states)
1109
+ is_hidden_states_tensor = isinstance(hidden_states, torch.Tensor)
1110
+
1111
+ if is_hidden_states_tensor:
1112
+ assert hidden_states.ndim == 4
1113
+ hidden_states = [_hidden_states for _hidden_states in hidden_states]
1114
+
1115
+ device = hidden_states[0].device
1116
+
1117
+ assert isinstance(text_hidden_states, torch.Tensor), \
1118
+ f"text_hidden_states must be Tensor, got {type(text_hidden_states)}. " \
1119
+ f"Check if freqs_cis and text_hidden_states are swapped in the caller."
1120
+
1121
+ temb, text_hidden_states = self.time_caption_embed(timestep, text_hidden_states, hidden_states[0].dtype)
1122
+
1123
+ (
1124
+ hidden_states,
1125
+ ref_image_hidden_states,
1126
+ img_mask,
1127
+ ref_img_mask,
1128
+ l_effective_ref_img_len,
1129
+ l_effective_img_len,
1130
+ ref_img_sizes,
1131
+ img_sizes,
1132
+ ) = self.flat_and_pad_to_seq(hidden_states, ref_image_hidden_states)
1133
+
1134
+ (
1135
+ context_rotary_emb,
1136
+ ref_img_rotary_emb,
1137
+ noise_rotary_emb,
1138
+ rotary_emb,
1139
+ encoder_seq_lengths,
1140
+ seq_lengths,
1141
+ ) = self.rope_embedder(
1142
+ freqs_cis,
1143
+ text_attention_mask,
1144
+ l_effective_ref_img_len,
1145
+ l_effective_img_len,
1146
+ ref_img_sizes,
1147
+ img_sizes,
1148
+ device,
1149
+ )
1150
+
1151
+ # 2. Context refinement
1152
+ for layer in self.context_refiner:
1153
+ text_hidden_states = layer(text_hidden_states, text_attention_mask, context_rotary_emb)
1154
+
1155
+ combined_img_hidden_states = self.img_patch_embed_and_refine(
1156
+ hidden_states,
1157
+ ref_image_hidden_states,
1158
+ img_mask,
1159
+ ref_img_mask,
1160
+ noise_rotary_emb,
1161
+ ref_img_rotary_emb,
1162
+ l_effective_ref_img_len,
1163
+ l_effective_img_len,
1164
+ temb,
1165
+ )
1166
+
1167
+ # 3. Joint Transformer blocks
1168
+ max_seq_len = max(seq_lengths)
1169
+
1170
+ attention_mask = hidden_states.new_zeros(batch_size, max_seq_len, dtype=torch.bool)
1171
+ joint_hidden_states = hidden_states.new_zeros(batch_size, max_seq_len, self.config.hidden_size)
1172
+ for i, (encoder_seq_len, seq_len) in enumerate(zip(encoder_seq_lengths, seq_lengths)):
1173
+ attention_mask[i, :seq_len] = True
1174
+ joint_hidden_states[i, :encoder_seq_len] = text_hidden_states[i, :encoder_seq_len]
1175
+ joint_hidden_states[i, encoder_seq_len:seq_len] = combined_img_hidden_states[i, :seq_len - encoder_seq_len]
1176
+
1177
+ hidden_states = joint_hidden_states
1178
+
1179
+ if self.enable_teacache:
1180
+ teacache_hidden_states = hidden_states.clone()
1181
+ teacache_temb = temb.clone()
1182
+ modulated_inp, _, _, _ = self.layers[0].norm1(teacache_hidden_states, teacache_temb)
1183
+ if self.teacache_params.is_first_or_last_step:
1184
+ should_calc = True
1185
+ self.teacache_params.accumulated_rel_l1_distance = 0
1186
+ else:
1187
+ self.teacache_params.accumulated_rel_l1_distance += self.rescale_func(
1188
+ ((modulated_inp - self.teacache_params.previous_modulated_inp).abs().mean()
1189
+ / self.teacache_params.previous_modulated_inp.abs().mean()).cpu().item()
1190
+ )
1191
+ if self.teacache_params.accumulated_rel_l1_distance < self.teacache_rel_l1_thresh:
1192
+ should_calc = False
1193
+ else:
1194
+ should_calc = True
1195
+ self.teacache_params.accumulated_rel_l1_distance = 0
1196
+ self.teacache_params.previous_modulated_inp = modulated_inp
1197
+
1198
+ if self.enable_teacache:
1199
+ if not should_calc:
1200
+ hidden_states += self.teacache_params.previous_residual
1201
+ else:
1202
+ ori_hidden_states = hidden_states.clone()
1203
+ for layer_idx, layer in enumerate(self.layers):
1204
+ if torch.is_grad_enabled() and self.gradient_checkpointing:
1205
+ hidden_states = self._gradient_checkpointing_func(
1206
+ layer, hidden_states, attention_mask, rotary_emb, temb
1207
+ )
1208
+ else:
1209
+ hidden_states = layer(hidden_states, attention_mask, rotary_emb, temb)
1210
+ self.teacache_params.previous_residual = hidden_states - ori_hidden_states
1211
+ else:
1212
+ if enable_taylorseer:
1213
+ self.current['stream'] = 'layers_stream'
1214
+
1215
+ for layer_idx, layer in enumerate(self.layers):
1216
+ if enable_taylorseer:
1217
+ layer.current = self.current
1218
+ layer.cache_dic = self.cache_dic
1219
+ layer.enable_taylorseer = True
1220
+ self.current['layer'] = layer_idx
1221
+
1222
+ if torch.is_grad_enabled() and self.gradient_checkpointing:
1223
+ hidden_states = self._gradient_checkpointing_func(
1224
+ layer, hidden_states, attention_mask, rotary_emb, temb
1225
+ )
1226
+ else:
1227
+ hidden_states = layer(hidden_states, attention_mask, rotary_emb, temb)
1228
+
1229
+ hidden_states = self.norm_out(hidden_states, temb)
1230
+
1231
+ p = self.config.patch_size
1232
+ output = []
1233
+ for i, (img_size, img_len, seq_len) in enumerate(zip(img_sizes, l_effective_img_len, seq_lengths)):
1234
+ height, width = img_size
1235
+ output.append(rearrange(
1236
+ hidden_states[i][seq_len - img_len:seq_len],
1237
+ '(h w) (p1 p2 c) -> c (h p1) (w p2)',
1238
+ h=height // p, w=width // p, p1=p, p2=p,
1239
+ ))
1240
+ if is_hidden_states_tensor:
1241
+ output = torch.stack(output, dim=0)
1242
+
1243
+ if USE_PEFT_BACKEND:
1244
+ unscale_lora_layers(self, lora_scale)
1245
+
1246
+ if enable_taylorseer:
1247
+ self.current['step'] += 1
1248
+
1249
+ if not return_dict:
1250
+ return output
1251
+ return Transformer2DModelOutput(sample=output)
1252
+
1253
+
1254
+ # ---------------------------------------------------------------------------
1255
+ # FlowMatch Euler Discrete Scheduler (merged from scheduling_flow_match_euler_discrete.py)
1256
+ # ---------------------------------------------------------------------------
1257
+
1258
+ @dataclass
1259
+ class FlowMatchEulerDiscreteSchedulerOutput(BaseOutput):
1260
+ prev_sample: torch.FloatTensor
1261
+
1262
+
1263
+ class FlowMatchEulerDiscreteScheduler(SchedulerMixin, ConfigMixin):
1264
+ _compatibles = []
1265
+ order = 1
1266
+
1267
+ @register_to_config
1268
+ def __init__(self, num_train_timesteps: int = 1000, dynamic_time_shift: bool = False):
1269
+ timesteps = torch.linspace(0, 1, num_train_timesteps + 1, dtype=torch.float32)[:-1]
1270
+ self.timesteps = timesteps
1271
+ self._step_index = None
1272
+ self._begin_index = None
1273
+
1274
+ @property
1275
+ def step_index(self):
1276
+ return self._step_index
1277
+
1278
+ @property
1279
+ def begin_index(self):
1280
+ return self._begin_index
1281
+
1282
+ def set_begin_index(self, begin_index: int = 0):
1283
+ self._begin_index = begin_index
1284
+
1285
+ def index_for_timestep(self, timestep, schedule_timesteps=None):
1286
+ if schedule_timesteps is None:
1287
+ schedule_timesteps = self._timesteps
1288
+ indices = (schedule_timesteps == timestep).nonzero()
1289
+ pos = 1 if len(indices) > 1 else 0
1290
+ return indices[pos].item()
1291
+
1292
+ def set_timesteps(self, num_inference_steps=None, device=None, timesteps=None, num_tokens=None):
1293
+ if timesteps is None:
1294
+ self.num_inference_steps = num_inference_steps
1295
+ timesteps = np.linspace(0, 1, num_inference_steps + 1, dtype=np.float32)[:-1]
1296
+ if self.config.dynamic_time_shift and num_tokens is not None:
1297
+ m = np.sqrt(num_tokens) / 40
1298
+ timesteps = timesteps / (m - m * timesteps + timesteps)
1299
+ timesteps = torch.from_numpy(timesteps).to(dtype=torch.float32, device=device)
1300
+ _timesteps = torch.cat([timesteps, torch.ones(1, device=timesteps.device)])
1301
+ self.timesteps = timesteps
1302
+ self._timesteps = _timesteps
1303
+ self._step_index = None
1304
+ self._begin_index = None
1305
+
1306
+ def _init_step_index(self, timestep):
1307
+ if self.begin_index is None:
1308
+ if isinstance(timestep, torch.Tensor):
1309
+ timestep = timestep.to(self.timesteps.device)
1310
+ self._step_index = self.index_for_timestep(timestep)
1311
+ else:
1312
+ self._step_index = self._begin_index
1313
+
1314
+ def step(self, model_output, timestep, sample, generator=None, return_dict=True):
1315
+ if isinstance(timestep, (int, torch.IntTensor, torch.LongTensor)):
1316
+ raise ValueError("Pass scheduler.timesteps values, not integer indices.")
1317
+ if self.step_index is None:
1318
+ self._init_step_index(timestep)
1319
+ sample = sample.to(torch.float32)
1320
+ t = self._timesteps[self.step_index]
1321
+ t_next = self._timesteps[self.step_index + 1]
1322
+ prev_sample = sample + (t_next - t) * model_output
1323
+ prev_sample = prev_sample.to(model_output.dtype)
1324
+ self._step_index += 1
1325
+ if not return_dict:
1326
+ return (prev_sample,)
1327
+ return FlowMatchEulerDiscreteSchedulerOutput(prev_sample=prev_sample)
1328
+
1329
+ def __len__(self):
1330
+ return self.config.num_train_timesteps
native/visual.py ADDED
@@ -0,0 +1,1068 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Iterable, Optional, Tuple
2
+
3
+ import numpy as np
4
+ from safetensors.torch import load_file
5
+ import torch
6
+ import torch.utils.checkpoint
7
+ from torch import nn
8
+ from torch.amp import autocast
9
+ from torch.nn import functional as F
10
+
11
+ from einops import rearrange
12
+ from .compat import flash_attn_varlen_func
13
+
14
+ from transformers.activations import ACT2FN
15
+ from transformers.modeling_outputs import BaseModelOutput
16
+ from .qwen2_5_vl_vit import Qwen2RMSNorm, Qwen2_5_VisionTransformerPretrainedModel
17
+ from transformers.utils import logging
18
+
19
+
20
+ logger = logging.get_logger(__name__)
21
+
22
+
23
+ def uniform_init(*shape):
24
+ t = torch.zeros(shape)
25
+ nn.init.kaiming_uniform_(t)
26
+ return t
27
+
28
+ class VQEmbedding(nn.Module):
29
+ """VQ embedding module with ema update."""
30
+
31
+ def __init__(self, n_embed, embed_dim, ema=True, decay=0.99, restart_unused_codes=True, eps=1e-5, init_std=0.02):
32
+ super().__init__()
33
+
34
+ self.ema = ema
35
+ self.decay = decay
36
+ self.eps = eps
37
+ self.restart_unused_codes = restart_unused_codes
38
+ self.n_embed = n_embed
39
+ self.init_std = init_std
40
+
41
+ assert self.ema
42
+ embed = uniform_init(n_embed + 1, embed_dim).to(torch.float32)
43
+ self.embed = nn.Parameter(embed)
44
+ self.embed_ema = nn.Parameter(embed[:-1, :].clone())
45
+ self.cluster_size_ema = nn.Parameter(torch.ones(n_embed))
46
+ del embed
47
+ _ = [p.requires_grad_(False) for p in self.parameters()]
48
+
49
+ @torch.no_grad()
50
+ def compute_distances(self, inputs):
51
+ codebook_t = self.embed[:-1, :].t()
52
+
53
+ (embed_dim, _) = codebook_t.shape
54
+ inputs_shape = inputs.shape
55
+ assert inputs_shape[-1] == embed_dim
56
+
57
+ inputs_flat = inputs.reshape(-1, embed_dim)
58
+
59
+ inputs_norm_sq = inputs_flat.pow(2.).sum(dim=1, keepdim=True)
60
+ codebook_t_norm_sq = codebook_t.pow(2.).sum(dim=0, keepdim=True)
61
+ distances = torch.addmm(
62
+ inputs_norm_sq + codebook_t_norm_sq,
63
+ inputs_flat,
64
+ codebook_t,
65
+ alpha=-2.0,
66
+ )
67
+ distances = distances.reshape(*inputs_shape[:-1], -1) # [B, h, w, n_embed or n_embed+1]
68
+ return distances
69
+
70
+ @torch.no_grad()
71
+ def find_nearest_embedding(self, inputs):
72
+ distances = self.compute_distances(inputs) # [B, h, w, n_embed or n_embed+1]
73
+ embed_idxs = distances.argmin(dim=-1) # use padding index or not
74
+
75
+ return embed_idxs
76
+
77
+ @autocast('cuda', enabled=True, dtype=torch.float32)
78
+ @torch.no_grad()
79
+ def forward(self, inputs):
80
+ if inputs.dtype != torch.float32:
81
+ inputs = inputs.to(torch.float32)
82
+ embed_idxs = self.find_nearest_embedding(inputs)
83
+ embeds = self.embed[embed_idxs]
84
+ return embeds, embed_idxs
85
+
86
+
87
+ class RQBottleneck(nn.Module):
88
+ """
89
+ Quantization bottleneck via Residual Quantization.
90
+
91
+ Arguments:
92
+ latent_shape (Tuple[int, int, int]): the shape of latents, denoted (H, W, D)
93
+ code_shape (Tuple[int, int, int]): the shape of codes, denoted (h, w, d)
94
+ n_embed (int, List, or Tuple): the number of embeddings (i.e., the size of codebook)
95
+ If isinstance(n_embed, int), the sizes of all codebooks are same.
96
+ shared_codebook (bool): If True, codebooks are shared in all location. If False,
97
+ uses separate codebooks along the ``depth'' dimension. (default: False)
98
+ restart_unused_codes (bool): If True, it randomly assigns a feature vector in the curruent batch
99
+ as the new embedding of unused codes in training. (default: True)
100
+ """
101
+
102
+ def __init__(self,
103
+ latent_shape,
104
+ code_shape,
105
+ n_embed,
106
+ decay=0.99,
107
+ shared_codebook=False,
108
+ restart_unused_codes=True,
109
+ commitment_loss='cumsum'
110
+ ):
111
+ super().__init__()
112
+
113
+ if not len(code_shape) == len(latent_shape) == 3:
114
+ raise ValueError("incompatible code shape or latent shape")
115
+ if any([y % x != 0 for x, y in zip(code_shape[:2], latent_shape[:2])]):
116
+ raise ValueError("incompatible code shape or latent shape")
117
+
118
+ #residual quantization does not divide feature dims for quantization.
119
+ embed_dim = np.prod(latent_shape[:2]) // np.prod(code_shape[:2]) * latent_shape[2]
120
+
121
+ self.latent_shape = torch.Size(latent_shape)
122
+ self.code_shape = torch.Size(code_shape)
123
+ self.shape_divisor = torch.Size([latent_shape[i] // code_shape[i] for i in range(len(latent_shape))])
124
+
125
+ self.shared_codebook = shared_codebook
126
+ if self.shared_codebook:
127
+ if isinstance(n_embed, Iterable) or isinstance(decay, Iterable):
128
+ raise ValueError("Shared codebooks are incompatible \
129
+ with list types of momentums or sizes: Change it into int")
130
+
131
+ self.restart_unused_codes = restart_unused_codes
132
+ self.n_embed = n_embed if isinstance(n_embed, Iterable) else [n_embed for _ in range(self.code_shape[-1])]
133
+ self.decay = decay if isinstance(decay, Iterable) else [decay for _ in range(self.code_shape[-1])]
134
+ assert len(self.n_embed) == self.code_shape[-1]
135
+ assert len(self.decay) == self.code_shape[-1]
136
+
137
+ if self.shared_codebook:
138
+ codebook0 = VQEmbedding(self.n_embed[0],
139
+ embed_dim,
140
+ decay=self.decay[0],
141
+ restart_unused_codes=restart_unused_codes,
142
+ ).to(torch.float32)
143
+ self.codebooks = nn.ModuleList([codebook0 for _ in range(self.code_shape[-1])])
144
+ else:
145
+ codebooks = [VQEmbedding(self.n_embed[idx],
146
+ embed_dim,
147
+ decay=self.decay[idx],
148
+ restart_unused_codes=restart_unused_codes,
149
+ ).to(torch.float32) for idx in range(self.code_shape[-1])]
150
+ self.codebooks = nn.ModuleList(codebooks)
151
+
152
+ self.commitment_loss = commitment_loss
153
+
154
+ def to_code_shape(self, x):
155
+ (B, H, W, D) = x.shape
156
+ (rH, rW, _) = self.shape_divisor
157
+
158
+ x = x.reshape(B, H//rH, rH, W//rW, rW, D)
159
+ x = x.permute(0, 1, 3, 2, 4, 5)
160
+ x = x.reshape(B, H//rH, W//rW, -1)
161
+
162
+ return x
163
+
164
+ def to_latent_shape(self, x):
165
+ (B, h, w, _) = x.shape
166
+ (_, _, D) = self.latent_shape
167
+ (rH, rW, _) = self.shape_divisor
168
+
169
+ x = x.reshape(B, h, w, rH, rW, D)
170
+ x = x.permute(0, 1, 3, 2, 4, 5)
171
+ x = x.reshape(B, h*rH, w*rW, D)
172
+
173
+ return x
174
+
175
+ def quantize(self, x):
176
+ r"""
177
+ Return list of quantized features and the selected codewords by the residual quantization.
178
+ The code is selected by the residuals between x and quantized features by the previous codebooks.
179
+
180
+ Arguments:
181
+ x (Tensor): bottleneck feature maps to quantize.
182
+
183
+ Returns:
184
+ quant_list (list): list of sequentially aggregated and quantized feature maps by codebooks.
185
+ codes (LongTensor): codewords index, corresponding to quants.
186
+
187
+ Shape:
188
+ - x: (B, h, w, embed_dim)
189
+ - quant_list[i]: (B, h, w, embed_dim)
190
+ - codes: (B, h, w, d)
191
+ """
192
+ B, h, w, embed_dim = x.shape
193
+ ori_dtype = x.dtype
194
+ x = x.to(torch.float32)
195
+ self.codebooks = self.codebooks.to(torch.float32)
196
+
197
+ residual_feature = x.detach().clone()
198
+
199
+ quant_list = []
200
+ code_list = []
201
+ aggregated_quants = torch.zeros_like(x)
202
+ for i in range(self.code_shape[-1]):
203
+ quant, code = self.codebooks[i](residual_feature)
204
+ residual_feature.sub_(quant)
205
+ aggregated_quants.add_(quant)
206
+ quant_list.append(aggregated_quants.clone().to(dtype=ori_dtype))
207
+ code_list.append(code.unsqueeze(-1))
208
+
209
+ codes = torch.cat(code_list, dim=-1)
210
+ return quant_list, codes
211
+
212
+ def forward(self, x):
213
+ x_reshaped = self.to_code_shape(x)
214
+ # 强制使用float32精度来执行
215
+ quant_list, codes = self.quantize(x_reshaped)
216
+ # quant_list, codes = self.quantize(x_reshaped)
217
+
218
+ commitment_loss = self.compute_commitment_loss(x_reshaped, quant_list)
219
+ quants_trunc = self.to_latent_shape(quant_list[-1])
220
+ quants_trunc = x + (quants_trunc - x).detach()
221
+
222
+ '''
223
+ if self.shared_codebook:
224
+ cur_len = codes.view(-1).shape[0]
225
+ self.codebook_used[:-cur_len] = self.codebook_used[cur_len:].clone()
226
+ self.codebook_used[-cur_len:] = codes.view(-1)
227
+ codebook_usage = len(torch.unique(self.codebook_used)) / self.n_embed[0]
228
+ else:
229
+ # info|code: torch.Size([10, 16, 16, 4])
230
+ codebook_usage = 0
231
+ for idx in range(self.code_shape[-1]):
232
+ cur_len = codes[..., idx].view(-1).shape[0]
233
+ self.codebook_used[idx, :-cur_len] = self.codebook_used[idx, cur_len:].clone()
234
+ self.codebook_used[idx, -cur_len:] = codes[..., idx].view(-1)
235
+ codebook_usage += len(torch.unique(self.codebook_used[idx]))
236
+ codebook_usage /= (self.n_embed[0] * self.code_shape[-1])
237
+ '''
238
+ codebook_usage = 0
239
+ # (vq_loss, commit_loss, entropy_loss, codebook_usage) # 格式对齐
240
+ codebook_loss = [0, commitment_loss, 0, codebook_usage]
241
+
242
+ return quants_trunc, codebook_loss, codes
243
+
244
+ def compute_commitment_loss(self, x, quant_list):
245
+ r"""
246
+ Compute the commitment loss for the residual quantization.
247
+ The loss is iteratively computed by aggregating quantized features.
248
+ """
249
+ loss_list = []
250
+
251
+ for idx, quant in enumerate(quant_list):
252
+ partial_loss = (x-quant.detach()).pow(2.0).mean()
253
+ loss_list.append(partial_loss)
254
+
255
+ commitment_loss = torch.mean(torch.stack(loss_list))
256
+ return commitment_loss
257
+
258
+
259
+
260
+ class Qwen2_5_VisionRotaryEmbedding_Modified(nn.Module):
261
+ def __init__(self, dim: int, theta: float = 10000.0) -> None:
262
+ super().__init__()
263
+ self.inv_freq = 1.0 / (theta ** (torch.arange(0, dim, 2, dtype=torch.float) / dim))
264
+ # self.register_buffer("inv_freq", inv_freq, persistent=False)
265
+
266
+ def forward(self, seqlen: int, device: torch.device) -> torch.Tensor:
267
+ self.inv_freq = self.inv_freq.to(device)
268
+ seq = torch.arange(seqlen, device=self.inv_freq.device, dtype=self.inv_freq.dtype)
269
+ freqs = torch.outer(seq, self.inv_freq)
270
+ return freqs
271
+
272
+ class VisualEncoder(Qwen2_5_VisionTransformerPretrainedModel):
273
+
274
+ def __init__(self, config):
275
+ config._attn_implementation = 'flash_attention_2' if torch.cuda.is_available() else 'eager'
276
+ super().__init__(config)
277
+ self.rotary_pos_emb = Qwen2_5_VisionRotaryEmbedding_Modified(config.hidden_size // config.num_heads // 2)
278
+ self.gradient_checkpointing = False
279
+ self._gradient_checkpointing_func = torch.utils.checkpoint.checkpoint
280
+ self.merge_size = config.merge_size if hasattr(config, 'merge_size') else 2
281
+ del self.merger # register visual.merger in visual_bridge_model
282
+
283
+ def get_dtype(self) -> torch.dtype:
284
+ return self.blocks[0].mlp.down_proj.weight.dtype
285
+
286
+ def get_device(self) -> torch.device:
287
+ return self.blocks[0].mlp.down_proj.weight.device
288
+
289
+ def rot_pos_emb(self, grid_thw):
290
+ pos_ids = []
291
+ for t, h, w in grid_thw:
292
+ hpos_ids = torch.arange(h).unsqueeze(1).expand(-1, w)
293
+ hpos_ids = hpos_ids.reshape(
294
+ h // self.spatial_merge_size,
295
+ self.spatial_merge_size,
296
+ w // self.spatial_merge_size,
297
+ self.spatial_merge_size,
298
+ )
299
+ hpos_ids = hpos_ids.permute(0, 2, 1, 3)
300
+ hpos_ids = hpos_ids.flatten()
301
+
302
+ wpos_ids = torch.arange(w).unsqueeze(0).expand(h, -1)
303
+ wpos_ids = wpos_ids.reshape(
304
+ h // self.spatial_merge_size,
305
+ self.spatial_merge_size,
306
+ w // self.spatial_merge_size,
307
+ self.spatial_merge_size,
308
+ )
309
+ wpos_ids = wpos_ids.permute(0, 2, 1, 3)
310
+ wpos_ids = wpos_ids.flatten()
311
+ pos_ids.append(torch.stack([hpos_ids, wpos_ids], dim=-1).repeat(t, 1))
312
+ pos_ids = torch.cat(pos_ids, dim=0)
313
+ max_grid_size = grid_thw[:, 1:].max()
314
+ rotary_pos_emb_full = self.rotary_pos_emb(max_grid_size, device=grid_thw.device)
315
+ rotary_pos_emb = rotary_pos_emb_full[pos_ids].flatten(1)
316
+ return rotary_pos_emb
317
+
318
+ def forward(
319
+ self,
320
+ pixel_values: torch.Tensor,
321
+ grid_thw: torch.Tensor,
322
+ require_window_index: bool = False,
323
+ ):
324
+ '''
325
+ pixel_values.shape=[NumOfPatches, 1176]
326
+ grid_thw.shape=[NumOfSamples, 3]. [grid_t,grid_h,grid_w]
327
+ '''
328
+ hidden_states = pixel_values.to(torch.bfloat16)
329
+ grid_thw = grid_thw.to(pixel_values.device)
330
+
331
+ hidden_states = self.patch_embed(hidden_states)
332
+ rotary_pos_emb = self.rot_pos_emb(grid_thw)
333
+ window_index, cu_window_seqlens = self.get_window_index(grid_thw)
334
+ cu_window_seqlens = torch.tensor(
335
+ cu_window_seqlens,
336
+ device=hidden_states.device,
337
+ dtype=grid_thw.dtype if torch.jit.is_tracing() else torch.int32,
338
+ )
339
+ cu_window_seqlens = torch.unique_consecutive(cu_window_seqlens)
340
+
341
+ seq_len, _ = hidden_states.size()
342
+ hidden_states = hidden_states.reshape(seq_len // self.spatial_merge_unit, self.spatial_merge_unit, -1)
343
+ hidden_states = hidden_states[window_index, :, :]
344
+ hidden_states = hidden_states.reshape(seq_len, -1)
345
+ rotary_pos_emb = rotary_pos_emb.reshape(seq_len // self.spatial_merge_unit, self.spatial_merge_unit, -1)
346
+ rotary_pos_emb = rotary_pos_emb[window_index, :, :]
347
+ rotary_pos_emb = rotary_pos_emb.reshape(seq_len, -1)
348
+ emb = torch.cat((rotary_pos_emb, rotary_pos_emb), dim=-1)
349
+ position_embeddings = (emb.cos(), emb.sin())
350
+
351
+ cu_seqlens = torch.repeat_interleave(grid_thw[:, 1] * grid_thw[:, 2], grid_thw[:, 0]).cumsum(
352
+ dim=0,
353
+ # Select dtype based on the following factors:
354
+ # - FA2 requires that cu_seqlens_q must have dtype int32
355
+ # - torch.onnx.export requires that cu_seqlens_q must have same dtype as grid_thw
356
+ # See https://github.com/huggingface/transformers/pull/34852 for more information
357
+ dtype=grid_thw.dtype if torch.jit.is_tracing() else torch.int32,
358
+ )
359
+ cu_seqlens = F.pad(cu_seqlens, (1, 0), value=0)
360
+
361
+ for layer_num, blk in enumerate(self.blocks):
362
+ if layer_num in self.fullatt_block_indexes:
363
+ cu_seqlens_now = cu_seqlens
364
+ else:
365
+ cu_seqlens_now = cu_window_seqlens
366
+ if self.gradient_checkpointing and self.training:
367
+ hidden_states = self._gradient_checkpointing_func(blk.__call__, hidden_states, cu_seqlens_now, None, position_embeddings)
368
+ else:
369
+ hidden_states = blk(
370
+ hidden_states,
371
+ cu_seqlens=cu_seqlens_now,
372
+ position_embeddings=position_embeddings,
373
+ )
374
+
375
+ if require_window_index:
376
+ return hidden_states, window_index
377
+ return hidden_states
378
+
379
+
380
+ class OmniVisualBridge(nn.Module):
381
+ def __init__(self, config):
382
+ super().__init__()
383
+ self.config = config
384
+ self.merge_size = self.config.merge_size if hasattr(self.config, 'merge_size') else 2
385
+ self.hidden_size = self.config.hidden_size * (self.merge_size**2)
386
+ self.window_index = self.config.window_size
387
+ self.ln_q = Qwen2RMSNorm(self.config.hidden_size, eps=1e-6)
388
+ self.mlp = nn.Sequential(
389
+ nn.Linear(self.hidden_size, self.hidden_size),
390
+ nn.GELU(),
391
+ nn.Linear(self.hidden_size, self.config.out_hidden_size),
392
+ )
393
+
394
+ def forward(self, x: torch.Tensor, window_index) -> torch.Tensor:
395
+ x = self.mlp(self.ln_q(x).view(-1, self.hidden_size))
396
+ reverse_indices = torch.argsort(window_index)
397
+ x = x[reverse_indices, :]
398
+
399
+ return x
400
+
401
+
402
+ class VisualQuantizer(nn.Module):
403
+ def __init__(self, quantizer_config):
404
+ super().__init__()
405
+
406
+ self.config = quantizer_config
407
+ self.depth = self.config.depth
408
+ self.decay = self.config.decay
409
+ self.codebook_size = self.config.codebook_size
410
+ self.codebook_dim = self.config.codebook_dim
411
+ self.shared_codebook = self.config.shared_codebook
412
+ self.restart_unused_codes = self.config.restart_unused_codes
413
+ self.in_channels = self.config.in_channels
414
+
415
+ self.vq_loss_ratio = self.config.vq_loss_ratio
416
+ self.entropy_loss_ratio = self.config.entropy_loss_ratio
417
+ self.commit_loss_ratio = self.config.commit_loss_ratio
418
+
419
+ code_h_w = int(448 / 14)
420
+ latent_shape = [code_h_w, code_h_w, self.codebook_dim]
421
+ code_shape = [code_h_w, code_h_w, self.depth]
422
+
423
+ self.quantize = RQBottleneck(
424
+ latent_shape=latent_shape,
425
+ code_shape=code_shape,
426
+ n_embed=self.codebook_size,
427
+ decay=self.decay,
428
+ shared_codebook=self.shared_codebook,
429
+ restart_unused_codes=self.restart_unused_codes,
430
+ )
431
+
432
+ if self.config.quant_conv:
433
+ self.quant_conv = nn.Sequential(
434
+ nn.LayerNorm(self.in_channels),
435
+ nn.Linear(self.in_channels, self.in_channels),
436
+ nn.GELU(),
437
+ nn.Linear(self.in_channels, self.codebook_dim)
438
+ )
439
+ else:
440
+ self.quant_conv = None
441
+
442
+ def encode(self, x):
443
+ L, D = x.shape
444
+ to_qnt_feat = x.clone()
445
+ to_qnt_feat = to_qnt_feat.unsqueeze(0) # [L, D] -> [1, L, D]
446
+ N = 1
447
+
448
+ if self.quant_conv is not None:
449
+ to_qnt_feat = self.quant_conv(to_qnt_feat)
450
+
451
+ # quantizer needs nchw format. N,L,d -> N,1,L,d -> N,d,1,L
452
+ to_qnt_feat = to_qnt_feat.reshape(N, 1, L, self.codebook_dim).permute(0,3,1,2)
453
+ if self.config.quantizer_type == "rq":
454
+ to_qnt_feat = to_qnt_feat.permute(0, 2, 3, 1).contiguous() # N,d,1,L -> N,1,L,d
455
+ quant, emb_loss, info = self.quantize(to_qnt_feat)
456
+ info = info.reshape(-1, info.shape[-1]) # n,h,w,lv -> n*h*w,lv
457
+ info = [None, None, info]
458
+ quant = quant.permute(0, 3, 1, 2).contiguous() # N,1,L,d -> N,d,1,L
459
+ else:
460
+ quant, emb_loss, info = self.quantize(to_qnt_feat)
461
+ return quant, emb_loss, info, x.detach()
462
+
463
+ def forward(self, x):
464
+ quant, (vq_loss, commit_loss, entropy_loss, codebook_usage), (perplexity, min_encodings, min_encoding_indices), align_feature = \
465
+ self.encode(x)
466
+ return min_encoding_indices
467
+
468
+
469
+ class MLP(nn.Module):
470
+ def __init__(
471
+ self,
472
+ hidden_size: int,
473
+ intermediate_size: int,
474
+ hidden_act: str,
475
+ ):
476
+ super().__init__()
477
+ self.gate_proj = nn.Linear(hidden_size, intermediate_size, bias=False)
478
+ self.down_proj = nn.Linear(intermediate_size, hidden_size, bias=False)
479
+ self.up_proj = nn.Linear(hidden_size, intermediate_size, bias=False)
480
+ self.act_fn = ACT2FN[hidden_act]
481
+
482
+ def forward(self, x):
483
+ return self.down_proj(self.act_fn(self.gate_proj(x)) * self.up_proj(x))
484
+
485
+ class DecoderLayer(nn.Module):
486
+ def __init__(self, config):
487
+ super().__init__()
488
+ self.hidden_size = config.hidden_size
489
+ self.mlp = MLP(
490
+ hidden_size=self.hidden_size,
491
+ intermediate_size=config.visual_embedding_layer_intermediate_size,
492
+ hidden_act=config.visual_embedding_layer_hidden_act,
493
+ )
494
+ self.pre_layernorm = nn.LayerNorm(config.hidden_size, eps=config.rms_norm_eps)
495
+
496
+ def forward(
497
+ self,
498
+ hidden_states: torch.Tensor,
499
+ ):
500
+ residual = hidden_states
501
+ hidden_states = self.pre_layernorm(hidden_states)
502
+ hidden_states = self.mlp(hidden_states)
503
+ hidden_states = residual + hidden_states
504
+
505
+ return hidden_states
506
+
507
+
508
+ class VisualEmbeddingBridge(nn.Module):
509
+ def __init__(self, config):
510
+ super().__init__()
511
+ self.pre_buffer = DecoderLayer(config)
512
+
513
+ def forward(self, embeding):
514
+ return self.pre_buffer(embeding)
515
+
516
+
517
+ class VisualVQBridge(nn.Module):
518
+ def __init__(self, visual_config):
519
+ super().__init__()
520
+ self.bridge = OmniVisualBridge(visual_config)
521
+ self.quantizer = VisualQuantizer(visual_config.vq_config)
522
+
523
+ def forward(
524
+ self,
525
+ visual_embed: torch.Tensor,
526
+ window_index: torch.Tensor,
527
+ ):
528
+ visual_embed = self.bridge(visual_embed, window_index)
529
+ indices = self.quantizer(visual_embed)
530
+ return indices
531
+
532
+
533
+ class LongcatNextVisualTokenizer(nn.Module):
534
+
535
+ def __init__(self, config):
536
+ super().__init__()
537
+ self.config = config
538
+ self.visual_model = VisualEncoder(config.visual_config)
539
+ self.visual_bridge_model = VisualVQBridge(config.visual_config)
540
+ self.visual_embedding_layer = VisualEmbeddingBridge(config)
541
+ self.image_decoder = None
542
+ self._refiner_pipeline = None
543
+
544
+ @torch.no_grad()
545
+ def encode(self, pixel_values: torch.Tensor, visual_grid_thw: torch.Tensor):
546
+ visual_embed, window_index = self.visual_model(pixel_values, grid_thw=visual_grid_thw, require_window_index=True)
547
+ indices = self.visual_bridge_model(visual_embed, window_index)
548
+ return indices
549
+
550
+ @torch.no_grad()
551
+ def lazy_decode_and_save(self, visual_ids, tokens_h, tokens_w, save_path):
552
+ from .image_refiner import ImageRefinerContainer, RefinerImageProcessor, RefinerPipeline, de_transform, tensor2pil
553
+ from .refiner_modules import FlowMatchEulerDiscreteScheduler
554
+ device = next(self.parameters()).device
555
+ if self.image_decoder is None:
556
+ print("lazy load image_decoder / image_refiner / _refiner_pipeline ...")
557
+ vdc = self.config.visual_config.visual_decoder_config
558
+ self.image_decoder = VisionTransformerDecoder.from_pretrained(
559
+ vdc.image_decoder_config,
560
+ vdc.weight_path,
561
+ ).to(device=device, dtype=torch.bfloat16)
562
+ image_refiner = ImageRefinerContainer.from_pretrained(vdc, vdc.weight_path).to(device=device, dtype=torch.bfloat16)
563
+
564
+ sc = vdc.scheduler_config
565
+ scheduler = FlowMatchEulerDiscreteScheduler(
566
+ num_train_timesteps=sc.num_train_timesteps,
567
+ dynamic_time_shift=sc.dynamic_time_shift)
568
+ self._refiner_pipeline = RefinerPipeline(
569
+ vae=image_refiner.vae,
570
+ transformer=image_refiner.base_transformer,
571
+ scheduler=scheduler,
572
+ cond_proj=image_refiner.cond_proj,
573
+ )
574
+ self._refiner_pipeline.set_progress_bar_config(disable=False)
575
+
576
+ data = torch.as_tensor(visual_ids, dtype=torch.long)
577
+ if data.ndim == 1:
578
+ data = data.view(-1, len(self.config.visual_config.vq_config.codebook_sizes))
579
+ if data.ndim == 2:
580
+ data = data.unsqueeze(0)
581
+ batch_size = data.shape[0]
582
+
583
+ quant_features = None
584
+ for idx in range(len(self.config.visual_config.vq_config.codebook_sizes)):
585
+ embed = self.visual_bridge_model.quantizer.quantize.codebooks[idx].embed
586
+ feat = embed[data[..., idx].to(embed.device)]
587
+ quant_features = feat if quant_features is None else quant_features + feat
588
+ quant_features = quant_features.to(device)
589
+
590
+ # tokens_h/tokens_w are the merged grid; expand to the full (unmerged) grid
591
+ s = self.image_decoder.spatial_merge_size
592
+ grid_thw_list = [(1, tokens_h * s, tokens_w * s)]
593
+ grid_thw_batch = list(grid_thw_list) * batch_size
594
+
595
+ image_mean = [0.48145466, 0.4578275, 0.40821073]
596
+ image_std = [0.26862954, 0.26130258, 0.27577711]
597
+
598
+ emb_2d = quant_features.reshape(-1, quant_features.shape[-1]).contiguous()
599
+ device_type = "cuda" if str(device).startswith("cuda") else str(device)
600
+ with torch.amp.autocast(device_type=device_type, enabled=True, dtype=torch.float32):
601
+ decoder_out = self.image_decoder(emb_2d, grid_thw_batch, return_pixel_features=False)
602
+
603
+ decoded_tensors = decoder_out.get("images") or []
604
+ decoded_images = [tensor2pil(t, image_mean, image_std) for t in decoded_tensors]
605
+ decoded_path = save_path.replace(".png", "_decoded.png")
606
+ # decoded_images[0].save(decoded_path)
607
+
608
+
609
+ ref_input = []
610
+ for t in decoded_tensors:
611
+ img_01 = de_transform(t, mean=image_mean, std=image_std, rescale_factor=1 / 255)
612
+ img_norm = RefinerImageProcessor.normalize(img_01)
613
+ ref_input.append(img_norm.squeeze(0).to(device))
614
+
615
+ generators = [torch.Generator(device=device).manual_seed(42 + b) for b in range(batch_size)]
616
+ out = self._refiner_pipeline(
617
+ encoder_hidden_states=quant_features,
618
+ grid_thw_list=grid_thw_list,
619
+ image=ref_input,
620
+ generator=generators[0] if batch_size == 1 else generators,
621
+ output_type="pil",
622
+ return_dict=True,
623
+ )
624
+ refined_images = out.images
625
+ refined_path = save_path.replace(".png", "_refined.png")
626
+ refined_images[0].save(refined_path)
627
+
628
+ return [refined_path]
629
+
630
+
631
+ # ---------------------------------------------------------------------------
632
+ # Vision Transformer Decoder
633
+ # ---------------------------------------------------------------------------
634
+
635
+ def _rotate_half(x):
636
+ x = rearrange(x, "... (d r) -> ... d r", r=2)
637
+ x1, x2 = x.unbind(dim=-1)
638
+ x = torch.stack((-x2, x1), dim=-1)
639
+ return rearrange(x, "... d r -> ... (d r)")
640
+
641
+
642
+ class VisionRoPE2D(nn.Module):
643
+ """2D Rotary Position Embedding for Q/K in vision decoder attention."""
644
+
645
+ def __init__(self, theta: float = 10000.0):
646
+ super().__init__()
647
+ self.theta = theta
648
+
649
+ def _rope_half(self, x_half, pos_1d, theta):
650
+ BH, T, d_half = x_half.shape
651
+ idx = torch.arange(0, d_half, 2, device=x_half.device, dtype=torch.float32)
652
+ inv_freq = (1.0 / (theta ** (idx / d_half))).to(x_half.dtype)
653
+ angles = pos_1d.to(x_half.dtype)[:, None] * inv_freq[None, :]
654
+ cos = torch.repeat_interleave(torch.cos(angles), 2, dim=-1).unsqueeze(0)
655
+ sin = torch.repeat_interleave(torch.sin(angles), 2, dim=-1).unsqueeze(0)
656
+ return x_half * cos + _rotate_half(x_half) * sin
657
+
658
+ def forward(self, x, positions_2d):
659
+ d_half = x.shape[-1] // 2
660
+ x_y = self._rope_half(x[:, :, :d_half], positions_2d[:, 0], self.theta)
661
+ x_x = self._rope_half(x[:, :, d_half:], positions_2d[:, 1], self.theta)
662
+ return torch.cat([x_y, x_x], dim=-1)
663
+
664
+
665
+ class VisionAttention(nn.Module):
666
+ """Multi-headed attention with 2D RoPE + FlashAttention varlen."""
667
+
668
+ def __init__(self, config, rope=None, rope_shift=0):
669
+ super().__init__()
670
+ self.config = config
671
+ self.embed_dim = config.hidden_size
672
+ self.num_heads = config.num_attention_heads
673
+ self.head_dim = self.embed_dim // self.num_heads
674
+ if self.head_dim * self.num_heads != self.embed_dim:
675
+ raise ValueError(
676
+ f"embed_dim must be divisible by num_heads (got embed_dim={self.embed_dim}, num_heads={self.num_heads})"
677
+ )
678
+ self.scale = self.head_dim ** -0.5
679
+ self.dropout = config.attention_dropout
680
+ self.subln = config.subln
681
+ self.k_proj = nn.Linear(self.embed_dim, self.embed_dim, bias=getattr(config, "k_bias", True))
682
+ self.v_proj = nn.Linear(self.embed_dim, self.embed_dim, bias=getattr(config, "v_bias", True))
683
+ self.q_proj = nn.Linear(self.embed_dim, self.embed_dim, bias=getattr(config, "q_bias", True))
684
+ self.inner_attn_ln = Qwen2RMSNorm(self.embed_dim, eps=config.layer_norm_eps) if config.subln else nn.Identity()
685
+ self.out_proj = nn.Linear(self.embed_dim, self.embed_dim, bias=True)
686
+ self.rope = rope
687
+ self.rope_shift = int(rope_shift)
688
+
689
+ def _shape(self, tensor: torch.Tensor, seq_len: int, bsz: int):
690
+ return tensor.view(bsz, seq_len, self.num_heads, self.head_dim).transpose(1, 2).contiguous()
691
+
692
+ def _maybe_flash_attention(self, query_states, key_states, value_states, seq_lens, training):
693
+ if not (query_states.is_cuda and (query_states.dtype in (torch.float16, torch.bfloat16, torch.float32))):
694
+ return None
695
+ if seq_lens is None:
696
+ return None
697
+ try:
698
+ BxH, T, hd = query_states.shape
699
+ H = self.num_heads
700
+ assert BxH % H == 0
701
+ B = BxH // H
702
+ if int(seq_lens.sum().item()) != T:
703
+ return None
704
+ q = query_states.view(B, H, T, hd).transpose(1, 2).reshape(-1, H, hd).contiguous()
705
+ k = key_states.view(B, H, T, hd).transpose(1, 2).reshape(-1, H, hd).contiguous()
706
+ v = value_states.view(B, H, T, hd).transpose(1, 2).reshape(-1, H, hd).contiguous()
707
+ cu_q = torch.zeros(seq_lens.numel() + 1, dtype=torch.int32, device=seq_lens.device)
708
+ cu_q[1:] = torch.cumsum(seq_lens.to(torch.int32), dim=0)
709
+ cu_k = cu_q
710
+ max_seqlen = int(seq_lens.max().item())
711
+ orig_dtype = q.dtype
712
+ use_dtype = q.dtype if q.dtype in (torch.float16, torch.bfloat16) else torch.float16
713
+ if q.dtype != use_dtype:
714
+ q = q.to(use_dtype)
715
+ k = k.to(use_dtype)
716
+ v = v.to(use_dtype)
717
+ out = flash_attn_varlen_func(
718
+ q, k, v, cu_q, cu_k, max_seqlen, max_seqlen,
719
+ dropout_p=self.dropout if training else 0.0,
720
+ softmax_scale=None, causal=False, return_attn_probs=False
721
+ )
722
+ if out.dtype != orig_dtype:
723
+ out = out.to(orig_dtype)
724
+ return out.view(B, -1, H, hd).transpose(1, 2).contiguous().view(B * H, T, hd)
725
+ except Exception:
726
+ return None
727
+
728
+ def forward(
729
+ self,
730
+ hidden_states: torch.Tensor,
731
+ attention_mask: Optional[torch.Tensor] = None,
732
+ causal_attention_mask: Optional[torch.Tensor] = None,
733
+ output_attentions: Optional[bool] = False,
734
+ positions_2d: Optional[torch.Tensor] = None,
735
+ seq_lens: Optional[torch.Tensor] = None,
736
+ ) -> Tuple[torch.Tensor, Optional[torch.Tensor]]:
737
+ bsz, tgt_len, embed_dim = hidden_states.size()
738
+ query_states = self.q_proj(hidden_states) * self.scale
739
+ key_states = self.k_proj(hidden_states)
740
+ value_states = self.v_proj(hidden_states)
741
+ query_states = self._shape(query_states, tgt_len, bsz).view(bsz * self.num_heads, tgt_len, self.head_dim)
742
+ key_states = self._shape(key_states, tgt_len, bsz).view(bsz * self.num_heads, tgt_len, self.head_dim)
743
+ value_states = self._shape(value_states, tgt_len, bsz).view(bsz * self.num_heads, tgt_len, self.head_dim)
744
+ if self.rope is not None and positions_2d is not None:
745
+ if self.rope_shift > 0:
746
+ q_pref = query_states[:, :self.rope_shift, :]
747
+ k_pref = key_states[:, :self.rope_shift, :]
748
+ q_rot = self.rope(query_states[:, self.rope_shift:, :], positions_2d[self.rope_shift:])
749
+ k_rot = self.rope(key_states[:, self.rope_shift:, :], positions_2d[self.rope_shift:])
750
+ query_states = torch.cat([q_pref, q_rot], dim=1).type_as(value_states)
751
+ key_states = torch.cat([k_pref, k_rot], dim=1).type_as(value_states)
752
+ else:
753
+ query_states = self.rope(query_states, positions_2d).type_as(value_states)
754
+ key_states = self.rope(key_states, positions_2d).type_as(value_states)
755
+ attn_output = self._maybe_flash_attention(
756
+ query_states, key_states, value_states, seq_lens=seq_lens, training=self.training
757
+ )
758
+ if attn_output is not None:
759
+ attn_weights_reshaped = None
760
+ else:
761
+ src_len = key_states.size(1)
762
+ attn_weights = torch.bmm(query_states, key_states.transpose(1, 2))
763
+ if causal_attention_mask is not None:
764
+ attn_weights = attn_weights.view(bsz, self.num_heads, tgt_len, src_len) + causal_attention_mask
765
+ attn_weights = attn_weights.view(bsz * self.num_heads, tgt_len, src_len)
766
+ if attention_mask is not None:
767
+ attn_weights = attn_weights.view(bsz, self.num_heads, tgt_len, src_len) + attention_mask
768
+ attn_weights = attn_weights.view(bsz * self.num_heads, tgt_len, src_len)
769
+ attn_weights = nn.functional.softmax(attn_weights, dim=-1)
770
+ if output_attentions:
771
+ attn_weights_reshaped = attn_weights.view(bsz, self.num_heads, tgt_len, src_len)
772
+ else:
773
+ attn_weights_reshaped = None
774
+ attn_probs = nn.functional.dropout(attn_weights, p=self.dropout, training=self.training)
775
+ attn_output = torch.bmm(attn_probs, value_states)
776
+ attn_output = attn_output.view(bsz, self.num_heads, tgt_len, self.head_dim)
777
+ attn_output = attn_output.transpose(1, 2).reshape(bsz, tgt_len, embed_dim)
778
+ attn_output = self.inner_attn_ln(attn_output)
779
+ attn_output = self.out_proj(attn_output)
780
+ return attn_output, attn_weights_reshaped
781
+
782
+
783
+ class VisionSwiGLU(nn.Module):
784
+ def __init__(self, config):
785
+ super().__init__()
786
+ self.config = config
787
+ self.hidden_size = config.hidden_size
788
+ self.intermediate_size = config.intermediate_size
789
+ self.w1 = nn.Linear(self.hidden_size, self.intermediate_size)
790
+ self.w2 = nn.Linear(self.hidden_size, self.intermediate_size)
791
+ self.w3 = nn.Linear(self.intermediate_size, self.hidden_size)
792
+ self.act_fn = nn.SiLU()
793
+ self.ffn_ln = Qwen2RMSNorm(self.intermediate_size, eps=config.layer_norm_eps) if config.subln else nn.Identity()
794
+
795
+ def forward(self, x):
796
+ x1 = self.w1(x)
797
+ x2 = self.w2(x)
798
+ hidden = self.act_fn(x1) * x2
799
+ x = self.ffn_ln(hidden)
800
+ x = self.w3(x)
801
+ return x
802
+
803
+
804
+ class VisionMLP(nn.Module):
805
+ def __init__(self, config):
806
+ super().__init__()
807
+ self.config = config
808
+ self.activation_fn = ACT2FN[config.hidden_act]
809
+ self.fc1 = nn.Linear(config.hidden_size, config.intermediate_size)
810
+ self.fc2 = nn.Linear(config.intermediate_size, config.hidden_size)
811
+ self.ffn_ln = Qwen2RMSNorm(config.intermediate_size, eps=config.layer_norm_eps) if config.subln else nn.Identity()
812
+
813
+ def forward(self, hidden_states: torch.Tensor) -> torch.Tensor:
814
+ hidden_states = self.fc1(hidden_states)
815
+ hidden_states = self.activation_fn(hidden_states)
816
+ hidden_states = self.ffn_ln(hidden_states)
817
+ hidden_states = self.fc2(hidden_states)
818
+ return hidden_states
819
+
820
+
821
+ class VisionEncoderLayer(nn.Module):
822
+ def __init__(self, config, rope=None, rope_shift=0):
823
+ super().__init__()
824
+ self.embed_dim = config.hidden_size
825
+ self.self_attn = VisionAttention(config, rope=rope, rope_shift=rope_shift)
826
+ self.layer_norm1 = Qwen2RMSNorm(self.embed_dim, eps=config.layer_norm_eps)
827
+ self.mlp = VisionSwiGLU(config) if config.swiglu else VisionMLP(config)
828
+ self.layer_norm2 = Qwen2RMSNorm(self.embed_dim, eps=config.layer_norm_eps)
829
+
830
+ def forward(
831
+ self,
832
+ hidden_states: torch.Tensor,
833
+ attention_mask: Optional[torch.Tensor],
834
+ causal_attention_mask: Optional[torch.Tensor],
835
+ output_attentions: Optional[bool] = False,
836
+ positions_2d: Optional[torch.Tensor] = None,
837
+ seq_lens: Optional[torch.Tensor] = None,
838
+ ) -> Tuple[torch.FloatTensor, Optional[torch.Tensor]]:
839
+ residual = hidden_states
840
+ hidden_states = self.layer_norm1(hidden_states)
841
+ hidden_states, attn_weights = self.self_attn(
842
+ hidden_states=hidden_states,
843
+ attention_mask=attention_mask,
844
+ causal_attention_mask=causal_attention_mask,
845
+ output_attentions=output_attentions,
846
+ positions_2d=positions_2d,
847
+ seq_lens=seq_lens,
848
+ )
849
+ hidden_states = residual + hidden_states
850
+ residual = hidden_states
851
+ hidden_states = self.layer_norm2(hidden_states)
852
+ hidden_states = self.mlp(hidden_states)
853
+ hidden_states = residual + hidden_states
854
+ outputs = (hidden_states,)
855
+ if output_attentions:
856
+ outputs += (attn_weights,)
857
+ return outputs
858
+
859
+
860
+ class VisionEncoder(nn.Module):
861
+ def __init__(self, config, rope=None, rope_shift=0):
862
+ super().__init__()
863
+ self.config = config
864
+ self.layers = nn.ModuleList(
865
+ [VisionEncoderLayer(config, rope=rope, rope_shift=rope_shift) for _ in range(config.num_hidden_layers)]
866
+ )
867
+ self.gradient_checkpointing = False
868
+ self._gradient_checkpointing_func = torch.utils.checkpoint.checkpoint
869
+
870
+ def forward(
871
+ self,
872
+ inputs_embeds: torch.Tensor,
873
+ attention_mask: Optional[torch.Tensor] = None,
874
+ causal_attention_mask: Optional[torch.Tensor] = None,
875
+ output_attentions: Optional[bool] = None,
876
+ output_hidden_states: Optional[bool] = None,
877
+ return_dict: Optional[bool] = None,
878
+ positions_2d: Optional[torch.Tensor] = None,
879
+ seq_lens: Optional[torch.Tensor] = None,
880
+ ):
881
+ output_attentions = output_attentions if output_attentions is not None else False
882
+ output_hidden_states = output_hidden_states if output_hidden_states is not None else False
883
+ return_dict = True if return_dict is None else return_dict
884
+
885
+ encoder_states = () if output_hidden_states else None
886
+ all_attentions = () if output_attentions else None
887
+ hidden_states = inputs_embeds
888
+
889
+ for layer in self.layers:
890
+ if output_hidden_states:
891
+ encoder_states = encoder_states + (hidden_states,)
892
+ if self.gradient_checkpointing and self.training:
893
+ def custom_forward(hs, attn, causal, pos2d, seqlens):
894
+ return layer(
895
+ hs,
896
+ attention_mask=attn,
897
+ causal_attention_mask=causal,
898
+ output_attentions=False,
899
+ positions_2d=pos2d,
900
+ seq_lens=seqlens,
901
+ )[0]
902
+ hidden_states = self._gradient_checkpointing_func(
903
+ custom_forward,
904
+ hidden_states,
905
+ attention_mask if attention_mask is not None else torch.tensor(0., device=hidden_states.device),
906
+ causal_attention_mask if causal_attention_mask is not None else torch.tensor(0., device=hidden_states.device),
907
+ positions_2d,
908
+ seq_lens if seq_lens is not None else torch.tensor([], device=hidden_states.device),
909
+ use_reentrant=False,
910
+ )
911
+ else:
912
+ layer_outputs = layer(
913
+ hidden_states,
914
+ attention_mask,
915
+ causal_attention_mask,
916
+ output_attentions=output_attentions,
917
+ positions_2d=positions_2d,
918
+ seq_lens=seq_lens,
919
+ )
920
+ hidden_states = layer_outputs[0]
921
+ if output_attentions:
922
+ all_attentions = all_attentions + (layer_outputs[1],)
923
+
924
+ if output_hidden_states:
925
+ encoder_states = encoder_states + (hidden_states,)
926
+
927
+ if not return_dict:
928
+ return tuple(v for v in [hidden_states, encoder_states, all_attentions] if v is not None)
929
+
930
+ return BaseModelOutput(
931
+ last_hidden_state=hidden_states,
932
+ hidden_states=encoder_states,
933
+ attentions=all_attentions,
934
+ )
935
+
936
+
937
+ class PatchUnMerger(nn.Module):
938
+ """Learnable inverse of Qwen2_5_VLPatchMerger."""
939
+ def __init__(self, dim, context_dim, spatial_merge_size=2):
940
+ super().__init__()
941
+ self.spatial_merge_size = spatial_merge_size
942
+ self.context_dim = context_dim
943
+ hidden = context_dim * (spatial_merge_size ** 2)
944
+ self.ln_q = Qwen2RMSNorm(dim, eps=1e-6)
945
+ self.mlp = nn.Sequential(nn.Linear(dim, hidden), nn.GELU(), nn.Linear(hidden, hidden))
946
+
947
+ def forward(self, x):
948
+ x = self.mlp(self.ln_q(x))
949
+ return x.view(x.shape[0] * (self.spatial_merge_size ** 2), self.context_dim)
950
+
951
+
952
+ def restore_spatial_structure_and_convert_to_images(patches, grid_thw_list, patch_size,
953
+ channel_dim=3, temporal_patch_size=2, merge_size=2):
954
+ """Convert decoder pixel features back to image tensors [3, H, W]."""
955
+ if isinstance(patches, tuple):
956
+ patches = patches[0]
957
+ image_tensors = []
958
+ ptr = 0
959
+ for grid in grid_thw_list:
960
+ gt, gh, gw = (int(x) for x in (grid if not isinstance(grid, torch.Tensor) else grid.tolist()))
961
+ n = gt * gh * gw
962
+ chunk = patches[ptr:ptr + n]
963
+ ptr += n
964
+ r = chunk.reshape(gt, gh // merge_size, gw // merge_size, merge_size, merge_size,
965
+ channel_dim, temporal_patch_size, patch_size, patch_size)
966
+ r = r.permute(0, 6, 5, 1, 3, 7, 2, 4, 8)
967
+ image_tensors.append(r.reshape(gt * temporal_patch_size, channel_dim, gh * patch_size, gw * patch_size)[0])
968
+ return image_tensors
969
+
970
+
971
+ class VisionTransformerDecoder(nn.Module):
972
+ def __init__(self, config):
973
+ super().__init__()
974
+ self.config = config
975
+ self.embed_dim = config.hidden_size
976
+ self.patch_size = config.patch_size
977
+ self.spatial_merge_size = config.spatial_merge_size
978
+ self.codebook_dim = config.codebook_dim
979
+ self.temporal_patch_size = config.temporal_patch_size
980
+
981
+ self.rope2d = VisionRoPE2D(theta=10000.0)
982
+ self.post_quant_conv = nn.Linear(self.codebook_dim, self.embed_dim)
983
+ self.post_quant_norm = Qwen2RMSNorm(self.embed_dim, eps=config.layer_norm_eps)
984
+ self.patch_unmerger = PatchUnMerger(self.embed_dim, self.embed_dim, self.spatial_merge_size)
985
+ self.norm_in = Qwen2RMSNorm(self.embed_dim, eps=config.layer_norm_eps)
986
+ self.encoder = VisionEncoder(config, rope=self.rope2d, rope_shift=0)
987
+ self.norm_out = Qwen2RMSNorm(self.embed_dim, eps=config.layer_norm_eps)
988
+ self.decoder_head = nn.Sequential(
989
+ nn.Linear(self.embed_dim, config.intermediate_size), nn.GELU(),
990
+ nn.Linear(config.intermediate_size, 3 * self.patch_size * self.patch_size * self.temporal_patch_size),
991
+ )
992
+
993
+ @classmethod
994
+ def from_pretrained(cls, config, model_path: str):
995
+ """Load a pretrained model from a checkpoint."""
996
+ model = cls(config)
997
+ weight_dict = load_file(model_path, device="cpu")
998
+ model.load_state_dict({k.removeprefix("image_decoder."): v for k, v in weight_dict.items() if k.startswith("image_decoder.")}, strict=True)
999
+ model.eval()
1000
+ return model
1001
+
1002
+ def _build_2d_positions(self, grid_thw_list):
1003
+ pos_list = []
1004
+ for (t, gh, gw) in grid_thw_list:
1005
+ for _ in range(int(t)):
1006
+ for y in range(int(gh)):
1007
+ for x in range(int(gw)):
1008
+ pos_list.append([y, x])
1009
+ return torch.tensor(pos_list, dtype=torch.long)
1010
+
1011
+ def _build_attention_mask(self, grid_thw_list, device, dtype, B, num_heads):
1012
+ counts = [int(t) * int(h) * int(w) for (t, h, w) in grid_thw_list]
1013
+ L = sum(counts)
1014
+ mask = torch.zeros((B, num_heads, L, L), device=device, dtype=dtype)
1015
+ s = 0
1016
+ for c in counts:
1017
+ e = s + c
1018
+ if s > 0:
1019
+ mask[:, :, s:e, :s] = float("-inf")
1020
+ if e < L:
1021
+ mask[:, :, s:e, e:] = float("-inf")
1022
+ s = e
1023
+ return mask
1024
+
1025
+ def forward(self, embeddings, grid_thw, return_pixel_features=False, return_last_latent=False):
1026
+ device = embeddings.device
1027
+ grid_thw_list = ([(int(t), int(h), int(w)) for t, h, w in grid_thw.detach().cpu().numpy()]
1028
+ if isinstance(grid_thw, torch.Tensor) else list(grid_thw))
1029
+
1030
+ if embeddings.shape[-1] == self.codebook_dim:
1031
+ embeddings = self.post_quant_conv(embeddings)
1032
+ embeddings = self.post_quant_norm(embeddings)
1033
+
1034
+ unmerged = self.patch_unmerger(embeddings)
1035
+ if unmerged.dim() == 2:
1036
+ unmerged = unmerged.unsqueeze(0)
1037
+ B, L, D = unmerged.shape
1038
+ hidden_states = self.norm_in(unmerged)
1039
+
1040
+ positions_2d = self._build_2d_positions(grid_thw_list).to(device)
1041
+ seq_lens = torch.tensor([int(t) * int(h) * int(w) for (t, h, w) in grid_thw_list],
1042
+ device=device, dtype=torch.int32)
1043
+ assert positions_2d.shape[0] == L, f"positions_2d {positions_2d.shape[0]} != L {L}"
1044
+
1045
+ last_latent = hidden_states.detach().squeeze(0) if return_last_latent else None
1046
+ enc_out = self.encoder(
1047
+ inputs_embeds=hidden_states,
1048
+ attention_mask=None,
1049
+ causal_attention_mask=None,
1050
+ output_attentions=False,
1051
+ output_hidden_states=False,
1052
+ return_dict=True,
1053
+ positions_2d=positions_2d,
1054
+ seq_lens=seq_lens,
1055
+ )
1056
+ hidden_states = enc_out.last_hidden_state
1057
+
1058
+ hidden_states = self.norm_out(hidden_states)
1059
+ pixel_features = self.decoder_head(hidden_states).squeeze(0)
1060
+
1061
+ out_imgs = (None if return_pixel_features else
1062
+ restore_spatial_structure_and_convert_to_images(
1063
+ pixel_features, grid_thw_list, self.patch_size,
1064
+ temporal_patch_size=self.temporal_patch_size, merge_size=self.spatial_merge_size))
1065
+ ret = {"images": out_imgs, "pixel_features": pixel_features}
1066
+ if last_latent is not None:
1067
+ ret["last_latent"] = last_latent
1068
+ return ret
refiner/alias_verification.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {}
refiner/aliases.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {}
refiner/extraction.json ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "source_repo": "meituan-longcat/LongCat-Next",
3
+ "source_revision": "0cf0631862402ff36366e513e4023d22e7e5c84c",
4
+ "source_tensor_entries": 582,
5
+ "stored_tensor_entries": 582,
6
+ "tensor_bytes": 7934322800,
7
+ "source_tensor_bytes_equal": true,
8
+ "aliases_verified": 0,
9
+ "sha256": "fb94553b718c6686170f7eb73d97f59d8f3e49f3e7d2436539ad424efaef1f28",
10
+ "transform": "Selection only; names, shapes, dtype and payload bytes unchanged."
11
+ }
refiner/model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:fb94553b718c6686170f7eb73d97f59d8f3e49f3e7d2436539ad424efaef1f28
3
+ size 7934402936
refiner/source_config.json ADDED
@@ -0,0 +1,286 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "architectures": [
3
+ "LongcatNextForCausalLM"
4
+ ],
5
+ "attention_bias": false,
6
+ "attention_dropout": 0.0,
7
+ "auto_map": {
8
+ "AutoConfig": "configuration_longcat_next.LongcatNextConfig",
9
+ "AutoModel": "modeling_longcat_next.LongcatNextModel",
10
+ "AutoModelForCausalLM": "modeling_longcat_next.LongcatNextForCausalLM"
11
+ },
12
+ "vocab_size": 282624,
13
+ "hidden_size": 3072,
14
+ "ffn_hidden_size": 6144,
15
+ "expert_ffn_hidden_size": 1024,
16
+ "num_layers": 14,
17
+ "num_attention_heads": 32,
18
+ "kv_lora_rank": 512,
19
+ "q_lora_rank": 1536,
20
+ "qk_rope_head_dim": 64,
21
+ "v_head_dim": 128,
22
+ "qk_nope_head_dim": 128,
23
+ "mla_scale_q_lora": true,
24
+ "mla_scale_kv_lora": true,
25
+ "routed_scaling_factor": 6.0,
26
+ "n_routed_experts": 256,
27
+ "rms_norm_eps": 1e-5,
28
+ "use_cache": true,
29
+ "bos_token_id": 1,
30
+ "eos_token_id": 2,
31
+ "rope_theta": 10000000,
32
+ "max_position_embeddings": 131072,
33
+ "zero_expert_num": 128,
34
+ "zero_expert_type": "identity",
35
+ "moe_topk": 12,
36
+ "ngram_vocab_size_ratio": 78,
37
+ "emb_neighbor_num": 4,
38
+ "emb_split_num": 4,
39
+ "torch_dtype": "bfloat16",
40
+ "transformers_version": "4.57.6",
41
+ "model_type": "longcat_next",
42
+
43
+ "text_vocab_size": 131072,
44
+ "text_vocab_plus_multimodal_special_token_size": 131125,
45
+ "visual_embedding_layer_intermediate_size": 8192,
46
+ "visual_embedding_layer_hidden_act": "silu",
47
+ "visual_offset": 150581,
48
+ "audio_offset": 131125,
49
+
50
+
51
+ "visual_config": {
52
+ "image_start_token_id": 131106,
53
+ "image_end_token_id": 131107,
54
+ "image_pad_token_id": 131108,
55
+ "image_newline_token_id": 131109,
56
+
57
+ "_attn_implementation": "flash_attention_2",
58
+ "hidden_size": 1280,
59
+
60
+ "image_head_transformer_dims": 2048,
61
+ "image_head_transformer_ffn_scale": 16,
62
+ "image_head_transformer_layers": 4,
63
+
64
+ "vq_config": {
65
+ "codebook_dim": 3584,
66
+ "codebook_size": 16384,
67
+ "codebook_sizes": [
68
+ 16384,
69
+ 16384,
70
+ 16384,
71
+ 16384,
72
+ 16384,
73
+ 16384,
74
+ 16384,
75
+ 16384
76
+ ],
77
+ "decay": 0.99,
78
+ "depth": 8,
79
+
80
+ "commit_loss_ratio": 0.25,
81
+ "entropy_loss_ratio": 0,
82
+
83
+ "in_channels": 3584,
84
+ "quant_conv": true,
85
+ "quantizer_type": "rq",
86
+ "restart_unused_codes": true,
87
+ "shared_codebook": true,
88
+
89
+ "vq_loss_ratio": 0
90
+ },
91
+
92
+ "visual_decoder_config": {
93
+ "codebook_dim": 3584,
94
+
95
+ "image_decoder_config": {
96
+ "attention_dropout": 0.0,
97
+ "codebook_dim": 3584,
98
+ "distill_taps": [
99
+ 3,
100
+ 7,
101
+ 15,
102
+ 23
103
+ ],
104
+ "hidden_act": "gelu",
105
+ "hidden_size": 1024,
106
+ "intermediate_size": 2730,
107
+ "k_bias": false,
108
+ "layer_norm_eps": 1e-06,
109
+ "num_attention_heads": 16,
110
+ "num_hidden_layers": 32,
111
+ "patch_size": 14,
112
+ "q_bias": true,
113
+ "spatial_merge_size": 2,
114
+ "subln": true,
115
+ "swiglu": true,
116
+ "teacher_dims": {
117
+ "15": 1280,
118
+ "23": 1280,
119
+ "3": 1280,
120
+ "7": 1280
121
+ },
122
+ "temporal_patch_size": 2,
123
+ "v_bias": true
124
+ },
125
+
126
+ "transformer_config": {
127
+ "patch_size": 2,
128
+ "in_channels": 16,
129
+ "hidden_size": 2520,
130
+ "num_layers": 32,
131
+ "num_refiner_layers": 2,
132
+ "num_attention_heads": 21,
133
+ "num_kv_heads": 7,
134
+ "multiple_of": 256,
135
+ "norm_eps": 1e-5,
136
+ "axes_dim_rope": [40, 40, 40],
137
+ "axes_lens": [10000, 10000, 10000],
138
+ "text_feat_dim": 2048,
139
+ "timestep_scale": 1000.0
140
+ },
141
+
142
+ "vae_config": {
143
+ "act_fn": "silu",
144
+ "block_out_channels": [128, 256, 512, 512],
145
+ "down_block_types": [
146
+ "DownEncoderBlock2D",
147
+ "DownEncoderBlock2D",
148
+ "DownEncoderBlock2D",
149
+ "DownEncoderBlock2D"
150
+ ],
151
+ "in_channels": 3,
152
+ "latent_channels": 16,
153
+ "layers_per_block": 2,
154
+ "mid_block_add_attention": true,
155
+ "norm_num_groups": 32,
156
+ "out_channels": 3,
157
+ "sample_size": 1024,
158
+ "scaling_factor": 0.3611,
159
+ "shift_factor": 0.1159,
160
+ "up_block_types": [
161
+ "UpDecoderBlock2D",
162
+ "UpDecoderBlock2D",
163
+ "UpDecoderBlock2D",
164
+ "UpDecoderBlock2D"
165
+ ],
166
+ "use_post_quant_conv": false,
167
+ "use_quant_conv": false,
168
+ "force_upcast": true
169
+ },
170
+
171
+ "scheduler_config": {
172
+ "num_train_timesteps": 1000,
173
+ "dynamic_time_shift": true
174
+ },
175
+
176
+ "weight_path": "WEIGHT_PATH_TO_LONGCAT_NEXT/image_decoder/image_decoder.safetensors"
177
+ }
178
+ },
179
+
180
+
181
+ "audio_config": {
182
+ "audio_head_transformer_dims": 3072,
183
+ "audio_head_transformer_ffn_scale": 16,
184
+ "audio_head_transformer_layers": 4,
185
+
186
+ "audio_delim_token_id": 131116,
187
+ "audio_end_token_id": 131104,
188
+ "audio_pad_token_id": 131105,
189
+ "audio_start_token_id": 131103,
190
+ "audiogen_end_token_id": 131124,
191
+ "audiogen_start_token_id": 131123,
192
+ "audiotext_end_token_id": 131121,
193
+ "audiotext_pad_token_id": 131122,
194
+ "audiotext_start_token_id": 131120,
195
+
196
+ "_attn_implementation": "flash_attention_2",
197
+ "d_model": 1280,
198
+ "decoder_attention_heads": 20,
199
+ "decoder_ffn_dim": 5120,
200
+ "decoder_layers": 8,
201
+ "encoder_attention_heads": 20,
202
+ "encoder_ffn_dim": 5120,
203
+ "encoder_layers": 32,
204
+ "num_mel_bins": 128,
205
+
206
+ "avg_pooler": 4,
207
+ "decoder_kernel_size": 3,
208
+ "decoder_stride_size": 2,
209
+ "hop_length": 160,
210
+ "kernel_size": 3,
211
+ "max_audio_seconds": 30,
212
+ "n_fft": 400,
213
+ "num_hidden_layers": 32,
214
+ "sampling_rate": 16000,
215
+ "stride_size": 2,
216
+
217
+ "vq_config": {
218
+ "codebook_sizes": [
219
+ 8192,
220
+ 4096,
221
+ 2048,
222
+ 1024,
223
+ 1024,
224
+ 1024,
225
+ 1024,
226
+ 1024
227
+ ]
228
+ },
229
+
230
+ "vocoder_config": {
231
+ "channels": [
232
+ 256,
233
+ 256,
234
+ 256,
235
+ 256,
236
+ 256
237
+ ],
238
+ "hop_length": 256,
239
+ "num_mel_bins": 80,
240
+ "sampling_rate": 16000
241
+ },
242
+
243
+
244
+ "flow_matching_config": {
245
+ "in_channels": 80,
246
+ "spk_emb_dim": 0,
247
+ "diffusion_steps": 10,
248
+ "cal_mel_mae": true,
249
+
250
+ "prenet_activation_function": "gelu",
251
+ "prenet_attention_heads": 8,
252
+ "prenet_d_model": 512,
253
+ "prenet_ffn_dim": 2048,
254
+ "prenet_in_dim": 1280,
255
+ "prenet_max_source_positions": 5000,
256
+ "prenet_nlayers": 12,
257
+ "prenet_out_dim": 80,
258
+ "prenet_target_mel_length_scale_ratio": 1.0,
259
+
260
+ "channels": [
261
+ 256
262
+ ],
263
+ "dropout": 0.0,
264
+ "attention_head_dim": 64,
265
+ "n_blocks": 4,
266
+ "num_heads": 8,
267
+ "num_mid_blocks": 12,
268
+ "act_fn": "gelu",
269
+
270
+ "cfm_params": {
271
+ "inference_cfg_rate": 0.7,
272
+ "sigma_min": 1e-06,
273
+ "solver": "euler",
274
+ "t_scheduler": "cosine",
275
+ "training_cfg_rate": 0.2
276
+ },
277
+
278
+ "use_hidden_states_before_dconv2": true
279
+ },
280
+
281
+ "cosy24kvocoder_config": {
282
+ "weight_path": "WEIGHT_PATH_TO_LONGCAT_NEXT/cosy24k_vocoder/hift.pt"
283
+ }
284
+
285
+ }
286
+ }
refiner/tensor_mapping.json ADDED
The diff for this file is too large to render. See raw diff
 
refiner/tensor_sha256.json ADDED
@@ -0,0 +1,584 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "image_refiner.base_transformer.context_refiner.0.attn.norm_k.weight": "24e7c32a2ea7472ab1edbfebd5150c21af4f1b6516faf7e5b4c6330d9e4f808d",
3
+ "image_refiner.base_transformer.context_refiner.0.attn.norm_q.weight": "d5b63c4f1fdc9cb6a82d5544c3bc33b45c5d4b6030eb64b7d326f2a8808e1bc0",
4
+ "image_refiner.base_transformer.context_refiner.0.attn.to_k.weight": "e33668388ea8b63133f6cb8a5d2842a0dee7437db76ed19725b7057a0fb5d6a4",
5
+ "image_refiner.base_transformer.context_refiner.0.attn.to_out.0.weight": "60bebca82c37af9323d7f1fcd021c8eaadf222747f071da7c43efee021988556",
6
+ "image_refiner.base_transformer.context_refiner.0.attn.to_q.weight": "288724bf08ab1fa77f602d27fce10420d011c636ff0ff717f91debd6d50a49c8",
7
+ "image_refiner.base_transformer.context_refiner.0.attn.to_v.weight": "66190cff5d37f5a6c5217f75fa1a0391ee2daa4ec288d1f7f72044b9f6d5b799",
8
+ "image_refiner.base_transformer.context_refiner.0.feed_forward.linear_1.weight": "acf736f044ee2af739926e5a9a3f995b068784f8aec7d5add0a8e40cdbe0a888",
9
+ "image_refiner.base_transformer.context_refiner.0.feed_forward.linear_2.weight": "eae1d44166dc6ada550011739346160aa3c8052ba090c0bca1e24af683b33378",
10
+ "image_refiner.base_transformer.context_refiner.0.feed_forward.linear_3.weight": "7d77f4d007cfca25c36b3f5e5ed5fa0812a02034db6a711cc3d3d88916486be8",
11
+ "image_refiner.base_transformer.context_refiner.0.ffn_norm1.weight": "4ca2be2b63a6e4b7019419c583bb65c57cfec5a57a70673dc3b728f3ce6ebc71",
12
+ "image_refiner.base_transformer.context_refiner.0.ffn_norm2.weight": "f7a069ba84d9c15f5e831c6af8de8cb4847cbea9bbaed59446701d7dd2bd7485",
13
+ "image_refiner.base_transformer.context_refiner.0.norm1.weight": "c7f9e1c172ad7981c47264f509078dff2f3b72fcd74353507d53b6b0b574a07a",
14
+ "image_refiner.base_transformer.context_refiner.0.norm2.weight": "5430c1192ba4509100f93ea0da2d771199170c2dad6a905991eaddeedafe293b",
15
+ "image_refiner.base_transformer.context_refiner.1.attn.norm_k.weight": "54a32b28fa73a179a40d2c05f20e5564a8281e35bb622fbae74cfad41d56b06a",
16
+ "image_refiner.base_transformer.context_refiner.1.attn.norm_q.weight": "d2b4ed741234e1f14350a8f99a4a00d6de2f44939dc94f7c19aa4319dcac2562",
17
+ "image_refiner.base_transformer.context_refiner.1.attn.to_k.weight": "37c0597c8122628012721206efb09d35bdf5d9e0f1b71104777d814c7d5081af",
18
+ "image_refiner.base_transformer.context_refiner.1.attn.to_out.0.weight": "b6e4d0ac218f57b81d12371305218f4081aa86d62b3899b354143b8be332656f",
19
+ "image_refiner.base_transformer.context_refiner.1.attn.to_q.weight": "3813ce9fc1024f5564d7ecf27acfcc4a239558d4c914f512e8453e82383a943b",
20
+ "image_refiner.base_transformer.context_refiner.1.attn.to_v.weight": "5ce909f424097c965ee8357eceff0954bf18ad0e4d65b0aac64aecba3796ebf1",
21
+ "image_refiner.base_transformer.context_refiner.1.feed_forward.linear_1.weight": "fe5b56643ae5568fea587d2dab92fe5eb00d8453b086556839b78dae3ef36111",
22
+ "image_refiner.base_transformer.context_refiner.1.feed_forward.linear_2.weight": "0a42a95e37259148b3369d7c01b0a48aa1a7be45f98fe5a8ee8d47f502dde2e5",
23
+ "image_refiner.base_transformer.context_refiner.1.feed_forward.linear_3.weight": "7d95b975bb7bb6d458be3a6bcbba4e06a328943ecd36f6901d47fd8e54c983f2",
24
+ "image_refiner.base_transformer.context_refiner.1.ffn_norm1.weight": "8fac41c43a25eb821e0191d8e3188d23f5d6b6407384495ef4868eb900787c87",
25
+ "image_refiner.base_transformer.context_refiner.1.ffn_norm2.weight": "e391fb2631976b381d84a7682503ab341bb99f3b256a1e5f7a8ee4794aa14fab",
26
+ "image_refiner.base_transformer.context_refiner.1.norm1.weight": "fdb0cf4d95b2e4a955522613fd5e1517b087d35c738d8f32507f784132999a68",
27
+ "image_refiner.base_transformer.context_refiner.1.norm2.weight": "a1fd7d38eb24f4e8014e42e24492ebd417ae28fc59ddfd26785a9434fa503cc4",
28
+ "image_refiner.base_transformer.image_index_embedding": "6e74fb063a0fecc47c7eac0cb87880453735b183b4750a57a1f456bb34e2c7b1",
29
+ "image_refiner.base_transformer.layers.0.attn.norm_k.weight": "76a01e31c250bf327117c209b4dc649c49fd2bcf077a74dffccd47b901aae550",
30
+ "image_refiner.base_transformer.layers.0.attn.norm_q.weight": "57ce0639fc30c3bee874de8d430652d1783f3669399491d67275a9a77499f542",
31
+ "image_refiner.base_transformer.layers.0.attn.to_k.weight": "98426b20e2703b1c67849d0e778a0f6a76df5d28619e7926f999047243001e3f",
32
+ "image_refiner.base_transformer.layers.0.attn.to_out.0.weight": "9f6ade6a33ea02bb40b6fd3a2583e8fd1dc36049ade93644f5c15f04814b8453",
33
+ "image_refiner.base_transformer.layers.0.attn.to_q.weight": "5e541d3284274400d447a5908f4309c841f5ce3b8808c1b0771f2ee2aa58fa39",
34
+ "image_refiner.base_transformer.layers.0.attn.to_v.weight": "bb02aef8a20fb74c09ed69c3f1d1b0abe02e38255eb89d25efda130b33043065",
35
+ "image_refiner.base_transformer.layers.0.feed_forward.linear_1.weight": "60b94f53eb6819dfb3e2b0b7521a133e4bbe137a203a742a78c2d3b0fa25b65c",
36
+ "image_refiner.base_transformer.layers.0.feed_forward.linear_2.weight": "67e06b7ff68a44944d6af7fe22b24c9f68b65a1eae61224fc96761b6791832f6",
37
+ "image_refiner.base_transformer.layers.0.feed_forward.linear_3.weight": "cb985257eee0c7b3b4829aeacfbfd897f68d51c25dcf40e37941a303e33f9c16",
38
+ "image_refiner.base_transformer.layers.0.ffn_norm1.weight": "d7ee2b8181b5fc9e2955e90c88ce04e3363c8c1622b0f899332b678977b292c2",
39
+ "image_refiner.base_transformer.layers.0.ffn_norm2.weight": "1842666c992f6cf5f9552e56d0e9952e49bcd7f693128fbff541438a623f9c8e",
40
+ "image_refiner.base_transformer.layers.0.norm1.linear.bias": "8bbf90f309ce2c233105d7356d174a01278878bcc37ab93a1328b3bca57efc61",
41
+ "image_refiner.base_transformer.layers.0.norm1.linear.weight": "4680d991d2754c88cad5bf86fab0a5decb16966173eb69271ec48e3db8a1e5d9",
42
+ "image_refiner.base_transformer.layers.0.norm1.norm.weight": "2cb0ce846266a488b0e2cd73677948b792232ad6f43346e9cae5b9cf7f211d7d",
43
+ "image_refiner.base_transformer.layers.0.norm2.weight": "d908bd890d2c92da200582224e7d14990524ef9e6c6a1b98cf3f82a3cfd66233",
44
+ "image_refiner.base_transformer.layers.1.attn.norm_k.weight": "3fc1eb8816e0ccdd6289ab36b330cee1c268a6f21559a473a83236ed1915a069",
45
+ "image_refiner.base_transformer.layers.1.attn.norm_q.weight": "8e9ae0beb693ca67f56db2abbd519eabf67fa41ff402c818a384e2f9b5691de4",
46
+ "image_refiner.base_transformer.layers.1.attn.to_k.weight": "57afd637044e520a7c43fbbf3fb3a52b7c0f986d78298f1ff5f4f91e22a813b7",
47
+ "image_refiner.base_transformer.layers.1.attn.to_out.0.weight": "3aeede486592828bde4b64c4229f6a60f18a6e0ed87ec216a889e2b984f98a77",
48
+ "image_refiner.base_transformer.layers.1.attn.to_q.weight": "c5737e3e256ee2b75f4c6ffafc40cc218fcf289a84f7b9f4b063cd10e50e6d20",
49
+ "image_refiner.base_transformer.layers.1.attn.to_v.weight": "3aa6be082150c79d08e6340e3506a204e3c4a470ea8de47b88f30dbf4f79d721",
50
+ "image_refiner.base_transformer.layers.1.feed_forward.linear_1.weight": "b007ba57461117bbdd63917786fa169255a1b3e1196e4c1d9b954e5efaa67bc3",
51
+ "image_refiner.base_transformer.layers.1.feed_forward.linear_2.weight": "8c853ddb2c7a5868af0c44c0c55bea567a70c1a96981f4c196b5945f775c8305",
52
+ "image_refiner.base_transformer.layers.1.feed_forward.linear_3.weight": "74cad6e8de1f33039dae3676746563a8d6d9fa970d040aebf84ebfc504340d54",
53
+ "image_refiner.base_transformer.layers.1.ffn_norm1.weight": "f2251711274e43917f1e29ef3683189769ccdd05253024d73e700219639280b1",
54
+ "image_refiner.base_transformer.layers.1.ffn_norm2.weight": "ed34a3b2631db7331157ded1e5901bd27e1ab82b44f0782823d173dd8ab1b967",
55
+ "image_refiner.base_transformer.layers.1.norm1.linear.bias": "121ef234478e5b857143bdabe105f71686fb3bfa98f477600e62bc2c2fd2cc52",
56
+ "image_refiner.base_transformer.layers.1.norm1.linear.weight": "1f5130149b5d6b1e04e0bdbe2e378892d6868e153941f21adc89c966d0f6c7d2",
57
+ "image_refiner.base_transformer.layers.1.norm1.norm.weight": "0d6fe42bf12b62c15bac633f21d9688f8d6b7f46087b2b1fdaa013a4625038d4",
58
+ "image_refiner.base_transformer.layers.1.norm2.weight": "6acf10dee3d733cd0e754d3eeb8415a9927d5b19d71cb62f138959b6b49f094d",
59
+ "image_refiner.base_transformer.layers.10.attn.norm_k.weight": "938d8f420f7063eede040bfe45c75ea80e11307bb305bc53f1a9b56cc08dbf06",
60
+ "image_refiner.base_transformer.layers.10.attn.norm_q.weight": "caee930da3af4abfc31f227221c046515a5ec9978c4f522684b5b7af901a348b",
61
+ "image_refiner.base_transformer.layers.10.attn.to_k.weight": "9b2c092fd4ce90d4074719a88c30bcde0e510fed7547a5bf9404a8a0eed924db",
62
+ "image_refiner.base_transformer.layers.10.attn.to_out.0.weight": "a9f5e6306ceb198741b8300222702afc128481f9344802dbb2f8a9ecabb90156",
63
+ "image_refiner.base_transformer.layers.10.attn.to_q.weight": "0a4855e376aa1c6d18bccf6df5e452fa8cde35e27648c54f6c5a5304bfba567e",
64
+ "image_refiner.base_transformer.layers.10.attn.to_v.weight": "f05d494f1c83f446954b229e25bfc620ce6f28a833f1098cf77241180a893eff",
65
+ "image_refiner.base_transformer.layers.10.feed_forward.linear_1.weight": "a149d6d974738f226f1c40d7f0ec521100cf01df436456e45fff9e614ab32e1d",
66
+ "image_refiner.base_transformer.layers.10.feed_forward.linear_2.weight": "e9de407dcfc061b2ccbe6a7b899d8bd6597a2e5b1e2c909926595aa163c79685",
67
+ "image_refiner.base_transformer.layers.10.feed_forward.linear_3.weight": "63d2d8f3b04ed928f2799cb522013e15d7fac8aa2c62d505a41c6ba9b26c3d0d",
68
+ "image_refiner.base_transformer.layers.10.ffn_norm1.weight": "675345d319393f4ee044215ba9a4466d11ae7a1294f26fe241c179b9a294ed2f",
69
+ "image_refiner.base_transformer.layers.10.ffn_norm2.weight": "7c0e0a2f200513f1ba2516dcf9ca6159c89b63efaa182b6bccd502283a25ccb8",
70
+ "image_refiner.base_transformer.layers.10.norm1.linear.bias": "6ff48f3b8fcde3bbe85f759a958d500e7069fb1de6a1d65ae66538f0825a0510",
71
+ "image_refiner.base_transformer.layers.10.norm1.linear.weight": "0e22ebf6be7a5dd7fa736d8bafd4426bb9b54ba2155f69500f002597d61ef851",
72
+ "image_refiner.base_transformer.layers.10.norm1.norm.weight": "614970e972f54a29e91eb3132e7cabee1628eee8389a90f2d006a2f6f60f1e9e",
73
+ "image_refiner.base_transformer.layers.10.norm2.weight": "a56acba12382c896a2e4f7edcbfe335460aa6811b8bfce9284b0a853dffaaf8c",
74
+ "image_refiner.base_transformer.layers.11.attn.norm_k.weight": "29db3dd6a300e1687bbfda666238a7436322732a5f08ba374908616f3d7b06ac",
75
+ "image_refiner.base_transformer.layers.11.attn.norm_q.weight": "083f48a237333b14f947a68227f10014352878dd3b6d4ca336b13ded406a6907",
76
+ "image_refiner.base_transformer.layers.11.attn.to_k.weight": "859bd1d919b5c90ffdba53b13d19c5d19ce449d2f730ba9206dd4e5c7dd5a90c",
77
+ "image_refiner.base_transformer.layers.11.attn.to_out.0.weight": "0782ab838c3bfd3b7d7275c624bff56ef85b89ca51aff5323a15efd3b201b878",
78
+ "image_refiner.base_transformer.layers.11.attn.to_q.weight": "c34e39230bff4860a442d7d7cca17abd373f7d4f697398205a319ec775ad4665",
79
+ "image_refiner.base_transformer.layers.11.attn.to_v.weight": "78003ec041506ca08258d628efa31df187477be5636d3a2c84ff6d6b6cb608b1",
80
+ "image_refiner.base_transformer.layers.11.feed_forward.linear_1.weight": "0e19de8164998373881cfcbb6521c06180a526226307ba26a8bc90388a71fbe7",
81
+ "image_refiner.base_transformer.layers.11.feed_forward.linear_2.weight": "3dc6816180abcade35e91b7ac99bdcc7db66aee06efb99d6d60358f8b1e7359d",
82
+ "image_refiner.base_transformer.layers.11.feed_forward.linear_3.weight": "09ebf7e6efb7e2649f08a6c89633bdbffc76de78123acd662e9ba91f502aa020",
83
+ "image_refiner.base_transformer.layers.11.ffn_norm1.weight": "c8f0f005c1fd40a5d5420cf34e1434d84189902bd1581e4cf2d2993f5581977d",
84
+ "image_refiner.base_transformer.layers.11.ffn_norm2.weight": "7882c48b96d17eb1dcf53bb3638ec85b8f7cf3cefa3e3ab7b1bf783230868e64",
85
+ "image_refiner.base_transformer.layers.11.norm1.linear.bias": "c69b09e4ae3dc5d01e1af6bf5d5e8ecffe988d0d765bd95b6c0ebdc9bbd39e80",
86
+ "image_refiner.base_transformer.layers.11.norm1.linear.weight": "c129807df48e5530166201c6087f1ae2a5e5feafcc034dca903b43ecc64a41ba",
87
+ "image_refiner.base_transformer.layers.11.norm1.norm.weight": "3f612f25b7a04649a338bac0ea5d79c0ddb84bc1c1b20190c57ec4390eaca290",
88
+ "image_refiner.base_transformer.layers.11.norm2.weight": "06e05199e5c5e849e419450d698eaacc5fca1015529bb57863b12adb46fdb1c5",
89
+ "image_refiner.base_transformer.layers.12.attn.norm_k.weight": "8f6528b03d2737ced3c4050ba550577c33f44fdaf86aa752b33d5b1f302d3470",
90
+ "image_refiner.base_transformer.layers.12.attn.norm_q.weight": "b238a43cb090d4371823ce12a6ed974c55bdf28c62bb845b67a427e6f3cfe096",
91
+ "image_refiner.base_transformer.layers.12.attn.to_k.weight": "30a46243ea0b3c9f6838a58d6daf34b855c7df479ccb1e5bc418c001081995d6",
92
+ "image_refiner.base_transformer.layers.12.attn.to_out.0.weight": "85e263b417fc1bf8fe20b9bbe86d8bad64b7171c7196feb7dc6202e7632f2a22",
93
+ "image_refiner.base_transformer.layers.12.attn.to_q.weight": "ec7c9aa737557e58839f5f6098f0b6553519dcf46a8e80a22ac7794b1f00dbf6",
94
+ "image_refiner.base_transformer.layers.12.attn.to_v.weight": "c340f90c2c997832e086f0d9c47f9392a3cb27fabff5ad025500e0fa35eafa95",
95
+ "image_refiner.base_transformer.layers.12.feed_forward.linear_1.weight": "6fe7c5b2db25b6f214901f45bce9f3452da1d0ff0dcbb33052c67966256e156d",
96
+ "image_refiner.base_transformer.layers.12.feed_forward.linear_2.weight": "158a646fd77d9de1fbe94ee27334e39519ec080f2c8fd001a76f5ebf91ca9bb0",
97
+ "image_refiner.base_transformer.layers.12.feed_forward.linear_3.weight": "8c02455a64275226edff18a4f47fc8016cd36596bb75068e2e806371f04b7daf",
98
+ "image_refiner.base_transformer.layers.12.ffn_norm1.weight": "35149ac0528289cfb649d9de304e3b14ee671cc1bb49cc5205550f3b9b0c9e40",
99
+ "image_refiner.base_transformer.layers.12.ffn_norm2.weight": "15b6b330456ef22d0cbf0b7f5738f554ccdb022b7983b2a49eae42bbc3d2c778",
100
+ "image_refiner.base_transformer.layers.12.norm1.linear.bias": "3842501d9cc2716f315c046e3dc5cf965a4b0dca26e2d4e95a310180246ce2ae",
101
+ "image_refiner.base_transformer.layers.12.norm1.linear.weight": "2f42574b3ae7bd875177121dcd3c5360dabd0a4006591ffaf98232c1c78ddf99",
102
+ "image_refiner.base_transformer.layers.12.norm1.norm.weight": "e9c1c67940494810c5e57d6c4c13f40cc26d3d8f1957790775102c4e2e458071",
103
+ "image_refiner.base_transformer.layers.12.norm2.weight": "074c8396f33ec45810e9f798e288c3d41fb73304331ebc6c13dce017b40d65dc",
104
+ "image_refiner.base_transformer.layers.13.attn.norm_k.weight": "18190d6819eedef829a79985ef81bdb3ca5ec72b9ad447799b16a1cad792bc68",
105
+ "image_refiner.base_transformer.layers.13.attn.norm_q.weight": "dd135bf39664e05235aad2fa1e9c584243bbce6078130cfa92403a9ecf36be2b",
106
+ "image_refiner.base_transformer.layers.13.attn.to_k.weight": "36d243c6940282680d89e23d0583ba9c5fc0c17b2a4068d9b35facb4c88e5ff7",
107
+ "image_refiner.base_transformer.layers.13.attn.to_out.0.weight": "868b4b65c5d5e3e65c55753ae48fe205525448327fbedfd75a97195ba9b4744a",
108
+ "image_refiner.base_transformer.layers.13.attn.to_q.weight": "caebf2c67ca45f4f41c636a3aaa333795d8c8bace471f7b18cb96e5469a69f4e",
109
+ "image_refiner.base_transformer.layers.13.attn.to_v.weight": "3f048f3e0fae9bffdb798793697dd738e5ed732f7601e511dcda968ee4addfef",
110
+ "image_refiner.base_transformer.layers.13.feed_forward.linear_1.weight": "191ab65037f6a19562a435a836d4905a4553068d226ebee22764073a99f9d7be",
111
+ "image_refiner.base_transformer.layers.13.feed_forward.linear_2.weight": "cc1b1bd76b098cda81966528259d1eb6ce8ff55604092c1fefa940832ce1564b",
112
+ "image_refiner.base_transformer.layers.13.feed_forward.linear_3.weight": "420abc803f25e683b2bd12ad00c37c4f5257ddb6a972dcc5421c649d9c3de73c",
113
+ "image_refiner.base_transformer.layers.13.ffn_norm1.weight": "3f67017b7bbb6c5c795c2b58078aefc13f24f5a991544e86b14d075fa8f885a3",
114
+ "image_refiner.base_transformer.layers.13.ffn_norm2.weight": "e8b3f82b803402c9c1901bad5b9bc7a3135ab2104e8babd468e12db5ce34f147",
115
+ "image_refiner.base_transformer.layers.13.norm1.linear.bias": "0612f92e3664398c9f70a57614008c0600aebb85e975712800e19f63581124b0",
116
+ "image_refiner.base_transformer.layers.13.norm1.linear.weight": "f74c2cc26984db40f8938e4120266ce6b8bfd6be733a2edf0e5b18878cfbb725",
117
+ "image_refiner.base_transformer.layers.13.norm1.norm.weight": "80c0100fa95ba85bd92f0ac507aa8d7470dd8a9034a7ed03b5c50e37a8ddfe83",
118
+ "image_refiner.base_transformer.layers.13.norm2.weight": "6d7765a83595cb2f25d2bc449ceff9d645ad40ddf841afff3e5af8164da07311",
119
+ "image_refiner.base_transformer.layers.14.attn.norm_k.weight": "0db22bb1b3c9ee10bcdb1abce94f0ec18adf7e6e41416f375887e200c3dc652d",
120
+ "image_refiner.base_transformer.layers.14.attn.norm_q.weight": "ab0db1234bdac724488d23ff8b5ea0047788e84363bc4b69deb072d7e9abe6be",
121
+ "image_refiner.base_transformer.layers.14.attn.to_k.weight": "166a0850224232b81a48fc2ae096f8f0c957aaea99e21372f348443faaad9a8a",
122
+ "image_refiner.base_transformer.layers.14.attn.to_out.0.weight": "89f355ca749758e3a1a254eaab55b9e21102e096039f3b54c2095697cfb0cfd2",
123
+ "image_refiner.base_transformer.layers.14.attn.to_q.weight": "cdd01c7276d738ffaabecd57e06f5c43ea38954e1c91ea1d33baf3de4ef79055",
124
+ "image_refiner.base_transformer.layers.14.attn.to_v.weight": "5b45fa3a31804de272b1c9aee30f77448be68dc006fb9f2d14f6d3e87a93f39f",
125
+ "image_refiner.base_transformer.layers.14.feed_forward.linear_1.weight": "0739040df1d5ddcebcfbfed21d1d3e220c9936e9ebd088607e509daac4d70f8f",
126
+ "image_refiner.base_transformer.layers.14.feed_forward.linear_2.weight": "e0a72c79eccbb1ac5f49fc18f11b93bf2d1c0949f1bc2bcb41761f05016e92e9",
127
+ "image_refiner.base_transformer.layers.14.feed_forward.linear_3.weight": "419bbc41636c130ff1a21f454f66c4dfffb51c207b37d73a1ea5b09e2929aa0b",
128
+ "image_refiner.base_transformer.layers.14.ffn_norm1.weight": "8a2bf9c878fe929db1a03e231884aa62ed86146a20f0cb58751d5bb688a62a8a",
129
+ "image_refiner.base_transformer.layers.14.ffn_norm2.weight": "99e8140fe6be3f3fa04d642b43238a709ada34e2d6ae6740a83ef9839855a1e8",
130
+ "image_refiner.base_transformer.layers.14.norm1.linear.bias": "447317bba6b8d12bce3db9ee8565a921d5ac525d4668d241ab26f41ba74799e0",
131
+ "image_refiner.base_transformer.layers.14.norm1.linear.weight": "8a7a7820540ec0fe661783db766151194ba0273bbe30c0bd147853b4e913f912",
132
+ "image_refiner.base_transformer.layers.14.norm1.norm.weight": "965ce8a01271afdc7b4698f2f08ec11b07b57f771f39fe74dd0f2fa8ddf9ea82",
133
+ "image_refiner.base_transformer.layers.14.norm2.weight": "83a0ea33ddbff42e683d28878d9450fc5fcbbf2274b955d600c07a195aa5061f",
134
+ "image_refiner.base_transformer.layers.15.attn.norm_k.weight": "eafdd569eff3cd6338306af95617ff41326c98dc662403ae4fc0e8ea44750cd7",
135
+ "image_refiner.base_transformer.layers.15.attn.norm_q.weight": "4988343ff4e49eeb116e994ed7a8bd59db3a51d7d81978ada78f8f4913892709",
136
+ "image_refiner.base_transformer.layers.15.attn.to_k.weight": "a36513db90eefd9aff751d9b098a82bbf52e858e00bd6b9aff270afd83cb5136",
137
+ "image_refiner.base_transformer.layers.15.attn.to_out.0.weight": "8ee080234281195d6cc38ec6ba93b69a66105bfca73d3353f43038fdb4c4e4d7",
138
+ "image_refiner.base_transformer.layers.15.attn.to_q.weight": "b8b8d06b39a78fdbac1e0f7ad787132f5562003564428eafc83c07494d19e4d0",
139
+ "image_refiner.base_transformer.layers.15.attn.to_v.weight": "e2ad018109ab1cf57c1d7210fab2a39759296e1e777a5b103911232162435943",
140
+ "image_refiner.base_transformer.layers.15.feed_forward.linear_1.weight": "0201f1a070835a4c38ce0cb76dca48907799ea3309c90e854cfc9aa364b31350",
141
+ "image_refiner.base_transformer.layers.15.feed_forward.linear_2.weight": "6a5767b98600d8eac993165079488e0c156167ba3fb7db460e5292e51e609cec",
142
+ "image_refiner.base_transformer.layers.15.feed_forward.linear_3.weight": "3a7d9bc23bfa716cd2e3696abb8774507f79e162c487986767fa85e71ca71786",
143
+ "image_refiner.base_transformer.layers.15.ffn_norm1.weight": "2db3de7242fc99143a6356f5b20bb51c45e43bdcd6dd753b4f917f0f67844484",
144
+ "image_refiner.base_transformer.layers.15.ffn_norm2.weight": "f27da49a5243a2927ef75cf3ba9e660ff7ca65fdc9fb9a8480f4d4787552ebe4",
145
+ "image_refiner.base_transformer.layers.15.norm1.linear.bias": "e48595fe097d733644fe8ed10739b753efc111b28a7c87dda49d6bdd4f8a81c3",
146
+ "image_refiner.base_transformer.layers.15.norm1.linear.weight": "af2666ef01c85537e47c753ae88088f4fdf9ed06f767121b7fb1dbc461f2a3e9",
147
+ "image_refiner.base_transformer.layers.15.norm1.norm.weight": "c0a996e01a100f8a9cd92b2a538c538e3eb392c9fe1fad8c52a4c1e81d253a4b",
148
+ "image_refiner.base_transformer.layers.15.norm2.weight": "c4b52bab66f77896d0b9eab196b2ffe2e474078cdc2c38dbe178be6ed17d3a0d",
149
+ "image_refiner.base_transformer.layers.16.attn.norm_k.weight": "15d5e601f3a461355c335669736584f712d0ccd50c9236444e83040e6f1530b3",
150
+ "image_refiner.base_transformer.layers.16.attn.norm_q.weight": "77b8eea09a0a919a717ddd3ff980e2646d9e00a00b2e2f642156f425e5010245",
151
+ "image_refiner.base_transformer.layers.16.attn.to_k.weight": "4e251348fcbcbfd0bbf801e39f45222043426b781aa22fe584b667938ec7c9bf",
152
+ "image_refiner.base_transformer.layers.16.attn.to_out.0.weight": "cce702545cba2177ce187848c3889b9631ee786a92d65a497a1b16b4da4ca74c",
153
+ "image_refiner.base_transformer.layers.16.attn.to_q.weight": "79081121c45130b5f5bcf8d3d818a0992bfa3d2f98f1961b4ca699f8603a8fe9",
154
+ "image_refiner.base_transformer.layers.16.attn.to_v.weight": "9cd60c5680a29e46aa810b51d1e712a0e34c318486956a633e10a17c4771302b",
155
+ "image_refiner.base_transformer.layers.16.feed_forward.linear_1.weight": "35ea9e566ea13d25ed1c2d5c8d588911a400621e052e841e245a86ee79b5aaa0",
156
+ "image_refiner.base_transformer.layers.16.feed_forward.linear_2.weight": "ecbaf4184d8184d51469fcaeeaa32760a76b4c5caa619f3355fd3311bce200cf",
157
+ "image_refiner.base_transformer.layers.16.feed_forward.linear_3.weight": "91990765855498e37c720704c993167ae4ff0cea68f77cf38c17ed64e4665d65",
158
+ "image_refiner.base_transformer.layers.16.ffn_norm1.weight": "5b8c4f956eafe04134f9b6eddc47852f8d896f27bb7330863311025faa3d1caa",
159
+ "image_refiner.base_transformer.layers.16.ffn_norm2.weight": "0d1843ece2a62c79d73865e4a16057e3aa634aa3cea6a70de02289f1f39411de",
160
+ "image_refiner.base_transformer.layers.16.norm1.linear.bias": "b9af9bddd53081a7d291dbf2f7b389f48c4768b1f0e970b9e14f67a7656f7301",
161
+ "image_refiner.base_transformer.layers.16.norm1.linear.weight": "146d2e936212cd3ecdee86ae4cebbe14265f0e38c09866c2b99f22f7948da7eb",
162
+ "image_refiner.base_transformer.layers.16.norm1.norm.weight": "6f3bb8f3c86691cc406eb0f16ad9f8dd22fae5c19c71c499f87a0fb5cc9ecfd1",
163
+ "image_refiner.base_transformer.layers.16.norm2.weight": "26211d22516ebab8aa16ed64bc2af05c46dd9ca429bc16a310c6cef466187627",
164
+ "image_refiner.base_transformer.layers.17.attn.norm_k.weight": "336831826f0976656fbf9800c547660d0997170e0818d3e824df68e1e062c82a",
165
+ "image_refiner.base_transformer.layers.17.attn.norm_q.weight": "9438f9e28c043207d21121a1c869237a99a2268a659f3f5df8b09158f307e2f7",
166
+ "image_refiner.base_transformer.layers.17.attn.to_k.weight": "a29290f48520becf42d6f7f0498be1a30cc5e3e731a6f1fb1e19956bdd7f134b",
167
+ "image_refiner.base_transformer.layers.17.attn.to_out.0.weight": "fe0e96b69be8d61d45f11cfe80675f9a7c369b9a723033d876445b82619d2719",
168
+ "image_refiner.base_transformer.layers.17.attn.to_q.weight": "c3bb8d22b64f1d6b300655af18e8f612bdcbc13844bb5c1a4cedbdcdfee2d3d0",
169
+ "image_refiner.base_transformer.layers.17.attn.to_v.weight": "376651df8d782c20903bed2b97d76fd22da182138a3cf9ba8b2a4e0585f8dabb",
170
+ "image_refiner.base_transformer.layers.17.feed_forward.linear_1.weight": "15063d78d5bb36f65b8a877f25d1775db3ac26a8575f5223a6e2fc89af048e28",
171
+ "image_refiner.base_transformer.layers.17.feed_forward.linear_2.weight": "7039f21c5e4964a76a3ca72c27a68eb1c41befc2deb96e944064c0b471dbf951",
172
+ "image_refiner.base_transformer.layers.17.feed_forward.linear_3.weight": "a1be56a92344f6c9520d0a3f11b2d60214fb6492378ec55b13c03796c008ec3f",
173
+ "image_refiner.base_transformer.layers.17.ffn_norm1.weight": "a39f4b5cde4c91a55a941f185425c39ad2b036dc77af75d551425b2c2eab9b93",
174
+ "image_refiner.base_transformer.layers.17.ffn_norm2.weight": "a4cb6c9feb2a8569a228a82a0be4d3b3d25559dd0abee2aa1e760fa4744004cc",
175
+ "image_refiner.base_transformer.layers.17.norm1.linear.bias": "246568ec126f1eacd740dd9067f5f75a5cbcb2d9eba31a695c6aa52c72c29718",
176
+ "image_refiner.base_transformer.layers.17.norm1.linear.weight": "efb9bec1159b088112c84be663a90ff0b5f708b8c60d6e99e5eef039e33f74af",
177
+ "image_refiner.base_transformer.layers.17.norm1.norm.weight": "80fb747207976744e6b0bc658b9b2d23de3bce3d02360b1b1da3254a4278315d",
178
+ "image_refiner.base_transformer.layers.17.norm2.weight": "fa66e8e5bb68f80fdeb76aa106d7026b623cb81f3a5c0e05d2fde9b213ae662e",
179
+ "image_refiner.base_transformer.layers.18.attn.norm_k.weight": "e8d3af1c7f4edcb42740c50bf65d1ae52f0f6d59b4178c3976800546feb75479",
180
+ "image_refiner.base_transformer.layers.18.attn.norm_q.weight": "bd55558785eba80bd6643dc7cd7e5a5cc8f8b930f46fd0dc94f6b56c00c47f02",
181
+ "image_refiner.base_transformer.layers.18.attn.to_k.weight": "cb9f0f1259456c3fa36e55333dc958863c89f149666713cadbbb46b4fdc044f7",
182
+ "image_refiner.base_transformer.layers.18.attn.to_out.0.weight": "bba42efb54790ad33809090a735820adbd001ed2a6af73bc35ec4038e6af6581",
183
+ "image_refiner.base_transformer.layers.18.attn.to_q.weight": "6f7eb79ea2b95e521152a61990292affd47ebe5f2eb7c1180be9c658b01afb01",
184
+ "image_refiner.base_transformer.layers.18.attn.to_v.weight": "aa45ad682e39db5b9d4d2cb8b5017d4d749df17ab013d6c4665b207020f07205",
185
+ "image_refiner.base_transformer.layers.18.feed_forward.linear_1.weight": "d0617352f785ef5d3deec96e60c87afdf10e3ed81f86312a8487b3f460cefb22",
186
+ "image_refiner.base_transformer.layers.18.feed_forward.linear_2.weight": "5f18e3d76a105bbb9eeaff9c6292055a46d4a6770ed00198958df2891a584983",
187
+ "image_refiner.base_transformer.layers.18.feed_forward.linear_3.weight": "d221df2cc3069ccc244497f361640940c556a18dd0350dc14ed92e3db59affea",
188
+ "image_refiner.base_transformer.layers.18.ffn_norm1.weight": "b4e507c952e34611c628ea83d7d684ff014407d19def98e13e0244f0cbca8e51",
189
+ "image_refiner.base_transformer.layers.18.ffn_norm2.weight": "9e4bdac6ec6f4715248c44de5af109c9e7970dc2cdee24db6d9dbd065a121cd7",
190
+ "image_refiner.base_transformer.layers.18.norm1.linear.bias": "b839ca1861a49bc237c3adb3ff6ebc306247546e2d31c6dfcf6be0305183f381",
191
+ "image_refiner.base_transformer.layers.18.norm1.linear.weight": "5d8a749e5bf9f2c8bceb1fc57744442a4db9d0ddf22de75e85fd9533928fc2c4",
192
+ "image_refiner.base_transformer.layers.18.norm1.norm.weight": "345cdc9be17c2409d4b2b209623078aeb1bce5bf11e6748edd66c550da362131",
193
+ "image_refiner.base_transformer.layers.18.norm2.weight": "41ebf3b7351a9a2fd2fe13f2d01a2b277b16647a959bba8e6b61f1d1fd89236d",
194
+ "image_refiner.base_transformer.layers.19.attn.norm_k.weight": "067014cce02aaab466a3e7079edd40feb94b94738ade3d37c2e751782b5ab61d",
195
+ "image_refiner.base_transformer.layers.19.attn.norm_q.weight": "e1fbd8189709b41788af3ca6a654f45316be5f2693a7e07b24ca2ae119486e61",
196
+ "image_refiner.base_transformer.layers.19.attn.to_k.weight": "9793069ca5843a4f2b62752270cf2df68123c5d5a1b963c774fe563234574e9d",
197
+ "image_refiner.base_transformer.layers.19.attn.to_out.0.weight": "0a08e67cbe6c87d0ce79be35b7324b36c2fa3b33534d1f0f70a8357c8888541a",
198
+ "image_refiner.base_transformer.layers.19.attn.to_q.weight": "aa7e5744f71b837e37a7be23bf3ef4c7f74397f7d77ac3d7fb6099fa32a1f9d8",
199
+ "image_refiner.base_transformer.layers.19.attn.to_v.weight": "e8e97550da7317a0b170668e029b3c7967ea53d21963daf70de594d67a68d392",
200
+ "image_refiner.base_transformer.layers.19.feed_forward.linear_1.weight": "b126e749f960eacdac2248487e8fa1100512e2f89f525d4f3723a1fd14e75992",
201
+ "image_refiner.base_transformer.layers.19.feed_forward.linear_2.weight": "4785b9a6aad1b0688ba43fe666469a401edf0ed24d0ee4d277c64b4e1b66eea7",
202
+ "image_refiner.base_transformer.layers.19.feed_forward.linear_3.weight": "4c5edab742c10f57a32e2ced96f57f853bdcaca31537c06685900f0c6ac9204f",
203
+ "image_refiner.base_transformer.layers.19.ffn_norm1.weight": "04298b1cebaf61ab47704ef2c53f8a4d4013b2d9c6e12ed5f842dc706b7be79b",
204
+ "image_refiner.base_transformer.layers.19.ffn_norm2.weight": "07722e443d866b78aa9065c3dd06c5c87479cbe224f696c05f2e11f0c8b306ed",
205
+ "image_refiner.base_transformer.layers.19.norm1.linear.bias": "d7d810da143b7c84f0eae28eed504b2ace80f3c51f52383d39e3f8126806abbe",
206
+ "image_refiner.base_transformer.layers.19.norm1.linear.weight": "ca278c40aae2f91138dba1c72cee6571f37a475d645dbbd6573fb41fbeb99116",
207
+ "image_refiner.base_transformer.layers.19.norm1.norm.weight": "ed42bedc12a343d04b2e23b79dec2d9f6d298e69420ebc5f7f05429f2e23e81a",
208
+ "image_refiner.base_transformer.layers.19.norm2.weight": "fba6520253cac78cd99f6944dfec7b2a5a1ba27ff8f62c086171cb703e5f12ec",
209
+ "image_refiner.base_transformer.layers.2.attn.norm_k.weight": "5d869eb14b153b2fba71933ece3963356c2a44fe45b323918d436e6c7e53f3bf",
210
+ "image_refiner.base_transformer.layers.2.attn.norm_q.weight": "c0ddfc68c4e0d8d1fa48e3fd1a3fec0c7f8b5495d2e3c21263833b9f17a81e84",
211
+ "image_refiner.base_transformer.layers.2.attn.to_k.weight": "5e26fb8f22c56808a15277dd17fabdb964f6d90e85e9be04ac8589eec249aad2",
212
+ "image_refiner.base_transformer.layers.2.attn.to_out.0.weight": "41a3d27e230bb672547b812568055db11f5159740dcd991aa1d20f7ab142008b",
213
+ "image_refiner.base_transformer.layers.2.attn.to_q.weight": "027cc27ac5edc66991541b23609913a3cf791f9ed4117070d41235a6e69d67df",
214
+ "image_refiner.base_transformer.layers.2.attn.to_v.weight": "d246b6d71f988dc791dde60202ee16796fa29237cf7cdf463c288215ba886acc",
215
+ "image_refiner.base_transformer.layers.2.feed_forward.linear_1.weight": "f11fc4c0ed4292e0d8aa7b01a842fd9c67eec138e0113c28a3f91ad9a7f415ce",
216
+ "image_refiner.base_transformer.layers.2.feed_forward.linear_2.weight": "72bdf88cbebf6d941dfadbff26ed30b21f089038cdc60acdd609480e7683c713",
217
+ "image_refiner.base_transformer.layers.2.feed_forward.linear_3.weight": "7e960984873a0b5e084bb3e769507624cadf2792a872887ee2593bb470c351de",
218
+ "image_refiner.base_transformer.layers.2.ffn_norm1.weight": "bf456ca19ed588bccaf9aa47ec981a6cf8e3b99b5495d965f0f410d095d33ef2",
219
+ "image_refiner.base_transformer.layers.2.ffn_norm2.weight": "036f1148dfc861e5485ba633c2ea3287705a35b82cbc54ba6740eccca222e177",
220
+ "image_refiner.base_transformer.layers.2.norm1.linear.bias": "28bfeca559d165d012b9eec175fc3b0d37fd3afb13db6354edef3df976a9bd34",
221
+ "image_refiner.base_transformer.layers.2.norm1.linear.weight": "f69ab599122a219a221c246ca2eb05944c4a6731fc679057818516e77d9575a1",
222
+ "image_refiner.base_transformer.layers.2.norm1.norm.weight": "7e3429533590ffab7991b685430825e9e723e3374b925355191edf670c6935fb",
223
+ "image_refiner.base_transformer.layers.2.norm2.weight": "d3248bc86e9230794024d0366bad10932c81faddf0fb249f7547416d7daf7fc8",
224
+ "image_refiner.base_transformer.layers.20.attn.norm_k.weight": "5d93d20a883f3a550b6631d37bc6529fabf649501a9edda5b78d10a6931d5340",
225
+ "image_refiner.base_transformer.layers.20.attn.norm_q.weight": "389258347313076cd70298ed5d108b3d28b105d305cdfcc3e0ffaa2b9c7f455e",
226
+ "image_refiner.base_transformer.layers.20.attn.to_k.weight": "581f8e4b7dc499a335e50377b725b862171181812894764f892c6ee2e175b3cb",
227
+ "image_refiner.base_transformer.layers.20.attn.to_out.0.weight": "2c4f5ceb2d2cde896d3ae876c3016e81c92f2deba90bb7929cb96df97777e22e",
228
+ "image_refiner.base_transformer.layers.20.attn.to_q.weight": "ff976ae605989d411b1995edd538318e98f9595e4089b70c7e48e15d8fac46fa",
229
+ "image_refiner.base_transformer.layers.20.attn.to_v.weight": "66365532e0c3a0b66642447941bd27230018a853a73e37f12874c7747537b4fd",
230
+ "image_refiner.base_transformer.layers.20.feed_forward.linear_1.weight": "e36781c13ea1c896cecfaa4c89ddad62c1f57216033537932ba5072a2c086e21",
231
+ "image_refiner.base_transformer.layers.20.feed_forward.linear_2.weight": "30c67d87a8c9d562a52c9d4b67e2bc237e49dde790fcdb2ed7e239a121977d18",
232
+ "image_refiner.base_transformer.layers.20.feed_forward.linear_3.weight": "1abfee2cc5996b2829de93e80459b801aee4ba7c466efcedcfedf1c274d7356d",
233
+ "image_refiner.base_transformer.layers.20.ffn_norm1.weight": "d6967ff1540aad06f155dc8c16e2c7034b37fcfccc3651d7f8420b4287d4839a",
234
+ "image_refiner.base_transformer.layers.20.ffn_norm2.weight": "d8d1e95368aa4a65b1617d942d35677c6aeb0938e93b4df8e8e272100381594c",
235
+ "image_refiner.base_transformer.layers.20.norm1.linear.bias": "4c8c1c09f951ccd7f65e57bb818df1eafe760b0fb4de09fdc44503c199469aef",
236
+ "image_refiner.base_transformer.layers.20.norm1.linear.weight": "bc9ef0e73503371706b43859a82bab9c40e368252cc48ed3e2c4131afd4231df",
237
+ "image_refiner.base_transformer.layers.20.norm1.norm.weight": "28e438bdcfd30238bdb437a4bbe4906297d074a38062fdadbc163966f9c3ba24",
238
+ "image_refiner.base_transformer.layers.20.norm2.weight": "b14f16b999d6d836c7d85b60a9c4b71d54defa18626be64bafd049baf65602be",
239
+ "image_refiner.base_transformer.layers.21.attn.norm_k.weight": "ad9a3545144aaf7456e35a38510bb55a79e93befca2fd8dcb94f711cf31f4a51",
240
+ "image_refiner.base_transformer.layers.21.attn.norm_q.weight": "4d4ec8830f9c4a807996bca27c52631efd770735d5a66c15835d62f2428b76bb",
241
+ "image_refiner.base_transformer.layers.21.attn.to_k.weight": "5e90a7e5f35509b49cdac893df6c8b68ea7426265451bbbb112a3bf015f379a3",
242
+ "image_refiner.base_transformer.layers.21.attn.to_out.0.weight": "4abd3d578c7d0bb26591d4881b23d389731f6d358a0d4c6beaee2f9b7440db31",
243
+ "image_refiner.base_transformer.layers.21.attn.to_q.weight": "400d67d83cd8e500904be9190d95f8b3719c44a7d2b6c82473278280427a918d",
244
+ "image_refiner.base_transformer.layers.21.attn.to_v.weight": "1785ceb209c8c462edf40c9168b5a8fe77e10d632d0501a934adb99995cb9866",
245
+ "image_refiner.base_transformer.layers.21.feed_forward.linear_1.weight": "d3da1c21dbdd127d0b55af93a898c304bee8588b189019506586b674f481a54f",
246
+ "image_refiner.base_transformer.layers.21.feed_forward.linear_2.weight": "1951ef7258f5e1739fadccd7cdb73558fb47db1e164c822760cd194f32125053",
247
+ "image_refiner.base_transformer.layers.21.feed_forward.linear_3.weight": "95a5b8b33d102e87db21ce5c866fa2e5d247038864cfa29bfd07a7729cda95bc",
248
+ "image_refiner.base_transformer.layers.21.ffn_norm1.weight": "96ec48240b2c9102855a953c7dc1646ef241a0203e707450a82591e213a62a6f",
249
+ "image_refiner.base_transformer.layers.21.ffn_norm2.weight": "21bf27924a599ae03fa6e5bd5bbe856615fb07f6755d20f42f81c8bb776406cb",
250
+ "image_refiner.base_transformer.layers.21.norm1.linear.bias": "3206aa5f9464c82aafa40ebf58004723a8e145cc3604d70f0c23892b38ffb719",
251
+ "image_refiner.base_transformer.layers.21.norm1.linear.weight": "21550142a8e3b7cc9ccf38fb4353732e564c535f605505e85d01f2972eaa839a",
252
+ "image_refiner.base_transformer.layers.21.norm1.norm.weight": "1f8a5fbe5975dcc05b5de7cb2eb61202120d4419a554e0d1e5e0450a34e7badf",
253
+ "image_refiner.base_transformer.layers.21.norm2.weight": "1e6e6eb04e996df9441e44cc2bcb1c2434729cbeb8307a7ec7a22941fecb9cff",
254
+ "image_refiner.base_transformer.layers.22.attn.norm_k.weight": "2de9c985034e74672325fef74e100e81e315a55db0a967d37f85f5a75f127790",
255
+ "image_refiner.base_transformer.layers.22.attn.norm_q.weight": "37c84ac57dd14e83688340bcd816306f46a3bebfd2883fb5c71d278d4c5bcd61",
256
+ "image_refiner.base_transformer.layers.22.attn.to_k.weight": "74b25d16e1b59e1a3a1b2b01705da491d5e994ee63f3de8ed223bb7216321462",
257
+ "image_refiner.base_transformer.layers.22.attn.to_out.0.weight": "18d789baa4b29cf4ceaea0959f6f35ad0a62f8583bcb9c60123e5625ecb5de3d",
258
+ "image_refiner.base_transformer.layers.22.attn.to_q.weight": "5ef05e7e7cb547fbd68c9bfa68d1990f7323666f8e7349fde5feafad06533151",
259
+ "image_refiner.base_transformer.layers.22.attn.to_v.weight": "8608f5bc458e5085bb07c1c6ac18e09c500e2b4c5570b6b0b64c5ee2d0d5e43c",
260
+ "image_refiner.base_transformer.layers.22.feed_forward.linear_1.weight": "aa62eb5f466585d91e6c022b85ad139deedbd4019568a7fc37467f53190061be",
261
+ "image_refiner.base_transformer.layers.22.feed_forward.linear_2.weight": "27d540b8b9c491db53ad58411210816d2b28f3e5f6a454c65d21b5394e66202a",
262
+ "image_refiner.base_transformer.layers.22.feed_forward.linear_3.weight": "58b265c1dce3548646a27d372d9258f7a7e1d2814c99f52ced642a0d7c6cf9e9",
263
+ "image_refiner.base_transformer.layers.22.ffn_norm1.weight": "1aa3b76f5855b25d1cc4d2ada8a809c8862f1a6363c401fd59f353c5b44ae48e",
264
+ "image_refiner.base_transformer.layers.22.ffn_norm2.weight": "3060735bbec6292e045896951b7b64fbe3714dc05e493ab5f195dc5b84920a81",
265
+ "image_refiner.base_transformer.layers.22.norm1.linear.bias": "1c36d4a1d93bbe8e5c3827ca16ca1cc53f7d05b3a8d6569339fe436839b86f6b",
266
+ "image_refiner.base_transformer.layers.22.norm1.linear.weight": "c1b72916e15bafd7ebbc1eec965f09380b16fa8d7bd9130e6cfa9bf9e97bc5e7",
267
+ "image_refiner.base_transformer.layers.22.norm1.norm.weight": "e12f25b7037b07378f37d629eca55e8d3081f207e90193fa0c4524994c8f87c0",
268
+ "image_refiner.base_transformer.layers.22.norm2.weight": "b1bab0e644f152e14c6928ab574c6765d099b3ecae8791abaad693b03c891ce0",
269
+ "image_refiner.base_transformer.layers.23.attn.norm_k.weight": "0dd0814a18e0014411c68f2827b99ab7e5ea3a73f6cb11cbdfb320982c77f861",
270
+ "image_refiner.base_transformer.layers.23.attn.norm_q.weight": "07d7af057db8eeb287dce8263615d489a8da4928ef1bbf997775ac61a3491594",
271
+ "image_refiner.base_transformer.layers.23.attn.to_k.weight": "6fc6d614ea6e87e3a30200139fe28bd80172a0f626c4f439c8da492284c43b33",
272
+ "image_refiner.base_transformer.layers.23.attn.to_out.0.weight": "063563d4b986ae1b6c3f0384ef36d41226f6c764a575da6bfe1510f51682c292",
273
+ "image_refiner.base_transformer.layers.23.attn.to_q.weight": "e0ae1206dd1046fa0ef9ea9d815bfb7245b868482dc954ba53603a7b85809893",
274
+ "image_refiner.base_transformer.layers.23.attn.to_v.weight": "24fea0944650b80ca1ba8974bdf4325157b838d06c8310f7eff01e49145a522b",
275
+ "image_refiner.base_transformer.layers.23.feed_forward.linear_1.weight": "3f1a5c416429f77f6eb2f6a50e23d878d50e2551718be85b7c8102443cba09b1",
276
+ "image_refiner.base_transformer.layers.23.feed_forward.linear_2.weight": "9a60f6edde1f1a43fe5425912947fd3b789e7d983e2decda119753249192aa3c",
277
+ "image_refiner.base_transformer.layers.23.feed_forward.linear_3.weight": "398b55d6939b79ab192b6d3bcc55ac3406167a33b0d0716a734f6a8d08e70987",
278
+ "image_refiner.base_transformer.layers.23.ffn_norm1.weight": "4bd1020bb3ddbc7de984c9aa6e1c8e45c7db092f483045836d1f572318bbd300",
279
+ "image_refiner.base_transformer.layers.23.ffn_norm2.weight": "e09e7be0351f14498365ca2b4b54ed592f7499eb2f17f078a0b34bbecebbb6d5",
280
+ "image_refiner.base_transformer.layers.23.norm1.linear.bias": "9b6c3b22a8ef5c059dc914d24956da8b2fe561303f5b3e987af4572bb0694cc5",
281
+ "image_refiner.base_transformer.layers.23.norm1.linear.weight": "e4ee1f3458a0833c400316cfcc041d6e8178b7fdba834ddea09caf8339bc4a97",
282
+ "image_refiner.base_transformer.layers.23.norm1.norm.weight": "aa7023dad2e925c1edd8b3df03775c09e8ce2a9490331015df619e479ef04034",
283
+ "image_refiner.base_transformer.layers.23.norm2.weight": "dc124723656203e20791d072ca047034e605a2b63f1464129d0bf317a3399aa1",
284
+ "image_refiner.base_transformer.layers.24.attn.norm_k.weight": "7506cbc1d78a860952d5c47ba5bf5f11d7bfaeb10315bf812d79e007b32a0b43",
285
+ "image_refiner.base_transformer.layers.24.attn.norm_q.weight": "538adb54ab3eb4c239d9eb488f12a6855ef627e722dbc40e3e6e1777db2c9d37",
286
+ "image_refiner.base_transformer.layers.24.attn.to_k.weight": "a2f4f74c7f4d0a0466d018c6ab6fa6a4c0c97474b1e7328f929870ae92bfb783",
287
+ "image_refiner.base_transformer.layers.24.attn.to_out.0.weight": "e80752b8368a78d6c18aad377949c5e556b184b8452f08df775f7aaa41d18c37",
288
+ "image_refiner.base_transformer.layers.24.attn.to_q.weight": "41498970a961f0c345834f2bbfcc9daab28552f0b91d9e4eec83cf8be8b3c2e3",
289
+ "image_refiner.base_transformer.layers.24.attn.to_v.weight": "ed7f68d3929af845737b8629d4e5ae03f8acbee0e9d7e050019500feac98094d",
290
+ "image_refiner.base_transformer.layers.24.feed_forward.linear_1.weight": "567aa84a9c4cc56ad9f661d93055065b54a86b360c348d3e1b0d66f002a15ac6",
291
+ "image_refiner.base_transformer.layers.24.feed_forward.linear_2.weight": "7d1bd20f6ba714d85ccf9cb7096209283f1bb72b7076c479bbaf202c751d3d7c",
292
+ "image_refiner.base_transformer.layers.24.feed_forward.linear_3.weight": "ff3498815fe2793d457a55f6efab85e0a0861a7d4ebeeb21fdfdcab9ea846b33",
293
+ "image_refiner.base_transformer.layers.24.ffn_norm1.weight": "4ededb2150801de279cefe57f93106d47e9d65f9ac0635f45f981aa37bca39e5",
294
+ "image_refiner.base_transformer.layers.24.ffn_norm2.weight": "963ea939651b44718e6789a544f185676a48c92aaff4333275e7a9ba1c178182",
295
+ "image_refiner.base_transformer.layers.24.norm1.linear.bias": "89c0146f21bb439c2f2bd4f633f74c5fb1994c6a70da686279baeba50c741232",
296
+ "image_refiner.base_transformer.layers.24.norm1.linear.weight": "9d19195871e1bc2f4fc3a9c90b1640f15e465b420ac9ea4c250ab981f844c295",
297
+ "image_refiner.base_transformer.layers.24.norm1.norm.weight": "83c2d2bcdbc2b8296bebad0961a50dcc49393d4acc0e4a5b37116365d58763b6",
298
+ "image_refiner.base_transformer.layers.24.norm2.weight": "3e9b5e4778953239386e2ee1744cd3a7817bb499589d7029ab33adfcdc067657",
299
+ "image_refiner.base_transformer.layers.25.attn.norm_k.weight": "94350ab2b00c117367cbd7cff80ea07ba24b5f9bd8764b0e645b6944838e8c19",
300
+ "image_refiner.base_transformer.layers.25.attn.norm_q.weight": "79b45f3a609c0578dffa1c606c574feeac93eb200637efc74452c83b445ce463",
301
+ "image_refiner.base_transformer.layers.25.attn.to_k.weight": "da65f00a63856be139fa05d05adacb486b9045f763ad390b180d85b2b664e8bc",
302
+ "image_refiner.base_transformer.layers.25.attn.to_out.0.weight": "6d2d0b9118e45067245a59ccaf076244fc29e6c61b84df559b60324935ee3274",
303
+ "image_refiner.base_transformer.layers.25.attn.to_q.weight": "b199a7964e3fff8d5c12e2acaea81fe833e3c2d94013d201fa70947b1dc4135e",
304
+ "image_refiner.base_transformer.layers.25.attn.to_v.weight": "b4ee36b2ce16ba882c0ec08be8a69d4311025032284c9c47ecf428186accdcb4",
305
+ "image_refiner.base_transformer.layers.25.feed_forward.linear_1.weight": "e39dad5b652af4d041fa7ad5317a8e27ef67d13bd014a02f14909051ca440938",
306
+ "image_refiner.base_transformer.layers.25.feed_forward.linear_2.weight": "bb40cb0bab208f1e3029514101fe2c34e5b86c18a43ec666fac272d5bbe63ec8",
307
+ "image_refiner.base_transformer.layers.25.feed_forward.linear_3.weight": "47ec657d743bdf7e2af357c19de47d5d133c8e659056ac107b163a6c01604d4d",
308
+ "image_refiner.base_transformer.layers.25.ffn_norm1.weight": "fa04078661f183874f3fc40e44504c5c92929edf0e1817bde4115bb47e166144",
309
+ "image_refiner.base_transformer.layers.25.ffn_norm2.weight": "e6e88894371e81a629f5ade2256faea5bd197fa16602488fe378f00689e57a56",
310
+ "image_refiner.base_transformer.layers.25.norm1.linear.bias": "008de1fb501578f092ff59fa05018dde647f0c96158dc606e249cec791db2fd9",
311
+ "image_refiner.base_transformer.layers.25.norm1.linear.weight": "535fdef56c20597c35f761681bb9a415d6c3425c68cdde45c1f393740d7ec8fb",
312
+ "image_refiner.base_transformer.layers.25.norm1.norm.weight": "ba3e365ccd9b63737dba81b3c4114409a8d816439152fa20b9fdffae7f0886f8",
313
+ "image_refiner.base_transformer.layers.25.norm2.weight": "0336c51c4ab9af241bf9da00d863f1fb44615a87484efd48faaaf6e60955b969",
314
+ "image_refiner.base_transformer.layers.26.attn.norm_k.weight": "6f34e5b771ab8ed4ce29ffec715292e360654779e599bd0fe72fc2d8339c6f95",
315
+ "image_refiner.base_transformer.layers.26.attn.norm_q.weight": "5d1181f865ce47b5cc2ab83ab4adf3ac4c49427c7a694c0d924157c6b157a4ab",
316
+ "image_refiner.base_transformer.layers.26.attn.to_k.weight": "9313fda5e0e32da6774b8198963d98d5d2723e3c3dd8338cae53ecf5e0f20704",
317
+ "image_refiner.base_transformer.layers.26.attn.to_out.0.weight": "7a492829543401e552c92d4e0bc67fd0a959a5821b9815d988b83fc95196e208",
318
+ "image_refiner.base_transformer.layers.26.attn.to_q.weight": "3076a27cf297e02d067a7da2daa3ad56beb9b2dae6bb5bd2758384a28149e8b8",
319
+ "image_refiner.base_transformer.layers.26.attn.to_v.weight": "212357daa3eda7683e8258c85d9dc7a6648b9b47b872d0ca84b8f918d3d36373",
320
+ "image_refiner.base_transformer.layers.26.feed_forward.linear_1.weight": "992df65b5a5d52f867a08fb3b921f69361cb94e5cedf6af1a536c347b28063ab",
321
+ "image_refiner.base_transformer.layers.26.feed_forward.linear_2.weight": "f8c8e03692e1ba05e752e38f574ba44ee0014318400c43da14a552c66918be52",
322
+ "image_refiner.base_transformer.layers.26.feed_forward.linear_3.weight": "78a9cdb3f4cee154ba331058d78ed7a5b5343e226248dca89f1e450187c6f00b",
323
+ "image_refiner.base_transformer.layers.26.ffn_norm1.weight": "d6a664c52540858bc0a6eee9259846540bcceb1b92f2b3f9a51adbbaf2d5d1ae",
324
+ "image_refiner.base_transformer.layers.26.ffn_norm2.weight": "26a737cabd7942b0ffafe43ae37adcaf97b86da6d0972c082dcb326e6f940738",
325
+ "image_refiner.base_transformer.layers.26.norm1.linear.bias": "d678630ce076fcbea9942f518b7d532b7a0c9d915cbbe128354120a0f8f42d89",
326
+ "image_refiner.base_transformer.layers.26.norm1.linear.weight": "4182da847672593321f80d97e7a5612bb34ed6b99e28120a09057a68f8536148",
327
+ "image_refiner.base_transformer.layers.26.norm1.norm.weight": "641cb8d1831e0f3192f289253c8a13680b716ae1cdbf67b2e57cb832978e6dea",
328
+ "image_refiner.base_transformer.layers.26.norm2.weight": "4e7beca14bdfac71ddd436dd8d170573427a323ed6e0302cc8d33c4b30823254",
329
+ "image_refiner.base_transformer.layers.27.attn.norm_k.weight": "7e574ba5bc5fde6bbfcb8fbd078b0801cda147fd75f45f6b5738badfdfd08690",
330
+ "image_refiner.base_transformer.layers.27.attn.norm_q.weight": "ae9244f21b21fc41abd10dd9f8ac6c8002274078cf00fbf195bd7b295dbbbabb",
331
+ "image_refiner.base_transformer.layers.27.attn.to_k.weight": "cca9740228aa8e6088b50aa02c8c04012fe06fa78630ed58fe1d4c24c38b451b",
332
+ "image_refiner.base_transformer.layers.27.attn.to_out.0.weight": "f642bb7a1188b1a2a4818b11867a8bd879c24e1b12a3895e1ae013301f08f9e5",
333
+ "image_refiner.base_transformer.layers.27.attn.to_q.weight": "9551fc75bc6edcba15bf37327cd996ebc6bc9804e467e0e46e9b968c072418e6",
334
+ "image_refiner.base_transformer.layers.27.attn.to_v.weight": "446131d81d22c1edaf52e7d22563663326557015e7141ae820f0b395cde459f5",
335
+ "image_refiner.base_transformer.layers.27.feed_forward.linear_1.weight": "6765a3e46e414e3acb5dd0bec0e7ba9c02a296a4d276471c651d246aa18e631f",
336
+ "image_refiner.base_transformer.layers.27.feed_forward.linear_2.weight": "b807c3337f6179d4232fb63d3f61f2123c23a793f6549446b266a50288307764",
337
+ "image_refiner.base_transformer.layers.27.feed_forward.linear_3.weight": "4a41633f7f57a1a3330b27a2411f5dbac7a884fa5ccc83708b22c1166a482731",
338
+ "image_refiner.base_transformer.layers.27.ffn_norm1.weight": "a2cb7c60adf6dd6677a1b509c6ae01dadae8efdd0d4a02bcb2c6439d96eee553",
339
+ "image_refiner.base_transformer.layers.27.ffn_norm2.weight": "1f7eb72eb07bfafdde1bfe436837ba6eec7d20988fca01bf03b668614e508718",
340
+ "image_refiner.base_transformer.layers.27.norm1.linear.bias": "f5bc11e9061252fbf0947bedc65b237e600abc9f451826c0efc6bd80053701a2",
341
+ "image_refiner.base_transformer.layers.27.norm1.linear.weight": "732645655f43337df1b6eceec2b0a6329ad413930965c842a3dd4d00dbe275d3",
342
+ "image_refiner.base_transformer.layers.27.norm1.norm.weight": "bf014d4941b9684a7e48933622747f2e8fb9a6cf7ca6eff256b8936ac4eed442",
343
+ "image_refiner.base_transformer.layers.27.norm2.weight": "2b7c72ef9c30298f16f39e4124e8c82548b972c92fb60c0c03cf292f2cb8336b",
344
+ "image_refiner.base_transformer.layers.28.attn.norm_k.weight": "fc6bd6471c053f64cddfc15d757bdeab5b11203c054e46120fd92b2c126815d4",
345
+ "image_refiner.base_transformer.layers.28.attn.norm_q.weight": "2361eac9fb0be488b2d2144c539364246c0744e9b13a5c4428b5ba7c41923dc9",
346
+ "image_refiner.base_transformer.layers.28.attn.to_k.weight": "7b27c64dfee598cbabb74d0bb498fd3736dd2a33b44ed97ee02d79d0f021b510",
347
+ "image_refiner.base_transformer.layers.28.attn.to_out.0.weight": "e0217108560227bfcf3bf87bea19ad003c420ac2fb225f17a64d14c8673d2c0e",
348
+ "image_refiner.base_transformer.layers.28.attn.to_q.weight": "3e39481e090e4dbcb797d7796d632ba605b0cd24a2fd104312319c7ad72827fa",
349
+ "image_refiner.base_transformer.layers.28.attn.to_v.weight": "3e431f3caef8ab63538e707e19c142224771886b17d7f36feb101af51b6eacca",
350
+ "image_refiner.base_transformer.layers.28.feed_forward.linear_1.weight": "2e5c74366e2c6a180dde0cf4f4aa63f415792692c38221e83dca096acd6de2f5",
351
+ "image_refiner.base_transformer.layers.28.feed_forward.linear_2.weight": "b8e2d3ebe1a40bd4b76f330e3f7b25e240965b933266f23f8cf6276d8d6df2a5",
352
+ "image_refiner.base_transformer.layers.28.feed_forward.linear_3.weight": "df011ef45ecae3967ce3613d688905906748cf0bbe0be415ffa2fcb4e2e00bd6",
353
+ "image_refiner.base_transformer.layers.28.ffn_norm1.weight": "8cdc37774e3cf75a7fe7fa5a8f94e93eb7b73de6417d208609a2a7a66dce9da4",
354
+ "image_refiner.base_transformer.layers.28.ffn_norm2.weight": "b367ac22431a3d0b7dda27e1b5063ff54b5354498318c9f2605e4625277b272d",
355
+ "image_refiner.base_transformer.layers.28.norm1.linear.bias": "898afd30a921421c7108551ccf9049436dc3acdae7ef91d6b8ecc9565fdb640b",
356
+ "image_refiner.base_transformer.layers.28.norm1.linear.weight": "7f48d89759d48c71b1c213bd62d7bd7b810f339af75bdf4c06cbdb0fd7c95ae2",
357
+ "image_refiner.base_transformer.layers.28.norm1.norm.weight": "6defa2b9f9d8711ce4b16d50cad75c75c1e91e7325872c129175cae96f4d8aa2",
358
+ "image_refiner.base_transformer.layers.28.norm2.weight": "3e823ca69963d3619af1b6e226e7444932efee75bf7f00394f5ce6bcfa6b415d",
359
+ "image_refiner.base_transformer.layers.29.attn.norm_k.weight": "5fa3395a841197ca8ff8ff09254339cd64fc5ac7d7056a75a07663e75ef95a70",
360
+ "image_refiner.base_transformer.layers.29.attn.norm_q.weight": "1b08072fb3ee54b039a45032ee11df06480cc6021e08222b284347088115def9",
361
+ "image_refiner.base_transformer.layers.29.attn.to_k.weight": "f24da63c86be7a440d0de35e21560716b1b802cd232263f4c740f27130101dde",
362
+ "image_refiner.base_transformer.layers.29.attn.to_out.0.weight": "f09389f06d0dac3092a772e1f37d0bac0bdd6ff65fed87bb878b394bc62bd464",
363
+ "image_refiner.base_transformer.layers.29.attn.to_q.weight": "1d1eabacaabd17583e81b929e0fee3b9f6ffaf5b943fdaca9fe5ecae4dc58940",
364
+ "image_refiner.base_transformer.layers.29.attn.to_v.weight": "4920a7cee69cbf4ff0e15bbdb91f7eece511cd641c0d3a225bb3711ea0220738",
365
+ "image_refiner.base_transformer.layers.29.feed_forward.linear_1.weight": "4260cfbd9fb6272a732a8d5873cfdb3a58383175d0201289a2f8d466c1e866d3",
366
+ "image_refiner.base_transformer.layers.29.feed_forward.linear_2.weight": "4c3be48b7f6d3ccbdbd1748c3334bac7a02c86a34a961b5c257f49c2d3839212",
367
+ "image_refiner.base_transformer.layers.29.feed_forward.linear_3.weight": "65dcecee3471f932c290abd487088263623e8011939fd4795bc01a13931ab4a2",
368
+ "image_refiner.base_transformer.layers.29.ffn_norm1.weight": "6f9f2217afd87da7827afc403731a366aaaab162aa39ffac90dcc779edb6a0c8",
369
+ "image_refiner.base_transformer.layers.29.ffn_norm2.weight": "11a3f9a2a6dca48bdd26b00410a53ceb8f027ec694d88283d44ca828fbd151ae",
370
+ "image_refiner.base_transformer.layers.29.norm1.linear.bias": "ddc591240c707d5b31c372d921b88b0683da83ae77e634bca0dd05723b1debb1",
371
+ "image_refiner.base_transformer.layers.29.norm1.linear.weight": "ece7b1fa468943f94f3758785731ad3b3fa647e798da870fd2c85cb752d7a5eb",
372
+ "image_refiner.base_transformer.layers.29.norm1.norm.weight": "bbe967679792425090c5200d161279d91af5ec49c2de6cfd1bd43e7ffd1cb7c3",
373
+ "image_refiner.base_transformer.layers.29.norm2.weight": "6f5d7a2e5e01cfc38352d5901b95eca336c929acc5519884f7086b0869c35273",
374
+ "image_refiner.base_transformer.layers.3.attn.norm_k.weight": "c9524fe908034a4d1eb53d092f65aa9b56a424beae32fa8c7c0dad8058653eaa",
375
+ "image_refiner.base_transformer.layers.3.attn.norm_q.weight": "3455a614921a66e5cc2b90cc99840ded47839c2574d55c7c466ea7e802d20fe2",
376
+ "image_refiner.base_transformer.layers.3.attn.to_k.weight": "c3c3d57a3825d3ebcf46e33f9d794d0c7e430bdf41a08b62ab6526b7eca2e789",
377
+ "image_refiner.base_transformer.layers.3.attn.to_out.0.weight": "8e1d3eed94828dcce00b8b3917375a849cf22d842164b5d5304f2be590e447ee",
378
+ "image_refiner.base_transformer.layers.3.attn.to_q.weight": "2b577400e3a8ec3f6f5ae399200a48761174a9d723f4c8725e66c0139acafe7a",
379
+ "image_refiner.base_transformer.layers.3.attn.to_v.weight": "0b2aa791c8ae1a626bc0e94536533b6b877b8b941b11290fade48ab3e1798bf9",
380
+ "image_refiner.base_transformer.layers.3.feed_forward.linear_1.weight": "d545fc5ec185dff23ed0388eedebe6fb8408eb52bd7cdd1f367d2ea0c009fb48",
381
+ "image_refiner.base_transformer.layers.3.feed_forward.linear_2.weight": "29a785787dd59289a4a72972333263cb052b2fd39459fe3fc3770d9adad072a3",
382
+ "image_refiner.base_transformer.layers.3.feed_forward.linear_3.weight": "37a9617b24ccf8dcdc63f4dbe11a969e4c1b24dcf0ee9c2a265b1243aa57cd0e",
383
+ "image_refiner.base_transformer.layers.3.ffn_norm1.weight": "0b0114684e6d8ab086ebdd5745f5209fc6d27e5badb77088d1fef36e2bf066d8",
384
+ "image_refiner.base_transformer.layers.3.ffn_norm2.weight": "6329aaacb92f31b14e7f24c925ef12529384408847f25978e164ab909824c633",
385
+ "image_refiner.base_transformer.layers.3.norm1.linear.bias": "e334473fd509c09a59dde5cbcfad68bba30e3fa0a9bd3b48fdac30a6969a1285",
386
+ "image_refiner.base_transformer.layers.3.norm1.linear.weight": "6c8927b68bb1e1366b58cde2cef2f8fb953c2693483ddbfa9e57ffb4e3993402",
387
+ "image_refiner.base_transformer.layers.3.norm1.norm.weight": "ef930dcc0e1bc7d0c9c6b8f863389a33dab9cb61e115397fed86ef80e5ad1f62",
388
+ "image_refiner.base_transformer.layers.3.norm2.weight": "6da9543ba9d9bb2967ca221b787a1b00f1ee6eaa88ee2a60b29615edd788f02c",
389
+ "image_refiner.base_transformer.layers.30.attn.norm_k.weight": "395180fb5eab449a60b1b2b04fa569f43ae11857f0d02b65e1fc533755a24e6c",
390
+ "image_refiner.base_transformer.layers.30.attn.norm_q.weight": "d8b2638e0e380a7cf123465246e6584e3db8069d3c23414508d2d1d067c6471e",
391
+ "image_refiner.base_transformer.layers.30.attn.to_k.weight": "02cbda675526348c58c4c2807428d5487fdde557a3a22fc99eb04119d7c02d99",
392
+ "image_refiner.base_transformer.layers.30.attn.to_out.0.weight": "6fa5f774426717dfbfe28ad9189c97ebb6707d5116f51975bf0c2dc522f08bca",
393
+ "image_refiner.base_transformer.layers.30.attn.to_q.weight": "517b83d0163bf69832389fb730243dd59b4a64e4de411afa6c824661e4cd9134",
394
+ "image_refiner.base_transformer.layers.30.attn.to_v.weight": "f2be9ccf7b38b5e516f95925aa88bd45f1348f1149b92773f098e894f273fb29",
395
+ "image_refiner.base_transformer.layers.30.feed_forward.linear_1.weight": "76e91692a55ad5efec1c9c5b5b0d64859e9425e651a562bb74aff4cfd2e679b8",
396
+ "image_refiner.base_transformer.layers.30.feed_forward.linear_2.weight": "4703cd559e141a15520cbe93c443d9eed677c519edeefa1a2962170dc6a60849",
397
+ "image_refiner.base_transformer.layers.30.feed_forward.linear_3.weight": "edd8a7cfc8e5bbc3dc7d4d238f70854bb4c987c6ece8958a88caa2a556bc553c",
398
+ "image_refiner.base_transformer.layers.30.ffn_norm1.weight": "be340f00aaebd4775481942ddb041a28d9dad4dd68547dc18fbf12f94c196e40",
399
+ "image_refiner.base_transformer.layers.30.ffn_norm2.weight": "c8d5fb72abd21a9fca787513c6cdf95246ab836bfd61c77115ca5404c4fe5901",
400
+ "image_refiner.base_transformer.layers.30.norm1.linear.bias": "7c16cca95b276e6601974d490bd65c482db8634324b4f4210e30b8f61059566f",
401
+ "image_refiner.base_transformer.layers.30.norm1.linear.weight": "0a2e613ae19d39904d9c165fef981b5590c489e875cd73b9f3ecec782c0a6f2a",
402
+ "image_refiner.base_transformer.layers.30.norm1.norm.weight": "4b8fe14950cd594228b8f0cf724974308c26eaae52bdd27aa7e74b3911e49d94",
403
+ "image_refiner.base_transformer.layers.30.norm2.weight": "a4b62c7ccf7eadb23fcd6e4f0ee4fa20281d4df02caf7b0c598af99a38197ca8",
404
+ "image_refiner.base_transformer.layers.31.attn.norm_k.weight": "d700595bb2b08a72aef21921b875f587ba83ff9217540410a33a0f263bf70c0a",
405
+ "image_refiner.base_transformer.layers.31.attn.norm_q.weight": "58fe97f5a600e44f5800584faf84c93072e1098b449beaf20ba07eea36fa4838",
406
+ "image_refiner.base_transformer.layers.31.attn.to_k.weight": "b5712e3fa2b98a1286ec6719a347452b79c57936ad0475c7b6d16ca6e7ff91e8",
407
+ "image_refiner.base_transformer.layers.31.attn.to_out.0.weight": "c76488a0f6a690782568e9d1b44a33e3b0a67779df7ad3aa242575dd212c6504",
408
+ "image_refiner.base_transformer.layers.31.attn.to_q.weight": "f64a15fcf75a8b8fc5de796ac437604bb405f5e205f514c260060a74cac9c2aa",
409
+ "image_refiner.base_transformer.layers.31.attn.to_v.weight": "b8ea07657477052ababfa7e7652e7ca56fb07fee1eccccff86ea8c51b53c7d8b",
410
+ "image_refiner.base_transformer.layers.31.feed_forward.linear_1.weight": "b8969feb57c3acb46b122baea236eb046ad512abfeb09a37ebc26157b48b98f2",
411
+ "image_refiner.base_transformer.layers.31.feed_forward.linear_2.weight": "fedda95866ba91d00421b27aebd1b2cf2c1b23a27ed382c2b13ae670883801d2",
412
+ "image_refiner.base_transformer.layers.31.feed_forward.linear_3.weight": "337e2b71afbf63a9aeacfacb0cc7ccbb4f6c03e032eb628fd1ff0ba5b958f4de",
413
+ "image_refiner.base_transformer.layers.31.ffn_norm1.weight": "158745c91179e72b4fa1a4cc22fa194efd2dcabeb254c133eef3eb0d18b11af8",
414
+ "image_refiner.base_transformer.layers.31.ffn_norm2.weight": "e87d5e7ce4cb3f042254d64deedbdf40079fbe4aef8f80ce25138fc7efc9e816",
415
+ "image_refiner.base_transformer.layers.31.norm1.linear.bias": "3ea01d193ba813dab8145a503f21d1099f655604978ee66545d94ca80be226df",
416
+ "image_refiner.base_transformer.layers.31.norm1.linear.weight": "3ced36bfdf6e7d0ab4ef9f6c8e95e822f533d9cd61dea1894db9d14f4c53355b",
417
+ "image_refiner.base_transformer.layers.31.norm1.norm.weight": "5c17a698143d3425466f60c59ff020dd634bf0b01daa3a07b1b16175a47a8727",
418
+ "image_refiner.base_transformer.layers.31.norm2.weight": "f86633eb7caae43ab96f9160957ea7adbc9d69e4dc1983677e7cde2c350fa637",
419
+ "image_refiner.base_transformer.layers.4.attn.norm_k.weight": "0d6a688537e7aa534c8f407eca446a2c0cc4076447aee2f2b1ad05635c57b407",
420
+ "image_refiner.base_transformer.layers.4.attn.norm_q.weight": "5fc550a5bf088b8a4d990435ad163665b8af7c4c8a6b09a97447900463a01f93",
421
+ "image_refiner.base_transformer.layers.4.attn.to_k.weight": "06a0df5b8c8ac5f0deb02d8b472441fa3e19ac52339a53564f03bd9e552c9421",
422
+ "image_refiner.base_transformer.layers.4.attn.to_out.0.weight": "8421dbf5010c9060ded58587770cafd0055d05eb78fe31942ecc43d4d13ae071",
423
+ "image_refiner.base_transformer.layers.4.attn.to_q.weight": "ad7f33deef9e41feda2300467ab45ac342c7fe1dd3af70fb57a8645c2934630c",
424
+ "image_refiner.base_transformer.layers.4.attn.to_v.weight": "29e70b179e58270675d82523a467abea2ff5f8331275265a3dd8c5def1b1990b",
425
+ "image_refiner.base_transformer.layers.4.feed_forward.linear_1.weight": "530ed4c96fff6369ff95767a4a2bfab62da685d43ab0a552ba9f5f00de9b3a9c",
426
+ "image_refiner.base_transformer.layers.4.feed_forward.linear_2.weight": "879f57b95fceb42b92f80ce59ad000fcb4d0060a9d7e0438f02b863a09029402",
427
+ "image_refiner.base_transformer.layers.4.feed_forward.linear_3.weight": "187f5a60b584402871db1ebf46c0f50d42e3a1ecd010645c7794987037a53a70",
428
+ "image_refiner.base_transformer.layers.4.ffn_norm1.weight": "42234369208d5f51d0c6872f5e4239563d20dae1498c9dd8638c9486b46e8861",
429
+ "image_refiner.base_transformer.layers.4.ffn_norm2.weight": "8449eb45612580109e7453c0266a6f56199efcadab2fd22dabeb28dbb7a560ec",
430
+ "image_refiner.base_transformer.layers.4.norm1.linear.bias": "cc9ebfe76070edcc73fbbd559ddc5ecf10b94e9039db9622db1c0e9f16c1b7b6",
431
+ "image_refiner.base_transformer.layers.4.norm1.linear.weight": "5adb3f1466807aff5897f66df7f7cce2fa2d5f952033614cda9d27701086a5f5",
432
+ "image_refiner.base_transformer.layers.4.norm1.norm.weight": "44673af81845abb323324ab2cae60d63f7bd26652a746282f0d12d5bb46bb6b9",
433
+ "image_refiner.base_transformer.layers.4.norm2.weight": "78453ce56c20d5e6269c7c4137e4e894b7fb2cc61c7e3ba4460ec99427627570",
434
+ "image_refiner.base_transformer.layers.5.attn.norm_k.weight": "c75b3ae09d82812164d076deaac478b5dfb01dfb0cd7c601c464edd804cff5d8",
435
+ "image_refiner.base_transformer.layers.5.attn.norm_q.weight": "82ea3b4983393b75e8e249e031e6b849bcdf5f477dfb3046db5de6631b62d158",
436
+ "image_refiner.base_transformer.layers.5.attn.to_k.weight": "0d819740930fc71aef5f64e8b51e6e91a6ec273ceb46d5fdaf352f940267d2d0",
437
+ "image_refiner.base_transformer.layers.5.attn.to_out.0.weight": "5d9fa695e3941541b0406705d577f746c69b0594276bdcd6883aa599d5595860",
438
+ "image_refiner.base_transformer.layers.5.attn.to_q.weight": "39dd3bb55411f5ee20b3e6b5510f3a97be70641ad3b9c262c122a1d2ce768ba4",
439
+ "image_refiner.base_transformer.layers.5.attn.to_v.weight": "5a6625ae3f65e4557d6e9e99d9a3c8c656743a8120dcaf7bd3e326a83da7274c",
440
+ "image_refiner.base_transformer.layers.5.feed_forward.linear_1.weight": "0b110d94a212221a4471e0993eadcdfec38a6cf1de22056c7939edc6387f7dbf",
441
+ "image_refiner.base_transformer.layers.5.feed_forward.linear_2.weight": "a33c3d306895fca636fe8319967116efb7e99174319681a087cba51de90a2112",
442
+ "image_refiner.base_transformer.layers.5.feed_forward.linear_3.weight": "30a50bb2c820364eb243bd2e61a4dbb4c99cc0786749d64b16e54cc1bbcf5c9b",
443
+ "image_refiner.base_transformer.layers.5.ffn_norm1.weight": "c87fd7d578537c5ad2f240378f18776bb9a12798882f8a7d3c156c0885ed1354",
444
+ "image_refiner.base_transformer.layers.5.ffn_norm2.weight": "6022115399bcfa0139624d1aa5d358d2efd7f75971cf724e41078b5696ab2a1b",
445
+ "image_refiner.base_transformer.layers.5.norm1.linear.bias": "7c6e7dedcdb7039778811f2b7e7e91ea06657023af2f51adb644df80bc3deb63",
446
+ "image_refiner.base_transformer.layers.5.norm1.linear.weight": "fb0134588f405bb3dc4246982d48d6a2083928212e1aae921bb138bacd2e49b7",
447
+ "image_refiner.base_transformer.layers.5.norm1.norm.weight": "0c649b9a70be0382042d5cd412f31c58869c4cbb028746b74d39d8b62a7b2990",
448
+ "image_refiner.base_transformer.layers.5.norm2.weight": "d3216a95255f7ea15c8d04a02782ad599f17d123623410dac38a2b0b1e98fdc7",
449
+ "image_refiner.base_transformer.layers.6.attn.norm_k.weight": "ae7310dc22c0f18fe0e65f6605f2623006b4b1d48ff0f02f8a0e64072629e365",
450
+ "image_refiner.base_transformer.layers.6.attn.norm_q.weight": "e0dfd9c28acc60eb5f8f0a7c9a9f5faf2aa8038ee22ff4e3904d3b95e72c58c8",
451
+ "image_refiner.base_transformer.layers.6.attn.to_k.weight": "3cc72df34a6c2791ef116d500058949180c8ed2458304ccc4d4c6d25998357f9",
452
+ "image_refiner.base_transformer.layers.6.attn.to_out.0.weight": "71e3c9badd9d3f80d32ea12b91e18485a85908521145a73e2d211c5a03ae1abd",
453
+ "image_refiner.base_transformer.layers.6.attn.to_q.weight": "50458d86cbcfc1d2dd9bef67abb63fedf7cd13662adf65a2d200f83c0d5c9e61",
454
+ "image_refiner.base_transformer.layers.6.attn.to_v.weight": "4079226ac3ea8574c02e11a3ef08d8300ea942eac5d2f79f9ccbce8d3989d3fd",
455
+ "image_refiner.base_transformer.layers.6.feed_forward.linear_1.weight": "333c63eb96307448a7eee50ea53784b2ef29e413dd3710c0cefd5f561dd43f89",
456
+ "image_refiner.base_transformer.layers.6.feed_forward.linear_2.weight": "bb2470360489756d7d5400553474f0b869262967ae5f638a9f820b247f1670f0",
457
+ "image_refiner.base_transformer.layers.6.feed_forward.linear_3.weight": "87e5007648b0d6a821f134e6228e72423735cae123209a082c230f013867cdea",
458
+ "image_refiner.base_transformer.layers.6.ffn_norm1.weight": "789f0e4e6098064e876e2ff3d57f87ef67bc69fe4dc0ea91025399b62a782395",
459
+ "image_refiner.base_transformer.layers.6.ffn_norm2.weight": "e6f70b5a22771e84df5213747abb3a52bbb71fd5eb34b3f32eeb37716887a678",
460
+ "image_refiner.base_transformer.layers.6.norm1.linear.bias": "6aa83416a63eb8c092aaaaa17e7582fce3bbb6d73dbe46f138765e05fb8e0b07",
461
+ "image_refiner.base_transformer.layers.6.norm1.linear.weight": "087574fcac3f564a56047fed20cb93b7e965e8b6c75ea08b913e3c567f2682ef",
462
+ "image_refiner.base_transformer.layers.6.norm1.norm.weight": "78538ae68c76797a628b197715573a2c381a0ec129494ff24a246e28320bf62f",
463
+ "image_refiner.base_transformer.layers.6.norm2.weight": "10f605771665ee9322688750e1e13ba82f684c468d3c10d8f354bc48a4912253",
464
+ "image_refiner.base_transformer.layers.7.attn.norm_k.weight": "076a629aa63cef54c62a83241cf3c9c5d29284ece032878563b3c2ca8ed08120",
465
+ "image_refiner.base_transformer.layers.7.attn.norm_q.weight": "fabb10cac258aa6368be8a960146cbcd3e6a8a34f4c9912842cabf638e88cb25",
466
+ "image_refiner.base_transformer.layers.7.attn.to_k.weight": "1e4bbfb7109b2b07e7732ce6ea217f86844985b51289f09f5134c65bbe5ad95c",
467
+ "image_refiner.base_transformer.layers.7.attn.to_out.0.weight": "2204a8a7a3b7c7492cc9458f10ad900bb24ff50811741db49c73d51219b0ab6d",
468
+ "image_refiner.base_transformer.layers.7.attn.to_q.weight": "201b2e2f7df1e2e5bcd0dfabf988b53834d4a4f02daa2894529bf12b26e3c8bc",
469
+ "image_refiner.base_transformer.layers.7.attn.to_v.weight": "6ce9956227974016a4c732861c774ec18d755bd2dd0bab424dd2aeda408a6499",
470
+ "image_refiner.base_transformer.layers.7.feed_forward.linear_1.weight": "6c0d290d10b26971573e690220638dbb66ecdf5ad030017b029efd7dff3a45d5",
471
+ "image_refiner.base_transformer.layers.7.feed_forward.linear_2.weight": "2de73cd40b210c56b81b01cd432aca9e15c451681f37d105e9014373b97bd3c1",
472
+ "image_refiner.base_transformer.layers.7.feed_forward.linear_3.weight": "fd6c2242e13be26efaefa28e791402254efccdd7f40f25058887799c16863246",
473
+ "image_refiner.base_transformer.layers.7.ffn_norm1.weight": "3a8eb9e2ad311195d516b60c01cb6f5c34ccc63d56f8e8e830590ab824c72585",
474
+ "image_refiner.base_transformer.layers.7.ffn_norm2.weight": "6bea33167945e81f5412f23ea468e2a0f5a4a3960812dcf38cd3bca67c375910",
475
+ "image_refiner.base_transformer.layers.7.norm1.linear.bias": "dc6eec2c6fe8f9b4a869cfe4730f062ce03dc352291db103d256d237e53758fa",
476
+ "image_refiner.base_transformer.layers.7.norm1.linear.weight": "1c7b9d37673e47b3d766fe5c1b5df77bec76af410c70b0c2b53b14f0e14e9c0f",
477
+ "image_refiner.base_transformer.layers.7.norm1.norm.weight": "7ec3a7c32ff171cb5c463420e728f09852084a01a50251f36f7b0c4ab2ce1282",
478
+ "image_refiner.base_transformer.layers.7.norm2.weight": "ea241655fd2aa75961e67845ae2614659f81a2619594c559130b857817d9f73e",
479
+ "image_refiner.base_transformer.layers.8.attn.norm_k.weight": "1b073e18b5f86ee7dd8a78d444751f627977c229cbfe84ccf612d44a5b9b30e5",
480
+ "image_refiner.base_transformer.layers.8.attn.norm_q.weight": "3f99177edbfc41c8e4bc036c3451562d9787af5d4a781f42d9476f18a88e9fc8",
481
+ "image_refiner.base_transformer.layers.8.attn.to_k.weight": "e9313d2804f1709665fd13fd3833fcbfa5b32f21b907b281ddd99f2d3f370848",
482
+ "image_refiner.base_transformer.layers.8.attn.to_out.0.weight": "5ba7a8fb70ec4b5a775fc3c5be0e4b8c363ae203691f7d0082260476dd625f69",
483
+ "image_refiner.base_transformer.layers.8.attn.to_q.weight": "ddc8622244f5ee09fabd881d1737fa5ba76a81f88a64540ec2b10592d4903a6d",
484
+ "image_refiner.base_transformer.layers.8.attn.to_v.weight": "4fb4efdceb8753db3d85c755f91b3b0b6641f467326d3b50dfc39b0b3d503152",
485
+ "image_refiner.base_transformer.layers.8.feed_forward.linear_1.weight": "4ef819f495f1d1eeab276adea068120f851ac738a9e5ffa1bde4651d9926af86",
486
+ "image_refiner.base_transformer.layers.8.feed_forward.linear_2.weight": "f39a4b83611cd88306a604a3a9d20307c9a65166551af0d3f6a63a6e27c25910",
487
+ "image_refiner.base_transformer.layers.8.feed_forward.linear_3.weight": "7c5e0844e67b78c15b51f64cb6c694743fbcc4b205f9fa3ffc2aefde53127e9e",
488
+ "image_refiner.base_transformer.layers.8.ffn_norm1.weight": "21b2c231ffafa3e91088bbb6f26e5a8a731a47a54898b52a91512d1c5cce72b8",
489
+ "image_refiner.base_transformer.layers.8.ffn_norm2.weight": "f1ba8bc1fe2a12710f1c2ba9797e2a43dafb051cc4e6e8bec09e25f059069478",
490
+ "image_refiner.base_transformer.layers.8.norm1.linear.bias": "dad49dc2725d3f8644af24d4950736eb72cd571f0f327e0a2e03f27a6dfabd0c",
491
+ "image_refiner.base_transformer.layers.8.norm1.linear.weight": "3068974aaa1490f3baad46626351accf33ee0d9882b36f18225d8d1aec3ec168",
492
+ "image_refiner.base_transformer.layers.8.norm1.norm.weight": "77ee75c28066d0a6e9b7deb88c3f7a709638aed167acb8afd3c2c12a9f30250a",
493
+ "image_refiner.base_transformer.layers.8.norm2.weight": "c7710e0e1e851bf36cacf9bf9240a3778ee8ec46314f6ed2f931bb7b7cdd7320",
494
+ "image_refiner.base_transformer.layers.9.attn.norm_k.weight": "4e2b697fb381d0ff444f08383885015cb7e16e6f73af08c263c588f6f2cfb601",
495
+ "image_refiner.base_transformer.layers.9.attn.norm_q.weight": "806695bc14983155ccff5eae55efae322a12b1abbfae4df6faecfa4ba734a620",
496
+ "image_refiner.base_transformer.layers.9.attn.to_k.weight": "3b64aa2d341783e5cbdc29ecddeefd439cc5dcd87e40724e0db733e5837510bf",
497
+ "image_refiner.base_transformer.layers.9.attn.to_out.0.weight": "02928d71bbd6e96f886245269876279e393e0f546c9c85dbfe62cc2858b76a69",
498
+ "image_refiner.base_transformer.layers.9.attn.to_q.weight": "33732c7bc4ae6869cf94598cd2b104fd5a022272d487832025f9c772c92de98b",
499
+ "image_refiner.base_transformer.layers.9.attn.to_v.weight": "4390f7d77e570e0808c850a248ed767076b5171b0193901f334e737830a8468e",
500
+ "image_refiner.base_transformer.layers.9.feed_forward.linear_1.weight": "08fae091f5e2928197d2814027bbe8c6afb0c7b5cd23b41c355b60ae12642ee3",
501
+ "image_refiner.base_transformer.layers.9.feed_forward.linear_2.weight": "df4fcad0afbb5e70d0155498daaa77dff1c8734a72a231f09c6b252516e73bba",
502
+ "image_refiner.base_transformer.layers.9.feed_forward.linear_3.weight": "c4a4a2d465a5436e45af5fe33b1520438132ff4cc3cb2cee8436c45522ae9af5",
503
+ "image_refiner.base_transformer.layers.9.ffn_norm1.weight": "f07bca6ca52003ca8fde5a5ca866e876f61dc88beea9b1bceb46da79c92cf7c5",
504
+ "image_refiner.base_transformer.layers.9.ffn_norm2.weight": "949608f86801ba72b5f80a165d7f618b46088ab18d04f0ea20ece983c6a13b64",
505
+ "image_refiner.base_transformer.layers.9.norm1.linear.bias": "c0630e48139ee7ca91e3057caa745a866512234f7ba53dc5d6282907188c5b6f",
506
+ "image_refiner.base_transformer.layers.9.norm1.linear.weight": "758523130359fa33f9933a9e93f92df813568fa5fe07b5abe860d0459f30463a",
507
+ "image_refiner.base_transformer.layers.9.norm1.norm.weight": "8ea63b2c6bf956ba45f7d8a87a8789dc5e88a574c2765dc5ffe96cfc3a9b4beb",
508
+ "image_refiner.base_transformer.layers.9.norm2.weight": "8d1679bd8aab6ed749c6ed08ba63e8889985836cc78cb1e33daf4775095648b9",
509
+ "image_refiner.base_transformer.noise_refiner.0.attn.norm_k.weight": "70756459e0ad2776f094f6598b32fc62920a3139524ced2efbb03f2115fdc6c4",
510
+ "image_refiner.base_transformer.noise_refiner.0.attn.norm_q.weight": "48baefcc107520a90a7587786c718c70fd28c281e44d27d964f7b28e43b1ae21",
511
+ "image_refiner.base_transformer.noise_refiner.0.attn.to_k.weight": "3349a7f6b8d9e1c2c7fc4588527da51f2b1cda413d5052239e3af0a171066361",
512
+ "image_refiner.base_transformer.noise_refiner.0.attn.to_out.0.weight": "2f8d11d8c7e1f83076f611f09f489bb12a997f558a2b1ddb4322b8cfba65d2ac",
513
+ "image_refiner.base_transformer.noise_refiner.0.attn.to_q.weight": "3740f7f8d4f0869221dba3db7a4fe69644e1a4917ad0f8181f3c476bcaade3a2",
514
+ "image_refiner.base_transformer.noise_refiner.0.attn.to_v.weight": "3ccdccc695a1c03699d26a5de6c9232221a9682b6303c1fe0f95f16eabe93ab7",
515
+ "image_refiner.base_transformer.noise_refiner.0.feed_forward.linear_1.weight": "9a74c76857bb26d22330d46b3aa2932d821942e5df14bdc0b7f110829e1610c5",
516
+ "image_refiner.base_transformer.noise_refiner.0.feed_forward.linear_2.weight": "f9c521c2e3e662da9dd7ab029eadb49a0f018b7e4eb494c02540f18342f42121",
517
+ "image_refiner.base_transformer.noise_refiner.0.feed_forward.linear_3.weight": "464f27da6b4c88f4ca5fceb6478b08e4aad4bae97fcfa69eb9c8ff22588255bb",
518
+ "image_refiner.base_transformer.noise_refiner.0.ffn_norm1.weight": "5c40b81c5907950ff575df3d2ebb699563f3913f1f1187aeb241ccfc3137c315",
519
+ "image_refiner.base_transformer.noise_refiner.0.ffn_norm2.weight": "df36e799671b93d754d75470021606e5e3c9e4b4583396c050ec64385ac25b28",
520
+ "image_refiner.base_transformer.noise_refiner.0.norm1.linear.bias": "cb71b5decf1c2f377c9452f2f8c7eab9fd9823d39032f4cad2970c8589b7b082",
521
+ "image_refiner.base_transformer.noise_refiner.0.norm1.linear.weight": "69ee9dc814e8b338f371fa241e53bb8a27c8031956147cc7f54a8dccd4af4f70",
522
+ "image_refiner.base_transformer.noise_refiner.0.norm1.norm.weight": "318fcfbc19b30512c2fa16c28387446d8df3ddf3f516eb2dd1562dab896eca6e",
523
+ "image_refiner.base_transformer.noise_refiner.0.norm2.weight": "413aa00c5616bfbd68645709fea2d68f480cc8def579a866dd7fa50740e984c5",
524
+ "image_refiner.base_transformer.noise_refiner.1.attn.norm_k.weight": "f388658300738dfda5938edb711d0f03dec1ea81cebc735a74785d60d3f524f1",
525
+ "image_refiner.base_transformer.noise_refiner.1.attn.norm_q.weight": "b1d500866fde03495e5c3bc5dd03d5a5cafc60e3815018519afcddff728db7a0",
526
+ "image_refiner.base_transformer.noise_refiner.1.attn.to_k.weight": "e53fdc2ada57fb328728a21a5b36823392ec63e22c735997c5e47a9240dc0e85",
527
+ "image_refiner.base_transformer.noise_refiner.1.attn.to_out.0.weight": "0d838e434d90d0e6b8ca91f29e5f5b0832aa924d50c8d15336fb4b68902646d6",
528
+ "image_refiner.base_transformer.noise_refiner.1.attn.to_q.weight": "0b90556045c417f6d3bd887c73fab86cfc4915b6b0d5eeb6a4255825608d1062",
529
+ "image_refiner.base_transformer.noise_refiner.1.attn.to_v.weight": "62ed24ef3d92f3851eda868e2f9f358e5393bc7f4947b041403e3a135ec3b7f6",
530
+ "image_refiner.base_transformer.noise_refiner.1.feed_forward.linear_1.weight": "5047419bf61c7fbdd7d13ebd38fb7c8537e7d5823a3732ad8956c237c210f1f4",
531
+ "image_refiner.base_transformer.noise_refiner.1.feed_forward.linear_2.weight": "d2e27f803fd2f8e1bf42be1873d702adbfa37b3842c2b55c7fe9a08d484e2db5",
532
+ "image_refiner.base_transformer.noise_refiner.1.feed_forward.linear_3.weight": "2cc8ed6e15e09dbefb792d223752dcb9c6b2b234c4d31a89f8e416fcab3efb37",
533
+ "image_refiner.base_transformer.noise_refiner.1.ffn_norm1.weight": "740671eb5fbc4e748d18bcdb5f787c2a06f25b824352afe45b77b020c604bef5",
534
+ "image_refiner.base_transformer.noise_refiner.1.ffn_norm2.weight": "bc1ab00c46849d8a7af6bae913ac59c971d7d0492872822b6dc8c572fd36260e",
535
+ "image_refiner.base_transformer.noise_refiner.1.norm1.linear.bias": "e0351a142810c6531c5f6e6fc4ff9753c27b5285be6a8d5eb09f0cd0b814478d",
536
+ "image_refiner.base_transformer.noise_refiner.1.norm1.linear.weight": "2d2532f42259c7b22625e5df7517016f24e20ee7f1ffed5ef4562c6ac8637125",
537
+ "image_refiner.base_transformer.noise_refiner.1.norm1.norm.weight": "4be5518e91cd619dd936561cd5896042c46957fded12eaeb72ca23eb82bf3a31",
538
+ "image_refiner.base_transformer.noise_refiner.1.norm2.weight": "3cba4b25dd9660a322a704a5b4929df2a9895945e1efc7e0b3bf84597426dc28",
539
+ "image_refiner.base_transformer.norm_out.linear_1.bias": "a29e36af4378b96ba7ef3202532d9bf84bd266e3e5d121c4c73b4dfc9ab4dc68",
540
+ "image_refiner.base_transformer.norm_out.linear_1.weight": "97e92b85cbb6a0bbe0a8e523a3158e451a3f33f8655422875c6c98f2d5415481",
541
+ "image_refiner.base_transformer.norm_out.linear_2.bias": "f40b96812e060ba42adb6d037d93cbc1e595b3502d926895cf906852633cceb2",
542
+ "image_refiner.base_transformer.norm_out.linear_2.weight": "2a7e981d37daca78652c77e482985b3b906c60d73a5b92782d5bf2df0a414a57",
543
+ "image_refiner.base_transformer.ref_image_patch_embedder.bias": "eac9e853cf012b7b6e7ea97b978bd9b2871e6a89b88458a2753ff1e6594028da",
544
+ "image_refiner.base_transformer.ref_image_patch_embedder.weight": "6572f99f67b14ba0306467f0c3360c7551cc88ef3aa7b867d8f9a1130501b451",
545
+ "image_refiner.base_transformer.ref_image_refiner.0.attn.norm_k.weight": "48de5244b2fd1d5f8dae906d79213f5f6d1b389a9c96d5ab82d0ce06cf7aa432",
546
+ "image_refiner.base_transformer.ref_image_refiner.0.attn.norm_q.weight": "d420243cbc3353c80c1cec0e74091e34672a6ce28a866e75b03d436108ba7879",
547
+ "image_refiner.base_transformer.ref_image_refiner.0.attn.to_k.weight": "d502b90d1e2fd5fe0f6fb0f87fd4e772bff71abbf15def89b3c1361317f1deb3",
548
+ "image_refiner.base_transformer.ref_image_refiner.0.attn.to_out.0.weight": "0e0c3b7ae23114b2ba81875beca28fba0fe507b7edaf961e3033bf377fe13817",
549
+ "image_refiner.base_transformer.ref_image_refiner.0.attn.to_q.weight": "75fda07d612b61cb8d191253ad64d936cd7224756f184c25efdb53f5f810de19",
550
+ "image_refiner.base_transformer.ref_image_refiner.0.attn.to_v.weight": "267e3cf0876ca52c9e10add572ea0378c300b914c3af0d6d2234fc9463f37612",
551
+ "image_refiner.base_transformer.ref_image_refiner.0.feed_forward.linear_1.weight": "fef9d59e05594399ae49a9a37b5d0c64ac7f8c90dfd32953ab29c080cb1c42ca",
552
+ "image_refiner.base_transformer.ref_image_refiner.0.feed_forward.linear_2.weight": "88c9dc09699e6ec374bacb643a1e790ba6e222b618bc6da25977212968c4a85d",
553
+ "image_refiner.base_transformer.ref_image_refiner.0.feed_forward.linear_3.weight": "b4c993c4fe222d4e122a30b933412ed60aeed908b9ae57cfee7f6bf4b5ca178f",
554
+ "image_refiner.base_transformer.ref_image_refiner.0.ffn_norm1.weight": "8ccc924e25bb011eb308ba7bef1e8ce8f6051cc93f7353ab8cefd806a593b718",
555
+ "image_refiner.base_transformer.ref_image_refiner.0.ffn_norm2.weight": "2c8c165735d2a90b59e9ab01e48093afd1eccb5968c2d8c81eb1c5fb077b1d37",
556
+ "image_refiner.base_transformer.ref_image_refiner.0.norm1.linear.bias": "6d06d2e60b71d3b8a7e08217dc5e46a650a719d5ce98aba5a8e46a33dccaa2c5",
557
+ "image_refiner.base_transformer.ref_image_refiner.0.norm1.linear.weight": "056eb89a7dfc7237d92edc8b09b951b44f4261352356d05c6f79c3572e5650c2",
558
+ "image_refiner.base_transformer.ref_image_refiner.0.norm1.norm.weight": "30f58972fcf5852b78d5fee2514a6de7feaf41cee1f78fd360a5e58b1c7118ed",
559
+ "image_refiner.base_transformer.ref_image_refiner.0.norm2.weight": "071100c8233d6cd2cfd7cb1a1a7c1183a0e34b26a5b5d00ef6f4cd0657666104",
560
+ "image_refiner.base_transformer.ref_image_refiner.1.attn.norm_k.weight": "89d0d787d1ca9174501181e0ee4e66c6924560ccef5c8e41f6b221a61e693948",
561
+ "image_refiner.base_transformer.ref_image_refiner.1.attn.norm_q.weight": "eda15c9a547cbd34c3cba5f8727d53aad637691260808ed7e07ae6ef03172b72",
562
+ "image_refiner.base_transformer.ref_image_refiner.1.attn.to_k.weight": "7e57151fa3b7867ad52a7cb0273714e67e15e8d6873a7f4ab33f0237828b41dc",
563
+ "image_refiner.base_transformer.ref_image_refiner.1.attn.to_out.0.weight": "a3f6ce3f2edbbd66e01a438fb818817b27a7b81ebb46b3e4d6d43212a8e6b2d9",
564
+ "image_refiner.base_transformer.ref_image_refiner.1.attn.to_q.weight": "91e38dc152c81244f1016fdaae587cacc22b4f9865e4ae441d6e6bc4359b2317",
565
+ "image_refiner.base_transformer.ref_image_refiner.1.attn.to_v.weight": "71f24ce712af04ffc97e8bda62f533d01e116eda60e41ca0be3586be36ae93f2",
566
+ "image_refiner.base_transformer.ref_image_refiner.1.feed_forward.linear_1.weight": "9bff8b880bc58b4243acf344e2f8c25c403b91f0f7519ee2da22664c9cb4bcac",
567
+ "image_refiner.base_transformer.ref_image_refiner.1.feed_forward.linear_2.weight": "de00a9c14b4289a4cda051f85be05877d25136b985d3673a4f61f700f6dea37e",
568
+ "image_refiner.base_transformer.ref_image_refiner.1.feed_forward.linear_3.weight": "1317f4ae9afe4c25a987192003700db061ae6e72dfcbff5f3012eecc0c87ebc0",
569
+ "image_refiner.base_transformer.ref_image_refiner.1.ffn_norm1.weight": "537806f62e48be0a5b26903d0cdd2bac7171a5ed61afedfea58a1e93b7770d08",
570
+ "image_refiner.base_transformer.ref_image_refiner.1.ffn_norm2.weight": "b861a99e376ffddfe8a2856809ea93832d845642aeb7b648277628cc03d9876d",
571
+ "image_refiner.base_transformer.ref_image_refiner.1.norm1.linear.bias": "7aad166496f2341aa2a23d316beab6a6c1bb0abe238b7f674a2e8207dcc06365",
572
+ "image_refiner.base_transformer.ref_image_refiner.1.norm1.linear.weight": "da8a14c0dd3108f7ba143b6bd3e051f41af804afc2015e8cf13acb47d37d6c7e",
573
+ "image_refiner.base_transformer.ref_image_refiner.1.norm1.norm.weight": "da00f07ced96c3ce31b98cc7aba097a12f0b10c70acf61c738acb41feb6fab31",
574
+ "image_refiner.base_transformer.ref_image_refiner.1.norm2.weight": "83ee48daa1256e645ad420f87e6436f81bad1f76353544810cf6e97233204bb9",
575
+ "image_refiner.base_transformer.time_caption_embed.caption_embedder.0.weight": "a8de65dd55acf939375680e2d11d25771022e5d97cb6b0bea70c2aef0944745f",
576
+ "image_refiner.base_transformer.time_caption_embed.caption_embedder.1.bias": "0cb74303d6e988141687132fd402ddb9df4b9e519fd4c5a5a020882f019d197d",
577
+ "image_refiner.base_transformer.time_caption_embed.caption_embedder.1.weight": "0c993cbedc0cbddf8f9a68acd8ff2fadf4574e85c6c1a6190939045ed762e33c",
578
+ "image_refiner.base_transformer.time_caption_embed.timestep_embedder.linear_1.bias": "a19b10213b0e809b65eb1b107d081ba1f177befacb409eff17582ccb7392329c",
579
+ "image_refiner.base_transformer.time_caption_embed.timestep_embedder.linear_1.weight": "c645b5a3fce8c3f43431d3d125a339ea5205af18b841f6a14e35706086337eab",
580
+ "image_refiner.base_transformer.time_caption_embed.timestep_embedder.linear_2.bias": "85bbc08ec4fe4675d8754abc35bd6fb36529baeb63098d74c1c8cc583f30d490",
581
+ "image_refiner.base_transformer.time_caption_embed.timestep_embedder.linear_2.weight": "9c81c3e336dab8055cb145aec4b2af75581ab983b0573b5bdd9e12a70aa23dcb",
582
+ "image_refiner.base_transformer.x_embedder.bias": "d8e0280f1501b45654ec46e14645c0aaf3f2fb9e6de8bbb8c69679057f22648e",
583
+ "image_refiner.base_transformer.x_embedder.weight": "2ef643ed4bb7fb047318212f0538fdd1b04a353ea9adb72d38bb18a1dbff79d7"
584
+ }
refiner_validation.json ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "strict_load": true,
3
+ "source_tensor_bytes_equal": true,
4
+ "checks": [
5
+ {
6
+ "name": "strict_full_flow_refiner",
7
+ "passed": true,
8
+ "tensors": 828,
9
+ "transformer_tensors": 582
10
+ },
11
+ {
12
+ "name": "native_bfloat16_weights",
13
+ "passed": true
14
+ },
15
+ {
16
+ "name": "native_refiner_conditioning",
17
+ "passed": true
18
+ },
19
+ {
20
+ "name": "conditioned_flow_forward",
21
+ "passed": true,
22
+ "shape": [
23
+ 1,
24
+ 16,
25
+ 4,
26
+ 4
27
+ ],
28
+ "dtype": "torch.bfloat16"
29
+ },
30
+ {
31
+ "name": "single_euler_update",
32
+ "passed": true,
33
+ "mean_abs_update": 0.07963985204696655
34
+ },
35
+ {
36
+ "name": "condition_affects_flow",
37
+ "passed": true,
38
+ "max_abs_difference": 0.99609375
39
+ },
40
+ {
41
+ "name": "refiner_source_tensor_bytes_exact",
42
+ "passed": true
43
+ }
44
+ ],
45
+ "smoke": {
46
+ "passed": true,
47
+ "device": "cpu",
48
+ "dtype": "torch.bfloat16",
49
+ "latent_shape": [
50
+ 1,
51
+ 16,
52
+ 4,
53
+ 4
54
+ ],
55
+ "reference_images": 1
56
+ },
57
+ "elapsed_seconds": 29.144361972808838,
58
+ "limitations": [
59
+ "Tiny-latent native flow forward and one Euler update, not full-resolution image refinement or perceptual-quality evaluation.",
60
+ "No LongCat language/audio backbone."
61
+ ]
62
+ }
release_manifest.json ADDED
@@ -0,0 +1,161 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "as_of": "2026-10-19",
3
+ "files": {
4
+ "model.safetensors": {
5
+ "size": 2025414272,
6
+ "sha256": "a57489db93bc60c1167c9f565c3a3f85d4ff1505477cd3b9ff95ef390fa3fe35"
7
+ },
8
+ "tensor_mapping.json": {
9
+ "size": 110491,
10
+ "sha256": "f1d2091c3200c9b1b3b20f30b98aeaaf0de60cc5761becbe739300dd420a9a35"
11
+ },
12
+ "code_provenance.json": {
13
+ "size": 545,
14
+ "sha256": "6bcb51d4848391e31fd8c35254781221f13ded239a5a49677b68fff6f012803e"
15
+ },
16
+ "LICENSE": {
17
+ "size": 1064,
18
+ "sha256": "4722341d105cec173161f93ccab6d4b49409b368ece23faa22f2f74adddef9ed"
19
+ },
20
+ "requirements.txt": {
21
+ "size": 114,
22
+ "sha256": "b87e4029730f3eb85739fdfd09267fe6717057213e494c8d741c9c7947dae625"
23
+ },
24
+ "aliases.json": {
25
+ "size": 3741,
26
+ "sha256": "34ac43464a23f2d030b2439227652925eaf8a75ff1b26d733fd9d160e4ef14ba"
27
+ },
28
+ "LICENSES.md": {
29
+ "size": 296,
30
+ "sha256": "95b0bfc0d58f7ebf65eda9324eac93d26ba9e56933c044daabec1045b8a50532"
31
+ },
32
+ "tensor_sha256.json": {
33
+ "size": 55010,
34
+ "sha256": "7215251c2ed1a54d261839f0dcf221d99f8c9c7e31f87a10b5824f1a0d58c93d"
35
+ },
36
+ "alias_verification.json": {
37
+ "size": 5946,
38
+ "sha256": "5b5c70cb3e344ecb3a421b67fd79c717976248e00735d1d3f556169fee004283"
39
+ },
40
+ "README.md": {
41
+ "size": 4778,
42
+ "sha256": "7802f4699325ff17b9641f3173231247c306eb6a897ebcd826b80c2942ad8fde"
43
+ },
44
+ "validate.py": {
45
+ "size": 3484,
46
+ "sha256": "cf9653df1d32f020005f8ae55adf201f72e4f9937357e4f2199fe980b61c92f4"
47
+ },
48
+ "validation.json": {
49
+ "size": 3368,
50
+ "sha256": "770479dc8fe793cceb169f4dbfa177f9705a49391c3d56d408b2daad83aaa620"
51
+ },
52
+ "validate_refiner.py": {
53
+ "size": 4033,
54
+ "sha256": "434b43b619a27f11841b7d884e53d4b73205a4a2f33f9d64f1d6889b693bb0b6"
55
+ },
56
+ "extraction.json": {
57
+ "size": 467,
58
+ "sha256": "88063dba8e7aadbcfebca10c74e7b31f8986181e82f246c83bbf4ff8d831f801"
59
+ },
60
+ "component.py": {
61
+ "size": 5631,
62
+ "sha256": "292040d955cbfe43278d4c2a06cc65c5401cab4ee1b07c230f1ea4087fa5d667"
63
+ },
64
+ "refiner_validation.json": {
65
+ "size": 1282,
66
+ "sha256": "292b17aba5242257005d1bcb0963c61d15e3619ae6f00f116e36b8f8cbc07561"
67
+ },
68
+ "source_config.json": {
69
+ "size": 6908,
70
+ "sha256": "9115e9785603b04382a45ebece9092235281f309f56f35eb4e43bcf53150b2a2"
71
+ },
72
+ "native/compat.py": {
73
+ "size": 1255,
74
+ "sha256": "e2ba47fa854c62ee70e507f98a7a862690e4f6d51a32326e3a6f28d878e0fddd"
75
+ },
76
+ "native/configuration_longcat_ngram.py": {
77
+ "size": 10729,
78
+ "sha256": "96a646608a90ae4d42e6b4c8f712b01f1f9033241af97c0b3f7307dc1887d191"
79
+ },
80
+ "native/refiner_modules.py": {
81
+ "size": 50858,
82
+ "sha256": "f7097d943160a42b6251440068a413399636748674711241ace8917e247d9211"
83
+ },
84
+ "native/__init__.py": {
85
+ "size": 0,
86
+ "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
87
+ },
88
+ "native/visual.py": {
89
+ "size": 46229,
90
+ "sha256": "2d77ca1e774e2b2861429bf8b679f7a2a4a290659b43aa79bd1221001a40fb10"
91
+ },
92
+ "native/image_refiner.py": {
93
+ "size": 30146,
94
+ "sha256": "ef1e08c97b7275cb455d3baea84149510605e0cea44ab10142e5fac6d3c0baaf"
95
+ },
96
+ "native/qwen2_5_vl_vit.py": {
97
+ "size": 22477,
98
+ "sha256": "b8fac6524173bdf4ea2f2e9a06be2430d9b689f6915548a1392d232a5848f424"
99
+ },
100
+ "native/configuration_longcat_next.py": {
101
+ "size": 6337,
102
+ "sha256": "bce3c8fc8bc0f4e6f3d0eb39e7a3a0415b4d66a8778f90435fb6849342c41f6c"
103
+ },
104
+ "refiner/model.safetensors": {
105
+ "size": 7934402936,
106
+ "sha256": "fb94553b718c6686170f7eb73d97f59d8f3e49f3e7d2436539ad424efaef1f28"
107
+ },
108
+ "refiner/tensor_mapping.json": {
109
+ "size": 163223,
110
+ "sha256": "7cafeaf8dc303605548e96e46440abdfe362c0dbfc91f7d26334e8ae85ad393e"
111
+ },
112
+ "refiner/aliases.json": {
113
+ "size": 3,
114
+ "sha256": "ca3d163bab055381827226140568f3bef7eaac187cebd76878e0b63e9e442356"
115
+ },
116
+ "refiner/tensor_sha256.json": {
117
+ "size": 78598,
118
+ "sha256": "745911a73a310edea4c4294e366d26614f8cef2d3a368ae31bc304827f119faa"
119
+ },
120
+ "refiner/alias_verification.json": {
121
+ "size": 3,
122
+ "sha256": "ca3d163bab055381827226140568f3bef7eaac187cebd76878e0b63e9e442356"
123
+ },
124
+ "refiner/extraction.json": {
125
+ "size": 437,
126
+ "sha256": "056605fcdde1f46645918ae0a8c1bc6208e942cf608ac3dddc8f35cf4263d268"
127
+ },
128
+ "refiner/source_config.json": {
129
+ "size": 6908,
130
+ "sha256": "9115e9785603b04382a45ebece9092235281f309f56f35eb4e43bcf53150b2a2"
131
+ },
132
+ "decoder/model.safetensors": {
133
+ "size": 1049912922,
134
+ "sha256": "2a0e46b2a40ed901d5b0f839df183cb8b679cd43975b59211c03999164327f71"
135
+ },
136
+ "decoder/tensor_mapping.json": {
137
+ "size": 216637,
138
+ "sha256": "871954d549203d945858efc60f47c3c89ba1e0f042f2f3787b28d136774c72d8"
139
+ },
140
+ "decoder/aliases.json": {
141
+ "size": 3,
142
+ "sha256": "ca3d163bab055381827226140568f3bef7eaac187cebd76878e0b63e9e442356"
143
+ },
144
+ "decoder/tensor_sha256.json": {
145
+ "size": 101750,
146
+ "sha256": "91d4e5dc236c168858701160ba372339099ebf3bfe3b8079444d90e8c8ca5a4c"
147
+ },
148
+ "decoder/alias_verification.json": {
149
+ "size": 3,
150
+ "sha256": "ca3d163bab055381827226140568f3bef7eaac187cebd76878e0b63e9e442356"
151
+ },
152
+ "decoder/extraction.json": {
153
+ "size": 437,
154
+ "sha256": "776fcd26c500d7b374a67e70ae41618f1ee7f5bf234e61e63fd70e2d296e7286"
155
+ },
156
+ "decoder/source_config.json": {
157
+ "size": 6908,
158
+ "sha256": "9115e9785603b04382a45ebece9092235281f309f56f35eb4e43bcf53150b2a2"
159
+ }
160
+ }
161
+ }
requirements.txt ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ torch>=2.6
2
+ transformers>=5.0
3
+ diffusers>=0.35
4
+ safetensors>=0.6
5
+ accelerate>=1.10
6
+ einops>=0.8
7
+ numpy>=1.26
8
+ Pillow>=10
source_config.json ADDED
@@ -0,0 +1,286 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "architectures": [
3
+ "LongcatNextForCausalLM"
4
+ ],
5
+ "attention_bias": false,
6
+ "attention_dropout": 0.0,
7
+ "auto_map": {
8
+ "AutoConfig": "configuration_longcat_next.LongcatNextConfig",
9
+ "AutoModel": "modeling_longcat_next.LongcatNextModel",
10
+ "AutoModelForCausalLM": "modeling_longcat_next.LongcatNextForCausalLM"
11
+ },
12
+ "vocab_size": 282624,
13
+ "hidden_size": 3072,
14
+ "ffn_hidden_size": 6144,
15
+ "expert_ffn_hidden_size": 1024,
16
+ "num_layers": 14,
17
+ "num_attention_heads": 32,
18
+ "kv_lora_rank": 512,
19
+ "q_lora_rank": 1536,
20
+ "qk_rope_head_dim": 64,
21
+ "v_head_dim": 128,
22
+ "qk_nope_head_dim": 128,
23
+ "mla_scale_q_lora": true,
24
+ "mla_scale_kv_lora": true,
25
+ "routed_scaling_factor": 6.0,
26
+ "n_routed_experts": 256,
27
+ "rms_norm_eps": 1e-5,
28
+ "use_cache": true,
29
+ "bos_token_id": 1,
30
+ "eos_token_id": 2,
31
+ "rope_theta": 10000000,
32
+ "max_position_embeddings": 131072,
33
+ "zero_expert_num": 128,
34
+ "zero_expert_type": "identity",
35
+ "moe_topk": 12,
36
+ "ngram_vocab_size_ratio": 78,
37
+ "emb_neighbor_num": 4,
38
+ "emb_split_num": 4,
39
+ "torch_dtype": "bfloat16",
40
+ "transformers_version": "4.57.6",
41
+ "model_type": "longcat_next",
42
+
43
+ "text_vocab_size": 131072,
44
+ "text_vocab_plus_multimodal_special_token_size": 131125,
45
+ "visual_embedding_layer_intermediate_size": 8192,
46
+ "visual_embedding_layer_hidden_act": "silu",
47
+ "visual_offset": 150581,
48
+ "audio_offset": 131125,
49
+
50
+
51
+ "visual_config": {
52
+ "image_start_token_id": 131106,
53
+ "image_end_token_id": 131107,
54
+ "image_pad_token_id": 131108,
55
+ "image_newline_token_id": 131109,
56
+
57
+ "_attn_implementation": "flash_attention_2",
58
+ "hidden_size": 1280,
59
+
60
+ "image_head_transformer_dims": 2048,
61
+ "image_head_transformer_ffn_scale": 16,
62
+ "image_head_transformer_layers": 4,
63
+
64
+ "vq_config": {
65
+ "codebook_dim": 3584,
66
+ "codebook_size": 16384,
67
+ "codebook_sizes": [
68
+ 16384,
69
+ 16384,
70
+ 16384,
71
+ 16384,
72
+ 16384,
73
+ 16384,
74
+ 16384,
75
+ 16384
76
+ ],
77
+ "decay": 0.99,
78
+ "depth": 8,
79
+
80
+ "commit_loss_ratio": 0.25,
81
+ "entropy_loss_ratio": 0,
82
+
83
+ "in_channels": 3584,
84
+ "quant_conv": true,
85
+ "quantizer_type": "rq",
86
+ "restart_unused_codes": true,
87
+ "shared_codebook": true,
88
+
89
+ "vq_loss_ratio": 0
90
+ },
91
+
92
+ "visual_decoder_config": {
93
+ "codebook_dim": 3584,
94
+
95
+ "image_decoder_config": {
96
+ "attention_dropout": 0.0,
97
+ "codebook_dim": 3584,
98
+ "distill_taps": [
99
+ 3,
100
+ 7,
101
+ 15,
102
+ 23
103
+ ],
104
+ "hidden_act": "gelu",
105
+ "hidden_size": 1024,
106
+ "intermediate_size": 2730,
107
+ "k_bias": false,
108
+ "layer_norm_eps": 1e-06,
109
+ "num_attention_heads": 16,
110
+ "num_hidden_layers": 32,
111
+ "patch_size": 14,
112
+ "q_bias": true,
113
+ "spatial_merge_size": 2,
114
+ "subln": true,
115
+ "swiglu": true,
116
+ "teacher_dims": {
117
+ "15": 1280,
118
+ "23": 1280,
119
+ "3": 1280,
120
+ "7": 1280
121
+ },
122
+ "temporal_patch_size": 2,
123
+ "v_bias": true
124
+ },
125
+
126
+ "transformer_config": {
127
+ "patch_size": 2,
128
+ "in_channels": 16,
129
+ "hidden_size": 2520,
130
+ "num_layers": 32,
131
+ "num_refiner_layers": 2,
132
+ "num_attention_heads": 21,
133
+ "num_kv_heads": 7,
134
+ "multiple_of": 256,
135
+ "norm_eps": 1e-5,
136
+ "axes_dim_rope": [40, 40, 40],
137
+ "axes_lens": [10000, 10000, 10000],
138
+ "text_feat_dim": 2048,
139
+ "timestep_scale": 1000.0
140
+ },
141
+
142
+ "vae_config": {
143
+ "act_fn": "silu",
144
+ "block_out_channels": [128, 256, 512, 512],
145
+ "down_block_types": [
146
+ "DownEncoderBlock2D",
147
+ "DownEncoderBlock2D",
148
+ "DownEncoderBlock2D",
149
+ "DownEncoderBlock2D"
150
+ ],
151
+ "in_channels": 3,
152
+ "latent_channels": 16,
153
+ "layers_per_block": 2,
154
+ "mid_block_add_attention": true,
155
+ "norm_num_groups": 32,
156
+ "out_channels": 3,
157
+ "sample_size": 1024,
158
+ "scaling_factor": 0.3611,
159
+ "shift_factor": 0.1159,
160
+ "up_block_types": [
161
+ "UpDecoderBlock2D",
162
+ "UpDecoderBlock2D",
163
+ "UpDecoderBlock2D",
164
+ "UpDecoderBlock2D"
165
+ ],
166
+ "use_post_quant_conv": false,
167
+ "use_quant_conv": false,
168
+ "force_upcast": true
169
+ },
170
+
171
+ "scheduler_config": {
172
+ "num_train_timesteps": 1000,
173
+ "dynamic_time_shift": true
174
+ },
175
+
176
+ "weight_path": "WEIGHT_PATH_TO_LONGCAT_NEXT/image_decoder/image_decoder.safetensors"
177
+ }
178
+ },
179
+
180
+
181
+ "audio_config": {
182
+ "audio_head_transformer_dims": 3072,
183
+ "audio_head_transformer_ffn_scale": 16,
184
+ "audio_head_transformer_layers": 4,
185
+
186
+ "audio_delim_token_id": 131116,
187
+ "audio_end_token_id": 131104,
188
+ "audio_pad_token_id": 131105,
189
+ "audio_start_token_id": 131103,
190
+ "audiogen_end_token_id": 131124,
191
+ "audiogen_start_token_id": 131123,
192
+ "audiotext_end_token_id": 131121,
193
+ "audiotext_pad_token_id": 131122,
194
+ "audiotext_start_token_id": 131120,
195
+
196
+ "_attn_implementation": "flash_attention_2",
197
+ "d_model": 1280,
198
+ "decoder_attention_heads": 20,
199
+ "decoder_ffn_dim": 5120,
200
+ "decoder_layers": 8,
201
+ "encoder_attention_heads": 20,
202
+ "encoder_ffn_dim": 5120,
203
+ "encoder_layers": 32,
204
+ "num_mel_bins": 128,
205
+
206
+ "avg_pooler": 4,
207
+ "decoder_kernel_size": 3,
208
+ "decoder_stride_size": 2,
209
+ "hop_length": 160,
210
+ "kernel_size": 3,
211
+ "max_audio_seconds": 30,
212
+ "n_fft": 400,
213
+ "num_hidden_layers": 32,
214
+ "sampling_rate": 16000,
215
+ "stride_size": 2,
216
+
217
+ "vq_config": {
218
+ "codebook_sizes": [
219
+ 8192,
220
+ 4096,
221
+ 2048,
222
+ 1024,
223
+ 1024,
224
+ 1024,
225
+ 1024,
226
+ 1024
227
+ ]
228
+ },
229
+
230
+ "vocoder_config": {
231
+ "channels": [
232
+ 256,
233
+ 256,
234
+ 256,
235
+ 256,
236
+ 256
237
+ ],
238
+ "hop_length": 256,
239
+ "num_mel_bins": 80,
240
+ "sampling_rate": 16000
241
+ },
242
+
243
+
244
+ "flow_matching_config": {
245
+ "in_channels": 80,
246
+ "spk_emb_dim": 0,
247
+ "diffusion_steps": 10,
248
+ "cal_mel_mae": true,
249
+
250
+ "prenet_activation_function": "gelu",
251
+ "prenet_attention_heads": 8,
252
+ "prenet_d_model": 512,
253
+ "prenet_ffn_dim": 2048,
254
+ "prenet_in_dim": 1280,
255
+ "prenet_max_source_positions": 5000,
256
+ "prenet_nlayers": 12,
257
+ "prenet_out_dim": 80,
258
+ "prenet_target_mel_length_scale_ratio": 1.0,
259
+
260
+ "channels": [
261
+ 256
262
+ ],
263
+ "dropout": 0.0,
264
+ "attention_head_dim": 64,
265
+ "n_blocks": 4,
266
+ "num_heads": 8,
267
+ "num_mid_blocks": 12,
268
+ "act_fn": "gelu",
269
+
270
+ "cfm_params": {
271
+ "inference_cfg_rate": 0.7,
272
+ "sigma_min": 1e-06,
273
+ "solver": "euler",
274
+ "t_scheduler": "cosine",
275
+ "training_cfg_rate": 0.2
276
+ },
277
+
278
+ "use_hidden_states_before_dconv2": true
279
+ },
280
+
281
+ "cosy24kvocoder_config": {
282
+ "weight_path": "WEIGHT_PATH_TO_LONGCAT_NEXT/cosy24k_vocoder/hift.pt"
283
+ }
284
+
285
+ }
286
+ }
tensor_mapping.json ADDED
The diff for this file is too large to render. See raw diff
 
tensor_sha256.json ADDED
@@ -0,0 +1,406 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.embed": "fc65e921fe9fd960a9e623e2417d32b0439d1fa82fa45af99af03319e7a6eda3",
3
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.embed_ema": "b190da7cc5c132efb5dc66587dbe9fc90df832f8e5e28e8eea0c59c84c1668a1",
4
+ "model.visual_tokenizer.visual_bridge_model.bridge.mlp.0.weight": "73ae7da30df77353224240bcb5135153694ac55fe26f6c089ecd489c5b74b97f",
5
+ "model.visual_tokenizer.visual_bridge_model.bridge.mlp.2.weight": "ec63961bb0f0720eb833418d593b17706f80b1c831e1662ac5d3f29b3a0482eb",
6
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quant_conv.1.weight": "a195b5ffc0befdb1c3f30734252c3580cb796be310f19dfb21e2cd7baeedb83a",
7
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quant_conv.3.weight": "0fb765ce9c8c124155c7e1267257d7c6d2abe7c3f22105aa3ef8a19651948683",
8
+ "model.visual_tokenizer.visual_embedding_layer.pre_buffer.mlp.down_proj.weight": "f8d80c38687d0a51949780de29035f1fa5c8a2ae3e3b3b68facdc62b4ca3569a",
9
+ "model.visual_tokenizer.visual_embedding_layer.pre_buffer.mlp.gate_proj.weight": "0bc96ca631620d1081177a8af9d3a9db1cd607ca250334e394c02893d027fbfd",
10
+ "model.visual_tokenizer.visual_embedding_layer.pre_buffer.mlp.up_proj.weight": "4ee236aa5b7a04d456dab26be2491edfbad3c45db8998e3d458125e3cee907ee",
11
+ "model.visual_tokenizer.visual_model.blocks.0.attn.qkv.weight": "d9e147b82330139af1fcbf5bc37961d1a6fb1032738cbe99627d34906d8c6b90",
12
+ "model.visual_tokenizer.visual_model.blocks.0.mlp.down_proj.weight": "f64d12df314c4918037c862b6e2d4e6d6e7d94f095792f73d1facc87e20d4ad3",
13
+ "model.visual_tokenizer.visual_model.blocks.0.mlp.gate_proj.weight": "1dd598444ea41361e3d6b6294573ca73eeab41a6ad9149b122c0cce8ed041719",
14
+ "model.visual_tokenizer.visual_model.blocks.0.mlp.up_proj.weight": "9db75456af696e12e42005dd3cf27d9865061d60552a419beaa336eb93c1562d",
15
+ "model.visual_tokenizer.visual_model.blocks.1.attn.qkv.weight": "e79a92fc4f50e2085c0e6b9463cc27c037dfaee6d3594a1cc1bd1b682e047fa1",
16
+ "model.visual_tokenizer.visual_model.blocks.1.mlp.down_proj.weight": "7234b8d3beb37c0400c5f44d249440a4340f7ae3788eb3533e669c2373f7d94b",
17
+ "model.visual_tokenizer.visual_model.blocks.1.mlp.gate_proj.weight": "63abd9c249159d39c2bf55f364b7d487f1e077be0ecea4e0d7222b70cb34a842",
18
+ "model.visual_tokenizer.visual_model.blocks.1.mlp.up_proj.weight": "32b6951854995de874515971dec22191472ecedfb362abad8214714cb7a3e248",
19
+ "model.visual_tokenizer.visual_model.blocks.10.attn.qkv.weight": "4b83fb4dbb239625f5b9d97034765ec17c6d3def71a7215297ccfd88c1653443",
20
+ "model.visual_tokenizer.visual_model.blocks.10.mlp.down_proj.weight": "a006258f54c9f22d45f4cb1ba4b8c4270e026cca8a8d90d4b050d9370cdc4a99",
21
+ "model.visual_tokenizer.visual_model.blocks.10.mlp.gate_proj.weight": "97d957aaf7d8ef8c74b1f72fc292a20b2f1f5434e6e73ad4839173c1374e881f",
22
+ "model.visual_tokenizer.visual_model.blocks.10.mlp.up_proj.weight": "7d521f0d76785079a4b5414d59d7a1ad37545fc98ffcda4f0e679f39a05c3701",
23
+ "model.visual_tokenizer.visual_model.blocks.11.attn.qkv.weight": "170775c8954be77b680c2ce39ce62bd58dbe776253c2dc9131554c604f9d786d",
24
+ "model.visual_tokenizer.visual_model.blocks.11.mlp.down_proj.weight": "415a6ba0f61a0e201383dac3994bd9f5bf0c568ebf99489253631357aaf9768a",
25
+ "model.visual_tokenizer.visual_model.blocks.11.mlp.gate_proj.weight": "e91bcb01345aae6ed5353836e4e27b877956809ad42dc334350549e123882b82",
26
+ "model.visual_tokenizer.visual_model.blocks.11.mlp.up_proj.weight": "2a284d5873dc0344d418406c9ec88006b47b6009c26c0a4ec787813b95ca76b9",
27
+ "model.visual_tokenizer.visual_model.blocks.12.attn.qkv.weight": "131ab528e571315625eb5c2ecaa520149a0dff66254eb7822fc140558150bee9",
28
+ "model.visual_tokenizer.visual_model.blocks.12.mlp.down_proj.weight": "d2cd7ea18c1dea9359c235ea9eb6204fb41a3eae062cafc0263d18737b396238",
29
+ "model.visual_tokenizer.visual_model.blocks.12.mlp.gate_proj.weight": "54efd9e65311046b0eb9181f7d99f357ea6ef29665e44c1f3970218aae8bce21",
30
+ "model.visual_tokenizer.visual_model.blocks.12.mlp.up_proj.weight": "bb7eaf9eb53534afb8ee0e62ab007fcea9833c10d11c93a9d411a986a66ebf8e",
31
+ "model.visual_tokenizer.visual_model.blocks.13.attn.qkv.weight": "25fbaf1beb9348edda54913307778a8c7e42bf3176379f9785de4151b3c8ffec",
32
+ "model.visual_tokenizer.visual_model.blocks.13.mlp.down_proj.weight": "210db36046edaf2a6e7660d05d6832fea5b8360343d738be9c335f3c4af11a3b",
33
+ "model.visual_tokenizer.visual_model.blocks.13.mlp.gate_proj.weight": "6b39d90b861f9faab4f5ead709b1f81cec0243bb9319b8b900357dc00d0e75c5",
34
+ "model.visual_tokenizer.visual_model.blocks.13.mlp.up_proj.weight": "915edf910df73d4f947bb353d1a7798064711bdb7bc886c95eed78edce6192f0",
35
+ "model.visual_tokenizer.visual_model.blocks.14.attn.qkv.weight": "0a067491dc83fd97beb1b53082271fd233d7923a5eeb9c38fac4b936ef7b79a3",
36
+ "model.visual_tokenizer.visual_model.blocks.14.mlp.down_proj.weight": "cd5217f452242a3d43a90f7348ea276f0cb35400b9862f7b04c8cdc799d5148a",
37
+ "model.visual_tokenizer.visual_model.blocks.14.mlp.gate_proj.weight": "5e6b4b4ae1d1cc0cf6127e1d685e9fa184a830573522c01d795545f132948199",
38
+ "model.visual_tokenizer.visual_model.blocks.14.mlp.up_proj.weight": "b2e5ad77d0e2dfc3bb93e2ebabbbbe770503b22d4970ec2a28385982b1ff0ea7",
39
+ "model.visual_tokenizer.visual_model.blocks.15.attn.qkv.weight": "9bc885f306c0aff53de7f641dce65f60a0614cc2f9bf3eb14beb8b309be317b1",
40
+ "model.visual_tokenizer.visual_model.blocks.15.mlp.down_proj.weight": "d898e5c1e9ac4beea4dbc724c1b350bb333ea975aaf6dc82adf045b84b2559f7",
41
+ "model.visual_tokenizer.visual_model.blocks.15.mlp.gate_proj.weight": "118678bbc34973fab72b5e514e576c7ee65ea8d375fd337127142e33f9bc4b8d",
42
+ "model.visual_tokenizer.visual_model.blocks.15.mlp.up_proj.weight": "1990cfb0292a309d5d8b0d5db22ed247d1694ff35d100472ffaeda3a6abc799d",
43
+ "model.visual_tokenizer.visual_model.blocks.16.attn.qkv.weight": "bf11b97e7489525e8093acbb8e1605f6fff4f495101d28e144fc467b0334e26e",
44
+ "model.visual_tokenizer.visual_model.blocks.16.mlp.down_proj.weight": "fc7dfb10d634b831169d69a4b48e0fcfb69348ab2ad3c87649b70fd3d83234df",
45
+ "model.visual_tokenizer.visual_model.blocks.16.mlp.gate_proj.weight": "43f426fd8239cfb8e4167280015e68bc26498b43b2caac4f3aee0d77daac499b",
46
+ "model.visual_tokenizer.visual_model.blocks.16.mlp.up_proj.weight": "2c9683de7024bb73c61ba638e4b576db81bda1dc9efa1efd8943a9cb80c7b464",
47
+ "model.visual_tokenizer.visual_model.blocks.17.attn.qkv.weight": "eb0148df7d1be4f7c8c1a7ffd4a93e70ac01107364411f183c6aa37fa5716142",
48
+ "model.visual_tokenizer.visual_model.blocks.17.mlp.down_proj.weight": "0914e440613767adbdaec56cae1611de80a7c3edd3a6894a9bc1305e83f33017",
49
+ "model.visual_tokenizer.visual_model.blocks.17.mlp.gate_proj.weight": "2c748fe45141d43c4c222e21e65f1b3139f0eead20a82777ffa02b7f1f61e632",
50
+ "model.visual_tokenizer.visual_model.blocks.17.mlp.up_proj.weight": "1bd73992a109329effcbe2559ef1a3d9ded6f09b55bedff120127b0ddf1e2ecb",
51
+ "model.visual_tokenizer.visual_model.blocks.18.attn.qkv.weight": "eab92adb92c6476e7ea44e98e68af68da054e847cea7e5b08ad8ca4a196df3b4",
52
+ "model.visual_tokenizer.visual_model.blocks.18.mlp.down_proj.weight": "bebda2fc3daeb7cab182ecae4919c59fb080f5d4c83f8e05338ae650ed9a1224",
53
+ "model.visual_tokenizer.visual_model.blocks.18.mlp.gate_proj.weight": "28787c5112e6755d3eefcafd9f6b98c9c452bbb4e270e4e176c5c3f41c8b5a92",
54
+ "model.visual_tokenizer.visual_model.blocks.18.mlp.up_proj.weight": "78d58feb604e575938f5e6bf3814dce90ce4f1aeb30b3a937fb56e7f2ad3af36",
55
+ "model.visual_tokenizer.visual_model.blocks.19.attn.qkv.weight": "37876081ed35ca29a860d9dff20fd728796f474837be267973aae2ba6fb60030",
56
+ "model.visual_tokenizer.visual_model.blocks.19.mlp.down_proj.weight": "266f08276150cf08ab82cf2f3ba31d6ffddaaaf5a19776827d09e0cc10eb4e5f",
57
+ "model.visual_tokenizer.visual_model.blocks.19.mlp.gate_proj.weight": "5b44493f8848d401cad708b9b4a5fd92e87b70fcd102d8b40270ad09a11e4dd5",
58
+ "model.visual_tokenizer.visual_model.blocks.19.mlp.up_proj.weight": "fdc5a2037b86cc8c61e3686555b5ea1bc9a3c6909b942ab1754fca06f198221c",
59
+ "model.visual_tokenizer.visual_model.blocks.2.attn.qkv.weight": "7bdb13508d3d635e5d73ef4279cda5a7e96c4cbe9c090e875073a818b5cd8192",
60
+ "model.visual_tokenizer.visual_model.blocks.2.mlp.down_proj.weight": "220a842b1cc172fac7c1b08912950e60b46892c7ffe6ef93ed3f4c1f81559fca",
61
+ "model.visual_tokenizer.visual_model.blocks.2.mlp.gate_proj.weight": "15f07fa8cbed7a29f74331721872ca060bd9d4efd25e5544cdec65e627681c66",
62
+ "model.visual_tokenizer.visual_model.blocks.2.mlp.up_proj.weight": "87f49303aa7fcc58fc9728cd8eb05b53e257a28f1f5e92b6fcf5d74d31d67c9b",
63
+ "model.visual_tokenizer.visual_model.blocks.20.attn.qkv.weight": "b172bf48c4c126b7bef09363c3662ed3dba0d576a623f55a9628f8ceaf838519",
64
+ "model.visual_tokenizer.visual_model.blocks.20.mlp.down_proj.weight": "2037bd64eee813968a5d4e2cc7a745c596daf00e62ca33442115a17239ab2c20",
65
+ "model.visual_tokenizer.visual_model.blocks.20.mlp.gate_proj.weight": "6552fabe4567eb22359be23e9b8e2fc2689674b125b128232b9346261e50421b",
66
+ "model.visual_tokenizer.visual_model.blocks.20.mlp.up_proj.weight": "40ed660ad8aaec7bb7c475774f86143511ce5e5889b63889c20b45e69b9c837c",
67
+ "model.visual_tokenizer.visual_model.blocks.21.attn.qkv.weight": "e0797723820cd75a5f8588e7cc154840aad407a5e816c645e7e333c65bd80f5e",
68
+ "model.visual_tokenizer.visual_model.blocks.21.mlp.down_proj.weight": "14d93873528d916557a768ba888983f28f9619480e83d1fa19c7501f4fdeb95a",
69
+ "model.visual_tokenizer.visual_model.blocks.21.mlp.gate_proj.weight": "0e26a050be14b973d3f0168a897229f683648125fc4e1e68f1251b2aeca4eeb3",
70
+ "model.visual_tokenizer.visual_model.blocks.21.mlp.up_proj.weight": "4e7f899243cfac182dc6740be0d12c8ee4c560ba5c82f6329b4a37aec518908e",
71
+ "model.visual_tokenizer.visual_model.blocks.22.attn.qkv.weight": "eb1b006ce6cd1f3f00629084031017d62e3036f454809fa7151aff5a1dd52a3a",
72
+ "model.visual_tokenizer.visual_model.blocks.22.mlp.down_proj.weight": "1bb9bbfb00b1b36a019c14b06349b49310b92f11b1aa340acb6fbfbf41eae5c0",
73
+ "model.visual_tokenizer.visual_model.blocks.22.mlp.gate_proj.weight": "3e2bf99a1e2f7aacfcf40f2cf1ea1cc50f662a9e24c9250451b119cfe9901eae",
74
+ "model.visual_tokenizer.visual_model.blocks.22.mlp.up_proj.weight": "a347a7195ceb7f99841989a76704733c5a21c24f4f2059d74ac23eddaa474699",
75
+ "model.visual_tokenizer.visual_model.blocks.23.attn.qkv.weight": "fd8be80a1935e09b3176a2fdfc4c700b3d69009ea74deafc53b58712ee161869",
76
+ "model.visual_tokenizer.visual_model.blocks.23.mlp.down_proj.weight": "642d88b02db6a356c409a72c64e3cacdaf645743d294dbe8a6f374c04fb49c07",
77
+ "model.visual_tokenizer.visual_model.blocks.23.mlp.gate_proj.weight": "ec46e5687b643412673a9fc9031aa2d1874c68fe5755e5f8efa7be821c131fa5",
78
+ "model.visual_tokenizer.visual_model.blocks.23.mlp.up_proj.weight": "d44171b7aa623d825ee90d0293bfaea7adc76e34b283885b4d536f01ffaa5930",
79
+ "model.visual_tokenizer.visual_model.blocks.24.attn.qkv.weight": "92cdb23a186ef60f3a4223ff83c2a4e66391d4eaeee7839da391b9d8a7c0ad59",
80
+ "model.visual_tokenizer.visual_model.blocks.24.mlp.down_proj.weight": "90cc6ef221ad5123b1576a5d0222115d8ee7a5549c4dc5d2138a2411eb0b71fb",
81
+ "model.visual_tokenizer.visual_model.blocks.24.mlp.gate_proj.weight": "e743cbe1e71e8bdd7e8c5fe16fbcf7775a194a960d55bca658d483c291f71ebe",
82
+ "model.visual_tokenizer.visual_model.blocks.24.mlp.up_proj.weight": "49cd0cf129b439382140ccf5d1fb3a4bde665dcef0012e0676ceba5860978101",
83
+ "model.visual_tokenizer.visual_model.blocks.25.attn.qkv.weight": "a43605f82cb41069858ad76dfe12b5aca4338ed2b3fa35045452dfdf098ed85b",
84
+ "model.visual_tokenizer.visual_model.blocks.25.mlp.down_proj.weight": "47ff08cf93dc4a52abe0ec7907a13fd5542d6755d78005100ca54f7bb1bfccd6",
85
+ "model.visual_tokenizer.visual_model.blocks.25.mlp.gate_proj.weight": "04a50446c08193571458307b949a1a7bb46c8ceec8fbbf795349669b99d424e2",
86
+ "model.visual_tokenizer.visual_model.blocks.25.mlp.up_proj.weight": "b5b19d455fbd67acdfead45ca229f89dd4641527f7e730a9f295bdd0b686c9d1",
87
+ "model.visual_tokenizer.visual_model.blocks.26.attn.qkv.weight": "7ceb5f1d280b52b3267053e08ed3aaa975c91ffa655e607d4218c9b1b85fc492",
88
+ "model.visual_tokenizer.visual_model.blocks.26.mlp.down_proj.weight": "fd4d53d20020d7b0d05191f858908442e0fb476a8f6b4ab9ee9a3b49be3d4741",
89
+ "model.visual_tokenizer.visual_model.blocks.26.mlp.gate_proj.weight": "3db7a2a94693690bd9431411b4006ed2d859d1746eceabb607c3438d9ea6b447",
90
+ "model.visual_tokenizer.visual_model.blocks.26.mlp.up_proj.weight": "0eb292a404e231d385c860989c8f97c50eb6243c8025e352a89f0b478188f761",
91
+ "model.visual_tokenizer.visual_model.blocks.27.attn.qkv.weight": "2894fd6996c68687097d6b4eb71a6eb24cbf45db8f2dfcf65224fbecebf7ce02",
92
+ "model.visual_tokenizer.visual_model.blocks.27.mlp.down_proj.weight": "8dff26ffb4eced42f86c8f3f4812ca3310806c1030fc664c40fa705459e43b84",
93
+ "model.visual_tokenizer.visual_model.blocks.27.mlp.gate_proj.weight": "06308048eb1c73c022950a1519a0391d5c95bcc6eecd993f2222baa7e9a2931d",
94
+ "model.visual_tokenizer.visual_model.blocks.27.mlp.up_proj.weight": "fc36be0d416b30718560f7a30d3d599fad5e4ff91493eaddba1babb4572b6fbf",
95
+ "model.visual_tokenizer.visual_model.blocks.28.attn.qkv.weight": "0d3b7e9e5c1dd52c57876b5e80e7c0460cb63a4824c6fd224d363ebd109c9689",
96
+ "model.visual_tokenizer.visual_model.blocks.28.mlp.down_proj.weight": "b29e1dc4994b2fb7d059fb5383f9ce05e910aee48a2749a553d0235b3d4edbe4",
97
+ "model.visual_tokenizer.visual_model.blocks.28.mlp.gate_proj.weight": "93929c13cf25dcbb47031c48d7cca8bc0cecf7bc580587e9a7a91f306958c4d8",
98
+ "model.visual_tokenizer.visual_model.blocks.28.mlp.up_proj.weight": "afbf0debc240a89fa6909749b84f739c3117eb057f1ac8603be2d541d81a1604",
99
+ "model.visual_tokenizer.visual_model.blocks.29.attn.qkv.weight": "e29ca4f644f838a346e0baf5a25c0b092367590634055a0a97ac3cacf69302a7",
100
+ "model.visual_tokenizer.visual_model.blocks.29.mlp.down_proj.weight": "a8d04257194ce92e247268d53a3f416a1b0657041aa08575d84d34d094bba778",
101
+ "model.visual_tokenizer.visual_model.blocks.29.mlp.gate_proj.weight": "c7151bcd0bd7a716d357e386824a95c77e15fe4a5929bf763e679eeba73ffa23",
102
+ "model.visual_tokenizer.visual_model.blocks.29.mlp.up_proj.weight": "8e791e630f34b83dbc65a73fe19541af739b577ac35d08e28bb02c6f0a3e01a8",
103
+ "model.visual_tokenizer.visual_model.blocks.3.attn.qkv.weight": "19968141feb05eb397c86c0f365f1e977e6e147fb5dce990efd3cec96071055f",
104
+ "model.visual_tokenizer.visual_model.blocks.3.mlp.down_proj.weight": "014ab34664c2867f6774a45443c2d55bbf6f476488f104569bfb4d57e9d892f5",
105
+ "model.visual_tokenizer.visual_model.blocks.3.mlp.gate_proj.weight": "34559a0594582ed7ca5e1373a9bbe964cc5982a020d878921bff95e5837fdbe4",
106
+ "model.visual_tokenizer.visual_model.blocks.3.mlp.up_proj.weight": "e8250b9ac14b0285263db21dd0ecb6d3df28014345e44218ef3f664fbb78be1b",
107
+ "model.visual_tokenizer.visual_model.blocks.30.attn.qkv.weight": "9f6d236637f3f14c133ccc65b288e128bec3c5bfefbc8aa337053b9402fcec4a",
108
+ "model.visual_tokenizer.visual_model.blocks.30.mlp.down_proj.weight": "48229fde91304d2c49333979e902f6952be921edb3951a89cd99b7f123129a73",
109
+ "model.visual_tokenizer.visual_model.blocks.30.mlp.gate_proj.weight": "9c6a3bd4e890aa7ec3901639cfec5f9e74ad5a41d352596c1984399e4905507b",
110
+ "model.visual_tokenizer.visual_model.blocks.30.mlp.up_proj.weight": "0dc3fdad4f06e3efb83c507d3cfbdd4df2c8aee4a63dd39856d4d76a062a04be",
111
+ "model.visual_tokenizer.visual_model.blocks.31.attn.qkv.weight": "cc6adccf60977a13fe43e7f4234c69b3ebdadfd5f8867f82c2bcff9a1ea5bf5b",
112
+ "model.visual_tokenizer.visual_model.blocks.31.mlp.down_proj.weight": "fa539ed59b58d0d2d1e1c3fa75353a2fa75d1c236a36e846162347d44ecd20c9",
113
+ "model.visual_tokenizer.visual_model.blocks.31.mlp.gate_proj.weight": "bc3518bfddc5b0358997bd6b0b0467960ccab574a0be1008a6437f09c573639e",
114
+ "model.visual_tokenizer.visual_model.blocks.31.mlp.up_proj.weight": "3192587909697513e31a917fae2b9c1aaf37f564ac7e9890ecfd436ff02fb926",
115
+ "model.visual_tokenizer.visual_model.blocks.4.attn.qkv.weight": "5a54f107c5b955d2ede02c9e2611b013143dedb9e26d4ec5aa33b0a320366bba",
116
+ "model.visual_tokenizer.visual_model.blocks.4.mlp.down_proj.weight": "dcec10e345b489389f594cad619da520b7a714e66b78780690598b054b36402c",
117
+ "model.visual_tokenizer.visual_model.blocks.4.mlp.gate_proj.weight": "a7ed736b4a5e7751d264599d030bef1c304a988f9b9835294e34be824f39299a",
118
+ "model.visual_tokenizer.visual_model.blocks.4.mlp.up_proj.weight": "6cd86841d3f5d7e82a67317abbc6e1f35a0dfcc47ff39aca256b94a4c7cc1a4f",
119
+ "model.visual_tokenizer.visual_model.blocks.5.attn.qkv.weight": "6c3e7150660d5932e078b68de962210ede4bec26f7fdefca152861b418bf2047",
120
+ "model.visual_tokenizer.visual_model.blocks.5.mlp.down_proj.weight": "161751f0eb6a58159bc8e2bafb35c6780d7b7d4f1709e56c6c09cb64793ebfbc",
121
+ "model.visual_tokenizer.visual_model.blocks.5.mlp.gate_proj.weight": "da661fb3f9d6ece7670b90aa63474a7b7c11a0941c8fc952245e5698e2ee87f5",
122
+ "model.visual_tokenizer.visual_model.blocks.5.mlp.up_proj.weight": "bc7f7010ab97cc90b0dd53b66a202b0a58ee1992baf43b88e2ac606c643a1bd2",
123
+ "model.visual_tokenizer.visual_model.blocks.6.attn.qkv.weight": "ef948ec1fd5082024a8aa24549388c1edc149ac5483009793d3dedb246a7cd0c",
124
+ "model.visual_tokenizer.visual_model.blocks.6.mlp.down_proj.weight": "0c32507df39774ffe485bfc6235c93b7dba11a54c460629919a85227f99de9a2",
125
+ "model.visual_tokenizer.visual_model.blocks.6.mlp.gate_proj.weight": "f5d1da44070f177d85f7c351e97ef789779d61d9031136f4b5ba9636c0f97fc6",
126
+ "model.visual_tokenizer.visual_model.blocks.6.mlp.up_proj.weight": "d582af58b4c58f213e1c09f2e91d9df39b98b6c504f15175af0158bd9e73cb4a",
127
+ "model.visual_tokenizer.visual_model.blocks.7.attn.qkv.weight": "83d81799c55defe347f15d92942f43cba58204289e253c15b1ff437f81f91a09",
128
+ "model.visual_tokenizer.visual_model.blocks.7.mlp.down_proj.weight": "238d8a37b9c88520d5e5ebc9e2a31ef8d8da1216e4083c60be650438c8d420cf",
129
+ "model.visual_tokenizer.visual_model.blocks.7.mlp.gate_proj.weight": "29d8f56eaa7816c1b2d8f26fafe684758adddd1ec8e511f6c2cd202bda04ea3b",
130
+ "model.visual_tokenizer.visual_model.blocks.7.mlp.up_proj.weight": "3943f3a4676cc192fb7909e737ed9e503b6288b459bafb843b2c2bafdc297b33",
131
+ "model.visual_tokenizer.visual_model.blocks.8.attn.qkv.weight": "2f474d4208a1a4b90440a5cf02cd92209d3bb5c8eb018cc2776c7d7727dfb1a4",
132
+ "model.visual_tokenizer.visual_model.blocks.8.mlp.down_proj.weight": "55123e16b5aca2c9beb2670613bde46f1808e7b26aa080a6f463f9ad4405c9ff",
133
+ "model.visual_tokenizer.visual_model.blocks.8.mlp.gate_proj.weight": "cc66a33408b4115f47ae673b9d482143e0387c39fa4ccdb62e01659c7ed0883f",
134
+ "model.visual_tokenizer.visual_model.blocks.8.mlp.up_proj.weight": "60fd3184cb53fe06a45f1624eb5d4256a1f3f8d00fd378839fe981e1e7708057",
135
+ "model.visual_tokenizer.visual_model.blocks.9.attn.qkv.weight": "4a2c95d949d5ee1f1026b0ff0c55fe5049b77d7f3ac2f305d608188c2d08ff8a",
136
+ "model.visual_tokenizer.visual_model.blocks.9.mlp.down_proj.weight": "2ddb9e08a9c6368aefb694ecba8bd4b10302e8bbfa2d4fb6de979576ef6d4ad4",
137
+ "model.visual_tokenizer.visual_model.blocks.9.mlp.gate_proj.weight": "6771a413d734233eb4ff16beb9493dcf3feb6cd3ad9dd6de056a5a6212fa8d3b",
138
+ "model.visual_tokenizer.visual_model.blocks.9.mlp.up_proj.weight": "0b3c6bff6287f7d625e8f66605678991264510bfa264b569331b588955a8dd8a",
139
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks.0.cluster_size_ema": "4e9a6e4b9b1e203ebe18ed20095cb95c429a537a3cf814c7c5b357b823607850",
140
+ "model.visual_tokenizer.visual_bridge_model.bridge.ln_q.weight": "ac06859c83f6c39df39c23d5f309780141567c3f6139d41622780f9f65b5305d",
141
+ "model.visual_tokenizer.visual_bridge_model.bridge.mlp.0.bias": "1c2061286760d6b19f6515b6a8078605d69083b2dd3e3e8ab1ca1cbe67b1e3ea",
142
+ "model.visual_tokenizer.visual_bridge_model.bridge.mlp.2.bias": "015ad851cf0b3059d3220035348c859248faf3503b9dc9e9e281b7a3a3e1b96a",
143
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quant_conv.0.bias": "1aae2dda4016febd2765e64d20dd992319d388cc8a8690f1ae5f7984a4734dd3",
144
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quant_conv.0.weight": "8a6b690a44605e2e52a32ae3b567443033deae0c614d00ea032807760a796e47",
145
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quant_conv.1.bias": "85a6e0d54dc1a8e31f9facf1e49a29a0ee9ebcb5a3a63b54e04533683a917ab0",
146
+ "model.visual_tokenizer.visual_bridge_model.quantizer.quant_conv.3.bias": "721302203a2063d1292c0d2cabbcd4b77cdfaa606b4237b3cad4748a51ea96a9",
147
+ "model.visual_tokenizer.visual_embedding_layer.pre_buffer.pre_layernorm.bias": "33b9d30c3f131d7d1e00fd75981f27ae9b3a51df170bd02c94525143c8a171bf",
148
+ "model.visual_tokenizer.visual_embedding_layer.pre_buffer.pre_layernorm.weight": "ffc8acb3f03851b77d79e4b66f21ed52efd8d0f3b91b6b6547a826341a4f7f78",
149
+ "model.visual_tokenizer.visual_model.blocks.0.attn.proj.bias": "805d3e1f7a7e7d6435455cfb8c725da7ad32c33dc311aa50ba608f1adb311ed5",
150
+ "model.visual_tokenizer.visual_model.blocks.0.attn.proj.weight": "1d1064bcd3d1b2fd6d39e97f11d9e043d4c1874d3a57f4cfc58bdb7eadf0e052",
151
+ "model.visual_tokenizer.visual_model.blocks.0.attn.qkv.bias": "bf9b49bdf98361207bc4d33b822a658d0ffa1ddafc6aa8a8cf968d5a3e4db637",
152
+ "model.visual_tokenizer.visual_model.blocks.0.mlp.down_proj.bias": "e6b1adff93671009c243fc7bd2743276f6d25021e9d28eeabae03283ca60700a",
153
+ "model.visual_tokenizer.visual_model.blocks.0.mlp.gate_proj.bias": "56d9823d7558d4f8dc333586d3e3dfaac30110f8f59322097888961ad51a65d9",
154
+ "model.visual_tokenizer.visual_model.blocks.0.mlp.up_proj.bias": "0c9a409da124cdad9e03b8adb5104f7291c3e4e18c89c4a092c598c6122235da",
155
+ "model.visual_tokenizer.visual_model.blocks.0.norm1.weight": "37bdb238976923b82b3ffc2331505e2048d744986d1e2d232b80f00eb44df778",
156
+ "model.visual_tokenizer.visual_model.blocks.0.norm2.weight": "5494b0a55d1eb9f6fbcac9d945036f9655a03c025a57cb93a2a8b81fc3961dfe",
157
+ "model.visual_tokenizer.visual_model.blocks.1.attn.proj.bias": "6e8a69119206c75940b1a28b6af4b25b486c07ebbf861d5092dc6b71f92d49da",
158
+ "model.visual_tokenizer.visual_model.blocks.1.attn.proj.weight": "32b6c62690ad49ccfa08d6545cdd67e72d87ed5b0f11c5d0b9f517a9683c9c34",
159
+ "model.visual_tokenizer.visual_model.blocks.1.attn.qkv.bias": "79878eb105851f7a9e38fff89bad04275dda8dd6e8456924db7f664d99f4e759",
160
+ "model.visual_tokenizer.visual_model.blocks.1.mlp.down_proj.bias": "1a60617fddf254c713e966160e85c420cd0a1b93917efe13e1bde6fbac499504",
161
+ "model.visual_tokenizer.visual_model.blocks.1.mlp.gate_proj.bias": "aba8d299d6ce01e901b8c1d9a6b32e6f2e65584c7369c3f187a5aaeaa6a8af44",
162
+ "model.visual_tokenizer.visual_model.blocks.1.mlp.up_proj.bias": "fe2df42102b77f40dd8f49f361e4fc150388ffae67651010a5b2a63b17495d2b",
163
+ "model.visual_tokenizer.visual_model.blocks.1.norm1.weight": "af48ce0fc312770716e49355bfa61a55f13434878e7eec11ad6c3b92b6913454",
164
+ "model.visual_tokenizer.visual_model.blocks.1.norm2.weight": "18bf90d6d1deac998361fe8e0f179dc316df318a2b59b9e8cbb8631f24b609ee",
165
+ "model.visual_tokenizer.visual_model.blocks.10.attn.proj.bias": "75073d3931f9baf85f5cbdd1ace5dc26a0b96b7b8476fb8fe329a015bc3a153a",
166
+ "model.visual_tokenizer.visual_model.blocks.10.attn.proj.weight": "2ae37496e727d1a1a4385e59ec8029956389bf1f38560583454f8c6a642b0fb6",
167
+ "model.visual_tokenizer.visual_model.blocks.10.attn.qkv.bias": "0cfbd094e1d2c1f9d86eace9c8240db781874d7d57789c0976cb8344c1f185c0",
168
+ "model.visual_tokenizer.visual_model.blocks.10.mlp.down_proj.bias": "1f4c52098d8c9f94d4b4cef069b8825edf86bb239270d4910ed52a6cdaff733f",
169
+ "model.visual_tokenizer.visual_model.blocks.10.mlp.gate_proj.bias": "4f3ccdfc3f26e11e178b81241a6652a13e860e84884558e3f6e9f8954c9e0509",
170
+ "model.visual_tokenizer.visual_model.blocks.10.mlp.up_proj.bias": "c36395e4090beed8703a35b42918fd444aae740d4167e221b8c8b06a0b2a479a",
171
+ "model.visual_tokenizer.visual_model.blocks.10.norm1.weight": "1ce6859c241866bad440787516009c2f03eb3226b79f1bb04090df92c72e6573",
172
+ "model.visual_tokenizer.visual_model.blocks.10.norm2.weight": "f93ac720e94ee1ccf8cdfed29c80a60b71562797af79a1d5c44854de3c173987",
173
+ "model.visual_tokenizer.visual_model.blocks.11.attn.proj.bias": "79b1ef988558d82dfb427d474ae94ca3de0374bbf6f838b04f8c0db5bbf6fe80",
174
+ "model.visual_tokenizer.visual_model.blocks.11.attn.proj.weight": "3146d1cd44cbe6eb8c8febee8bb716d83ac9d194e5f1c463ffc3b498711a1703",
175
+ "model.visual_tokenizer.visual_model.blocks.11.attn.qkv.bias": "cf0ef3d7ed45796613aad614659dd889feffab8f84b00363a787889eb4dab4e1",
176
+ "model.visual_tokenizer.visual_model.blocks.11.mlp.down_proj.bias": "e2300542ce45e988577827eaab069967bd72ce0b8f4209f27f20a1e95d895e84",
177
+ "model.visual_tokenizer.visual_model.blocks.11.mlp.gate_proj.bias": "b8d7a0f6d85d4c6eabc29e9238b85a06a3f5bd01ab491cd4ab641c1834cd7ebf",
178
+ "model.visual_tokenizer.visual_model.blocks.11.mlp.up_proj.bias": "523fa9553c027177ecb46ced349c364b476e99beb5c4e1fa274efbbbdd149816",
179
+ "model.visual_tokenizer.visual_model.blocks.11.norm1.weight": "e515143ff7f34ed5f5070e1bb8ad7608f02235d932e55c70069fb42eabbe010a",
180
+ "model.visual_tokenizer.visual_model.blocks.11.norm2.weight": "b87345f708aa896c13feb373249381a9cc75e0db31a9220d096d04f5a9554fef",
181
+ "model.visual_tokenizer.visual_model.blocks.12.attn.proj.bias": "0fa908c394b772b159cd80c720d7a85d264aec9c416b22b36a07a75c1e445927",
182
+ "model.visual_tokenizer.visual_model.blocks.12.attn.proj.weight": "f2e3cfbcab93495849ea28156c922ca6aece47e7bc9e3166094bc2bb7a018139",
183
+ "model.visual_tokenizer.visual_model.blocks.12.attn.qkv.bias": "f5fbd4f74f2644c3f41d7d86236cf71ebb06d011210132e655c3711dd5d3716a",
184
+ "model.visual_tokenizer.visual_model.blocks.12.mlp.down_proj.bias": "6981d61834157c9c7bbcbace255c636d346cdc5c974790538946fd560b715d9b",
185
+ "model.visual_tokenizer.visual_model.blocks.12.mlp.gate_proj.bias": "7d9ee67538c8a80d8c76ca2b85a58627288ce7cbc1732ab5700fa9b0cdb1053d",
186
+ "model.visual_tokenizer.visual_model.blocks.12.mlp.up_proj.bias": "f24faf6d7302d40ae26cbf5690a1c2eed910543621f185f022ed16214d1dae8b",
187
+ "model.visual_tokenizer.visual_model.blocks.12.norm1.weight": "32544d82c6d35920b44f27f38c11511290215682c44b6f7cb2cbda19661ba90d",
188
+ "model.visual_tokenizer.visual_model.blocks.12.norm2.weight": "bdcd10e0c160588bde7c2b0dff87f2d2498f557d70178b990b4a628b6850990e",
189
+ "model.visual_tokenizer.visual_model.blocks.13.attn.proj.bias": "61f386487d9cd124d3f6838c46694a0ebc6c8c2fe202bd5c155b747c1c6b877e",
190
+ "model.visual_tokenizer.visual_model.blocks.13.attn.proj.weight": "72d507882d5f870b427f985a40807cd94e5788ad04512fcf121d8d3ab0df176d",
191
+ "model.visual_tokenizer.visual_model.blocks.13.attn.qkv.bias": "24838018b610eb1e098418ed359a6f9dde44ebe6f2b75fd3e16e99e3a16282eb",
192
+ "model.visual_tokenizer.visual_model.blocks.13.mlp.down_proj.bias": "c9a414dc1f75659454ab9c5caed884f0690fad2c86d4504062e0ee365f041757",
193
+ "model.visual_tokenizer.visual_model.blocks.13.mlp.gate_proj.bias": "46a79be2018941398bf544f67b5cb2b4515e6516bb482fa70ac72481a3b354a1",
194
+ "model.visual_tokenizer.visual_model.blocks.13.mlp.up_proj.bias": "e8986b416075baa2cfa0981505c93215a4642d2c6c675dfb78ba57af4abc532d",
195
+ "model.visual_tokenizer.visual_model.blocks.13.norm1.weight": "c681093b60ffc00811659142243746cbd32e2f57cd3a530ca1e688dad7038d3f",
196
+ "model.visual_tokenizer.visual_model.blocks.13.norm2.weight": "a79d148291180528faed52656b1d3c710fa7052d68dd7e7a775673428079598b",
197
+ "model.visual_tokenizer.visual_model.blocks.14.attn.proj.bias": "f66dcc415719cdf2e01338bc07d83761d7539682610482fefbbe2940beb7dfc1",
198
+ "model.visual_tokenizer.visual_model.blocks.14.attn.proj.weight": "90a4743a5c8f2876fc45c240a8224dc91ba157376cc24af69513cdd45b10a2ce",
199
+ "model.visual_tokenizer.visual_model.blocks.14.attn.qkv.bias": "45fcf18461d98ce44cf559dcfb9c3fee51899f08a7dee19d5ef5a721441e0885",
200
+ "model.visual_tokenizer.visual_model.blocks.14.mlp.down_proj.bias": "3b418d40c0c566386bcc40e0c2f19da68c560ccb00f90e80309a69d9e219edbf",
201
+ "model.visual_tokenizer.visual_model.blocks.14.mlp.gate_proj.bias": "0ca6e135ee577dfd1ce5429030507df2e069017d903e92535c70c03fd83644d1",
202
+ "model.visual_tokenizer.visual_model.blocks.14.mlp.up_proj.bias": "128ca9719664233b52a13f21a5e762ec9531bf66af6ce21cabe1cee7f82d03db",
203
+ "model.visual_tokenizer.visual_model.blocks.14.norm1.weight": "d9bcd46f9ac22327e07ffe424020cc975d863d9e66abf0bcfac42fce4d7b5989",
204
+ "model.visual_tokenizer.visual_model.blocks.14.norm2.weight": "1b38f516859c2aa265beea086e0ed9165ee39e2f955d9b84cac9db3163b400e8",
205
+ "model.visual_tokenizer.visual_model.blocks.15.attn.proj.bias": "ce7860ceebdcaa2389d379a1268e8fe2f63a25d9cb48b9891cae7208a97b15b6",
206
+ "model.visual_tokenizer.visual_model.blocks.15.attn.proj.weight": "a76fa437974204d45bb891cc9c7cf488bbabf0cba249cb53fbae2187e9dcf4c7",
207
+ "model.visual_tokenizer.visual_model.blocks.15.attn.qkv.bias": "4bdb939249fc44378c7021ba51714e9a036937ef1ccf6e9a3865f03d4845529a",
208
+ "model.visual_tokenizer.visual_model.blocks.15.mlp.down_proj.bias": "c1956150291221c171bd6e37bbd9a19101ac3d8523df3b4bdd738926fb361e65",
209
+ "model.visual_tokenizer.visual_model.blocks.15.mlp.gate_proj.bias": "3fc53de8cd573a9727ee2bd09c0814dd4f62caefdd516884eb323c1d70334825",
210
+ "model.visual_tokenizer.visual_model.blocks.15.mlp.up_proj.bias": "82e31055a75f4ee825302fa3658ca4412e5c3c86b3c7b490c72991b5d30f9525",
211
+ "model.visual_tokenizer.visual_model.blocks.15.norm1.weight": "854a4f95c2897d2c56cf23981b64d352f2f966c2cd47f5d9d09b3cbc10f24dda",
212
+ "model.visual_tokenizer.visual_model.blocks.15.norm2.weight": "396834a1608e91bfb625d591a5ae35b4058e796f211aebc2f962177a099fb05c",
213
+ "model.visual_tokenizer.visual_model.blocks.16.attn.proj.bias": "be0742fac52248e6a2c38f20098fe6362a6c1ed85ca55b8acfae09cfe13099e3",
214
+ "model.visual_tokenizer.visual_model.blocks.16.attn.proj.weight": "9038a6384419c66b5bf6a1291fea6884ea4deff18439fd931059b8d5dc19181c",
215
+ "model.visual_tokenizer.visual_model.blocks.16.attn.qkv.bias": "ef93f2c9cf873c58aa220ee4f07aa9d74fd3bff2dcfc68f1ba3235303994fd10",
216
+ "model.visual_tokenizer.visual_model.blocks.16.mlp.down_proj.bias": "c1723050077196d86ac28bb7116a36feb3dfa0448716ca0aeebae411afaf3fd0",
217
+ "model.visual_tokenizer.visual_model.blocks.16.mlp.gate_proj.bias": "81970e916ea3c3f36eff77c36bc1d86689da7b8beb30d422350ec7bae5d92b85",
218
+ "model.visual_tokenizer.visual_model.blocks.16.mlp.up_proj.bias": "ce0ae8808843a2eb931dc0fd9758a518b0433b962b87e6026c3bb31b92a701ed",
219
+ "model.visual_tokenizer.visual_model.blocks.16.norm1.weight": "0e8eadcb318bb2355fce16327e13375594f354455d763788ef1482297853e288",
220
+ "model.visual_tokenizer.visual_model.blocks.16.norm2.weight": "9575769ecca0fc94d8baf0fada6b0a59727490a36807e1aa1d11ce62b8f70103",
221
+ "model.visual_tokenizer.visual_model.blocks.17.attn.proj.bias": "f0c8759beedfe7928e6964350c0cf1d63512178e2d35c87bc03bfb8753d5aa33",
222
+ "model.visual_tokenizer.visual_model.blocks.17.attn.proj.weight": "53799ccebe1979521642439f5c9335f28a58b3ef767c9c8b1ec0b1c395221fca",
223
+ "model.visual_tokenizer.visual_model.blocks.17.attn.qkv.bias": "99a35b72130ce0d3cf293faa679f99a7c098cb52761b65ec6ddc012bfd0617f0",
224
+ "model.visual_tokenizer.visual_model.blocks.17.mlp.down_proj.bias": "b4026e00675220f91d4865893fea35d55189e9229eebe8a59302f057d0ec3cd2",
225
+ "model.visual_tokenizer.visual_model.blocks.17.mlp.gate_proj.bias": "a0c57e9d40f2022f614f0413cb3bff490772fb38f1d94b759161a73a241a377a",
226
+ "model.visual_tokenizer.visual_model.blocks.17.mlp.up_proj.bias": "813ce4b9c1ccbe46e06b5644354ff039d1d0519db302478e29d2055d7844e3fd",
227
+ "model.visual_tokenizer.visual_model.blocks.17.norm1.weight": "0bedb261347e1f6a0e379b4d45073cdc89c06775d0d58bf443ed3acc9c2de084",
228
+ "model.visual_tokenizer.visual_model.blocks.17.norm2.weight": "bb6239127441f4c5e0d4a9ca8f43d3ffd57aff892391beea49945ccc0982a6d9",
229
+ "model.visual_tokenizer.visual_model.blocks.18.attn.proj.bias": "dc6f5e3c90c04ada09ee3962d03d09657aad82de45b5ea71350828502155f813",
230
+ "model.visual_tokenizer.visual_model.blocks.18.attn.proj.weight": "ebd11e5fe3e67632d17b33ce19c1a4d9d010070ba80596e9b18ec8dd557b5c87",
231
+ "model.visual_tokenizer.visual_model.blocks.18.attn.qkv.bias": "459f81f5b78192ddb0b7045aba9230d97e9c4e8715d3e3782867b90fd6d24d0c",
232
+ "model.visual_tokenizer.visual_model.blocks.18.mlp.down_proj.bias": "571d7e078e2692fa47b72de6fc7716788112fe2d0986c116e68c556ea0d2da06",
233
+ "model.visual_tokenizer.visual_model.blocks.18.mlp.gate_proj.bias": "ec7a00f14d8f30a6ecbc66e0c8267d934fffe8404c329665fe0814dd61d6bf67",
234
+ "model.visual_tokenizer.visual_model.blocks.18.mlp.up_proj.bias": "2244a78c23e0251cce1ab93b8c54b7346362cf5db0f35e7097ac42db075a40bf",
235
+ "model.visual_tokenizer.visual_model.blocks.18.norm1.weight": "c2a5ad2a350b0619fd406758b5131532979289000116b32329634707de4e2609",
236
+ "model.visual_tokenizer.visual_model.blocks.18.norm2.weight": "04ed9a499c933ef96885b67f5707daceea80c192b596a48338e23c230be02167",
237
+ "model.visual_tokenizer.visual_model.blocks.19.attn.proj.bias": "993bb84d205abe7af609295e8228be2b2514bb586b679693b09a1137e527bfd1",
238
+ "model.visual_tokenizer.visual_model.blocks.19.attn.proj.weight": "fbf37493f4703b5785c118b2206a5f9fddb2db93ef81b2f8a5286054f167be3a",
239
+ "model.visual_tokenizer.visual_model.blocks.19.attn.qkv.bias": "e39fb1e39a17e5d7ebebd00fff9224ba6734eae2baa894e6fb37175509506dc9",
240
+ "model.visual_tokenizer.visual_model.blocks.19.mlp.down_proj.bias": "4c37402ab040e47505351487dd70d5d5e20ce1b92844e1a5143386e2a509c102",
241
+ "model.visual_tokenizer.visual_model.blocks.19.mlp.gate_proj.bias": "406c6b1089c8a9189f211313970993da646dba933b0f8787da095260fc1c75e6",
242
+ "model.visual_tokenizer.visual_model.blocks.19.mlp.up_proj.bias": "7515e1b9ca05e22aa66ff32c18a73053076f5443efa94e78b96b3cd0d1c9361f",
243
+ "model.visual_tokenizer.visual_model.blocks.19.norm1.weight": "ac6e5d48bf0b7ddd5490f5ac4a7013a1e9e4d8409087b7eba0ddb95b877f5d23",
244
+ "model.visual_tokenizer.visual_model.blocks.19.norm2.weight": "ee350e8f73dd6178cc9fbf50918f0515787d757b19110b7289da95dcf127cc94",
245
+ "model.visual_tokenizer.visual_model.blocks.2.attn.proj.bias": "d63fba4c79aa197602f5d4d73494e1078be2a07b060103e24785753894db5e79",
246
+ "model.visual_tokenizer.visual_model.blocks.2.attn.proj.weight": "adbded99ed29b426e39706f68e72ed769d0d56f8c0050160123946d57d4d6871",
247
+ "model.visual_tokenizer.visual_model.blocks.2.attn.qkv.bias": "aa1369dd9eba31b4217ca24daf4b764587466ef80b3e377a6999104407681548",
248
+ "model.visual_tokenizer.visual_model.blocks.2.mlp.down_proj.bias": "bfc95d790de6a8ff2246fa8faa852631199d0e9ffa754dc0756c81f3855dfe55",
249
+ "model.visual_tokenizer.visual_model.blocks.2.mlp.gate_proj.bias": "53d3ed6a4fb7b5e89972ab2d5c1a9e0ec13b3e0dda1fbb839cdc86a547bb3e70",
250
+ "model.visual_tokenizer.visual_model.blocks.2.mlp.up_proj.bias": "077327176d6c711bb64ea64ed188bc2f783c79e90451abab40381682c31a78ca",
251
+ "model.visual_tokenizer.visual_model.blocks.2.norm1.weight": "090f41ffce0f4bc1e6f311664646488df7cbf239f59f2c82dcad18923db78830",
252
+ "model.visual_tokenizer.visual_model.blocks.2.norm2.weight": "aec692beea96ff8724c5270bb5ce1aaadcdb9c3ed5db5ffd559439b38098ae72",
253
+ "model.visual_tokenizer.visual_model.blocks.20.attn.proj.bias": "7dd8916402d4e79f207a4edbd97a9d9b1e5f4ed9232c55537fb8a4ffa9939a9a",
254
+ "model.visual_tokenizer.visual_model.blocks.20.attn.proj.weight": "f98d96f5abb4cbc7c795a71381e21b54a3609490a1c64e7a0ae5a99968b5120a",
255
+ "model.visual_tokenizer.visual_model.blocks.20.attn.qkv.bias": "1f3ce28ea45079605d62e1a930df76fef6c2e21c554b9dfa00820e5e415c916a",
256
+ "model.visual_tokenizer.visual_model.blocks.20.mlp.down_proj.bias": "b0ec78db47a0152a54c86cbe1224d7fba4d6f27329192a6f6325cc3f78dfe4fb",
257
+ "model.visual_tokenizer.visual_model.blocks.20.mlp.gate_proj.bias": "9a0e6b955206470765ffbc8485b29ffac0e68708e58bf3fb400c2de6e9d01b4f",
258
+ "model.visual_tokenizer.visual_model.blocks.20.mlp.up_proj.bias": "0c3238a7449bf1ec5dee3e2e2b967ee63e37dc7a644778e275741fb2cce2c89a",
259
+ "model.visual_tokenizer.visual_model.blocks.20.norm1.weight": "259174b9b357bb0de8b215f68090567e3eaacfc17d3e081811b6f1aca4c89300",
260
+ "model.visual_tokenizer.visual_model.blocks.20.norm2.weight": "1758ee89e1696461c756d8d3a101a2f8474d4e2daed9baf91c6d6c824375a545",
261
+ "model.visual_tokenizer.visual_model.blocks.21.attn.proj.bias": "7289531b3b225f7f8e02e2347242b4e4414f8a352dd61df923bf43eb7c97efa0",
262
+ "model.visual_tokenizer.visual_model.blocks.21.attn.proj.weight": "d97972b99e8a7fc88b3896ba867a20977dd39686606ff0bce948170bec0a00c1",
263
+ "model.visual_tokenizer.visual_model.blocks.21.attn.qkv.bias": "314864073fc74cad288c006b38cabc74f97ddf241a09d4dcdcc289d6e76149ae",
264
+ "model.visual_tokenizer.visual_model.blocks.21.mlp.down_proj.bias": "eaa6d9886e12e97bf3d59d5968dab5689111c3dce643208932350f880945548f",
265
+ "model.visual_tokenizer.visual_model.blocks.21.mlp.gate_proj.bias": "83ae37b3000f6c7ca3dbb2557dce28636f08b3fae1f49ef307d3a9e59f610f6e",
266
+ "model.visual_tokenizer.visual_model.blocks.21.mlp.up_proj.bias": "b0cd5a73912aa34e0783d0da7cb9ae1fdc7a241ea7b44acb41c91196cf951021",
267
+ "model.visual_tokenizer.visual_model.blocks.21.norm1.weight": "d09c53011e76d00e74a6db06b284358f021331004112c9524d10606a7f660f0e",
268
+ "model.visual_tokenizer.visual_model.blocks.21.norm2.weight": "171e74c5e89ef2d1b7d6a11dd80da997ff210f0d8bd9f12aed1e84efb2d80abe",
269
+ "model.visual_tokenizer.visual_model.blocks.22.attn.proj.bias": "163f5d0831f07ec6706f20eae45bfe4525e1be80a44e622d056fe50fac92adf0",
270
+ "model.visual_tokenizer.visual_model.blocks.22.attn.proj.weight": "14df80711c0ad423aeb110defc1307f92bd55e7c5a947d10745109243be61b6d",
271
+ "model.visual_tokenizer.visual_model.blocks.22.attn.qkv.bias": "4780d09b95c774c4d54bfd0ef5f2d6190adfad7bc8ebb0382600820f5e789008",
272
+ "model.visual_tokenizer.visual_model.blocks.22.mlp.down_proj.bias": "02baef1446c3d074f80049d89dbb6d1570cecd3f807a12531f170ae4ca35103f",
273
+ "model.visual_tokenizer.visual_model.blocks.22.mlp.gate_proj.bias": "674d2576035209de49ecced1119b637ec15f3763995d0004ca50e4a414fd9599",
274
+ "model.visual_tokenizer.visual_model.blocks.22.mlp.up_proj.bias": "3e7dd489f4bc629b936fd03831057720c9b177c4bd465b3a974f5b3040fc7794",
275
+ "model.visual_tokenizer.visual_model.blocks.22.norm1.weight": "122fe1b26062854c1154dfdaf0d282db60387abf3a3df7f0818a692306026fcc",
276
+ "model.visual_tokenizer.visual_model.blocks.22.norm2.weight": "a53a61401b3905fb6cc6ec739ec8978434b5d4a179cd010d7c830b06f833f4e7",
277
+ "model.visual_tokenizer.visual_model.blocks.23.attn.proj.bias": "b45d0eb3b02a59ca64cd96143ad1ab09e18ffb7fe923e1f94470303958ee9451",
278
+ "model.visual_tokenizer.visual_model.blocks.23.attn.proj.weight": "1069068a4f277d898c4f45f369a974b70525f3111709b579ca9f8680462680b3",
279
+ "model.visual_tokenizer.visual_model.blocks.23.attn.qkv.bias": "6d1af895c6a310d076259990d7d80fb65d39a79eff83a10c89ef481806d7dbb0",
280
+ "model.visual_tokenizer.visual_model.blocks.23.mlp.down_proj.bias": "c50a0428c25f24eb47641ece99d6485531207d7a3cceb14cb7da01e0884e27f4",
281
+ "model.visual_tokenizer.visual_model.blocks.23.mlp.gate_proj.bias": "45f8e7c83bb813eee73b06bdc5745d50eeec0d38d93cd7805fe3305083a02b93",
282
+ "model.visual_tokenizer.visual_model.blocks.23.mlp.up_proj.bias": "9d1ee8458a0a73e8dc4353fac48e08ca3ef4caa6e99147884742c2d993881b31",
283
+ "model.visual_tokenizer.visual_model.blocks.23.norm1.weight": "34383d4558dda560ff4929849b14f06277f0273a1f76283a950ceabfd124520e",
284
+ "model.visual_tokenizer.visual_model.blocks.23.norm2.weight": "a69d5d2ed30e8a12df8171a7300faa7e3c3aa285ac70b0b2322683abf50ae6a6",
285
+ "model.visual_tokenizer.visual_model.blocks.24.attn.proj.bias": "472bfc593b5c6f9e8811c835b4ec15fa3116da37f8e38dc36b8348bddbc82b02",
286
+ "model.visual_tokenizer.visual_model.blocks.24.attn.proj.weight": "637550f8d7d9db269ed81d4bb7428293ca412a98191df5d22396fdfa2e094467",
287
+ "model.visual_tokenizer.visual_model.blocks.24.attn.qkv.bias": "ac6f5edb704b2064f02ee7b87456b60a11bb449f6d9c1ba51c3ef23c26885321",
288
+ "model.visual_tokenizer.visual_model.blocks.24.mlp.down_proj.bias": "f8fa835aa2287073a26071b7fcb2a82a6bfdf6ff07d0f929d789bc1b9c52bfed",
289
+ "model.visual_tokenizer.visual_model.blocks.24.mlp.gate_proj.bias": "589a63b15f498452480a26d50589471157554852ece4240fed1ae5895100f95a",
290
+ "model.visual_tokenizer.visual_model.blocks.24.mlp.up_proj.bias": "e2a17b0c2e1080c57afa17cc45a85b53021c8317fe160c8a5ac9ef738d770bb8",
291
+ "model.visual_tokenizer.visual_model.blocks.24.norm1.weight": "23179f5e5bbc4d21127793bdd3d735d176733769a4c4b25b0adf33a6b1624b21",
292
+ "model.visual_tokenizer.visual_model.blocks.24.norm2.weight": "e30e9330be6fe18565f391df61152736ba3cc92533e6240f64109849f9b5b14b",
293
+ "model.visual_tokenizer.visual_model.blocks.25.attn.proj.bias": "ecfe7eab944d41cfef31fca9ca4110d9b5a522023194ad21b5b8909186eaba3a",
294
+ "model.visual_tokenizer.visual_model.blocks.25.attn.proj.weight": "6f9fbaa6fb9240cdc5064ea2a10befd28901e9c6e10f0e05733c2276c694cf6f",
295
+ "model.visual_tokenizer.visual_model.blocks.25.attn.qkv.bias": "8392af005375329d12c5f0a8ef9f23424545515d4e576181a0709488192e00b9",
296
+ "model.visual_tokenizer.visual_model.blocks.25.mlp.down_proj.bias": "adfc87d95812363760beb1471356ae7ec03abfdf8c5269b12fe06008a0720be1",
297
+ "model.visual_tokenizer.visual_model.blocks.25.mlp.gate_proj.bias": "34fbcf4ec68faf97c7702901ffec61f477da03567d79328ce1e1ab443ac20750",
298
+ "model.visual_tokenizer.visual_model.blocks.25.mlp.up_proj.bias": "a96e98c0fa45e96095e6cd1c92ed4082b428d30c4f83ba1f82e1782719e9db5c",
299
+ "model.visual_tokenizer.visual_model.blocks.25.norm1.weight": "1238c42972ed951e9a6c490975c53df6c970f78a159b12402dda13c249b4ed9e",
300
+ "model.visual_tokenizer.visual_model.blocks.25.norm2.weight": "28830dca38ade790d4f7700d4d9b426b3e42d3d1eab25fa0b93d28f779a876a5",
301
+ "model.visual_tokenizer.visual_model.blocks.26.attn.proj.bias": "14cc70e6092a5e97d8af683b8a6bb738e439baf12f779b32b9b253736d629562",
302
+ "model.visual_tokenizer.visual_model.blocks.26.attn.proj.weight": "8030ea4a9e51a6bfbba398700991e8cd52a3b5bef56dbf4145a3fd80e89d68b4",
303
+ "model.visual_tokenizer.visual_model.blocks.26.attn.qkv.bias": "ac8f9ade0b0a6df2a925788c13ad70a5434770d635228647ba049b0a1397c99f",
304
+ "model.visual_tokenizer.visual_model.blocks.26.mlp.down_proj.bias": "ac5765e4b18ce143539ca20d7145ae4547c49006f96f5056cd9b9dd256f6b5c1",
305
+ "model.visual_tokenizer.visual_model.blocks.26.mlp.gate_proj.bias": "494da881cf4154fd673b7a6f03ff2c6aeec91447a3588452cd313669f5ee022e",
306
+ "model.visual_tokenizer.visual_model.blocks.26.mlp.up_proj.bias": "dc7f1de6eacdcd3afcad4ced5b1999f38a4a50d15185cb061fe37648cb73f88a",
307
+ "model.visual_tokenizer.visual_model.blocks.26.norm1.weight": "e09e079069dbb9b0ef27843d720c431ceac74013afb8c4901c6bf2757b2f2f12",
308
+ "model.visual_tokenizer.visual_model.blocks.26.norm2.weight": "16eec9d5a80666d67d93d1e99d558033be05cc11e8015836c5f5e2e32d8afaf4",
309
+ "model.visual_tokenizer.visual_model.blocks.27.attn.proj.bias": "87659eba91e619724e3577223a1d4b859f7779467c3c1715a6ee317cc2546ad8",
310
+ "model.visual_tokenizer.visual_model.blocks.27.attn.proj.weight": "df6d5bf5a386a7bdad098ff7e23c9256c47d3e43c19c4e3b2d002434ae7acbef",
311
+ "model.visual_tokenizer.visual_model.blocks.27.attn.qkv.bias": "16fde0f1e34f297cf606e26e8d7e36eaae05c3aa66175450a4fdd99fa16f7dda",
312
+ "model.visual_tokenizer.visual_model.blocks.27.mlp.down_proj.bias": "b005232e490bc6754e99e5e5e6c612214908c2d8a871e2b329768aab8fa1444c",
313
+ "model.visual_tokenizer.visual_model.blocks.27.mlp.gate_proj.bias": "88fddef01bcbaa00a4c02252e07464775163f18a77ddcdd0c0af8c896746277c",
314
+ "model.visual_tokenizer.visual_model.blocks.27.mlp.up_proj.bias": "51d9cb4ecb8b5ddd159d3175ad96e46e06433087059b6dea732888b2375efb20",
315
+ "model.visual_tokenizer.visual_model.blocks.27.norm1.weight": "723baf0bcc3f289def7d9647a6c13cd8502a3c71b8bb57174fdbe2a9e4c59b40",
316
+ "model.visual_tokenizer.visual_model.blocks.27.norm2.weight": "bce58f40d05b97958514be89518ed160fc4e28ba1d4e71242dea756972e07f33",
317
+ "model.visual_tokenizer.visual_model.blocks.28.attn.proj.bias": "ce974ab595eb1a080e2901853aa4de4a1542df34b10d85a939e9f15ed5bac983",
318
+ "model.visual_tokenizer.visual_model.blocks.28.attn.proj.weight": "9ea8a5d94cf7b45177edb5d57b702d88910c8b1e637538e4354161279220cbff",
319
+ "model.visual_tokenizer.visual_model.blocks.28.attn.qkv.bias": "48cc30133ecd736eab3ff550927eff08040e49a4996d976b864b1d28a713d156",
320
+ "model.visual_tokenizer.visual_model.blocks.28.mlp.down_proj.bias": "0c9b76781a43e267c2ea7303f681c7d5c6831349addf385d9cfad52949aa5338",
321
+ "model.visual_tokenizer.visual_model.blocks.28.mlp.gate_proj.bias": "14b55fc77551a0bec1b856d681767e4f49fd437704c2aaf9ad6b445f34442782",
322
+ "model.visual_tokenizer.visual_model.blocks.28.mlp.up_proj.bias": "6656ca4833087156699756658126d94533764c911bfc6a318fc672e31004fa15",
323
+ "model.visual_tokenizer.visual_model.blocks.28.norm1.weight": "479bf308614dbbd6287f7b17c779458a40dde89e8e6da2e97bcbd8c521109e0f",
324
+ "model.visual_tokenizer.visual_model.blocks.28.norm2.weight": "e35519e9f57a951572354215720c4f75a26a1c36c57cf5351c367923444fe407",
325
+ "model.visual_tokenizer.visual_model.blocks.29.attn.proj.bias": "12e2922d2bfcabd3fcb6a56504c0b261bdb6bae3c3adf6cb3f55c4967ec5c4ee",
326
+ "model.visual_tokenizer.visual_model.blocks.29.attn.proj.weight": "cf748c3365cb411d0d6bb4a570d939dcb4eeea338e09179bb6a6fd839dc6dbeb",
327
+ "model.visual_tokenizer.visual_model.blocks.29.attn.qkv.bias": "fafbe5692c1b5925050dc71e6c013373137557d45464d1a62a7c2d22fa0c3184",
328
+ "model.visual_tokenizer.visual_model.blocks.29.mlp.down_proj.bias": "ec72a2039095cc921ab073417eb3bdea3e81b8f58b02e533a91b2857a101b33b",
329
+ "model.visual_tokenizer.visual_model.blocks.29.mlp.gate_proj.bias": "d21211071cbfc42b2dad0b2664bdf702095f1f77962c09993267ea264bbfe8c8",
330
+ "model.visual_tokenizer.visual_model.blocks.29.mlp.up_proj.bias": "d542f42f315224e4af6180d5943f6c435604ad357d8a64252327af3379979cc4",
331
+ "model.visual_tokenizer.visual_model.blocks.29.norm1.weight": "c8a28b1c0f6c942fccb09686cd4525a6c0230ddf0ef3447cf88c721720b59f5e",
332
+ "model.visual_tokenizer.visual_model.blocks.29.norm2.weight": "24be473ac046dec0e5cdd2c2033804157ff4c8549a6593c716f14bff889c14a6",
333
+ "model.visual_tokenizer.visual_model.blocks.3.attn.proj.bias": "1a2cbba62b6542ef40354babf73976a6e2a5315bda8e1cd91dd63bada8f699af",
334
+ "model.visual_tokenizer.visual_model.blocks.3.attn.proj.weight": "b14238838f71f2aeac0c401b2ce35c9625ffb5708ae545a6afa98032e8218aac",
335
+ "model.visual_tokenizer.visual_model.blocks.3.attn.qkv.bias": "5258cfee50f11f7d354c27431c9328f750ae1ebd0785fb143861a765854a1217",
336
+ "model.visual_tokenizer.visual_model.blocks.3.mlp.down_proj.bias": "6aaa308a4c1ca2320ca615a6e20387d08509cd26a831a7607baa41c1bfcb2bc7",
337
+ "model.visual_tokenizer.visual_model.blocks.3.mlp.gate_proj.bias": "123cb642d7860264a32e3b3244f6fe0a21150eddc028475adf4fae91b8136025",
338
+ "model.visual_tokenizer.visual_model.blocks.3.mlp.up_proj.bias": "2caacf7bb3814b765a672b394b172d8578e2d5e9a5444c31f04ce475390bb2af",
339
+ "model.visual_tokenizer.visual_model.blocks.3.norm1.weight": "d5e93baea2f04cd5381701f248c34957e170d311ef67165c72a55d8e1e8c57d8",
340
+ "model.visual_tokenizer.visual_model.blocks.3.norm2.weight": "504be3de5013a42bbac342c3663ea4dadac6ac2b58d6bc5ea75021d2f563a179",
341
+ "model.visual_tokenizer.visual_model.blocks.30.attn.proj.bias": "6d48fccb29833a4e8e0b9d1f70c2258c7be573d921164b04ab302a2174035f1d",
342
+ "model.visual_tokenizer.visual_model.blocks.30.attn.proj.weight": "f6ba9628c38f8005faaf84e5357b9a8c21eee8e575a5333f7e683de792240e8d",
343
+ "model.visual_tokenizer.visual_model.blocks.30.attn.qkv.bias": "a525da18c53385d394077f52ae0958ac92ad4e22ed6a51788a322b8123d76075",
344
+ "model.visual_tokenizer.visual_model.blocks.30.mlp.down_proj.bias": "43a14ebce9b5201d15953e51e5841d3e8822b29d522f11f7ff3b6ba3234a248c",
345
+ "model.visual_tokenizer.visual_model.blocks.30.mlp.gate_proj.bias": "728c6d857e1aa918cccb97b45f022a1674783ef37a8c5a75e79398ca52656718",
346
+ "model.visual_tokenizer.visual_model.blocks.30.mlp.up_proj.bias": "03b033d7a356e0ad451c41b64ca49eaa7c75f7b8c25e542e11e96ae1d6368695",
347
+ "model.visual_tokenizer.visual_model.blocks.30.norm1.weight": "2450e34112c9974c9ca43b8bd0c7d70a8224465e971f4347a29416bb0fc611d0",
348
+ "model.visual_tokenizer.visual_model.blocks.30.norm2.weight": "8092849acf030475a9be8cb913b217474a4a5e3948cb5337d7d70b2180d18fc8",
349
+ "model.visual_tokenizer.visual_model.blocks.31.attn.proj.bias": "d1aeb8f8034cf6644ce1c05a83cee98d0482f2692072d152a075562b76d1cf82",
350
+ "model.visual_tokenizer.visual_model.blocks.31.attn.proj.weight": "113dabb9d29b5a9ec92bacd330f5d16e81fc8f489384d1ccfbc512089da88678",
351
+ "model.visual_tokenizer.visual_model.blocks.31.attn.qkv.bias": "6908faf0ac0d8da7030bca10b2c00020f5cf724272717bf4662bb734a8600836",
352
+ "model.visual_tokenizer.visual_model.blocks.31.mlp.down_proj.bias": "8e131e89eec3bb0ad3bbb07907fbe8aedcf4fc4315069393bfabf5ca0b1bc704",
353
+ "model.visual_tokenizer.visual_model.blocks.31.mlp.gate_proj.bias": "4f0cabf06362bb2dd4ac1c04591e9cae954dcb306cb2709e26f655f62574b278",
354
+ "model.visual_tokenizer.visual_model.blocks.31.mlp.up_proj.bias": "295910b3b39491d6861409d21529fe92b96c262f1b1d4f5a1539c47395143c42",
355
+ "model.visual_tokenizer.visual_model.blocks.31.norm1.weight": "88db8f78729960e6cd4af347bdfabf9301076f641ac278b03b1843f48b50f083",
356
+ "model.visual_tokenizer.visual_model.blocks.31.norm2.weight": "cbdb90111859c42ca97e36a1bcb9b4aa7f791e85bb9df274729c2f57daa7661f",
357
+ "model.visual_tokenizer.visual_model.blocks.4.attn.proj.bias": "14a69f1017874ce98cbacaa9d39d1ea0f9ac205ac850145ebbbcc6ed0a857d1b",
358
+ "model.visual_tokenizer.visual_model.blocks.4.attn.proj.weight": "ee49ba61fe1dada3e26632c75a0123eaf5cfc1aa32467f46bb3ca7672d2405d6",
359
+ "model.visual_tokenizer.visual_model.blocks.4.attn.qkv.bias": "c780ecf8feba2c9c87971215177b20ac70be1b40e4fe2dc3aa94074d258a9272",
360
+ "model.visual_tokenizer.visual_model.blocks.4.mlp.down_proj.bias": "3938e21d6b388f89f44db65dad03c82e535a21c5738a15a2b530dedf4de6ce46",
361
+ "model.visual_tokenizer.visual_model.blocks.4.mlp.gate_proj.bias": "5c5090a6d6fd907090be331a485f79c6bb4075f76a879f098ebc58189c9bde44",
362
+ "model.visual_tokenizer.visual_model.blocks.4.mlp.up_proj.bias": "e9fe07ee31d002974d75c64ecd04e0dd214b183dffda36c90a5cba9ebd31b4cf",
363
+ "model.visual_tokenizer.visual_model.blocks.4.norm1.weight": "88f2ea107e7a5f67168cab076217ac843dc10965ef69de44e12046e6ad50b234",
364
+ "model.visual_tokenizer.visual_model.blocks.4.norm2.weight": "68b2aab99c7e886378d0e83df023fa26be7a3fa2b302de0a39c10adbd732a3f6",
365
+ "model.visual_tokenizer.visual_model.blocks.5.attn.proj.bias": "19a73d008c09c5e8b0178f42dedc1e3f952de1d1efa73fa5f887f65c13f98a2e",
366
+ "model.visual_tokenizer.visual_model.blocks.5.attn.proj.weight": "67552d68ef95b058fb3c56e62b8d245d9b6f5406393692a89873ee4bd5e0e81e",
367
+ "model.visual_tokenizer.visual_model.blocks.5.attn.qkv.bias": "202503b3a046d98577210eac6495be8af1973109a74c62c269c4dc385a9e6524",
368
+ "model.visual_tokenizer.visual_model.blocks.5.mlp.down_proj.bias": "49838a6e84bfd653cc5182104603dcfda2f67a9c4d60a1682966e4d2ec0df7c2",
369
+ "model.visual_tokenizer.visual_model.blocks.5.mlp.gate_proj.bias": "36bcd99299fbf07678bda609f94208661797f1e263879b9f46ff3708049da51e",
370
+ "model.visual_tokenizer.visual_model.blocks.5.mlp.up_proj.bias": "7a1aecc076b5de2e9c37faffd1928f99b385ff29e24179227dc326021193b5a4",
371
+ "model.visual_tokenizer.visual_model.blocks.5.norm1.weight": "f248742b796649f19bc971dc76e015d5bd1fc3960fd628e9392bd9ffaf1d2339",
372
+ "model.visual_tokenizer.visual_model.blocks.5.norm2.weight": "dbdec9592470bb9deb753970e8faf80bef29b45f7ca155307da873900b58d5af",
373
+ "model.visual_tokenizer.visual_model.blocks.6.attn.proj.bias": "40c795e7dfcc6a66235c5c2233435355e9c495e023f09d4e2818d41820c2aca3",
374
+ "model.visual_tokenizer.visual_model.blocks.6.attn.proj.weight": "d3a07cce69d833e5226721e188e3bccdc3a74cb150e99cdf804dcc03dc8c31c6",
375
+ "model.visual_tokenizer.visual_model.blocks.6.attn.qkv.bias": "95dec5616b8e2801bb5b0ce83181dc8966391d671e2418ff7d8ef4bb27a884a7",
376
+ "model.visual_tokenizer.visual_model.blocks.6.mlp.down_proj.bias": "f637b1bfe77b5778b56ba6530e4653f2d308592b16ef6596d40b73286923b688",
377
+ "model.visual_tokenizer.visual_model.blocks.6.mlp.gate_proj.bias": "ea67711f2d71daca1b478b71b3adffd0a0e0288729a4f774eb322d5fe61ccf4d",
378
+ "model.visual_tokenizer.visual_model.blocks.6.mlp.up_proj.bias": "8067bbd53f1a3083e7b01437f46367f476487fcbda26a01b970065262eb06bbf",
379
+ "model.visual_tokenizer.visual_model.blocks.6.norm1.weight": "2ea4e24ddf066b93690d3061137fefa987249a15fb2265978d9d3f2fb20471bd",
380
+ "model.visual_tokenizer.visual_model.blocks.6.norm2.weight": "da4edcf16a448236bd9da06c4e96ebde67984bd387bdf5fcfeb2aa7403acf485",
381
+ "model.visual_tokenizer.visual_model.blocks.7.attn.proj.bias": "e1c3c24eeb191794bb5a81fed3b542b0e9be7719b05ff4c8ca86f0eb139829b8",
382
+ "model.visual_tokenizer.visual_model.blocks.7.attn.proj.weight": "9cd705241ca0420372a1e2c0d27619d77f33000f8bb0388e529ec6202d604cf2",
383
+ "model.visual_tokenizer.visual_model.blocks.7.attn.qkv.bias": "2388a918340d8023a8e847720d940831de0c925641d8f2ab234612bbc34d791b",
384
+ "model.visual_tokenizer.visual_model.blocks.7.mlp.down_proj.bias": "f7550cb325354c346921a4a0798b0c2f4b6571d518314e1cc16bc2ffe39ec34e",
385
+ "model.visual_tokenizer.visual_model.blocks.7.mlp.gate_proj.bias": "64c32c1e9ea101b8dfb3c129506610c3b59c6be45bf18c6ca50c09756f5ac357",
386
+ "model.visual_tokenizer.visual_model.blocks.7.mlp.up_proj.bias": "4077df962861c5d9ab06a8dc8ff870c88fdc68039197588c93444335b806fbdc",
387
+ "model.visual_tokenizer.visual_model.blocks.7.norm1.weight": "41920a9e26417b1abcccd2da2b8ddc70bec04a5ca2e53a54c6ee75744ce129d0",
388
+ "model.visual_tokenizer.visual_model.blocks.7.norm2.weight": "0b1760afe44e670a65daa2a97a17b1a31b7a2c6c9c567e33c493d7ed34dee94f",
389
+ "model.visual_tokenizer.visual_model.blocks.8.attn.proj.bias": "d6e99ecbe2d51e7e8cc5e78db872556bd5b677e2e66c9a07696a901e52fa2a67",
390
+ "model.visual_tokenizer.visual_model.blocks.8.attn.proj.weight": "58beb51ce824c65232a3abcc8a2fb004bc1ad1fca741d5bffa5b1b2ae820f40f",
391
+ "model.visual_tokenizer.visual_model.blocks.8.attn.qkv.bias": "425e7ad7e1d4e653c13345ceac1e744c60517a6df679a788f237ddc8987ad9dc",
392
+ "model.visual_tokenizer.visual_model.blocks.8.mlp.down_proj.bias": "081aa5ba330845bbe5cbc39d65756f540df4f92121848ea7d1f37da357940ab5",
393
+ "model.visual_tokenizer.visual_model.blocks.8.mlp.gate_proj.bias": "aa4fe0c97219fd63688acf9b107f17062ea3c1222604fbcca31c53f99d86bd86",
394
+ "model.visual_tokenizer.visual_model.blocks.8.mlp.up_proj.bias": "1a0b9aed1abb2fa598c30fb35d09d1b01d374d5784de51207f14fdad8fcbdffd",
395
+ "model.visual_tokenizer.visual_model.blocks.8.norm1.weight": "015bba8059c443bff5bf9469be7f6b4f56bfdc9fb8940e3d6f79a694e7aed2c0",
396
+ "model.visual_tokenizer.visual_model.blocks.8.norm2.weight": "109161cc7df0bc191e7ea693dff54cb44a3050164a8771006742f36ba39a6a09",
397
+ "model.visual_tokenizer.visual_model.blocks.9.attn.proj.bias": "e0a207205ca4e489fd89215a79dc9c23555630be2f44b68551fdbc5957eb03fd",
398
+ "model.visual_tokenizer.visual_model.blocks.9.attn.proj.weight": "7badd89250518964688d21452edc7511c2a487bdee7c89ef3695efd990cdc8f6",
399
+ "model.visual_tokenizer.visual_model.blocks.9.attn.qkv.bias": "0369f90a6d478d60dab371b8c39657990766d93bb3c7235aa93b05f59efe3ada",
400
+ "model.visual_tokenizer.visual_model.blocks.9.mlp.down_proj.bias": "86400f15dcacee61ea33a0b039f56456f9960a90d313a28c7f30b1ae36c3e3b2",
401
+ "model.visual_tokenizer.visual_model.blocks.9.mlp.gate_proj.bias": "a209bab8085a9ad0351b9853307149d3075204b25bd4043b160845f94127561d",
402
+ "model.visual_tokenizer.visual_model.blocks.9.mlp.up_proj.bias": "8d23d2f0ec741a37a661e65fd248028ba3640229fa32e47d58d813e75002f563",
403
+ "model.visual_tokenizer.visual_model.blocks.9.norm1.weight": "5ac92cda5a888e7efe77f1ff7b72675db289055047be02949bfc0dd85794b8df",
404
+ "model.visual_tokenizer.visual_model.blocks.9.norm2.weight": "414826d87991062d8c053aac6dd9cfe0c7d45a6768d088d88bc7c15062b7fec4",
405
+ "model.visual_tokenizer.visual_model.patch_embed.proj.weight": "445267f7f85623e04fa7676956de78a26c64aabc259e4c533cd01b5a54589802"
406
+ }
validate.py ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from pathlib import Path
2
+ import json,sys,time,torch
3
+ root=Path(__file__).resolve().parent;sys.path.insert(0,str(root.resolve()))
4
+ from component import load_model,patchify_pixels,encode_pixels,decode_codes,code_features
5
+ from native.visual import restore_spatial_structure_and_convert_to_images
6
+ torch.set_num_threads(4);checks=[];t=time.time()
7
+ def check(name,ok,**details):
8
+ assert ok,(name,details)
9
+ checks.append(dict(name=name,passed=True,**details));print(name,details,flush=True)
10
+ m=load_model(root);check('strict_base_codec_load',True,tensors=len(m.state_dict()))
11
+ books=m.model.visual_tokenizer.visual_bridge_model.quantizer.quantize.codebooks
12
+ check('native_shared_codebook_object',all(book is books[0] for book in books))
13
+ check('shared_codebook_storage',len({book.embed.data_ptr() for book in books})==1)
14
+ with torch.inference_mode():
15
+ for h,w in [(112,112),(56,84)]:
16
+ pixels=torch.linspace(0,1,3*h*w).reshape(1,3,h,w);p,grid=patchify_pixels(pixels)
17
+ recovered=restore_spatial_structure_and_convert_to_images(p,grid,14)[0]
18
+ mean=pixels.new_tensor([.48145466,.4578275,.40821073])[:,None,None];std=pixels.new_tensor([.26862954,.26130258,.27577711])[:,None,None]
19
+ check(f'patch_layout_inverse_{h}x{w}',torch.equal(recovered,(pixels[0]-mean)/std),patches=list(p.shape))
20
+ ids,g=encode_pixels(m,pixels);check(f'rvq_ids_{h}x{w}',ids.shape==(h//28*w//28,8) and ids.min()>=0 and ids.max()<16384,shape=list(ids.shape),minimum=int(ids.min()),maximum=int(ids.max()))
21
+ features=code_features(m,ids);check(f'lookup_sum_{h}x{w}',features.shape==(h//28*w//28,3584) and torch.isfinite(features).all().item())
22
+ images=decode_codes(m,ids,g);y=images[0];check(f'base_reconstruction_{h}x{w}',y.shape==(3,h,w) and torch.isfinite(y).all().item(),shape=list(y.shape),mse=(y-((pixels[0]-mean)/std)).square().mean().item())
23
+ hidden=m.model.visual_tokenizer.visual_embedding_layer(torch.zeros(3,3072,dtype=torch.bfloat16));check('language_visual_embedding_interface',hidden.shape==(3,3072) and torch.isfinite(hidden).all().item())
24
+ pixels=torch.linspace(-1,1,3*64*64).reshape(1,3,64,64);z=m.image_refiner.vae.encode(pixels).latent_dist.mode();y=m.image_refiner.vae.decode(z).sample
25
+ check('refiner_vae_reconstruction',z.shape==(1,16,8,8) and y.shape==pixels.shape and torch.isfinite(y).all().item(),latent_shape=list(z.shape))
26
+ c=m.image_refiner.cond_proj(torch.randn(4,3584));check('refiner_condition_projection',c.shape[0]==4 and torch.isfinite(c).all().item(),shape=list(c.shape))
27
+ aliases=json.loads((root/'alias_verification.json').read_text());check('source_shared_aliases_exact',len(aliases)==21)
28
+ check('base_source_bytes_exact',json.loads((root/'extraction.json').read_text())['source_tensor_bytes_equal'] and json.loads((root/'decoder/extraction.json').read_text())['source_tensor_bytes_equal'])
29
+ result=dict(strict_load=True,source_tensor_bytes_equal=True,checks=checks,smoke=dict(passed=True,device='cpu',visual_dtype='bfloat16',base_decoder_dtype='float32',quantizer_dtype='float32'),elapsed_seconds=time.time()-t,limitations=['This report covers the native dNaViT/RVQ/base decoder and refiner VAE/condition projection. Full flow refiner has a separate validation report.','No full LongCat text/audio backbone or VQA/T2I benchmark.','CPU compatibility uses a vendored Qwen2.5-VL window-attention implementation and preserves native decoder behavior.'])
30
+ (root/'validation.json').write_text(json.dumps(result,indent=2)+'\n');print('LONGCAT BASE VALIDATED',result['elapsed_seconds'],flush=True)
validate_refiner.py ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from pathlib import Path
2
+ import json,sys,time,torch,shutil
3
+ root=Path(__file__).resolve().parent
4
+ sys.path.insert(0,str(root.resolve()))
5
+ from accelerate import init_empty_weights
6
+ from safetensors.torch import load_file
7
+ from native.configuration_longcat_next import LongcatNextConfig
8
+ from native.image_refiner import ImageRefinerContainer
9
+ from native.refiner_modules import RotaryPosEmbed
10
+ torch.set_num_threads(4);checks=[];t=time.time()
11
+ def check(name,ok,**details):
12
+ assert ok,(name,details)
13
+ checks.append(dict(name=name,passed=True,**details));print(name,details,flush=True)
14
+ cfg=LongcatNextConfig(**json.loads((root/'source_config.json').read_text())).visual_config.visual_decoder_config
15
+ with init_empty_weights():m=ImageRefinerContainer(cfg)
16
+ state={k.removeprefix('image_refiner.'):v for k,v in load_file(root/'decoder/model.safetensors').items() if k.startswith('image_refiner.')}
17
+ state.update({k.removeprefix('image_refiner.'):v for k,v in load_file(root/'refiner/model.safetensors').items()})
18
+ m.load_state_dict(state,strict=True,assign=True);m.eval();del state
19
+ check('strict_full_flow_refiner',True,tensors=len(m.state_dict()),transformer_tensors=len(m.base_transformer.state_dict()))
20
+ dtype=next(m.base_transformer.parameters()).dtype;check('native_bfloat16_weights',dtype==torch.bfloat16)
21
+ torch.manual_seed(1019);latent=torch.randn(1,16,4,4,dtype=dtype);reference=[[torch.randn(16,4,4,dtype=dtype)]];features=torch.randn(1,4,3584,dtype=dtype);mask=torch.ones(1,4,dtype=torch.bool);tc=cfg.transformer_config
22
+ freqs=RotaryPosEmbed.get_freqs_cis(tc.axes_dim_rope,tc.axes_lens,theta=10000)
23
+ with torch.inference_mode():
24
+ cond=m.cond_proj(features);check('native_refiner_conditioning',cond.shape==(1,4,2048) and torch.isfinite(cond).all().item())
25
+ result=m.base_transformer(latent,torch.tensor([.5],dtype=dtype),cond,freqs,mask,ref_image_hidden_states=reference,return_dict=False)
26
+ pred=result if torch.is_tensor(result) else (result[0] if isinstance(result,(tuple,list)) else result.sample)
27
+ if isinstance(pred,list):pred=pred[0].unsqueeze(0)
28
+ check('conditioned_flow_forward',pred.shape==latent.shape and torch.isfinite(pred).all().item(),shape=list(pred.shape),dtype=str(pred.dtype))
29
+ update=latent.float()-.1*pred.float();check('single_euler_update',torch.isfinite(update).all().item() and not torch.equal(update,latent.float()),mean_abs_update=(update-latent.float()).abs().mean().item())
30
+ altered=m.base_transformer(latent,torch.tensor([.5],dtype=dtype),cond*0,freqs,mask,ref_image_hidden_states=reference,return_dict=False)
31
+ other=altered if torch.is_tensor(altered) else (altered[0] if isinstance(altered,(tuple,list)) else altered.sample)
32
+ if isinstance(other,list):other=other[0].unsqueeze(0)
33
+ check('condition_affects_flow',not torch.equal(pred,other),max_abs_difference=(pred-other).abs().max().item())
34
+ ex=json.loads((root/'refiner/extraction.json').read_text());check('refiner_source_tensor_bytes_exact',ex['source_tensor_bytes_equal'])
35
+ report=dict(strict_load=True,source_tensor_bytes_equal=True,checks=checks,smoke=dict(passed=True,device='cpu',dtype=str(dtype),latent_shape=[1,16,4,4],reference_images=1),elapsed_seconds=time.time()-t,limitations=['Tiny-latent native flow forward and one Euler update, not full-resolution image refinement or perceptual-quality evaluation.','No LongCat language/audio backbone.'])
36
+ (root/'refiner_validation.json').write_text(json.dumps(report,indent=2)+'\n')
37
+ base=json.loads((root/'validation.json').read_text());base['checks'].extend([{'name':'refiner_'+c['name'],**{k:v for k,v in c.items() if k!='name'}} for c in checks]);base['full_flow_refiner_validation']='refiner_validation.json';base['limitations']=[x for x in base['limitations'] if 'separate validation report' not in x];base['limitations'].append('Full flow-refiner weights and tiny-latent conditioned forward are validated separately; no full-resolution quality benchmark.');(root/'validation.json').write_text(json.dumps(base,indent=2)+'\n')
38
+ print('LONGCAT FULL REFINER VALIDATED',report['elapsed_seconds'],flush=True)
validation.json ADDED
@@ -0,0 +1,166 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "strict_load": true,
3
+ "source_tensor_bytes_equal": true,
4
+ "checks": [
5
+ {
6
+ "name": "strict_base_codec_load",
7
+ "passed": true,
8
+ "tensors": 1229
9
+ },
10
+ {
11
+ "name": "native_shared_codebook_object",
12
+ "passed": true
13
+ },
14
+ {
15
+ "name": "shared_codebook_storage",
16
+ "passed": true
17
+ },
18
+ {
19
+ "name": "patch_layout_inverse_112x112",
20
+ "passed": true,
21
+ "patches": [
22
+ 64,
23
+ 1176
24
+ ]
25
+ },
26
+ {
27
+ "name": "rvq_ids_112x112",
28
+ "passed": true,
29
+ "shape": [
30
+ 16,
31
+ 8
32
+ ],
33
+ "minimum": 33,
34
+ "maximum": 16208
35
+ },
36
+ {
37
+ "name": "lookup_sum_112x112",
38
+ "passed": true
39
+ },
40
+ {
41
+ "name": "base_reconstruction_112x112",
42
+ "passed": true,
43
+ "shape": [
44
+ 3,
45
+ 112,
46
+ 112
47
+ ],
48
+ "mse": 0.19658847153186798
49
+ },
50
+ {
51
+ "name": "patch_layout_inverse_56x84",
52
+ "passed": true,
53
+ "patches": [
54
+ 24,
55
+ 1176
56
+ ]
57
+ },
58
+ {
59
+ "name": "rvq_ids_56x84",
60
+ "passed": true,
61
+ "shape": [
62
+ 6,
63
+ 8
64
+ ],
65
+ "minimum": 33,
66
+ "maximum": 16305
67
+ },
68
+ {
69
+ "name": "lookup_sum_56x84",
70
+ "passed": true
71
+ },
72
+ {
73
+ "name": "base_reconstruction_56x84",
74
+ "passed": true,
75
+ "shape": [
76
+ 3,
77
+ 56,
78
+ 84
79
+ ],
80
+ "mse": 0.4664306044578552
81
+ },
82
+ {
83
+ "name": "language_visual_embedding_interface",
84
+ "passed": true
85
+ },
86
+ {
87
+ "name": "refiner_vae_reconstruction",
88
+ "passed": true,
89
+ "latent_shape": [
90
+ 1,
91
+ 16,
92
+ 8,
93
+ 8
94
+ ]
95
+ },
96
+ {
97
+ "name": "refiner_condition_projection",
98
+ "passed": true,
99
+ "shape": [
100
+ 4,
101
+ 2048
102
+ ]
103
+ },
104
+ {
105
+ "name": "source_shared_aliases_exact",
106
+ "passed": true
107
+ },
108
+ {
109
+ "name": "base_source_bytes_exact",
110
+ "passed": true
111
+ },
112
+ {
113
+ "name": "refiner_strict_full_flow_refiner",
114
+ "passed": true,
115
+ "tensors": 828,
116
+ "transformer_tensors": 582
117
+ },
118
+ {
119
+ "name": "refiner_native_bfloat16_weights",
120
+ "passed": true
121
+ },
122
+ {
123
+ "name": "refiner_native_refiner_conditioning",
124
+ "passed": true
125
+ },
126
+ {
127
+ "name": "refiner_conditioned_flow_forward",
128
+ "passed": true,
129
+ "shape": [
130
+ 1,
131
+ 16,
132
+ 4,
133
+ 4
134
+ ],
135
+ "dtype": "torch.bfloat16"
136
+ },
137
+ {
138
+ "name": "refiner_single_euler_update",
139
+ "passed": true,
140
+ "mean_abs_update": 0.07963985204696655
141
+ },
142
+ {
143
+ "name": "refiner_condition_affects_flow",
144
+ "passed": true,
145
+ "max_abs_difference": 0.99609375
146
+ },
147
+ {
148
+ "name": "refiner_refiner_source_tensor_bytes_exact",
149
+ "passed": true
150
+ }
151
+ ],
152
+ "smoke": {
153
+ "passed": true,
154
+ "device": "cpu",
155
+ "visual_dtype": "bfloat16",
156
+ "base_decoder_dtype": "float32",
157
+ "quantizer_dtype": "float32"
158
+ },
159
+ "elapsed_seconds": 11.928704977035522,
160
+ "limitations": [
161
+ "No full LongCat text/audio backbone or VQA/T2I benchmark.",
162
+ "CPU compatibility uses a vendored Qwen2.5-VL window-attention implementation and preserves native decoder behavior.",
163
+ "Full flow-refiner weights and tiny-latent conditioned forward are validated separately; no full-resolution quality benchmark."
164
+ ],
165
+ "full_flow_refiner_validation": "refiner_validation.json"
166
+ }