Closed unnir closed 3 years ago
Hi unnir,
I was not able to reproduce your error from your snippet. I adapted your snippet to use the CIFAR10 dataset (just for sanity checking and I did not had an ImageNet copy arround). It now runs through without any problem:
from IBA.pytorch import IBA, tensor_to_np_img, get_imagenet_folder, imagenet_transform
from IBA.utils import plot_saliency_map, to_unit_interval, load_monkeys
from torch.utils.data import DataLoader
from torchvision.models import vgg16, resnet34
from torchvision.datasets import CIFAR10
from torchvision.transforms import Resize, ToTensor, Compose
import torch
from torch import nn
# imagenet_dir = /path/to/imagenet/validation
# Load model
dev = 'cuda:0' if torch.cuda.is_available() else 'cpu'
model = resnet34(pretrained=True)
model.fc = nn.Linear(512, 10)
model.to(dev)
model.eval()
# Add a Per-Sample Bottleneck at layer conv4_1
iba = IBA(model.layer2)
# Estimate the mean and variance of the feature map at this layer.
val_set = CIFAR10('/tmp/cifar', transform=Compose([Resize(224), ToTensor()]), download=True)
val_loader = DataLoader(val_set, batch_size=1, shuffle=True, num_workers=0)
iba.estimate(model, val_loader, n_samples=1, progbar=True)
# Load Image
monkeys, target = load_monkeys(pil=True)
monkeys_transform = imagenet_transform()(monkeys)
# fix target
target = 5
# Closure that returns the loss for one batch
model_loss_closure = lambda x: -torch.log_softmax(model(x), dim=1)[:, target].mean()
# Explain class target for the given image
saliency_map = iba.analyze(monkeys_transform.unsqueeze(0).to(dev), model_loss_closure, beta=10)
# display result
model_loss_closure = lambda x: -torch.log_softmax(model(x), 1)[:, target].mean()
heatmap = iba.analyze(monkeys_transform[None].to(dev), model_loss_closure )
plot_saliency_map(heatmap, tensor_to_np_img(monkeys_transform))
Please, let me know if this version does not work for you.
Best, Leon
it was my mistake. Sorry and thank you for your answer.
No Problem, let me know if you encounter another problem.
Hi All,
I'm facing this issue:
My code:
Any idea how to solve that?