Package: torchprism
PRISM -PrincipalImageSectionsMappingGraphic Author:Natalia RusinA novel tool that utilizes Principal Component Analysis to display discriminative featues detected by a given convolutional neural network.
It complies with virtually all CNNs.Table of ContentsUsageprismargumentsOther argumentsDemoResultsVariance across all Principal ComponentesSaliency maps integrationClusteringRead moreUsageFor user's convenience we have prepared an argument-feedable excutableprism.
In order to use it, please prepare virtual env:python3-mvenvvenvsource./venv/bin/activate
pipinstall--upgradepip
pipinstall-rrequirements.txt
./prismprismargumentsArgumentDescriptionResultnoneDefault PRISM exection with Gradual Extrapolation applied--no-gradual-extrapolationSkipping Gradual Extrapolation--inclusiveQuantize colours and show only common for all images in batch--inclusive & --no-gradual-extrapolationQuantize colours and show only common for all images in batch.Skip GE!--exclusiveQuantize colours and show only unique features for images in batch--exclusive & --no-gradual-extrapolationQuantize colours and show only unique features for images in batch.Skip GE!--exclusive & --inclusiveQuantize original PRISM outputSkip GE!--split-rgbSplit PRISM output into separate RGB channels.--split-rgb & --no-gradual-extrapolationAlso split into RGB, but without Gradual Extrapolation.Skip GE!Note it can also go with--inclusiveor--exclusiveOther argumentsArgumentDescriptionDefault--input=/path/to/...Path from where to take images. Note it is aglob, so value./samples/**/*.jpgwill mean:jpgimages from ALL subfolders ofsamples./samples/*.jpg--model=model-nameModel to be used with PRISM. Note that Gradual Extrapolation may not behave properly for some models outsidevggfamily.vgg16--saliency=model-nameMakes TorchPRISM perform chosen saliency map generating process and combines it with PRISM’s output. Currently supports:- Contrastive Excitation Backpropagationexct-backp- GradCAMgradcamnone--clusterGenerates binary file with list of lists - which image contains which features according to PRISM. It can be further used for clustering in script som.py--helpPrint help details and exitDemoSimplest snippetof working code.importsyssys.path.insert(0,"../")fromtorchprismimportPRISMfromtorchvisionimportmodelsfromutilsimportload_images,draw_input_n_prism# load images into batchinput_batch=load_images()model=models.vgg11(pretrained=True)model.eval()PRISM.register_hooks(model)model(input_batch)prism_maps_batch=PRISM.get_maps()drawable_input_batch=input_batch.permute(0,2,3,1).detach().cpu().numpy()drawable_prism_maps_batch=prism_maps_batch.permute(0,2,3,1).detach().cpu().numpy()draw_input_n_prism(drawable_input_batch,drawable_prism_maps_batch)First we have to import PRISM and torch models., as well as functions for preparing input images as simple torch batch and function to draw batches. Next we have to load the model, in this case a pretrained vgg11 has been chosen and then we have to call the first PRISM method to register required hooks in the model.
With such a prepared model we can perform the classification and, since the actual output is not needed, we can just ignore it. Model execution is followed by using the second PRISM method to calculate features maps for the processed batch. Finally we have to prepare both input and PRISM output so they can be drawn and as the last step we call a method that displays them using e.g. matplotlib.ResultsThe results allow us to see the discriminative features found by the model.
On the sample images below we can see wolvesWe can notice that all wolves have similar colors - features, found on their bodies. Furthermore the coyote also shows almost identical characteristics except the mouth element. wolves have a black stain around their noses, while coyote does not.Variance across all Principal ComponentesAlso an image with variance is being plotted.Saliency maps integrationSince PRISM can be integrated with all saliency map types it comes with built-in generating tools.
We have an example where dog (malamute) is properly recognized by VGG-16 model. However it is alongside mushroom, which despite being correctly identified, has no impact on models classification decision.
Apparently mushroom is not important for the classification, therefore we can generate saliency map for the given example and merge it with PRISM's output.ClusteringLast but not least a clusterig can be performed using PRISM in order to detect potentially amibgious classes.
We have taken 5 canine classes (colour from cluster map in bracket):coyote (orange)grey fox (red)timber wolf (green)samoyed (purple)border collie (blue)From the figure we can conclude that coyotes(orange) could be easily confused with timber wolves(green) and grey foxes(red). On the other hand the Samoyed and Border collie specimens (purple and blue respectively) are clearly distinguishable from the rest.Read morePRISM comparison with other methodsIEEE Access: Gradual ExtrapolationICCS-2021: Attention FocusICCS-2022: PRISMPP RAI'22: SummaryOld LOGO