# cifar10_test_featuremaps **Repository Path**: jackeywang7/cifar10_test_featuremaps ## Basic Information - **Project Name**: cifar10_test_featuremaps - **Description**: cifar10 testdata featuremaps - **Primary Language**: Python - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-04-26 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Introduction about featuremaps extracted from cifar10 >we extract the featuremaps from a trained CifarNet in cifar-10 dataset. > >The CifarNet architecutre is refer from > >[1]. Ma, B. Li, Y. Wang, S. M. Erfani, S. Wijewickrema, M. E. Houle, G. Schoenebeck, D. Song, and J. Bailey. Characterizing adversarial subspaces using local intrinsic dimensionality. arXiv preprint arXiv:1801.02613, 2018. 2, 5, 6, 7, 11, 12 > >[2] Krishna Kanth Nakka,Mathieu Salzmann Interpretable BoW Network from Adversarial Example Detection. arXiv:1901.02229v1 You can download the featuremaps and model from :https://gitee.com/jackeywang7/cifar10_test_featuremaps **Enviroment:** pytorch1.0+,HDF5,Numpy ## 1.0 Data **We train a CifarNet model in cifar-10 and the test accuracy can archieve 87.29%(the best result in that network architecture)** Cifar-10 dataset:http://www.cs.toronto.edu/~kriz/cifar.html?usg=alkjrhjqbhw2llxlo8emqns-tbk0at96jq The CIFAR-10 dataset consists of 60000 32x32 colour images in 10 classes, with 6000 images per class. There are 50000 training images and 10000 test images. ![](https://jackeyimage.oss-cn-beijing.aliyuncs.com/img20200426180644.png) ## 2.0 CNN network architecture ``` CifarNet( (features): Sequential( (0): Conv2d(3, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) #[3,32,32] (1): ReLU(inplace=True) (2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (3): ReLU(inplace=True) (4): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) #feature map[32,16,16] (5): Conv2d(32, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))#[64,16,16] (6): ReLU(inplace=True) (7): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (8): ReLU(inplace=True) (9): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)#[64,8,8] (10): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (11): ReLU(inplace=True) (12): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) #feature map size[128,8,8] (13): ReLU(inplace=True) #extract featuremap over here [128,8,8] (14): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) #feture map size[128,4,4] ) (classifier): Sequential( (0): Linear(in_features=2048, out_features=1024, bias=True) (1): ReLU(inplace=True) (2): Dropout(p=0.5, inplace=False) (3): Linear(in_features=1024, out_features=512, bias=True) (4): ReLU(inplace=True) (5): Dropout(p=0.5, inplace=False) (6): Linear(in_features=512, out_features=10, bias=True) ) ) ``` ## 3.0 Feature maps **we extract the feature maps from the target layer "13"(see above architecture)** > from train_data: > > Class:airplane featuremap.size:(1000, 128, 8, 8) label:0 objNum:1000 > Class:automobile featuremap.size:(1000, 128, 8, 8) label:1 objNum:1000 > Class:bird featuremap.size:(1000, 128, 8, 8) label:2 objNum:1000 > Class:cat featuremap.size:(1000, 128, 8, 8) label:3 objNum:1000 > Class:deer featuremap.size:(1000, 128, 8, 8) label:4 objNum:1000 > Class:dog featuremap.size:(1000, 128, 8, 8) label:5 objNum:1000 > Class:frog featuremap.size:(1000, 128, 8, 8) label:6 objNum:1000 > Class:horse featuremap.size:(1000, 128, 8, 8) label:7 objNum:1000 > Class:ship featuremap.size:(1000, 128, 8, 8) label:8 objNum:1000 > Class:truck featuremap.size:(1000, 128, 8, 8) label:9 objNum:1000 > > from test_data: > > Class:airplane featuremap.size:(1000, 128, 8, 8) label:0 objNum:1000 > Class:automobile featuremap.size:(1000, 128, 8, 8) label:1 objNum:1000 > Class:bird featuremap.size:(1000, 128, 8, 8) label:2 objNum:1000 > Class:cat featuremap.size:(1000, 128, 8, 8) label:3 objNum:1000 > Class:deer featuremap.size:(1000, 128, 8, 8) label:4 objNum:1000 > Class:dog featuremap.size:(1000, 128, 8, 8) label:5 objNum:1000 > Class:frog featuremap.size:(1000, 128, 8, 8) label:6 objNum:1000 > Class:horse featuremap.size:(1000, 128, 8, 8) label:7 objNum:1000 > Class:ship featuremap.size:(1000, 128, 8, 8) label:8 objNum:1000 > Class:truck featuremap.size:(1000, 128, 8, 8) label:9 objNum:1000 You can read the hdf5 from following code: ```python import h5py import numpy classes = ('airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck') #You should modify the hdf5 save_path save_path = "9.truck_testset_data.h5" def read_rougCNN_hdf5(save_path, target_layer=["13"]): #only extact the target layer "13" from the pretrain_model f = h5py.File(save_path, 'r') layerNum = len(target_layer) label = f['label'][:] for idx, layer in enumerate(target_layer): curgroup = f[layer] curlayer_featuremap = curgroup['layerfeaturemaps'][:] f.close() return curlayer_featuremap, label if __name__=="__main__": #test featuremap,label = read_rougCNN_hdf5(save_path) print(featuremap.shape,classes[label[0]]) ```