├── .gitignore ├── LICENSE ├── README.md ├── custom_layers.py ├── densenet121.py ├── densenet161.py ├── densenet169.py ├── imagenet_models └── README.md ├── resources ├── cat.jpg ├── classes.txt └── shark.jpg └── test_inference.py /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | env/ 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | downloads/ 16 | eggs/ 17 | .eggs/ 18 | lib/ 19 | lib64/ 20 | parts/ 21 | sdist/ 22 | var/ 23 | *.egg-info/ 24 | .installed.cfg 25 | *.egg 26 | 27 | # PyInstaller 28 | # Usually these files are written by a python script from a template 29 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 30 | *.manifest 31 | *.spec 32 | 33 | # Installer logs 34 | pip-log.txt 35 | pip-delete-this-directory.txt 36 | 37 | # Unit test / coverage reports 38 | htmlcov/ 39 | .tox/ 40 | .coverage 41 | .coverage.* 42 | .cache 43 | nosetests.xml 44 | coverage.xml 45 | *,cover 46 | .hypothesis/ 47 | 48 | # Translations 49 | *.mo 50 | *.pot 51 | 52 | # Django stuff: 53 | *.log 54 | local_settings.py 55 | 56 | # Flask stuff: 57 | instance/ 58 | .webassets-cache 59 | 60 | # Scrapy stuff: 61 | .scrapy 62 | 63 | # Sphinx documentation 64 | docs/_build/ 65 | 66 | # PyBuilder 67 | target/ 68 | 69 | # IPython Notebook 70 | .ipynb_checkpoints 71 | 72 | # pyenv 73 | .python-version 74 | 75 | # celery beat schedule file 76 | celerybeat-schedule 77 | 78 | # dotenv 79 | .env 80 | 81 | # virtualenv 82 | venv/ 83 | ENV/ 84 | 85 | # Spyder project settings 86 | .spyderproject 87 | 88 | # Rope project settings 89 | .ropeproject 90 | 91 | *.pyc 92 | *.swp 93 | *.h5 94 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Felix Yu 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DenseNet-Keras with ImageNet Pretrained Models 2 | 3 | This is an [Keras](https://keras.io/) implementation of DenseNet with [ImageNet](http://www.image-net.org/) pretrained weights. The weights are converted from [Caffe Models](https://github.com/shicai/DenseNet-Caffe). The implementation supports both [Theano](http://deeplearning.net/software/theano/) and [TensorFlow](https://www.tensorflow.org/) backends. 4 | 5 | To know more about how DenseNet works, please refer to the [original paper](https://arxiv.org/abs/1608.06993) 6 | 7 | ``` 8 | Densely Connected Convolutional Networks 9 | Gao Huang, Zhuang Liu, Kilian Q. Weinberger, Laurens van der Maaten 10 | arXiv:1608.06993 11 | ``` 12 | 13 | ## Pretrained DenseNet Models on ImageNet 14 | 15 | The top-1/5 accuracy rates by using single center crop (crop size: 224x224, image size: 256xN) 16 | 17 | Network|Top-1|Top-5|Theano|Tensorflow 18 | :---:|:---:|:---:|:---:|:---: 19 | DenseNet 121 (k=32)| 74.91| 92.19| [model (32 MB)](https://drive.google.com/open?id=0Byy2AcGyEVxfMlRYb3YzV210VzQ)| [model (32 MB)](https://drive.google.com/open?id=0Byy2AcGyEVxfSTA4SHJVOHNuTXc) 20 | DenseNet 169 (k=32)| 76.09| 93.14| [model (56 MB)](https://drive.google.com/open?id=0Byy2AcGyEVxfN0d3T1F1MXg0NlU)| [model (56 MB)](https://drive.google.com/open?id=0Byy2AcGyEVxfSEc5UC1ROUFJdmM) 21 | DenseNet 161 (k=48)| 77.64| 93.79| [model (112 MB)](https://drive.google.com/open?id=0Byy2AcGyEVxfVnlCMlBGTDR3RGs)| [model (112 MB)](https://drive.google.com/open?id=0Byy2AcGyEVxfUDZwVjU2cFNidTA) 22 | 23 | ## Usage 24 | 25 | First, download the above pretrained weights to the `imagenet_models` folder. 26 | 27 | Run `test_inference.py` for an example of how to use the pretrained model to make inference. 28 | 29 | ``` 30 | python test_inference.py 31 | ``` 32 | 33 | ## Fine-tuning 34 | 35 | Check [this](https://github.com/flyyufelix/cnn_finetune) out to see example of fine-tuning DenseNet with your own dataset. 36 | 37 | ## Requirements 38 | 39 | * Keras ~~1.2.2~~ 2.0.5 40 | * Theano 0.8.2 or TensorFlow ~~0.12.0~~ 1.2.1 41 | 42 | ## Updates 43 | 44 | * Keras 2.0.5 and TensorFlow 1.2.1 are supported 45 | 46 | 47 | -------------------------------------------------------------------------------- /custom_layers.py: -------------------------------------------------------------------------------- 1 | from keras.engine import Layer, InputSpec 2 | try: 3 | from keras import initializations 4 | except ImportError: 5 | from keras import initializers as initializations 6 | import keras.backend as K 7 | 8 | class Scale(Layer): 9 | '''Custom Layer for DenseNet used for BatchNormalization. 10 | 11 | Learns a set of weights and biases used for scaling the input data. 12 | the output consists simply in an element-wise multiplication of the input 13 | and a sum of a set of constants: 14 | 15 | out = in * gamma + beta, 16 | 17 | where 'gamma' and 'beta' are the weights and biases larned. 18 | 19 | # Arguments 20 | axis: integer, axis along which to normalize in mode 0. For instance, 21 | if your input tensor has shape (samples, channels, rows, cols), 22 | set axis to 1 to normalize per feature map (channels axis). 23 | momentum: momentum in the computation of the 24 | exponential average of the mean and standard deviation 25 | of the data, for feature-wise normalization. 26 | weights: Initialization weights. 27 | List of 2 Numpy arrays, with shapes: 28 | `[(input_shape,), (input_shape,)]` 29 | beta_init: name of initialization function for shift parameter 30 | (see [initializations](../initializations.md)), or alternatively, 31 | Theano/TensorFlow function to use for weights initialization. 32 | This parameter is only relevant if you don't pass a `weights` argument. 33 | gamma_init: name of initialization function for scale parameter (see 34 | [initializations](../initializations.md)), or alternatively, 35 | Theano/TensorFlow function to use for weights initialization. 36 | This parameter is only relevant if you don't pass a `weights` argument. 37 | ''' 38 | def __init__(self, weights=None, axis=-1, momentum = 0.9, beta_init='zero', gamma_init='one', **kwargs): 39 | self.momentum = momentum 40 | self.axis = axis 41 | self.beta_init = initializations.get(beta_init) 42 | self.gamma_init = initializations.get(gamma_init) 43 | self.initial_weights = weights 44 | super(Scale, self).__init__(**kwargs) 45 | 46 | def build(self, input_shape): 47 | self.input_spec = [InputSpec(shape=input_shape)] 48 | shape = (int(input_shape[self.axis]),) 49 | 50 | # Tensorflow >= 1.0.0 compatibility 51 | self.gamma = K.variable(self.gamma_init(shape), name='{}_gamma'.format(self.name)) 52 | self.beta = K.variable(self.beta_init(shape), name='{}_beta'.format(self.name)) 53 | #self.gamma = self.gamma_init(shape, name='{}_gamma'.format(self.name)) 54 | #self.beta = self.beta_init(shape, name='{}_beta'.format(self.name)) 55 | self.trainable_weights = [self.gamma, self.beta] 56 | 57 | if self.initial_weights is not None: 58 | self.set_weights(self.initial_weights) 59 | del self.initial_weights 60 | 61 | def call(self, x, mask=None): 62 | input_shape = self.input_spec[0].shape 63 | broadcast_shape = [1] * len(input_shape) 64 | broadcast_shape[self.axis] = input_shape[self.axis] 65 | 66 | out = K.reshape(self.gamma, broadcast_shape) * x + K.reshape(self.beta, broadcast_shape) 67 | return out 68 | 69 | def get_config(self): 70 | config = {"momentum": self.momentum, "axis": self.axis} 71 | base_config = super(Scale, self).get_config() 72 | return dict(list(base_config.items()) + list(config.items())) 73 | 74 | -------------------------------------------------------------------------------- /densenet121.py: -------------------------------------------------------------------------------- 1 | from keras.models import Model 2 | from keras.layers import Input, merge, ZeroPadding2D 3 | from keras.layers.core import Dense, Dropout, Activation 4 | from keras.layers.convolutional import Convolution2D 5 | from keras.layers.pooling import AveragePooling2D, GlobalAveragePooling2D, MaxPooling2D 6 | from keras.layers.normalization import BatchNormalization 7 | import keras.backend as K 8 | 9 | from custom_layers import Scale 10 | 11 | def DenseNet(nb_dense_block=4, growth_rate=32, nb_filter=64, reduction=0.0, dropout_rate=0.0, weight_decay=1e-4, classes=1000, weights_path=None): 12 | '''Instantiate the DenseNet 121 architecture, 13 | # Arguments 14 | nb_dense_block: number of dense blocks to add to end 15 | growth_rate: number of filters to add per dense block 16 | nb_filter: initial number of filters 17 | reduction: reduction factor of transition blocks. 18 | dropout_rate: dropout rate 19 | weight_decay: weight decay factor 20 | classes: optional number of classes to classify images 21 | weights_path: path to pre-trained weights 22 | # Returns 23 | A Keras model instance. 24 | ''' 25 | eps = 1.1e-5 26 | 27 | # compute compression factor 28 | compression = 1.0 - reduction 29 | 30 | # Handle Dimension Ordering for different backends 31 | global concat_axis 32 | if K.image_dim_ordering() == 'tf': 33 | concat_axis = 3 34 | img_input = Input(shape=(224, 224, 3), name='data') 35 | else: 36 | concat_axis = 1 37 | img_input = Input(shape=(3, 224, 224), name='data') 38 | 39 | # From architecture for ImageNet (Table 1 in the paper) 40 | nb_filter = 64 41 | nb_layers = [6,12,24,16] # For DenseNet-121 42 | 43 | # Initial convolution 44 | x = ZeroPadding2D((3, 3), name='conv1_zeropadding')(img_input) 45 | x = Convolution2D(nb_filter, 7, 7, subsample=(2, 2), name='conv1', bias=False)(x) 46 | x = BatchNormalization(epsilon=eps, axis=concat_axis, name='conv1_bn')(x) 47 | x = Scale(axis=concat_axis, name='conv1_scale')(x) 48 | x = Activation('relu', name='relu1')(x) 49 | x = ZeroPadding2D((1, 1), name='pool1_zeropadding')(x) 50 | x = MaxPooling2D((3, 3), strides=(2, 2), name='pool1')(x) 51 | 52 | # Add dense blocks 53 | for block_idx in range(nb_dense_block - 1): 54 | stage = block_idx+2 55 | x, nb_filter = dense_block(x, stage, nb_layers[block_idx], nb_filter, growth_rate, dropout_rate=dropout_rate, weight_decay=weight_decay) 56 | 57 | # Add transition_block 58 | x = transition_block(x, stage, nb_filter, compression=compression, dropout_rate=dropout_rate, weight_decay=weight_decay) 59 | nb_filter = int(nb_filter * compression) 60 | 61 | final_stage = stage + 1 62 | x, nb_filter = dense_block(x, final_stage, nb_layers[-1], nb_filter, growth_rate, dropout_rate=dropout_rate, weight_decay=weight_decay) 63 | 64 | x = BatchNormalization(epsilon=eps, axis=concat_axis, name='conv'+str(final_stage)+'_blk_bn')(x) 65 | x = Scale(axis=concat_axis, name='conv'+str(final_stage)+'_blk_scale')(x) 66 | x = Activation('relu', name='relu'+str(final_stage)+'_blk')(x) 67 | x = GlobalAveragePooling2D(name='pool'+str(final_stage))(x) 68 | 69 | x = Dense(classes, name='fc6')(x) 70 | x = Activation('softmax', name='prob')(x) 71 | 72 | model = Model(img_input, x, name='densenet') 73 | 74 | if weights_path is not None: 75 | model.load_weights(weights_path) 76 | 77 | return model 78 | 79 | 80 | def conv_block(x, stage, branch, nb_filter, dropout_rate=None, weight_decay=1e-4): 81 | '''Apply BatchNorm, Relu, bottleneck 1x1 Conv2D, 3x3 Conv2D, and option dropout 82 | # Arguments 83 | x: input tensor 84 | stage: index for dense block 85 | branch: layer index within each dense block 86 | nb_filter: number of filters 87 | dropout_rate: dropout rate 88 | weight_decay: weight decay factor 89 | ''' 90 | eps = 1.1e-5 91 | conv_name_base = 'conv' + str(stage) + '_' + str(branch) 92 | relu_name_base = 'relu' + str(stage) + '_' + str(branch) 93 | 94 | # 1x1 Convolution (Bottleneck layer) 95 | inter_channel = nb_filter * 4 96 | x = BatchNormalization(epsilon=eps, axis=concat_axis, name=conv_name_base+'_x1_bn')(x) 97 | x = Scale(axis=concat_axis, name=conv_name_base+'_x1_scale')(x) 98 | x = Activation('relu', name=relu_name_base+'_x1')(x) 99 | x = Convolution2D(inter_channel, 1, 1, name=conv_name_base+'_x1', bias=False)(x) 100 | 101 | if dropout_rate: 102 | x = Dropout(dropout_rate)(x) 103 | 104 | # 3x3 Convolution 105 | x = BatchNormalization(epsilon=eps, axis=concat_axis, name=conv_name_base+'_x2_bn')(x) 106 | x = Scale(axis=concat_axis, name=conv_name_base+'_x2_scale')(x) 107 | x = Activation('relu', name=relu_name_base+'_x2')(x) 108 | x = ZeroPadding2D((1, 1), name=conv_name_base+'_x2_zeropadding')(x) 109 | x = Convolution2D(nb_filter, 3, 3, name=conv_name_base+'_x2', bias=False)(x) 110 | 111 | if dropout_rate: 112 | x = Dropout(dropout_rate)(x) 113 | 114 | return x 115 | 116 | 117 | def transition_block(x, stage, nb_filter, compression=1.0, dropout_rate=None, weight_decay=1E-4): 118 | ''' Apply BatchNorm, 1x1 Convolution, averagePooling, optional compression, dropout 119 | # Arguments 120 | x: input tensor 121 | stage: index for dense block 122 | nb_filter: number of filters 123 | compression: calculated as 1 - reduction. Reduces the number of feature maps in the transition block. 124 | dropout_rate: dropout rate 125 | weight_decay: weight decay factor 126 | ''' 127 | 128 | eps = 1.1e-5 129 | conv_name_base = 'conv' + str(stage) + '_blk' 130 | relu_name_base = 'relu' + str(stage) + '_blk' 131 | pool_name_base = 'pool' + str(stage) 132 | 133 | x = BatchNormalization(epsilon=eps, axis=concat_axis, name=conv_name_base+'_bn')(x) 134 | x = Scale(axis=concat_axis, name=conv_name_base+'_scale')(x) 135 | x = Activation('relu', name=relu_name_base)(x) 136 | x = Convolution2D(int(nb_filter * compression), 1, 1, name=conv_name_base, bias=False)(x) 137 | 138 | if dropout_rate: 139 | x = Dropout(dropout_rate)(x) 140 | 141 | x = AveragePooling2D((2, 2), strides=(2, 2), name=pool_name_base)(x) 142 | 143 | return x 144 | 145 | 146 | def dense_block(x, stage, nb_layers, nb_filter, growth_rate, dropout_rate=None, weight_decay=1e-4, grow_nb_filters=True): 147 | ''' Build a dense_block where the output of each conv_block is fed to subsequent ones 148 | # Arguments 149 | x: input tensor 150 | stage: index for dense block 151 | nb_layers: the number of layers of conv_block to append to the model. 152 | nb_filter: number of filters 153 | growth_rate: growth rate 154 | dropout_rate: dropout rate 155 | weight_decay: weight decay factor 156 | grow_nb_filters: flag to decide to allow number of filters to grow 157 | ''' 158 | 159 | eps = 1.1e-5 160 | concat_feat = x 161 | 162 | for i in range(nb_layers): 163 | branch = i+1 164 | x = conv_block(concat_feat, stage, branch, growth_rate, dropout_rate, weight_decay) 165 | concat_feat = merge([concat_feat, x], mode='concat', concat_axis=concat_axis, name='concat_'+str(stage)+'_'+str(branch)) 166 | 167 | if grow_nb_filters: 168 | nb_filter += growth_rate 169 | 170 | return concat_feat, nb_filter 171 | 172 | -------------------------------------------------------------------------------- /densenet161.py: -------------------------------------------------------------------------------- 1 | from keras.models import Model 2 | from keras.layers import Input, merge, ZeroPadding2D 3 | from keras.layers.core import Dense, Dropout, Activation 4 | from keras.layers.convolutional import Convolution2D 5 | from keras.layers.pooling import AveragePooling2D, GlobalAveragePooling2D, MaxPooling2D 6 | from keras.layers.normalization import BatchNormalization 7 | import keras.backend as K 8 | 9 | from custom_layers import Scale 10 | 11 | def DenseNet(nb_dense_block=4, growth_rate=48, nb_filter=96, reduction=0.0, dropout_rate=0.0, weight_decay=1e-4, classes=1000, weights_path=None): 12 | '''Instantiate the DenseNet 161 architecture, 13 | # Arguments 14 | nb_dense_block: number of dense blocks to add to end 15 | growth_rate: number of filters to add per dense block 16 | nb_filter: initial number of filters 17 | reduction: reduction factor of transition blocks. 18 | dropout_rate: dropout rate 19 | weight_decay: weight decay factor 20 | classes: optional number of classes to classify images 21 | weights_path: path to pre-trained weights 22 | # Returns 23 | A Keras model instance. 24 | ''' 25 | eps = 1.1e-5 26 | 27 | # compute compression factor 28 | compression = 1.0 - reduction 29 | 30 | # Handle Dimension Ordering for different backends 31 | global concat_axis 32 | if K.image_dim_ordering() == 'tf': 33 | concat_axis = 3 34 | img_input = Input(shape=(224, 224, 3), name='data') 35 | else: 36 | concat_axis = 1 37 | img_input = Input(shape=(3, 224, 224), name='data') 38 | 39 | # From architecture for ImageNet (Table 1 in the paper) 40 | nb_filter = 96 41 | nb_layers = [6,12,36,24] # For DenseNet-161 42 | 43 | # Initial convolution 44 | x = ZeroPadding2D((3, 3), name='conv1_zeropadding')(img_input) 45 | x = Convolution2D(nb_filter, 7, 7, subsample=(2, 2), name='conv1', bias=False)(x) 46 | x = BatchNormalization(epsilon=eps, axis=concat_axis, name='conv1_bn')(x) 47 | x = Scale(axis=concat_axis, name='conv1_scale')(x) 48 | x = Activation('relu', name='relu1')(x) 49 | x = ZeroPadding2D((1, 1), name='pool1_zeropadding')(x) 50 | x = MaxPooling2D((3, 3), strides=(2, 2), name='pool1')(x) 51 | 52 | # Add dense blocks 53 | for block_idx in range(nb_dense_block - 1): 54 | stage = block_idx+2 55 | x, nb_filter = dense_block(x, stage, nb_layers[block_idx], nb_filter, growth_rate, dropout_rate=dropout_rate, weight_decay=weight_decay) 56 | 57 | # Add transition_block 58 | x = transition_block(x, stage, nb_filter, compression=compression, dropout_rate=dropout_rate, weight_decay=weight_decay) 59 | nb_filter = int(nb_filter * compression) 60 | 61 | final_stage = stage + 1 62 | x, nb_filter = dense_block(x, final_stage, nb_layers[-1], nb_filter, growth_rate, dropout_rate=dropout_rate, weight_decay=weight_decay) 63 | 64 | x = BatchNormalization(epsilon=eps, axis=concat_axis, name='conv'+str(final_stage)+'_blk_bn')(x) 65 | x = Scale(axis=concat_axis, name='conv'+str(final_stage)+'_blk_scale')(x) 66 | x = Activation('relu', name='relu'+str(final_stage)+'_blk')(x) 67 | x = GlobalAveragePooling2D(name='pool'+str(final_stage))(x) 68 | 69 | x = Dense(classes, name='fc6')(x) 70 | x = Activation('softmax', name='prob')(x) 71 | 72 | model = Model(img_input, x, name='densenet') 73 | 74 | if weights_path is not None: 75 | model.load_weights(weights_path) 76 | 77 | return model 78 | 79 | 80 | def conv_block(x, stage, branch, nb_filter, dropout_rate=None, weight_decay=1e-4): 81 | '''Apply BatchNorm, Relu, bottleneck 1x1 Conv2D, 3x3 Conv2D, and option dropout 82 | # Arguments 83 | x: input tensor 84 | stage: index for dense block 85 | branch: layer index within each dense block 86 | nb_filter: number of filters 87 | dropout_rate: dropout rate 88 | weight_decay: weight decay factor 89 | ''' 90 | eps = 1.1e-5 91 | conv_name_base = 'conv' + str(stage) + '_' + str(branch) 92 | relu_name_base = 'relu' + str(stage) + '_' + str(branch) 93 | 94 | # 1x1 Convolution (Bottleneck layer) 95 | inter_channel = nb_filter * 4 96 | x = BatchNormalization(epsilon=eps, axis=concat_axis, name=conv_name_base+'_x1_bn')(x) 97 | x = Scale(axis=concat_axis, name=conv_name_base+'_x1_scale')(x) 98 | x = Activation('relu', name=relu_name_base+'_x1')(x) 99 | x = Convolution2D(inter_channel, 1, 1, name=conv_name_base+'_x1', bias=False)(x) 100 | 101 | if dropout_rate: 102 | x = Dropout(dropout_rate)(x) 103 | 104 | # 3x3 Convolution 105 | x = BatchNormalization(epsilon=eps, axis=concat_axis, name=conv_name_base+'_x2_bn')(x) 106 | x = Scale(axis=concat_axis, name=conv_name_base+'_x2_scale')(x) 107 | x = Activation('relu', name=relu_name_base+'_x2')(x) 108 | x = ZeroPadding2D((1, 1), name=conv_name_base+'_x2_zeropadding')(x) 109 | x = Convolution2D(nb_filter, 3, 3, name=conv_name_base+'_x2', bias=False)(x) 110 | 111 | if dropout_rate: 112 | x = Dropout(dropout_rate)(x) 113 | 114 | return x 115 | 116 | 117 | def transition_block(x, stage, nb_filter, compression=1.0, dropout_rate=None, weight_decay=1E-4): 118 | ''' Apply BatchNorm, 1x1 Convolution, averagePooling, optional compression, dropout 119 | # Arguments 120 | x: input tensor 121 | stage: index for dense block 122 | nb_filter: number of filters 123 | compression: calculated as 1 - reduction. Reduces the number of feature maps in the transition block. 124 | dropout_rate: dropout rate 125 | weight_decay: weight decay factor 126 | ''' 127 | 128 | eps = 1.1e-5 129 | conv_name_base = 'conv' + str(stage) + '_blk' 130 | relu_name_base = 'relu' + str(stage) + '_blk' 131 | pool_name_base = 'pool' + str(stage) 132 | 133 | x = BatchNormalization(epsilon=eps, axis=concat_axis, name=conv_name_base+'_bn')(x) 134 | x = Scale(axis=concat_axis, name=conv_name_base+'_scale')(x) 135 | x = Activation('relu', name=relu_name_base)(x) 136 | x = Convolution2D(int(nb_filter * compression), 1, 1, name=conv_name_base, bias=False)(x) 137 | 138 | if dropout_rate: 139 | x = Dropout(dropout_rate)(x) 140 | 141 | x = AveragePooling2D((2, 2), strides=(2, 2), name=pool_name_base)(x) 142 | 143 | return x 144 | 145 | 146 | def dense_block(x, stage, nb_layers, nb_filter, growth_rate, dropout_rate=None, weight_decay=1e-4, grow_nb_filters=True): 147 | ''' Build a dense_block where the output of each conv_block is fed to subsequent ones 148 | # Arguments 149 | x: input tensor 150 | stage: index for dense block 151 | nb_layers: the number of layers of conv_block to append to the model. 152 | nb_filter: number of filters 153 | growth_rate: growth rate 154 | dropout_rate: dropout rate 155 | weight_decay: weight decay factor 156 | grow_nb_filters: flag to decide to allow number of filters to grow 157 | ''' 158 | 159 | eps = 1.1e-5 160 | concat_feat = x 161 | 162 | for i in range(nb_layers): 163 | branch = i+1 164 | x = conv_block(concat_feat, stage, branch, growth_rate, dropout_rate, weight_decay) 165 | concat_feat = merge([concat_feat, x], mode='concat', concat_axis=concat_axis, name='concat_'+str(stage)+'_'+str(branch)) 166 | 167 | if grow_nb_filters: 168 | nb_filter += growth_rate 169 | 170 | return concat_feat, nb_filter 171 | 172 | -------------------------------------------------------------------------------- /densenet169.py: -------------------------------------------------------------------------------- 1 | from keras.models import Model 2 | from keras.layers import Input, merge, ZeroPadding2D 3 | from keras.layers.core import Dense, Dropout, Activation 4 | from keras.layers.convolutional import Convolution2D 5 | from keras.layers.pooling import AveragePooling2D, GlobalAveragePooling2D, MaxPooling2D 6 | from keras.layers.normalization import BatchNormalization 7 | import keras.backend as K 8 | 9 | from custom_layers import Scale 10 | 11 | def DenseNet(nb_dense_block=4, growth_rate=32, nb_filter=64, reduction=0.0, dropout_rate=0.0, weight_decay=1e-4, classes=1000, weights_path=None): 12 | '''Instantiate the DenseNet architecture, 13 | # Arguments 14 | nb_dense_block: number of dense blocks to add to end 15 | growth_rate: number of filters to add per dense block 16 | nb_filter: initial number of filters 17 | reduction: reduction factor of transition blocks. 18 | dropout_rate: dropout rate 19 | weight_decay: weight decay factor 20 | classes: optional number of classes to classify images 21 | weights_path: path to pre-trained weights 22 | # Returns 23 | A Keras model instance. 24 | ''' 25 | eps = 1.1e-5 26 | 27 | # compute compression factor 28 | compression = 1.0 - reduction 29 | 30 | # Handle Dimension Ordering for different backends 31 | global concat_axis 32 | if K.image_dim_ordering() == 'tf': 33 | concat_axis = 3 34 | img_input = Input(shape=(224, 224, 3), name='data') 35 | else: 36 | concat_axis = 1 37 | img_input = Input(shape=(3, 224, 224), name='data') 38 | 39 | # From architecture for ImageNet (Table 1 in the paper) 40 | nb_filter = 64 41 | nb_layers = [6,12,32,32] # For DenseNet-169 42 | 43 | # Initial convolution 44 | x = ZeroPadding2D((3, 3), name='conv1_zeropadding')(img_input) 45 | x = Convolution2D(nb_filter, 7, 7, subsample=(2, 2), name='conv1', bias=False)(x) 46 | x = BatchNormalization(epsilon=eps, axis=concat_axis, name='conv1_bn')(x) 47 | x = Scale(axis=concat_axis, name='conv1_scale')(x) 48 | x = Activation('relu', name='relu1')(x) 49 | x = ZeroPadding2D((1, 1), name='pool1_zeropadding')(x) 50 | x = MaxPooling2D((3, 3), strides=(2, 2), name='pool1')(x) 51 | 52 | # Add dense blocks 53 | for block_idx in range(nb_dense_block - 1): 54 | stage = block_idx+2 55 | x, nb_filter = dense_block(x, stage, nb_layers[block_idx], nb_filter, growth_rate, dropout_rate=dropout_rate, weight_decay=weight_decay) 56 | 57 | # Add transition_block 58 | x = transition_block(x, stage, nb_filter, compression=compression, dropout_rate=dropout_rate, weight_decay=weight_decay) 59 | nb_filter = int(nb_filter * compression) 60 | 61 | final_stage = stage + 1 62 | x, nb_filter = dense_block(x, final_stage, nb_layers[-1], nb_filter, growth_rate, dropout_rate=dropout_rate, weight_decay=weight_decay) 63 | 64 | x = BatchNormalization(epsilon=eps, axis=concat_axis, name='conv'+str(final_stage)+'_blk_bn')(x) 65 | x = Scale(axis=concat_axis, name='conv'+str(final_stage)+'_blk_scale')(x) 66 | x = Activation('relu', name='relu'+str(final_stage)+'_blk')(x) 67 | x = GlobalAveragePooling2D(name='pool'+str(final_stage))(x) 68 | 69 | x = Dense(classes, name='fc6')(x) 70 | x = Activation('softmax', name='prob')(x) 71 | 72 | model = Model(img_input, x, name='densenet') 73 | 74 | if weights_path is not None: 75 | model.load_weights(weights_path) 76 | 77 | return model 78 | 79 | 80 | def conv_block(x, stage, branch, nb_filter, dropout_rate=None, weight_decay=1e-4): 81 | '''Apply BatchNorm, Relu, bottleneck 1x1 Conv2D, 3x3 Conv2D, and option dropout 82 | # Arguments 83 | x: input tensor 84 | stage: index for dense block 85 | branch: layer index within each dense block 86 | nb_filter: number of filters 87 | dropout_rate: dropout rate 88 | weight_decay: weight decay factor 89 | ''' 90 | eps = 1.1e-5 91 | conv_name_base = 'conv' + str(stage) + '_' + str(branch) 92 | relu_name_base = 'relu' + str(stage) + '_' + str(branch) 93 | 94 | # 1x1 Convolution (Bottleneck layer) 95 | inter_channel = nb_filter * 4 96 | x = BatchNormalization(epsilon=eps, axis=concat_axis, name=conv_name_base+'_x1_bn')(x) 97 | x = Scale(axis=concat_axis, name=conv_name_base+'_x1_scale')(x) 98 | x = Activation('relu', name=relu_name_base+'_x1')(x) 99 | x = Convolution2D(inter_channel, 1, 1, name=conv_name_base+'_x1', bias=False)(x) 100 | 101 | if dropout_rate: 102 | x = Dropout(dropout_rate)(x) 103 | 104 | # 3x3 Convolution 105 | x = BatchNormalization(epsilon=eps, axis=concat_axis, name=conv_name_base+'_x2_bn')(x) 106 | x = Scale(axis=concat_axis, name=conv_name_base+'_x2_scale')(x) 107 | x = Activation('relu', name=relu_name_base+'_x2')(x) 108 | x = ZeroPadding2D((1, 1), name=conv_name_base+'_x2_zeropadding')(x) 109 | x = Convolution2D(nb_filter, 3, 3, name=conv_name_base+'_x2', bias=False)(x) 110 | 111 | if dropout_rate: 112 | x = Dropout(dropout_rate)(x) 113 | 114 | return x 115 | 116 | 117 | def transition_block(x, stage, nb_filter, compression=1.0, dropout_rate=None, weight_decay=1E-4): 118 | ''' Apply BatchNorm, 1x1 Convolution, averagePooling, optional compression, dropout 119 | # Arguments 120 | x: input tensor 121 | stage: index for dense block 122 | nb_filter: number of filters 123 | compression: calculated as 1 - reduction. Reduces the number of feature maps in the transition block. 124 | dropout_rate: dropout rate 125 | weight_decay: weight decay factor 126 | ''' 127 | 128 | eps = 1.1e-5 129 | conv_name_base = 'conv' + str(stage) + '_blk' 130 | relu_name_base = 'relu' + str(stage) + '_blk' 131 | pool_name_base = 'pool' + str(stage) 132 | 133 | x = BatchNormalization(epsilon=eps, axis=concat_axis, name=conv_name_base+'_bn')(x) 134 | x = Scale(axis=concat_axis, name=conv_name_base+'_scale')(x) 135 | x = Activation('relu', name=relu_name_base)(x) 136 | x = Convolution2D(int(nb_filter * compression), 1, 1, name=conv_name_base, bias=False)(x) 137 | 138 | if dropout_rate: 139 | x = Dropout(dropout_rate)(x) 140 | 141 | x = AveragePooling2D((2, 2), strides=(2, 2), name=pool_name_base)(x) 142 | 143 | return x 144 | 145 | 146 | def dense_block(x, stage, nb_layers, nb_filter, growth_rate, dropout_rate=None, weight_decay=1e-4, grow_nb_filters=True): 147 | ''' Build a dense_block where the output of each conv_block is fed to subsequent ones 148 | # Arguments 149 | x: input tensor 150 | stage: index for dense block 151 | nb_layers: the number of layers of conv_block to append to the model. 152 | nb_filter: number of filters 153 | growth_rate: growth rate 154 | dropout_rate: dropout rate 155 | weight_decay: weight decay factor 156 | grow_nb_filters: flag to decide to allow number of filters to grow 157 | ''' 158 | 159 | eps = 1.1e-5 160 | concat_feat = x 161 | 162 | for i in range(nb_layers): 163 | branch = i+1 164 | x = conv_block(concat_feat, stage, branch, growth_rate, dropout_rate, weight_decay) 165 | concat_feat = merge([concat_feat, x], mode='concat', concat_axis=concat_axis, name='concat_'+str(stage)+'_'+str(branch)) 166 | 167 | if grow_nb_filters: 168 | nb_filter += growth_rate 169 | 170 | return concat_feat, nb_filter 171 | 172 | -------------------------------------------------------------------------------- /imagenet_models/README.md: -------------------------------------------------------------------------------- 1 | ## Download ImageNet pretrained weights to this folder 2 | -------------------------------------------------------------------------------- /resources/cat.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flyyufelix/DenseNet-Keras/8c42d8092b2616a9fbf025c756b14c67be708685/resources/cat.jpg -------------------------------------------------------------------------------- /resources/classes.txt: -------------------------------------------------------------------------------- 1 | n01440764 tench, Tinca tinca 2 | n01443537 goldfish, Carassius auratus 3 | n01484850 great white shark, white shark, man-eater, man-eating shark, Carcharodon carcharias 4 | n01491361 tiger shark, Galeocerdo cuvieri 5 | n01494475 hammerhead, hammerhead shark 6 | n01496331 electric ray, crampfish, numbfish, torpedo 7 | n01498041 stingray 8 | n01514668 cock 9 | n01514859 hen 10 | n01518878 ostrich, Struthio camelus 11 | n01530575 brambling, Fringilla montifringilla 12 | n01531178 goldfinch, Carduelis carduelis 13 | n01532829 house finch, linnet, Carpodacus mexicanus 14 | n01534433 junco, snowbird 15 | n01537544 indigo bunting, indigo finch, indigo bird, Passerina cyanea 16 | n01558993 robin, American robin, Turdus migratorius 17 | n01560419 bulbul 18 | n01580077 jay 19 | n01582220 magpie 20 | n01592084 chickadee 21 | n01601694 water ouzel, dipper 22 | n01608432 kite 23 | n01614925 bald eagle, American eagle, Haliaeetus leucocephalus 24 | n01616318 vulture 25 | n01622779 great grey owl, great gray owl, Strix nebulosa 26 | n01629819 European fire salamander, Salamandra salamandra 27 | n01630670 common newt, Triturus vulgaris 28 | n01631663 eft 29 | n01632458 spotted salamander, Ambystoma maculatum 30 | n01632777 axolotl, mud puppy, Ambystoma mexicanum 31 | n01641577 bullfrog, Rana catesbeiana 32 | n01644373 tree frog, tree-frog 33 | n01644900 tailed frog, bell toad, ribbed toad, tailed toad, Ascaphus trui 34 | n01664065 loggerhead, loggerhead turtle, Caretta caretta 35 | n01665541 leatherback turtle, leatherback, leathery turtle, Dermochelys coriacea 36 | n01667114 mud turtle 37 | n01667778 terrapin 38 | n01669191 box turtle, box tortoise 39 | n01675722 banded gecko 40 | n01677366 common iguana, iguana, Iguana iguana 41 | n01682714 American chameleon, anole, Anolis carolinensis 42 | n01685808 whiptail, whiptail lizard 43 | n01687978 agama 44 | n01688243 frilled lizard, Chlamydosaurus kingi 45 | n01689811 alligator lizard 46 | n01692333 Gila monster, Heloderma suspectum 47 | n01693334 green lizard, Lacerta viridis 48 | n01694178 African chameleon, Chamaeleo chamaeleon 49 | n01695060 Komodo dragon, Komodo lizard, dragon lizard, giant lizard, Varanus komodoensis 50 | n01697457 African crocodile, Nile crocodile, Crocodylus niloticus 51 | n01698640 American alligator, Alligator mississipiensis 52 | n01704323 triceratops 53 | n01728572 thunder snake, worm snake, Carphophis amoenus 54 | n01728920 ringneck snake, ring-necked snake, ring snake 55 | n01729322 hognose snake, puff adder, sand viper 56 | n01729977 green snake, grass snake 57 | n01734418 king snake, kingsnake 58 | n01735189 garter snake, grass snake 59 | n01737021 water snake 60 | n01739381 vine snake 61 | n01740131 night snake, Hypsiglena torquata 62 | n01742172 boa constrictor, Constrictor constrictor 63 | n01744401 rock python, rock snake, Python sebae 64 | n01748264 Indian cobra, Naja naja 65 | n01749939 green mamba 66 | n01751748 sea snake 67 | n01753488 horned viper, cerastes, sand viper, horned asp, Cerastes cornutus 68 | n01755581 diamondback, diamondback rattlesnake, Crotalus adamanteus 69 | n01756291 sidewinder, horned rattlesnake, Crotalus cerastes 70 | n01768244 trilobite 71 | n01770081 harvestman, daddy longlegs, Phalangium opilio 72 | n01770393 scorpion 73 | n01773157 black and gold garden spider, Argiope aurantia 74 | n01773549 barn spider, Araneus cavaticus 75 | n01773797 garden spider, Aranea diademata 76 | n01774384 black widow, Latrodectus mactans 77 | n01774750 tarantula 78 | n01775062 wolf spider, hunting spider 79 | n01776313 tick 80 | n01784675 centipede 81 | n01795545 black grouse 82 | n01796340 ptarmigan 83 | n01797886 ruffed grouse, partridge, Bonasa umbellus 84 | n01798484 prairie chicken, prairie grouse, prairie fowl 85 | n01806143 peacock 86 | n01806567 quail 87 | n01807496 partridge 88 | n01817953 African grey, African gray, Psittacus erithacus 89 | n01818515 macaw 90 | n01819313 sulphur-crested cockatoo, Kakatoe galerita, Cacatua galerita 91 | n01820546 lorikeet 92 | n01824575 coucal 93 | n01828970 bee eater 94 | n01829413 hornbill 95 | n01833805 hummingbird 96 | n01843065 jacamar 97 | n01843383 toucan 98 | n01847000 drake 99 | n01855032 red-breasted merganser, Mergus serrator 100 | n01855672 goose 101 | n01860187 black swan, Cygnus atratus 102 | n01871265 tusker 103 | n01872401 echidna, spiny anteater, anteater 104 | n01873310 platypus, duckbill, duckbilled platypus, duck-billed platypus, Ornithorhynchus anatinus 105 | n01877812 wallaby, brush kangaroo 106 | n01882714 koala, koala bear, kangaroo bear, native bear, Phascolarctos cinereus 107 | n01883070 wombat 108 | n01910747 jellyfish 109 | n01914609 sea anemone, anemone 110 | n01917289 brain coral 111 | n01924916 flatworm, platyhelminth 112 | n01930112 nematode, nematode worm, roundworm 113 | n01943899 conch 114 | n01944390 snail 115 | n01945685 slug 116 | n01950731 sea slug, nudibranch 117 | n01955084 chiton, coat-of-mail shell, sea cradle, polyplacophore 118 | n01968897 chambered nautilus, pearly nautilus, nautilus 119 | n01978287 Dungeness crab, Cancer magister 120 | n01978455 rock crab, Cancer irroratus 121 | n01980166 fiddler crab 122 | n01981276 king crab, Alaska crab, Alaskan king crab, Alaska king crab, Paralithodes camtschatica 123 | n01983481 American lobster, Northern lobster, Maine lobster, Homarus americanus 124 | n01984695 spiny lobster, langouste, rock lobster, crawfish, crayfish, sea crawfish 125 | n01985128 crayfish, crawfish, crawdad, crawdaddy 126 | n01986214 hermit crab 127 | n01990800 isopod 128 | n02002556 white stork, Ciconia ciconia 129 | n02002724 black stork, Ciconia nigra 130 | n02006656 spoonbill 131 | n02007558 flamingo 132 | n02009229 little blue heron, Egretta caerulea 133 | n02009912 American egret, great white heron, Egretta albus 134 | n02011460 bittern 135 | n02012849 crane 136 | n02013706 limpkin, Aramus pictus 137 | n02017213 European gallinule, Porphyrio porphyrio 138 | n02018207 American coot, marsh hen, mud hen, water hen, Fulica americana 139 | n02018795 bustard 140 | n02025239 ruddy turnstone, Arenaria interpres 141 | n02027492 red-backed sandpiper, dunlin, Erolia alpina 142 | n02028035 redshank, Tringa totanus 143 | n02033041 dowitcher 144 | n02037110 oystercatcher, oyster catcher 145 | n02051845 pelican 146 | n02056570 king penguin, Aptenodytes patagonica 147 | n02058221 albatross, mollymawk 148 | n02066245 grey whale, gray whale, devilfish, Eschrichtius gibbosus, Eschrichtius robustus 149 | n02071294 killer whale, killer, orca, grampus, sea wolf, Orcinus orca 150 | n02074367 dugong, Dugong dugon 151 | n02077923 sea lion 152 | n02085620 Chihuahua 153 | n02085782 Japanese spaniel 154 | n02085936 Maltese dog, Maltese terrier, Maltese 155 | n02086079 Pekinese, Pekingese, Peke 156 | n02086240 Shih-Tzu 157 | n02086646 Blenheim spaniel 158 | n02086910 papillon 159 | n02087046 toy terrier 160 | n02087394 Rhodesian ridgeback 161 | n02088094 Afghan hound, Afghan 162 | n02088238 basset, basset hound 163 | n02088364 beagle 164 | n02088466 bloodhound, sleuthhound 165 | n02088632 bluetick 166 | n02089078 black-and-tan coonhound 167 | n02089867 Walker hound, Walker foxhound 168 | n02089973 English foxhound 169 | n02090379 redbone 170 | n02090622 borzoi, Russian wolfhound 171 | n02090721 Irish wolfhound 172 | n02091032 Italian greyhound 173 | n02091134 whippet 174 | n02091244 Ibizan hound, Ibizan Podenco 175 | n02091467 Norwegian elkhound, elkhound 176 | n02091635 otterhound, otter hound 177 | n02091831 Saluki, gazelle hound 178 | n02092002 Scottish deerhound, deerhound 179 | n02092339 Weimaraner 180 | n02093256 Staffordshire bullterrier, Staffordshire bull terrier 181 | n02093428 American Staffordshire terrier, Staffordshire terrier, American pit bull terrier, pit bull terrier 182 | n02093647 Bedlington terrier 183 | n02093754 Border terrier 184 | n02093859 Kerry blue terrier 185 | n02093991 Irish terrier 186 | n02094114 Norfolk terrier 187 | n02094258 Norwich terrier 188 | n02094433 Yorkshire terrier 189 | n02095314 wire-haired fox terrier 190 | n02095570 Lakeland terrier 191 | n02095889 Sealyham terrier, Sealyham 192 | n02096051 Airedale, Airedale terrier 193 | n02096177 cairn, cairn terrier 194 | n02096294 Australian terrier 195 | n02096437 Dandie Dinmont, Dandie Dinmont terrier 196 | n02096585 Boston bull, Boston terrier 197 | n02097047 miniature schnauzer 198 | n02097130 giant schnauzer 199 | n02097209 standard schnauzer 200 | n02097298 Scotch terrier, Scottish terrier, Scottie 201 | n02097474 Tibetan terrier, chrysanthemum dog 202 | n02097658 silky terrier, Sydney silky 203 | n02098105 soft-coated wheaten terrier 204 | n02098286 West Highland white terrier 205 | n02098413 Lhasa, Lhasa apso 206 | n02099267 flat-coated retriever 207 | n02099429 curly-coated retriever 208 | n02099601 golden retriever 209 | n02099712 Labrador retriever 210 | n02099849 Chesapeake Bay retriever 211 | n02100236 German short-haired pointer 212 | n02100583 vizsla, Hungarian pointer 213 | n02100735 English setter 214 | n02100877 Irish setter, red setter 215 | n02101006 Gordon setter 216 | n02101388 Brittany spaniel 217 | n02101556 clumber, clumber spaniel 218 | n02102040 English springer, English springer spaniel 219 | n02102177 Welsh springer spaniel 220 | n02102318 cocker spaniel, English cocker spaniel, cocker 221 | n02102480 Sussex spaniel 222 | n02102973 Irish water spaniel 223 | n02104029 kuvasz 224 | n02104365 schipperke 225 | n02105056 groenendael 226 | n02105162 malinois 227 | n02105251 briard 228 | n02105412 kelpie 229 | n02105505 komondor 230 | n02105641 Old English sheepdog, bobtail 231 | n02105855 Shetland sheepdog, Shetland sheep dog, Shetland 232 | n02106030 collie 233 | n02106166 Border collie 234 | n02106382 Bouvier des Flandres, Bouviers des Flandres 235 | n02106550 Rottweiler 236 | n02106662 German shepherd, German shepherd dog, German police dog, alsatian 237 | n02107142 Doberman, Doberman pinscher 238 | n02107312 miniature pinscher 239 | n02107574 Greater Swiss Mountain dog 240 | n02107683 Bernese mountain dog 241 | n02107908 Appenzeller 242 | n02108000 EntleBucher 243 | n02108089 boxer 244 | n02108422 bull mastiff 245 | n02108551 Tibetan mastiff 246 | n02108915 French bulldog 247 | n02109047 Great Dane 248 | n02109525 Saint Bernard, St Bernard 249 | n02109961 Eskimo dog, husky 250 | n02110063 malamute, malemute, Alaskan malamute 251 | n02110185 Siberian husky 252 | n02110341 dalmatian, coach dog, carriage dog 253 | n02110627 affenpinscher, monkey pinscher, monkey dog 254 | n02110806 basenji 255 | n02110958 pug, pug-dog 256 | n02111129 Leonberg 257 | n02111277 Newfoundland, Newfoundland dog 258 | n02111500 Great Pyrenees 259 | n02111889 Samoyed, Samoyede 260 | n02112018 Pomeranian 261 | n02112137 chow, chow chow 262 | n02112350 keeshond 263 | n02112706 Brabancon griffon 264 | n02113023 Pembroke, Pembroke Welsh corgi 265 | n02113186 Cardigan, Cardigan Welsh corgi 266 | n02113624 toy poodle 267 | n02113712 miniature poodle 268 | n02113799 standard poodle 269 | n02113978 Mexican hairless 270 | n02114367 timber wolf, grey wolf, gray wolf, Canis lupus 271 | n02114548 white wolf, Arctic wolf, Canis lupus tundrarum 272 | n02114712 red wolf, maned wolf, Canis rufus, Canis niger 273 | n02114855 coyote, prairie wolf, brush wolf, Canis latrans 274 | n02115641 dingo, warrigal, warragal, Canis dingo 275 | n02115913 dhole, Cuon alpinus 276 | n02116738 African hunting dog, hyena dog, Cape hunting dog, Lycaon pictus 277 | n02117135 hyena, hyaena 278 | n02119022 red fox, Vulpes vulpes 279 | n02119789 kit fox, Vulpes macrotis 280 | n02120079 Arctic fox, white fox, Alopex lagopus 281 | n02120505 grey fox, gray fox, Urocyon cinereoargenteus 282 | n02123045 tabby, tabby cat 283 | n02123159 tiger cat 284 | n02123394 Persian cat 285 | n02123597 Siamese cat, Siamese 286 | n02124075 Egyptian cat 287 | n02125311 cougar, puma, catamount, mountain lion, painter, panther, Felis concolor 288 | n02127052 lynx, catamount 289 | n02128385 leopard, Panthera pardus 290 | n02128757 snow leopard, ounce, Panthera uncia 291 | n02128925 jaguar, panther, Panthera onca, Felis onca 292 | n02129165 lion, king of beasts, Panthera leo 293 | n02129604 tiger, Panthera tigris 294 | n02130308 cheetah, chetah, Acinonyx jubatus 295 | n02132136 brown bear, bruin, Ursus arctos 296 | n02133161 American black bear, black bear, Ursus americanus, Euarctos americanus 297 | n02134084 ice bear, polar bear, Ursus Maritimus, Thalarctos maritimus 298 | n02134418 sloth bear, Melursus ursinus, Ursus ursinus 299 | n02137549 mongoose 300 | n02138441 meerkat, mierkat 301 | n02165105 tiger beetle 302 | n02165456 ladybug, ladybeetle, lady beetle, ladybird, ladybird beetle 303 | n02167151 ground beetle, carabid beetle 304 | n02168699 long-horned beetle, longicorn, longicorn beetle 305 | n02169497 leaf beetle, chrysomelid 306 | n02172182 dung beetle 307 | n02174001 rhinoceros beetle 308 | n02177972 weevil 309 | n02190166 fly 310 | n02206856 bee 311 | n02219486 ant, emmet, pismire 312 | n02226429 grasshopper, hopper 313 | n02229544 cricket 314 | n02231487 walking stick, walkingstick, stick insect 315 | n02233338 cockroach, roach 316 | n02236044 mantis, mantid 317 | n02256656 cicada, cicala 318 | n02259212 leafhopper 319 | n02264363 lacewing, lacewing fly 320 | n02268443 dragonfly, darning needle, devil's darning needle, sewing needle, snake feeder, snake doctor, mosquito hawk, skeeter hawk 321 | n02268853 damselfly 322 | n02276258 admiral 323 | n02277742 ringlet, ringlet butterfly 324 | n02279972 monarch, monarch butterfly, milkweed butterfly, Danaus plexippus 325 | n02280649 cabbage butterfly 326 | n02281406 sulphur butterfly, sulfur butterfly 327 | n02281787 lycaenid, lycaenid butterfly 328 | n02317335 starfish, sea star 329 | n02319095 sea urchin 330 | n02321529 sea cucumber, holothurian 331 | n02325366 wood rabbit, cottontail, cottontail rabbit 332 | n02326432 hare 333 | n02328150 Angora, Angora rabbit 334 | n02342885 hamster 335 | n02346627 porcupine, hedgehog 336 | n02356798 fox squirrel, eastern fox squirrel, Sciurus niger 337 | n02361337 marmot 338 | n02363005 beaver 339 | n02364673 guinea pig, Cavia cobaya 340 | n02389026 sorrel 341 | n02391049 zebra 342 | n02395406 hog, pig, grunter, squealer, Sus scrofa 343 | n02396427 wild boar, boar, Sus scrofa 344 | n02397096 warthog 345 | n02398521 hippopotamus, hippo, river horse, Hippopotamus amphibius 346 | n02403003 ox 347 | n02408429 water buffalo, water ox, Asiatic buffalo, Bubalus bubalis 348 | n02410509 bison 349 | n02412080 ram, tup 350 | n02415577 bighorn, bighorn sheep, cimarron, Rocky Mountain bighorn, Rocky Mountain sheep, Ovis canadensis 351 | n02417914 ibex, Capra ibex 352 | n02422106 hartebeest 353 | n02422699 impala, Aepyceros melampus 354 | n02423022 gazelle 355 | n02437312 Arabian camel, dromedary, Camelus dromedarius 356 | n02437616 llama 357 | n02441942 weasel 358 | n02442845 mink 359 | n02443114 polecat, fitch, foulmart, foumart, Mustela putorius 360 | n02443484 black-footed ferret, ferret, Mustela nigripes 361 | n02444819 otter 362 | n02445715 skunk, polecat, wood pussy 363 | n02447366 badger 364 | n02454379 armadillo 365 | n02457408 three-toed sloth, ai, Bradypus tridactylus 366 | n02480495 orangutan, orang, orangutang, Pongo pygmaeus 367 | n02480855 gorilla, Gorilla gorilla 368 | n02481823 chimpanzee, chimp, Pan troglodytes 369 | n02483362 gibbon, Hylobates lar 370 | n02483708 siamang, Hylobates syndactylus, Symphalangus syndactylus 371 | n02484975 guenon, guenon monkey 372 | n02486261 patas, hussar monkey, Erythrocebus patas 373 | n02486410 baboon 374 | n02487347 macaque 375 | n02488291 langur 376 | n02488702 colobus, colobus monkey 377 | n02489166 proboscis monkey, Nasalis larvatus 378 | n02490219 marmoset 379 | n02492035 capuchin, ringtail, Cebus capucinus 380 | n02492660 howler monkey, howler 381 | n02493509 titi, titi monkey 382 | n02493793 spider monkey, Ateles geoffroyi 383 | n02494079 squirrel monkey, Saimiri sciureus 384 | n02497673 Madagascar cat, ring-tailed lemur, Lemur catta 385 | n02500267 indri, indris, Indri indri, Indri brevicaudatus 386 | n02504013 Indian elephant, Elephas maximus 387 | n02504458 African elephant, Loxodonta africana 388 | n02509815 lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens 389 | n02510455 giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca 390 | n02514041 barracouta, snoek 391 | n02526121 eel 392 | n02536864 coho, cohoe, coho salmon, blue jack, silver salmon, Oncorhynchus kisutch 393 | n02606052 rock beauty, Holocanthus tricolor 394 | n02607072 anemone fish 395 | n02640242 sturgeon 396 | n02641379 gar, garfish, garpike, billfish, Lepisosteus osseus 397 | n02643566 lionfish 398 | n02655020 puffer, pufferfish, blowfish, globefish 399 | n02666196 abacus 400 | n02667093 abaya 401 | n02669723 academic gown, academic robe, judge's robe 402 | n02672831 accordion, piano accordion, squeeze box 403 | n02676566 acoustic guitar 404 | n02687172 aircraft carrier, carrier, flattop, attack aircraft carrier 405 | n02690373 airliner 406 | n02692877 airship, dirigible 407 | n02699494 altar 408 | n02701002 ambulance 409 | n02704792 amphibian, amphibious vehicle 410 | n02708093 analog clock 411 | n02727426 apiary, bee house 412 | n02730930 apron 413 | n02747177 ashcan, trash can, garbage can, wastebin, ash bin, ash-bin, ashbin, dustbin, trash barrel, trash bin 414 | n02749479 assault rifle, assault gun 415 | n02769748 backpack, back pack, knapsack, packsack, rucksack, haversack 416 | n02776631 bakery, bakeshop, bakehouse 417 | n02777292 balance beam, beam 418 | n02782093 balloon 419 | n02783161 ballpoint, ballpoint pen, ballpen, Biro 420 | n02786058 Band Aid 421 | n02787622 banjo 422 | n02788148 bannister, banister, balustrade, balusters, handrail 423 | n02790996 barbell 424 | n02791124 barber chair 425 | n02791270 barbershop 426 | n02793495 barn 427 | n02794156 barometer 428 | n02795169 barrel, cask 429 | n02797295 barrow, garden cart, lawn cart, wheelbarrow 430 | n02799071 baseball 431 | n02802426 basketball 432 | n02804414 bassinet 433 | n02804610 bassoon 434 | n02807133 bathing cap, swimming cap 435 | n02808304 bath towel 436 | n02808440 bathtub, bathing tub, bath, tub 437 | n02814533 beach wagon, station wagon, wagon, estate car, beach waggon, station waggon, waggon 438 | n02814860 beacon, lighthouse, beacon light, pharos 439 | n02815834 beaker 440 | n02817516 bearskin, busby, shako 441 | n02823428 beer bottle 442 | n02823750 beer glass 443 | n02825657 bell cote, bell cot 444 | n02834397 bib 445 | n02835271 bicycle-built-for-two, tandem bicycle, tandem 446 | n02837789 bikini, two-piece 447 | n02840245 binder, ring-binder 448 | n02841315 binoculars, field glasses, opera glasses 449 | n02843684 birdhouse 450 | n02859443 boathouse 451 | n02860847 bobsled, bobsleigh, bob 452 | n02865351 bolo tie, bolo, bola tie, bola 453 | n02869837 bonnet, poke bonnet 454 | n02870880 bookcase 455 | n02871525 bookshop, bookstore, bookstall 456 | n02877765 bottlecap 457 | n02879718 bow 458 | n02883205 bow tie, bow-tie, bowtie 459 | n02892201 brass, memorial tablet, plaque 460 | n02892767 brassiere, bra, bandeau 461 | n02894605 breakwater, groin, groyne, mole, bulwark, seawall, jetty 462 | n02895154 breastplate, aegis, egis 463 | n02906734 broom 464 | n02909870 bucket, pail 465 | n02910353 buckle 466 | n02916936 bulletproof vest 467 | n02917067 bullet train, bullet 468 | n02927161 butcher shop, meat market 469 | n02930766 cab, hack, taxi, taxicab 470 | n02939185 caldron, cauldron 471 | n02948072 candle, taper, wax light 472 | n02950826 cannon 473 | n02951358 canoe 474 | n02951585 can opener, tin opener 475 | n02963159 cardigan 476 | n02965783 car mirror 477 | n02966193 carousel, carrousel, merry-go-round, roundabout, whirligig 478 | n02966687 carpenter's kit, tool kit 479 | n02971356 carton 480 | n02974003 car wheel 481 | n02977058 cash machine, cash dispenser, automated teller machine, automatic teller machine, automated teller, automatic teller, ATM 482 | n02978881 cassette 483 | n02979186 cassette player 484 | n02980441 castle 485 | n02981792 catamaran 486 | n02988304 CD player 487 | n02992211 cello, violoncello 488 | n02992529 cellular telephone, cellular phone, cellphone, cell, mobile phone 489 | n02999410 chain 490 | n03000134 chainlink fence 491 | n03000247 chain mail, ring mail, mail, chain armor, chain armour, ring armor, ring armour 492 | n03000684 chain saw, chainsaw 493 | n03014705 chest 494 | n03016953 chiffonier, commode 495 | n03017168 chime, bell, gong 496 | n03018349 china cabinet, china closet 497 | n03026506 Christmas stocking 498 | n03028079 church, church building 499 | n03032252 cinema, movie theater, movie theatre, movie house, picture palace 500 | n03041632 cleaver, meat cleaver, chopper 501 | n03042490 cliff dwelling 502 | n03045698 cloak 503 | n03047690 clog, geta, patten, sabot 504 | n03062245 cocktail shaker 505 | n03063599 coffee mug 506 | n03063689 coffeepot 507 | n03065424 coil, spiral, volute, whorl, helix 508 | n03075370 combination lock 509 | n03085013 computer keyboard, keypad 510 | n03089624 confectionery, confectionary, candy store 511 | n03095699 container ship, containership, container vessel 512 | n03100240 convertible 513 | n03109150 corkscrew, bottle screw 514 | n03110669 cornet, horn, trumpet, trump 515 | n03124043 cowboy boot 516 | n03124170 cowboy hat, ten-gallon hat 517 | n03125729 cradle 518 | n03126707 crane 519 | n03127747 crash helmet 520 | n03127925 crate 521 | n03131574 crib, cot 522 | n03133878 Crock Pot 523 | n03134739 croquet ball 524 | n03141823 crutch 525 | n03146219 cuirass 526 | n03160309 dam, dike, dyke 527 | n03179701 desk 528 | n03180011 desktop computer 529 | n03187595 dial telephone, dial phone 530 | n03188531 diaper, nappy, napkin 531 | n03196217 digital clock 532 | n03197337 digital watch 533 | n03201208 dining table, board 534 | n03207743 dishrag, dishcloth 535 | n03207941 dishwasher, dish washer, dishwashing machine 536 | n03208938 disk brake, disc brake 537 | n03216828 dock, dockage, docking facility 538 | n03218198 dogsled, dog sled, dog sleigh 539 | n03220513 dome 540 | n03223299 doormat, welcome mat 541 | n03240683 drilling platform, offshore rig 542 | n03249569 drum, membranophone, tympan 543 | n03250847 drumstick 544 | n03255030 dumbbell 545 | n03259280 Dutch oven 546 | n03271574 electric fan, blower 547 | n03272010 electric guitar 548 | n03272562 electric locomotive 549 | n03290653 entertainment center 550 | n03291819 envelope 551 | n03297495 espresso maker 552 | n03314780 face powder 553 | n03325584 feather boa, boa 554 | n03337140 file, file cabinet, filing cabinet 555 | n03344393 fireboat 556 | n03345487 fire engine, fire truck 557 | n03347037 fire screen, fireguard 558 | n03355925 flagpole, flagstaff 559 | n03372029 flute, transverse flute 560 | n03376595 folding chair 561 | n03379051 football helmet 562 | n03384352 forklift 563 | n03388043 fountain 564 | n03388183 fountain pen 565 | n03388549 four-poster 566 | n03393912 freight car 567 | n03394916 French horn, horn 568 | n03400231 frying pan, frypan, skillet 569 | n03404251 fur coat 570 | n03417042 garbage truck, dustcart 571 | n03424325 gasmask, respirator, gas helmet 572 | n03425413 gas pump, gasoline pump, petrol pump, island dispenser 573 | n03443371 goblet 574 | n03444034 go-kart 575 | n03445777 golf ball 576 | n03445924 golfcart, golf cart 577 | n03447447 gondola 578 | n03447721 gong, tam-tam 579 | n03450230 gown 580 | n03452741 grand piano, grand 581 | n03457902 greenhouse, nursery, glasshouse 582 | n03459775 grille, radiator grille 583 | n03461385 grocery store, grocery, food market, market 584 | n03467068 guillotine 585 | n03476684 hair slide 586 | n03476991 hair spray 587 | n03478589 half track 588 | n03481172 hammer 589 | n03482405 hamper 590 | n03483316 hand blower, blow dryer, blow drier, hair dryer, hair drier 591 | n03485407 hand-held computer, hand-held microcomputer 592 | n03485794 handkerchief, hankie, hanky, hankey 593 | n03492542 hard disc, hard disk, fixed disk 594 | n03494278 harmonica, mouth organ, harp, mouth harp 595 | n03495258 harp 596 | n03496892 harvester, reaper 597 | n03498962 hatchet 598 | n03527444 holster 599 | n03529860 home theater, home theatre 600 | n03530642 honeycomb 601 | n03532672 hook, claw 602 | n03534580 hoopskirt, crinoline 603 | n03535780 horizontal bar, high bar 604 | n03538406 horse cart, horse-cart 605 | n03544143 hourglass 606 | n03584254 iPod 607 | n03584829 iron, smoothing iron 608 | n03590841 jack-o'-lantern 609 | n03594734 jean, blue jean, denim 610 | n03594945 jeep, landrover 611 | n03595614 jersey, T-shirt, tee shirt 612 | n03598930 jigsaw puzzle 613 | n03599486 jinrikisha, ricksha, rickshaw 614 | n03602883 joystick 615 | n03617480 kimono 616 | n03623198 knee pad 617 | n03627232 knot 618 | n03630383 lab coat, laboratory coat 619 | n03633091 ladle 620 | n03637318 lampshade, lamp shade 621 | n03642806 laptop, laptop computer 622 | n03649909 lawn mower, mower 623 | n03657121 lens cap, lens cover 624 | n03658185 letter opener, paper knife, paperknife 625 | n03661043 library 626 | n03662601 lifeboat 627 | n03666591 lighter, light, igniter, ignitor 628 | n03670208 limousine, limo 629 | n03673027 liner, ocean liner 630 | n03676483 lipstick, lip rouge 631 | n03680355 Loafer 632 | n03690938 lotion 633 | n03691459 loudspeaker, speaker, speaker unit, loudspeaker system, speaker system 634 | n03692522 loupe, jeweler's loupe 635 | n03697007 lumbermill, sawmill 636 | n03706229 magnetic compass 637 | n03709823 mailbag, postbag 638 | n03710193 mailbox, letter box 639 | n03710637 maillot 640 | n03710721 maillot, tank suit 641 | n03717622 manhole cover 642 | n03720891 maraca 643 | n03721384 marimba, xylophone 644 | n03724870 mask 645 | n03729826 matchstick 646 | n03733131 maypole 647 | n03733281 maze, labyrinth 648 | n03733805 measuring cup 649 | n03742115 medicine chest, medicine cabinet 650 | n03743016 megalith, megalithic structure 651 | n03759954 microphone, mike 652 | n03761084 microwave, microwave oven 653 | n03763968 military uniform 654 | n03764736 milk can 655 | n03769881 minibus 656 | n03770439 miniskirt, mini 657 | n03770679 minivan 658 | n03773504 missile 659 | n03775071 mitten 660 | n03775546 mixing bowl 661 | n03776460 mobile home, manufactured home 662 | n03777568 Model T 663 | n03777754 modem 664 | n03781244 monastery 665 | n03782006 monitor 666 | n03785016 moped 667 | n03786901 mortar 668 | n03787032 mortarboard 669 | n03788195 mosque 670 | n03788365 mosquito net 671 | n03791053 motor scooter, scooter 672 | n03792782 mountain bike, all-terrain bike, off-roader 673 | n03792972 mountain tent 674 | n03793489 mouse, computer mouse 675 | n03794056 mousetrap 676 | n03796401 moving van 677 | n03803284 muzzle 678 | n03804744 nail 679 | n03814639 neck brace 680 | n03814906 necklace 681 | n03825788 nipple 682 | n03832673 notebook, notebook computer 683 | n03837869 obelisk 684 | n03838899 oboe, hautboy, hautbois 685 | n03840681 ocarina, sweet potato 686 | n03841143 odometer, hodometer, mileometer, milometer 687 | n03843555 oil filter 688 | n03854065 organ, pipe organ 689 | n03857828 oscilloscope, scope, cathode-ray oscilloscope, CRO 690 | n03866082 overskirt 691 | n03868242 oxcart 692 | n03868863 oxygen mask 693 | n03871628 packet 694 | n03873416 paddle, boat paddle 695 | n03874293 paddlewheel, paddle wheel 696 | n03874599 padlock 697 | n03876231 paintbrush 698 | n03877472 pajama, pyjama, pj's, jammies 699 | n03877845 palace 700 | n03884397 panpipe, pandean pipe, syrinx 701 | n03887697 paper towel 702 | n03888257 parachute, chute 703 | n03888605 parallel bars, bars 704 | n03891251 park bench 705 | n03891332 parking meter 706 | n03895866 passenger car, coach, carriage 707 | n03899768 patio, terrace 708 | n03902125 pay-phone, pay-station 709 | n03903868 pedestal, plinth, footstall 710 | n03908618 pencil box, pencil case 711 | n03908714 pencil sharpener 712 | n03916031 perfume, essence 713 | n03920288 Petri dish 714 | n03924679 photocopier 715 | n03929660 pick, plectrum, plectron 716 | n03929855 pickelhaube 717 | n03930313 picket fence, paling 718 | n03930630 pickup, pickup truck 719 | n03933933 pier 720 | n03935335 piggy bank, penny bank 721 | n03937543 pill bottle 722 | n03938244 pillow 723 | n03942813 ping-pong ball 724 | n03944341 pinwheel 725 | n03947888 pirate, pirate ship 726 | n03950228 pitcher, ewer 727 | n03954731 plane, carpenter's plane, woodworking plane 728 | n03956157 planetarium 729 | n03958227 plastic bag 730 | n03961711 plate rack 731 | n03967562 plow, plough 732 | n03970156 plunger, plumber's helper 733 | n03976467 Polaroid camera, Polaroid Land camera 734 | n03976657 pole 735 | n03977966 police van, police wagon, paddy wagon, patrol wagon, wagon, black Maria 736 | n03980874 poncho 737 | n03982430 pool table, billiard table, snooker table 738 | n03983396 pop bottle, soda bottle 739 | n03991062 pot, flowerpot 740 | n03992509 potter's wheel 741 | n03995372 power drill 742 | n03998194 prayer rug, prayer mat 743 | n04004767 printer 744 | n04005630 prison, prison house 745 | n04008634 projectile, missile 746 | n04009552 projector 747 | n04019541 puck, hockey puck 748 | n04023962 punching bag, punch bag, punching ball, punchball 749 | n04026417 purse 750 | n04033901 quill, quill pen 751 | n04033995 quilt, comforter, comfort, puff 752 | n04037443 racer, race car, racing car 753 | n04039381 racket, racquet 754 | n04040759 radiator 755 | n04041544 radio, wireless 756 | n04044716 radio telescope, radio reflector 757 | n04049303 rain barrel 758 | n04065272 recreational vehicle, RV, R.V. 759 | n04067472 reel 760 | n04069434 reflex camera 761 | n04070727 refrigerator, icebox 762 | n04074963 remote control, remote 763 | n04081281 restaurant, eating house, eating place, eatery 764 | n04086273 revolver, six-gun, six-shooter 765 | n04090263 rifle 766 | n04099969 rocking chair, rocker 767 | n04111531 rotisserie 768 | n04116512 rubber eraser, rubber, pencil eraser 769 | n04118538 rugby ball 770 | n04118776 rule, ruler 771 | n04120489 running shoe 772 | n04125021 safe 773 | n04127249 safety pin 774 | n04131690 saltshaker, salt shaker 775 | n04133789 sandal 776 | n04136333 sarong 777 | n04141076 sax, saxophone 778 | n04141327 scabbard 779 | n04141975 scale, weighing machine 780 | n04146614 school bus 781 | n04147183 schooner 782 | n04149813 scoreboard 783 | n04152593 screen, CRT screen 784 | n04153751 screw 785 | n04154565 screwdriver 786 | n04162706 seat belt, seatbelt 787 | n04179913 sewing machine 788 | n04192698 shield, buckler 789 | n04200800 shoe shop, shoe-shop, shoe store 790 | n04201297 shoji 791 | n04204238 shopping basket 792 | n04204347 shopping cart 793 | n04208210 shovel 794 | n04209133 shower cap 795 | n04209239 shower curtain 796 | n04228054 ski 797 | n04229816 ski mask 798 | n04235860 sleeping bag 799 | n04238763 slide rule, slipstick 800 | n04239074 sliding door 801 | n04243546 slot, one-armed bandit 802 | n04251144 snorkel 803 | n04252077 snowmobile 804 | n04252225 snowplow, snowplough 805 | n04254120 soap dispenser 806 | n04254680 soccer ball 807 | n04254777 sock 808 | n04258138 solar dish, solar collector, solar furnace 809 | n04259630 sombrero 810 | n04263257 soup bowl 811 | n04264628 space bar 812 | n04265275 space heater 813 | n04266014 space shuttle 814 | n04270147 spatula 815 | n04273569 speedboat 816 | n04275548 spider web, spider's web 817 | n04277352 spindle 818 | n04285008 sports car, sport car 819 | n04286575 spotlight, spot 820 | n04296562 stage 821 | n04310018 steam locomotive 822 | n04311004 steel arch bridge 823 | n04311174 steel drum 824 | n04317175 stethoscope 825 | n04325704 stole 826 | n04326547 stone wall 827 | n04328186 stopwatch, stop watch 828 | n04330267 stove 829 | n04332243 strainer 830 | n04335435 streetcar, tram, tramcar, trolley, trolley car 831 | n04336792 stretcher 832 | n04344873 studio couch, day bed 833 | n04346328 stupa, tope 834 | n04347754 submarine, pigboat, sub, U-boat 835 | n04350905 suit, suit of clothes 836 | n04355338 sundial 837 | n04355933 sunglass 838 | n04356056 sunglasses, dark glasses, shades 839 | n04357314 sunscreen, sunblock, sun blocker 840 | n04366367 suspension bridge 841 | n04367480 swab, swob, mop 842 | n04370456 sweatshirt 843 | n04371430 swimming trunks, bathing trunks 844 | n04371774 swing 845 | n04372370 switch, electric switch, electrical switch 846 | n04376876 syringe 847 | n04380533 table lamp 848 | n04389033 tank, army tank, armored combat vehicle, armoured combat vehicle 849 | n04392985 tape player 850 | n04398044 teapot 851 | n04399382 teddy, teddy bear 852 | n04404412 television, television system 853 | n04409515 tennis ball 854 | n04417672 thatch, thatched roof 855 | n04418357 theater curtain, theatre curtain 856 | n04423845 thimble 857 | n04428191 thresher, thrasher, threshing machine 858 | n04429376 throne 859 | n04435653 tile roof 860 | n04442312 toaster 861 | n04443257 tobacco shop, tobacconist shop, tobacconist 862 | n04447861 toilet seat 863 | n04456115 torch 864 | n04458633 totem pole 865 | n04461696 tow truck, tow car, wrecker 866 | n04462240 toyshop 867 | n04465501 tractor 868 | n04467665 trailer truck, tractor trailer, trucking rig, rig, articulated lorry, semi 869 | n04476259 tray 870 | n04479046 trench coat 871 | n04482393 tricycle, trike, velocipede 872 | n04483307 trimaran 873 | n04485082 tripod 874 | n04486054 triumphal arch 875 | n04487081 trolleybus, trolley coach, trackless trolley 876 | n04487394 trombone 877 | n04493381 tub, vat 878 | n04501370 turnstile 879 | n04505470 typewriter keyboard 880 | n04507155 umbrella 881 | n04509417 unicycle, monocycle 882 | n04515003 upright, upright piano 883 | n04517823 vacuum, vacuum cleaner 884 | n04522168 vase 885 | n04523525 vault 886 | n04525038 velvet 887 | n04525305 vending machine 888 | n04532106 vestment 889 | n04532670 viaduct 890 | n04536866 violin, fiddle 891 | n04540053 volleyball 892 | n04542943 waffle iron 893 | n04548280 wall clock 894 | n04548362 wallet, billfold, notecase, pocketbook 895 | n04550184 wardrobe, closet, press 896 | n04552348 warplane, military plane 897 | n04553703 washbasin, handbasin, washbowl, lavabo, wash-hand basin 898 | n04554684 washer, automatic washer, washing machine 899 | n04557648 water bottle 900 | n04560804 water jug 901 | n04562935 water tower 902 | n04579145 whiskey jug 903 | n04579432 whistle 904 | n04584207 wig 905 | n04589890 window screen 906 | n04590129 window shade 907 | n04591157 Windsor tie 908 | n04591713 wine bottle 909 | n04592741 wing 910 | n04596742 wok 911 | n04597913 wooden spoon 912 | n04599235 wool, woolen, woollen 913 | n04604644 worm fence, snake fence, snake-rail fence, Virginia fence 914 | n04606251 wreck 915 | n04612504 yawl 916 | n04613696 yurt 917 | n06359193 web site, website, internet site, site 918 | n06596364 comic book 919 | n06785654 crossword puzzle, crossword 920 | n06794110 street sign 921 | n06874185 traffic light, traffic signal, stoplight 922 | n07248320 book jacket, dust cover, dust jacket, dust wrapper 923 | n07565083 menu 924 | n07579787 plate 925 | n07583066 guacamole 926 | n07584110 consomme 927 | n07590611 hot pot, hotpot 928 | n07613480 trifle 929 | n07614500 ice cream, icecream 930 | n07615774 ice lolly, lolly, lollipop, popsicle 931 | n07684084 French loaf 932 | n07693725 bagel, beigel 933 | n07695742 pretzel 934 | n07697313 cheeseburger 935 | n07697537 hotdog, hot dog, red hot 936 | n07711569 mashed potato 937 | n07714571 head cabbage 938 | n07714990 broccoli 939 | n07715103 cauliflower 940 | n07716358 zucchini, courgette 941 | n07716906 spaghetti squash 942 | n07717410 acorn squash 943 | n07717556 butternut squash 944 | n07718472 cucumber, cuke 945 | n07718747 artichoke, globe artichoke 946 | n07720875 bell pepper 947 | n07730033 cardoon 948 | n07734744 mushroom 949 | n07742313 Granny Smith 950 | n07745940 strawberry 951 | n07747607 orange 952 | n07749582 lemon 953 | n07753113 fig 954 | n07753275 pineapple, ananas 955 | n07753592 banana 956 | n07754684 jackfruit, jak, jack 957 | n07760859 custard apple 958 | n07768694 pomegranate 959 | n07802026 hay 960 | n07831146 carbonara 961 | n07836838 chocolate sauce, chocolate syrup 962 | n07860988 dough 963 | n07871810 meat loaf, meatloaf 964 | n07873807 pizza, pizza pie 965 | n07875152 potpie 966 | n07880968 burrito 967 | n07892512 red wine 968 | n07920052 espresso 969 | n07930864 cup 970 | n07932039 eggnog 971 | n09193705 alp 972 | n09229709 bubble 973 | n09246464 cliff, drop, drop-off 974 | n09256479 coral reef 975 | n09288635 geyser 976 | n09332890 lakeside, lakeshore 977 | n09399592 promontory, headland, head, foreland 978 | n09421951 sandbar, sand bar 979 | n09428293 seashore, coast, seacoast, sea-coast 980 | n09468604 valley, vale 981 | n09472597 volcano 982 | n09835506 ballplayer, baseball player 983 | n10148035 groom, bridegroom 984 | n10565667 scuba diver 985 | n11879895 rapeseed 986 | n11939491 daisy 987 | n12057211 yellow lady's slipper, yellow lady-slipper, Cypripedium calceolus, Cypripedium parviflorum 988 | n12144580 corn 989 | n12267677 acorn 990 | n12620546 hip, rose hip, rosehip 991 | n12768682 buckeye, horse chestnut, conker 992 | n12985857 coral fungus 993 | n12998815 agaric 994 | n13037406 gyromitra 995 | n13040303 stinkhorn, carrion fungus 996 | n13044778 earthstar 997 | n13052670 hen-of-the-woods, hen of the woods, Polyporus frondosus, Grifola frondosa 998 | n13054560 bolete 999 | n13133613 ear, spike, capitulum 1000 | n15075141 toilet tissue, toilet paper, bathroom tissue 1001 | -------------------------------------------------------------------------------- /resources/shark.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/flyyufelix/DenseNet-Keras/8c42d8092b2616a9fbf025c756b14c67be708685/resources/shark.jpg -------------------------------------------------------------------------------- /test_inference.py: -------------------------------------------------------------------------------- 1 | """Test ImageNet pretrained DenseNet""" 2 | 3 | import cv2 4 | import numpy as np 5 | from keras.optimizers import SGD 6 | import keras.backend as K 7 | 8 | # We only test DenseNet-121 in this script for demo purpose 9 | from densenet121 import DenseNet 10 | 11 | im = cv2.resize(cv2.imread('resources/cat.jpg'), (224, 224)).astype(np.float32) 12 | #im = cv2.resize(cv2.imread('shark.jpg'), (224, 224)).astype(np.float32) 13 | 14 | # Subtract mean pixel and multiple by scaling constant 15 | # Reference: https://github.com/shicai/DenseNet-Caffe 16 | im[:,:,0] = (im[:,:,0] - 103.94) * 0.017 17 | im[:,:,1] = (im[:,:,1] - 116.78) * 0.017 18 | im[:,:,2] = (im[:,:,2] - 123.68) * 0.017 19 | 20 | if K.image_dim_ordering() == 'th': 21 | # Transpose image dimensions (Theano uses the channels as the 1st dimension) 22 | im = im.transpose((2,0,1)) 23 | 24 | # Use pre-trained weights for Theano backend 25 | weights_path = 'imagenet_models/densenet121_weights_th.h5' 26 | else: 27 | # Use pre-trained weights for Tensorflow backend 28 | weights_path = 'imagenet_models/densenet121_weights_tf.h5' 29 | 30 | # Insert a new dimension for the batch_size 31 | im = np.expand_dims(im, axis=0) 32 | 33 | # Test pretrained model 34 | model = DenseNet(reduction=0.5, classes=1000, weights_path=weights_path) 35 | 36 | sgd = SGD(lr=1e-2, decay=1e-6, momentum=0.9, nesterov=True) 37 | model.compile(optimizer=sgd, loss='categorical_crossentropy', metrics=['accuracy']) 38 | 39 | out = model.predict(im) 40 | 41 | # Load ImageNet classes file 42 | classes = [] 43 | with open('resources/classes.txt', 'r') as list_: 44 | for line in list_: 45 | classes.append(line.rstrip('\n')) 46 | 47 | print 'Prediction: '+str(classes[np.argmax(out)]) 48 | --------------------------------------------------------------------------------