基于autodl的imageBind部署
https://github.com/facebookresearch/ImageBind
下载解压后直接
pip install .(python环境已满足,不需要创建新环境)
在本地复制粘贴以下代码,创建1.py
from imagebind import data
import torch
from imagebind.models import imagebind_model
from imagebind.models.imagebind_model import ModalityTypetext_list=["A dog.", "A car", "A bird"]
image_paths=[".assets/dog_image.jpg", ".assets/car_image.jpg", ".assets/bird_image.jpg"]
audio_paths=[".assets/dog_audio.wav", ".assets/car_audio.wav", ".assets/bird_audio.wav"]device = "cuda:0" if torch.cuda.is_available() else "cpu"# Instantiate model
model = imagebind_model.imagebind_huge(pretrained=True)
model.eval()
model.to(device)# Load data
inputs = {ModalityType.TEXT: data.load_and_transform_text(text_list, device),ModalityType.VISION: data.load_and_transform_vision_data(image_paths, device),ModalityType.AUDIO: data.load_and_transform_audio_data(audio_paths, device),
}with torch.no_grad():embeddings = model(inputs)print("Vision x Text: ",torch.softmax(embeddings[ModalityType.VISION] @ embeddings[ModalityType.TEXT].T, dim=-1),
)
print("Audio x Text: ",torch.softmax(embeddings[ModalityType.AUDIO] @ embeddings[ModalityType.TEXT].T, dim=-1),
)
print("Vision x Audio: ",torch.softmax(embeddings[ModalityType.VISION] @ embeddings[ModalityType.AUDIO].T, dim=-1),
)# Expected output:
#
# Vision x Text:
# tensor([[9.9761e-01, 2.3694e-03, 1.8612e-05],
# [3.3836e-05, 9.9994e-01, 2.4118e-05],
# [4.7997e-05, 1.3496e-02, 9.8646e-01]])
#
# Audio x Text:
# tensor([[1., 0., 0.],
# [0., 1., 0.],
# [0., 0., 1.]])
#
# Vision x Audio:
# tensor([[0.8070, 0.1088, 0.0842],
# [0.1036, 0.7884, 0.1079],
# [0.0018, 0.0022, 0.9960]])
python 1.py
模型下载好后就有结果
二、分模态结果解析
1. Vision x Text(视觉 × 文本)
python
运行
tensor([[9.9761e-01, 2.3694e-03, 1.8612e-05], # 狗的图像[3.3837e-05, 9.9994e-01, 2.4119e-05], # 汽车的图像[4.7997e-05, 1.3496e-02, 9.8646e-01]], # 鸟的图像device='cuda:0')
-
行含义:
- 第 1 行:狗的图像与各文本的匹配概率
9.9761e-01 ≈ 0.9976
(狗的图像 → “A dog” 文本):高度匹配,符合预期。- 其他值接近 0:狗的图像与 “汽车”“鸟” 文本几乎不相关。
- 第 2 行:汽车的图像与各文本的匹配概率
9.9994e-01 ≈ 0.9999
(汽车的图像 → “A car” 文本):几乎完全匹配。
- 第 3 行:鸟的图像与各文本的匹配概率
9.8646e-01 ≈ 0.9865
(鸟的图像 → “A bird” 文本):高匹配度,但略低于前两者(可能因图像细节或文本简洁性差异)。
- 第 1 行:狗的图像与各文本的匹配概率
-
结论:模型能精准对齐 视觉图像 与 语义文本,同类样本的匹配概率接近 1,非同类几乎为 0。
2. Audio x Text(音频 × 文本)
python
运行
tensor([[1., 0., 0.], # 狗的音频[0., 1., 0.], # 汽车的音频[0., 0., 1.]], # 鸟的音频device='cuda:0')
-
行含义:
- 第 1 行:狗的音频与各文本的匹配概率
1.0
(狗的音频 → “A dog” 文本):完全匹配,说明音频特征(如狗叫声)与文本语义高度对齐。
- 第 2 行:汽车的音频与各文本的匹配概率
1.0
(汽车的音频 → “A car” 文本):可能音频为汽车引擎声,模型能唯一关联到 “汽车” 文本。
- 第 3 行:鸟的音频与各文本的匹配概率
1.0
(鸟的音频 → “A bird” 文本):音频(如鸟鸣)与文本一一对应,无歧义。
- 第 1 行:狗的音频与各文本的匹配概率
-
结论:音频模态的匹配 完全无误差,表明模型对特定声音(如动物叫声、交通工具声音)的语义理解非常精准。
3. Vision x Audio(视觉 × 音频)
python
运行
tensor([[0.8070, 0.1088, 0.0842], # 狗的图像[0.1036, 0.7884, 0.1079], # 汽车的图像[0.0018, 0.0022, 0.9960]], # 鸟的图像device='cuda:0')
-
行含义:
- 第 1 行:狗的图像与各音频的匹配概率
0.8070
(狗的图像 → 狗的音频):较高匹配,但低于视觉 × 文本(可能因图像和音频的关联不如文本直接)。0.1088
(狗的图像 → 汽车音频)、0.0842
(狗的图像 → 鸟音频):非同类音频存在一定干扰,但概率较低。
- 第 2 行:汽车的图像与各音频的匹配概率
0.7884
(汽车的图像 → 汽车音频):高匹配,但略低于狗的图像匹配度(可能因汽车音频(如引擎声)与视觉特征的关联较弱)。
- 第 3 行:鸟的图像与各音频的匹配概率
0.9960
(鸟的图像 → 鸟音频):接近完全匹配,可能因鸟类的视觉特征(如羽毛)与鸣叫声在自然场景中强相关。
- 第 1 行:狗的图像与各音频的匹配概率
-
结论:视觉与音频的跨模态匹配 整体有效,但同类样本的匹配概率略低于文本模态(可能因视觉和音频的语义关联更间接,需依赖上下文或先验知识)。