-
Notifications
You must be signed in to change notification settings - Fork 50
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: Frederic Boisnard <[email protected]>
- Loading branch information
1 parent
3fb0299
commit 6512d24
Showing
6 changed files
with
69 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
# CRAFT | ||
|
||
CRAFT or Concept Recursive Activation FacTorization for Explainability is a method for automatically extracting human-interpretable concepts from deep networks. | ||
|
||
This concept activations factorization method aims to explain a pre-trained model's decisions both on a per-class and per-image basis by highlighting both "what" the model saw and “where” it saw it. | ||
|
||
It is made up from 3 ingredients: | ||
1. a method to recursively decompose concepts into sub-concepts | ||
2. a method to better estimate the importance of extracted concepts | ||
3. a method to use any attribution method to create concept attribution maps, using implicit differentiation | ||
|
||
CRAFT requires splitting the model in two parts: $(g, h)$ such that $f(x) = (g \cdot h)(x)$. To put it simply, $g$ is the function that maps our input to the latent space (the penultimate layer of our model), and $h$ is the function that maps this penultimate layer to the output. It is important to note that if the model contains a global average pooling layer, it is strongly recommended to provide CRAFT with the layer before the global average pooling. | ||
|
||
!!!warning | ||
Please keep in mind that the activations must be positives (after relu or any positive activation function) | ||
|
||
|
||
## Example | ||
|
||
```python | ||
from xplique.concepts import CraftTf as Craft | ||
from xplique.plots.craft_visualizations import CraftPlot | ||
|
||
# cut the model in two parts (as explained in the paper) | ||
# first part is g(.) our 'input_to_latent' model, second part is h(.) our 'latent_to_logit' model | ||
g = tf.keras.Model(model.input, model.layers[-3].output) | ||
h = tf.keras.Model(model.layers[-2].input, model.layers[-1].output) | ||
|
||
# Create a Craft concept extractor from these 2 models | ||
craft = Craft(input_to_latent = g, | ||
latent_to_logit = h, | ||
number_of_concepts = 10, | ||
patch_size = 80, | ||
batch_size = 64) | ||
|
||
# Use Craft to get the crops (crops), the embedding of the crops (crops_u), and the concept bank (w) | ||
# 330 is the rabbit class id in imagenet | ||
crops, crops_u, w = craft.fit(images_preprocessed, class_id=rabbit_class) | ||
|
||
# Compute Sobol indices to understand which concept matters | ||
importances = craft.estimate_importance(nb_most_important_concepts=5) | ||
|
||
# Display those concepts by showing the 10 best crops for each concept | ||
craft.plot_concepts_crops(nb_crops=10) | ||
|
||
``` | ||
|
||
{{xplique.concepts.craft.Craft}} | ||
|
||
[^1]: [CRAFT: Concept Recursive Activation FacTorization for Explainability (2023).](https://arxiv.org/pdf/2211.10154.pdf) |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters