Include entire sam3 package instead of just sam3 and sam3.model (#327)

Summary:
there are several imports within the `sam3.model` package that reference other packages within `sam3` other than `sam3` and `sam3.model` (for example [here](https://github.com/facebookresearch/sam3/blob/main/sam3/model/sam3_tracker_base.py#L15)).  This fixes the package structure so that you can `pip install` the package and `import sam3`

Pull Request resolved: https://github.com/facebookresearch/sam3/pull/327

Reviewed By: haithamkhedr

Differential Revision: D88950127

Pulled By: lematt1991

fbshipit-source-id: 3554512d304ccdf679a9af8606bbfe1f7f2a1cfb
This commit is contained in:
Matt Le
2025-12-11 09:23:19 -08:00
committed by meta-codesync[bot]
parent 757bbb0206
commit b26a5f330e
24 changed files with 271 additions and 264 deletions

View File

@@ -89,7 +89,7 @@
"from sam3 import build_sam3_image_model\n", "from sam3 import build_sam3_image_model\n",
"from sam3.model.sam3_image_processor import Sam3Processor\n", "from sam3.model.sam3_image_processor import Sam3Processor\n",
"\n", "\n",
"sam3_root = os.path.join(os.path.dirname(sam3.__file__), \"..\")\n", "sam3_root = os.path.dirname(sam3.__file__)\n",
"bpe_path = f\"{sam3_root}/assets/bpe_simple_vocab_16e6.txt.gz\"\n", "bpe_path = f\"{sam3_root}/assets/bpe_simple_vocab_16e6.txt.gz\"\n",
"model = build_sam3_image_model(bpe_path=bpe_path)\n", "model = build_sam3_image_model(bpe_path=bpe_path)\n",
"processor = Sam3Processor(model, confidence_threshold=0.5)" "processor = Sam3Processor(model, confidence_threshold=0.5)"
@@ -238,5 +238,5 @@
} }
}, },
"nbformat": 4, "nbformat": 4,
"nbformat_minor": 4 "nbformat_minor": 2
} }

View File

