matthewagi commited on
Commit
73629b7
·
verified ·
1 Parent(s): b396102

Initial upload of distilled ViT-S Canon model

Browse files
README.md ADDED
@@ -0,0 +1,145 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: other
3
+ license_name: health-ai-developer-foundations
4
+ license_link: https://developers.google.com/health-ai-developer-foundations/terms
5
+ library_name: transformers
6
+ pipeline_tag: feature-extraction
7
+ tags:
8
+ - audio
9
+ - medical
10
+ - embeddings
11
+ - vision-transformer
12
+ - distillation
13
+ - canon
14
+ ---
15
+
16
+ # Distilled HeAR ViT-S Canon (PyTorch)
17
+
18
+ This repository package contains a Hugging Face-compatible export of our distilled HeAR student:
19
+
20
+ - Backbone: ViT-S (`vit_small_patch16_224`), 1-channel input
21
+ - Input shape: `[B, 1, 192, 128]` mel+PCEN spectrograms from 2 s audio at 16 kHz
22
+ - Canon configuration: A/B/C/D enabled, 2D Canon (`kernel=4`), no positional encodings
23
+ - Output embedding: `pooler_output` with shape `[B, 512]`
24
+
25
+ This folder is ready for upload to Hugging Face Hub as-is.
26
+
27
+ ## Files in this package
28
+
29
+ - `config.json`: model config + `auto_map` for custom loading
30
+ - `configuration_hear_canon.py`: custom `PretrainedConfig`
31
+ - `modeling_hear_canon.py`: custom `PreTrainedModel` with built-in audio preprocessing
32
+ - `pytorch_model.bin`: distilled student + projection head weights
33
+ - `preprocessor_config.json`: preprocessing metadata
34
+ - `model_shapes.json`: parameter and tensor shape inventory
35
+ - `training_args.json`: saved training/checkpoint args used for this export
36
+ - `.gitattributes`: LFS patterns for Hub upload
37
+ - `smoke_test.py`: local verification script
38
+
39
+ ## Quick start (local folder)
40
+
41
+ ```bash
42
+ pip install -U "transformers>=4.50.0" timm torch scipy soundfile
43
+ python3 trained_model_hf_upload/smoke_test.py
44
+ ```
45
+
46
+ ## Inference from raw audio waveform
47
+
48
+ ```python
49
+ import torch
50
+ from transformers import AutoModel
51
+
52
+ model = AutoModel.from_pretrained(
53
+ "trained_model_hf_upload",
54
+ trust_remote_code=True,
55
+ )
56
+ model.eval()
57
+
58
+ # 4 clips, each 2 seconds at 16 kHz => 32000 samples
59
+ raw_audio_batch = torch.rand((4, 32000), dtype=torch.float32)
60
+
61
+ with torch.inference_mode():
62
+ out = model(input_values=raw_audio_batch, return_dict=True)
63
+
64
+ embeddings = out.pooler_output
65
+ print(embeddings.shape) # torch.Size([4, 512])
66
+ ```
67
+
68
+ ## Inference from `.wav` file
69
+
70
+ ```python
71
+ import torch
72
+ import soundfile as sf
73
+ from scipy import signal
74
+ from transformers import AutoModel
75
+
76
+
77
+ def load_wav_mono_16k(path: str, target_sr: int = 16000) -> torch.Tensor:
78
+ audio, sr = sf.read(path, dtype="float32", always_2d=False)
79
+ if audio.ndim == 2:
80
+ audio = audio.mean(axis=1)
81
+ if sr != target_sr:
82
+ new_len = int(round(audio.shape[0] * (target_sr / sr)))
83
+ audio = signal.resample(audio, new_len)
84
+ return torch.from_numpy(audio).float()
85
+
86
+
87
+ model = AutoModel.from_pretrained("trained_model_hf_upload", trust_remote_code=True)
88
+ model.eval()
89
+
90
+ waveform = load_wav_mono_16k("example.wav")
91
+
92
+ with torch.inference_mode():
93
+ embedding = model.embed_audio(waveform)
94
+
95
+ print(embedding.shape) # torch.Size([1, 512])
96
+ ```
97
+
98
+ ## Inference from preprocessed spectrograms
99
+
100
+ ```python
101
+ import torch
102
+ from transformers import AutoModel
103
+
104
+ model = AutoModel.from_pretrained("trained_model_hf_upload", trust_remote_code=True)
105
+ model.eval()
106
+
107
+ raw_audio = torch.rand((2, 32000), dtype=torch.float32)
108
+ spectrogram = model.preprocess_audio(raw_audio)
109
+
110
+ with torch.inference_mode():
111
+ out = model(pixel_values=spectrogram, return_dict=True)
112
+
113
+ print(spectrogram.shape) # torch.Size([2, 1, 192, 128])
114
+ print(out.pooler_output.shape) # torch.Size([2, 512])
115
+ ```
116
+
117
+ ## After uploading to Hugging Face
118
+
119
+ Replace the local path with your Hub repo id:
120
+
121
+ ```python
122
+ from transformers import AutoModel
123
+
124
+ model = AutoModel.from_pretrained(
125
+ "<your-org>/<your-repo>",
126
+ trust_remote_code=True,
127
+ )
128
+ ```
129
+
130
+ Upload example:
131
+
132
+ ```bash
133
+ huggingface-cli repo create <your-repo> --type model
134
+ huggingface-cli upload <your-org>/<your-repo> trained_model_hf_upload .
135
+ ```
136
+
137
+ ## Architecture summary
138
+
139
+ - Student parameters: `22,140,288`
140
+ - Projection head parameters: `197,120`
141
+ - Total parameters: `22,337,408`
142
+ - Student hidden size: `384`
143
+ - Pooler output size: `512`
144
+
145
+ Detailed tensor shapes are listed in `model_shapes.json`.
config.json ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_name_or_path": "distilled-hear-vit-s-canon",
3
+ "architectures": [
4
+ "HearCanonViTModel"
5
+ ],
6
+ "auto_map": {
7
+ "AutoConfig": "configuration_hear_canon.HearCanonViTConfig",
8
+ "AutoModel": "modeling_hear_canon.HearCanonViTModel"
9
+ },
10
+ "clip_seconds": 2.0,
11
+ "canon": true,
12
+ "canon_2d": true,
13
+ "canon_a": true,
14
+ "canon_abcd": true,
15
+ "canon_b": true,
16
+ "canon_b_qkv": false,
17
+ "canon_c": true,
18
+ "canon_causal": false,
19
+ "canon_d": true,
20
+ "canon_kernel": 4,
21
+ "canon_no_pos_enc": true,
22
+ "hidden_act": "gelu",
23
+ "hidden_size": 384,
24
+ "image_size": [
25
+ 192,
26
+ 128
27
+ ],
28
+ "intermediate_size": 1536,
29
+ "layer_norm_eps": 1e-06,
30
+ "model_type": "hear_canon_vit",
31
+ "num_attention_heads": 6,
32
+ "num_audio_samples": 32000,
33
+ "num_channels": 1,
34
+ "num_hidden_layers": 12,
35
+ "patch_size": 16,
36
+ "pooled_dim": 512,
37
+ "pooler_output_size": 512,
38
+ "sample_rate": 16000,
39
+ "timm_model_name": "vit_small_patch16_224",
40
+ "torch_dtype": "float32",
41
+ "transformers_version": "4.50.3"
42
+ }
configuration_hear_canon.py ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Configuration for the distilled HeAR ViT-S + Canon model."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import List
6
+
7
+ from transformers import PretrainedConfig
8
+
9
+
10
+ class HearCanonViTConfig(PretrainedConfig):
11
+ """Config class for the distilled HeAR ViT-S model with Canon layers."""
12
+
13
+ model_type = "hear_canon_vit"
14
+
15
+ def __init__(
16
+ self,
17
+ timm_model_name: str = "vit_small_patch16_224",
18
+ image_size: List[int] | tuple[int, int] = (192, 128),
19
+ patch_size: int = 16,
20
+ num_channels: int = 1,
21
+ hidden_size: int = 384,
22
+ num_hidden_layers: int = 12,
23
+ num_attention_heads: int = 6,
24
+ intermediate_size: int = 1536,
25
+ pooled_dim: int = 512,
26
+ pooler_output_size: int = 512,
27
+ hidden_act: str = "gelu",
28
+ layer_norm_eps: float = 1e-6,
29
+ sample_rate: int = 16000,
30
+ clip_seconds: float = 2.0,
31
+ num_audio_samples: int = 32000,
32
+ canon: bool = True,
33
+ canon_2d: bool = True,
34
+ canon_kernel: int = 4,
35
+ canon_a: bool = True,
36
+ canon_b: bool = True,
37
+ canon_b_qkv: bool = False,
38
+ canon_c: bool = True,
39
+ canon_d: bool = True,
40
+ canon_abcd: bool = True,
41
+ canon_no_pos_enc: bool = True,
42
+ canon_causal: bool = False,
43
+ **kwargs,
44
+ ):
45
+ self.timm_model_name = str(timm_model_name)
46
+ self.image_size = [int(image_size[0]), int(image_size[1])]
47
+ self.patch_size = int(patch_size)
48
+ self.num_channels = int(num_channels)
49
+ self.hidden_size = int(hidden_size)
50
+ self.num_hidden_layers = int(num_hidden_layers)
51
+ self.num_attention_heads = int(num_attention_heads)
52
+ self.intermediate_size = int(intermediate_size)
53
+ self.pooled_dim = int(pooled_dim)
54
+ self.pooler_output_size = int(pooler_output_size)
55
+ self.hidden_act = str(hidden_act)
56
+ self.layer_norm_eps = float(layer_norm_eps)
57
+
58
+ self.sample_rate = int(sample_rate)
59
+ self.clip_seconds = float(clip_seconds)
60
+ self.num_audio_samples = int(num_audio_samples)
61
+
62
+ self.canon = bool(canon)
63
+ self.canon_2d = bool(canon_2d)
64
+ self.canon_kernel = int(canon_kernel)
65
+ self.canon_a = bool(canon_a)
66
+ self.canon_b = bool(canon_b)
67
+ self.canon_b_qkv = bool(canon_b_qkv)
68
+ self.canon_c = bool(canon_c)
69
+ self.canon_d = bool(canon_d)
70
+ self.canon_abcd = bool(canon_abcd)
71
+ self.canon_no_pos_enc = bool(canon_no_pos_enc)
72
+ self.canon_causal = bool(canon_causal)
73
+
74
+ super().__init__(**kwargs)
model_shapes.json ADDED
@@ -0,0 +1,1353 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "checkpoint_source": "/home/matt/Documents/HeAR/trained_model.pt",
3
+ "exported_weights_file": "pytorch_model.bin",
4
+ "input_spectrogram_shape": [
5
+ "B",
6
+ 1,
7
+ 192,
8
+ 128
9
+ ],
10
+ "input_waveform_shape": [
11
+ "B",
12
+ 32000
13
+ ],
14
+ "pooler_output_size": 512,
15
+ "projection_parameters": 197120,
16
+ "projection_state_dict_shapes": {
17
+ "bias": [
18
+ 512
19
+ ],
20
+ "weight": [
21
+ 512,
22
+ 384
23
+ ]
24
+ },
25
+ "projection_state_dict_size": 2,
26
+ "student_hidden_size": 384,
27
+ "student_parameters": 22140288,
28
+ "student_state_dict_shapes": {
29
+ "blocks.0.block.attn.canon._fallback.conv.bias": [
30
+ 384
31
+ ],
32
+ "blocks.0.block.attn.canon._fallback.conv.weight": [
33
+ 384,
34
+ 1,
35
+ 4
36
+ ],
37
+ "blocks.0.block.attn.canon.conv.bias": [
38
+ 384
39
+ ],
40
+ "blocks.0.block.attn.canon.conv.weight": [
41
+ 384,
42
+ 1,
43
+ 4,
44
+ 4
45
+ ],
46
+ "blocks.0.block.attn.module.proj.0.bias": [
47
+ 384
48
+ ],
49
+ "blocks.0.block.attn.module.proj.0.weight": [
50
+ 384,
51
+ 384
52
+ ],
53
+ "blocks.0.block.attn.module.proj.1._fallback.conv.bias": [
54
+ 384
55
+ ],
56
+ "blocks.0.block.attn.module.proj.1._fallback.conv.weight": [
57
+ 384,
58
+ 1,
59
+ 4
60
+ ],
61
+ "blocks.0.block.attn.module.proj.1.conv.bias": [
62
+ 384
63
+ ],
64
+ "blocks.0.block.attn.module.proj.1.conv.weight": [
65
+ 384,
66
+ 1,
67
+ 4,
68
+ 4
69
+ ],
70
+ "blocks.0.block.attn.module.qkv.bias": [
71
+ 1152
72
+ ],
73
+ "blocks.0.block.attn.module.qkv.weight": [
74
+ 1152,
75
+ 384
76
+ ],
77
+ "blocks.0.block.mlp.canon._fallback.conv.bias": [
78
+ 384
79
+ ],
80
+ "blocks.0.block.mlp.canon._fallback.conv.weight": [
81
+ 384,
82
+ 1,
83
+ 4
84
+ ],
85
+ "blocks.0.block.mlp.canon.conv.bias": [
86
+ 384
87
+ ],
88
+ "blocks.0.block.mlp.canon.conv.weight": [
89
+ 384,
90
+ 1,
91
+ 4,
92
+ 4
93
+ ],
94
+ "blocks.0.block.mlp.module.fc1.canon._fallback.conv.bias": [
95
+ 1536
96
+ ],
97
+ "blocks.0.block.mlp.module.fc1.canon._fallback.conv.weight": [
98
+ 1536,
99
+ 1,
100
+ 4
101
+ ],
102
+ "blocks.0.block.mlp.module.fc1.canon.conv.bias": [
103
+ 1536
104
+ ],
105
+ "blocks.0.block.mlp.module.fc1.canon.conv.weight": [
106
+ 1536,
107
+ 1,
108
+ 4,
109
+ 4
110
+ ],
111
+ "blocks.0.block.mlp.module.fc1.fc1.bias": [
112
+ 1536
113
+ ],
114
+ "blocks.0.block.mlp.module.fc1.fc1.weight": [
115
+ 1536,
116
+ 384
117
+ ],
118
+ "blocks.0.block.mlp.module.fc2.bias": [
119
+ 384
120
+ ],
121
+ "blocks.0.block.mlp.module.fc2.weight": [
122
+ 384,
123
+ 1536
124
+ ],
125
+ "blocks.0.block.norm1.bias": [
126
+ 384
127
+ ],
128
+ "blocks.0.block.norm1.weight": [
129
+ 384
130
+ ],
131
+ "blocks.0.block.norm2.bias": [
132
+ 384
133
+ ],
134
+ "blocks.0.block.norm2.weight": [
135
+ 384
136
+ ],
137
+ "blocks.1.block.attn.canon._fallback.conv.bias": [
138
+ 384
139
+ ],
140
+ "blocks.1.block.attn.canon._fallback.conv.weight": [
141
+ 384,
142
+ 1,
143
+ 4
144
+ ],
145
+ "blocks.1.block.attn.canon.conv.bias": [
146
+ 384
147
+ ],
148
+ "blocks.1.block.attn.canon.conv.weight": [
149
+ 384,
150
+ 1,
151
+ 4,
152
+ 4
153
+ ],
154
+ "blocks.1.block.attn.module.proj.0.bias": [
155
+ 384
156
+ ],
157
+ "blocks.1.block.attn.module.proj.0.weight": [
158
+ 384,
159
+ 384
160
+ ],
161
+ "blocks.1.block.attn.module.proj.1._fallback.conv.bias": [
162
+ 384
163
+ ],
164
+ "blocks.1.block.attn.module.proj.1._fallback.conv.weight": [
165
+ 384,
166
+ 1,
167
+ 4
168
+ ],
169
+ "blocks.1.block.attn.module.proj.1.conv.bias": [
170
+ 384
171
+ ],
172
+ "blocks.1.block.attn.module.proj.1.conv.weight": [
173
+ 384,
174
+ 1,
175
+ 4,
176
+ 4
177
+ ],
178
+ "blocks.1.block.attn.module.qkv.bias": [
179
+ 1152
180
+ ],
181
+ "blocks.1.block.attn.module.qkv.weight": [
182
+ 1152,
183
+ 384
184
+ ],
185
+ "blocks.1.block.mlp.canon._fallback.conv.bias": [
186
+ 384
187
+ ],
188
+ "blocks.1.block.mlp.canon._fallback.conv.weight": [
189
+ 384,
190
+ 1,
191
+ 4
192
+ ],
193
+ "blocks.1.block.mlp.canon.conv.bias": [
194
+ 384
195
+ ],
196
+ "blocks.1.block.mlp.canon.conv.weight": [
197
+ 384,
198
+ 1,
199
+ 4,
200
+ 4
201
+ ],
202
+ "blocks.1.block.mlp.module.fc1.canon._fallback.conv.bias": [
203
+ 1536
204
+ ],
205
+ "blocks.1.block.mlp.module.fc1.canon._fallback.conv.weight": [
206
+ 1536,
207
+ 1,
208
+ 4
209
+ ],
210
+ "blocks.1.block.mlp.module.fc1.canon.conv.bias": [
211
+ 1536
212
+ ],
213
+ "blocks.1.block.mlp.module.fc1.canon.conv.weight": [
214
+ 1536,
215
+ 1,
216
+ 4,
217
+ 4
218
+ ],
219
+ "blocks.1.block.mlp.module.fc1.fc1.bias": [
220
+ 1536
221
+ ],
222
+ "blocks.1.block.mlp.module.fc1.fc1.weight": [
223
+ 1536,
224
+ 384
225
+ ],
226
+ "blocks.1.block.mlp.module.fc2.bias": [
227
+ 384
228
+ ],
229
+ "blocks.1.block.mlp.module.fc2.weight": [
230
+ 384,
231
+ 1536
232
+ ],
233
+ "blocks.1.block.norm1.bias": [
234
+ 384
235
+ ],
236
+ "blocks.1.block.norm1.weight": [
237
+ 384
238
+ ],
239
+ "blocks.1.block.norm2.bias": [
240
+ 384
241
+ ],
242
+ "blocks.1.block.norm2.weight": [
243
+ 384
244
+ ],
245
+ "blocks.10.block.attn.canon._fallback.conv.bias": [
246
+ 384
247
+ ],
248
+ "blocks.10.block.attn.canon._fallback.conv.weight": [
249
+ 384,
250
+ 1,
251
+ 4
252
+ ],
253
+ "blocks.10.block.attn.canon.conv.bias": [
254
+ 384
255
+ ],
256
+ "blocks.10.block.attn.canon.conv.weight": [
257
+ 384,
258
+ 1,
259
+ 4,
260
+ 4
261
+ ],
262
+ "blocks.10.block.attn.module.proj.0.bias": [
263
+ 384
264
+ ],
265
+ "blocks.10.block.attn.module.proj.0.weight": [
266
+ 384,
267
+ 384
268
+ ],
269
+ "blocks.10.block.attn.module.proj.1._fallback.conv.bias": [
270
+ 384
271
+ ],
272
+ "blocks.10.block.attn.module.proj.1._fallback.conv.weight": [
273
+ 384,
274
+ 1,
275
+ 4
276
+ ],
277
+ "blocks.10.block.attn.module.proj.1.conv.bias": [
278
+ 384
279
+ ],
280
+ "blocks.10.block.attn.module.proj.1.conv.weight": [
281
+ 384,
282
+ 1,
283
+ 4,
284
+ 4
285
+ ],
286
+ "blocks.10.block.attn.module.qkv.bias": [
287
+ 1152
288
+ ],
289
+ "blocks.10.block.attn.module.qkv.weight": [
290
+ 1152,
291
+ 384
292
+ ],
293
+ "blocks.10.block.mlp.canon._fallback.conv.bias": [
294
+ 384
295
+ ],
296
+ "blocks.10.block.mlp.canon._fallback.conv.weight": [
297
+ 384,
298
+ 1,
299
+ 4
300
+ ],
301
+ "blocks.10.block.mlp.canon.conv.bias": [
302
+ 384
303
+ ],
304
+ "blocks.10.block.mlp.canon.conv.weight": [
305
+ 384,
306
+ 1,
307
+ 4,
308
+ 4
309
+ ],
310
+ "blocks.10.block.mlp.module.fc1.canon._fallback.conv.bias": [
311
+ 1536
312
+ ],
313
+ "blocks.10.block.mlp.module.fc1.canon._fallback.conv.weight": [
314
+ 1536,
315
+ 1,
316
+ 4
317
+ ],
318
+ "blocks.10.block.mlp.module.fc1.canon.conv.bias": [
319
+ 1536
320
+ ],
321
+ "blocks.10.block.mlp.module.fc1.canon.conv.weight": [
322
+ 1536,
323
+ 1,
324
+ 4,
325
+ 4
326
+ ],
327
+ "blocks.10.block.mlp.module.fc1.fc1.bias": [
328
+ 1536
329
+ ],
330
+ "blocks.10.block.mlp.module.fc1.fc1.weight": [
331
+ 1536,
332
+ 384
333
+ ],
334
+ "blocks.10.block.mlp.module.fc2.bias": [
335
+ 384
336
+ ],
337
+ "blocks.10.block.mlp.module.fc2.weight": [
338
+ 384,
339
+ 1536
340
+ ],
341
+ "blocks.10.block.norm1.bias": [
342
+ 384
343
+ ],
344
+ "blocks.10.block.norm1.weight": [
345
+ 384
346
+ ],
347
+ "blocks.10.block.norm2.bias": [
348
+ 384
349
+ ],
350
+ "blocks.10.block.norm2.weight": [
351
+ 384
352
+ ],
353
+ "blocks.11.block.attn.canon._fallback.conv.bias": [
354
+ 384
355
+ ],
356
+ "blocks.11.block.attn.canon._fallback.conv.weight": [
357
+ 384,
358
+ 1,
359
+ 4
360
+ ],
361
+ "blocks.11.block.attn.canon.conv.bias": [
362
+ 384
363
+ ],
364
+ "blocks.11.block.attn.canon.conv.weight": [
365
+ 384,
366
+ 1,
367
+ 4,
368
+ 4
369
+ ],
370
+ "blocks.11.block.attn.module.proj.0.bias": [
371
+ 384
372
+ ],
373
+ "blocks.11.block.attn.module.proj.0.weight": [
374
+ 384,
375
+ 384
376
+ ],
377
+ "blocks.11.block.attn.module.proj.1._fallback.conv.bias": [
378
+ 384
379
+ ],
380
+ "blocks.11.block.attn.module.proj.1._fallback.conv.weight": [
381
+ 384,
382
+ 1,
383
+ 4
384
+ ],
385
+ "blocks.11.block.attn.module.proj.1.conv.bias": [
386
+ 384
387
+ ],
388
+ "blocks.11.block.attn.module.proj.1.conv.weight": [
389
+ 384,
390
+ 1,
391
+ 4,
392
+ 4
393
+ ],
394
+ "blocks.11.block.attn.module.qkv.bias": [
395
+ 1152
396
+ ],
397
+ "blocks.11.block.attn.module.qkv.weight": [
398
+ 1152,
399
+ 384
400
+ ],
401
+ "blocks.11.block.mlp.canon._fallback.conv.bias": [
402
+ 384
403
+ ],
404
+ "blocks.11.block.mlp.canon._fallback.conv.weight": [
405
+ 384,
406
+ 1,
407
+ 4
408
+ ],
409
+ "blocks.11.block.mlp.canon.conv.bias": [
410
+ 384
411
+ ],
412
+ "blocks.11.block.mlp.canon.conv.weight": [
413
+ 384,
414
+ 1,
415
+ 4,
416
+ 4
417
+ ],
418
+ "blocks.11.block.mlp.module.fc1.canon._fallback.conv.bias": [
419
+ 1536
420
+ ],
421
+ "blocks.11.block.mlp.module.fc1.canon._fallback.conv.weight": [
422
+ 1536,
423
+ 1,
424
+ 4
425
+ ],
426
+ "blocks.11.block.mlp.module.fc1.canon.conv.bias": [
427
+ 1536
428
+ ],
429
+ "blocks.11.block.mlp.module.fc1.canon.conv.weight": [
430
+ 1536,
431
+ 1,
432
+ 4,
433
+ 4
434
+ ],
435
+ "blocks.11.block.mlp.module.fc1.fc1.bias": [
436
+ 1536
437
+ ],
438
+ "blocks.11.block.mlp.module.fc1.fc1.weight": [
439
+ 1536,
440
+ 384
441
+ ],
442
+ "blocks.11.block.mlp.module.fc2.bias": [
443
+ 384
444
+ ],
445
+ "blocks.11.block.mlp.module.fc2.weight": [
446
+ 384,
447
+ 1536
448
+ ],
449
+ "blocks.11.block.norm1.bias": [
450
+ 384
451
+ ],
452
+ "blocks.11.block.norm1.weight": [
453
+ 384
454
+ ],
455
+ "blocks.11.block.norm2.bias": [
456
+ 384
457
+ ],
458
+ "blocks.11.block.norm2.weight": [
459
+ 384
460
+ ],
461
+ "blocks.2.block.attn.canon._fallback.conv.bias": [
462
+ 384
463
+ ],
464
+ "blocks.2.block.attn.canon._fallback.conv.weight": [
465
+ 384,
466
+ 1,
467
+ 4
468
+ ],
469
+ "blocks.2.block.attn.canon.conv.bias": [
470
+ 384
471
+ ],
472
+ "blocks.2.block.attn.canon.conv.weight": [
473
+ 384,
474
+ 1,
475
+ 4,
476
+ 4
477
+ ],
478
+ "blocks.2.block.attn.module.proj.0.bias": [
479
+ 384
480
+ ],
481
+ "blocks.2.block.attn.module.proj.0.weight": [
482
+ 384,
483
+ 384
484
+ ],
485
+ "blocks.2.block.attn.module.proj.1._fallback.conv.bias": [
486
+ 384
487
+ ],
488
+ "blocks.2.block.attn.module.proj.1._fallback.conv.weight": [
489
+ 384,
490
+ 1,
491
+ 4
492
+ ],
493
+ "blocks.2.block.attn.module.proj.1.conv.bias": [
494
+ 384
495
+ ],
496
+ "blocks.2.block.attn.module.proj.1.conv.weight": [
497
+ 384,
498
+ 1,
499
+ 4,
500
+ 4
501
+ ],
502
+ "blocks.2.block.attn.module.qkv.bias": [
503
+ 1152
504
+ ],
505
+ "blocks.2.block.attn.module.qkv.weight": [
506
+ 1152,
507
+ 384
508
+ ],
509
+ "blocks.2.block.mlp.canon._fallback.conv.bias": [
510
+ 384
511
+ ],
512
+ "blocks.2.block.mlp.canon._fallback.conv.weight": [
513
+ 384,
514
+ 1,
515
+ 4
516
+ ],
517
+ "blocks.2.block.mlp.canon.conv.bias": [
518
+ 384
519
+ ],
520
+ "blocks.2.block.mlp.canon.conv.weight": [
521
+ 384,
522
+ 1,
523
+ 4,
524
+ 4
525
+ ],
526
+ "blocks.2.block.mlp.module.fc1.canon._fallback.conv.bias": [
527
+ 1536
528
+ ],
529
+ "blocks.2.block.mlp.module.fc1.canon._fallback.conv.weight": [
530
+ 1536,
531
+ 1,
532
+ 4
533
+ ],
534
+ "blocks.2.block.mlp.module.fc1.canon.conv.bias": [
535
+ 1536
536
+ ],
537
+ "blocks.2.block.mlp.module.fc1.canon.conv.weight": [
538
+ 1536,
539
+ 1,
540
+ 4,
541
+ 4
542
+ ],
543
+ "blocks.2.block.mlp.module.fc1.fc1.bias": [
544
+ 1536
545
+ ],
546
+ "blocks.2.block.mlp.module.fc1.fc1.weight": [
547
+ 1536,
548
+ 384
549
+ ],
550
+ "blocks.2.block.mlp.module.fc2.bias": [
551
+ 384
552
+ ],
553
+ "blocks.2.block.mlp.module.fc2.weight": [
554
+ 384,
555
+ 1536
556
+ ],
557
+ "blocks.2.block.norm1.bias": [
558
+ 384
559
+ ],
560
+ "blocks.2.block.norm1.weight": [
561
+ 384
562
+ ],
563
+ "blocks.2.block.norm2.bias": [
564
+ 384
565
+ ],
566
+ "blocks.2.block.norm2.weight": [
567
+ 384
568
+ ],
569
+ "blocks.3.block.attn.canon._fallback.conv.bias": [
570
+ 384
571
+ ],
572
+ "blocks.3.block.attn.canon._fallback.conv.weight": [
573
+ 384,
574
+ 1,
575
+ 4
576
+ ],
577
+ "blocks.3.block.attn.canon.conv.bias": [
578
+ 384
579
+ ],
580
+ "blocks.3.block.attn.canon.conv.weight": [
581
+ 384,
582
+ 1,
583
+ 4,
584
+ 4
585
+ ],
586
+ "blocks.3.block.attn.module.proj.0.bias": [
587
+ 384
588
+ ],
589
+ "blocks.3.block.attn.module.proj.0.weight": [
590
+ 384,
591
+ 384
592
+ ],
593
+ "blocks.3.block.attn.module.proj.1._fallback.conv.bias": [
594
+ 384
595
+ ],
596
+ "blocks.3.block.attn.module.proj.1._fallback.conv.weight": [
597
+ 384,
598
+ 1,
599
+ 4
600
+ ],
601
+ "blocks.3.block.attn.module.proj.1.conv.bias": [
602
+ 384
603
+ ],
604
+ "blocks.3.block.attn.module.proj.1.conv.weight": [
605
+ 384,
606
+ 1,
607
+ 4,
608
+ 4
609
+ ],
610
+ "blocks.3.block.attn.module.qkv.bias": [
611
+ 1152
612
+ ],
613
+ "blocks.3.block.attn.module.qkv.weight": [
614
+ 1152,
615
+ 384
616
+ ],
617
+ "blocks.3.block.mlp.canon._fallback.conv.bias": [
618
+ 384
619
+ ],
620
+ "blocks.3.block.mlp.canon._fallback.conv.weight": [
621
+ 384,
622
+ 1,
623
+ 4
624
+ ],
625
+ "blocks.3.block.mlp.canon.conv.bias": [
626
+ 384
627
+ ],
628
+ "blocks.3.block.mlp.canon.conv.weight": [
629
+ 384,
630
+ 1,
631
+ 4,
632
+ 4
633
+ ],
634
+ "blocks.3.block.mlp.module.fc1.canon._fallback.conv.bias": [
635
+ 1536
636
+ ],
637
+ "blocks.3.block.mlp.module.fc1.canon._fallback.conv.weight": [
638
+ 1536,
639
+ 1,
640
+ 4
641
+ ],
642
+ "blocks.3.block.mlp.module.fc1.canon.conv.bias": [
643
+ 1536
644
+ ],
645
+ "blocks.3.block.mlp.module.fc1.canon.conv.weight": [
646
+ 1536,
647
+ 1,
648
+ 4,
649
+ 4
650
+ ],
651
+ "blocks.3.block.mlp.module.fc1.fc1.bias": [
652
+ 1536
653
+ ],
654
+ "blocks.3.block.mlp.module.fc1.fc1.weight": [
655
+ 1536,
656
+ 384
657
+ ],
658
+ "blocks.3.block.mlp.module.fc2.bias": [
659
+ 384
660
+ ],
661
+ "blocks.3.block.mlp.module.fc2.weight": [
662
+ 384,
663
+ 1536
664
+ ],
665
+ "blocks.3.block.norm1.bias": [
666
+ 384
667
+ ],
668
+ "blocks.3.block.norm1.weight": [
669
+ 384
670
+ ],
671
+ "blocks.3.block.norm2.bias": [
672
+ 384
673
+ ],
674
+ "blocks.3.block.norm2.weight": [
675
+ 384
676
+ ],
677
+ "blocks.4.block.attn.canon._fallback.conv.bias": [
678
+ 384
679
+ ],
680
+ "blocks.4.block.attn.canon._fallback.conv.weight": [
681
+ 384,
682
+ 1,
683
+ 4
684
+ ],
685
+ "blocks.4.block.attn.canon.conv.bias": [
686
+ 384
687
+ ],
688
+ "blocks.4.block.attn.canon.conv.weight": [
689
+ 384,
690
+ 1,
691
+ 4,
692
+ 4
693
+ ],
694
+ "blocks.4.block.attn.module.proj.0.bias": [
695
+ 384
696
+ ],
697
+ "blocks.4.block.attn.module.proj.0.weight": [
698
+ 384,
699
+ 384
700
+ ],
701
+ "blocks.4.block.attn.module.proj.1._fallback.conv.bias": [
702
+ 384
703
+ ],
704
+ "blocks.4.block.attn.module.proj.1._fallback.conv.weight": [
705
+ 384,
706
+ 1,
707
+ 4
708
+ ],
709
+ "blocks.4.block.attn.module.proj.1.conv.bias": [
710
+ 384
711
+ ],
712
+ "blocks.4.block.attn.module.proj.1.conv.weight": [
713
+ 384,
714
+ 1,
715
+ 4,
716
+ 4
717
+ ],
718
+ "blocks.4.block.attn.module.qkv.bias": [
719
+ 1152
720
+ ],
721
+ "blocks.4.block.attn.module.qkv.weight": [
722
+ 1152,
723
+ 384
724
+ ],
725
+ "blocks.4.block.mlp.canon._fallback.conv.bias": [
726
+ 384
727
+ ],
728
+ "blocks.4.block.mlp.canon._fallback.conv.weight": [
729
+ 384,
730
+ 1,
731
+ 4
732
+ ],
733
+ "blocks.4.block.mlp.canon.conv.bias": [
734
+ 384
735
+ ],
736
+ "blocks.4.block.mlp.canon.conv.weight": [
737
+ 384,
738
+ 1,
739
+ 4,
740
+ 4
741
+ ],
742
+ "blocks.4.block.mlp.module.fc1.canon._fallback.conv.bias": [
743
+ 1536
744
+ ],
745
+ "blocks.4.block.mlp.module.fc1.canon._fallback.conv.weight": [
746
+ 1536,
747
+ 1,
748
+ 4
749
+ ],
750
+ "blocks.4.block.mlp.module.fc1.canon.conv.bias": [
751
+ 1536
752
+ ],
753
+ "blocks.4.block.mlp.module.fc1.canon.conv.weight": [
754
+ 1536,
755
+ 1,
756
+ 4,
757
+ 4
758
+ ],
759
+ "blocks.4.block.mlp.module.fc1.fc1.bias": [
760
+ 1536
761
+ ],
762
+ "blocks.4.block.mlp.module.fc1.fc1.weight": [
763
+ 1536,
764
+ 384
765
+ ],
766
+ "blocks.4.block.mlp.module.fc2.bias": [
767
+ 384
768
+ ],
769
+ "blocks.4.block.mlp.module.fc2.weight": [
770
+ 384,
771
+ 1536
772
+ ],
773
+ "blocks.4.block.norm1.bias": [
774
+ 384
775
+ ],
776
+ "blocks.4.block.norm1.weight": [
777
+ 384
778
+ ],
779
+ "blocks.4.block.norm2.bias": [
780
+ 384
781
+ ],
782
+ "blocks.4.block.norm2.weight": [
783
+ 384
784
+ ],
785
+ "blocks.5.block.attn.canon._fallback.conv.bias": [
786
+ 384
787
+ ],
788
+ "blocks.5.block.attn.canon._fallback.conv.weight": [
789
+ 384,
790
+ 1,
791
+ 4
792
+ ],
793
+ "blocks.5.block.attn.canon.conv.bias": [
794
+ 384
795
+ ],
796
+ "blocks.5.block.attn.canon.conv.weight": [
797
+ 384,
798
+ 1,
799
+ 4,
800
+ 4
801
+ ],
802
+ "blocks.5.block.attn.module.proj.0.bias": [
803
+ 384
804
+ ],
805
+ "blocks.5.block.attn.module.proj.0.weight": [
806
+ 384,
807
+ 384
808
+ ],
809
+ "blocks.5.block.attn.module.proj.1._fallback.conv.bias": [
810
+ 384
811
+ ],
812
+ "blocks.5.block.attn.module.proj.1._fallback.conv.weight": [
813
+ 384,
814
+ 1,
815
+ 4
816
+ ],
817
+ "blocks.5.block.attn.module.proj.1.conv.bias": [
818
+ 384
819
+ ],
820
+ "blocks.5.block.attn.module.proj.1.conv.weight": [
821
+ 384,
822
+ 1,
823
+ 4,
824
+ 4
825
+ ],
826
+ "blocks.5.block.attn.module.qkv.bias": [
827
+ 1152
828
+ ],
829
+ "blocks.5.block.attn.module.qkv.weight": [
830
+ 1152,
831
+ 384
832
+ ],
833
+ "blocks.5.block.mlp.canon._fallback.conv.bias": [
834
+ 384
835
+ ],
836
+ "blocks.5.block.mlp.canon._fallback.conv.weight": [
837
+ 384,
838
+ 1,
839
+ 4
840
+ ],
841
+ "blocks.5.block.mlp.canon.conv.bias": [
842
+ 384
843
+ ],
844
+ "blocks.5.block.mlp.canon.conv.weight": [
845
+ 384,
846
+ 1,
847
+ 4,
848
+ 4
849
+ ],
850
+ "blocks.5.block.mlp.module.fc1.canon._fallback.conv.bias": [
851
+ 1536
852
+ ],
853
+ "blocks.5.block.mlp.module.fc1.canon._fallback.conv.weight": [
854
+ 1536,
855
+ 1,
856
+ 4
857
+ ],
858
+ "blocks.5.block.mlp.module.fc1.canon.conv.bias": [
859
+ 1536
860
+ ],
861
+ "blocks.5.block.mlp.module.fc1.canon.conv.weight": [
862
+ 1536,
863
+ 1,
864
+ 4,
865
+ 4
866
+ ],
867
+ "blocks.5.block.mlp.module.fc1.fc1.bias": [
868
+ 1536
869
+ ],
870
+ "blocks.5.block.mlp.module.fc1.fc1.weight": [
871
+ 1536,
872
+ 384
873
+ ],
874
+ "blocks.5.block.mlp.module.fc2.bias": [
875
+ 384
876
+ ],
877
+ "blocks.5.block.mlp.module.fc2.weight": [
878
+ 384,
879
+ 1536
880
+ ],
881
+ "blocks.5.block.norm1.bias": [
882
+ 384
883
+ ],
884
+ "blocks.5.block.norm1.weight": [
885
+ 384
886
+ ],
887
+ "blocks.5.block.norm2.bias": [
888
+ 384
889
+ ],
890
+ "blocks.5.block.norm2.weight": [
891
+ 384
892
+ ],
893
+ "blocks.6.block.attn.canon._fallback.conv.bias": [
894
+ 384
895
+ ],
896
+ "blocks.6.block.attn.canon._fallback.conv.weight": [
897
+ 384,
898
+ 1,
899
+ 4
900
+ ],
901
+ "blocks.6.block.attn.canon.conv.bias": [
902
+ 384
903
+ ],
904
+ "blocks.6.block.attn.canon.conv.weight": [
905
+ 384,
906
+ 1,
907
+ 4,
908
+ 4
909
+ ],
910
+ "blocks.6.block.attn.module.proj.0.bias": [
911
+ 384
912
+ ],
913
+ "blocks.6.block.attn.module.proj.0.weight": [
914
+ 384,
915
+ 384
916
+ ],
917
+ "blocks.6.block.attn.module.proj.1._fallback.conv.bias": [
918
+ 384
919
+ ],
920
+ "blocks.6.block.attn.module.proj.1._fallback.conv.weight": [
921
+ 384,
922
+ 1,
923
+ 4
924
+ ],
925
+ "blocks.6.block.attn.module.proj.1.conv.bias": [
926
+ 384
927
+ ],
928
+ "blocks.6.block.attn.module.proj.1.conv.weight": [
929
+ 384,
930
+ 1,
931
+ 4,
932
+ 4
933
+ ],
934
+ "blocks.6.block.attn.module.qkv.bias": [
935
+ 1152
936
+ ],
937
+ "blocks.6.block.attn.module.qkv.weight": [
938
+ 1152,
939
+ 384
940
+ ],
941
+ "blocks.6.block.mlp.canon._fallback.conv.bias": [
942
+ 384
943
+ ],
944
+ "blocks.6.block.mlp.canon._fallback.conv.weight": [
945
+ 384,
946
+ 1,
947
+ 4
948
+ ],
949
+ "blocks.6.block.mlp.canon.conv.bias": [
950
+ 384
951
+ ],
952
+ "blocks.6.block.mlp.canon.conv.weight": [
953
+ 384,
954
+ 1,
955
+ 4,
956
+ 4
957
+ ],
958
+ "blocks.6.block.mlp.module.fc1.canon._fallback.conv.bias": [
959
+ 1536
960
+ ],
961
+ "blocks.6.block.mlp.module.fc1.canon._fallback.conv.weight": [
962
+ 1536,
963
+ 1,
964
+ 4
965
+ ],
966
+ "blocks.6.block.mlp.module.fc1.canon.conv.bias": [
967
+ 1536
968
+ ],
969
+ "blocks.6.block.mlp.module.fc1.canon.conv.weight": [
970
+ 1536,
971
+ 1,
972
+ 4,
973
+ 4
974
+ ],
975
+ "blocks.6.block.mlp.module.fc1.fc1.bias": [
976
+ 1536
977
+ ],
978
+ "blocks.6.block.mlp.module.fc1.fc1.weight": [
979
+ 1536,
980
+ 384
981
+ ],
982
+ "blocks.6.block.mlp.module.fc2.bias": [
983
+ 384
984
+ ],
985
+ "blocks.6.block.mlp.module.fc2.weight": [
986
+ 384,
987
+ 1536
988
+ ],
989
+ "blocks.6.block.norm1.bias": [
990
+ 384
991
+ ],
992
+ "blocks.6.block.norm1.weight": [
993
+ 384
994
+ ],
995
+ "blocks.6.block.norm2.bias": [
996
+ 384
997
+ ],
998
+ "blocks.6.block.norm2.weight": [
999
+ 384
1000
+ ],
1001
+ "blocks.7.block.attn.canon._fallback.conv.bias": [
1002
+ 384
1003
+ ],
1004
+ "blocks.7.block.attn.canon._fallback.conv.weight": [
1005
+ 384,
1006
+ 1,
1007
+ 4
1008
+ ],
1009
+ "blocks.7.block.attn.canon.conv.bias": [
1010
+ 384
1011
+ ],
1012
+ "blocks.7.block.attn.canon.conv.weight": [
1013
+ 384,
1014
+ 1,
1015
+ 4,
1016
+ 4
1017
+ ],
1018
+ "blocks.7.block.attn.module.proj.0.bias": [
1019
+ 384
1020
+ ],
1021
+ "blocks.7.block.attn.module.proj.0.weight": [
1022
+ 384,
1023
+ 384
1024
+ ],
1025
+ "blocks.7.block.attn.module.proj.1._fallback.conv.bias": [
1026
+ 384
1027
+ ],
1028
+ "blocks.7.block.attn.module.proj.1._fallback.conv.weight": [
1029
+ 384,
1030
+ 1,
1031
+ 4
1032
+ ],
1033
+ "blocks.7.block.attn.module.proj.1.conv.bias": [
1034
+ 384
1035
+ ],
1036
+ "blocks.7.block.attn.module.proj.1.conv.weight": [
1037
+ 384,
1038
+ 1,
1039
+ 4,
1040
+ 4
1041
+ ],
1042
+ "blocks.7.block.attn.module.qkv.bias": [
1043
+ 1152
1044
+ ],
1045
+ "blocks.7.block.attn.module.qkv.weight": [
1046
+ 1152,
1047
+ 384
1048
+ ],
1049
+ "blocks.7.block.mlp.canon._fallback.conv.bias": [
1050
+ 384
1051
+ ],
1052
+ "blocks.7.block.mlp.canon._fallback.conv.weight": [
1053
+ 384,
1054
+ 1,
1055
+ 4
1056
+ ],
1057
+ "blocks.7.block.mlp.canon.conv.bias": [
1058
+ 384
1059
+ ],
1060
+ "blocks.7.block.mlp.canon.conv.weight": [
1061
+ 384,
1062
+ 1,
1063
+ 4,
1064
+ 4
1065
+ ],
1066
+ "blocks.7.block.mlp.module.fc1.canon._fallback.conv.bias": [
1067
+ 1536
1068
+ ],
1069
+ "blocks.7.block.mlp.module.fc1.canon._fallback.conv.weight": [
1070
+ 1536,
1071
+ 1,
1072
+ 4
1073
+ ],
1074
+ "blocks.7.block.mlp.module.fc1.canon.conv.bias": [
1075
+ 1536
1076
+ ],
1077
+ "blocks.7.block.mlp.module.fc1.canon.conv.weight": [
1078
+ 1536,
1079
+ 1,
1080
+ 4,
1081
+ 4
1082
+ ],
1083
+ "blocks.7.block.mlp.module.fc1.fc1.bias": [
1084
+ 1536
1085
+ ],
1086
+ "blocks.7.block.mlp.module.fc1.fc1.weight": [
1087
+ 1536,
1088
+ 384
1089
+ ],
1090
+ "blocks.7.block.mlp.module.fc2.bias": [
1091
+ 384
1092
+ ],
1093
+ "blocks.7.block.mlp.module.fc2.weight": [
1094
+ 384,
1095
+ 1536
1096
+ ],
1097
+ "blocks.7.block.norm1.bias": [
1098
+ 384
1099
+ ],
1100
+ "blocks.7.block.norm1.weight": [
1101
+ 384
1102
+ ],
1103
+ "blocks.7.block.norm2.bias": [
1104
+ 384
1105
+ ],
1106
+ "blocks.7.block.norm2.weight": [
1107
+ 384
1108
+ ],
1109
+ "blocks.8.block.attn.canon._fallback.conv.bias": [
1110
+ 384
1111
+ ],
1112
+ "blocks.8.block.attn.canon._fallback.conv.weight": [
1113
+ 384,
1114
+ 1,
1115
+ 4
1116
+ ],
1117
+ "blocks.8.block.attn.canon.conv.bias": [
1118
+ 384
1119
+ ],
1120
+ "blocks.8.block.attn.canon.conv.weight": [
1121
+ 384,
1122
+ 1,
1123
+ 4,
1124
+ 4
1125
+ ],
1126
+ "blocks.8.block.attn.module.proj.0.bias": [
1127
+ 384
1128
+ ],
1129
+ "blocks.8.block.attn.module.proj.0.weight": [
1130
+ 384,
1131
+ 384
1132
+ ],
1133
+ "blocks.8.block.attn.module.proj.1._fallback.conv.bias": [
1134
+ 384
1135
+ ],
1136
+ "blocks.8.block.attn.module.proj.1._fallback.conv.weight": [
1137
+ 384,
1138
+ 1,
1139
+ 4
1140
+ ],
1141
+ "blocks.8.block.attn.module.proj.1.conv.bias": [
1142
+ 384
1143
+ ],
1144
+ "blocks.8.block.attn.module.proj.1.conv.weight": [
1145
+ 384,
1146
+ 1,
1147
+ 4,
1148
+ 4
1149
+ ],
1150
+ "blocks.8.block.attn.module.qkv.bias": [
1151
+ 1152
1152
+ ],
1153
+ "blocks.8.block.attn.module.qkv.weight": [
1154
+ 1152,
1155
+ 384
1156
+ ],
1157
+ "blocks.8.block.mlp.canon._fallback.conv.bias": [
1158
+ 384
1159
+ ],
1160
+ "blocks.8.block.mlp.canon._fallback.conv.weight": [
1161
+ 384,
1162
+ 1,
1163
+ 4
1164
+ ],
1165
+ "blocks.8.block.mlp.canon.conv.bias": [
1166
+ 384
1167
+ ],
1168
+ "blocks.8.block.mlp.canon.conv.weight": [
1169
+ 384,
1170
+ 1,
1171
+ 4,
1172
+ 4
1173
+ ],
1174
+ "blocks.8.block.mlp.module.fc1.canon._fallback.conv.bias": [
1175
+ 1536
1176
+ ],
1177
+ "blocks.8.block.mlp.module.fc1.canon._fallback.conv.weight": [
1178
+ 1536,
1179
+ 1,
1180
+ 4
1181
+ ],
1182
+ "blocks.8.block.mlp.module.fc1.canon.conv.bias": [
1183
+ 1536
1184
+ ],
1185
+ "blocks.8.block.mlp.module.fc1.canon.conv.weight": [
1186
+ 1536,
1187
+ 1,
1188
+ 4,
1189
+ 4
1190
+ ],
1191
+ "blocks.8.block.mlp.module.fc1.fc1.bias": [
1192
+ 1536
1193
+ ],
1194
+ "blocks.8.block.mlp.module.fc1.fc1.weight": [
1195
+ 1536,
1196
+ 384
1197
+ ],
1198
+ "blocks.8.block.mlp.module.fc2.bias": [
1199
+ 384
1200
+ ],
1201
+ "blocks.8.block.mlp.module.fc2.weight": [
1202
+ 384,
1203
+ 1536
1204
+ ],
1205
+ "blocks.8.block.norm1.bias": [
1206
+ 384
1207
+ ],
1208
+ "blocks.8.block.norm1.weight": [
1209
+ 384
1210
+ ],
1211
+ "blocks.8.block.norm2.bias": [
1212
+ 384
1213
+ ],
1214
+ "blocks.8.block.norm2.weight": [
1215
+ 384
1216
+ ],
1217
+ "blocks.9.block.attn.canon._fallback.conv.bias": [
1218
+ 384
1219
+ ],
1220
+ "blocks.9.block.attn.canon._fallback.conv.weight": [
1221
+ 384,
1222
+ 1,
1223
+ 4
1224
+ ],
1225
+ "blocks.9.block.attn.canon.conv.bias": [
1226
+ 384
1227
+ ],
1228
+ "blocks.9.block.attn.canon.conv.weight": [
1229
+ 384,
1230
+ 1,
1231
+ 4,
1232
+ 4
1233
+ ],
1234
+ "blocks.9.block.attn.module.proj.0.bias": [
1235
+ 384
1236
+ ],
1237
+ "blocks.9.block.attn.module.proj.0.weight": [
1238
+ 384,
1239
+ 384
1240
+ ],
1241
+ "blocks.9.block.attn.module.proj.1._fallback.conv.bias": [
1242
+ 384
1243
+ ],
1244
+ "blocks.9.block.attn.module.proj.1._fallback.conv.weight": [
1245
+ 384,
1246
+ 1,
1247
+ 4
1248
+ ],
1249
+ "blocks.9.block.attn.module.proj.1.conv.bias": [
1250
+ 384
1251
+ ],
1252
+ "blocks.9.block.attn.module.proj.1.conv.weight": [
1253
+ 384,
1254
+ 1,
1255
+ 4,
1256
+ 4
1257
+ ],
1258
+ "blocks.9.block.attn.module.qkv.bias": [
1259
+ 1152
1260
+ ],
1261
+ "blocks.9.block.attn.module.qkv.weight": [
1262
+ 1152,
1263
+ 384
1264
+ ],
1265
+ "blocks.9.block.mlp.canon._fallback.conv.bias": [
1266
+ 384
1267
+ ],
1268
+ "blocks.9.block.mlp.canon._fallback.conv.weight": [
1269
+ 384,
1270
+ 1,
1271
+ 4
1272
+ ],
1273
+ "blocks.9.block.mlp.canon.conv.bias": [
1274
+ 384
1275
+ ],
1276
+ "blocks.9.block.mlp.canon.conv.weight": [
1277
+ 384,
1278
+ 1,
1279
+ 4,
1280
+ 4
1281
+ ],
1282
+ "blocks.9.block.mlp.module.fc1.canon._fallback.conv.bias": [
1283
+ 1536
1284
+ ],
1285
+ "blocks.9.block.mlp.module.fc1.canon._fallback.conv.weight": [
1286
+ 1536,
1287
+ 1,
1288
+ 4
1289
+ ],
1290
+ "blocks.9.block.mlp.module.fc1.canon.conv.bias": [
1291
+ 1536
1292
+ ],
1293
+ "blocks.9.block.mlp.module.fc1.canon.conv.weight": [
1294
+ 1536,
1295
+ 1,
1296
+ 4,
1297
+ 4
1298
+ ],
1299
+ "blocks.9.block.mlp.module.fc1.fc1.bias": [
1300
+ 1536
1301
+ ],
1302
+ "blocks.9.block.mlp.module.fc1.fc1.weight": [
1303
+ 1536,
1304
+ 384
1305
+ ],
1306
+ "blocks.9.block.mlp.module.fc2.bias": [
1307
+ 384
1308
+ ],
1309
+ "blocks.9.block.mlp.module.fc2.weight": [
1310
+ 384,
1311
+ 1536
1312
+ ],
1313
+ "blocks.9.block.norm1.bias": [
1314
+ 384
1315
+ ],
1316
+ "blocks.9.block.norm1.weight": [
1317
+ 384
1318
+ ],
1319
+ "blocks.9.block.norm2.bias": [
1320
+ 384
1321
+ ],
1322
+ "blocks.9.block.norm2.weight": [
1323
+ 384
1324
+ ],
1325
+ "cls_token": [
1326
+ 1,
1327
+ 1,
1328
+ 384
1329
+ ],
1330
+ "fc_norm.bias": [
1331
+ 384
1332
+ ],
1333
+ "fc_norm.weight": [
1334
+ 384
1335
+ ],
1336
+ "patch_embed.proj.bias": [
1337
+ 384
1338
+ ],
1339
+ "patch_embed.proj.weight": [
1340
+ 384,
1341
+ 1,
1342
+ 16,
1343
+ 16
1344
+ ],
1345
+ "pos_embed": [
1346
+ 1,
1347
+ 97,
1348
+ 384
1349
+ ]
1350
+ },
1351
+ "student_state_dict_size": 342,
1352
+ "total_parameters": 22337408
1353
+ }
modeling_hear_canon.py ADDED
@@ -0,0 +1,707 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """PyTorch model definition for the distilled HeAR ViT-S + Canon model."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import math
6
+ from typing import Optional, Tuple
7
+
8
+ import torch
9
+ import torch.nn as nn
10
+ import torch.nn.functional as F
11
+ from transformers import PreTrainedModel
12
+ from transformers.modeling_outputs import BaseModelOutputWithPooling
13
+
14
+ try:
15
+ from .configuration_hear_canon import HearCanonViTConfig
16
+ except ImportError: # pragma: no cover
17
+ from configuration_hear_canon import HearCanonViTConfig
18
+
19
+
20
+ _MEL_WEIGHT_CACHE: dict[tuple, torch.Tensor] = {}
21
+ _WINDOW_CACHE: dict[tuple, torch.Tensor] = {}
22
+
23
+
24
+ def _enclosing_power_of_two(value: int) -> int:
25
+ return int(2 ** math.ceil(math.log2(value))) if value > 0 else 1
26
+
27
+
28
+ def _compute_stft(
29
+ signals: torch.Tensor,
30
+ frame_length: int,
31
+ frame_step: int,
32
+ fft_length: int | None = None,
33
+ window_fn=torch.hann_window,
34
+ pad_end: bool = True,
35
+ ) -> torch.Tensor:
36
+ if signals.ndim < 1:
37
+ raise ValueError(f"Input signals must have rank at least 1, got rank {signals.ndim}.")
38
+ if fft_length is None:
39
+ fft_length = _enclosing_power_of_two(frame_length)
40
+
41
+ if pad_end:
42
+ n_frames = math.ceil(signals.shape[-1] / frame_step) if signals.shape[-1] > 0 else 0
43
+ padded_length = max(0, (n_frames - 1) * frame_step + frame_length) if n_frames > 0 else frame_length
44
+ padding_needed = max(0, padded_length - signals.shape[-1])
45
+ if padding_needed > 0:
46
+ signals = F.pad(signals, (0, padding_needed))
47
+
48
+ framed_signals = signals.unfold(-1, frame_length, frame_step)
49
+ if framed_signals.shape[-2] == 0:
50
+ return torch.empty(
51
+ *signals.shape[:-1],
52
+ 0,
53
+ fft_length // 2 + 1,
54
+ dtype=torch.complex64,
55
+ device=signals.device,
56
+ )
57
+
58
+ if window_fn is not None:
59
+ if window_fn is torch.hann_window:
60
+ key = (str(framed_signals.device), framed_signals.dtype, int(frame_length))
61
+ window = _WINDOW_CACHE.get(key)
62
+ if window is None:
63
+ window = torch.hann_window(frame_length, device=framed_signals.device, dtype=framed_signals.dtype)
64
+ _WINDOW_CACHE[key] = window
65
+ else:
66
+ window = window_fn(frame_length).to(framed_signals.device).to(framed_signals.dtype)
67
+ framed_signals = framed_signals * window
68
+
69
+ return torch.fft.rfft(framed_signals, n=fft_length, dim=-1)
70
+
71
+
72
+ def _ema(
73
+ inputs: torch.Tensor,
74
+ num_channels: int,
75
+ smooth_coef: float,
76
+ initial_state: torch.Tensor | None = None,
77
+ ) -> torch.Tensor:
78
+ batch_size, timesteps, _ = inputs.shape
79
+
80
+ if initial_state is None:
81
+ ema_state = torch.zeros((batch_size, num_channels), dtype=inputs.dtype, device=inputs.device)
82
+ else:
83
+ ema_state = initial_state
84
+
85
+ gain_in = float(smooth_coef)
86
+ gain_rec = float(1.0 - smooth_coef)
87
+ output_sequence: list[torch.Tensor] = []
88
+
89
+ start = 1 if initial_state is not None else 0
90
+ if start:
91
+ output_sequence.append(ema_state)
92
+ for t in range(start, timesteps):
93
+ current_input = inputs[:, t, :]
94
+ ema_state = (current_input * gain_in) + (ema_state * gain_rec)
95
+ output_sequence.append(ema_state)
96
+
97
+ return torch.stack(output_sequence, dim=1)
98
+
99
+
100
+ def _pcen_function(
101
+ inputs: torch.Tensor,
102
+ num_channels: int = 128,
103
+ alpha: float = 0.8,
104
+ smooth_coef: float = 0.04,
105
+ delta: float = 2.0,
106
+ root: float = 2.0,
107
+ floor: float = 1e-8,
108
+ ) -> torch.Tensor:
109
+ alpha_param = torch.full((num_channels,), float(alpha), device=inputs.device, dtype=inputs.dtype)
110
+ delta_param = torch.full((num_channels,), float(delta), device=inputs.device, dtype=inputs.dtype)
111
+ root_param = torch.full((num_channels,), float(root), device=inputs.device, dtype=inputs.dtype)
112
+
113
+ alpha_param = torch.minimum(alpha_param, torch.ones_like(alpha_param))
114
+ root_param = torch.maximum(root_param, torch.ones_like(root_param))
115
+ ema_smoother = _ema(
116
+ inputs,
117
+ num_channels=num_channels,
118
+ smooth_coef=smooth_coef,
119
+ initial_state=inputs[:, 0] if inputs.ndim > 1 else None,
120
+ )
121
+
122
+ one_over_root = 1.0 / root_param
123
+ output = (inputs / (floor + ema_smoother) ** alpha_param + delta_param) ** one_over_root - delta_param**one_over_root
124
+ return output
125
+
126
+
127
+ def _hertz_to_mel(frequencies_hertz: torch.Tensor) -> torch.Tensor:
128
+ return 2595.0 * torch.log10(1.0 + frequencies_hertz / 700.0)
129
+
130
+
131
+ def _linear_to_mel_weight_matrix(
132
+ device: torch.device,
133
+ num_mel_bins: int = 128,
134
+ num_spectrogram_bins: int = 201,
135
+ sample_rate: float = 16000,
136
+ lower_edge_hertz: float = 0.0,
137
+ upper_edge_hertz: float = 8000.0,
138
+ dtype: torch.dtype = torch.float32,
139
+ ) -> torch.Tensor:
140
+ cache_key = (
141
+ str(device),
142
+ dtype,
143
+ int(num_mel_bins),
144
+ int(num_spectrogram_bins),
145
+ float(sample_rate),
146
+ float(lower_edge_hertz),
147
+ float(upper_edge_hertz),
148
+ )
149
+ cached = _MEL_WEIGHT_CACHE.get(cache_key)
150
+ if cached is not None:
151
+ return cached
152
+
153
+ sample_rate_tensor = torch.tensor(sample_rate, dtype=dtype)
154
+ lower_edge_hertz_tensor = torch.tensor(lower_edge_hertz, dtype=dtype, device=device)
155
+ upper_edge_hertz_tensor = torch.tensor(upper_edge_hertz, dtype=dtype, device=device)
156
+ zero = torch.tensor(0.0, dtype=dtype, device=device)
157
+
158
+ bands_to_zero = 1
159
+ nyquist_hertz = sample_rate_tensor / 2.0
160
+ linear_frequencies = torch.linspace(zero, nyquist_hertz, num_spectrogram_bins, dtype=dtype, device=device)[bands_to_zero:]
161
+ spectrogram_bins_mel = _hertz_to_mel(linear_frequencies).unsqueeze(1)
162
+
163
+ band_edges_mel = torch.linspace(
164
+ _hertz_to_mel(lower_edge_hertz_tensor),
165
+ _hertz_to_mel(upper_edge_hertz_tensor),
166
+ num_mel_bins + 2,
167
+ dtype=dtype,
168
+ device=device,
169
+ )
170
+ band_edges_mel = band_edges_mel.unfold(0, 3, 1)
171
+
172
+ lower_edge_mel = band_edges_mel[:, 0].unsqueeze(0)
173
+ center_mel = band_edges_mel[:, 1].unsqueeze(0)
174
+ upper_edge_mel = band_edges_mel[:, 2].unsqueeze(0)
175
+
176
+ lower_slopes = (spectrogram_bins_mel - lower_edge_mel) / (center_mel - lower_edge_mel)
177
+ upper_slopes = (upper_edge_mel - spectrogram_bins_mel) / (upper_edge_mel - center_mel)
178
+
179
+ mel_weights_matrix = torch.maximum(zero, torch.minimum(lower_slopes, upper_slopes))
180
+ mel_weights_matrix = F.pad(mel_weights_matrix, (0, 0, bands_to_zero, 0), mode="constant", value=0.0)
181
+
182
+ _MEL_WEIGHT_CACHE[cache_key] = mel_weights_matrix
183
+ return mel_weights_matrix
184
+
185
+
186
+ def _mel_pcen(x: torch.Tensor) -> torch.Tensor:
187
+ x = x.float()
188
+ x = x - torch.min(x)
189
+ x = x / (torch.max(x) + 1e-8)
190
+ x = (x * 2) - 1
191
+
192
+ frame_length = 16 * 25
193
+ frame_step = 160
194
+
195
+ stft = _compute_stft(
196
+ x,
197
+ frame_length=frame_length,
198
+ fft_length=frame_length,
199
+ frame_step=frame_step,
200
+ window_fn=torch.hann_window,
201
+ pad_end=True,
202
+ )
203
+ spectrograms = torch.square(torch.abs(stft))
204
+
205
+ mel_transform = _linear_to_mel_weight_matrix(x.device)
206
+ mel_spectrograms = torch.matmul(spectrograms, mel_transform)
207
+ return _pcen_function(mel_spectrograms)
208
+
209
+
210
+ def _torch_resize_bilinear_tf_compat(images: torch.Tensor, size: Tuple[int, int]) -> torch.Tensor:
211
+ original_dims = images.dim()
212
+ new_height, new_width = size
213
+ if original_dims not in (3, 4):
214
+ raise ValueError("Input tensor must be 3D [C, H, W] or 4D [B, C, H, W].")
215
+
216
+ images = images.to(torch.float32)
217
+ was_3d = original_dims == 3
218
+ if was_3d:
219
+ images = images.unsqueeze(0)
220
+
221
+ resized = F.interpolate(
222
+ images,
223
+ size=(new_height, new_width),
224
+ mode="bilinear",
225
+ align_corners=False,
226
+ antialias=False,
227
+ )
228
+
229
+ if was_3d:
230
+ resized = resized.squeeze(0)
231
+ return resized
232
+
233
+
234
+ def preprocess_audio(
235
+ audio: torch.Tensor,
236
+ *,
237
+ clip_samples: int = 32000,
238
+ target_size: Tuple[int, int] = (192, 128),
239
+ ) -> torch.Tensor:
240
+ """Convert raw 16 kHz waveforms to model-ready mel/PCEN spectrograms."""
241
+ if audio.ndim == 1:
242
+ audio = audio.unsqueeze(0)
243
+ if audio.ndim != 2:
244
+ raise ValueError(f"Input audio must have rank 2 [B, samples], got rank {audio.ndim}.")
245
+
246
+ if audio.shape[1] < clip_samples:
247
+ n = clip_samples - audio.shape[1]
248
+ audio = F.pad(audio, pad=(0, n), mode="constant", value=0)
249
+ elif audio.shape[1] > clip_samples:
250
+ audio = audio[:, :clip_samples]
251
+
252
+ spectrogram = _mel_pcen(audio)
253
+ spectrogram = torch.unsqueeze(spectrogram, dim=1)
254
+ return _torch_resize_bilinear_tf_compat(spectrogram, size=target_size)
255
+
256
+
257
+ def _disable_positional_embeddings(model: nn.Module) -> None:
258
+ if not hasattr(model, "pos_embed"):
259
+ return
260
+ pos = getattr(model, "pos_embed")
261
+ if pos is None:
262
+ return
263
+ if isinstance(pos, nn.Parameter):
264
+ with torch.no_grad():
265
+ new_pos = torch.zeros_like(pos)
266
+ model.pos_embed = nn.Parameter(new_pos, requires_grad=False)
267
+ return
268
+ if torch.is_tensor(pos):
269
+ with torch.no_grad():
270
+ pos.zero_()
271
+
272
+
273
+ class CanonLayer(nn.Module):
274
+ def __init__(self, dim: int, kernel_size: int = 4, causal: bool = False) -> None:
275
+ super().__init__()
276
+ self.kernel_size = int(kernel_size)
277
+ self.causal = bool(causal)
278
+ self.conv = nn.Conv1d(dim, dim, kernel_size=self.kernel_size, groups=dim, bias=True)
279
+
280
+ def forward(self, x: torch.Tensor) -> torch.Tensor:
281
+ y = x.transpose(1, 2)
282
+ if self.causal:
283
+ pad_left = self.kernel_size - 1
284
+ pad_right = 0
285
+ else:
286
+ pad_left = (self.kernel_size - 1) // 2
287
+ pad_right = self.kernel_size // 2
288
+ y = F.pad(y, (pad_left, pad_right))
289
+ y = self.conv(y)
290
+ y = y.transpose(1, 2)
291
+ return x + y
292
+
293
+
294
+ class Canon2DLayer(nn.Module):
295
+ def __init__(self, dim: int, kernel_h: int, kernel_w: int, causal_time: bool = False) -> None:
296
+ super().__init__()
297
+ self.kernel_h = int(kernel_h)
298
+ self.kernel_w = int(kernel_w)
299
+ self.causal_time = bool(causal_time)
300
+ self.conv = nn.Conv2d(dim, dim, kernel_size=(self.kernel_h, self.kernel_w), groups=dim, bias=True)
301
+ self.grid_size: Optional[Tuple[int, int]] = None
302
+ self.expect_cls: Optional[bool] = None
303
+ self._warned = False
304
+ self._fallback = CanonLayer(dim, kernel_size=self.kernel_h, causal=self.causal_time)
305
+
306
+ def _warn_once(self, msg: str) -> None:
307
+ if not self._warned:
308
+ print(msg, flush=True)
309
+ self._warned = True
310
+
311
+ def forward(self, x: torch.Tensor) -> torch.Tensor:
312
+ if x.ndim != 3:
313
+ raise RuntimeError("Canon2D expects input of shape [B, N, C].")
314
+
315
+ if self.grid_size is None:
316
+ self._warn_once("Warning: Canon2D missing grid_size; falling back to 1D Canon.")
317
+ return self._fallback(x)
318
+
319
+ h, w = self.grid_size
320
+ if not (isinstance(h, int) and isinstance(w, int)):
321
+ self._warn_once("Warning: Canon2D grid_size is invalid; falling back to 1D Canon.")
322
+ return self._fallback(x)
323
+
324
+ b, n, c = x.shape
325
+ expected = int(h) * int(w)
326
+ if self.expect_cls is True and n != expected + 1:
327
+ self._warn_once(
328
+ f"Warning: Canon2D expected CLS token with N=1+H*W ({expected + 1}) but got N={n}; falling back to 1D Canon."
329
+ )
330
+ return self._fallback(x)
331
+
332
+ has_cls = False
333
+ if n == expected + 1:
334
+ has_cls = True
335
+ cls = x[:, :1, :]
336
+ patches = x[:, 1:, :]
337
+ elif n == expected:
338
+ cls = None
339
+ patches = x
340
+ else:
341
+ self._warn_once(
342
+ f"Warning: Canon2D token count mismatch (N={n}, H*W={expected}); falling back to 1D Canon."
343
+ )
344
+ return self._fallback(x)
345
+
346
+ patches = patches.transpose(1, 2).contiguous().view(b, c, int(h), int(w))
347
+ if self.causal_time:
348
+ pad_h_top = self.kernel_h - 1
349
+ pad_h_bottom = 0
350
+ else:
351
+ pad_h_top = (self.kernel_h - 1) // 2
352
+ pad_h_bottom = self.kernel_h // 2
353
+ pad_w_left = (self.kernel_w - 1) // 2
354
+ pad_w_right = self.kernel_w // 2
355
+ patches = F.pad(patches, (pad_w_left, pad_w_right, pad_h_top, pad_h_bottom))
356
+ y = self.conv(patches)
357
+ y = y.view(b, c, int(h) * int(w)).transpose(1, 2)
358
+ if has_cls:
359
+ zero_cls = torch.zeros_like(cls)
360
+ y = torch.cat([zero_cls, y], dim=1)
361
+ return x + y
362
+
363
+
364
+ class CanonInputWrapper(nn.Module):
365
+ def __init__(self, module: nn.Module, canon: nn.Module) -> None:
366
+ super().__init__()
367
+ self.module = module
368
+ self.canon = canon
369
+
370
+ def forward(self, x: torch.Tensor, *args, **kwargs) -> torch.Tensor:
371
+ return self.module(self.canon(x), *args, **kwargs)
372
+
373
+
374
+ class CanonQKVWrapper(nn.Module):
375
+ def __init__(self, qkv: nn.Module, canon: nn.Module) -> None:
376
+ super().__init__()
377
+ self.qkv = qkv
378
+ self.canon = canon
379
+
380
+ def forward(self, x: torch.Tensor, *args, **kwargs) -> torch.Tensor:
381
+ y = self.qkv(x, *args, **kwargs)
382
+ if y.ndim != 3:
383
+ raise RuntimeError("Canon-B expects QKV output of shape [B, N, 3*D].")
384
+ return self.canon(y)
385
+
386
+
387
+ class CanonFC1Wrapper(nn.Module):
388
+ def __init__(self, fc1: nn.Module, canon: nn.Module) -> None:
389
+ super().__init__()
390
+ self.fc1 = fc1
391
+ self.canon = canon
392
+
393
+ def forward(self, x: torch.Tensor, *args, **kwargs) -> torch.Tensor:
394
+ y = self.fc1(x, *args, **kwargs)
395
+ if y.ndim != 3:
396
+ raise RuntimeError("Canon-D expects MLP FC1 output of shape [B, N, M].")
397
+ return self.canon(y)
398
+
399
+
400
+ class CanonBlockWrapper(nn.Module):
401
+ def __init__(
402
+ self,
403
+ block: nn.Module,
404
+ dim: int,
405
+ *,
406
+ kernel_size: int = 4,
407
+ canon_a: bool = False,
408
+ canon_b: bool = False,
409
+ canon_b_qkv: bool = False,
410
+ canon_c: bool = False,
411
+ canon_d: bool = False,
412
+ causal: bool = False,
413
+ use_2d: bool = False,
414
+ grid_size: Optional[Tuple[int, int]] = None,
415
+ expect_cls: Optional[bool] = None,
416
+ ) -> None:
417
+ super().__init__()
418
+ self.block = block
419
+ self.use_2d = bool(use_2d)
420
+ self.grid_size = tuple(grid_size) if grid_size is not None else None
421
+ self.expect_cls = expect_cls
422
+ self._insert_canon(
423
+ dim=dim,
424
+ kernel_size=kernel_size,
425
+ canon_a=canon_a,
426
+ canon_b=canon_b,
427
+ canon_b_qkv=canon_b_qkv,
428
+ canon_c=canon_c,
429
+ canon_d=canon_d,
430
+ causal=causal,
431
+ )
432
+
433
+ def _make_canon(self, dim: int, kernel_size: int, causal: bool) -> nn.Module:
434
+ if self.use_2d:
435
+ canon = Canon2DLayer(int(dim), int(kernel_size), int(kernel_size), causal_time=causal)
436
+ canon.grid_size = self.grid_size
437
+ canon.expect_cls = self.expect_cls
438
+ return canon
439
+ return CanonLayer(int(dim), kernel_size=kernel_size, causal=causal)
440
+
441
+ def _insert_canon(
442
+ self,
443
+ *,
444
+ dim: int,
445
+ kernel_size: int,
446
+ canon_a: bool,
447
+ canon_b: bool,
448
+ canon_b_qkv: bool,
449
+ canon_c: bool,
450
+ canon_d: bool,
451
+ causal: bool,
452
+ ) -> None:
453
+ block = self.block
454
+
455
+ if canon_b:
456
+ if not hasattr(block, "attn"):
457
+ raise RuntimeError("Canon-B requested but block has no `.attn`.")
458
+ attn = block.attn
459
+ if canon_b_qkv:
460
+ if not hasattr(attn, "qkv"):
461
+ raise RuntimeError("Canon-B(QKV) requested but attention has no `.qkv`.")
462
+ qkv = attn.qkv
463
+ qkv_dim = getattr(qkv, "out_features", None)
464
+ if qkv_dim is None:
465
+ raise RuntimeError("Canon-B(QKV) requested but could not read qkv out_features.")
466
+ attn.qkv = CanonQKVWrapper(qkv, self._make_canon(int(qkv_dim), kernel_size, causal))
467
+ else:
468
+ if not hasattr(attn, "proj"):
469
+ raise RuntimeError("Canon-B requested but attention has no `.proj`.")
470
+ attn.proj = nn.Sequential(attn.proj, self._make_canon(int(dim), kernel_size, causal))
471
+
472
+ if canon_a:
473
+ if not hasattr(block, "attn"):
474
+ raise RuntimeError("Canon-A requested but block has no `.attn`.")
475
+ block.attn = CanonInputWrapper(block.attn, self._make_canon(int(dim), kernel_size, causal))
476
+
477
+ if canon_d:
478
+ if not hasattr(block, "mlp"):
479
+ raise RuntimeError("Canon-D requested but block has no `.mlp`.")
480
+ mlp = block.mlp
481
+ if not hasattr(mlp, "fc1"):
482
+ raise RuntimeError("Canon-D requested but MLP has no `.fc1`.")
483
+ fc1 = mlp.fc1
484
+ hidden_dim = getattr(fc1, "out_features", None)
485
+ if hidden_dim is None:
486
+ raise RuntimeError("Canon-D requested but could not read MLP fc1 out_features.")
487
+ mlp.fc1 = CanonFC1Wrapper(fc1, self._make_canon(int(hidden_dim), kernel_size, causal))
488
+
489
+ if canon_c:
490
+ if not hasattr(block, "mlp"):
491
+ raise RuntimeError("Canon-C requested but block has no `.mlp`.")
492
+ block.mlp = CanonInputWrapper(block.mlp, self._make_canon(int(dim), kernel_size, causal))
493
+
494
+ def forward(self, x: torch.Tensor) -> torch.Tensor:
495
+ return self.block(x)
496
+
497
+
498
+ def _build_student(config: HearCanonViTConfig) -> nn.Module:
499
+ try:
500
+ import timm
501
+ except Exception as exc: # noqa: BLE001
502
+ raise RuntimeError(f"timm is required to load HearCanonViTModel: {exc}") from exc
503
+
504
+ try:
505
+ model = timm.create_model(
506
+ config.timm_model_name,
507
+ img_size=tuple(config.image_size),
508
+ in_chans=int(config.num_channels),
509
+ num_classes=0,
510
+ global_pool="avg",
511
+ )
512
+ except Exception:
513
+ model = timm.create_model(
514
+ config.timm_model_name,
515
+ in_chans=int(config.num_channels),
516
+ num_classes=0,
517
+ global_pool="avg",
518
+ )
519
+
520
+ use_canon = bool(
521
+ config.canon
522
+ or config.canon_abcd
523
+ or config.canon_a
524
+ or config.canon_b
525
+ or config.canon_c
526
+ or config.canon_d
527
+ )
528
+ canon_a = bool(config.canon_a)
529
+ canon_b = bool(config.canon_b)
530
+ canon_c = bool(config.canon_c)
531
+ canon_d = bool(config.canon_d)
532
+ if config.canon_abcd:
533
+ canon_a = canon_b = canon_c = canon_d = True
534
+
535
+ if use_canon:
536
+ dim = getattr(model, "embed_dim", None) or getattr(model, "num_features", None)
537
+ if dim is None:
538
+ raise RuntimeError("Could not determine student embed_dim for Canon layers.")
539
+ if not hasattr(model, "blocks"):
540
+ raise RuntimeError("Student model has no `.blocks` attribute; cannot insert Canon layers.")
541
+
542
+ grid_size = None
543
+ expect_cls = None
544
+ if config.canon_2d:
545
+ patch_embed = getattr(model, "patch_embed", None)
546
+ grid_size = getattr(patch_embed, "grid_size", None) if patch_embed is not None else None
547
+ if grid_size is not None:
548
+ num_prefix = getattr(model, "num_prefix_tokens", None)
549
+ if num_prefix is not None:
550
+ try:
551
+ num_prefix = int(num_prefix)
552
+ except Exception:
553
+ num_prefix = None
554
+ if num_prefix in (0, 1):
555
+ expect_cls = bool(num_prefix)
556
+ if expect_cls is None:
557
+ expect_cls = getattr(model, "cls_token", None) is not None
558
+
559
+ wrapped_blocks = []
560
+ for block in model.blocks:
561
+ wrapped_blocks.append(
562
+ CanonBlockWrapper(
563
+ block,
564
+ int(dim),
565
+ kernel_size=int(config.canon_kernel),
566
+ canon_a=canon_a,
567
+ canon_b=canon_b,
568
+ canon_b_qkv=bool(config.canon_b_qkv),
569
+ canon_c=canon_c,
570
+ canon_d=canon_d,
571
+ causal=bool(config.canon_causal),
572
+ use_2d=bool(config.canon_2d),
573
+ grid_size=grid_size,
574
+ expect_cls=expect_cls,
575
+ )
576
+ )
577
+ model.blocks = nn.Sequential(*wrapped_blocks)
578
+
579
+ if bool(config.canon_no_pos_enc) and use_canon:
580
+ _disable_positional_embeddings(model)
581
+
582
+ return model
583
+
584
+
585
+ def _student_features(feats: torch.Tensor) -> torch.Tensor:
586
+ if feats.ndim == 3:
587
+ return feats[:, 0, :]
588
+ if feats.ndim == 4:
589
+ return feats.mean(dim=(-2, -1))
590
+ return feats
591
+
592
+
593
+ class HearCanonViTModel(PreTrainedModel):
594
+ """Distilled HeAR ViT-S model with Canon layers and 512-D projection head."""
595
+
596
+ config_class = HearCanonViTConfig
597
+ base_model_prefix = "student"
598
+ main_input_name = "input_values"
599
+
600
+ def __init__(self, config: HearCanonViTConfig):
601
+ super().__init__(config)
602
+ self.student = _build_student(config)
603
+ self.proj = nn.Linear(int(config.hidden_size), int(config.pooler_output_size))
604
+ self.post_init()
605
+
606
+ def preprocess_audio(self, audio: torch.Tensor) -> torch.Tensor:
607
+ return preprocess_audio(
608
+ audio,
609
+ clip_samples=int(self.config.num_audio_samples),
610
+ target_size=(int(self.config.image_size[0]), int(self.config.image_size[1])),
611
+ )
612
+
613
+ def embed_audio(self, audio: torch.Tensor) -> torch.Tensor:
614
+ with torch.inference_mode():
615
+ return self.forward(input_values=audio, return_dict=True).pooler_output
616
+
617
+ def _prepare_pixel_values(
618
+ self,
619
+ *,
620
+ input_values: Optional[torch.Tensor],
621
+ pixel_values: Optional[torch.Tensor],
622
+ ) -> torch.Tensor:
623
+ x = pixel_values if pixel_values is not None else input_values
624
+ if x is None:
625
+ raise ValueError("Provide `input_values` (waveform) or `pixel_values` (spectrogram).")
626
+
627
+ if not torch.is_tensor(x):
628
+ x = torch.tensor(x)
629
+
630
+ if x.ndim == 1:
631
+ x = x.unsqueeze(0)
632
+
633
+ if x.ndim == 2:
634
+ x = self.preprocess_audio(x)
635
+ elif x.ndim == 3:
636
+ x = x.unsqueeze(1)
637
+ elif x.ndim == 4:
638
+ if x.shape[1] != int(self.config.num_channels) and x.shape[-1] == int(self.config.num_channels):
639
+ x = x.permute(0, 3, 1, 2).contiguous()
640
+ else:
641
+ raise ValueError(
642
+ "Expected waveform [B, samples] or spectrogram [B, H, W]/[B, C, H, W]. "
643
+ f"Got shape {tuple(x.shape)}."
644
+ )
645
+
646
+ if x.ndim != 4:
647
+ raise ValueError(f"Expected 4D spectrogram tensor after preprocessing, got {tuple(x.shape)}.")
648
+
649
+ if x.shape[1] != int(self.config.num_channels):
650
+ raise ValueError(
651
+ f"Expected {int(self.config.num_channels)} channel(s), got {x.shape[1]}."
652
+ )
653
+
654
+ target_h = int(self.config.image_size[0])
655
+ target_w = int(self.config.image_size[1])
656
+ if x.shape[-2:] != (target_h, target_w):
657
+ x = _torch_resize_bilinear_tf_compat(x, size=(target_h, target_w))
658
+
659
+ return x.float()
660
+
661
+ def forward(
662
+ self,
663
+ input_values: Optional[torch.Tensor] = None,
664
+ pixel_values: Optional[torch.Tensor] = None,
665
+ output_hidden_states: Optional[bool] = None,
666
+ return_dict: Optional[bool] = None,
667
+ **kwargs,
668
+ ):
669
+ del kwargs
670
+
671
+ if return_dict is None:
672
+ return_dict = self.config.use_return_dict
673
+
674
+ x = self._prepare_pixel_values(input_values=input_values, pixel_values=pixel_values)
675
+ x = x.to(device=self.device)
676
+
677
+ feats = self.student.forward_features(x)
678
+ if isinstance(feats, (list, tuple)):
679
+ feats = feats[-1]
680
+
681
+ pooled_student = _student_features(feats)
682
+ pooler_output = self.proj(pooled_student)
683
+
684
+ if feats.ndim == 2:
685
+ last_hidden_state = feats.unsqueeze(1)
686
+ elif feats.ndim == 4:
687
+ b, c, h, w = feats.shape
688
+ last_hidden_state = feats.view(b, c, h * w).transpose(1, 2).contiguous()
689
+ else:
690
+ last_hidden_state = feats
691
+
692
+ hidden_states = (last_hidden_state,) if output_hidden_states else None
693
+
694
+ if not return_dict:
695
+ if output_hidden_states:
696
+ return (last_hidden_state, pooler_output, hidden_states)
697
+ return (last_hidden_state, pooler_output)
698
+
699
+ return BaseModelOutputWithPooling(
700
+ last_hidden_state=last_hidden_state,
701
+ pooler_output=pooler_output,
702
+ hidden_states=hidden_states,
703
+ attentions=None,
704
+ )
705
+
706
+
707
+ __all__ = ["HearCanonViTModel", "HearCanonViTConfig", "preprocess_audio"]
preprocessor_config.json ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "clip_duration_seconds": 2.0,
3
+ "do_normalize": false,
4
+ "feature_extractor_type": "HearCanonFeatureExtractor",
5
+ "image_size": [
6
+ 192,
7
+ 128
8
+ ],
9
+ "input_channels": 1,
10
+ "num_audio_samples": 32000,
11
+ "num_mel_bins": 128,
12
+ "sampling_rate": 16000
13
+ }
pytorch_model.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e1c0b78f1b8a42be8ed5e24f3aa807adfedbc5270d21418e7acb5c135a3c89e3
3
+ size 89464259
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ torch
2
+ transformers>=4.50.0
3
+ timm>=1.0.0
4
+ scipy
5
+ soundfile
smoke_test.py ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """Local smoke test for the distilled HeAR ViT-S Canon upload package."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import argparse
7
+ from pathlib import Path
8
+
9
+ import torch
10
+ from transformers import AutoModel
11
+
12
+
13
+ def main() -> None:
14
+ ap = argparse.ArgumentParser(description="Smoke test for local HF upload directory.")
15
+ ap.add_argument("--model-dir", type=Path, default=Path(__file__).resolve().parent)
16
+ ap.add_argument("--batch-size", type=int, default=4)
17
+ args = ap.parse_args()
18
+
19
+ model = AutoModel.from_pretrained(str(args.model_dir), trust_remote_code=True)
20
+ model.eval()
21
+
22
+ raw_audio = torch.rand((int(args.batch_size), 32000), dtype=torch.float32)
23
+ with torch.inference_mode():
24
+ out_from_wave = model(input_values=raw_audio, return_dict=True).pooler_output
25
+
26
+ spectrogram = model.preprocess_audio(raw_audio)
27
+ with torch.inference_mode():
28
+ out_from_spec = model(pixel_values=spectrogram, return_dict=True).pooler_output
29
+
30
+ max_abs = (out_from_wave - out_from_spec).abs().max().item()
31
+
32
+ print(f"model_dir={args.model_dir}")
33
+ print(f"spectrogram_shape={tuple(spectrogram.shape)}")
34
+ print(f"wave_embedding_shape={tuple(out_from_wave.shape)}")
35
+ print(f"spec_embedding_shape={tuple(out_from_spec.shape)}")
36
+ print(f"max_abs_diff_wave_vs_spec={max_abs:.8f}")
37
+
38
+
39
+ if __name__ == "__main__":
40
+ main()
training_args.json ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "amp": false,
3
+ "batch_size": 128,
4
+ "canon": true,
5
+ "canon_2d": true,
6
+ "canon_a": false,
7
+ "canon_abcd": true,
8
+ "canon_b": false,
9
+ "canon_b_qkv": false,
10
+ "canon_c": false,
11
+ "canon_causal": false,
12
+ "canon_d": false,
13
+ "canon_kernel": 4,
14
+ "canon_no_pos_enc": true,
15
+ "canon_post": false,
16
+ "canon_pre": false,
17
+ "clip_seconds": 2.0,
18
+ "contrastive_temp": 0.07,
19
+ "data_dir": "/home/ubuntu/HeAR/HeAR/data/laion_audio_lake2",
20
+ "device": "cuda",
21
+ "gns_every": 5,
22
+ "gns_param_sample": 200000,
23
+ "grad_accum": 1,
24
+ "live_shard_refresh": true,
25
+ "log_every": 10,
26
+ "loss_contrastive_weight": 0.5,
27
+ "loss_mse_weight": 1.0,
28
+ "loss_relational_weight": 0.5,
29
+ "lr": 0.0003,
30
+ "lr_gns_adapt": true,
31
+ "lr_gns_ema_beta": 0.995,
32
+ "lr_gns_max_factor": 1.0,
33
+ "lr_gns_min_factor": 0.1,
34
+ "lr_gns_min_samples": 100,
35
+ "lr_gns_ref_batch": 0.0,
36
+ "lr_gns_update_every": 1000,
37
+ "lr_min_ratio": 0.1,
38
+ "lr_schedule": "none",
39
+ "lr_warmup_steps": 0,
40
+ "max_checkpoints": 20,
41
+ "max_steps": 200000,
42
+ "num_workers": 4,
43
+ "out": "/home/ubuntu/HeAR/HeAR/checkpoints/hear_vit_s_lake",
44
+ "repeat": true,
45
+ "resume_from": "checkpoints/hear_vit_s_lake/ckpt_013000.pt",
46
+ "resume_latest": false,
47
+ "resume_require_optim": true,
48
+ "sample_rate": 16000,
49
+ "save_every": 1000,
50
+ "seed": 1337,
51
+ "shard_refresh_sec": 20.0,
52
+ "shards_glob": "shard-*.tar",
53
+ "shuffle_shards": true,
54
+ "streams_glob": "stream-*",
55
+ "teacher_id": "google/hear-pytorch",
56
+ "val_batches": 5,
57
+ "val_defer_check_every": 10,
58
+ "val_defer_start_steps": 10,
59
+ "val_every": 250,
60
+ "val_fraction": 0.0,
61
+ "val_shards_file": "/home/ubuntu/HeAR/HeAR/checkpoints/hear_vit_s_lake/val_shards.json",
62
+ "val_target_clips": 10000,
63
+ "wandb": true,
64
+ "wandb_entity": null,
65
+ "wandb_project": "hear-distill",
66
+ "wandb_run_name": null,
67
+ "wandb_tags": null,
68
+ "weight_decay": 0.05
69
+ }