Luigi commited on
Commit
27c408f
·
verified ·
1 Parent(s): 47b0884

256m fall-detection fine-tune + Q8_0 GGUF + card

Browse files
.gitattributes CHANGED
@@ -33,3 +33,5 @@ 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
+ mmproj-f16.gguf filter=lfs diff=lfs merge=lfs -text
37
+ model-Q8_0.gguf filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: apache-2.0
3
+ base_model: HuggingFaceTB/SmolVLM2-256M-Video-Instruct
4
+ library_name: transformers
5
+ pipeline_tag: image-text-to-text
6
+ tags: [fall-detection, vision-language-model, edge-ai, raspberry-pi, safety]
7
+ ---
8
+
9
+ # edge-fall-vlm-256m — 256M fall / danger detector (size-comparison sibling)
10
+
11
+ A **SmolVLM2-256M-Video-Instruct** fine-tune for fall / person-down / distress detection, same recipe as
12
+ [edge-fall-vlm-2.2b](https://huggingface.co/Luigi/edge-fall-vlm-2.2b) but at **256M**.
13
+ Published mainly to show **how accuracy scales with VLM size**.
14
+
15
+ Code: https://github.com/vieenrose/edge-fall-vlm · Demo (pick a size):
16
+ https://huggingface.co/spaces/Luigi/edge-fall-vlm-demo
17
+
18
+ ## Accuracy vs size (same recipe, same real test sets)
19
+ | Model | URFD (easy) recall/spec | **OOPS in-the-wild recall** |
20
+ |---|---|---|
21
+ | 256M | 1.0 / 1.0 | **0.13** |
22
+ | 500M | 1.0 / 1.0 | **0.31** |
23
+ | **2.2B (recommended)** | 0.90 / 1.0 | **0.83** |
24
+
25
+ **This 256M model saturates the easy in-distribution test but MISSES most real in-the-wild
26
+ falls** (recall 0.13). Smaller VLMs fit the training distribution but do not generalize to
27
+ novel real footage. **For the actual safety task, use the 2.2B.** This model is useful for
28
+ research / the fastest possible on-device path where recall is not safety-critical.
29
+
30
+ Files: transformers `model.safetensors` + `model-Q8_0.gguf` / `mmproj-f16.gguf`
31
+ (llama.cpp). Apache-2.0. Not a medical/safety device.
chat_template.jinja ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ <|im_start|>{% for message in messages %}{{message['role'] | capitalize}}{% if message['content'][0]['type'] == 'image' %}{{':'}}{% else %}{{': '}}{% endif %}{% for line in message['content'] %}{% if line['type'] == 'text' %}{{line['text']}}{% elif line['type'] == 'image' %}{{ '<image>' }}{% endif %}{% endfor %}<end_of_utterance>
2
+ {% endfor %}{% if add_generation_prompt %}{{ 'Assistant:' }}{% endif %}
config.json ADDED
@@ -0,0 +1,162 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "architectures": [
3
+ "SmolVLMForConditionalGeneration"
4
+ ],
5
+ "dtype": "bfloat16",
6
+ "image_token_id": 49190,
7
+ "model_type": "smolvlm",
8
+ "pad_token_id": 128002,
9
+ "scale_factor": 4,
10
+ "text_config": {
11
+ "_flash_attn_2_enabled": true,
12
+ "_name_or_path": "None",
13
+ "architectures": [
14
+ "VLlama3ForCausalLM"
15
+ ],
16
+ "attention_bias": false,
17
+ "attention_dropout": 0.0,
18
+ "bos_token_id": 1,
19
+ "dtype": "bfloat16",
20
+ "eos_token_id": 2,
21
+ "head_dim": 64,
22
+ "hidden_act": "silu",
23
+ "hidden_size": 576,
24
+ "initializer_range": 0.041666666666666664,
25
+ "intermediate_size": 1536,
26
+ "is_llama_config": true,
27
+ "max_position_embeddings": 8192,
28
+ "mlp_bias": false,
29
+ "model_type": "llama",
30
+ "neftune_noise_alpha": 0.0,
31
+ "num_attention_heads": 9,
32
+ "num_hidden_layers": 30,
33
+ "num_key_value_heads": 3,
34
+ "pad_token_id": 2,
35
+ "perceiver_config": {
36
+ "_attn_implementation_autoset": false,
37
+ "_name_or_path": "",
38
+ "add_cross_attention": false,
39
+ "architectures": null,
40
+ "attention_dropout": 0.0,
41
+ "bad_words_ids": null,
42
+ "begin_suppress_tokens": null,
43
+ "bos_token_id": null,
44
+ "chunk_size_feed_forward": 0,
45
+ "cross_attention_hidden_size": null,
46
+ "decoder_start_token_id": null,
47
+ "diversity_penalty": 0.0,
48
+ "do_sample": false,
49
+ "early_stopping": false,
50
+ "encoder_no_repeat_ngram_size": 0,
51
+ "eos_token_id": null,
52
+ "exponential_decay_length_penalty": null,
53
+ "finetuning_task": null,
54
+ "forced_bos_token_id": null,
55
+ "forced_eos_token_id": null,
56
+ "hidden_act": "silu",
57
+ "id2label": {
58
+ "0": "LABEL_0",
59
+ "1": "LABEL_1"
60
+ },
61
+ "is_decoder": false,
62
+ "is_encoder_decoder": false,
63
+ "label2id": {
64
+ "LABEL_0": 0,
65
+ "LABEL_1": 1
66
+ },
67
+ "length_penalty": 1.0,
68
+ "max_length": 20,
69
+ "min_length": 0,
70
+ "model_type": "vllama3",
71
+ "no_repeat_ngram_size": 0,
72
+ "num_beam_groups": 1,
73
+ "num_beams": 1,
74
+ "num_key_value_heads": 1,
75
+ "num_return_sequences": 1,
76
+ "output_attentions": false,
77
+ "output_hidden_states": false,
78
+ "output_scores": false,
79
+ "pad_token_id": null,
80
+ "prefix": null,
81
+ "problem_type": null,
82
+ "pruned_heads": {},
83
+ "qk_layer_norms_perceiver": false,
84
+ "remove_invalid_values": false,
85
+ "repetition_penalty": 1.0,
86
+ "resampler_depth": 6,
87
+ "resampler_head_dim": 96,
88
+ "resampler_n_heads": 16,
89
+ "resampler_n_latents": 64,
90
+ "return_dict": true,
91
+ "return_dict_in_generate": false,
92
+ "sep_token_id": null,
93
+ "suppress_tokens": null,
94
+ "task_specific_params": null,
95
+ "temperature": 1.0,
96
+ "tf_legacy_loss": false,
97
+ "tie_encoder_decoder": false,
98
+ "tie_word_embeddings": true,
99
+ "tokenizer_class": null,
100
+ "top_k": 50,
101
+ "top_p": 1.0,
102
+ "torch_dtype": null,
103
+ "torchscript": false,
104
+ "transformers_version": "4.46.0",
105
+ "typical_p": 1.0,
106
+ "use_bfloat16": false
107
+ },
108
+ "pixel_shuffle_factor": 4,
109
+ "pretraining_tp": 1,
110
+ "qk_layer_norms": false,
111
+ "rms_norm_eps": 1e-05,
112
+ "rope_interleaved": false,
113
+ "rope_parameters": {
114
+ "rope_theta": 100000,
115
+ "rope_type": "default"
116
+ },
117
+ "tie_word_embeddings": false,
118
+ "transformers.js_config": {
119
+ "kv_cache_dtype": {
120
+ "fp16": "float16",
121
+ "q4f16": "float16"
122
+ }
123
+ },
124
+ "use_cache": true,
125
+ "use_resampler": false,
126
+ "vocab_size": 49280
127
+ },
128
+ "tie_word_embeddings": false,
129
+ "transformers.js_config": {
130
+ "kv_cache_dtype": {
131
+ "fp16": "float16",
132
+ "q4f16": "float16"
133
+ }
134
+ },
135
+ "transformers_version": "5.13.0",
136
+ "use_cache": false,
137
+ "use_reentrant_checkpointing": false,
138
+ "vision_config": {
139
+ "attention_dropout": 0.0,
140
+ "dtype": "bfloat16",
141
+ "hidden_act": "gelu_pytorch_tanh",
142
+ "hidden_size": 768,
143
+ "image_size": 512,
144
+ "initializer_range": 0.02,
145
+ "intermediate_size": 3072,
146
+ "layer_norm_eps": 1e-06,
147
+ "max_image_size": {
148
+ "longest_edge": 512
149
+ },
150
+ "model_type": "smolvlm_vision",
151
+ "num_attention_heads": 12,
152
+ "num_channels": 3,
153
+ "num_hidden_layers": 12,
154
+ "patch_size": 16,
155
+ "size": {
156
+ "longest_edge": 2048
157
+ },
158
+ "tie_word_embeddings": false,
159
+ "use_base_siglip": true
160
+ },
161
+ "vocab_size": 49280
162
+ }
generation_config.json ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ {
2
+ "_from_model_config": true,
3
+ "bos_token_id": 0,
4
+ "eos_token_id": 49279,
5
+ "pad_token_id": 2,
6
+ "transformers_version": "5.13.0"
7
+ }
mmproj-f16.gguf ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e490e084102dd8ffe720a7d3ca12f3f38e26689609d8362cb94d5ca203946e2d
3
+ size 190030496
model-Q8_0.gguf ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d1cb271c0dfd3b9fdd866e7ccaf94d16729cc6a5b2941cf71dad9797421d6e87
3
+ size 175053344
model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:554736c8d1af5d46d2a3738e833e4145e77b198b729666ef70ba55cfda696951
3
+ size 513028808
processor_config.json ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "image_processor": {
3
+ "do_convert_rgb": true,
4
+ "do_image_splitting": false,
5
+ "do_normalize": true,
6
+ "do_pad": true,
7
+ "do_rescale": true,
8
+ "do_resize": true,
9
+ "image_mean": [
10
+ 0.5,
11
+ 0.5,
12
+ 0.5
13
+ ],
14
+ "image_processor_type": "SmolVLMImageProcessor",
15
+ "image_std": [
16
+ 0.5,
17
+ 0.5,
18
+ 0.5
19
+ ],
20
+ "max_image_size": {
21
+ "longest_edge": 512
22
+ },
23
+ "resample": 1,
24
+ "rescale_factor": 0.00392156862745098,
25
+ "size": {
26
+ "longest_edge": 384
27
+ },
28
+ "video_sampling": {
29
+ "fps": 1,
30
+ "max_frames": 64,
31
+ "video_size": {
32
+ "longest_edge": 512
33
+ }
34
+ }
35
+ },
36
+ "image_seq_len": 64,
37
+ "processor_class": "SmolVLMProcessor",
38
+ "video_processor": {
39
+ "do_convert_rgb": true,
40
+ "do_image_splitting": false,
41
+ "do_normalize": true,
42
+ "do_pad": true,
43
+ "do_rescale": true,
44
+ "do_resize": true,
45
+ "do_sample_frames": false,
46
+ "fps": 1,
47
+ "image_mean": [
48
+ 0.5,
49
+ 0.5,
50
+ 0.5
51
+ ],
52
+ "image_std": [
53
+ 0.5,
54
+ 0.5,
55
+ 0.5
56
+ ],
57
+ "max_image_size": {
58
+ "longest_edge": 512
59
+ },
60
+ "num_frames": 64,
61
+ "resample": 1,
62
+ "rescale_factor": 0.00392156862745098,
63
+ "return_metadata": false,
64
+ "size": {
65
+ "longest_edge": 384
66
+ },
67
+ "video_processor_type": "SmolVLMVideoProcessor",
68
+ "video_sampling": {
69
+ "fps": 1,
70
+ "max_frames": 64,
71
+ "video_size": {
72
+ "longest_edge": 384
73
+ }
74
+ }
75
+ }
76
+ }
tokenizer.json ADDED
The diff for this file is too large to render. See raw diff
 
