tf_cnnvis is a CNN visualization library which you can use to better understand your own CNNs. We use the TensorFlow library at the backend and the generated images are displayed in TensorBoard. We have implemented 2 CNN visualization techniques so far:
- Based on the paper Visualizing and Understanding Convolutional Networks by Matthew D. Zeiler and Rob Fergus. The goal here is to reconstruct the input image from the information contained in any given layers of the convolutional neural network. Here are a few examples
Figure 1: Original image and the reconstructed versions from maxpool layer 1,2 and 3 of Alexnet generated using tf_cnnvis.
- CNN visualization based on Deep dream by Google. Here's the relevant blog post explaining the technique. In essence, it attempts to construct an input image that maximizes the activation for a given output. We present some samples below:
Carbonara | Ibex | Elephant | Ostrich |
Cheese burger | Tennis ball | Fountain pen | Clock tower |
Cauliflower | Baby Milk bottle | Sea lion | Dolphin |
- Tensorflow (>= 1.0)
- numpy
- scipy
- h5py
- wget
- Pillow
- six
- scikit-image
If you are using pip you can install these with
pip install tensorflow numpy scipy h5py wget Pillow six scikit-image
Clone the repository
#!bash
git clone https://github.com/InFoCusp/tf_cnnvis.git
And run
#!bash
sudo pip install setuptools
sudo python setup.py install
sudo python setup.py clean
tf_cnnvis.activation_visualization(graph_or_path, value_feed_dict, input_tensor=None, layers='r', path_logdir='./Log', path_outdir='./Output')
The function to generate the activation visualizations of the input image at the given layer.
-
graph_or_path (tf.Graph object or String) – TF graph or [Path-to-saved-graph] as String containing the CNN.
-
value_feed_dict (dict) – Values of placeholders to feed while evaluating the graph
- dict : {placeholder1 : value1, ...}
-
input_tensor (tf.tensor object (Default = None)) – tf.tensor where we pass the input images to the TF graph
-
layers (list or String (Default = 'r')) –
- layerName : Reconstruction from a layer specified by name
- ‘r’ : Reconstruction from all the relu layers
- ‘p’ : Reconstruction from all the pooling layers
- ‘c’ : Reconstruction from all the convolutional layers
-
path_outdir (String (Default = "./Output")) – [path-to-dir] to save results into disk as images
-
path_logdir (String (Default = "./Log")) – [path-to-log-dir] to make log file for TensorBoard visualization
- is_success (boolean) – True if the function ran successfully. False otherwise
tf_cnnvis.deconv_visualization(graph_or_path, value_feed_dict, input_tensor=None, layers='r', path_logdir='./Log', path_outdir='./Output')
The function to generate the visualizations of the input image reconstructed from the feature maps of a given layer.
-
graph_or_path (tf.Graph object or String) – TF graph or [Path-to-saved-graph] as String containing the CNN.
-
value_feed_dict (dict) – Values of placeholders to feed while evaluating the graph
- dict : {placeholder1 : value1, ...}
-
input_tensor (tf.tensor object (Default = None)) – tf.tensor where we pass the input images to the TF graph
-
layers (list or String (Default = 'r')) –
- layerName : Reconstruction from a layer specified by name
- ‘r’ : Reconstruction from all the relu layers
- ‘p’ : Reconstruction from all the pooling layers
- ‘c’ : Reconstruction from all the convolutional layers
-
path_outdir (String (Default = "./Output")) – [path-to-dir] to save results into disk as images
-
path_logdir (String (Default = "./Log")) – [path-to-log-dir] to make log file for TensorBoard visualization
- is_success (boolean) – True if the function ran successfully. False otherwise
tf_cnnvis.deepdream_visualization(graph_or_path, value_feed_dict, layer, classes, input_tensor=None, path_logdir='./Log', path_outdir='./Output')
The function to generate the visualizations of the input image reconstructed from the feature maps of a given layer.
-
graph_or_path (tf.Graph object or String) – TF graph or [Path-to-saved-graph] as String containing the CNN.
-
value_feed_dict (dict) – Values of placeholders to feed while evaluating the graph
- dict : {placeholder1 : value1, ...}
-
layer (String) - name of a layer in TF graph
-
classes (List) - list featuremap index for the class classification layer
-
input_tensor (tf.tensor object (Default = None)) – tf.tensor where we pass the input images to the TF graph
-
path_outdir (String (Default = "./Output")) – [path-to-dir] to save results into disk as images
-
path_logdir (String (Default = "./Log")) – [path-to-log-dir] to make log file for TensorBoard visualization
- is_success (boolean) – True if the function ran successfully. False otherwise
To start Tensorflow, run the following command on the console
#!bash
tensorboard --logdir=./Log
and on the TensorBoard homepage look under the Images tab
Performs Min-Max image normalization. Transforms the pixel intensity values to range [0, ubound]
- image (3-D numpy array) – A numpy array to normalize
- ubound (float (Default = 255.0)) – upperbound for a image pixel value
- norm_image (3-D numpy array) – The normalized image
Convert 4-D numpy array into a grid of images for display
- Xs (4-D numpy array (first axis contations an image)) – The 4D array of images to put onto grid
- padding (int (Default = 1)) – Spacing between grid cells
- ubound (float (Default = 255.0)) – upperbound for a image pixel value
- (3-D numpy array) – A grid of input images