Extract pinned native components; verify source bytes, strict loading and native encode/decode interfaces
Browse files- LICENSE +21 -0
- LICENSES.md +1 -0
- README.md +59 -0
- alias_verification.json +86 -0
- aliases.json +23 -0
- code_provenance.json +11 -0
- component.py +83 -0
- decoder/alias_verification.json +1 -0
- decoder/aliases.json +1 -0
- decoder/extraction.json +11 -0
- decoder/model.safetensors +3 -0
- decoder/source_config.json +286 -0
- decoder/tensor_mapping.json +0 -0
- decoder/tensor_sha256.json +0 -0
- extraction.json +11 -0
- model.safetensors +3 -0
- native/__init__.py +0 -0
- native/compat.py +16 -0
- native/configuration_longcat_next.py +153 -0
- native/configuration_longcat_ngram.py +218 -0
- native/image_refiner.py +748 -0
- native/qwen2_5_vl_vit.py +494 -0
- native/refiner_modules.py +1330 -0
- native/visual.py +1068 -0
- refiner/alias_verification.json +1 -0
- refiner/aliases.json +1 -0
- refiner/extraction.json +11 -0
- refiner/model.safetensors +3 -0
- refiner/source_config.json +286 -0
- refiner/tensor_mapping.json +0 -0
- refiner/tensor_sha256.json +584 -0
- refiner_validation.json +62 -0
- release_manifest.json +161 -0
- requirements.txt +8 -0
- source_config.json +286 -0
- tensor_mapping.json +0 -0
- tensor_sha256.json +406 -0
- validate.py +30 -0
- validate_refiner.py +38 -0
- validation.json +166 -0
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 |
+
}
|