tokenizer_config.json ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "add_prefix_space": false,
3
+ "backend": "tokenizers",
4
+ "bos_token": "<|im_start|>",
5
+ "clean_up_tokenization_spaces": false,
6
+ "do_image_splitting": false,
7
+ "end_of_utterance_token": "<end_of_utterance>",
8
+ "eos_token": "<end_of_utterance>",
9
+ "fake_image_token": "<fake_token_around_image>",
10
+ "global_image_token": "<global-img>",
11
+ "image_token": "<image>",
12
+ "is_local": true,
13
+ "legacy": false,
14
+ "local_files_only": false,
15
+ "max_length": null,
16
+ "model_max_length": 8192,
17
+ "model_specific_special_tokens": {
18
+ "end_of_utterance_token": "<end_of_utterance>",
19
+ "fake_image_token": "<fake_token_around_image>",
20
+ "global_image_token": "<global-img>",
21
+ "image_token": "<image>"
22
+ },
23
+ "pad_to_multiple_of": null,
24
+ "pad_token": "<|im_end|>",
25
+ "pad_token_type_id": 0,
26
+ "padding_side": "right",
27
+ "processor_class": "SmolVLMProcessor",
28
+ "size": {
29
+ "longest_edge": 384
30
+ },
31
+ "tokenizer_class": "TokenizersBackend",
32
+ "truncation_side": "left",
33
+ "unk_token": "<|endoftext|>",
34
+ "vocab_size": 49152
35
+ }