Gabriel commited on
Commit
53b82f0
·
verified ·
1 Parent(s): 91b6a7f

PEFT LoRA adapter for MOSS-Image-Base: eight

Browse files
.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ images/example.png filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: apache-2.0
3
+ base_model: OpenMOSS-Team/MOSS-Image-Base
4
+ base_model_relation: adapter
5
+ library_name: peft
6
+ pipeline_tag: text-to-image
7
+ language:
8
+ - sv
9
+ tags:
10
+ - lora
11
+ - peft
12
+ - moss-image
13
+ - handwriting
14
+ - historical-documents
15
+ - archives
16
+ - htr
17
+ - synthetic-data
18
+ widget:
19
+ - text: "A flat, evenly lit archival scan of a handwritten page from the Bergskollegium records of Stora Kopparbergs bergslag."
20
+ output:
21
+ url: images/example.png
22
+ ---
23
+
24
+ # diffu-moss-hand-eight
25
+
26
+ A LoRA adapter for [MOSS-Image-Base](https://huggingface.co/OpenMOSS-Team/MOSS-Image-Base) that writes in
27
+ eight archival hands in one adapter, each chosen by naming its collection in the prompt. It is part of [diffu](https://github.com/Borg93/diffu2), which draws synthetic archive pages with exact
28
+ ALTO and PAGE labels, for training handwriting and page-reading models.
29
+
30
+ ![A window drawn with this adapter](images/example.png)
31
+
32
+ *A page window drawn by MOSS-Image-Base with this adapter; not a scan.*
33
+
34
+ ## Files
35
+
36
+ | File | What |
37
+ |---|---|
38
+ | `adapter_config.json` | a PEFT `LoraConfig`: rank 32, alpha 32, on 265 Linear layers of the DiT |
39
+ | `adapter_model.safetensors` | the LoRA weights (bfloat16), PEFT's key layout |
40
+
41
+ The adapter covers the DiT's 42 joint blocks (`q`, `k`, `v`, `o`, `ffn_up_gate`, `ffn_down`), its text refiner, its two
42
+ embedders and its final layer. The module names are MOSS-Image's own, so it applies to any implementation that keeps
43
+ them; diffu's `MossTransformer` does.
44
+
45
+ ## Use
46
+
47
+ With PEFT, merged into the DiT, which diffu then draws with like any MOSS-Image model:
48
+
49
+ ```python
50
+ from peft import PeftModel
51
+
52
+ from diffu_moss.transformer import MossTransformer
53
+
54
+ dit = MossTransformer.from_pretrained("<MOSS-Image-Base snapshot>/transformer")
55
+ dit = PeftModel.from_pretrained(dit, "Gabriel/diffu-moss-hand-eight").merge_and_unload()
56
+ dit.save_pretrained("dit-eight")
57
+ ```
58
+
59
+ ```bash
60
+ diffu-moss-init --base <MOSS-Image-Base snapshot> --transformer dit-eight --out moss-eight
61
+ ```
62
+
63
+ Base snapshot: `OpenMOSS-Team/MOSS-Image-Base` at revision `85975793d8b3d432f1b6e27f352abaa4c2a4c0d3`. The adapter takes
64
+ no sample page: the hand comes from the adapter and the prompt.
65
+
66
+ ### Prompting
67
+
68
+ The hand is chosen by the collection the prompt's caption names, as in training (160 windows of each):
69
+
70
+ | Hand | Caption names it as |
71
+ |---|---|
72
+ | Göteborg register | "…a handwritten page from a Göteborg register, dated 1790–1794…" |
73
+ | Jämtlands domsaga | "…a handwritten page from the court records of Jämtlands domsaga…" |
74
+ | Stora Kopparbergs bergslag | "…a handwritten page from the Bergskollegium records of Stora Kopparbergs bergslag…" |
75
+ | Landskapshandlingar | "…a handwritten page from the landskapshandlingar provincial accounts…" |
76
+ | Överståthållarämbetet | "…a handwritten page from the records of Överståthållarämbetet…" |
77
+ | Påhlman's travel journals | "…a handwritten page from Carl Fredrik Påhlman's travel journals, dated 1824–1825…" |
78
+ | Riksregistraturet | "…a handwritten page from Riksregistraturet, the royal chancery register…" |
79
+ | Trolldomskommissionen | "…a handwritten page from the records of the witchcraft commissions (trolldomskommissionen), dated 1676…" |
80
+
81
+ Draw as MOSS-Image is drawn: about 1 MP, 50 steps, guidance 3, shift 5, block 22 skipped in the unconditional pass.
82
+
83
+ ## Training
84
+
85
+ - Data: 1,280 windows of about 1 MP cut from pages of Swedish archival handwriting ground truth, each
86
+ captioned as a MOSS Layout prompt (the collection named, every line's exact text and box).
87
+ - Trainer: KohakuMossTrainer, a LoRA (LyCORIS, algo `lora`), rank 32, alpha 32; AdamW at 1e-4,
88
+ 2,000 steps; MOSS-Image's own noise-level sampling; text encoder and VAE frozen.
89
+ - Format: converted from the trainer's LyCORIS export to PEFT's layout. The conversion was checked layer by layer: every
90
+ key lands on a layer PEFT builds from this config, none is missing or left over, and scaling x B @ A equals the
91
+ trained (alpha / r) x up @ down exactly.
92
+
93
+ ## Limitations
94
+
95
+ - Eight hands only, each from one collection; other hands
96
+ and kinds of page are untested.
97
+ - The drawn text must be checked: diffu reads every drawn line back and tags a line it cannot confirm as unclear in
98
+ the labels.
99
+
100
+ ## Licence
101
+
102
+ Apache-2.0, as MOSS-Image-Base.
adapter_config.json ADDED
@@ -0,0 +1,309 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "alora_invocation_tokens": null,
3
+ "alpha_pattern": {},
4
+ "arrow_config": null,
5
+ "auto_mapping": null,
6
+ "base_model_name_or_path": "OpenMOSS-Team/MOSS-Image-Base",
7
+ "bias": "none",
8
+ "corda_config": null,
9
+ "ensure_weight_tying": false,
10
+ "eva_config": null,
11
+ "exclude_modules": null,
12
+ "fan_in_fan_out": false,
13
+ "inference_mode": false,
14
+ "init_lora_weights": true,
15
+ "kasa_config": null,
16
+ "layer_replication": null,
17
+ "layers_pattern": null,
18
+ "layers_to_transform": null,
19
+ "loftq_config": {},
20
+ "lora_alpha": 32.0,
21
+ "lora_bias": false,
22
+ "lora_dropout": 0.0,
23
+ "lora_ga_config": null,
24
+ "megatron_config": null,
25
+ "megatron_core": "megatron.core",
26
+ "modules_to_save": null,
27
+ "monteclora_config": null,
28
+ "peft_type": "LORA",
29
+ "peft_version": "0.21.2",
30
+ "qalora_group_size": 16,
31
+ "r": 32,
32
+ "rank_pattern": {},
33
+ "revision": "85975793d8b3d432f1b6e27f352abaa4c2a4c0d3",
34
+ "target_modules": [
35
+ "layers.19.proj.k",
36
+ "layers.28.proj.v",
37
+ "layers.7.proj.q",
38
+ "layers.16.proj.o",
39
+ "layers.38.proj.o",
40
+ "layers.38.proj.q",
41
+ "layers.27.proj.ffn_down",
42
+ "layers.37.proj.ffn_up_gate",
43
+ "layers.6.proj.ffn_down",
44
+ "layers.14.proj.ffn_up_gate",
45
+ "layers.4.proj.k",
46
+ "layers.15.proj.ffn_up_gate",
47
+ "layers.31.proj.ffn_down",
48
+ "layers.7.proj.k",
49
+ "layers.6.proj.q",
50
+ "layers.26.proj.v",
51
+ "layers.34.proj.k",
52
+ "layers.18.proj.o",
53
+ "layers.19.proj.v",
54
+ "layers.24.proj.v",
55
+ "layers.32.proj.ffn_down",
56
+ "layers.35.proj.ffn_up_gate",
57
+ "layers.37.proj.q",
58
+ "layers.9.proj.k",
59
+ "layers.10.proj.k",
60
+ "layers.4.proj.ffn_down",
61
+ "layers.13.proj.ffn_down",
62
+ "text_embedder.blocks.0.qkv",
63
+ "layers.6.proj.o",
64
+ "layers.28.proj.ffn_down",
65
+ "layers.15.proj.v",
66
+ "layers.10.proj.ffn_down",
67
+ "layers.33.proj.ffn_down",
68
+ "layers.27.proj.o",
69
+ "layers.5.proj.ffn_down",
70
+ "layers.41.proj.k",
71
+ "layers.29.proj.q",
72
+ "layers.28.proj.q",
73
+ "layers.34.proj.v",
74
+ "layers.11.proj.ffn_down",
75
+ "layers.14.proj.k",
76
+ "layers.27.proj.v",
77
+ "layers.9.proj.v",
78
+ "layers.39.proj.ffn_up_gate",
79
+ "layers.10.proj.v",
80
+ "layers.21.proj.ffn_down",
81
+ "layers.5.proj.ffn_up_gate",
82
+ "layers.25.proj.o",
83
+ "layers.36.proj.ffn_down",
84
+ "layers.2.proj.v",
85
+ "layers.17.proj.q",
86
+ "layers.29.proj.v",
87
+ "layers.17.proj.v",
88
+ "layers.32.proj.o",
89
+ "layers.20.proj.q",
90
+ "layers.3.proj.q",
91
+ "layers.14.proj.q",
92
+ "layers.35.proj.v",
93
+ "layers.28.proj.o",
94
+ "layers.1.proj.ffn_down",
95
+ "layers.3.proj.v",
96
+ "layers.27.proj.ffn_up_gate",
97
+ "layers.17.proj.ffn_down",
98
+ "layers.18.proj.v",
99
+ "layers.24.proj.q",
100
+ "layers.29.proj.ffn_down",
101
+ "layers.11.proj.o",
102
+ "layers.5.proj.k",
103
+ "layers.5.proj.v",
104
+ "layers.8.proj.v",
105
+ "layers.4.proj.q",
106
+ "layers.37.proj.o",
107
+ "layers.35.proj.ffn_down",
108
+ "layers.4.proj.o",
109
+ "layers.33.proj.v",
110
+ "layers.33.proj.ffn_up_gate",
111
+ "layers.23.proj.o",
112
+ "layers.35.proj.k",
113
+ "video_embedder",
114
+ "layers.0.proj.k",
115
+ "layers.14.proj.v",
116
+ "layers.22.proj.ffn_down",
117
+ "layers.8.proj.q",
118
+ "layers.4.proj.ffn_up_gate",
119
+ "layers.30.proj.k",
120
+ "layers.26.proj.ffn_up_gate",
121
+ "layers.8.proj.ffn_up_gate",
122
+ "layers.10.proj.ffn_up_gate",
123
+ "layers.20.proj.k",
124
+ "layers.36.proj.ffn_up_gate",
125
+ "layers.33.proj.q",
126
+ "layers.38.proj.k",
127
+ "layers.33.proj.o",
128
+ "layers.39.proj.q",
129
+ "layers.0.proj.ffn_up_gate",
130
+ "layers.25.proj.v",
131
+ "layers.24.proj.ffn_up_gate",
132
+ "layers.32.proj.q",
133
+ "layers.31.proj.v",
134
+ "layers.19.proj.o",
135
+ "layers.8.proj.o",
136
+ "layers.37.proj.k",
137
+ "text_embedder.blocks.1.ffn_gate",
138
+ "text_embedder.blocks.1.ffn_down",
139
+ "layers.31.proj.o",
140
+ "layers.26.proj.o",
141
+ "layers.11.proj.q",
142
+ "layers.33.proj.k",
143
+ "layers.38.proj.v",
144
+ "layers.41.proj.v",
145
+ "layers.0.proj.q",
146
+ "layers.22.proj.k",
147
+ "text_embedder.blocks.1.proj",
148
+ "final_linear_video",
149
+ "layers.12.proj.o",
150
+ "layers.41.proj.ffn_up_gate",
151
+ "layers.7.proj.v",
152
+ "layers.38.proj.ffn_up_gate",
153
+ "layers.16.proj.v",
154
+ "layers.24.proj.ffn_down",
155
+ "layers.13.proj.v",
156
+ "layers.20.proj.o",
157
+ "text_embedder.proj",
158
+ "layers.40.proj.o",
159
+ "layers.29.proj.ffn_up_gate",
160
+ "text_embedder.blocks.1.ffn_up",
161
+ "layers.40.proj.q",
162
+ "layers.25.proj.ffn_up_gate",
163
+ "layers.16.proj.k",
164
+ "layers.1.proj.v",
165
+ "layers.32.proj.ffn_up_gate",
166
+ "layers.40.proj.ffn_down",
167
+ "layers.39.proj.v",
168
+ "layers.2.proj.k",
169
+ "layers.28.proj.ffn_up_gate",
170
+ "layers.5.proj.o",
171
+ "layers.2.proj.q",
172
+ "layers.11.proj.k",
173
+ "layers.18.proj.k",
174
+ "layers.13.proj.o",
175
+ "layers.13.proj.q",
176
+ "layers.34.proj.o",
177
+ "layers.6.proj.k",
178
+ "layers.30.proj.v",
179
+ "layers.20.proj.ffn_up_gate",
180
+ "text_embedder.blocks.0.ffn_down",
181
+ "layers.31.proj.q",
182
+ "layers.22.proj.o",
183
+ "layers.27.proj.k",
184
+ "layers.9.proj.ffn_down",
185
+ "layers.9.proj.o",
186
+ "layers.22.proj.v",
187
+ "layers.8.proj.k",
188
+ "layers.12.proj.q",
189
+ "layers.23.proj.v",
190
+ "layers.21.proj.ffn_up_gate",
191
+ "layers.14.proj.o",
192
+ "layers.16.proj.ffn_down",
193
+ "layers.1.proj.ffn_up_gate",
194
+ "layers.1.proj.o",
195
+ "layers.36.proj.k",
196
+ "layers.32.proj.v",
197
+ "layers.6.proj.v",
198
+ "layers.16.proj.ffn_up_gate",
199
+ "layers.19.proj.ffn_up_gate",
200
+ "layers.2.proj.ffn_down",
201
+ "layers.21.proj.k",
202
+ "layers.19.proj.ffn_down",
203
+ "layers.26.proj.q",
204
+ "layers.5.proj.q",
205
+ "layers.17.proj.o",
206
+ "layers.39.proj.o",
207
+ "layers.21.proj.q",
208
+ "layers.32.proj.k",
209
+ "layers.12.proj.v",
210
+ "layers.27.proj.q",
211
+ "layers.40.proj.k",
212
+ "layers.26.proj.k",
213
+ "layers.34.proj.ffn_down",
214
+ "layers.7.proj.ffn_down",
215
+ "layers.28.proj.k",
216
+ "layers.30.proj.o",
217
+ "layers.12.proj.k",
218
+ "layers.15.proj.o",
219
+ "layers.16.proj.q",
220
+ "layers.21.proj.v",
221
+ "layers.23.proj.ffn_down",
222
+ "layers.37.proj.v",
223
+ "layers.31.proj.ffn_up_gate",
224
+ "layers.6.proj.ffn_up_gate",
225
+ "layers.36.proj.q",
226
+ "text_embedder.blocks.1.qkv",
227
+ "layers.39.proj.k",
228
+ "layers.12.proj.ffn_up_gate",
229
+ "layers.0.proj.ffn_down",
230
+ "layers.25.proj.k",
231
+ "layers.23.proj.k",
232
+ "layers.10.proj.q",
233
+ "layers.4.proj.v",
234
+ "layers.9.proj.q",
235
+ "layers.0.proj.o",
236
+ "layers.41.proj.q",
237
+ "layers.30.proj.ffn_up_gate",
238
+ "layers.40.proj.ffn_up_gate",
239
+ "layers.3.proj.ffn_down",
240
+ "layers.41.proj.o",
241
+ "layers.2.proj.ffn_up_gate",
242
+ "layers.15.proj.q",
243
+ "layers.35.proj.o",
244
+ "layers.3.proj.ffn_up_gate",
245
+ "layers.17.proj.ffn_up_gate",
246
+ "layers.9.proj.ffn_up_gate",
247
+ "layers.40.proj.v",
248
+ "layers.13.proj.k",
249
+ "layers.18.proj.q",
250
+ "layers.23.proj.ffn_up_gate",
251
+ "layers.23.proj.q",
252
+ "layers.17.proj.k",
253
+ "layers.20.proj.v",
254
+ "layers.10.proj.o",
255
+ "layers.18.proj.ffn_down",
256
+ "layers.7.proj.ffn_up_gate",
257
+ "layers.21.proj.o",
258
+ "layers.25.proj.ffn_down",
259
+ "layers.11.proj.v",
260
+ "layers.25.proj.q",
261
+ "layers.36.proj.v",
262
+ "layers.29.proj.k",
263
+ "layers.30.proj.ffn_down",
264
+ "layers.36.proj.o",
265
+ "layers.14.proj.ffn_down",
266
+ "layers.1.proj.k",
267
+ "layers.34.proj.q",
268
+ "layers.12.proj.ffn_down",
269
+ "layers.15.proj.k",
270
+ "layers.34.proj.ffn_up_gate",
271
+ "layers.30.proj.q",
272
+ "layers.31.proj.k",
273
+ "layers.26.proj.ffn_down",
274
+ "layers.7.proj.o",
275
+ "layers.8.proj.ffn_down",
276
+ "layers.41.proj.ffn_down",
277
+ "layers.3.proj.k",
278
+ "layers.29.proj.o",
279
+ "layers.35.proj.q",
280
+ "layers.13.proj.ffn_up_gate",
281
+ "layers.39.proj.ffn_down",
282
+ "text_embedder.blocks.0.ffn_gate",
283
+ "layers.37.proj.ffn_down",
284
+ "layers.11.proj.ffn_up_gate",
285
+ "layers.3.proj.o",
286
+ "layers.15.proj.ffn_down",
287
+ "layers.22.proj.q",
288
+ "layers.18.proj.ffn_up_gate",
289
+ "layers.24.proj.o",
290
+ "layers.22.proj.ffn_up_gate",
291
+ "layers.20.proj.ffn_down",
292
+ "layers.24.proj.k",
293
+ "layers.2.proj.o",
294
+ "layers.0.proj.v",
295
+ "layers.38.proj.ffn_down",
296
+ "layers.1.proj.q",
297
+ "layers.19.proj.q",
298
+ "text_embedder.blocks.0.ffn_up",
299
+ "text_embedder.blocks.0.proj"
300
+ ],
301
+ "target_parameters": null,
302
+ "task_type": null,
303
+ "trainable_token_indices": null,
304
+ "use_bdlora": null,
305
+ "use_dora": false,
306
+ "use_qalora": false,
307
+ "use_rslora": false,
308
+ "velora_config": null
309
+ }
adapter_model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a9b291e6920fe2e0d2e1be1da99d1e40ed58f21491ada54b35d5f61111d2c767
3
+ size 156254296
images/example.png ADDED

Git LFS Details

  • SHA256: 2d63aaac155752e78b19945b99f9360c3158e636b23932b51f1120368f904bea
  • Pointer size: 132 Bytes
  • Size of remote file: 1.46 MB