1. 我本地下好了配置文件,但是想用SAM2VideoPredictor.from_pretrained导入时,它还是会从huggingface上下载,怎么办?
假设你本地下好了 sam 模型及其配置文件(.yaml),当你想本地导入时:
from sam2.sam2_video_predictor import SAM2VideoPredictor
# ...
predictor = SAM2VideoPredictor.from_pretrained("facebook/sam2-hiera-base-plus", device=device)
# ...
"facebook/sam2-hiera-base-plus"
这个参数一改就错,因为源代码中默认直接从 huggingface 下载:
@classmethod
def from_pretrained(cls, model_id: str = None, **kwargs) -> "SAM2VideoPredictor":
from sam2.build_sam import build_sam2_video_predictor_hf
sam_model = build_sam2_video_predictor_hf(model_id, **kwargs)
return sam_model
def build_sam2_video_predictor_hf(model_id, **kwargs):
config_name, ckpt_path = _hf_download(model_id)
return build_sam2_video_predictor(
config_file=config_name, ckpt_path=ckpt_path, **kwargs
)
所以,这就要求我们稍微修改一下源代码,使得跳过这一行:
config_name, ckpt_path = _hf_download(model_id)
以下是我的修改版本:
def build_sam2_video_predictor_hf(model_id, config_name = None, ckpt_path = None, **kwargs):
if config_name is not None and ckpt_path is None:
config_name, ckpt_path = _hf_download(model_id, **kwargs)
return build_sam2_video_predictor(
config_file=config_name, ckpt_path=ckpt_path, **kwargs
)
以及之前的 from_pretrained 方法也要加一个默认参数
def from_pretrained(cls, model_id: str = None, **kwargs) -> "SAM2VideoPredictor":
你直接传入 config_name 和 ckpt_path 即可,这俩一个是 .yaml 路径,一个是 .pt 路径,比如这是我传入的方式。
predictor = SAM2VideoPredictor.from_pretrained(config_name = "configs/sam2.1/sam2.1_hiera_l.yaml",
ckpt_path = "/userHome/drama/DRAMA2/Method/dependencies/small/sam2.1_hiera_large.pt",
local_files_only=True,)
2. 我传入这个 sam2.1_hiera_l.yaml 路径咋就是不行呢,老说没找到路径?
报错如下:
hydra.errors.MissingConfigException: Cannot find primary config 'file:///userHome/drama/DRAMA2/Grounded-SAM-2/sam2/sam2_hiera_b+.yaml'. Check that it's in your config search path.
Config search path:
provider=hydra, path=pkg://hydra.conf
provider=main, path=pkg://sam2
provider=schema, path=structured://
直接导你的相对路径即可,就是从你的groundingsam的包开始,导入相对路径。比如我是这样导的:
config_name = "configs/sam2.1/sam2.1_hiera_l.yaml"
而我本身的这个配置文件的绝对路径是:
/userHome/drama/DRAMA2/Grounded-SAM-2/configs/sam2.1/sam2.1_hiera_l.yaml
也就是从你的包 Grounded-SAM-2开始的相对路径。