Closed alext234 closed 4 years ago
You can still query the model from TF2.0. Just use tf.compat.v1 to create a session and such.
I've also been able train an EfficientNetB0 using the efficientnet library with the dataset provided here.
This mod works for Google Colab which has TF2.0
for eval.py
from sklearn.metrics import confusion_matrix
import numpy as np
# import tensorflow as tf
import tensorflow.compat.v1 as tf
#To make tf 2.0 compatible with tf1.0 code, we disable the tf2.0 functionalities
tf.disable_eager_execution()
import os, argparse
import cv2
parser = argparse.ArgumentParser(description='COVID-Net Evaluation')
parser.add_argument('--weightspath', default='output', type=str, help='Path to output folder')
parser.add_argument('--metaname', default='model.meta', type=str, help='Name of ckpt meta file')
parser.add_argument('--ckptname', default='model', type=str, help='Name of model ckpts')
parser.add_argument('--testfile', default='test_COVIDx.txt', type=str, help='Name of testfile')
parser.add_argument('--testfolder', default='test', type=str, help='Folder where test data is located')
args = parser.parse_args()
mapping = {'normal': 0, 'pneumonia': 1, 'COVID-19': 2}
sess = tf.Session()
tf.get_default_graph()
saver = tf.train.import_meta_graph(os.path.join(args.weightspath, args.metaname))
saver.restore(sess, os.path.join(args.weightspath, args.ckptname))
graph = tf.get_default_graph()
image_tensor = graph.get_tensor_by_name("input_1:0")
pred_tensor = graph.get_tensor_by_name("dense_3/Softmax:0")
file = open(args.testfile, 'r')
testfile = file.readlines()
y_test = []
pred = []
for i in range(len(testfile)):
line = testfile[i].split()
x = cv2.imread(os.path.join('data', args.testfolder, line[1]))
x = cv2.resize(x, (224, 224))
x = x.astype('float32') / 255.0
y_test.append(mapping[line[2]])
pred.append(np.array(sess.run(pred_tensor, feed_dict={image_tensor: np.expand_dims(x, axis=0)})).argmax(axis=1))
y_test = np.array(y_test)
pred = np.array(pred)
matrix = confusion_matrix(y_test, pred)
matrix = matrix.astype('float')
#cm_norm = matrix / matrix.sum(axis=1)[:, np.newaxis]
print(matrix)
#class_acc = np.array(cm_norm.diagonal())
class_acc = [matrix[i,i]/np.sum(matrix[i,:]) if np.sum(matrix[i,:]) else 0 for i in range(len(matrix))]
print('Sens Normal: {0:.3f}, Pneumonia: {1:.3f}, COVID-19: {2:.3f}'.format(class_acc[0],
class_acc[1],
class_acc[2]))
ppvs = [matrix[i,i]/np.sum(matrix[:,i]) if np.sum(matrix[:,i]) else 0 for i in range(len(matrix))]
print('PPV Normal: {0:.3f}, Pneumonia {1:.3f}, COVID-19: {2:.3f}'.format(ppvs[0],
ppvs[1],
ppvs[2]))
Hi do you plan to upgrade to TF2.0?