-
Notifications
You must be signed in to change notification settings - Fork 0
Feature/ciao explainer pipeline #4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Closed
Closed
Changes from all commits
Commits
Show all changes
25 commits
Select commit
Hold shift + click to select a range
fd6f090
chore: add ciao algorithm dependencies
dhalmazna f0a0318
docs: update README
dhalmazna 9ac0438
refactor: apply agents' suggestions
dhalmazna 4bb11b6
refactor: update nitpicks in readme
dhalmazna 9d95da8
chore: add an author to pyproject.toml
dhalmazna 7a3c79d
feat: add core data structures and utilities
dhalmazna 9e3d00d
feat: implement CIAO search algorithms
dhalmazna 7b3a5cf
refactor: clean up imports and formatting across multiple files
dhalmazna 7dc9f78
refactor: improve docstrings and variable naming for clarity (ruff ch…
dhalmazna 0f88d45
refactor: address agents' comments
dhalmazna 96eb26c
refactor: mypy and ruff pain
dhalmazna 3bd5e6e
chore: remove the neighborhood parameter from the hexagonal grid crea…
dhalmazna 9ec2899
refactor: apply agents' suggestions
dhalmazna f7e6348
chore: run ruff and mypy checks
dhalmazna bab8596
chore: add .pre-commit-config file to .gitignore
dhalmazna 07877d2
refactor: replace print statements with logging
dhalmazna b4ef5f4
fix: add virtual loss to root in mcts / mcgs
dhalmazna 6a68c1c
fix: correct interlacing for non-square images
dhalmazna 0401fe8
feat: implement data loading and preprocessing
dhalmazna ecc8d3a
feat: implement the explainer
dhalmazna 72d4aaf
chore: uncomment CIAOExplainer from __init__
dhalmazna cb9eafe
chore: add safety checks for virtual loss
dhalmazna eb626bb
chore: add type annotation to replacement_image
dhalmazna 1ee139b
feat: enhance CIAO explainer with input validation and logging; add M…
dhalmazna f919ec9
feat: update CIAOExplainer to replace replacement_kwargs with color p…
dhalmazna File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or 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 hidden or 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 |
|---|---|---|
| @@ -1,29 +1,116 @@ | ||
| # Python Project Template | ||
| # CIAO: Contextual Importance Assessment via Obfuscation | ||
|
|
||
| This project template serves as a robust foundation for Python projects, promoting best practices and streamlining development workflows. It comes pre-configured with essential tools and features to enhance the development experience. | ||
| An implementation of explainable AI techniques for image classification. CIAO identifies influential image regions by systematically segmenting images, obfuscating segments, and using search algorithms to find important regions (hyperpixels). | ||
|
|
||
| ## Tools Included | ||
| ## Overview | ||
|
|
||
| - [uv](https://docs.astral.sh/uv/) for efficient dependency management. | ||
| - [Ruff](https://docs.astral.sh/ruff) for comprehensive linting and code formatting. | ||
| - [Pytest](https://docs.pytest.org) for running tests and ensuring code reliability. | ||
| - [GitLab CI/CD](https://docs.gitlab.com/ee/ci) for continuous integration. | ||
| - [Pydocstyle](https://www.pydocstyle.org) for validating docstring styles, also following the [Google style](https://google.github.io/styleguide/pyguide.html#s3.8-comments-and-docstrings). | ||
| - [Mypy](https://mypy-lang.org) for static type checking. | ||
| CIAO explains what regions of an image contribute to a neural network's classification decisions. The method: | ||
|
|
||
| 1. Segments the image into small regions | ||
| 2. Obfuscates each segment and measures impact on model predictions | ||
| 3. Uses search algorithms to group adjacent important segments into hyperpixels | ||
| 4. Generates explanations showing which regions influenced the prediction | ||
|
|
||
| ## Usage | ||
| ## Quick Start | ||
|
|
||
| Key commands for effective project management: | ||
| ### Installation | ||
|
|
||
| - `uv sync` - Installs all project dependencies. | ||
| - `uv add <package>` - Adds a new dependency to the project. | ||
| - `uv run ruff check` - Runs linting. | ||
| - `uv run ruff format` - Runs formatting | ||
| - `uv run mypy .` - Runs mypy. | ||
| - `uv run pytest tests` - Executes tests located in the tests directory. | ||
| - `uv run <command>` - Runs the specified command within the virtual environment. | ||
| ```bash | ||
| # Clone the repository | ||
| git clone https://github.com/RationAI/ciao.git | ||
| cd ciao | ||
|
|
||
| ## CI/CD | ||
| # Install dependencies using uv | ||
| uv sync | ||
| ``` | ||
|
|
||
| The project uses our [GitLab CI/CD templates](https://gitlab.ics.muni.cz/rationai/digital-pathology/templates/ci-templates) to automate the linting and testing processes. The pipeline is triggered on every merge request and push to the default branch. | ||
| ### Basic Usage | ||
|
|
||
| Explain a single image with default settings: | ||
|
|
||
| ```bash | ||
| uv run python ciao | ||
| ``` | ||
|
|
||
| Customize the explanation using Hydra configuration overrides: | ||
|
|
||
| ```bash | ||
| uv run python ciao data.image_path=./my_image.jpg explanation.method=mcts explanation.segment_size=8 | ||
| ``` | ||
|
|
||
| ### Development Commands | ||
|
|
||
| - `uv sync` - Install all dependencies | ||
| - `uv add <package>` - Add a new dependency | ||
| - `uv run ruff check` - Run linting | ||
| - `uv run ruff format` - Format code | ||
| - `uv run mypy .` - Run type checking | ||
| - `uv run python ciao` - Run CIAO with default configuration | ||
| - `uv run pytest tests` - Execute tests | ||
|
|
||
| ## Method Details | ||
|
|
||
| ### How CIAO Works | ||
|
|
||
| 1. **Segmentation**: The input image is divided into small regions (segments) using hexagonal or square grids | ||
| 2. **Score Calculation**: Each segment is obfuscated (replaced) and the model is queried to measure how much that segment affects the prediction. This gives an importance score to each segment | ||
| 3. **Hyperpixel Search**: A search algorithm finds groups of adjacent segments with high importance scores, creating "hyperpixels" that represent influential image regions | ||
| 4. **Explanation**: The top hyperpixels are visualized to show which regions most influenced the model's prediction | ||
|
|
||
| ### Search Algorithms | ||
|
|
||
| - **MCTS (Monte Carlo Tree Search)**: Tree-based search with UCB exploration | ||
| - **MC-RAVE**: MCTS with Rapid Action Value Estimation | ||
| - **MCGS (Monte Carlo Graph Search)**: Graph-based variant allowing revisiting of states | ||
| - **MCGS-RAVE**: MCGS with RAVE enhancements | ||
| - **Lookahead**: Greedy search with lookahead using efficient bitset operations | ||
| - **Potential**: Potential field-guided sequential search | ||
|
|
||
| ### Segmentation Methods | ||
|
|
||
| - **Hexagonal Grid**: Divides image into hexagonal cells for better spatial coverage | ||
| - **Square Grid**: Simple square grid segmentation | ||
|
|
||
| ### Replacement Methods | ||
|
|
||
| - **Mean Color**: Replace masked regions with the image's mean color (normalized) | ||
| - **Blur**: Gaussian blur applied to masked regions | ||
| - **Interlacing**: Interlaced pattern replacement | ||
| - **Solid Color**: Replace with a specified solid color (RGB) | ||
|
|
||
| ## Project Structure | ||
|
|
||
| ``` | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Add a language to the fenced code block. Line 83 opens a fenced block without a language, which triggers markdownlint Proposed fix-```
+```text
ciao/
├── ciao/ # Main package
...
└── pyproject.toml # Project metadata and dependencies🧰 Tools🪛 markdownlint-cli2 (0.21.0)[warning] 83-83: Fenced code blocks should have a language specified (MD040, fenced-code-language) 🤖 Prompt for AI Agents |
||
| ciao/ | ||
| ├── ciao/ # Main package | ||
| │ ├── algorithm/ # Search algorithms | ||
| │ │ ├── mcts.py # Monte Carlo Tree Search | ||
| │ │ ├── mcgs.py # Monte Carlo Graph Search | ||
| │ │ ├── lookahead_bitset.py # Greedy lookahead with bitsets | ||
| │ │ └── potential.py # Potential-based search | ||
| │ ├── data/ # Data loading and preprocessing | ||
| │ │ ├── loader.py # Image loaders | ||
| │ │ └── preprocessing.py # Image preprocessing utilities | ||
| │ ├── explainer/ # Core explainer implementation | ||
| │ │ └── ciao_explainer.py # Main CIAO explainer class | ||
| │ ├── structures/ # Data structures | ||
| │ │ ├── bitmask_graph.py # Bitset operations for hyperpixels | ||
| │ │ └── nodes.py # Node classes for tree/graph search | ||
| │ ├── utils/ # Utility functions | ||
| │ │ ├── calculations.py # Score calculations and predictions | ||
| │ │ ├── segmentation.py # Segmentation utilities | ||
| │ │ └── search_utils.py # Search algorithm utilities | ||
| │ ├── visualization/ # Visualization tools | ||
| │ │ └── visualization.py # Interactive visualizations | ||
| │ └── __main__.py # CLI entry point | ||
| ├── configs/ # Hydra configuration files | ||
| │ ├── ciao.yaml # Main entry point | ||
| │ ├── base.yaml # Base configuration | ||
| │ ├── data/ # Data configurations | ||
| │ │ └── default.yaml | ||
| │ ├── explanation/ # Explanation method configs | ||
| │ │ └── ciao_default.yaml # Default CIAO parameters | ||
| │ ├── hydra/ # Hydra settings | ||
| │ └── logger/ # Logger configurations | ||
| └── pyproject.toml # Project metadata and dependencies | ||
| ``` | ||
This file contains hidden or 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,11 @@ | ||
| """CIAO: Contextual Importance Assessment via Obfuscation. | ||
|
|
||
| An explainable AI (XAI) method for identifying influential image regions using | ||
| Mutual Information and greedy feature selection. | ||
| """ | ||
|
|
||
| from ciao.explainer.ciao_explainer import CIAOExplainer | ||
| from ciao.utils.calculations import ModelPredictor | ||
|
|
||
|
|
||
| __all__ = ["CIAOExplainer", "ModelPredictor"] |
This file contains hidden or 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,3 @@ | ||
| """CIAO algorithm implementations.""" | ||
|
|
||
| __all__: list[str] = [] |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The README mentions running
uv run python ciaoas the command to run CIAO, but there's no__main__.pyfile visible in the diff to make the package executable as a module. Either add the__main__.pyfile in this PR or update the README to reflect the actual usage pattern.