Exemplo n.º 1
0
    def explain(self, model, image_path):
        image = prepare_for_prediction(model, image_path, expand_dims=False)

        label_onehot = model.predict(tf.expand_dims(image, 0))[0]
        label = tf.math.argmax(label_onehot)

        image = tf.cast(image, dtype=tf.float64)
        explainer = lime_image.LimeImageExplainer()
        explanation = explainer.explain_instance(image.numpy(),
                                                 model.predict,
                                                 top_labels=5,
                                                 hide_color=0,
                                                 num_samples=500)
        temp, mask = explanation.get_image_and_mask(label.numpy(),
                                                    positive_only=True,
                                                    num_features=5,
                                                    hide_rest=True)

        result_image = mark_boundaries(temp / 2 + 0.5, mask)
        result_image = tf.image.convert_image_dtype(result_image,
                                                    dtype=tf.uint8,
                                                    saturate=True)

        image_base46 = get_base64png(result_image)
        result = {"label_id": float(label), "image": image_base46}
        return result
Exemplo n.º 2
0
    def _explain(self, model, image_path, explain_class):
        image = prepare_for_prediction(model, image_path)

        label_onehot = model.predict(image)[0]
        label = tf.math.argmax(label_onehot)
        result_image = explain_class().explain((image.numpy(), None),
                                               model,
                                               class_index=label.numpy())

        image_base46 = get_base64png(result_image)

        result = {"label_id": int(label), "image": image_base46}

        return result
Exemplo n.º 3
0
    def explain(self,
                model: tf.keras.Model,
                image_path: str,
                general_settings: GeneralSettings,
                tool_settings: dict = None) -> list:
        image = prepare_for_prediction(model, image_path)
        onehot, labels = self._get_labels(model, image, general_settings)

        image = tf.cast(image, dtype=tf.float64)
        explainer = lime_image.LimeImageExplainer()
        explanation = explainer.explain_instance(
            image.numpy()[0],
            model.predict,
            labels=labels,
            batch_size=tool_settings["batch_size"],
            num_features=tool_settings["num_features"],
            num_samples=tool_settings["num_samples"],
        )

        results = []
        for label in labels:
            temp, mask = explanation.get_image_and_mask(
                label,
                positive_only=tool_settings["positive_only"],
                num_features=tool_settings["superpixels"],
                min_weight=tool_settings["min_weight"],
                hide_rest=tool_settings["hide_rest"],
            )

            result_image = mark_boundaries(temp / 2 + 0.5, mask)
            result_image = tf.image.convert_image_dtype(result_image,
                                                        dtype=tf.uint8,
                                                        saturate=True)

            image_base46 = get_base64png(result_image)
            results.append({
                "label_id": int(label),
                "probability": float(onehot[label]),
                "image": image_base46,
            })

        return results
Exemplo n.º 4
0
 def image_thumbnail_download():
     image_path = os.path.join(tmp_dir, session["image_id"] + "_thumbnail.png")
     return get_base64png(image_path)
    def explain_one(self, model, image_path, label, tool_settings):
        image = prepare_for_prediction(model, image_path)
        result_image = self.explain_class().explain((image.numpy(), None), model, class_index=label, **tool_settings)
        image_base46 = get_base64png(result_image)

        return image_base46