Skip to content

Commit b69ba56

Browse files
committed
fix: fix crashing on inference due to missing model types
1 parent 9486f46 commit b69ba56

2 files changed

Lines changed: 51 additions & 13 deletions

File tree

anylabeling/configs/auto_labeling/models.yaml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,19 @@
1+
- name: "sam2.1_hiera_tiny_20260221"
2+
display_name: Segment Anything 2.1 (Hiera-Tiny)
3+
download_url: https://huggingface.co/vietanhdev/segment-anything-2.1-onnx-models/resolve/main/sam2.1_hiera_tiny_20260221.zip
4+
type: segment_anything
5+
- name: "sam2.1_hiera_small_20260221"
6+
display_name: Segment Anything 2.1 (Hiera-Small)
7+
download_url: https://huggingface.co/vietanhdev/segment-anything-2.1-onnx-models/resolve/main/sam2.1_hiera_small_20260221.zip
8+
type: segment_anything
9+
- name: "sam2.1_hiera_base_plus_20260221"
10+
display_name: Segment Anything 2.1 (Hiera-Base+)
11+
download_url: https://huggingface.co/vietanhdev/segment-anything-2.1-onnx-models/resolve/main/sam2.1_hiera_base_plus_20260221.zip
12+
type: segment_anything
13+
- name: "sam2.1_hiera_large_20260221"
14+
display_name: Segment Anything 2.1 (Hiera-Large)
15+
download_url: https://huggingface.co/vietanhdev/segment-anything-2.1-onnx-models/resolve/main/sam2.1_hiera_large_20260221.zip
16+
type: segment_anything
117
- name: "sam2_1_coreml_large"
218
display_name: Segment Anything 2.1 (Large) CoreML
319
download_url: https://huggingface.co/apple/coreml-sam2.1-large
@@ -22,48 +38,64 @@
2238
- name: "sam2_hiera_tiny_20240803"
2339
display_name: Segment Anything 2 (Hiera-Tiny)
2440
download_url: https://huggingface.co/vietanhdev/segment-anything-2-onnx-models/resolve/main/sam2_hiera_tiny.zip
41+
type: segment_anything
2542
- name: "sam2_hiera_small_20240803"
2643
display_name: Segment Anything 2 (Hiera-Small)
2744
download_url: https://huggingface.co/vietanhdev/segment-anything-2-onnx-models/resolve/main/sam2_hiera_small.zip
45+
type: segment_anything
2846
- name: "sam2_hiera_base_plus_20240803"
2947
display_name: Segment Anything 2 (Hiera-Base+)
3048
download_url: https://huggingface.co/vietanhdev/segment-anything-2-onnx-models/resolve/main/sam2_hiera_base_plus.zip
49+
type: segment_anything
3150
- name: "sam2_hiera_large_20240803"
3251
display_name: Segment Anything 2 (Hiera-Large)
3352
download_url: https://huggingface.co/vietanhdev/segment-anything-2-onnx-models/resolve/main/sam2_hiera_large.zip
53+
type: segment_anything
3454
- name: "mobile_sam_20230629"
3555
display_name: Segment Anything (MobileSAM)
3656
download_url: https://huggingface.co/vietanhdev/segment-anything-onnx-models/resolve/main/mobile_sam_20230629.zip
57+
type: segment_anything
3758
- name: "sam_vit_b_01ec64"
3859
display_name: Segment Anything (ViT-B)
3960
download_url: https://huggingface.co/vietanhdev/segment-anything-onnx-models/resolve/main/sam_vit_b_01ec64.zip
61+
type: segment_anything
4062
- name: "sam_vit_b_01ec64_quant"
4163
display_name: Segment Anything (ViT-B Quant)
4264
download_url: https://huggingface.co/vietanhdev/segment-anything-onnx-models/resolve/main/sam_vit_b_01ec64_quant.zip
65+
type: segment_anything
4366
- name: "sam_vit_l_0b3195"
4467
display_name: Segment Anything (ViT-L)
4568
download_url: https://huggingface.co/vietanhdev/segment-anything-onnx-models/resolve/main/sam_vit_l_0b3195.zip
69+
type: segment_anything
4670
- name: "sam_vit_l_0b3195_quant"
4771
display_name: Segment Anything (ViT-L Quant)
4872
download_url: https://huggingface.co/vietanhdev/segment-anything-onnx-models/resolve/main/sam_vit_l_0b3195_quant.zip
73+
type: segment_anything
4974
- name: "sam_vit_h_4b8939"
5075
display_name: Segment Anything (ViT-H)
5176
download_url: https://huggingface.co/vietanhdev/segment-anything-onnx-models/resolve/main/sam_vit_h_4b8939.zip
77+
type: segment_anything
5278
- name: "sam_vit_h_4b8939_quant"
5379
display_name: Segment Anything (ViT-H Quant)
5480
download_url: https://huggingface.co/vietanhdev/segment-anything-onnx-models/resolve/main/sam_vit_h_4b8939_quant.zip
81+
type: segment_anything
5582
- name: "yolov8n-r20230415"
5683
display_name: YOLOv8n
5784
download_url: https://github.com/vietanhdev/anylabeling-assets/releases/download/v0.4.0/yolov8n-r20230415.zip
85+
type: yolov8
5886
- name: "yolov8s-r20230415"
5987
display_name: YOLOv8s
6088
download_url: https://github.com/vietanhdev/anylabeling-assets/releases/download/v0.4.0/yolov8s-r20230415.zip
89+
type: yolov8
6190
- name: "yolov8m-r20230415"
6291
display_name: YOLOv8m
6392
download_url: https://github.com/vietanhdev/anylabeling-assets/releases/download/v0.4.0/yolov8m-r20230415.zip
93+
type: yolov8
6494
- name: "yolov8l-r20230415"
6595
display_name: YOLOv8l
6696
download_url: https://github.com/vietanhdev/anylabeling-assets/releases/download/v0.4.0/yolov8l-r20230415.zip
97+
type: yolov8
6798
- name: "yolov8x-r20230415"
6899
display_name: YOLOv8x
69100
download_url: https://github.com/vietanhdev/anylabeling-assets/releases/download/v0.4.0/yolov8x-r20230415.zip
101+
type: yolov8

