├── Procfile ├── README.md ├── Untitled5.ipynb ├── app.py ├── app.pyc ├── app.yaml ├── model.h5 ├── model.json ├── model ├── load.py └── load.pyc ├── output.png ├── requirements.txt ├── runtime.txt ├── static ├── img │ └── output.png └── style.css └── templates ├── index.html ├── index2.html ├── show.html └── upload.html /Procfile: -------------------------------------------------------------------------------- 1 | web: python app.py 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Resnet-Image-Classification-Flask-App 2 | 3 | 1) Download the repository to your local device 4 | 2) In Terminal, cd to the folder where you have the repository downloaded 5 | 3) To install dependencies on your local machine, run pip install -r requirements.txt 6 | 4) Run python app.py 7 | 8 | 9 | You can view the app here - https://vgg16.herokuapp.com/ 10 | -------------------------------------------------------------------------------- /app.py: -------------------------------------------------------------------------------- 1 | from flask import Flask, render_template, request 2 | from flask_uploads import UploadSet, configure_uploads,IMAGES 3 | from scipy.misc import imsave, imread, imresize 4 | from keras.preprocessing import image 5 | from keras.applications.resnet50 import preprocess_input, decode_predictions 6 | 7 | #for matrix math 8 | import numpy as np 9 | from werkzeug import secure_filename 10 | #for importing our keras model 11 | import keras.models 12 | #for regular expressions, saves time dealing with string data 13 | import re 14 | #system level operations (like loading files) 15 | import sys 16 | #for reading operating system data 17 | import os 18 | #tell our app where our saved model is 19 | sys.path.append(os.path.abspath("./model")) 20 | from load import * 21 | #initalize our flask app 22 | app = Flask(__name__) 23 | #global vars for easy reusability 24 | global model, graph 25 | #initialize these variables 26 | model, graph = init() 27 | 28 | photos = UploadSet('photos', IMAGES) 29 | 30 | app.config['UPLOADED_PHOTOS_DEST'] = '.' 31 | configure_uploads(app, photos) 32 | 33 | @app.route('/') 34 | def index(): 35 | #initModel() 36 | #render out pre-built HTML file right on the index page 37 | return render_template("index.html") 38 | 39 | @app.route('/upload', methods=['GET', 'POST']) 40 | def upload(): 41 | if request.method == 'POST' and 'photo' in request.files: 42 | filename = photos.save(request.files['photo']) 43 | os.rename('./'+filename,'./'+'output.png') 44 | 45 | print "debug" 46 | #read the image into memory 47 | img = image.load_img('./output.png', target_size=(224, 224)) 48 | #compute a bit-wise inversion so black becomes white and vice versa 49 | x = image.img_to_array(img) 50 | #make it the right size 51 | x = np.expand_dims(x, axis=0) 52 | #imshow(x) 53 | #convert to a 4D tensor to feed into our model 54 | x = preprocess_input(x) 55 | print "debug2" 56 | #in our computation graph 57 | with graph.as_default(): 58 | #perform the prediction 59 | out = model.predict(x) 60 | u = decode_predictions(out, top=3)[0] 61 | s1 = u[0][1] 62 | s2 = u[0][2]*100 63 | s3 = u[1][1] 64 | s4 = u[1][2]*100 65 | s5 = u[2][1] 66 | s6 = u[2][2]*100 67 | print(s1,s2,s3) 68 | print "debug3" 69 | #convert the response to a string 70 | return render_template("index2.html",s1 = s1, s2 = s2, s3 = s3,s4 = s4,s5 = s5,s6 = s6) 71 | 72 | 73 | if __name__ == "__main__": 74 | #decide what port to run the app in 75 | port = int(os.environ.get('PORT', 5000)) 76 | #run the app locally on the givn port 77 | app.run(host='0.0.0.0', port=port) 78 | #optional if we want to run in debugging mode 79 | #app.run(debug=True) 80 | -------------------------------------------------------------------------------- /app.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anagar20/Resnet-Image-Classification-Flask-App/99d8bd5167db42ff618f143c943b0f35698b782c/app.pyc -------------------------------------------------------------------------------- /app.yaml: -------------------------------------------------------------------------------- 1 | entrypoint: gunicorn -b :$PORT app:app 2 | env: flex 3 | runtime: python 4 | 5 | runtime_config: 6 | python_version: 2 7 | -------------------------------------------------------------------------------- /model.h5: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anagar20/Resnet-Image-Classification-Flask-App/99d8bd5167db42ff618f143c943b0f35698b782c/model.h5 -------------------------------------------------------------------------------- /model.json: -------------------------------------------------------------------------------- 1 | {"class_name": "Model", "keras_version": "1.2.2", "config": {"layers": [{"class_name": "InputLayer", "config": {"batch_input_shape": [null, 224, 224, 3], "input_dtype": "float32", "sparse": false, "name": "input_4"}, "inbound_nodes": [], "name": "input_4"}, {"class_name": "ZeroPadding2D", "config": {"padding": [3, 3], "trainable": true, "name": "zeropadding2d_2"}, "inbound_nodes": [[["input_4", 0, 0]]], "name": "zeropadding2d_2"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "conv1", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 7, "subsample": [2, 2], "init": "glorot_uniform", "bias": true, "nb_filter": 64, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 7}, "inbound_nodes": [[["zeropadding2d_2", 0, 0]]], "name": "conv1"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn_conv1", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["conv1", 0, 0]]], "name": "bn_conv1"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_50"}, "inbound_nodes": [[["bn_conv1", 0, 0]]], "name": "activation_50"}, {"class_name": "MaxPooling2D", "config": {"name": "maxpooling2d_2", "trainable": true, "dim_ordering": "tf", "pool_size": [3, 3], "strides": [2, 2], "border_mode": "valid"}, "inbound_nodes": [[["activation_50", 0, 0]]], "name": "maxpooling2d_2"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res2a_branch2a", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 1, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 64, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 1}, "inbound_nodes": [[["maxpooling2d_2", 0, 0]]], "name": "res2a_branch2a"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn2a_branch2a", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res2a_branch2a", 0, 0]]], "name": "bn2a_branch2a"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_51"}, "inbound_nodes": [[["bn2a_branch2a", 0, 0]]], "name": "activation_51"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res2a_branch2b", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 3, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 64, "border_mode": "same", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 3}, "inbound_nodes": [[["activation_51", 0, 0]]], "name": "res2a_branch2b"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn2a_branch2b", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res2a_branch2b", 0, 0]]], "name": "bn2a_branch2b"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_52"}, "inbound_nodes": [[["bn2a_branch2b", 0, 0]]], "name": "activation_52"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res2a_branch2c", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 1, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 256, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 1}, "inbound_nodes": [[["activation_52", 0, 0]]], "name": "res2a_branch2c"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res2a_branch1", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 1, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 256, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 1}, "inbound_nodes": [[["maxpooling2d_2", 0, 0]]], "name": "res2a_branch1"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn2a_branch2c", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res2a_branch2c", 0, 0]]], "name": "bn2a_branch2c"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn2a_branch1", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res2a_branch1", 0, 0]]], "name": "bn2a_branch1"}, {"class_name": "Merge", "config": {"name": "merge_17", "concat_axis": -1, "mode_type": "raw", "dot_axes": -1, "output_mask_type": "raw", "arguments": {}, "output_mask": null, "mode": "sum", "output_shape": null, "output_shape_type": "raw"}, "inbound_nodes": [[["bn2a_branch2c", 0, 0], ["bn2a_branch1", 0, 0]]], "name": "merge_17"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_53"}, "inbound_nodes": [[["merge_17", 0, 0]]], "name": "activation_53"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res2b_branch2a", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 1, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 64, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 1}, "inbound_nodes": [[["activation_53", 0, 0]]], "name": "res2b_branch2a"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn2b_branch2a", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res2b_branch2a", 0, 0]]], "name": "bn2b_branch2a"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_54"}, "inbound_nodes": [[["bn2b_branch2a", 0, 0]]], "name": "activation_54"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res2b_branch2b", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 3, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 64, "border_mode": "same", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 3}, "inbound_nodes": [[["activation_54", 0, 0]]], "name": "res2b_branch2b"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn2b_branch2b", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res2b_branch2b", 0, 0]]], "name": "bn2b_branch2b"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_55"}, "inbound_nodes": [[["bn2b_branch2b", 0, 0]]], "name": "activation_55"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res2b_branch2c", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 1, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 256, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 1}, "inbound_nodes": [[["activation_55", 0, 0]]], "name": "res2b_branch2c"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn2b_branch2c", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res2b_branch2c", 0, 0]]], "name": "bn2b_branch2c"}, {"class_name": "Merge", "config": {"name": "merge_18", "concat_axis": -1, "mode_type": "raw", "dot_axes": -1, "output_mask_type": "raw", "arguments": {}, "output_mask": null, "mode": "sum", "output_shape": null, "output_shape_type": "raw"}, "inbound_nodes": [[["bn2b_branch2c", 0, 0], ["activation_53", 0, 0]]], "name": "merge_18"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_56"}, "inbound_nodes": [[["merge_18", 0, 0]]], "name": "activation_56"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res2c_branch2a", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 1, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 64, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 1}, "inbound_nodes": [[["activation_56", 0, 0]]], "name": "res2c_branch2a"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn2c_branch2a", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res2c_branch2a", 0, 0]]], "name": "bn2c_branch2a"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_57"}, "inbound_nodes": [[["bn2c_branch2a", 0, 0]]], "name": "activation_57"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res2c_branch2b", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 3, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 64, "border_mode": "same", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 3}, "inbound_nodes": [[["activation_57", 0, 0]]], "name": "res2c_branch2b"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn2c_branch2b", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res2c_branch2b", 0, 0]]], "name": "bn2c_branch2b"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_58"}, "inbound_nodes": [[["bn2c_branch2b", 0, 0]]], "name": "activation_58"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res2c_branch2c", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 1, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 256, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 1}, "inbound_nodes": [[["activation_58", 0, 0]]], "name": "res2c_branch2c"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn2c_branch2c", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res2c_branch2c", 0, 0]]], "name": "bn2c_branch2c"}, {"class_name": "Merge", "config": {"name": "merge_19", "concat_axis": -1, "mode_type": "raw", "dot_axes": -1, "output_mask_type": "raw", "arguments": {}, "output_mask": null, "mode": "sum", "output_shape": null, "output_shape_type": "raw"}, "inbound_nodes": [[["bn2c_branch2c", 0, 0], ["activation_56", 0, 0]]], "name": "merge_19"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_59"}, "inbound_nodes": [[["merge_19", 0, 0]]], "name": "activation_59"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res3a_branch2a", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 1, "subsample": [2, 2], "init": "glorot_uniform", "bias": true, "nb_filter": 128, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 1}, "inbound_nodes": [[["activation_59", 0, 0]]], "name": "res3a_branch2a"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn3a_branch2a", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res3a_branch2a", 0, 0]]], "name": "bn3a_branch2a"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_60"}, "inbound_nodes": [[["bn3a_branch2a", 0, 0]]], "name": "activation_60"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res3a_branch2b", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 3, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 128, "border_mode": "same", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 3}, "inbound_nodes": [[["activation_60", 0, 0]]], "name": "res3a_branch2b"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn3a_branch2b", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res3a_branch2b", 0, 0]]], "name": "bn3a_branch2b"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_61"}, "inbound_nodes": [[["bn3a_branch2b", 0, 0]]], "name": "activation_61"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res3a_branch2c", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 1, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 512, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 1}, "inbound_nodes": [[["activation_61", 0, 0]]], "name": "res3a_branch2c"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res3a_branch1", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 1, "subsample": [2, 2], "init": "glorot_uniform", "bias": true, "nb_filter": 512, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 1}, "inbound_nodes": [[["activation_59", 0, 0]]], "name": "res3a_branch1"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn3a_branch2c", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res3a_branch2c", 0, 0]]], "name": "bn3a_branch2c"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn3a_branch1", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res3a_branch1", 0, 0]]], "name": "bn3a_branch1"}, {"class_name": "Merge", "config": {"name": "merge_20", "concat_axis": -1, "mode_type": "raw", "dot_axes": -1, "output_mask_type": "raw", "arguments": {}, "output_mask": null, "mode": "sum", "output_shape": null, "output_shape_type": "raw"}, "inbound_nodes": [[["bn3a_branch2c", 0, 0], ["bn3a_branch1", 0, 0]]], "name": "merge_20"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_62"}, "inbound_nodes": [[["merge_20", 0, 0]]], "name": "activation_62"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res3b_branch2a", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 1, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 128, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 1}, "inbound_nodes": [[["activation_62", 0, 0]]], "name": "res3b_branch2a"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn3b_branch2a", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res3b_branch2a", 0, 0]]], "name": "bn3b_branch2a"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_63"}, "inbound_nodes": [[["bn3b_branch2a", 0, 0]]], "name": "activation_63"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res3b_branch2b", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 3, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 128, "border_mode": "same", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 3}, "inbound_nodes": [[["activation_63", 0, 0]]], "name": "res3b_branch2b"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn3b_branch2b", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res3b_branch2b", 0, 0]]], "name": "bn3b_branch2b"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_64"}, "inbound_nodes": [[["bn3b_branch2b", 0, 0]]], "name": "activation_64"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res3b_branch2c", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 1, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 512, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 1}, "inbound_nodes": [[["activation_64", 0, 0]]], "name": "res3b_branch2c"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn3b_branch2c", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res3b_branch2c", 0, 0]]], "name": "bn3b_branch2c"}, {"class_name": "Merge", "config": {"name": "merge_21", "concat_axis": -1, "mode_type": "raw", "dot_axes": -1, "output_mask_type": "raw", "arguments": {}, "output_mask": null, "mode": "sum", "output_shape": null, "output_shape_type": "raw"}, "inbound_nodes": [[["bn3b_branch2c", 0, 0], ["activation_62", 0, 0]]], "name": "merge_21"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_65"}, "inbound_nodes": [[["merge_21", 0, 0]]], "name": "activation_65"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res3c_branch2a", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 1, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 128, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 1}, "inbound_nodes": [[["activation_65", 0, 0]]], "name": "res3c_branch2a"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn3c_branch2a", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res3c_branch2a", 0, 0]]], "name": "bn3c_branch2a"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_66"}, "inbound_nodes": [[["bn3c_branch2a", 0, 0]]], "name": "activation_66"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res3c_branch2b", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 3, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 128, "border_mode": "same", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 3}, "inbound_nodes": [[["activation_66", 0, 0]]], "name": "res3c_branch2b"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn3c_branch2b", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res3c_branch2b", 0, 0]]], "name": "bn3c_branch2b"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_67"}, "inbound_nodes": [[["bn3c_branch2b", 0, 0]]], "name": "activation_67"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res3c_branch2c", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 1, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 512, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 1}, "inbound_nodes": [[["activation_67", 0, 0]]], "name": "res3c_branch2c"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn3c_branch2c", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res3c_branch2c", 0, 0]]], "name": "bn3c_branch2c"}, {"class_name": "Merge", "config": {"name": "merge_22", "concat_axis": -1, "mode_type": "raw", "dot_axes": -1, "output_mask_type": "raw", "arguments": {}, "output_mask": null, "mode": "sum", "output_shape": null, "output_shape_type": "raw"}, "inbound_nodes": [[["bn3c_branch2c", 0, 0], ["activation_65", 0, 0]]], "name": "merge_22"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_68"}, "inbound_nodes": [[["merge_22", 0, 0]]], "name": "activation_68"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res3d_branch2a", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 1, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 128, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 1}, "inbound_nodes": [[["activation_68", 0, 0]]], "name": "res3d_branch2a"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn3d_branch2a", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res3d_branch2a", 0, 0]]], "name": "bn3d_branch2a"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_69"}, "inbound_nodes": [[["bn3d_branch2a", 0, 0]]], "name": "activation_69"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res3d_branch2b", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 3, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 128, "border_mode": "same", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 3}, "inbound_nodes": [[["activation_69", 0, 0]]], "name": "res3d_branch2b"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn3d_branch2b", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res3d_branch2b", 0, 0]]], "name": "bn3d_branch2b"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_70"}, "inbound_nodes": [[["bn3d_branch2b", 0, 0]]], "name": "activation_70"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res3d_branch2c", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 1, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 512, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 1}, "inbound_nodes": [[["activation_70", 0, 0]]], "name": "res3d_branch2c"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn3d_branch2c", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res3d_branch2c", 0, 0]]], "name": "bn3d_branch2c"}, {"class_name": "Merge", "config": {"name": "merge_23", "concat_axis": -1, "mode_type": "raw", "dot_axes": -1, "output_mask_type": "raw", "arguments": {}, "output_mask": null, "mode": "sum", "output_shape": null, "output_shape_type": "raw"}, "inbound_nodes": [[["bn3d_branch2c", 0, 0], ["activation_68", 0, 0]]], "name": "merge_23"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_71"}, "inbound_nodes": [[["merge_23", 0, 0]]], "name": "activation_71"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res4a_branch2a", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 1, "subsample": [2, 2], "init": "glorot_uniform", "bias": true, "nb_filter": 256, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 1}, "inbound_nodes": [[["activation_71", 0, 0]]], "name": "res4a_branch2a"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn4a_branch2a", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res4a_branch2a", 0, 0]]], "name": "bn4a_branch2a"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_72"}, "inbound_nodes": [[["bn4a_branch2a", 0, 0]]], "name": "activation_72"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res4a_branch2b", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 3, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 256, "border_mode": "same", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 3}, "inbound_nodes": [[["activation_72", 0, 0]]], "name": "res4a_branch2b"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn4a_branch2b", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res4a_branch2b", 0, 0]]], "name": "bn4a_branch2b"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_73"}, "inbound_nodes": [[["bn4a_branch2b", 0, 0]]], "name": "activation_73"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res4a_branch2c", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 1, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 1024, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 1}, "inbound_nodes": [[["activation_73", 0, 0]]], "name": "res4a_branch2c"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res4a_branch1", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 1, "subsample": [2, 2], "init": "glorot_uniform", "bias": true, "nb_filter": 1024, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 1}, "inbound_nodes": [[["activation_71", 0, 0]]], "name": "res4a_branch1"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn4a_branch2c", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res4a_branch2c", 0, 0]]], "name": "bn4a_branch2c"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn4a_branch1", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res4a_branch1", 0, 0]]], "name": "bn4a_branch1"}, {"class_name": "Merge", "config": {"name": "merge_24", "concat_axis": -1, "mode_type": "raw", "dot_axes": -1, "output_mask_type": "raw", "arguments": {}, "output_mask": null, "mode": "sum", "output_shape": null, "output_shape_type": "raw"}, "inbound_nodes": [[["bn4a_branch2c", 0, 0], ["bn4a_branch1", 0, 0]]], "name": "merge_24"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_74"}, "inbound_nodes": [[["merge_24", 0, 0]]], "name": "activation_74"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res4b_branch2a", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 1, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 256, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 1}, "inbound_nodes": [[["activation_74", 0, 0]]], "name": "res4b_branch2a"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn4b_branch2a", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res4b_branch2a", 0, 0]]], "name": "bn4b_branch2a"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_75"}, "inbound_nodes": [[["bn4b_branch2a", 0, 0]]], "name": "activation_75"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res4b_branch2b", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 3, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 256, "border_mode": "same", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 3}, "inbound_nodes": [[["activation_75", 0, 0]]], "name": "res4b_branch2b"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn4b_branch2b", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res4b_branch2b", 0, 0]]], "name": "bn4b_branch2b"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_76"}, "inbound_nodes": [[["bn4b_branch2b", 0, 0]]], "name": "activation_76"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res4b_branch2c", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 1, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 1024, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 1}, "inbound_nodes": [[["activation_76", 0, 0]]], "name": "res4b_branch2c"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn4b_branch2c", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res4b_branch2c", 0, 0]]], "name": "bn4b_branch2c"}, {"class_name": "Merge", "config": {"name": "merge_25", "concat_axis": -1, "mode_type": "raw", "dot_axes": -1, "output_mask_type": "raw", "arguments": {}, "output_mask": null, "mode": "sum", "output_shape": null, "output_shape_type": "raw"}, "inbound_nodes": [[["bn4b_branch2c", 0, 0], ["activation_74", 0, 0]]], "name": "merge_25"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_77"}, "inbound_nodes": [[["merge_25", 0, 0]]], "name": "activation_77"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res4c_branch2a", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 1, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 256, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 1}, "inbound_nodes": [[["activation_77", 0, 0]]], "name": "res4c_branch2a"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn4c_branch2a", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res4c_branch2a", 0, 0]]], "name": "bn4c_branch2a"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_78"}, "inbound_nodes": [[["bn4c_branch2a", 0, 0]]], "name": "activation_78"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res4c_branch2b", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 3, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 256, "border_mode": "same", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 3}, "inbound_nodes": [[["activation_78", 0, 0]]], "name": "res4c_branch2b"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn4c_branch2b", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res4c_branch2b", 0, 0]]], "name": "bn4c_branch2b"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_79"}, "inbound_nodes": [[["bn4c_branch2b", 0, 0]]], "name": "activation_79"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res4c_branch2c", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 1, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 1024, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 1}, "inbound_nodes": [[["activation_79", 0, 0]]], "name": "res4c_branch2c"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn4c_branch2c", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res4c_branch2c", 0, 0]]], "name": "bn4c_branch2c"}, {"class_name": "Merge", "config": {"name": "merge_26", "concat_axis": -1, "mode_type": "raw", "dot_axes": -1, "output_mask_type": "raw", "arguments": {}, "output_mask": null, "mode": "sum", "output_shape": null, "output_shape_type": "raw"}, "inbound_nodes": [[["bn4c_branch2c", 0, 0], ["activation_77", 0, 0]]], "name": "merge_26"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_80"}, "inbound_nodes": [[["merge_26", 0, 0]]], "name": "activation_80"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res4d_branch2a", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 1, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 256, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 1}, "inbound_nodes": [[["activation_80", 0, 0]]], "name": "res4d_branch2a"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn4d_branch2a", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res4d_branch2a", 0, 0]]], "name": "bn4d_branch2a"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_81"}, "inbound_nodes": [[["bn4d_branch2a", 0, 0]]], "name": "activation_81"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res4d_branch2b", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 3, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 256, "border_mode": "same", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 3}, "inbound_nodes": [[["activation_81", 0, 0]]], "name": "res4d_branch2b"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn4d_branch2b", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res4d_branch2b", 0, 0]]], "name": "bn4d_branch2b"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_82"}, "inbound_nodes": [[["bn4d_branch2b", 0, 0]]], "name": "activation_82"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res4d_branch2c", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 1, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 1024, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 1}, "inbound_nodes": [[["activation_82", 0, 0]]], "name": "res4d_branch2c"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn4d_branch2c", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res4d_branch2c", 0, 0]]], "name": "bn4d_branch2c"}, {"class_name": "Merge", "config": {"name": "merge_27", "concat_axis": -1, "mode_type": "raw", "dot_axes": -1, "output_mask_type": "raw", "arguments": {}, "output_mask": null, "mode": "sum", "output_shape": null, "output_shape_type": "raw"}, "inbound_nodes": [[["bn4d_branch2c", 0, 0], ["activation_80", 0, 0]]], "name": "merge_27"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_83"}, "inbound_nodes": [[["merge_27", 0, 0]]], "name": "activation_83"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res4e_branch2a", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 1, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 256, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 1}, "inbound_nodes": [[["activation_83", 0, 0]]], "name": "res4e_branch2a"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn4e_branch2a", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res4e_branch2a", 0, 0]]], "name": "bn4e_branch2a"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_84"}, "inbound_nodes": [[["bn4e_branch2a", 0, 0]]], "name": "activation_84"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res4e_branch2b", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 3, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 256, "border_mode": "same", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 3}, "inbound_nodes": [[["activation_84", 0, 0]]], "name": "res4e_branch2b"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn4e_branch2b", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res4e_branch2b", 0, 0]]], "name": "bn4e_branch2b"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_85"}, "inbound_nodes": [[["bn4e_branch2b", 0, 0]]], "name": "activation_85"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res4e_branch2c", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 1, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 1024, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 1}, "inbound_nodes": [[["activation_85", 0, 0]]], "name": "res4e_branch2c"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn4e_branch2c", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res4e_branch2c", 0, 0]]], "name": "bn4e_branch2c"}, {"class_name": "Merge", "config": {"name": "merge_28", "concat_axis": -1, "mode_type": "raw", "dot_axes": -1, "output_mask_type": "raw", "arguments": {}, "output_mask": null, "mode": "sum", "output_shape": null, "output_shape_type": "raw"}, "inbound_nodes": [[["bn4e_branch2c", 0, 0], ["activation_83", 0, 0]]], "name": "merge_28"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_86"}, "inbound_nodes": [[["merge_28", 0, 0]]], "name": "activation_86"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res4f_branch2a", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 1, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 256, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 1}, "inbound_nodes": [[["activation_86", 0, 0]]], "name": "res4f_branch2a"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn4f_branch2a", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res4f_branch2a", 0, 0]]], "name": "bn4f_branch2a"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_87"}, "inbound_nodes": [[["bn4f_branch2a", 0, 0]]], "name": "activation_87"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res4f_branch2b", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 3, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 256, "border_mode": "same", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 3}, "inbound_nodes": [[["activation_87", 0, 0]]], "name": "res4f_branch2b"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn4f_branch2b", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res4f_branch2b", 0, 0]]], "name": "bn4f_branch2b"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_88"}, "inbound_nodes": [[["bn4f_branch2b", 0, 0]]], "name": "activation_88"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res4f_branch2c", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 1, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 1024, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 1}, "inbound_nodes": [[["activation_88", 0, 0]]], "name": "res4f_branch2c"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn4f_branch2c", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res4f_branch2c", 0, 0]]], "name": "bn4f_branch2c"}, {"class_name": "Merge", "config": {"name": "merge_29", "concat_axis": -1, "mode_type": "raw", "dot_axes": -1, "output_mask_type": "raw", "arguments": {}, "output_mask": null, "mode": "sum", "output_shape": null, "output_shape_type": "raw"}, "inbound_nodes": [[["bn4f_branch2c", 0, 0], ["activation_86", 0, 0]]], "name": "merge_29"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_89"}, "inbound_nodes": [[["merge_29", 0, 0]]], "name": "activation_89"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res5a_branch2a", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 1, "subsample": [2, 2], "init": "glorot_uniform", "bias": true, "nb_filter": 512, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 1}, "inbound_nodes": [[["activation_89", 0, 0]]], "name": "res5a_branch2a"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn5a_branch2a", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res5a_branch2a", 0, 0]]], "name": "bn5a_branch2a"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_90"}, "inbound_nodes": [[["bn5a_branch2a", 0, 0]]], "name": "activation_90"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res5a_branch2b", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 3, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 512, "border_mode": "same", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 3}, "inbound_nodes": [[["activation_90", 0, 0]]], "name": "res5a_branch2b"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn5a_branch2b", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res5a_branch2b", 0, 0]]], "name": "bn5a_branch2b"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_91"}, "inbound_nodes": [[["bn5a_branch2b", 0, 0]]], "name": "activation_91"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res5a_branch2c", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 1, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 2048, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 1}, "inbound_nodes": [[["activation_91", 0, 0]]], "name": "res5a_branch2c"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res5a_branch1", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 1, "subsample": [2, 2], "init": "glorot_uniform", "bias": true, "nb_filter": 2048, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 1}, "inbound_nodes": [[["activation_89", 0, 0]]], "name": "res5a_branch1"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn5a_branch2c", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res5a_branch2c", 0, 0]]], "name": "bn5a_branch2c"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn5a_branch1", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res5a_branch1", 0, 0]]], "name": "bn5a_branch1"}, {"class_name": "Merge", "config": {"name": "merge_30", "concat_axis": -1, "mode_type": "raw", "dot_axes": -1, "output_mask_type": "raw", "arguments": {}, "output_mask": null, "mode": "sum", "output_shape": null, "output_shape_type": "raw"}, "inbound_nodes": [[["bn5a_branch2c", 0, 0], ["bn5a_branch1", 0, 0]]], "name": "merge_30"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_92"}, "inbound_nodes": [[["merge_30", 0, 0]]], "name": "activation_92"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res5b_branch2a", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 1, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 512, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 1}, "inbound_nodes": [[["activation_92", 0, 0]]], "name": "res5b_branch2a"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn5b_branch2a", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res5b_branch2a", 0, 0]]], "name": "bn5b_branch2a"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_93"}, "inbound_nodes": [[["bn5b_branch2a", 0, 0]]], "name": "activation_93"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res5b_branch2b", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 3, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 512, "border_mode": "same", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 3}, "inbound_nodes": [[["activation_93", 0, 0]]], "name": "res5b_branch2b"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn5b_branch2b", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res5b_branch2b", 0, 0]]], "name": "bn5b_branch2b"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_94"}, "inbound_nodes": [[["bn5b_branch2b", 0, 0]]], "name": "activation_94"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res5b_branch2c", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 1, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 2048, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 1}, "inbound_nodes": [[["activation_94", 0, 0]]], "name": "res5b_branch2c"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn5b_branch2c", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res5b_branch2c", 0, 0]]], "name": "bn5b_branch2c"}, {"class_name": "Merge", "config": {"name": "merge_31", "concat_axis": -1, "mode_type": "raw", "dot_axes": -1, "output_mask_type": "raw", "arguments": {}, "output_mask": null, "mode": "sum", "output_shape": null, "output_shape_type": "raw"}, "inbound_nodes": [[["bn5b_branch2c", 0, 0], ["activation_92", 0, 0]]], "name": "merge_31"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_95"}, "inbound_nodes": [[["merge_31", 0, 0]]], "name": "activation_95"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res5c_branch2a", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 1, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 512, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 1}, "inbound_nodes": [[["activation_95", 0, 0]]], "name": "res5c_branch2a"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn5c_branch2a", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res5c_branch2a", 0, 0]]], "name": "bn5c_branch2a"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_96"}, "inbound_nodes": [[["bn5c_branch2a", 0, 0]]], "name": "activation_96"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res5c_branch2b", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 3, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 512, "border_mode": "same", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 3}, "inbound_nodes": [[["activation_96", 0, 0]]], "name": "res5c_branch2b"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn5c_branch2b", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res5c_branch2b", 0, 0]]], "name": "bn5c_branch2b"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_97"}, "inbound_nodes": [[["bn5c_branch2b", 0, 0]]], "name": "activation_97"}, {"class_name": "Convolution2D", "config": {"W_constraint": null, "b_constraint": null, "name": "res5c_branch2c", "activity_regularizer": null, "trainable": true, "dim_ordering": "tf", "nb_col": 1, "subsample": [1, 1], "init": "glorot_uniform", "bias": true, "nb_filter": 2048, "border_mode": "valid", "b_regularizer": null, "W_regularizer": null, "activation": "linear", "nb_row": 1}, "inbound_nodes": [[["activation_97", 0, 0]]], "name": "res5c_branch2c"}, {"class_name": "BatchNormalization", "config": {"gamma_regularizer": null, "name": "bn5c_branch2c", "epsilon": 0.001, "trainable": true, "mode": 0, "beta_regularizer": null, "momentum": 0.99, "axis": 3}, "inbound_nodes": [[["res5c_branch2c", 0, 0]]], "name": "bn5c_branch2c"}, {"class_name": "Merge", "config": {"name": "merge_32", "concat_axis": -1, "mode_type": "raw", "dot_axes": -1, "output_mask_type": "raw", "arguments": {}, "output_mask": null, "mode": "sum", "output_shape": null, "output_shape_type": "raw"}, "inbound_nodes": [[["bn5c_branch2c", 0, 0], ["activation_95", 0, 0]]], "name": "merge_32"}, {"class_name": "Activation", "config": {"activation": "relu", "trainable": true, "name": "activation_98"}, "inbound_nodes": [[["merge_32", 0, 0]]], "name": "activation_98"}, {"class_name": "AveragePooling2D", "config": {"name": "avg_pool", "trainable": true, "dim_ordering": "tf", "pool_size": [7, 7], "strides": [7, 7], "border_mode": "valid"}, "inbound_nodes": [[["activation_98", 0, 0]]], "name": "avg_pool"}, {"class_name": "Flatten", "config": {"trainable": true, "name": "flatten_2"}, "inbound_nodes": [[["avg_pool", 0, 0]]], "name": "flatten_2"}, {"class_name": "Dense", "config": {"W_constraint": null, "b_constraint": null, "name": "fc1000", "activity_regularizer": null, "trainable": true, "init": "glorot_uniform", "bias": true, "input_dim": 2048, "b_regularizer": null, "W_regularizer": null, "activation": "softmax", "output_dim": 1000}, "inbound_nodes": [[["flatten_2", 0, 0]]], "name": "fc1000"}], "input_layers": [["input_4", 0, 0]], "output_layers": [["fc1000", 0, 0]], "name": "resnet50"}} -------------------------------------------------------------------------------- /model/load.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import keras.models 3 | from keras.models import model_from_json 4 | from scipy.misc import imread, imresize,imshow 5 | import tensorflow as tf 6 | 7 | 8 | def init(): 9 | json_file = open('model.json','r') 10 | loaded_model_json = json_file.read() 11 | json_file.close() 12 | loaded_model = model_from_json(loaded_model_json) 13 | #load woeights into new model 14 | loaded_model.load_weights("model.h5") 15 | print("Loaded Model from disk") 16 | 17 | #compile and evaluate loaded model 18 | loaded_model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy']) 19 | #loss,accuracy = model.evaluate(X_test,y_test) 20 | #print('loss:', loss) 21 | #print('accuracy:', accuracy) 22 | graph = tf.get_default_graph() 23 | 24 | return loaded_model,graph -------------------------------------------------------------------------------- /model/load.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anagar20/Resnet-Image-Classification-Flask-App/99d8bd5167db42ff618f143c943b0f35698b782c/model/load.pyc -------------------------------------------------------------------------------- /output.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anagar20/Resnet-Image-Classification-Flask-App/99d8bd5167db42ff618f143c943b0f35698b782c/output.png -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | gevent 2 | keras 3 | numpy 4 | h5py 5 | pillow 6 | flask_uploads 7 | Flask==0.12 8 | protobuf==3.2.0 9 | tensorflow==1.0.0 10 | Werkzeug==0.11.15 -------------------------------------------------------------------------------- /runtime.txt: -------------------------------------------------------------------------------- 1 | python-2.7.13 2 | -------------------------------------------------------------------------------- /static/img/output.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/anagar20/Resnet-Image-Classification-Flask-App/99d8bd5167db42ff618f143c943b0f35698b782c/static/img/output.png -------------------------------------------------------------------------------- /static/style.css: -------------------------------------------------------------------------------- 1 | @import url('http://fonts.googleapis.com/css?family=Open+Sans:400,300'); 2 | 3 | * { margin: 0; padding: 0; } 4 | 5 | body { 6 | background: #f2f2f2 !important; 7 | text-align: center; 8 | color: #ffffff; 9 | } 10 | 11 | h1 span { color: #000000; font-weight: 400; } 12 | 13 | h2 span { color: #ff5500; font-weight: 400; } 14 | 15 | #a input { 16 | background-color: #b3e6ff; 17 | border: none; 18 | color: #000000; 19 | padding: 13px 14px; 20 | text-align: center; 21 | text-decoration: none; 22 | display: inline-block; 23 | font-size: 16px; 24 | margin: 4px 2px; 25 | cursor: pointer; 26 | border-radius: 60px; 27 | } 28 | 29 | #b input { 30 | background-color: #84e184; 31 | border: none; 32 | color: #000000; 33 | padding: 13px 70px; 34 | text-align: center; 35 | text-decoration: none; 36 | display: inline-block; 37 | font-size: 16px; 38 | margin: 4px 2px; 39 | cursor: pointer; 40 | border-radius: 60px; 41 | } 42 | 43 | #output img.center { 44 | display: block; 45 | margin: 0 auto; 46 | position: relative; 47 | left: -50%; 48 | } 49 | 50 | p span { color: #4d4d4d; font-weight: 400; } 51 | -------------------------------------------------------------------------------- /templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 |