--- license: mit tags: - forestry - object-detection - aerial-imagery - detectron2 - sahi - treelens - tree-crown-detection --- # TreeLens Detectron2 Tree Detection Model This repository hosts the **TreeLens** tree detection model, built on **Detectron2** and integrated with the **SAHI (Slicing Aided Hyper Inference)** library. It is designed to detect and map tree crowns in high-resolution aerial orthomosaics and estimate tree biophysical parameters like crown width, height, and biomass (using digital elevation models). Developed by **Farmers for Forests**, this model is optimized to work with SAHI sliced inference. --- ## How to Run the Inference Script This guide explains how to run the `treelens_ortho_inference.py` script step-by-step. The script is structured with `# %%` cell markers, meaning you can easily open it in Google Colab (by renaming it to `.ipynb` or uploading it directly) or run it in VS Code as interactive cells. ### Step 1: Upload and Organize Your Files 1. Place your orthomosaic (`.tif` format) and digital elevation model (`.tif` format) in your Google Drive. 2. By default, the script looks for your files at: - **Orthomosaic:** `/content/drive/MyDrive/test.tif` - **DEM (Elevation):** `/content/drive/MyDrive/test.tif` - **Output Directory:** `/content/drive/MyDrive` *(If you want to use different paths, edit lines 6 to 11 in **Cell 2** of the script).* --- ### Step 2: Open and Run the Script in Google Colab You can run this code by uploading the script to a Google Colab notebook: #### **Cell 1: Mount Google Drive** This cell links your Google Drive to the runtime environment to access your orthomosaic and DEM images. ```python from google.colab import drive drive.mount('/content/drive') ``` #### **Cell 2: Setup Paths and Parameters** Define your file inputs, output folder, confidence threshold, and average tree crown width. * `aveg_width = 13` The script will automatically calculate the best slicing patch size based on this width and the ground resolution (GSD) of your `.tif` file. `aveg_width/GSD = sahi slice size (pixel)` #### **Cell 3: Download Model Files from Hugging Face** Downloads the Detectron2 weights (`Treelens_model.pth`) and the training configuration (`config.yaml`) from the Hugging Face hub automatically. ```python repo_id = "farmersforforests/TreeLens-detectron2" ``` #### **Cell 4 & 5: Install Dependencies & Import Libraries** Installs and imports the core packages: * `sahi` (Sliced Inference framework) * `detectron2` (Object Detection engine) * `rasterio` (Geospatial metadata & projection parser) * `scipy` & `pycocotools` #### **Cell 6: Load Helper Functions** Executes function definitions for: * Geocoding coordinates (pixels to Latitude & Longitude) * Outputting Pascal VOC XML and COCO JSON formats * Extracting GSD resolution and calculating tree heights from the DEM #### **Cell 7: Initialize Model** Loads the Detectron2 model onto your GPU (`cuda:0`). * *Note: Make sure your Colab notebook is set to a GPU hardware accelerator (Runtime > Change runtime type > GPU).* #### **Cell 8 & 9: Run Inference & Save Results** Processes the orthomosaics, runs sliced inference, plots predictions, and saves the output logs. --- ## Outputs Generated Once the script runs successfully, the following files will be saved in your `save_dir` (Google Drive root by default): 1. **`{basename}_pred.png`**: The orthomosaic image with visual bounding boxes drawn around all detected trees. 2. **`{basename}.xml`**: Standard Pascal VOC XML annotation file. 3. **`{basename}.json`**: Standard COCO JSON annotation file. 4. **`{basename}_pred.csv`**: A spreadsheet with: - Target bounding box pixel coordinates (`xmin`, `ymin`, `xmax`, `ymax`). - Spatial coordinates of each tree center (`lon`, `lat`). - Calculated `Crown (m)` width of each tree. 5. **`{basename}_pred_with_heights.csv`**: Same as above, updated with `Height (m)` for each tree derived from the DEM file. 6. **`{basename}_pred_with_biomass.csv`**: (Optional) Estimates DBH (cm) and AGB (Above Ground Biomass in kg) for each tree. To enable this, set `calculate_biomass = True` in Cell 9. --- ## Local Terminal/CLI Execution (Optional) If you wish to run this script outside of Colab (e.g. locally in a terminal): 1. Install Python 3.8+ and install all dependencies: ```bash pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118 python -m pip install 'git+https://github.com/facebookresearch/detectron2.git' pip install -U sahi huggingface_hub rasterio scipy pycocotools pandas matplotlib pillow ``` 2. Comment out Cell 1 (`drive.mount`) in the script. 3. Update the paths in Cell 2 to point to your local directories. 4. Execute: ```bash python treelens_ortho_inference.py ```