From ad79e7a2ed2bb593d862620e099dc5c7070074b3 Mon Sep 17 00:00:00 2001 From: Lucas Oskorep Date: Sun, 14 Apr 2019 20:12:36 -0500 Subject: [PATCH] Adding in the trained models for the first android app. --- ModelTraining/1 - ImageGatherer.py | 2 +- ModelTraining/4 - TrainingModelKeras.py | 112 +- ModelTraining/5 - KerasToTensorflow.py | 2 +- android-tflite/app/build.gradle | 2 +- android-tflite/app/src/main/assets/labels.txt | 1011 +---------------- .../tflitecamerademo/ImageClassifier.java | 6 +- 6 files changed, 84 insertions(+), 1051 deletions(-) diff --git a/ModelTraining/1 - ImageGatherer.py b/ModelTraining/1 - ImageGatherer.py index ed247ad..ff17d83 100755 --- a/ModelTraining/1 - ImageGatherer.py +++ b/ModelTraining/1 - ImageGatherer.py @@ -6,7 +6,7 @@ df = pd.read_csv("pokemon.csv") response = google_images_download.googleimagesdownload() -for pokemon in ["abra", "xatu", "yanma", "zapdos", "zubat"]: # df["identifier"][:251]: +for pokemon in df["identifier"][:251]: absolute_image_paths = response.download( { "keywords": pokemon, diff --git a/ModelTraining/4 - TrainingModelKeras.py b/ModelTraining/4 - TrainingModelKeras.py index 0518b90..0e185f2 100755 --- a/ModelTraining/4 - TrainingModelKeras.py +++ b/ModelTraining/4 - TrainingModelKeras.py @@ -1,33 +1,53 @@ -import tensorflow as tf -import pandas as pd -import numpy as np -import os -import seaborn as sn +import keras import matplotlib.pyplot as plt -from tensorflow import keras +import numpy as np +import pandas as pd +import seaborn as sn + +from keras import optimizers +from keras.applications import inception_v3, mobilenet_v2, vgg16 +from keras.applications.inception_v3 import preprocess_input +from keras.callbacks import ModelCheckpoint, EarlyStopping, TensorBoard +from keras.layers import Dense, Dropout, GlobalAveragePooling2D +from keras.models import Sequential +from keras.preprocessing.image import ImageDataGenerator + +from sklearn.metrics import accuracy_score, confusion_matrix, classification_report + from time import time from PIL import ImageFile + +# First we some globals that we want to use for this entire process + ImageFile.LOAD_TRUNCATED_IMAGES = True input_shape = (299, 299, 3) batch_size = 32 -model_name = "MobileNetV2FullDatasetNoTransfer" -from keras.preprocessing.image import ImageDataGenerator -from keras.applications.inception_v3 import preprocess_input +model_name = "InceptionV3Full" +# Next we set up the Image Data Generators to feed into the training cycles. +# We need one for training, validation, and testing train_idg = ImageDataGenerator( - # horizontal_flip=True, + horizontal_flip=True, + rotation_range=30, + width_shift_range=[-.1, .1], + height_shift_range=[-.1, .1], preprocessing_function=preprocess_input ) + train_gen = train_idg.flow_from_directory( './data/train', target_size=(input_shape[0], input_shape[1]), batch_size=batch_size ) +print(len(train_gen.classes)) val_idg = ImageDataGenerator( - # horizontal_flip=True, + horizontal_flip=True, + rotation_range=30, + width_shift_range=[-.1, .1], + height_shift_range=[-.1, .1], preprocessing_function=preprocess_input ) @@ -36,31 +56,39 @@ val_gen = val_idg.flow_from_directory( target_size=(input_shape[0], input_shape[1]), batch_size=batch_size ) -from keras.applications import inception_v3, mobilenet_v2, vgg16 -from keras.models import Sequential -from keras.callbacks import ModelCheckpoint, EarlyStopping, TensorBoard -from keras import optimizers -from keras.layers import Dense, Dropout, GlobalAveragePooling2D -nclass = len(train_gen.class_indices) +test_idg = ImageDataGenerator( + preprocessing_function=preprocess_input, +) +test_gen = test_idg.flow_from_directory( + './data/test', + target_size=(input_shape[0], input_shape[1]), + batch_size=batch_size, + shuffle=False + +) + +# Now we define the model we are going to use....to use something differnet just comment it out or add it here # base_model = vgg16.VGG16( # weights='imagenet', # include_top=False, # input_shape=input_shape # ) -# base_model = inception_v3.InceptionV3( -# weights='imagenet', -# include_top=False, -# input_shape=input_shape -# ) - -base_model = mobilenet_v2.MobileNetV2( +base_model = inception_v3.InceptionV3( weights='imagenet', include_top=False, input_shape=input_shape ) +# base_model = mobilenet_v2.MobileNetV2( +# weights='imagenet', +# include_top=False, +# input_shape=input_shape +# ) + + +# Create a new top for that model add_model = Sequential() add_model.add(base_model) add_model.add(GlobalAveragePooling2D()) @@ -70,7 +98,7 @@ add_model.add( # Potentially throw another dropout layer here if you seem to be overfitting your add_model.add(Dropout(0.5)) add_model.add(Dense(512, activation='relu')) -add_model.add(Dense(nclass, activation='softmax')) # Decision layer +add_model.add(Dense(len(train_gen.class_indices), activation='softmax')) # Decision layer model = add_model model.compile(loss='categorical_crossentropy', @@ -79,8 +107,12 @@ model.compile(loss='categorical_crossentropy', metrics=['accuracy']) model.summary() -# Train the model -file_path = "weights.mobilenet.non-transfer.best.hdf5" + + + +# Now that the model is created we can go ahead and train on it using the image generators we created earlier + +file_path = model_name + ".hdf5" checkpoint = ModelCheckpoint(file_path, monitor='val_acc', verbose=1, save_best_only=True, mode='max') @@ -101,31 +133,20 @@ history = model.fit_generator( validation_data=val_gen, steps_per_epoch=len(train_gen), validation_steps=len(val_gen), - epochs=2, + epochs=60, shuffle=True, verbose=True, callbacks=callbacks_list ) -# Create Test generator -test_idg = ImageDataGenerator( - preprocessing_function=preprocess_input, -) -test_gen = test_idg.flow_from_directory( - './data/test', - target_size=(input_shape[0], input_shape[1]), - batch_size=batch_size, - shuffle=False - -) -len(test_gen.filenames) -# predicts + +# Finally we are going to grab predictions from our model, save it, and then run some analysis on the results + predicts = model.predict_generator(test_gen, verbose=True, workers=1, steps=len(test_gen)) - -keras_file = 'finished.h5' +keras_file = model_name + 'finished.h5' keras.models.save_model(model, keras_file) print(predicts) @@ -151,10 +172,10 @@ df["true_val"] = reals df.to_csv("sub1_non_transfer.csv", index=False) # Processed the saved results -from sklearn.metrics import accuracy_score, confusion_matrix acc = accuracy_score(reals, predicts) conf_mat = confusion_matrix(reals, predicts) +print(classification_report(reals, predicts, [l for l in label_index.values()])) print("Testing accuracy score is ", acc) print("Confusion Matrix", conf_mat) @@ -164,3 +185,6 @@ plt.figure(figsize=(10, 7)) sn.heatmap(df_cm, annot=True) plt.show() +with open("labels.txt", "w") as f: + for label in label_index.values(): + f.write(label + "\n") diff --git a/ModelTraining/5 - KerasToTensorflow.py b/ModelTraining/5 - KerasToTensorflow.py index f49f4b0..8ff6943 100755 --- a/ModelTraining/5 - KerasToTensorflow.py +++ b/ModelTraining/5 - KerasToTensorflow.py @@ -1,7 +1,7 @@ from tensorflow.contrib.keras.api import keras from tensorflow.contrib import lite -keras_file = "weights.mobilenet.non-transfer.best.hdf5" +keras_file = "InceptionV3Full.hdf5" keras.models.load_model(keras_file) h5_model = keras.models.load_model(keras_file) diff --git a/android-tflite/app/build.gradle b/android-tflite/app/build.gradle index 603f0d4..3ea9cca 100755 --- a/android-tflite/app/build.gradle +++ b/android-tflite/app/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.application' project.ext.ASSET_DIR = projectDir.toString() + '/src/main/assets' -assert file(project.ext.ASSET_DIR + "/graph.lite").exists() +assert file(project.ext.ASSET_DIR + "/inception.tflite").exists() assert file(project.ext.ASSET_DIR + "/labels.txt").exists() android { diff --git a/android-tflite/app/src/main/assets/labels.txt b/android-tflite/app/src/main/assets/labels.txt index fe81123..79690b2 100755 --- a/android-tflite/app/src/main/assets/labels.txt +++ b/android-tflite/app/src/main/assets/labels.txt @@ -1,1001 +1,10 @@ -background -tench -goldfish -great white shark -tiger shark -hammerhead -electric ray -stingray -cock -hen -ostrich -brambling -goldfinch -house finch -junco -indigo bunting -robin -bulbul -jay -magpie -chickadee -water ouzel -kite -bald eagle -vulture -great grey owl -European fire salamander -common newt -eft -spotted salamander -axolotl -bullfrog -tree frog -tailed frog -loggerhead -leatherback turtle -mud turtle -terrapin -box turtle -banded gecko -common iguana -American chameleon -whiptail -agama -frilled lizard -alligator lizard -Gila monster -green lizard -African chameleon -Komodo dragon -African crocodile -American alligator -triceratops -thunder snake -ringneck snake -hognose snake -green snake -king snake -garter snake -water snake -vine snake -night snake -boa constrictor -rock python -Indian cobra -green mamba -sea snake -horned viper -diamondback -sidewinder -trilobite -harvestman -scorpion -black and gold garden spider -barn spider -garden spider -black widow -tarantula -wolf spider -tick -centipede -black grouse -ptarmigan -ruffed grouse -prairie chicken -peacock -quail -partridge -African grey -macaw -sulphur-crested cockatoo -lorikeet -coucal -bee eater -hornbill -hummingbird -jacamar -toucan -drake -red-breasted merganser -goose -black swan -tusker -echidna -platypus -wallaby -koala -wombat -jellyfish -sea anemone -brain coral -flatworm -nematode -conch -snail -slug -sea slug -chiton -chambered nautilus -Dungeness crab -rock crab -fiddler crab -king crab -American lobster -spiny lobster -crayfish -hermit crab -isopod -white stork -black stork -spoonbill -flamingo -little blue heron -American egret -bittern -crane -limpkin -European gallinule -American coot -bustard -ruddy turnstone -red-backed sandpiper -redshank -dowitcher -oystercatcher -pelican -king penguin -albatross -grey whale -killer whale -dugong -sea lion -Chihuahua -Japanese spaniel -Maltese dog -Pekinese -Shih-Tzu -Blenheim spaniel -papillon -toy terrier -Rhodesian ridgeback -Afghan hound -basset -beagle -bloodhound -bluetick -black-and-tan coonhound -Walker hound -English foxhound -redbone -borzoi -Irish wolfhound -Italian greyhound -whippet -Ibizan hound -Norwegian elkhound -otterhound -Saluki -Scottish deerhound -Weimaraner -Staffordshire bullterrier -American Staffordshire terrier -Bedlington terrier -Border terrier -Kerry blue terrier -Irish terrier -Norfolk terrier -Norwich terrier -Yorkshire terrier -wire-haired fox terrier -Lakeland terrier -Sealyham terrier -Airedale -cairn -Australian terrier -Dandie Dinmont -Boston bull -miniature schnauzer -giant schnauzer -standard schnauzer -Scotch terrier -Tibetan terrier -silky terrier -soft-coated wheaten terrier -West Highland white terrier -Lhasa -flat-coated retriever -curly-coated retriever -golden retriever -Labrador retriever -Chesapeake Bay retriever -German short-haired pointer -vizsla -English setter -Irish setter -Gordon setter -Brittany spaniel -clumber -English springer -Welsh springer spaniel -cocker spaniel -Sussex spaniel -Irish water spaniel -kuvasz -schipperke -groenendael -malinois -briard -kelpie -komondor -Old English sheepdog -Shetland sheepdog -collie -Border collie -Bouvier des Flandres -Rottweiler -German shepherd -Doberman -miniature pinscher -Greater Swiss Mountain dog -Bernese mountain dog -Appenzeller -EntleBucher -boxer -bull mastiff -Tibetan mastiff -French bulldog -Great Dane -Saint Bernard -Eskimo dog -malamute -Siberian husky -dalmatian -affenpinscher -basenji -pug -Leonberg -Newfoundland -Great Pyrenees -Samoyed -Pomeranian -chow -keeshond -Brabancon griffon -Pembroke -Cardigan -toy poodle -miniature poodle -standard poodle -Mexican hairless -timber wolf -white wolf -red wolf -coyote -dingo -dhole -African hunting dog -hyena -red fox -kit fox -Arctic fox -grey fox -tabby -tiger cat -Persian cat -Siamese cat -Egyptian cat -cougar -lynx -leopard -snow leopard -jaguar -lion -tiger -cheetah -brown bear -American black bear -ice bear -sloth bear -mongoose -meerkat -tiger beetle -ladybug -ground beetle -long-horned beetle -leaf beetle -dung beetle -rhinoceros beetle -weevil -fly -bee -ant -grasshopper -cricket -walking stick -cockroach -mantis -cicada -leafhopper -lacewing -dragonfly -damselfly -admiral -ringlet -monarch -cabbage butterfly -sulphur butterfly -lycaenid -starfish -sea urchin -sea cucumber -wood rabbit -hare -Angora -hamster -porcupine -fox squirrel -marmot -beaver -guinea pig -sorrel -zebra -hog -wild boar -warthog -hippopotamus -ox -water buffalo -bison -ram -bighorn -ibex -hartebeest -impala -gazelle -Arabian camel -llama -weasel -mink -polecat -black-footed ferret -otter -skunk -badger -armadillo -three-toed sloth -orangutan -gorilla -chimpanzee -gibbon -siamang -guenon -patas -baboon -macaque -langur -colobus -proboscis monkey -marmoset -capuchin -howler monkey -titi -spider monkey -squirrel monkey -Madagascar cat -indri -Indian elephant -African elephant -lesser panda -giant panda -barracouta -eel -coho -rock beauty -anemone fish -sturgeon -gar -lionfish -puffer -abacus -abaya -academic gown -accordion -acoustic guitar -aircraft carrier -airliner -airship -altar -ambulance -amphibian -analog clock -apiary -apron -ashcan -assault rifle -backpack -bakery -balance beam -balloon -ballpoint -Band Aid -banjo -bannister -barbell -barber chair -barbershop -barn -barometer -barrel -barrow -baseball -basketball -bassinet -bassoon -bathing cap -bath towel -bathtub -beach wagon -beacon -beaker -bearskin -beer bottle -beer glass -bell cote -bib -bicycle-built-for-two -bikini -binder -binoculars -birdhouse -boathouse -bobsled -bolo tie -bonnet -bookcase -bookshop -bottlecap -bow -bow tie -brass -brassiere -breakwater -breastplate -broom -bucket -buckle -bulletproof vest -bullet train -butcher shop -cab -caldron -candle -cannon -canoe -can opener -cardigan -car mirror -carousel -carpenter's kit -carton -car wheel -cash machine -cassette -cassette player -castle -catamaran -CD player -cello -cellular telephone -chain -chainlink fence -chain mail -chain saw -chest -chiffonier -chime -china cabinet -Christmas stocking -church -cinema -cleaver -cliff dwelling -cloak -clog -cocktail shaker -coffee mug -coffeepot -coil -combination lock -computer keyboard -confectionery -container ship -convertible -corkscrew -cornet -cowboy boot -cowboy hat -cradle -crane -crash helmet -crate -crib -Crock Pot -croquet ball -crutch -cuirass -dam -desk -desktop computer -dial telephone -diaper -digital clock -digital watch -dining table -dishrag -dishwasher -disk brake -dock -dogsled -dome -doormat -drilling platform -drum -drumstick -dumbbell -Dutch oven -electric fan -electric guitar -electric locomotive -entertainment center -envelope -espresso maker -face powder -feather boa -file -fireboat -fire engine -fire screen -flagpole -flute -folding chair -football helmet -forklift -fountain -fountain pen -four-poster -freight car -French horn -frying pan -fur coat -garbage truck -gasmask -gas pump -goblet -go-kart -golf ball -golfcart -gondola -gong -gown -grand piano -greenhouse -grille -grocery store -guillotine -hair slide -hair spray -half track -hammer -hamper -hand blower -hand-held computer -handkerchief -hard disc -harmonica -harp -harvester -hatchet -holster -home theater -honeycomb -hook -hoopskirt -horizontal bar -horse cart -hourglass -iPod -iron -jack-o'-lantern -jean -jeep -jersey -jigsaw puzzle -jinrikisha -joystick -kimono -knee pad -knot -lab coat -ladle -lampshade -laptop -lawn mower -lens cap -letter opener -library -lifeboat -lighter -limousine -liner -lipstick -Loafer -lotion -loudspeaker -loupe -lumbermill -magnetic compass -mailbag -mailbox -maillot -maillot -manhole cover -maraca -marimba -mask -matchstick -maypole -maze -measuring cup -medicine chest -megalith -microphone -microwave -military uniform -milk can -minibus -miniskirt -minivan -missile -mitten -mixing bowl -mobile home -Model T -modem -monastery -monitor -moped -mortar -mortarboard -mosque -mosquito net -motor scooter -mountain bike -mountain tent -mouse -mousetrap -moving van -muzzle -nail -neck brace -necklace -nipple -notebook -obelisk -oboe -ocarina -odometer -oil filter -organ -oscilloscope -overskirt -oxcart -oxygen mask -packet -paddle -paddlewheel -padlock -paintbrush -pajama -palace -panpipe -paper towel -parachute -parallel bars -park bench -parking meter -passenger car -patio -pay-phone -pedestal -pencil box -pencil sharpener -perfume -Petri dish -photocopier -pick -pickelhaube -picket fence -pickup -pier -piggy bank -pill bottle -pillow -ping-pong ball -pinwheel -pirate -pitcher -plane -planetarium -plastic bag -plate rack -plow -plunger -Polaroid camera -pole -police van -poncho -pool table -pop bottle -pot -potter's wheel -power drill -prayer rug -printer -prison -projectile -projector -puck -punching bag -purse -quill -quilt -racer -racket -radiator -radio -radio telescope -rain barrel -recreational vehicle -reel -reflex camera -refrigerator -remote control -restaurant -revolver -rifle -rocking chair -rotisserie -rubber eraser -rugby ball -rule -running shoe -safe -safety pin -saltshaker -sandal -sarong -sax -scabbard -scale -school bus -schooner -scoreboard -screen -screw -screwdriver -seat belt -sewing machine -shield -shoe shop -shoji -shopping basket -shopping cart -shovel -shower cap -shower curtain -ski -ski mask -sleeping bag -slide rule -sliding door -slot -snorkel -snowmobile -snowplow -soap dispenser -soccer ball -sock -solar dish -sombrero -soup bowl -space bar -space heater -space shuttle -spatula -speedboat -spider web -spindle -sports car -spotlight -stage -steam locomotive -steel arch bridge -steel drum -stethoscope -stole -stone wall -stopwatch -stove -strainer -streetcar -stretcher -studio couch -stupa -submarine -suit -sundial -sunglass -sunglasses -sunscreen -suspension bridge -swab -sweatshirt -swimming trunks -swing -switch -syringe -table lamp -tank -tape player -teapot -teddy -television -tennis ball -thatch -theater curtain -thimble -thresher -throne -tile roof -toaster -tobacco shop -toilet seat -torch -totem pole -tow truck -toyshop -tractor -trailer truck -tray -trench coat -tricycle -trimaran -tripod -triumphal arch -trolleybus -trombone -tub -turnstile -typewriter keyboard -umbrella -unicycle -upright -vacuum -vase -vault -velvet -vending machine -vestment -viaduct -violin -volleyball -waffle iron -wall clock -wallet -wardrobe -warplane -washbasin -washer -water bottle -water jug -water tower -whiskey jug -whistle -wig -window screen -window shade -Windsor tie -wine bottle -wing -wok -wooden spoon -wool -worm fence -wreck -yawl -yurt -web site -comic book -crossword puzzle -street sign -traffic light -book jacket -menu -plate -guacamole -consomme -hot pot -trifle -ice cream -ice lolly -French loaf -bagel -pretzel -cheeseburger -hotdog -mashed potato -head cabbage -broccoli -cauliflower -zucchini -spaghetti squash -acorn squash -butternut squash -cucumber -artichoke -bell pepper -cardoon -mushroom -Granny Smith -strawberry -orange -lemon -fig -pineapple -banana -jackfruit -custard apple -pomegranate -hay -carbonara -chocolate sauce -dough -meat loaf -pizza -potpie -burrito -red wine -espresso -cup -eggnog -alp -bubble -cliff -coral reef -geyser -lakeside -promontory -sandbar -seashore -valley -volcano -ballplayer -groom -scuba diver -rapeseed -daisy -yellow lady's slipper -corn -acorn -hip -buckeye -coral fungus -agaric -gyromitra -stinkhorn -earthstar -hen-of-the-woods -bolete -ear -toilet tissue +abra +aerodactyl +aipom +alakazam +ampharos +arbok +arcanine +ariados +articuno +azumarill diff --git a/android-tflite/app/src/main/java/com/example/android/tflitecamerademo/ImageClassifier.java b/android-tflite/app/src/main/java/com/example/android/tflitecamerademo/ImageClassifier.java index d3354a2..e95b832 100755 --- a/android-tflite/app/src/main/java/com/example/android/tflitecamerademo/ImageClassifier.java +++ b/android-tflite/app/src/main/java/com/example/android/tflitecamerademo/ImageClassifier.java @@ -43,7 +43,7 @@ public class ImageClassifier { private static final String TAG = "TfLiteCameraDemo"; /** Name of the model file stored in Assets. */ - private static final String MODEL_PATH = "graph.lite"; + private static final String MODEL_PATH = "inception.tflite"; /** Name of the label file stored in Assets. */ private static final String LABEL_PATH = "labels.txt"; @@ -56,8 +56,8 @@ public class ImageClassifier { private static final int DIM_PIXEL_SIZE = 3; - static final int DIM_IMG_SIZE_X = 224; - static final int DIM_IMG_SIZE_Y = 224; + static final int DIM_IMG_SIZE_X = 299; + static final int DIM_IMG_SIZE_Y = 299; private static final int IMAGE_MEAN = 128; private static final float IMAGE_STD = 128.0f;