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
Beispiel #2
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'))

    MalignancyConfusionMatrix(pred, labels_test[:])
    MalignancyBySize(pred, labels_test[:], Size[:])

    plt.show()

finally:
    total_time = (timer() - start) / 60 / 60
    print("Total runtime is {:.1f} hours".format(total_time))
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