Diff of /src/inference.py [000000] .. [fb2ce2]

Switch to side-by-side view

--- a
+++ b/src/inference.py
@@ -0,0 +1,71 @@
+import os
+import sys
+import argparse
+import tensorflow as tf
+from tensorflow import keras
+import pandas as pd
+from data_loader import read_trainset, DataGenerator
+import parse_config
+
+
+# comment out if using tensorflow 2.x
+if parse_config.USING_RTX_20XX:
+    config = tf.ConfigProto()
+    config.gpu_options.allow_growth = True
+    tf.keras.backend.set_session(tf.Session(config=config))
+
+parser = argparse.ArgumentParser(description='Intracranial Hemorrhage Stage 2 Inference Script',
+                                 formatter_class=argparse.ArgumentDefaultsHelpFormatter)
+parser.add_argument('--model_filename', type=str)
+args = parser.parse_args()
+MODEL_NAME = '../models/' + args.model_filename
+img_size = (256,256,3)
+batch_size=16 #must be evenly divisiable by number of images in data gen.
+
+# Define paths
+test_images_dir = '../../data/stage_2_test_images/'
+testset_filename = "../submissions/stage_2_sample_submission.csv"
+
+def read_testset(filename):
+    """ Read the submission sample csv
+        Args:
+            filename (str): Filename of the sample submission 
+        Returns:
+            df (panda dataframe):  Return a dataframe for inference.  
+
+     """
+    df = pd.read_csv(filename)
+    df["Image"] = df["ID"].str.slice(stop=12)
+    df["Diagnosis"] = df["ID"].str.slice(start=13)
+
+    df = df.loc[:, ["Label", "Diagnosis", "Image"]]
+    df = df.set_index(['Image', 'Diagnosis']).unstack(level=-1)
+
+    return df
+
+def create_submission(model, data, test_df):
+
+    print('+'*50)
+    print("Creating predictions on test dataset")
+    pred = model.predict_generator(data, verbose=1)
+    out_df = pd.DataFrame(pred, index=test_df.index, columns=test_df.columns)
+    test_df = out_df.stack().reset_index()
+    test_df.insert(loc=0, column='ID', value=test_df['Image'].astype(str) + "_" + test_df['Diagnosis'])
+    test_df = test_df.drop(["Image", "Diagnosis"], axis=1)
+    print("Saving submissions to submission.csv")
+    test_df.to_csv('../submissions/stage2-final-submission-v2.csv', index=False)
+
+    return test_df
+
+def main():
+    test_df = read_testset(testset_filename)
+    test_generator = DataGenerator(list_IDs = test_df.index, 
+                                    batch_size = batch_size,
+                                    img_size = img_size,
+                                    img_dir = test_images_dir)
+    best_model = keras.models.load_model(MODEL_NAME, compile=False)
+    create_submission(best_model, test_generator, test_df)
+
+
+if __name__ == "__main__":
+    main()
\ No newline at end of file