TensorFlow is a free and open-source software library for machine learning and artificial intelligence. It can be used across a range of tasks but has a particular focus on training and inference of deep neural networks.
TensorFlow was developed by the Google Brain team for internal Google use in research and production. The initial version was released under the Apache License 2.0 in 2015. Google released the updated version of TensorFlow, named TensorFlow 2.0, in September 2019.
Create the Dockerfile
Tensorflow Object Detection API depends on the following libraries:
- Protobuf 2.6
- Pillow 1.0
- tf Slim
- Jupyter notebook
For detailed steps how to install Tensorflow, follow the Tensorflow installation instructions. For Dockerfile, we will use the below command:
RUN pip install tensorflow
Libraries can be installed on Ubuntu using via apt-get:
RUN apt-get install protobuf-compiler python-pil python-lxml RUN pip install jupyter RUN pip install matplotlib
Copy TensorFlow Models into Docker image:
RUN git clone https://github.com/tensorflow/models.git /tensorflow/models
Make /tensorflow/models/research as a working directory:
The Tensorflow Object Detection API uses Protobufs to configure model and training parameters. Before the framework can be used, the Protobuf libraries must be compiled. This should be done by running the following command:
RUN protoc object_detection/protos/*.proto --python_out=.
When running locally, the /tensorflow/models/research/ and slim directories should be appended to PYTHONPATH. This can be done by running the following command:
RUN export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim
Configure jupyter notebook:
RUN jupyter notebook --generate-config --allow-root RUN echo "c.NotebookApp.password = u'sha1:6a3f528eec40:6e896b6e4828f525a6e20e5411cd1c8075d68619'" >> /root/.jupyter/jupyter_notebook_config.py
echo line is setting root password for web interface for jupyter notebook
To process requests from host machine we need to expose a port:
Finally, we will run the Jupyter notebook with TensorFlow models:
CMD ["jupyter", "notebook", "--allow-root", "--notebook-dir=/tensorflow/models/research/object_detection", "--ip=0.0.0.0", "--port=8888", "--no-browser"]
The full Dockerfile should look like below:
FROM "ubuntu:bionic" RUN apt-get update && yes | apt-get upgrade RUN mkdir -p /tensorflow/models RUN apt-get install -y git python-pip RUN pip install --upgrade pip RUN pip install tensorflow RUN apt-get install -y protobuf-compiler python-pil python-lxml RUN pip install jupyter RUN pip install matplotlib RUN git clone https://github.com/tensorflow/models.git /tensorflow/models WORKDIR /tensorflow/models/research RUN protoc object_detection/protos/*.proto --python_out=. RUN export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim RUN jupyter notebook --generate-config --allow-root RUN echo "c.NotebookApp.password = u'sha1:6a3f528eec40:6e896b6e4828f525a6e20e5411cd1c8075d68619'" >> /root/.jupyter/jupyter_notebook_config.py EXPOSE 8888 CMD ["jupyter", "notebook", "--allow-root", "--notebook-dir=/tensorflow/models/research/object_detection", "--ip=0.0.0.0", "--port=8888", "--no-browser"]
Build the Docker image
docker build -t tensorflow .
Run the Docker container
docker run --rm --name tensorflow -p 8888:8888 -d tensorflow
Run the Application
Enter the password as root and click Log in
Run the object detection from the menu “Cell → Run all”
Results of the object detection
Stop the TensorFlow Docker container
docker rm -f tensorflow
Top features that make TensorFlow a preferred library among developers
- It offers multiple levels of abstraction and various APIs that makes model building easy.
- TensorFlow supports various platforms for deploying ML models, be it desktop, mobile, web, or even cloud.
- Being an open-source platform, TensorFlow is backed by huge community support where one can interact with developers, problem solvers, and tinkerers and share their ideas.
Docker is my favourite containerisation platform. Why? Docker provides a way to run applications securely isolated in a container, packaged with all its dependencies and libraries which are required for the application to run. Please refer to my other Docker blogs for more learning on Docker.
We just created a Docker image with TensorFlow and ran a container based on the Docker image. We have used the Jupyter notebook to test our examples in the browser.
As per the StackOverflow Developers Survey 2020, TensorFlow is one of the most popular frameworks among developers. Around 65% of the surveyed respondents have expressed their interest in continuing to develop models using TensorFlow. Also, with Google’s support, the library will be enhanced regularly to fulfill the growing needs of developers.
Top comments (2)
object_detection_tutorial.ipynb does exist at \tensorflow\models\research\object_detection\colab_tutorials, however when attempting to run this through Jupyter, various errors occur, sems like Python > 3.6 is required which makes me think that something has changed between now and when this blog was written. If we could get exact versions of all the dependencies git-repository, apt-packages, pip-ppackages in the Dockerfile, it should be possible to get it working(?)
This is very helpful and I can get the container up and running, Jupyter is working and I can browse locahost:8888, however object_detection_tutorial.ipynb does not exist at the location (which according to the scrren shots in this blog appears to be at: \research\object_detection). I suspect that something has happened on the tensorflow/models git repository between the time this blog post was created and today.
I have attempted to checkout a previous version (2.8.0 was probably the latest one at the time this blog post was written, but haven't got it working either). Can someone verify this works as of today and possibly update the Dockerfile so that a specific commit is checked out right after clone has been made, the way it is written now, we will always clone latest which might break this tutorial.