def predict_malignancy(self, weights_file, out_filename, data_subset_id, dataset_type='Clean', configuration=None): input_shape = (self.model_size, self.model_size, 1) # prepare model model = DirectArch(miniXception_loader, input_shape, objective="malignancy", pooling=self.pooling, output_size=self.out_size, normalize=True) if weights_file is not None: model.load_weights(weights_file) print('Load from: {}'.format(weights_file)) else: print('Model without weights') # prepare test data images_test, labels_test, classes_test, masks_test, meta_test = \ prepare_data_direct( load_nodule_dataset(size=self.data_size, res=self.res, sample=self.sample, dataset_type=dataset_type, configuration=configuration)[data_subset_id], size=self.model_size, return_meta=True, objective="malignancy", verbose=1, balanced=False) print("Data ready: images({}), labels({})".format( images_test[0].shape, labels_test.shape)) print("Range = [{:.2f},{:.2f}]".format(np.min(images_test[0]), np.max(images_test[0]))) images_test = np.array([ crop_center(im, msk, size=self.model_size)[0] for im, msk in zip(images_test, masks_test) ]) print("Image size changed to {}".format(images_test.shape)) print('Mask not updated') # eval print("Begin Predicting...") pred = model.predict(images_test, round=False) print("Predication Ready") print("\tshape = {}\n\trange [{}, {}]".format(pred.shape, np.min(pred), np.max(pred))) pickle.dump((images_test, pred, meta_test, labels_test, masks_test), open(out_filename, 'bw')) print("Saved to: {}".format(out_filename)) return (images_test, pred, meta_test, labels_test, masks_test), out_filename
images_test, labels_test = prepare_data(load_nodule_dataset()[0], classes=2, size=size) print("Data ready: images({}), labels({})".format(images_test.shape, labels_test.shape)) print("Range = [{},{}]".format(np.min(images_test), np.max(images_test))) assert len(dataset) == images_test.shape[0] #model = miniXception(None, (size, size,1),'avg', weights='w_002_37-0.95-0.82.h5') #compile(model, learning_rate=0.01) model = DirectArch(miniXception_loader, input_shape, 2) #model.summary() #model.compile() model.load_weights('w_007_36-0.91-0.86.h5') start = timer() try: if load: pred, Size = pickle.load(open('pred_test.p', 'br')) print("loaded saved dump of predications") else: Size = [ getAnnotation(entry['info']).estimate_diameter() for entry in dataset ] pred = model.predict(images_test, round=False) pickle.dump((pred, Size), open('pred_test.p', 'bw'))
class Rating: def __init__(self, pooling='max'): self.pred_file_format = '.\output\embed\predR_dirR{}_E{}_{}.p' self.pooling = pooling # Setup self.in_size = 128 self.out_size = 128 input_shape = (self.in_size, self.in_size, 1) # prepare model self.model = DirectArch(miniXception_loader, input_shape, objective="rating", pooling=self.pooling, output_size=self.out_size, normalize=True) def load_dataset(self, data_subset_id, size=160, sample='Normal', res=0.5, rating_scale='none', configuration=None, dataset_type='Clean'): # prepare test data self.images_test, self.labels_test, self.classes_test, self.masks_test, self.meta_test, _ = \ prepare_data_direct( load_nodule_dataset(size=size, res=res, sample=sample, dataset_type=dataset_type, configuration=configuration)[data_subset_id], size=size, return_meta=True, objective="rating", rating_scale=rating_scale, verbose=1, balanced=False) print("Data ready: images({}), labels({})".format( self.images_test[0].shape, self.labels_test.shape)) print("Range = [{:.2f},{:.2f}]".format(np.min(self.images_test[0]), np.max(self.images_test[0]))) self.images_test = np.array([ crop_center(im, msk, size=self.in_size)[0] for im, msk in zip(self.images_test, self.masks_test) ]) print("Image size changed to {}".format(self.images_test.shape)) print('Mask not updated') def pred_filename(self, run, epoch, post): return self.pred_file_format.format(run, epoch, post) def load(self, run, epoch, post): filename = self.pred_filename(run=run, epoch=epoch, post=post) predict, epochs, images, meta_data, labels, masks = pickle.load( open(filename, 'br')) return predict, epochs, images, meta_data, labels, masks def predict_rating(self, weights_file, out_filename): if weights_file is not None: self.model.load_weights(weights_file) print('Load from: {}'.format(weights_file)) else: print('Model without weights') # eval print("Begin Predicting...") pred = self.model.predict(self.images_test, round=False) print("Predication Ready") print("\tshape = {}\n\trange [{}, {}]".format(pred.shape, np.min(pred), np.max(pred))) #pickle.dump((images_test, pred, meta_test, labels_test, masks_test), open(out_filename, 'bw')) #print("Saved to: {}".format(out_filename)) return (self.images_test, pred, self.meta_test, self.classes_test, self.labels_test, self.masks_test), out_filename