From ef8f941fef5621391aed137b7471d78b08ebcd81 Mon Sep 17 00:00:00 2001 From: Matt Le Date: Wed, 10 Dec 2025 10:16:53 -0800 Subject: [PATCH 1/3] Include entire sam3 package instead of just sam3 and sam3.model there are several imports within the `sam3.model` package that reference other packages within `sam3`. This fixes the package structure so that you can `pip install` the package and `import sam3` --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index e4998de0..debfe929 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -82,8 +82,8 @@ train = [ "Homepage" = "https://github.com/facebookresearch/sam3" "Bug Tracker" = "https://github.com/facebookresearch/sam3/issues" -[tool.setuptools] -packages = ["sam3", "sam3.model"] +[tool.setuptools.packages.find] +include = ["sam3"] [tool.setuptools.dynamic] version = {attr = "sam3.__version__"} From badedbdf60baafeb48bad9cbb64be7c917157f4c Mon Sep 17 00:00:00 2001 From: Matt Le Date: Wed, 10 Dec 2025 12:41:53 -0800 Subject: [PATCH 2/3] Move bpe file to sam3/assets This way we can include it as package data --- examples/sam3_agent.ipynb | 476 +++++++++--------- pyproject.toml | 6 +- .../assets}/bpe_simple_vocab_16e6.txt.gz | Bin sam3/model_builder.py | 10 +- sam3/train/configs/eval_base.yaml | 2 +- .../odinw13/odinw_text_and_visual.yaml | 2 +- .../configs/odinw13/odinw_text_only.yaml | 2 +- .../odinw13/odinw_text_only_positive.yaml | 2 +- .../odinw13/odinw_text_only_train.yaml | 2 +- .../configs/odinw13/odinw_visual_only.yaml | 2 +- .../roboflow_v100/roboflow_v100_eval.yaml | 2 +- .../roboflow_v100_full_ft_100_images.yaml | 2 +- .../saco_video_evals/saco_veval_sav_test.yaml | 2 +- .../saco_veval_sav_test_noheur.yaml | 2 +- .../saco_video_evals/saco_veval_sav_val.yaml | 2 +- .../saco_veval_sav_val_noheur.yaml | 2 +- .../saco_veval_smartglasses_test.yaml | 2 +- .../saco_veval_smartglasses_test_noheur.yaml | 2 +- .../saco_veval_smartglasses_val.yaml | 2 +- .../saco_veval_smartglasses_val_noheur.yaml | 2 +- .../saco_veval_yt1b_test.yaml | 2 +- .../saco_veval_yt1b_test_noheur.yaml | 2 +- .../saco_video_evals/saco_veval_yt1b_val.yaml | 2 +- .../saco_veval_yt1b_val_noheur.yaml | 2 +- 24 files changed, 269 insertions(+), 263 deletions(-) rename {assets => sam3/assets}/bpe_simple_vocab_16e6.txt.gz (100%) diff --git a/examples/sam3_agent.ipynb b/examples/sam3_agent.ipynb index 3a1f9a3b..23177e43 100644 --- a/examples/sam3_agent.ipynb +++ b/examples/sam3_agent.ipynb @@ -1,242 +1,242 @@ { - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "# Copyright (c) Meta Platforms, Inc. and affiliates." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# SAM 3 Agent" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This notebook shows an example of how an MLLM can use SAM 3 as a tool, i.e., \"SAM 3 Agent\", to segment more complex text queries such as \"the leftmost child wearing blue vest\"." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Env Setup" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "First install `sam3` in your environment using the [installation instructions](https://github.com/facebookresearch/sam3?tab=readme-ov-file#installation) in the repository." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import torch\n", - "# turn on tfloat32 for Ampere GPUs\n", - "# https://pytorch.org/docs/stable/notes/cuda.html#tensorfloat-32-tf32-on-ampere-devices\n", - "torch.backends.cuda.matmul.allow_tf32 = True\n", - "torch.backends.cudnn.allow_tf32 = True\n", - "\n", - "# use bfloat16 for the entire notebook. If your card doesn't support it, try float16 instead\n", - "torch.autocast(\"cuda\", dtype=torch.bfloat16).__enter__()\n", - "\n", - "# inference mode for the whole notebook. Disable if you need gradients\n", - "torch.inference_mode().__enter__()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "\n", - "SAM3_ROOT = os.path.dirname(os.getcwd())\n", - "os.chdir(SAM3_ROOT)\n", - "\n", - "# setup GPU to use - A single GPU is good with the purpose of this demo\n", - "os.environ[\"CUDA_VISIBLE_DEVICES\"] = \"0\"\n", - "_ = os.system(\"nvidia-smi\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Build SAM3 Model" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import sam3\n", - "from sam3 import build_sam3_image_model\n", - "from sam3.model.sam3_image_processor import Sam3Processor\n", - "\n", - "sam3_root = os.path.join(os.path.dirname(sam3.__file__), \"..\")\n", - "bpe_path = f\"{sam3_root}/assets/bpe_simple_vocab_16e6.txt.gz\"\n", - "model = build_sam3_image_model(bpe_path=bpe_path)\n", - "processor = Sam3Processor(model, confidence_threshold=0.5)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## LLM Setup\n", - "\n", - "Config which MLLM to use, it can either be a model served by vLLM that you launch from your own machine or a model is served via external API. If you want to using a vLLM model, we also provided insturctions below." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "LLM_CONFIGS = {\n", - " # vLLM-served models\n", - " \"qwen3_vl_8b_thinking\": {\n", - " \"provider\": \"vllm\",\n", - " \"model\": \"Qwen/Qwen3-VL-8B-Thinking\",\n", - " }, \n", - " # models served via external APIs\n", - " # add your own\n", - "}\n", - "\n", - "model = \"qwen3_vl_8b_thinking\"\n", - "LLM_API_KEY = \"DUMMY_API_KEY\"\n", - "\n", - "llm_config = LLM_CONFIGS[model]\n", - "llm_config[\"api_key\"] = LLM_API_KEY\n", - "llm_config[\"name\"] = model\n", - "\n", - "# setup API endpoint\n", - "if llm_config[\"provider\"] == \"vllm\":\n", - " LLM_SERVER_URL = \"http://0.0.0.0:8001/v1\" # replace this with your vLLM server address as needed\n", - "else:\n", - " LLM_SERVER_URL = llm_config[\"base_url\"]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Setup vLLM server \n", - "This step is only required if you are using a model served by vLLM, skip this step if you are calling LLM using an API like Gemini and GPT.\n", - "\n", - "* Install vLLM (in a separate conda env from SAM 3 to avoid dependency conflicts).\n", - " ```bash\n", - " conda create -n vllm python=3.12\n", - " pip install vllm --extra-index-url https://download.pytorch.org/whl/cu128\n", - " ```\n", - "* Start vLLM server on the same machine of this notebook\n", - " ```bash\n", - " # qwen 3 VL 8B thinking\n", - " vllm serve Qwen/Qwen3-VL-8B-Thinking --tensor-parallel-size 4 --allowed-local-media-path / --enforce-eager --port 8001\n", - " ```" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Run SAM3 Agent Inference" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from functools import partial\n", - "from IPython.display import display, Image\n", - "from sam3.agent.client_llm import send_generate_request as send_generate_request_orig\n", - "from sam3.agent.client_sam3 import call_sam_service as call_sam_service_orig\n", - "from sam3.agent.inference import run_single_image_inference" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "output": { - "id": 689664053567678, - "loadingStatus": "loaded" + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# Copyright (c) Meta Platforms, Inc. and affiliates." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# SAM 3 Agent" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This notebook shows an example of how an MLLM can use SAM 3 as a tool, i.e., \"SAM 3 Agent\", to segment more complex text queries such as \"the leftmost child wearing blue vest\"." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Env Setup" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First install `sam3` in your environment using the [installation instructions](https://github.com/facebookresearch/sam3?tab=readme-ov-file#installation) in the repository." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import torch\n", + "# turn on tfloat32 for Ampere GPUs\n", + "# https://pytorch.org/docs/stable/notes/cuda.html#tensorfloat-32-tf32-on-ampere-devices\n", + "torch.backends.cuda.matmul.allow_tf32 = True\n", + "torch.backends.cudnn.allow_tf32 = True\n", + "\n", + "# use bfloat16 for the entire notebook. If your card doesn't support it, try float16 instead\n", + "torch.autocast(\"cuda\", dtype=torch.bfloat16).__enter__()\n", + "\n", + "# inference mode for the whole notebook. Disable if you need gradients\n", + "torch.inference_mode().__enter__()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "SAM3_ROOT = os.path.dirname(os.getcwd())\n", + "os.chdir(SAM3_ROOT)\n", + "\n", + "# setup GPU to use - A single GPU is good with the purpose of this demo\n", + "os.environ[\"CUDA_VISIBLE_DEVICES\"] = \"0\"\n", + "_ = os.system(\"nvidia-smi\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Build SAM3 Model" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import sam3\n", + "from sam3 import build_sam3_image_model\n", + "from sam3.model.sam3_image_processor import Sam3Processor\n", + "\n", + "sam3_root = os.path.dirname(sam3.__file__)\n", + "bpe_path = f\"{sam3_root}/assets/bpe_simple_vocab_16e6.txt.gz\"\n", + "model = build_sam3_image_model(bpe_path=bpe_path)\n", + "processor = Sam3Processor(model, confidence_threshold=0.5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## LLM Setup\n", + "\n", + "Config which MLLM to use, it can either be a model served by vLLM that you launch from your own machine or a model is served via external API. If you want to using a vLLM model, we also provided insturctions below." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "LLM_CONFIGS = {\n", + " # vLLM-served models\n", + " \"qwen3_vl_8b_thinking\": {\n", + " \"provider\": \"vllm\",\n", + " \"model\": \"Qwen/Qwen3-VL-8B-Thinking\",\n", + " },\n", + " # models served via external APIs\n", + " # add your own\n", + "}\n", + "\n", + "model = \"qwen3_vl_8b_thinking\"\n", + "LLM_API_KEY = \"DUMMY_API_KEY\"\n", + "\n", + "llm_config = LLM_CONFIGS[model]\n", + "llm_config[\"api_key\"] = LLM_API_KEY\n", + "llm_config[\"name\"] = model\n", + "\n", + "# setup API endpoint\n", + "if llm_config[\"provider\"] == \"vllm\":\n", + " LLM_SERVER_URL = \"http://0.0.0.0:8001/v1\" # replace this with your vLLM server address as needed\n", + "else:\n", + " LLM_SERVER_URL = llm_config[\"base_url\"]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Setup vLLM server \n", + "This step is only required if you are using a model served by vLLM, skip this step if you are calling LLM using an API like Gemini and GPT.\n", + "\n", + "* Install vLLM (in a separate conda env from SAM 3 to avoid dependency conflicts).\n", + " ```bash\n", + " conda create -n vllm python=3.12\n", + " pip install vllm --extra-index-url https://download.pytorch.org/whl/cu128\n", + " ```\n", + "* Start vLLM server on the same machine of this notebook\n", + " ```bash\n", + " # qwen 3 VL 8B thinking\n", + " vllm serve Qwen/Qwen3-VL-8B-Thinking --tensor-parallel-size 4 --allowed-local-media-path / --enforce-eager --port 8001\n", + " ```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Run SAM3 Agent Inference" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from functools import partial\n", + "from IPython.display import display, Image\n", + "from sam3.agent.client_llm import send_generate_request as send_generate_request_orig\n", + "from sam3.agent.client_sam3 import call_sam_service as call_sam_service_orig\n", + "from sam3.agent.inference import run_single_image_inference" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "output": { + "id": 689664053567678, + "loadingStatus": "loaded" + } + }, + "outputs": [], + "source": [ + "# prepare input args and run single image inference\n", + "image = \"assets/images/test_image.jpg\"\n", + "prompt = \"the leftmost child wearing blue vest\"\n", + "image = os.path.abspath(image)\n", + "send_generate_request = partial(send_generate_request_orig, server_url=LLM_SERVER_URL, model=llm_config[\"model\"], api_key=llm_config[\"api_key\"])\n", + "call_sam_service = partial(call_sam_service_orig, sam3_processor=processor)\n", + "output_image_path = run_single_image_inference(\n", + " image, prompt, llm_config, send_generate_request, call_sam_service,\n", + " debug=True, output_dir=\"agent_output\"\n", + ")\n", + "\n", + "# display output\n", + "if output_image_path is not None:\n", + " display(Image(filename=output_image_path))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "fileHeader": "", + "fileUid": "be59e249-6c09-4634-a9e7-1f06fd233c42", + "isAdHoc": false, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.11" } - }, - "outputs": [], - "source": [ - "# prepare input args and run single image inference\n", - "image = \"assets/images/test_image.jpg\"\n", - "prompt = \"the leftmost child wearing blue vest\"\n", - "image = os.path.abspath(image)\n", - "send_generate_request = partial(send_generate_request_orig, server_url=LLM_SERVER_URL, model=llm_config[\"model\"], api_key=llm_config[\"api_key\"])\n", - "call_sam_service = partial(call_sam_service_orig, sam3_processor=processor)\n", - "output_image_path = run_single_image_inference(\n", - " image, prompt, llm_config, send_generate_request, call_sam_service, \n", - " debug=True, output_dir=\"agent_output\"\n", - ")\n", - "\n", - "# display output\n", - "if output_image_path is not None:\n", - " display(Image(filename=output_image_path))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "fileHeader": "", - "fileUid": "be59e249-6c09-4634-a9e7-1f06fd233c42", - "isAdHoc": false, - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.12.11" - } - }, - "nbformat": 4, - "nbformat_minor": 4 + "nbformat": 4, + "nbformat_minor": 2 } diff --git a/pyproject.toml b/pyproject.toml index debfe929..86ae1951 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -83,7 +83,11 @@ train = [ "Bug Tracker" = "https://github.com/facebookresearch/sam3/issues" [tool.setuptools.packages.find] -include = ["sam3"] +include = ["sam3*"] +exclude = ["build*", "scripts*", "examples*"] + +[tool.setuptools.package-data] +sam3 = ["assets/*.txt.gz"] [tool.setuptools.dynamic] version = {attr = "sam3.__version__"} diff --git a/assets/bpe_simple_vocab_16e6.txt.gz b/sam3/assets/bpe_simple_vocab_16e6.txt.gz similarity index 100% rename from assets/bpe_simple_vocab_16e6.txt.gz rename to sam3/assets/bpe_simple_vocab_16e6.txt.gz diff --git a/sam3/model_builder.py b/sam3/model_builder.py index 058bbec3..796a87ed 100644 --- a/sam3/model_builder.py +++ b/sam3/model_builder.py @@ -1,6 +1,7 @@ # Copyright (c) Meta Platforms, Inc. and affiliates. All Rights Reserved import os +import pkg_resources from typing import Optional import torch @@ -580,9 +581,10 @@ def build_sam3_image_model( A SAM3 image model """ if bpe_path is None: - bpe_path = os.path.join( - os.path.dirname(__file__), "..", "assets", "bpe_simple_vocab_16e6.txt.gz" + bpe_path = pkg_resources.resource_filename( + "sam3", "assets/bpe_simple_vocab_16e6.txt.gz" ) + # Create visual components compile_mode = "default" if compile else None vision_encoder = _create_vision_backbone( @@ -668,8 +670,8 @@ def build_sam3_video_model( Sam3VideoInferenceWithInstanceInteractivity: The instantiated dense tracking model """ if bpe_path is None: - bpe_path = os.path.join( - os.path.dirname(__file__), "..", "assets", "bpe_simple_vocab_16e6.txt.gz" + bpe_path = pkg_resources.resource_filename( + "sam3", "assets/bpe_simple_vocab_16e6.txt.gz" ) # Build Tracker module diff --git a/sam3/train/configs/eval_base.yaml b/sam3/train/configs/eval_base.yaml index 20890d86..2a15f2a0 100644 --- a/sam3/train/configs/eval_base.yaml +++ b/sam3/train/configs/eval_base.yaml @@ -39,7 +39,7 @@ paths: # path to the SA-Co/silver images silver_img_path: - bpe_path: # This should be under assets/bpe_simple_vocab_16e6.txt.gz + bpe_path: # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz # ============================================================================ diff --git a/sam3/train/configs/odinw13/odinw_text_and_visual.yaml b/sam3/train/configs/odinw13/odinw_text_and_visual.yaml index 51e93b45..1c026e2e 100644 --- a/sam3/train/configs/odinw13/odinw_text_and_visual.yaml +++ b/sam3/train/configs/odinw13/odinw_text_and_visual.yaml @@ -10,7 +10,7 @@ defaults: paths: odinw_data_root: experiment_log_dir: - bpe_path: # This should be under assets/bpe_simple_vocab_16e6.txt.gz + bpe_path: # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz supercategory_tuple: ${all_odinw_supercategories.${string:${submitit.job_array.task_index}}} # Validation transforms pipeline diff --git a/sam3/train/configs/odinw13/odinw_text_only.yaml b/sam3/train/configs/odinw13/odinw_text_only.yaml index e28fa5df..de532bbe 100644 --- a/sam3/train/configs/odinw13/odinw_text_only.yaml +++ b/sam3/train/configs/odinw13/odinw_text_only.yaml @@ -10,7 +10,7 @@ defaults: paths: odinw_data_root: experiment_log_dir: - bpe_path: # This should be under assets/bpe_simple_vocab_16e6.txt.gz + bpe_path: # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz supercategory_tuple: ${all_odinw_supercategories.${string:${submitit.job_array.task_index}}} diff --git a/sam3/train/configs/odinw13/odinw_text_only_positive.yaml b/sam3/train/configs/odinw13/odinw_text_only_positive.yaml index 9a86a523..dcd37804 100644 --- a/sam3/train/configs/odinw13/odinw_text_only_positive.yaml +++ b/sam3/train/configs/odinw13/odinw_text_only_positive.yaml @@ -10,7 +10,7 @@ defaults: paths: odinw_data_root: experiment_log_dir: - bpe_path: # This should be under assets/bpe_simple_vocab_16e6.txt.gz + bpe_path: # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz supercategory_tuple: ${all_odinw_supercategories.${string:${submitit.job_array.task_index}}} diff --git a/sam3/train/configs/odinw13/odinw_text_only_train.yaml b/sam3/train/configs/odinw13/odinw_text_only_train.yaml index eb03cdf9..0a26bd5a 100644 --- a/sam3/train/configs/odinw13/odinw_text_only_train.yaml +++ b/sam3/train/configs/odinw13/odinw_text_only_train.yaml @@ -10,7 +10,7 @@ defaults: paths: odinw_data_root: experiment_log_dir: - bpe_path: # This should be under assets/bpe_simple_vocab_16e6.txt.gz + bpe_path: # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz odinw_train: diff --git a/sam3/train/configs/odinw13/odinw_visual_only.yaml b/sam3/train/configs/odinw13/odinw_visual_only.yaml index e724f2d8..46a32814 100644 --- a/sam3/train/configs/odinw13/odinw_visual_only.yaml +++ b/sam3/train/configs/odinw13/odinw_visual_only.yaml @@ -10,7 +10,7 @@ defaults: paths: odinw_data_root: experiment_log_dir: - bpe_path: # This should be under assets/bpe_simple_vocab_16e6.txt.gz + bpe_path: # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz supercategory_tuple: ${all_odinw_supercategories.${string:${submitit.job_array.task_index}}} diff --git a/sam3/train/configs/roboflow_v100/roboflow_v100_eval.yaml b/sam3/train/configs/roboflow_v100/roboflow_v100_eval.yaml index 361e622b..c5e4cce3 100644 --- a/sam3/train/configs/roboflow_v100/roboflow_v100_eval.yaml +++ b/sam3/train/configs/roboflow_v100/roboflow_v100_eval.yaml @@ -8,7 +8,7 @@ defaults: paths: roboflow_vl_100_root: experiment_log_dir: - bpe_path: # This should be under assets/bpe_simple_vocab_16e6.txt.gz + bpe_path: # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz # Roboflow dataset configuration roboflow_train: diff --git a/sam3/train/configs/roboflow_v100/roboflow_v100_full_ft_100_images.yaml b/sam3/train/configs/roboflow_v100/roboflow_v100_full_ft_100_images.yaml index 6b95f628..480a218b 100644 --- a/sam3/train/configs/roboflow_v100/roboflow_v100_full_ft_100_images.yaml +++ b/sam3/train/configs/roboflow_v100/roboflow_v100_full_ft_100_images.yaml @@ -8,7 +8,7 @@ defaults: paths: roboflow_vl_100_root: experiment_log_dir: - bpe_path: # This should be under assets/bpe_simple_vocab_16e6.txt.gz + bpe_path: # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz # Roboflow dataset configuration roboflow_train: diff --git a/sam3/train/configs/saco_video_evals/saco_veval_sav_test.yaml b/sam3/train/configs/saco_video_evals/saco_veval_sav_test.yaml index b5bed477..001a0927 100644 --- a/sam3/train/configs/saco_video_evals/saco_veval_sav_test.yaml +++ b/sam3/train/configs/saco_video_evals/saco_veval_sav_test.yaml @@ -11,7 +11,7 @@ paths: experiment_log_dir: ytvis_json: /saco_veval_sav_test.json ytvis_dir : - bpe_path: # This should be under assets/bpe_simple_vocab_16e6.txt.gz + bpe_path: # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz num_videos: null # ============================================================================ diff --git a/sam3/train/configs/saco_video_evals/saco_veval_sav_test_noheur.yaml b/sam3/train/configs/saco_video_evals/saco_veval_sav_test_noheur.yaml index abc3289c..a899d354 100644 --- a/sam3/train/configs/saco_video_evals/saco_veval_sav_test_noheur.yaml +++ b/sam3/train/configs/saco_video_evals/saco_veval_sav_test_noheur.yaml @@ -11,7 +11,7 @@ paths: experiment_log_dir: ytvis_json: /saco_veval_sav_test.json ytvis_dir : - bpe_path: # This should be under assets/bpe_simple_vocab_16e6.txt.gz + bpe_path: # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz num_videos: null # ============================================================================ diff --git a/sam3/train/configs/saco_video_evals/saco_veval_sav_val.yaml b/sam3/train/configs/saco_video_evals/saco_veval_sav_val.yaml index 25c6e609..b4eab6cf 100644 --- a/sam3/train/configs/saco_video_evals/saco_veval_sav_val.yaml +++ b/sam3/train/configs/saco_video_evals/saco_veval_sav_val.yaml @@ -11,7 +11,7 @@ paths: experiment_log_dir: ytvis_json: /saco_veval_sav_val.json ytvis_dir : - bpe_path: # This should be under assets/bpe_simple_vocab_16e6.txt.gz + bpe_path: # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz num_videos: null # ============================================================================ diff --git a/sam3/train/configs/saco_video_evals/saco_veval_sav_val_noheur.yaml b/sam3/train/configs/saco_video_evals/saco_veval_sav_val_noheur.yaml index 9a89ebaa..f0ca8423 100644 --- a/sam3/train/configs/saco_video_evals/saco_veval_sav_val_noheur.yaml +++ b/sam3/train/configs/saco_video_evals/saco_veval_sav_val_noheur.yaml @@ -11,7 +11,7 @@ paths: experiment_log_dir: ytvis_json: /saco_veval_sav_val.json ytvis_dir : - bpe_path: # This should be under assets/bpe_simple_vocab_16e6.txt.gz + bpe_path: # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz num_videos: null # ============================================================================ diff --git a/sam3/train/configs/saco_video_evals/saco_veval_smartglasses_test.yaml b/sam3/train/configs/saco_video_evals/saco_veval_smartglasses_test.yaml index fdc81853..797fcab9 100644 --- a/sam3/train/configs/saco_video_evals/saco_veval_smartglasses_test.yaml +++ b/sam3/train/configs/saco_video_evals/saco_veval_smartglasses_test.yaml @@ -11,7 +11,7 @@ paths: experiment_log_dir: ytvis_json: /saco_veval_smartglasses_test.json ytvis_dir : - bpe_path: # This should be under assets/bpe_simple_vocab_16e6.txt.gz + bpe_path: # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz num_videos: null # ============================================================================ diff --git a/sam3/train/configs/saco_video_evals/saco_veval_smartglasses_test_noheur.yaml b/sam3/train/configs/saco_video_evals/saco_veval_smartglasses_test_noheur.yaml index 2d6150e5..15f948a8 100644 --- a/sam3/train/configs/saco_video_evals/saco_veval_smartglasses_test_noheur.yaml +++ b/sam3/train/configs/saco_video_evals/saco_veval_smartglasses_test_noheur.yaml @@ -11,7 +11,7 @@ paths: experiment_log_dir: ytvis_json: /saco_veval_smartglasses_test.json ytvis_dir : - bpe_path: # This should be under assets/bpe_simple_vocab_16e6.txt.gz + bpe_path: # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz num_videos: null # ============================================================================ diff --git a/sam3/train/configs/saco_video_evals/saco_veval_smartglasses_val.yaml b/sam3/train/configs/saco_video_evals/saco_veval_smartglasses_val.yaml index a9bffda5..d2e4a857 100644 --- a/sam3/train/configs/saco_video_evals/saco_veval_smartglasses_val.yaml +++ b/sam3/train/configs/saco_video_evals/saco_veval_smartglasses_val.yaml @@ -11,7 +11,7 @@ paths: experiment_log_dir: ytvis_json: /saco_veval_smartglasses_val.json ytvis_dir : - bpe_path: # This should be under assets/bpe_simple_vocab_16e6.txt.gz + bpe_path: # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz num_videos: null # ============================================================================ diff --git a/sam3/train/configs/saco_video_evals/saco_veval_smartglasses_val_noheur.yaml b/sam3/train/configs/saco_video_evals/saco_veval_smartglasses_val_noheur.yaml index e1f64436..1dd72c0a 100644 --- a/sam3/train/configs/saco_video_evals/saco_veval_smartglasses_val_noheur.yaml +++ b/sam3/train/configs/saco_video_evals/saco_veval_smartglasses_val_noheur.yaml @@ -11,7 +11,7 @@ paths: experiment_log_dir: ytvis_json: /saco_veval_smartglasses_val.json ytvis_dir : - bpe_path: # This should be under assets/bpe_simple_vocab_16e6.txt.gz + bpe_path: # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz num_videos: null # ============================================================================ diff --git a/sam3/train/configs/saco_video_evals/saco_veval_yt1b_test.yaml b/sam3/train/configs/saco_video_evals/saco_veval_yt1b_test.yaml index 71e50347..a94ed749 100644 --- a/sam3/train/configs/saco_video_evals/saco_veval_yt1b_test.yaml +++ b/sam3/train/configs/saco_video_evals/saco_veval_yt1b_test.yaml @@ -11,7 +11,7 @@ paths: experiment_log_dir: ytvis_json: /saco_veval_yt1b_test.json ytvis_dir : - bpe_path: # This should be under assets/bpe_simple_vocab_16e6.txt.gz + bpe_path: # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz num_videos: null # ============================================================================ diff --git a/sam3/train/configs/saco_video_evals/saco_veval_yt1b_test_noheur.yaml b/sam3/train/configs/saco_video_evals/saco_veval_yt1b_test_noheur.yaml index f8df6aee..e2c4b385 100644 --- a/sam3/train/configs/saco_video_evals/saco_veval_yt1b_test_noheur.yaml +++ b/sam3/train/configs/saco_video_evals/saco_veval_yt1b_test_noheur.yaml @@ -11,7 +11,7 @@ paths: experiment_log_dir: ytvis_json: /saco_veval_yt1b_test.json ytvis_dir : - bpe_path: # This should be under assets/bpe_simple_vocab_16e6.txt.gz + bpe_path: # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz num_videos: null # ============================================================================ diff --git a/sam3/train/configs/saco_video_evals/saco_veval_yt1b_val.yaml b/sam3/train/configs/saco_video_evals/saco_veval_yt1b_val.yaml index 5816952e..0efe0274 100644 --- a/sam3/train/configs/saco_video_evals/saco_veval_yt1b_val.yaml +++ b/sam3/train/configs/saco_video_evals/saco_veval_yt1b_val.yaml @@ -11,7 +11,7 @@ paths: experiment_log_dir: ytvis_json: /saco_veval_yt1b_val.json ytvis_dir : - bpe_path: # This should be under assets/bpe_simple_vocab_16e6.txt.gz + bpe_path: # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz num_videos: null # ============================================================================ diff --git a/sam3/train/configs/saco_video_evals/saco_veval_yt1b_val_noheur.yaml b/sam3/train/configs/saco_video_evals/saco_veval_yt1b_val_noheur.yaml index 374e5e22..108b563e 100644 --- a/sam3/train/configs/saco_video_evals/saco_veval_yt1b_val_noheur.yaml +++ b/sam3/train/configs/saco_video_evals/saco_veval_yt1b_val_noheur.yaml @@ -11,7 +11,7 @@ paths: experiment_log_dir: ytvis_json: /saco_veval_yt1b_val.json ytvis_dir : - bpe_path: # This should be under assets/bpe_simple_vocab_16e6.txt.gz + bpe_path: # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz num_videos: null # ============================================================================ From 79732de1ebb2bdda988b883be38b87a6ad9a2401 Mon Sep 17 00:00:00 2001 From: Matt Le Date: Wed, 10 Dec 2025 12:56:18 -0800 Subject: [PATCH 3/3] Lint --- sam3/model_builder.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sam3/model_builder.py b/sam3/model_builder.py index 796a87ed..1a3bdecf 100644 --- a/sam3/model_builder.py +++ b/sam3/model_builder.py @@ -1,9 +1,10 @@ # Copyright (c) Meta Platforms, Inc. and affiliates. All Rights Reserved import os -import pkg_resources from typing import Optional +import pkg_resources + import torch import torch.nn as nn from huggingface_hub import hf_hub_download