神经网络的视觉解释
项目描述
维恩
VINN 是神经网络的视觉解释
VINN 包括一系列可解释性算法,如 LIME、Grad CAM、Integrated Gradient、显着图等。
VINN是一个毕业项目,如果可能会更新到新版本。
目标听众
想要了解他们的深度模型学到了什么的开发人员或想要测试他们的新算法的研究人员是 VINN 的潜在受众。
VINN 对算法框架进行了标准化,让您可以按照框架构建自己的算法并进行测试。
安装
要求
您可以通过以下方式创建一个新环境
conda create -f requirements
或确保您自己的环境有
-
蟒蛇> = 3.6
-
火炬> = 1.2
安装最新版本
点:
pip install vinn
康达:
conda install vinn
或者您可以从 GitHub 下载并安装在存储库中
https://github.com/Torato-Taraka/VINN.git
pip install vinn-1.0-py3-none-any.whl
开始
import torch
import torchvision.transforms as tfs
from torchvision.models import resnet18
import cv2
model = resnet18(pretrained=True)
transform = tfs.Compose([
tfs.ToTensor(),
tfs.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])
last_conv = model.layer4[-1]
image_path = 'test.jpg'
image = cv2.imread(image_path)
image = cv2.resize(image, (256, 256))
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
gpu = True
到目前为止,必要的参数(模型、图像、变换、gpu)已经准备好,您可以使用 VINN 来解释您的模型
import vinn
gradcam = vinn.GradCAM(model=model,
image=image,
last_conv=last_conv,
transform=transform,
gpu=gpu)
gradcam.forward()
forward 后,算法完成处理,结果存入gradcam.mask.
您可以将结果可视化,如下所示:
params = {
"original image", gradcam.image,
"GradCAM", gradcam.mask,
"masked image", gradcam.masked_image
}
vinn.subplot([params])
请注意,您应该传递一个字典列表,因为您可能需要同时解释多个图像。
你可以通过调用来查看图像是如何被屏蔽的gradcam.masked_image。
但请注意,并非所有算法都同时生成掩码和原始图像,只有 GradCAM、GuidedGradCAM、LIME 和 Sensitivity 具有 masked_image。
当然你可以自己生成,也许以后的版本会实现这个功能。
自定义模型、数据集和算法
VINN 支持自定义您的模型、数据集甚至算法
楷模
你应该像这样组织你的模型
from vinn.model import Models
@Models("yourmodel")
def yourmodel():
class yourmodel(nn.Module):
def __init__(self):
...
return yourmodel()
这是为了注册您的算法以便管理
数据集
类似于自定义模型
from vinn.datasets import DataSet
@DataSet("yourdataset")
def yourdataset():
class yourdataset:
def __init__(self):
...
def __getitem__(self, index):
image = self.transform(self.images[index])
lable = self.lables[index]
return image, lable
def __len__(self):
return len(self.labels)
return yourdataset()
__getitem__()并且__len__()是必要的,您可以在 [torch.utils.data.Dataset] 中查看详细信息(torch.utils.data — PyTorch 1.10 文档)
您可以通过以下方式查看所有现有数据集
from vinn import list_dataset
list_dataset()
火车模型
from vinn import trainer
from torchvision import transforms as tfs
transform = tfs.Compose([
...
])
trainer(
model_name='yourmodel',
dataset_name='yourdataset',
classes=...,
transform=transform,
train_size=...,
test_size=...,
lr=...,
epochs=...,
gpu=True
)
model_name: 你定义的@Models() 中的字符串dataset_name: 你定义的@Dataset() 中的字符串classes: 你的数据集的类transform: 你定义它train_size:火车数据中样本的大小test_size:来自您的测试数据的样本大小lr: 学习率epochs: 训练时间gpu: 是否使用 cuda
算法
您应该首先组织您的算法,例如
from vinn.algorithm import Algorithm
class youralgo(Algorithm):
def __init__(self, model, image, transform, gpu, ...):
super().__init__(model, image, transform, gpu)
...
def forward(self):
...
self.mask = mask
Algorithm是所有算法的父类
最重要的是您必须将结果传递给self.mask,以便您可以轻松地可视化您的结果。
或者您可以返回结果,但我认为这对您的后续操作不利。
算法参考
-
IntegratedGradients:深度网络的公理归因,Mukund Sundararajan 等人。2017 -
SmoothGrad:SmoothGrad:通过添加噪声去除噪声,Daniel Smilkov 等人。2017 -
SaliencyMap: Deep Inside Convolutional Networks: Visualizing Image Classification Models and Saliency Maps, K. Simonyan 等。人。2014 -
GradCAM,GuidedGradCAM: Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization, Ramprasaath R. Selvaraju 等人。2017 -
GBP(Guided Backpropagation):追求简单:全卷积网络,Jost Tobias Springenberg 等人。2015 -
Sensitivity:通过有意义的扰动解释黑盒
执照
VINN 已获得 MIT 许可,可在 LICENSE 文件中找到。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。