anylabeling/services/auto_labeling/model_manager.py

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -108,14 +108,19 @@ def load_model_configs(self):
108108
model_config = copy.deepcopy(model)
109109
config_file = model.get("config_file", None)
110110
if config_file:
111-
with open(config_file) as f:
112-
model_config = yaml.safe_load(f)
113-
model_config["config_file"] = os.path.normpath(
114-
os.path.abspath(config_file)
115-
)
116-
model_config["is_custom_model"] = model.get(
117-
"is_custom_model", False
118-
)
111+
# Use utf-8-sig to strip any UTF-8 BOM that may be present in
112+
# config files created on Windows (BOM in the first key would
113+
# turn "type" into "\ufefftype", causing a KeyError on load).
114+
with open(config_file, encoding="utf-8-sig") as f:
115+
file_config = yaml.safe_load(f)
116+
# Overlay file config on top of master config so that fields
117+
# present in models.yaml (e.g. "type") are never lost even if
118+
# the on-disk file is missing them.
119+
model_config.update(file_config)
120+
model_config["config_file"] = os.path.normpath(
121+
os.path.abspath(config_file)
122+
)
123+
model_config["is_custom_model"] = model.get("is_custom_model", False)
119124
model_configs.append(model_config)
120125

121126
# Sort by last used
@@ -181,7 +186,7 @@ def load_custom_model(self, config_file):
181186

182187
# Check config file content
183188
model_config = {}
184-
with open(config_file) as f:
189+
with open(config_file, encoding="utf-8-sig") as f:
185190
model_config = yaml.safe_load(f)
186191
model_config["config_file"] = os.path.abspath(config_file)
187192
if not model_config:
@@ -353,7 +358,7 @@ def _download_and_extract_model(self, model_config):
353358
# Check if model is already downloaded
354359
if not os.path.exists(config_file):
355360
raise ValueError(self.tr("Error in loading config file."))
356-
with open(config_file) as f:
361+
with open(config_file, encoding="utf-8-sig") as f:
357362
model_config = yaml.safe_load(f)
358363
if model_config.get("has_downloaded", False):
359364
return
@@ -381,12 +386,13 @@ def _download_and_extract_model(self, model_config):
381386
# Clean up
382387
shutil.rmtree(tmp_dir)
383388

384-
# Update config file
385-
with open(config_file) as f:
389+
# Update config file – use utf-8-sig to strip any BOM introduced
390+
# by Windows tools when the zip was created.
391+
with open(config_file, encoding="utf-8-sig") as f:
386392
model_config = yaml.safe_load(f)
387393
model_config["has_downloaded"] = True
388394
model_config["config_file"] = config_file
389-
with open(config_file, "w") as f:
395+
with open(config_file, "w", encoding="utf-8") as f:
390396
yaml.dump(model_config, f)
391397

392398
return model_config

0 commit comments

Comments
 (0)