Label images with a deep neural network
It isn't often that you need to label lots of images. But when the need arises you can use many of the pre-trained deep neural network models available for image labeling tasks. One of the most popular ones is ResNet50 and
keras provides a convenient of using it.
I'm a big fan of
docker and will use gw000/keras
docker image that comes installed with the necessary libraries needed to use ResNet50 for image labeling. A few additional tweaks are still needed and I'll build a custom
docker image on top of gw000/keras.
First, create a directory in your workspace and
cd into it.
mkdir resnet50labeling cd resnet50labeling
Create a Dockerfile.
Paste the following into your Dockerfile.
FROM gw000/keras:2.1.4-py2-tf-cpu # install dependencies from debian packages RUN apt-get update -qq \ && apt-get install --no-install-recommends -y \ python-matplotlib \ python-pillow \ wget WORKDIR /
Build the image.
docker build -t resnet50labeling:v1 .
Create container from the image and shell into it.
docker run -it resnet50labeling:v1 /bin/bash
Once inside the container download an image to label. The command below downloads an image of a golden retriever.
Next, start a Python session inside the container and get ready to label the image downloaded above. The Python snippet below will be used to label the downloaded image. While executing the snippet below, a large file download will take place. This file contains the pre-trained weights of the ResNet50 deep neural network that is necessary to label the image.
import keras from keras.applications.resnet50 import ResNet50 from keras.preprocessing import image from keras.applications.resnet50 import preprocess_input, decode_predictions import numpy as np model = ResNet50() input_img_path = 'maxresdefault.jpg' img = image.load_img(input_img_path, target_size=(224, 224)) x = image.img_to_array(img) x = np.expand_dims(x, axis=0) x = preprocess_input(x) predictions = model.predict(x) print('Predicted:', decode_predictions(predictions, top=3))
If all goes well you should see the following;
ResNet50 is a large deep neural network architecture trained on more than 1 million images on ImageNet. This paper and this has more details on the original ResNet models.
ResNet50 in Keras defines the deep neural network architecture and provides a convenient way to use it as I've shown in this post.