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

Switch to unified view

a b/src/inference.py
1
import os
2
import sys
3
import argparse
4
import tensorflow as tf
5
from tensorflow import keras
6
import pandas as pd
7
from data_loader import read_trainset, DataGenerator
8
import parse_config
9
10
11
# comment out if using tensorflow 2.x
12
if parse_config.USING_RTX_20XX:
13
    config = tf.ConfigProto()
14
    config.gpu_options.allow_growth = True
15
    tf.keras.backend.set_session(tf.Session(config=config))
16
17
parser = argparse.ArgumentParser(description='Intracranial Hemorrhage Stage 2 Inference Script',
18
                                 formatter_class=argparse.ArgumentDefaultsHelpFormatter)
19
parser.add_argument('--model_filename', type=str)
20
args = parser.parse_args()
21
MODEL_NAME = '../models/' + args.model_filename
22
img_size = (256,256,3)
23
batch_size=16 #must be evenly divisiable by number of images in data gen.
24
25
# Define paths
26
test_images_dir = '../../data/stage_2_test_images/'
27
testset_filename = "../submissions/stage_2_sample_submission.csv"
28
29
def read_testset(filename):
30
    """ Read the submission sample csv
31
        Args:
32
            filename (str): Filename of the sample submission 
33
        Returns:
34
            df (panda dataframe):  Return a dataframe for inference.  
35
36
     """
37
    df = pd.read_csv(filename)
38
    df["Image"] = df["ID"].str.slice(stop=12)
39
    df["Diagnosis"] = df["ID"].str.slice(start=13)
40
41
    df = df.loc[:, ["Label", "Diagnosis", "Image"]]
42
    df = df.set_index(['Image', 'Diagnosis']).unstack(level=-1)
43
44
    return df
45
46
def create_submission(model, data, test_df):
47
48
    print('+'*50)
49
    print("Creating predictions on test dataset")
50
    pred = model.predict_generator(data, verbose=1)
51
    out_df = pd.DataFrame(pred, index=test_df.index, columns=test_df.columns)
52
    test_df = out_df.stack().reset_index()
53
    test_df.insert(loc=0, column='ID', value=test_df['Image'].astype(str) + "_" + test_df['Diagnosis'])
54
    test_df = test_df.drop(["Image", "Diagnosis"], axis=1)
55
    print("Saving submissions to submission.csv")
56
    test_df.to_csv('../submissions/stage2-final-submission-v2.csv', index=False)
57
58
    return test_df
59
60
def main():
61
    test_df = read_testset(testset_filename)
62
    test_generator = DataGenerator(list_IDs = test_df.index, 
63
                                    batch_size = batch_size,
64
                                    img_size = img_size,
65
                                    img_dir = test_images_dir)
66
    best_model = keras.models.load_model(MODEL_NAME, compile=False)
67
    create_submission(best_model, test_generator, test_df)
68
69
70
if __name__ == "__main__":
71
    main()