depth_chm / README.md
Boxiang's picture
Upload README.md with huggingface_hub
d6fe0ea verified
---
language: en
license: apache-2.0
tags:
- depth-estimation
- computer-vision
- pytorch
- absolute depth
pipeline_tag: depth-estimation
library_name: transformers
---
# Depth-CHM Model
A fine-tuned Depth Anything V2 model for depth estimation, trained on forest canopy height data.
## Model Description
This model is based on [Depth-Anything-V2-Metric-Indoor-Base](https://huggingface.co/depth-anything/Depth-Anything-V2-Metric-Indoor-Base-hf) and fine-tuned for estimating depth/canopy height from aerial imagery.
### Training Details
- **Base Model**: depth-anything/Depth-Anything-V2-Metric-Indoor-Base-hf
- **Max Depth**: 40.0 meters
- **Loss Function**: SiLog + 0.1 * L1 Loss
- **Hyperparameter Tuning**: Optuna (50 trials)
## Installation
```bash
pip install transformers torch pillow numpy
```
## Usage
### Method 1: Using Pipeline (Recommended)
The simplest way to use the model:
```python
from transformers import pipeline
from PIL import Image
import numpy as np
# Load pipeline
pipe = pipeline(task="depth-estimation", model="Boxiang/depth_chm")
# Load image
image = Image.open("your_image.png").convert("RGB")
# Run inference
result = pipe(image)
depth_image = result["depth"] # PIL Image (normalized 0-255)
# Convert to numpy array and scale to actual depth (0-40m)
max_depth = 40.0
depth = np.array(depth_image).astype(np.float32) / 255.0 * max_depth
print(f"Depth shape: {depth.shape}")
print(f"Depth range: [{depth.min():.2f}, {depth.max():.2f}] meters")
```
### Method 2: Using AutoImageProcessor + Model
For more control over the inference process:
```python
import torch
import torch.nn.functional as F
from transformers import AutoImageProcessor, DepthAnythingForDepthEstimation
from PIL import Image
import numpy as np
# Configuration
model_id = "Boxiang/depth_chm"
max_depth = 40.0
# Load model and processor
processor = AutoImageProcessor.from_pretrained(model_id)
model = DepthAnythingForDepthEstimation.from_pretrained(model_id)
# Use GPU if available
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = model.to(device)
model.eval()
# Load and process image
image = Image.open("your_image.png").convert("RGB")
original_size = image.size # (width, height)
# Prepare input
inputs = processor(images=image, return_tensors="pt")
pixel_values = inputs["pixel_values"].to(device)
# Run inference
with torch.no_grad():
outputs = model(pixel_values)
predicted_depth = outputs.predicted_depth
# Scale by max_depth
pred_scaled = predicted_depth * max_depth
# Resize to original image size
depth = F.interpolate(
pred_scaled.unsqueeze(0),
size=(original_size[1], original_size[0]), # (height, width)
mode="bilinear",
align_corners=True
).squeeze().cpu().numpy()
print(f"Depth shape: {depth.shape}")
print(f"Depth range: [{depth.min():.2f}, {depth.max():.2f}] meters")
```
### Method 3: Local Model Path
If you have the model saved locally:
```python
from transformers import AutoImageProcessor, DepthAnythingForDepthEstimation
# Load from local path
model_path = "./depth_chm_trained"
processor = AutoImageProcessor.from_pretrained(model_path, local_files_only=True)
model = DepthAnythingForDepthEstimation.from_pretrained(model_path, local_files_only=True)
```
## Output Format
- **Pipeline output**: Returns a PIL Image with normalized depth values (0-255). Multiply by `max_depth / 255.0` to get actual depth in meters.
- **Model output**: Returns `predicted_depth` tensor with values in range [0, 1]. Multiply by `max_depth` (40.0) to get actual depth in meters.
## Depth vs Height Conversion
The model outputs **depth** (distance from camera). To convert to **height** (like CHM - Canopy Height Model):
```python
height = max_depth - depth
```
## Model Files
- `model.safetensors` - Model weights
- `config.json` - Model configuration
- `preprocessor_config.json` - Image processor configuration
- `training_info.json` - Training hyperparameters
## Citation
If you use this model, please cite:
```bibtex
@misc{depth_chm_2024,
title={Depth-CHM: Fine-tuned Depth Anything V2 for Canopy Height Estimation},
author={Boxiang},
year={2024},
url={https://huggingface.co/Boxiang/depth_chm}
}
```
## License
This model inherits the license from the base Depth Anything V2 model.