@@ -82,8 +82,12 @@ train = [
"Homepage" = "https://github.com/facebookresearch/sam3" "Homepage" = "https://github.com/facebookresearch/sam3"
"Bug Tracker" = "https://github.com/facebookresearch/sam3/issues" "Bug Tracker" = "https://github.com/facebookresearch/sam3/issues"
[tool.setuptools] [tool.setuptools.packages.find]
packages = ["sam3", "sam3.model"] include = ["sam3*"]
exclude = ["build*", "scripts*", "examples*"]
[tool.setuptools.package-data]
sam3 = ["assets/*.txt.gz"]
[tool.setuptools.dynamic] [tool.setuptools.dynamic]
version = {attr = "sam3.__version__"} version = {attr = "sam3.__version__"}

View File

@@ -3,6 +3,8 @@
import os import os
from typing import Optional from typing import Optional
import pkg_resources
import torch import torch
import torch.nn as nn import torch.nn as nn
from huggingface_hub import hf_hub_download from huggingface_hub import hf_hub_download
@@ -580,9 +582,10 @@ def build_sam3_image_model(
A SAM3 image model A SAM3 image model
""" """
if bpe_path is None: if bpe_path is None:
bpe_path = os.path.join( bpe_path = pkg_resources.resource_filename(
os.path.dirname(__file__), "..", "assets", "bpe_simple_vocab_16e6.txt.gz" "sam3", "assets/bpe_simple_vocab_16e6.txt.gz"
) )
# Create visual components # Create visual components
compile_mode = "default" if compile else None compile_mode = "default" if compile else None
vision_encoder = _create_vision_backbone( vision_encoder = _create_vision_backbone(
@@ -668,8 +671,8 @@ def build_sam3_video_model(
Sam3VideoInferenceWithInstanceInteractivity: The instantiated dense tracking model Sam3VideoInferenceWithInstanceInteractivity: The instantiated dense tracking model
""" """
if bpe_path is None: if bpe_path is None:
bpe_path = os.path.join( bpe_path = pkg_resources.resource_filename(
os.path.dirname(__file__), "..", "assets", "bpe_simple_vocab_16e6.txt.gz" "sam3", "assets/bpe_simple_vocab_16e6.txt.gz"
) )
# Build Tracker module # Build Tracker module

View File

@@ -39,7 +39,7 @@ paths:
# path to the SA-Co/silver images # path to the SA-Co/silver images
silver_img_path: <YOUR_SILVER_IMG_DIR> silver_img_path: <YOUR_SILVER_IMG_DIR>
bpe_path: <BPE_PATH> # This should be under assets/bpe_simple_vocab_16e6.txt.gz bpe_path: <BPE_PATH> # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz
# ============================================================================ # ============================================================================

View File

@@ -10,7 +10,7 @@ defaults:
paths: paths:
odinw_data_root: <YOUR_DATA_DIR> odinw_data_root: <YOUR_DATA_DIR>
experiment_log_dir: <YOUR EXPERIMENET LOG_DIR> experiment_log_dir: <YOUR EXPERIMENET LOG_DIR>
bpe_path: <BPE_PATH> # This should be under assets/bpe_simple_vocab_16e6.txt.gz bpe_path: <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}}} supercategory_tuple: ${all_odinw_supercategories.${string:${submitit.job_array.task_index}}}
# Validation transforms pipeline # Validation transforms pipeline

View File

@@ -10,7 +10,7 @@ defaults:
paths: paths:
odinw_data_root: <YOUR_DATA_DIR> odinw_data_root: <YOUR_DATA_DIR>
experiment_log_dir: <YOUR EXPERIMENET LOG_DIR> experiment_log_dir: <YOUR EXPERIMENET LOG_DIR>
bpe_path: <BPE_PATH> # This should be under assets/bpe_simple_vocab_16e6.txt.gz bpe_path: <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}}} supercategory_tuple: ${all_odinw_supercategories.${string:${submitit.job_array.task_index}}}

View File

@@ -10,7 +10,7 @@ defaults:
paths: paths:
odinw_data_root: <YOUR_DATA_DIR> odinw_data_root: <YOUR_DATA_DIR>
experiment_log_dir: <YOUR EXPERIMENET LOG_DIR> experiment_log_dir: <YOUR EXPERIMENET LOG_DIR>
bpe_path: <BPE_PATH> # This should be under assets/bpe_simple_vocab_16e6.txt.gz bpe_path: <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}}} supercategory_tuple: ${all_odinw_supercategories.${string:${submitit.job_array.task_index}}}

View File

@@ -10,7 +10,7 @@ defaults:
paths: paths:
odinw_data_root: <YOUR_DATA_DIR> odinw_data_root: <YOUR_DATA_DIR>
experiment_log_dir: <YOUR EXPERIMENET LOG_DIR> experiment_log_dir: <YOUR EXPERIMENET LOG_DIR>
bpe_path: <BPE_PATH> # This should be under assets/bpe_simple_vocab_16e6.txt.gz bpe_path: <BPE_PATH> # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz
odinw_train: odinw_train:

View File

@@ -10,7 +10,7 @@ defaults:
paths: paths:
odinw_data_root: <YOUR_DATA_DIR> odinw_data_root: <YOUR_DATA_DIR>
experiment_log_dir: <YOUR EXPERIMENET LOG_DIR> experiment_log_dir: <YOUR EXPERIMENET LOG_DIR>
bpe_path: <BPE_PATH> # This should be under assets/bpe_simple_vocab_16e6.txt.gz bpe_path: <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}}} supercategory_tuple: ${all_odinw_supercategories.${string:${submitit.job_array.task_index}}}

View File

@@ -8,7 +8,7 @@ defaults:
paths: paths:
roboflow_vl_100_root: <YOUR_DATASET_DIR> roboflow_vl_100_root: <YOUR_DATASET_DIR>
experiment_log_dir: <YOUR EXPERIMENET LOG_DIR> experiment_log_dir: <YOUR EXPERIMENET LOG_DIR>
bpe_path: <BPE_PATH> # This should be under assets/bpe_simple_vocab_16e6.txt.gz bpe_path: <BPE_PATH> # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz
# Roboflow dataset configuration # Roboflow dataset configuration
roboflow_train: roboflow_train:

View File

@@ -8,7 +8,7 @@ defaults:
paths: paths:
roboflow_vl_100_root: <YOUR_DATASET_DIR> roboflow_vl_100_root: <YOUR_DATASET_DIR>
experiment_log_dir: <YOUR EXPERIMENET LOG_DIR> experiment_log_dir: <YOUR EXPERIMENET LOG_DIR>
bpe_path: <BPE_PATH> # This should be under assets/bpe_simple_vocab_16e6.txt.gz bpe_path: <BPE_PATH> # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz
# Roboflow dataset configuration # Roboflow dataset configuration
roboflow_train: roboflow_train:

View File

@@ -11,7 +11,7 @@ paths:
experiment_log_dir: <YOUR EXPERIMENET LOG_DIR> experiment_log_dir: <YOUR EXPERIMENET LOG_DIR>
ytvis_json: <YOUR_GT_PATH>/saco_veval_sav_test.json ytvis_json: <YOUR_GT_PATH>/saco_veval_sav_test.json
ytvis_dir : <YOUR_VIDEO_JPG_DIR> ytvis_dir : <YOUR_VIDEO_JPG_DIR>
bpe_path: <BPE_PATH> # This should be under assets/bpe_simple_vocab_16e6.txt.gz bpe_path: <BPE_PATH> # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz
num_videos: null num_videos: null
# ============================================================================ # ============================================================================

View File

@@ -11,7 +11,7 @@ paths:
experiment_log_dir: <YOUR EXPERIMENET LOG_DIR> experiment_log_dir: <YOUR EXPERIMENET LOG_DIR>
ytvis_json: <YOUR_GT_PATH>/saco_veval_sav_test.json ytvis_json: <YOUR_GT_PATH>/saco_veval_sav_test.json
ytvis_dir : <YOUR_VIDEO_JPG_DIR> ytvis_dir : <YOUR_VIDEO_JPG_DIR>
bpe_path: <BPE_PATH> # This should be under assets/bpe_simple_vocab_16e6.txt.gz bpe_path: <BPE_PATH> # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz
num_videos: null num_videos: null
# ============================================================================ # ============================================================================

View File

@@ -11,7 +11,7 @@ paths:
experiment_log_dir: <YOUR EXPERIMENET LOG_DIR> experiment_log_dir: <YOUR EXPERIMENET LOG_DIR>
ytvis_json: <YOUR_GT_PATH>/saco_veval_sav_val.json ytvis_json: <YOUR_GT_PATH>/saco_veval_sav_val.json
ytvis_dir : <YOUR_VIDEO_JPG_DIR> ytvis_dir : <YOUR_VIDEO_JPG_DIR>
bpe_path: <BPE_PATH> # This should be under assets/bpe_simple_vocab_16e6.txt.gz bpe_path: <BPE_PATH> # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz
num_videos: null num_videos: null
# ============================================================================ # ============================================================================

View File

@@ -11,7 +11,7 @@ paths:
experiment_log_dir: <YOUR EXPERIMENET LOG_DIR> experiment_log_dir: <YOUR EXPERIMENET LOG_DIR>
ytvis_json: <YOUR_GT_PATH>/saco_veval_sav_val.json ytvis_json: <YOUR_GT_PATH>/saco_veval_sav_val.json
ytvis_dir : <YOUR_VIDEO_JPG_DIR> ytvis_dir : <YOUR_VIDEO_JPG_DIR>
bpe_path: <BPE_PATH> # This should be under assets/bpe_simple_vocab_16e6.txt.gz bpe_path: <BPE_PATH> # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz
num_videos: null num_videos: null
# ============================================================================ # ============================================================================

View File

@@ -11,7 +11,7 @@ paths:
experiment_log_dir: <YOUR EXPERIMENET LOG_DIR> experiment_log_dir: <YOUR EXPERIMENET LOG_DIR>
ytvis_json: <YOUR_GT_PATH>/saco_veval_smartglasses_test.json ytvis_json: <YOUR_GT_PATH>/saco_veval_smartglasses_test.json
ytvis_dir : <YOUR_VIDEO_JPG_DIR> ytvis_dir : <YOUR_VIDEO_JPG_DIR>
bpe_path: <BPE_PATH> # This should be under assets/bpe_simple_vocab_16e6.txt.gz bpe_path: <BPE_PATH> # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz
num_videos: null num_videos: null
# ============================================================================ # ============================================================================

View File

@@ -11,7 +11,7 @@ paths:
experiment_log_dir: <YOUR EXPERIMENET LOG_DIR> experiment_log_dir: <YOUR EXPERIMENET LOG_DIR>
ytvis_json: <YOUR_GT_PATH>/saco_veval_smartglasses_test.json ytvis_json: <YOUR_GT_PATH>/saco_veval_smartglasses_test.json
ytvis_dir : <YOUR_VIDEO_JPG_DIR> ytvis_dir : <YOUR_VIDEO_JPG_DIR>
bpe_path: <BPE_PATH> # This should be under assets/bpe_simple_vocab_16e6.txt.gz bpe_path: <BPE_PATH> # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz
num_videos: null num_videos: null
# ============================================================================ # ============================================================================

View File

@@ -11,7 +11,7 @@ paths:
experiment_log_dir: <YOUR EXPERIMENET LOG_DIR> experiment_log_dir: <YOUR EXPERIMENET LOG_DIR>
ytvis_json: <YOUR_GT_PATH>/saco_veval_smartglasses_val.json ytvis_json: <YOUR_GT_PATH>/saco_veval_smartglasses_val.json
ytvis_dir : <YOUR_VIDEO_JPG_DIR> ytvis_dir : <YOUR_VIDEO_JPG_DIR>
bpe_path: <BPE_PATH> # This should be under assets/bpe_simple_vocab_16e6.txt.gz bpe_path: <BPE_PATH> # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz
num_videos: null num_videos: null
# ============================================================================ # ============================================================================

View File

@@ -11,7 +11,7 @@ paths:
experiment_log_dir: <YOUR EXPERIMENET LOG_DIR> experiment_log_dir: <YOUR EXPERIMENET LOG_DIR>
ytvis_json: <YOUR_GT_PATH>/saco_veval_smartglasses_val.json ytvis_json: <YOUR_GT_PATH>/saco_veval_smartglasses_val.json
ytvis_dir : <YOUR_VIDEO_JPG_DIR> ytvis_dir : <YOUR_VIDEO_JPG_DIR>
bpe_path: <BPE_PATH> # This should be under assets/bpe_simple_vocab_16e6.txt.gz bpe_path: <BPE_PATH> # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz
num_videos: null num_videos: null
# ============================================================================ # ============================================================================

View File

@@ -11,7 +11,7 @@ paths:
experiment_log_dir: <YOUR EXPERIMENET LOG_DIR> experiment_log_dir: <YOUR EXPERIMENET LOG_DIR>
ytvis_json: <YOUR_GT_PATH>/saco_veval_yt1b_test.json ytvis_json: <YOUR_GT_PATH>/saco_veval_yt1b_test.json
ytvis_dir : <YOUR_VIDEO_JPG_DIR> ytvis_dir : <YOUR_VIDEO_JPG_DIR>
bpe_path: <BPE_PATH> # This should be under assets/bpe_simple_vocab_16e6.txt.gz bpe_path: <BPE_PATH> # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz
num_videos: null num_videos: null
# ============================================================================ # ============================================================================

View File

@@ -11,7 +11,7 @@ paths:
experiment_log_dir: <YOUR EXPERIMENET LOG_DIR> experiment_log_dir: <YOUR EXPERIMENET LOG_DIR>
ytvis_json: <YOUR_GT_PATH>/saco_veval_yt1b_test.json ytvis_json: <YOUR_GT_PATH>/saco_veval_yt1b_test.json
ytvis_dir : <YOUR_VIDEO_JPG_DIR> ytvis_dir : <YOUR_VIDEO_JPG_DIR>
bpe_path: <BPE_PATH> # This should be under assets/bpe_simple_vocab_16e6.txt.gz bpe_path: <BPE_PATH> # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz
num_videos: null num_videos: null
# ============================================================================ # ============================================================================

View File

@@ -11,7 +11,7 @@ paths:
experiment_log_dir: <YOUR EXPERIMENET LOG_DIR> experiment_log_dir: <YOUR EXPERIMENET LOG_DIR>
ytvis_json: <YOUR_GT_PATH>/saco_veval_yt1b_val.json ytvis_json: <YOUR_GT_PATH>/saco_veval_yt1b_val.json
ytvis_dir : <YOUR_VIDEO_JPG_DIR> ytvis_dir : <YOUR_VIDEO_JPG_DIR>
bpe_path: <BPE_PATH> # This should be under assets/bpe_simple_vocab_16e6.txt.gz bpe_path: <BPE_PATH> # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz
num_videos: null num_videos: null
# ============================================================================ # ============================================================================

View File

@@ -11,7 +11,7 @@ paths:
experiment_log_dir: <YOUR EXPERIMENET LOG_DIR> experiment_log_dir: <YOUR EXPERIMENET LOG_DIR>
ytvis_json: <YOUR_GT_PATH>/saco_veval_yt1b_val.json ytvis_json: <YOUR_GT_PATH>/saco_veval_yt1b_val.json
ytvis_dir : <YOUR_VIDEO_JPG_DIR> ytvis_dir : <YOUR_VIDEO_JPG_DIR>
bpe_path: <BPE_PATH> # This should be under assets/bpe_simple_vocab_16e6.txt.gz bpe_path: <BPE_PATH> # This should be under sam3/assets/bpe_simple_vocab_16e6.txt.gz
num_videos: null num_videos: null
# ============================================================================ # ============================================================================