Skip to content

Commit f6edb4a

Browse files
Merge pull request #193 from roboflow/feature/introduce_model_aliases
Introduce model aliases
2 parents 91a7d06 + bd2c5ff commit f6edb4a

File tree

6 files changed

+58
-1
lines changed

6 files changed

+58
-1
lines changed

docs/quickstart/explore_models.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,17 @@ With Inference, you can run any of the 50,000+ models available on Roboflow Univ
22

33
All models run on your own hardware.
44

5+
## Run pre-trained YOLOv8 model
6+
Roboflow Universe exposes pre-trained YOLOv8 models.
7+
8+
* object-detection: `yolov8{model_size}-{inference_resolution}`
9+
* supported model sizes: `[n, s, m, l, x]`
10+
* supported inference resolutions: `[640, 1280]`
11+
12+
* instance-segmentation: `yolov8{model_size}-seg-{inference_resolution}`
13+
* supported model sizes: `[n, s, m, l, x]`
14+
* supported inference resolutions: `[640, 1280]`
15+
516
## Run a Model on Universe
617

718
In the first example, we showed how to run a rock paper scissors model. This model was hosted on Universe. Let's find another model to try.

inference/core/models/roboflow.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
from inference.core.utils.onnx import get_onnxruntime_execution_providers
6161
from inference.core.utils.preprocess import letterbox_image, prepare
6262
from inference.core.utils.visualisation import draw_detection_predictions
63+
from inference.models.aliases import resolve_roboflow_model_alias
6364

6465
NUM_S3_RETRY = 5
6566
SLEEP_SECONDS_BETWEEN_RETRIES = 3
@@ -123,7 +124,7 @@ def __init__(
123124
f"Visit https://docs.roboflow.com/api-reference/authentication#retrieve-an-api-key to learn how to "
124125
f"retrieve the key."
125126
)
126-
127+
model_id = resolve_roboflow_model_alias(model_id=model_id)
127128
self.dataset_id, self.version_id = model_id.split("/")
128129
self.endpoint = model_id
129130
self.device_id = GLOBAL_DEVICE_ID

inference/core/registries/roboflow.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
)
1818
from inference.core.utils.file_system import dump_json, read_json
1919
from inference.core.utils.roboflow import get_model_id_chunks
20+
from inference.models.aliases import resolve_roboflow_model_alias
2021

2122
GENERIC_MODELS = {
2223
"clip": ("embed", "clip"),
@@ -69,6 +70,7 @@ def get_model_type(model_id: str, api_key: str) -> Tuple[TaskType, ModelType]:
6970
MissingDefaultModelError: If default model is not configured and API does not provide this info
7071
MalformedRoboflowAPIResponseError: Roboflow API responds in invalid format.
7172
"""
73+
model_id = resolve_roboflow_model_alias(model_id=model_id)
7274
dataset_id, version_id = get_model_id_chunks(model_id=model_id)
7375
if dataset_id in GENERIC_MODELS:
7476
logger.debug(f"Loading generic model: {dataset_id}.")

inference/models/aliases.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
REGISTERED_ALIASES = {
2+
"yolov8n-640": "coco/3",
3+
"yolov8n-1280": "coco/9",
4+
"yolov8s-640": "coco/6",
5+
"yolov8s-1280": "coco/10",
6+
"yolov8m-640": "coco/8",
7+
"yolov8m-1280": "coco/11",
8+
"yolov8l-640": "coco/7",
9+
"yolov8l-1280": "coco/12",
10+
"yolov8x-640": "coco/5",
11+
"yolov8x-1280": "coco/13",
12+
"yolov8n-seg-640": "coco-dataset-vdnr1/2",
13+
"yolov8n-seg-1280": "coco-dataset-vdnr1/7",
14+
"yolov8s-seg-640": "coco-dataset-vdnr1/4",
15+
"yolov8s-seg-1280": "coco-dataset-vdnr1/8",
16+
"yolov8m-seg-640": "coco-dataset-vdnr1/5",
17+
"yolov8m-seg-1280": "coco-dataset-vdnr1/9",
18+
"yolov8l-seg-640": "coco-dataset-vdnr1/6",
19+
"yolov8l-seg-1280": "coco-dataset-vdnr1/10",
20+
"yolov8x-seg-640": "coco-dataset-vdnr1/3",
21+
"yolov8x-seg-1280": "coco-dataset-vdnr1/11",
22+
}
23+
24+
25+
def resolve_roboflow_model_alias(model_id: str) -> str:
26+
return REGISTERED_ALIASES.get(model_id, model_id)

tests/inference/unit_tests/models/__init__.py

Whitespace-only changes.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from inference.models.aliases import resolve_roboflow_model_alias
2+
3+
4+
def test_resolve_roboflow_model_alias_when_registry_hit_should_happen() -> None:
5+
# when
6+
result = resolve_roboflow_model_alias(model_id="yolov8m-1280")
7+
8+
# then
9+
assert result == "coco/11"
10+
11+
12+
def test_resolve_roboflow_model_alias_when_registry_hit_should_not_happen() -> None:
13+
# when
14+
result = resolve_roboflow_model_alias(model_id="my_project/3")
15+
16+
# then
17+
assert result == "my_project/3"

0 commit comments

Comments
 (0)