Python 如何将PyTorch中的DataLoader更改为读取一幅图像进行预测?
目前,我有一个预先训练过的模型,它使用数据加载器读取一批图像来训练模型Python 如何将PyTorch中的DataLoader更改为读取一幅图像进行预测?,python,pytorch,dataloader,Python,Pytorch,Dataloader,目前,我有一个预先训练过的模型,它使用数据加载器读取一批图像来训练模型 self.data\u loader=torch.utils.data.DataLoader(数据集,批处理大小=批处理大小,shuffle=False, num_workers=1,pin_memory=True) ... model.eval() 对于步骤,enumerate中的输入(test_loader.data_loader): 输出=型号(火炬类别([输入],1)) ... 当图像从队列中到达时,我想对其进行处
self.data\u loader=torch.utils.data.DataLoader(数据集,批处理大小=批处理大小,shuffle=False,
num_workers=1,pin_memory=True)
...
model.eval()
对于步骤,enumerate中的输入(test_loader.data_loader):
输出=型号(火炬类别([输入],1))
...
当图像从队列中到达时,我想对其进行处理(进行预测)。它应该类似于读取单个图像并运行模型对其进行预测的代码。大致如下:
从PIL导入图像
新建输入=Image.open(图像路径)
model.eval()
输出=型号(火炬类别([新输入],1))
我想知道您是否可以指导我如何执行此操作并在DataLoader中应用相同的转换。我不知道DataLoader,但您可以使用以下功能加载单个图像:
def safe_pil_loader(path, from_memory=False):
try:
if from_memory:
img = Image.open(path)
res = img.convert('RGB')
else:
with open(path, 'rb') as f:
img = Image.open(f)
res = img.convert('RGB')
except:
res = Image.new('RGB', (227, 227), color=0)
return res
对于应用转换,您可以执行以下操作:
trans = transforms.Compose([
transforms.Resize(299),
transforms.CenterCrop(299),
transforms.ToTensor(),
normalize,
])
img=trans(img)
我不知道dataLoader,但您可以使用以下功能加载单个图像:
def safe_pil_loader(path, from_memory=False):
try:
if from_memory:
img = Image.open(path)
res = img.convert('RGB')
else:
with open(path, 'rb') as f:
img = Image.open(f)
res = img.convert('RGB')
except:
res = Image.new('RGB', (227, 227), color=0)
return res
对于应用转换,您可以执行以下操作:
trans = transforms.Compose([
transforms.Resize(299),
transforms.CenterCrop(299),
transforms.ToTensor(),
normalize,
])
img=trans(img)
您可以使用do it with:
和批次大小=1:
import queue
import torchvision.transforms.functional as TF
buffer = queue.Queue()
new_input = Image.open(image_path)
buffer.put(TF.to_tensor(new_input))
# ... Populate queue here
dataset = MyDataset(buffer)
dataloader = torch.utils.data.DataLoader(dataset, batch_size=1)
for data in dataloader:
model(data) # data is one-image batch of size [1,3,H,W] where 3 - number of color channels
您可以使用do it with:
和批次大小=1:
import queue
import torchvision.transforms.functional as TF
buffer = queue.Queue()
new_input = Image.open(image_path)
buffer.put(TF.to_tensor(new_input))
# ... Populate queue here
dataset = MyDataset(buffer)
dataloader = torch.utils.data.DataLoader(dataset, batch_size=1)
for data in dataloader:
model(data) # data is one-image batch of size [1,3,H,W] where 3 - number of color channels
这实际上取决于
数据集的工作方式。问题中没有提供详细信息。@jodag我编辑了问题以提供更多上下文。非常感谢您的帮助。这将取决于数据集的工作方式。问题中没有提供详细信息。@jodag我编辑了问题以提供更多上下文。谢谢你的帮助。谢谢@Marzieh Heidari!谢谢@Marzieh Heidari!谢谢@Anton GanichevThanks@Anton Ganichev