Image classification models. Keras.
Project description
Classification models Zoo
Trained on ImageNet classification models. Keras.
Architectures:
- VGG [16, 19]
- ResNet [18, 34, 50, 101, 152]
- ResNeXt [50, 101]
- SE-ResNet [18, 34, 50, 101, 152]
- SE-ResNeXt [50, 101]
- SE-Net [154]
- DenseNet [121, 169, 201]
- Inception ResNet V2
- Inception V3
- Xception
- NASNet [large, mobile]
- MobileNet
- MobileNet v2
Specification
The top-k accuracy were obtained using center single crop on the 2012 ILSVRC ImageNet validation set and may differ from the original ones. The input size used was 224x224 (min size 256) for all models except:
- NASNetLarge 331x331 (352)
- InceptionV3 299x299 (324)
- InceptionResNetV2 299x299 (324)
- Xception 299x299 (324)
The inference *Time was evaluated on 500 batches of size 16. All models have been tested using same hardware and software. Time is listed just for comparison of performance.
Model | Acc@1 | Acc@5 | Time* | Source |
---|---|---|---|---|
vgg16 | 70.79 | 89.74 | 24.95 | keras |
vgg19 | 70.89 | 89.69 | 24.95 | keras |
resnet18 | 68.24 | 88.49 | 16.07 | mxnet |
resnet34 | 72.17 | 90.74 | 17.37 | mxnet |
resnet50 | 74.81 | 92.38 | 22.62 | mxnet |
resnet101 | 76.58 | 93.10 | 33.03 | mxnet |
resnet152 | 76.66 | 93.08 | 42.37 | mxnet |
resnet50v2 | 69.73 | 89.31 | 19.56 | keras |
resnet101v2 | 71.93 | 90.41 | 28.80 | keras |
resnet152v2 | 72.29 | 90.61 | 41.09 | keras |
resnext50 | 77.36 | 93.48 | 37.57 | keras |
resnext101 | 78.48 | 94.00 | 60.07 | keras |
densenet121 | 74.67 | 92.04 | 27.66 | keras |
densenet169 | 75.85 | 92.93 | 33.71 | keras |
densenet201 | 77.13 | 93.43 | 42.40 | keras |
inceptionv3 | 77.55 | 93.48 | 38.94 | keras |
xception | 78.87 | 94.20 | 42.18 | keras |
inceptionresnetv2 | 80.03 | 94.89 | 54.77 | keras |
seresnet18 | 69.41 | 88.84 | 20.19 | pytorch |
seresnet34 | 72.60 | 90.91 | 22.20 | pytorch |
seresnet50 | 76.44 | 93.02 | 23.64 | pytorch |
seresnet101 | 77.92 | 94.00 | 32.55 | pytorch |
seresnet152 | 78.34 | 94.08 | 47.88 | pytorch |
seresnext50 | 78.74 | 94.30 | 38.29 | pytorch |
seresnext101 | 79.88 | 94.87 | 62.80 | pytorch |
senet154 | 81.06 | 95.24 | 137.36 | pytorch |
nasnetlarge | 82.12 | 95.72 | 116.53 | keras |
nasnetmobile | 74.04 | 91.54 | 27.73 | keras |
mobilenet | 70.36 | 89.39 | 15.50 | keras |
mobilenetv2 | 71.63 | 90.35 | 18.31 | keras |
Note
[SE-]ResNeXt and SENet models build with GroupConvolution
which
is not implemented in Keras/TensorFlow. For correct work of load_model
function
custom object is used. To be able to load one of these models from file, please,
import classification_models
before.
Weights
Name | Classes | Models |
---|---|---|
'imagenet' | 1000 | all models |
'imagenet11k-place365ch' | 11586 | resnet50 |
'imagenet11k' | 11221 | resnet152 |
Installation
Requirements:
- python >= 3.5
- keras >= 2.1.0
- tensorflow >= 1.9
Note
This library does not have TensorFlow in a requirements for installation.
Please, choose suitable version (‘cpu’/’gpu’) and install it manually using
official Guide (https://www.tensorflow.org/install/).
PyPI package:
$ pip install image-classifiers
Latest version:
$ pip install git+https://github.com/qubvel/classification_models.git
Examples
Loading model with imagenet
weights:
- Direct way (keras-applications like)
from classification_models.resnet import ResNet18, preprocess_input
model = ResNet18((224, 224, 3), weights='imagenet')
- Using
Classifiers
container
from classification_models import Classifiers
classifier, preprocess_input = Classifiers.get('resnet18')
model = classifier((224, 224, 3), weights='imagenet')
This way take one additional line of code, however if you would
like to train several models you do not need to import them directly,
just access everything through Classifiers
.
You can get all model names using Classifiers.names()
method.
Inference example:
import numpy as np
from skimage.io import imread
from skimage.transform import resize
from keras.applications.imagenet_utils import decode_predictions
from classification_models.resnet import ResNet18, preprocess_input
# read and prepare image
x = imread('./imgs/tests/seagull.jpg')
x = resize(x, (224, 224)) * 255 # cast back to 0-255 range
x = preprocess_input(x)
x = np.expand_dims(x, 0)
# load model
model = ResNet18(input_shape=(224,224,3), weights='imagenet', classes=1000)
# processing image
y = model.predict(x)
# result
print(decode_predictions(y))
Model fine-tuning example:
import keras
from classification_models.resnet import ResNet18, preprocess_input
# prepare your data
X = ...
y = ...
X = preprocess_input(X)
n_classes = 10
# build model
base_model = ResNet18(input_shape=(224,224,3), weights='imagenet', include_top=False)
x = keras.layers.GlobalAveragePooling2D()(base_model.output)
output = keras.layers.Dense(n_classes, activation='softmax')(x)
model = keras.models.Model(inputs=[base_model.input], outputs=[output])
# train
model.compile(optimizer='SGD', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(X, y)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for image_classifiers-0.2.2-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fdd7ca9f4e6fe2b4ee2f796a7b858840ca117df226648c7e45b15ebfbcf04df6 |
|
MD5 | f29ef786f48f08fac65b5744d6113a89 |
|
BLAKE2b-256 | 8d7f31234ee4bc8243f9e8b59b827e8a61436d7269cf75936b0aecc48a08f06c |