SAM-Audio 是一种使用文本、视觉或时间提示来隔离音频中任何声音的模型。它可以根据自然语言描述、视频中的视觉提示或时间跨度从复杂的音频混合物中分离出特定的声音。
验证
在使用 SAM-Audio 之前,您需要:
- 请求访问 SAM-Audio Hugging Face 存储库上的检查点
- 使用 Hugging Face 进行身份验证:huggingface-cli 登录
用法
SAM-Audio 支持三种类型的提示:文本、视觉和跨度。每种方法都允许您指定以不同方式隔离哪些声音。
1. 文字提示
使用自然语言描述来隔离声音。
导入火炬导入torchaudio从sam_audio导入SAMAudio,SAMAudioProcessor设备= torch.device(“cuda”如果torch.cuda.is_available()否则“cpu”)模型= SAMAudio.from_pretrained(“facebook/sam-audio-large”).to(device).eval()处理器= SAMAudioProcessor.from_pretrained(“facebook/sam-audio-large”) audio_file =“path/to/audio.wav”描述=“一个男人说话”输入=处理器(音频=[audio_file],描述=[description]).to(device) 与 torch.inference_mode(): result = model.separate(inputs) torchaudio.save(“target.wav”, result.target[0].unsqueeze(0).cpu(), 处理器.audio_sampling_rate) torchaudio.save(“residual.wav”, result.residual[0].unsqueeze(0).cpu(), 处理器.audio_sampling_rate)
文字描述示例:
- “一个人咳嗽”
- “雨滴重重地落下,溅落在地上”
- “有狗叫”
- “钢琴演奏旋律”
- “汽车发动机转速”
2.视觉提示
使用屏蔽视频帧隔离与视频中特定视觉对象相关的声音。
导入火炬导入numpy作为np从sam_audio导入SAMAudio,SAMAudioProcessor从torchcodec.decoders导入VideoDecoder从sam3.model_builder导入build_sam3_video_predictor设备= torch.device(“cuda”如果torch.cuda.is_available()else“cpu”)模型= SAMAudio.from_pretrained(“facebook/sam-audio-large”).to(device).eval() 处理器 = SAMAudioProcessor.from_pretrained(“facebook/sam-audio-large”) video_file = “path/to/video.mp4” 解码器 = VideoDecoder(video_file) 帧 = 解码器[:]
video_predictor = build_sam3_video_predictor() 响应 = video_predictor.handle_request({ “type”: “start_session”, “resource_path”: video_file, }) session_id = response[“session_id”]
面具= []
forframe_index in range(len(decoder)): response = video_predictor.handle_request({ “type”: “add_prompt”, “session_id”: session_id, “frame_index”: frame_index, “text”: “左边的人”, }) mask = response[“outputs”][“out_binary_masks”]
if mask.shape[0] == 0: mask = np.zeros_like(帧[0, [0]], dtype=bool) mask.append(mask[:1]) mask = torch.from_numpy(np.concatenate(masks)).unsqueeze(1) 输入 = 处理器( 音频=[video_file],描述=[“”]masked_videos=处理器.mask_videos([frames], [mask]), ).to(device) 与 torch.inference_mode(): result = model.separate(inputs)
3.跨度提示(时间锚点)
指定目标声音出现或不出现的时间范围。这为隔离什么的模型提供了一个具体的例子
import torch import torchaudio from sam_audio import SAMAudio, SAMAudioProcessor device = torch.device(“cuda” if torch.cuda.is_available() else “cpu”) model = SAMAudio.from_pretrained(“facebook/sam-audio-large”).to(device).eval() 处理器 = SAMAudioProcessor.from_pretrained(“facebook/sam-audio-large”) 锚点= [
[“+”, 6.3, 7.0]]输入 = 处理器( 音频 =[audio_file],描述=[“A horn honking”]锚点=[anchors]).to(device) 与 torch.inference_mode(): result = model.separate(inputs)
具有多个锚点的示例:
锚点= [
[“+”, 2.0, 3.5],
[“+”, 8.0, 9.0],
[“-“, 0.0, 1.0]]
输出格式
model.separate() 方法返回一个结果对象:
- result.target:孤立的声音(您要求的)
- result.residual:其他所有内容(余数)
两者都是列表[torch.Tensor] 其中每个张量都是一维波形
引文
如果您在研究中使用 SAM-Audio,请引用:
@article{sam-audio, title={SAM-Audio: Segment Anything in Audio},作者={Bowen Shi, Andros Tjandra, John Hoffman, Helin Wang, Yi-Chiao Wu, Luya Gau, Julius Richter, Matt Le, Apoorv Vyas, Sanyuan Chen, Christoph Feichtenhofer, Piotr Dollár, Wei-Ning Hsu, Ann Lee},年份={2025} url={arxive 链接命令声音} }
执照
该项目根据 SAM 许可证获得许可。有关详细信息,请参阅许可证文件。
#facebooksamaudiolarge #拥抱脸
