''' Netdissect package. To run dissection: 1. Load up the convolutional model you wish to dissect, and wrap it in an InstrumentedModel. Call imodel.retain_layers([layernames,..]) to analyze a specified set of layers. 2. Load the segmentation dataset using the BrodenDataset class; use the transform_image argument to normalize images to be suitable for the model, or the size argument to truncate the dataset. 3. Write a function to recover the original image (with RGB scaled to [0...1]) given a normalized dataset image; ReverseNormalize in this package inverts transforms.Normalize for this purpose. 4. Choose a directory in which to write the output, and call dissect(outdir, model, dataset). Example: from netdissect import InstrumentedModel, dissect from netdissect import BrodenDataset, ReverseNormalize model = InstrumentedModel(load_my_model()) model.eval() model.cuda() model.retain_layers(['conv1', 'conv2', 'conv3', 'conv4', 'conv5']) bds = BrodenDataset('dataset/broden1_227', transform_image=transforms.Compose([ transforms.ToTensor(), transforms.Normalize(IMAGE_MEAN, IMAGE_STDEV)]), size=1000) dissect('result/dissect', model, bds, recover_image=ReverseNormalize(IMAGE_MEAN, IMAGE_STDEV), examples_per_unit=10) ''' from .dissection import dissect, ReverseNormalize from .dissection import ClassifierSegRunner, GeneratorSegRunner from .dissection import ImageOnlySegRunner from .broden import BrodenDataset, ScaleSegmentation, scatter_batch from .segdata import MultiSegmentDataset from .nethook import InstrumentedModel from .zdataset import z_dataset_for_model, z_sample_for_model, standard_z_sample from . import actviz from . import progress from . import runningstats from . import sampler __all__ = [ 'dissect', 'ReverseNormalize', 'ClassifierSegRunner', 'GeneratorSegRunner', 'ImageOnlySegRunner', 'BrodenDataset', 'ScaleSegmentation', 'scatter_batch', 'MultiSegmentDataset', 'InstrumentedModel', 'z_dataset_for_model', 'z_sample_for_model', 'standard_z_sample' 'actviz', 'progress', 'runningstats', 'sampler' ]