内存不足,尝试使用pytorch创建大小为[2191512]的张量,以使用CLIP保存电影帧中的数据



我第一次使用pytorch,遇到了一个我认为不应该遇到的问题。我目前已经选择了2919帧jpg格式的电影。我正试图把所有这些图像转换成一个张量。我使用CLIP将每个图像转换为大小为[1512]的张量。最后,我期望有一个大小为[2919512]的张量,它不应该使用那么多内存。但我的代码永远不会运行完,我只能认为我做错了什么。

首先,我正在进行导入并加载模型:

import torch
import clip
from glob import glob
from PIL import Image
device = "cuda" if torch.cuda.is_available() else "cpu"
model, preprocess = clip.load("ViT-B/32", device=device)

其次,我正在读取所有图像的路径,并初始化";胶片";使用随机值覆盖它们的张量。我尝试生成一个空的并连接,但这也消耗了太多内存:

path_names = glob(r"Films/**/*.jpg")
film = torch.rand((len(files), 512), dtype=torch.float32, device = device)
film_frame_count = 0
for file in files:
print("Frame " + str(film_frame_count) + " out of " + str(len(files)))
film[film_frame_count] = model.encode_image(preprocess(Image.open(file)).unsqueeze(0).to(device))[0]
film_frame_count += 1
torch.save(film, 'output_tensor/'+ film_code[1])

如果有人能指出我做错了什么,我将不胜感激。

问题最终是由pytorch为图形保存梯度而引起的,所以我需要表明我不希望它们与这个指示符一起存储:

with torch.no_grad():
/*my code*/

最新更新