This project was developed by Neil Deshmukh to teach attendees how to develop an image recognition Convolutional Neural Network and complimentary app, at the 'Using Machine Learning to Build an Image Classification App' workshop at FIRST Detroit on April 26th at 1:30 - 3:30 pm.
APACHE-2.0 License
This is the workshop github for the 'Using Machine Learning to Build an Image Classification App' presented by Neil Deshmukh at FIRST Detroit on April 26th at 1:30 - 3:30 pm.
In this workshop, we will first train a ML algorithm to classify between any image classes that we give it, and then secondly integrate it into an application.
The app integration is optional, but it's a pretty cool direct visualization of the Neural Network in action.
All that you need is:
Download Python (if you don't already have it)
ONLY Mac Users Developing for IOS:
python2: sudo pip install --upgrade \ https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.4.0-py-none-any.whl
python 3: sudo pip3 install --upgrade \ https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.4.0-py3-none-any.whl
Download tensorflow following the instructions at https://www.tensorflow.org/install/ (the CPU version will be sufficient for this workshop)
Download google_images_download, if you would like to train the model on the classes that you want it to detect:
pip install google_images_download
git clone https://github.com/QuantumTCode/FIRST-MLWorkshop
cd FIRST-MLWorkshop
googleimagesdownload -f jpg -k "[Class 1], [Class 2], [Class 3], [Class 4], [Class 5]"
So an example would be:
googleimagesdownload -f jpg -k "train, car, bus, racecar, motorcycle"
While only 5 classes are downloaded above, you can add more (might decrease accuracy of classification)
Check the images:
python scripts/check_images.py
ARCHITECTURE="mobilenet_0.50_224"
tensorboard --logdir tf_files/training_summaries &
If you receive an error stating: TensorBoard attempted to bind to port 6006, but it was already in use
kill the existing TensorBoard instance using pkill -f "tensorboard"
Start the training of the model using:
python -m scripts.retrain \
--bottleneck_dir=tf_files/bottlenecks \
--how_many_training_steps=1000 \
--model_dir=tf_files/models/ \
--summaries_dir=tf_files/training_summaries/"${ARCHITECTURE}" \
--output_graph=tf_files/retrained_graph.pb \
--output_labels=tf_files/retrained_labels.txt \
--architecture="${ARCHITECTURE}" \
--image_dir=downloads
If you have time, and want to increase the accuracy of you model, change --how_many_training_steps=X
to a higher number (4000 is probably the highest you need to go).
To see the real time learning behind the algorithm, go to http://0.0.0.0:6006/ on your computer!
python -m scripts.label_image \
--graph=tf_files/retrained_graph.pb \
--image=(path_to_image)
For example:
python -m scripts.label_image \ --graph=tf_files/retrained_graph.pb \ --image=downloads/car/car.png
pip install PILLOW
If IOS: sudo gem install cocoapods
toco \
--input_file=tf_files/retrained_graph.pb \
--output_file=tf_files/optimized_graph.pb \
--input_format=TENSORFLOW_GRAPHDEF \
--output_format=TENSORFLOW_GRAPHDEF \
--input_shape=1,224,224,3 \
--input_array=input \
--output_array=final_result \
--mean_value=128 \
--std_value=128 \
--default_range_min=0 \
--default_ranges_max=6
toco \
--input_file=tf_files/retrained_graph.pb \
--output_file=tf_files/optimized_graph.lite \
--input_format=TENSORFLOW_GRAPHDEF \
--output_format=TFLITE \
--input_shape=1,224,224,3 \
--input_array=input \
--output_array=final_result \
--inference_type=FLOAT \
--input_type=FLOAT \
--mean_value=128 \
--std_value=128 \
--default_range_min=0 \
--default_ranges_max=6
cd ios/camera
Update Pods:
pod update
Copy the trained models into the app:
cd ../..
cp tf_files/retrained_graph.pb ios/camera/data/retrained_graph.pb
Copy the labels into the app:
cp tf_files/retrained_labels.txt ios/camera/data/retrained_labels.txt
Open the app:
open ios/camera/tf_camera_example.xcworkspace
Make sure to go to Xcode>Preferences and sign in to be able to connect your phone and test the application.
Finally, you should be able to run your app!
Set up Device: https://developer.android.com/studio/debug/dev-options#enable
Copy the labels and models into the app:
cp tf_files/optimized_graph.lite android/tflite/app/src/main/assets/graph.lite
cp tf_files/retrained_labels.txt android/tflite/app/src/main/assets/labels.txt
Open Android Studio>Open an existing Android Studio project, open FIRST-MLWorkshop/android/tflite, and click 'OK' for Gradle Sync.
Then run the app!