{"id":349142,"name":"Open-Canopy","description":"Canopy Height Estimation at very High Resolution.","url":"https://github.com/fajwel/open-canopy","last_synced_at":"2026-05-16T17:01:00.496Z","repository":{"id":242920111,"uuid":"791402774","full_name":"fajwel/Open-Canopy","owner":"fajwel","description":"Canopy Height Estimation at very High Resolution","archived":false,"fork":false,"pushed_at":"2025-12-09T17:24:15.000Z","size":6269,"stargazers_count":50,"open_issues_count":1,"forks_count":2,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-05-08T13:02:56.301Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fajwel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-04-24T16:50:53.000Z","updated_at":"2026-04-30T19:31:59.000Z","dependencies_parsed_at":"2024-10-22T15:05:46.702Z","dependency_job_id":"545685a3-ee04-405e-9bb1-4ae0213edc8d","html_url":"https://github.com/fajwel/Open-Canopy","commit_stats":null,"previous_names":["fajwel/open-canopy"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/fajwel/Open-Canopy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fajwel%2FOpen-Canopy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fajwel%2FOpen-Canopy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fajwel%2FOpen-Canopy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fajwel%2FOpen-Canopy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fajwel","download_url":"https://codeload.github.com/fajwel/Open-Canopy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fajwel%2FOpen-Canopy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33111496,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-16T04:41:52.686Z","status":"ssl_error","status_checked_at":"2026-05-16T04:41:52.009Z","response_time":115,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"owner":{"login":"fajwel","name":null,"uuid":"18214074","kind":"user","description":null,"email":"","website":null,"location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/18214074?v=4","repositories_count":1,"last_synced_at":"2024-06-05T18:55:24.168Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/fajwel","funding_links":[],"total_stars":0,"followers":1,"following":0,"created_at":"2024-06-05T18:55:24.384Z","updated_at":"2024-06-05T18:55:24.384Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fajwel","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fajwel/repositories"},"packages":[],"commits":{"id":11690420,"full_name":"fajwel/Open-Canopy","default_branch":"master","total_commits":6,"total_committers":2,"total_bot_commits":0,"total_bot_committers":0,"mean_commits":3.0,"dds":0.16666666666666663,"past_year_total_commits":1,"past_year_total_committers":1,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":1.0,"past_year_dds":0.0,"last_synced_at":"2026-05-14T16:01:12.239Z","last_synced_commit":"c511ce99f775530961c19995ec613d9284f410f6","created_at":"2026-03-21T12:48:17.253Z","updated_at":"2026-05-14T16:01:12.145Z","committers":[{"name":"fajwel","email":"fajwel.fogel@gmail.com","login":"fajwel","count":5},{"name":"YohannPerron","email":"73244423+YohannPerron","login":"YohannPerron","count":1}],"past_year_committers":[{"name":"YohannPerron","email":"73244423+YohannPerron","login":"YohannPerron","count":1}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/fajwel%2FOpen-Canopy/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-05-16T00:00:17.015Z","repositories_count":6234918,"commits_count":894659374,"contributors_count":34909198,"owners_count":1153730,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"fajwel/Open-Canopy","html_url":"https://github.com/fajwel/Open-Canopy","last_synced_at":"2026-03-21T12:48:32.120Z","status":"active","issues_count":2,"pull_requests_count":0,"avg_time_to_close_issue":2147387.0,"avg_time_to_close_pull_request":null,"issues_closed_count":1,"pull_requests_closed_count":0,"pull_request_authors_count":0,"issue_authors_count":2,"avg_comments_per_issue":6.5,"avg_comments_per_pull_request":null,"merged_pull_requests_count":0,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":1,"past_year_pull_requests_count":0,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":null,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":0,"past_year_pull_request_authors_count":0,"past_year_issue_authors_count":1,"past_year_avg_comments_per_issue":10.0,"past_year_avg_comments_per_pull_request":null,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":0,"created_at":"2025-08-31T00:15:35.918Z","updated_at":"2026-03-21T12:48:32.120Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/fajwel%2FOpen-Canopy","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/fajwel%2FOpen-Canopy/issues","issue_labels_count":{},"pull_request_labels_count":{},"issue_author_associations_count":{"NONE":2},"pull_request_author_associations_count":{},"issue_authors":{"JohnMBrandt":1,"victoriapoghosyan":1},"pull_request_authors":{},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-05-02T00:00:10.923Z","repositories_count":14457999,"issues_count":34075996,"pull_requests_count":111823183,"authors_count":11251327,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{},"past_year_pull_request_labels_count":{},"past_year_issue_author_associations_count":{},"past_year_pull_request_author_associations_count":{},"past_year_issue_authors":{},"past_year_pull_request_authors":{},"maintainers":[],"active_maintainers":[]},"events":{"total":{"MemberEvent":1,"ForkEvent":3,"IssuesEvent":3,"WatchEvent":23,"IssueCommentEvent":5,"PushEvent":2},"last_year":{"ForkEvent":2,"WatchEvent":9,"IssueCommentEvent":1}},"keywords":[],"dependencies":[{"ecosystem":"actions","filepath":".github/workflows/code-quality-main.yaml","sha":null,"kind":"manifest","created_at":"2024-10-21T19:24:24.337Z","updated_at":"2024-10-21T19:24:24.337Z","repository_link":"https://github.com/fajwel/Open-Canopy/blob/main/.github/workflows/code-quality-main.yaml","dependencies":[{"id":20333799558,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":20333799559,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":20333799560,"package_name":"pre-commit/action","ecosystem":"actions","requirements":"v2.0.3","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/code-quality-pr.yaml","sha":null,"kind":"manifest","created_at":"2024-10-21T19:24:24.426Z","updated_at":"2024-10-21T19:24:24.426Z","repository_link":"https://github.com/fajwel/Open-Canopy/blob/main/.github/workflows/code-quality-pr.yaml","dependencies":[{"id":20333799561,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":20333799562,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":20333799563,"package_name":"trilom/file-changes-action","ecosystem":"actions","requirements":"v1.2.4","direct":true,"kind":"composite","optional":false},{"id":20333799564,"package_name":"pre-commit/action","ecosystem":"actions","requirements":"v2.0.3","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/release-drafter.yml","sha":null,"kind":"manifest","created_at":"2024-10-21T19:24:24.501Z","updated_at":"2024-10-21T19:24:24.501Z","repository_link":"https://github.com/fajwel/Open-Canopy/blob/main/.github/workflows/release-drafter.yml","dependencies":[{"id":20333799565,"package_name":"release-drafter/release-drafter","ecosystem":"actions","requirements":"v5","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/test.yml","sha":null,"kind":"manifest","created_at":"2024-10-21T19:24:24.938Z","updated_at":"2024-10-21T19:24:24.938Z","repository_link":"https://github.com/fajwel/Open-Canopy/blob/main/.github/workflows/test.yml","dependencies":[{"id":20333799573,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":20333799574,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":20333799575,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":20333799576,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":20333799577,"package_name":"codecov/codecov-action","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"pypi","filepath":"pyproject.toml","sha":null,"kind":"manifest","created_at":"2024-10-21T19:24:30.183Z","updated_at":"2024-10-21T19:24:30.183Z","repository_link":"https://github.com/fajwel/Open-Canopy/blob/main/pyproject.toml","dependencies":[]},{"ecosystem":"conda","filepath":"environment.yaml","sha":null,"kind":"manifest","created_at":"2024-10-22T15:05:41.876Z","updated_at":"2024-10-22T15:05:41.876Z","repository_link":"https://github.com/fajwel/Open-Canopy/blob/main/environment.yaml","dependencies":[{"id":20349064603,"package_name":"affine","ecosystem":"conda","requirements":"2.4.*","direct":true,"kind":"runtime","optional":false},{"id":20349064604,"package_name":"contextily","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":20349064605,"package_name":"crick","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":20349064646,"package_name":"dask","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":20349064647,"package_name":"docopt","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":20349064655,"package_name":"einops","ecosystem":"conda","requirements":"0.7.*","direct":true,"kind":"runtime","optional":false},{"id":20349064656,"package_name":"geopandas","ecosystem":"conda","requirements":"0.14.*","direct":true,"kind":"runtime","optional":false},{"id":20349064657,"package_name":"h5py","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":20349064658,"package_name":"hydra-core","ecosystem":"conda","requirements":"1.3.*","direct":true,"kind":"runtime","optional":false},{"id":20349064659,"package_name":"lightning","ecosystem":"conda","requirements":"2.1.*","direct":true,"kind":"runtime","optional":false},{"id":20349064660,"package_name":"numpy","ecosystem":"conda","requirements":"1.26.*","direct":true,"kind":"runtime","optional":false},{"id":20349064661,"package_name":"opencv","ecosystem":"conda","requirements":"4.7.*","direct":true,"kind":"runtime","optional":false},{"id":20349064662,"package_name":"openpyxl","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":20349064663,"package_name":"pandas","ecosystem":"conda","requirements":"2.1.*","direct":true,"kind":"runtime","optional":false},{"id":20349064664,"package_name":"pip","ecosystem":"conda","requirements":"\u003e=23","direct":true,"kind":"runtime","optional":false},{"id":20349064665,"package_name":"pre-commit","ecosystem":"conda","requirements":"3.*","direct":true,"kind":"runtime","optional":false},{"id":20349064666,"package_name":"pyarrow","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":20349064667,"package_name":"pytest","ecosystem":"conda","requirements":"7.*","direct":true,"kind":"runtime","optional":false},{"id":20349064668,"package_name":"python","ecosystem":"conda","requirements":"3.11.*","direct":true,"kind":"runtime","optional":false},{"id":20349064669,"package_name":"pytorch","ecosystem":"conda","requirements":"2.*","direct":true,"kind":"runtime","optional":false},{"id":20349064670,"package_name":"pytorch-cuda","ecosystem":"conda","requirements":"11.8.*","direct":true,"kind":"runtime","optional":false},{"id":20349064671,"package_name":"rasterio","ecosystem":"conda","requirements":"1.3.*","direct":true,"kind":"runtime","optional":false},{"id":20349064672,"package_name":"rich","ecosystem":"conda","requirements":"13.7.*","direct":true,"kind":"runtime","optional":false},{"id":20349064673,"package_name":"scikit-image","ecosystem":"conda","requirements":"0.22.*","direct":true,"kind":"runtime","optional":false},{"id":20349064674,"package_name":"scikit-learn","ecosystem":"conda","requirements":"1.3.*","direct":true,"kind":"runtime","optional":false},{"id":20349064675,"package_name":"shapely","ecosystem":"conda","requirements":"2.0.*","direct":true,"kind":"runtime","optional":false},{"id":20349064676,"package_name":"tabulate","ecosystem":"conda","requirements":"0.9.*","direct":true,"kind":"runtime","optional":false},{"id":20349064677,"package_name":"tensorboardx","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false},{"id":20349064678,"package_name":"timm","ecosystem":"conda","requirements":"0.9.*","direct":true,"kind":"runtime","optional":false},{"id":20349064679,"package_name":"torchmetrics","ecosystem":"conda","requirements":"1.2.*","direct":true,"kind":"runtime","optional":false},{"id":20349064680,"package_name":"torchvision","ecosystem":"conda","requirements":"0.16.*","direct":true,"kind":"runtime","optional":false},{"id":20349064681,"package_name":"wandb","ecosystem":"conda","requirements":"","direct":true,"kind":"runtime","optional":false}]}],"score":4.624972813284271,"created_at":"2026-03-21T12:48:37.448Z","updated_at":"2026-05-16T17:01:00.501Z","avatar_url":"https://github.com/fajwel.png","language":"Python","category":"Biosphere","sub_category":"Forest Remote Sensing","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"# Open-Canopy: Towards Very High Resolution Forest Monitoring\n\n![Static Badge](https://img.shields.io/badge/Code%3A-lightgrey?color=lightgrey) [![license](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://github.com/IGNF/FLAIR-1-AI-Challenge/blob/master/LICENSE) \u003ca href=\"https://pytorch.org/get-started/locally/\"\u003e\u003cimg alt=\"PyTorch\" src=\"https://img.shields.io/badge/PyTorch-ee4c2c?logo=pytorch\u0026logoColor=white\"\u003e\u003c/a\u003e\n\u003ca href=\"https://pytorchlightning.ai/\"\u003e\u003cimg alt=\"Lightning\" src=\"https://img.shields.io/badge/-Lightning-792ee5?logo=pytorchlightning\u0026logoColor=white\"\u003e\u003c/a\u003e   ![Static Badge](https://img.shields.io/badge/Dataset%3A-lightgrey?color=lightgrey) [![license](https://img.shields.io/badge/License-IO%202.0-green.svg)](https://github.com/etalab/licence-ouverte/blob/master/open-licence.md)\n\nThis is the official repository associated with the pre-print: \"Open-Canopy: Towards Very High Resolution Forest Monitoring\".\n\nThis repository includes the code needed to reproduce all experiments in the paper.\n\n- **Datapaper :** Pre-print on arXiv: https://arxiv.org/abs/2407.09392.\n\n- **Dataset link :** https://huggingface.co/datasets/AI4Forest/Open-Canopy.\n\n- **Size :** Approximately 360GB, including predictions on test set and pretrained models.\n\n\u003c!-- - **Github link :** https://github.com/fajwel/Open-Canopy.  --\u003e\n\n## Context \u0026 Data\n\nEstimating canopy height and canopy height change at meter resolution from satellite imagery has numerous applications, such as monitoring forest health, logging activities, wood resources, and carbon stocks. However, many existing forestry datasets rely on commercial or closed data sources, restricting the reproducibility and evaluation of new approaches. To address this gap, we introduce Open-Canopy, an open-access and country-scale benchmark for very high resolution (1.5 m) canopy height estimation.\nCovering more than 87,000 km2 across France, Open-Canopy combines [SPOT 6-7](https://openspot-dinamis.data-terra.org/) satellite imagery with high resolution aerial [LiDAR data](https://geoservices.ign.fr/lidarhd).\nAdditionally, we propose a benchmark for canopy height change detection between two images taken at different years, a particularly challenging task even for recent models.\nTo establish a robust foundation for these benchmarks, we evaluate a comprehensive list of state-of-the-art computer vision models for canopy height estimation.\n\n*Examples of canopy height estimation*\n\n\u003cp align=\"center\"\u003e\n  \u003cfigure style=\"display: inline-block; margin: 0 20px;\"\u003e\n    \u003cimg src=\"images/height_estimation.png\" alt=\"Height Estimation\" width=\"100%\" /\u003e\n  \u003c/figure\u003e\n\u003c/p\u003e\n\n*Example of canopy height change estimation*\n\n\u003cp align=\"center\"\u003e\n  \u003cfigure style=\"display: inline-block; margin: 0 20px;\"\u003e\n    \u003cimg src=\"images/height_change_estimation.png\" alt=\"Height Change Estimation\" width=\"100%\" /\u003e\n  \u003c/figure\u003e\n\u003c/p\u003e\n\n## Dataset Structure\n\nA full description of the dataset can be found in the supplementary material of the [Open-Canopy article](https://arxiv.org/abs/2407.09392).\n\nOur training, validation, and test sets cover most of the French territory. Test tiles are separated from train and validation tiles by a 1km buffer (a).\n\nFor each tile, we provide VHR images at a 1.5 m resolution (b) and associated LiDAR-derived canopy height maps (c).\n\n![Dataset overview](images/Open-Canopy_overview.png)\n\n## Installation\n\n### System requirements\n\n- Storage: 360GB of available storage to download the dataset.\n- Training: a recent GPU to train models with default configs (e.g., V100 32GB, A100, RTX8000...).\n\n### Python environment\n\nWe provide here instructions for installation with miniconda/mamba.\nInstallation was tested on Mac and Linux.\n\nIf you are installing on a computer without GPU, update the `environment.yaml`file (uncomment `cpu_only`and comment `pytorch-cuda=11.8`).\n\n```bash\n# Clone the project\ngit clone https://github.com/Open-Canopy\ncd Open-Canopy\n\n# create a conda environment for Open-Canopy and install dependencies\nconda env create -f environment.yaml -n canopy\n# If it doesn't work setting channel-priority to flexible can help\n# conda config set channel_priority flexible\n\n# activate conda environment\nconda activate canopy\n```\n\nNote: Open-Canopy makes use of [rootutils](https://github.com/ashleve/rootutils) so you do not have to install Open-Canopy with pip.\nOnce you have the environment ready, see the [Usage](#usage) section to run scripts.\n\n### Download models pretrained on ImageNet\n\nA [script](scripts/download_pretrained.sh) is provided to download all the models finetuned in the benchmark.\n\n```bash\n# Supposing you are at the root or Open-Canopy\n# make script executable\nchmod +x scripts/download_pretrained.sh\n\n# run script\nscripts/download_pretrained.sh\n```\n\nPlease refer to the official [github repository](https://github.com/facebookresearch/HighResCanopyHeight) to download *Tolan et al.*'s pretrained model, and copy it at the following location: `Open-Canopy/datasets/Models/tolan_SSLlarge.pth`.\n\nNote: Alternative size of models not used in the benchmark are commented out in the script. An associated config file is also given for all of them.\n\n### Download Open-Canopy dataset\n\nWe recommend using [Hugging Face python API](https://huggingface.co/docs/huggingface_hub/guides/download) to download the [Open-Canopy dataset](https://huggingface.co/datasets/AI4Forest/Open-Canopy).\n\nThe dataset must be located at the following location: `Open-Canopy/datasets` (unless you change paths in `configs`).\nA [script](scripts/download_dataset.py) is provided to do it seamlessly:\n\n```bash\n# Supposing you are at the root or Open-Canopy\npython scripts/download_dataset.py\n```\n\n## Usage\n\nThis repository is built upon [PyTorch](https://pytorch.org/). Its structure was bootstrapped from [this code template](https://github.com/ashleve/lightning-hydra-template),\nwhich heavily relies on [Hydra](https://hydra.cc/) and [Pytorch-Lightning](https://github.com/PyTorchLightning/pytorch-lightning). Parameters for training can be accessed and modified through the config files in the `configs` folder or overridden in the command line. Models and dataloaders models were implemented as in https://github.com/archaeoscape-ai/archaeoscape, thanks to [Yohann Perron](https://github.com/yohannperron) and [Vladyslav Sydorov](https://github.com/vsydorov).\n\n### Data preprocessing\n\nSee the [preprocessing README](src/preprocessing/README.md) for instructions on processing data from scratch, e.g., if you want to extend Open-Canopy to new areas.\n\nNote: in the first version of the dataset, non classified points were not taken into account in order to compute canopy height models (CHM) from LiDAR point clouds. The affected pixels can be masked using the provided lidar classification rasters (class 1). Starting January 2025, we also provide a second version of the CHMs where non classified points are included for computations (folder `lidar_v2`). This can lead to slighlty better metrics (gain about 0.05m on height MAE for the best model), although it affects less than 0.5% of pixels. However, use the first version of the CHMs to reproduce results of the paper. IGN is also starting to release pre-computed CHMs in some areas. When and where available, we recommend to use the CHMs released by IGN.\n\n### Retrieve data\n\nAs described in the supplementary material of the [paper](https://arxiv.org/abs/2407.09392), SPOT 6-7 imagery, LiDAR height maps and classification rasters can be accessed through virtual files (one per year).\n\nA grid of 1km x 1km tiles is provided in the file \"geometries.geojson\", with a column \"split\" indicating to which split each tile belongs (\"train\"/\"val\"/\"test\"/\"buffer\").\n\nSee `examples/visualize_data.py` for an example of how to plot data for a given geometry.\n\n### Train a model\n\nSupposing you are at the root of Open-Canopy.\n\nTrain a default model with the default configuration (ViT small):\n\n```bash\npython src/train.py\n```\n\nTrain a Unet with the default configuration:\n\n```bash\npython src/train.py model=smp_unet\n```\n\nAfter training, the model automatically proceeds to prediction and evaluation on the test tiles. The resulting metrics, along with other logs in the `logs` directory, are saved in an Excel file for easy reference and analysis.\n\nThe list of all commands used for the experiments in the paper can be found in `scripts/canopy.sh`. Some of them make use of the [hydra multirun functionality](https://hydra.cc/docs/tutorials/basic/running_your_app/multi-run/).\nConfigs for training are located in the `configs`folder at the root of the repository.\n\n### Compute metrics\n\nIf you already have height maps, e.g., those provided in the folder `canopy_height/predictions`and `canopy_height_change` of the dataset:\n\nTo evaluate height estimation, complete the `src/metrics/configs/compute_metrics.yaml`config and run:\n\n```bash\npython src/metrics/compute_metrics.py\n```\n\nTo evaluate height change estimation, complete the `src/metrics/configs/compute_change_detection_metrics.yaml`config and run:\n\n```bash\npython src/metrics/compute_change_detection_metrics.py\n```\n\nThese two scripts output excel files with computed metrics.\n\n## Pretrained models\n\nUnet and PVTv2 models trained on Open-Canopy are available in the `pretrained_models` folder of the [dataset](https://huggingface.co/datasets/AI4Forest/Open-Canopy/tree/main). Corresponding configs are located at `configs/model/PVTv2_B.yaml`and `configs/model/smp_unet.yaml`.\nAdditional documentation coming soon.\n\n## Reference\n\nPlease include a citation to the following article if you use the Open-Canopy dataset:\n\n```bibtex\n@article{fogel2024opencanopy,\n      title={Open-Canopy: A Country-Scale Benchmark for Canopy Height Estimation at Very High Resolution},\n      author={Fajwel Fogel and Yohann Perron and Nikola Besic and Laurent Saint-André and Agnès Pellissier-Tanon and Martin Schwartz and Thomas Boudras and Ibrahim Fayad and Alexandre d'Aspremont and Loic Landrieu and Philippe Ciais},\n      year={2024},\n      eprint={2407.09392},\n      publisher = {arXiv},\n      url={https://arxiv.org/abs/2407.09392},\n}\n```\n\n## Acknowledgements\n\nThis paper is part of the project *AI4Forest*, which is funded by the French National Research Agency ([ANR](https://anr.fr/Projet-ANR-22-FAI1-0002)), the German Aerospace Center ([DLR](https://www.dlr.de/en)) and the German federal ministry for education and research ([BMBF](https://www.bmbf.de/bmbf/en/home/home_node.html)).\n\nThe experiments conducted in this study were performed using HPC/AI resources provided by GENCI-IDRIS (Grant 2023-AD010114718 and 2023-AD011014781) and [Inria](https://inria.fr/fr).\n\nModels and dataloaders models were implemented as in https://github.com/archaeoscape-ai/archaeoscape, thanks to [Yohann Perron](https://github.com/yohannperron) and [Vladyslav Sydorov](https://github.com/vsydorov).\n\n## Dataset license\n\nThe \"OPEN LICENCE 2.0/LICENCE OUVERTE\" is a license created by the French government specifically for the purpose of facilitating the dissemination of open data by public administration.\nIf you are looking for an English version of this license, you can find it at the [official github page](https://github.com/etalab/licence-ouverte).\n\nAs stated by the license :\n\n- Applicable legislation: This licence is governed by French law.\n- Compatibility of this licence: This licence has been designed to be compatible with any free licence that at least requires an acknowledgement of authorship, and specifically with the previous version of this licence as well as with the following licences: United Kingdom’s “Open Government Licence” (OGL), Creative Commons’ “Creative Commons Attribution” (CC-BY) and Open Knowledge Foundation’s “Open Data Commons Attribution” (ODC-BY).\n\n## Authors\n\nFajwel Fogel (ENS), Yohann Perron (LIGM, ENPC, CNRS, UGE, EFEO), Nikola Besic (LIF, IGN, ENSG), Laurent Saint-André (INRAE, BEF), Agnès Pellissier-Tanon (LSCE/IPSL, CEA-CNRS-UVSQ), Martin Schwartz (LSCE/IPSL, CEA-CNRS-UVSQ), Thomas Boudras (LSCE/IPSL, CEA-CNRS-UVSQ), Ibrahim Fayad (LSCE/IPSL, CEA-CNRS-UVSQ, Kayrros), Alexandre d'Aspremont (CNRS, ENS, Kayrros), Loic Landrieu (LIGM, ENPC, CNRS, UGE), Philippe Ciais (LSCE/IPSL, CEA-CNRS-UVSQ).\n","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":[],"project_url":"https://ost.ecosyste.ms/api/v1/projects/349142","html_url":"https://ost.ecosyste.ms/projects/349142"}