读取 resnet18 的测试图像
Reading test images for resnet18
我正在尝试读取图像文件并 classify 和图像。
我的模型是 resnet18 我之前训练过它并计划使用不同的 .py 脚本来 class 确定图像列表。这是我的网络:
PATH = './net.pth'
model_ft = models.resnet18(pretrained=True)
num_ftrs = model_ft.fc.in_features
model_ft.fc = nn.Linear(num_ftrs, 16)
model_ft.load_state_dict(torch.load(PATH))
model_ft.eval()
我正在尝试以这种方式阅读图像:
imsize = 256
loader = transforms.Compose([transforms.Scale(imsize), transforms.ToTensor()])
def image_loader(image_name):
#load image, returns cuda tensor
image = Image.open(image_name)
image = loader(image).float()
image = Variable(image, requires_grad=True)
image = image.unsqueeze(0)
return image.cuda()
image = image_loader("dataset/test/9673.png")
model_ft(image)
我收到这个错误:
"Given groups=1, weight of size [64, 3, 7, 7], expected input[1, 4, 676, 256] to have 3 channels, but got 4 channels instead"
有人建议我删除 resnet18 的 unsqueeze,这样做我得到了以下错误:
"Expected 4-dimensional input for 4-dimensional weight [64, 3, 7, 7], but got 3-dimensional input of size [4, 676, 256] instead"
我不太明白我正在处理的问题,我应该如何阅读我的测试集?之后我需要将 class ID-s 和文件名写入 .txt。
您正在使用具有 4 个通道的 PNG 图像。您的网络需要 3 个频道。
转换为 RGB
应该没问题。在你的 image_loader
中简单地做:
image = Image.open(image_name).convert('RGB')
我认为您的图像输入的形状是:batch_size*4*height*width
而不是 batch_size*3*height*width
。这就是错误的原因。你能这样做并报告形状吗:
print(image.shape)
调用后image_loader()
.
我正在尝试读取图像文件并 classify 和图像。 我的模型是 resnet18 我之前训练过它并计划使用不同的 .py 脚本来 class 确定图像列表。这是我的网络:
PATH = './net.pth'
model_ft = models.resnet18(pretrained=True)
num_ftrs = model_ft.fc.in_features
model_ft.fc = nn.Linear(num_ftrs, 16)
model_ft.load_state_dict(torch.load(PATH))
model_ft.eval()
我正在尝试以这种方式阅读图像:
imsize = 256
loader = transforms.Compose([transforms.Scale(imsize), transforms.ToTensor()])
def image_loader(image_name):
#load image, returns cuda tensor
image = Image.open(image_name)
image = loader(image).float()
image = Variable(image, requires_grad=True)
image = image.unsqueeze(0)
return image.cuda()
image = image_loader("dataset/test/9673.png")
model_ft(image)
我收到这个错误:
"Given groups=1, weight of size [64, 3, 7, 7], expected input[1, 4, 676, 256] to have 3 channels, but got 4 channels instead"
有人建议我删除 resnet18 的 unsqueeze,这样做我得到了以下错误:
"Expected 4-dimensional input for 4-dimensional weight [64, 3, 7, 7], but got 3-dimensional input of size [4, 676, 256] instead"
我不太明白我正在处理的问题,我应该如何阅读我的测试集?之后我需要将 class ID-s 和文件名写入 .txt。
您正在使用具有 4 个通道的 PNG 图像。您的网络需要 3 个频道。
转换为 RGB
应该没问题。在你的 image_loader
中简单地做:
image = Image.open(image_name).convert('RGB')
我认为您的图像输入的形状是:batch_size*4*height*width
而不是 batch_size*3*height*width
。这就是错误的原因。你能这样做并报告形状吗:
print(image.shape)
调用后image_loader()
.