File size: 8,469 Bytes
28a41a4 3707c88 28a41a4 89b7719 28a41a4 89b7719 28a41a4 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 |
---
license: mit
language:
- en
pipeline_tag: image-segmentation
tags:
- biology
datasets:
- HakaiInstitute/mussel-gooseneck-seg-rgb-1024-1024
---
# Mussel-Gooseneck-RGB: Multi-Species Segmentation Model for RGB Drone Imagery
**Model Type:** ONNX Semantic Segmentation
**Application:** Mussel and gooseneck barnacle detection in high-resolution RGB aerial imagery
**Input:** 3-band RGB imagery (Red, Green, Blue)
**Output:** Multi-class segmentation mask (background, mussels, gooseneck barnacles)
## Model Description
The Mussel-Gooseneck-RGB model is a deep learning semantic segmentation model specifically trained for detecting and differentiating between mussels and gooseneck barnacles in RGB drone imagery. This model enables detailed intertidal monitoring and research by providing species-specific segmentation maps for marine habitat assessment.
**Key Features:**
- Multi-species classification (mussels vs. gooseneck barnacles)
- Optimized for standard RGB imagery from drones
- ImageNet-pretrained normalization statistics
- Efficient ONNX format for cross-platform deployment
- Designed for intertidal zone monitoring
## Model Details
- **Version:** 20250725
- **Input Channels:** 3 (RGB)
- **Input Size:** Dynamic tiling (recommended: 2048x2048 tiles)
- **Normalization:** Standard (ImageNet statistics)
- **Output:** Multi-class segmentation (0: background, 1: mussels, 2: gooseneck barnacles)
- **Format:** ONNX
### Normalization Parameters
The model expects input images to be normalized using ImageNet statistics:
```json
{
"mean": [0.485, 0.456, 0.406],
"std": [0.229, 0.224, 0.225],
"max_pixel_value": 255.0
}
```
## Usage
### 1. Using kelp-o-matic CLI (recommended)
For command-line usage:
```bash
# Install kelp-o-matic
pip install git+https://github.com/HakaiInstitute/kelp-o-matic@dev
# List available models
kom list-models
# Run segmentation on intertidal RGB drone imagery
kom segment \
--model mussel-gooseneck-rgb \
--input /path/to/intertidal_rgb_image.tif \
--output /path/to/species_segmentation.tif \
--batch-size 8 \
--crop-size 2048 \
--blur-kernel 3 \
--morph-kernel 3
# Use specific model version
kom segment \
--model mussel-gooseneck-rgb \
--version 20250725 \
--input image.tif \
--output result.tif
# For high-resolution intertidal surveys
kom segment \
--model mussel-gooseneck-rgb \
--input high_res_intertidal_survey.tif \
--output result.tif \
--batch-size 4 \
--crop-size 1024
```
### 2. Using kelp-o-matic Python API
The easiest way to use this model is through the kelp-o-matic package:
```python
from kelp_o_matic import model_registry
# Load the model (automatically downloads if needed)
model = model_registry["mussel-gooseneck-rgb"]
# Process a large intertidal survey image with automatic tiling
model.process(
input_path="path/to/your/intertidal_rgb_image.tif",
output_path="path/to/output/species_segmentation.tif",
batch_size=8, # Higher batch size for RGB
crop_size=2048,
blur_kernel_size=3, # Gentle post-processing
morph_kernel_size=3, # Morphological operations
)
# For more control, use the predict method directly
import rasterio
import numpy as np
with rasterio.open("intertidal_image.tif") as src:
# Read a 2048x2048 tile (3 bands: RGB)
tile = src.read(window=((0, 2048), (0, 2048))) # Shape: (3, 2048, 2048)
tile = np.transpose(tile, (1, 2, 0)) # Convert to HWC
# Add batch dimension and predict
batch = np.expand_dims(tile, axis=0) # Shape: (1, 2048, 2048, 3)
batch = np.transpose(batch, (0, 3, 1, 2)) # Convert to BCHW
# Run inference (preprocessing handled automatically)
predictions = model.predict(batch)
# Post-process to get final segmentation
segmentation = model.postprocess(predictions)
# Result contains class labels: 0=background, 1=mussels, 2=gooseneck barnacles
```
### 3. Direct ONNX Runtime Usage
```python
import numpy as np
import onnxruntime as ort
from huggingface_hub import hf_hub_download
from PIL import Image
# Download the model
model_path = hf_hub_download(repo_id="HakaiInstitute/mussel-gooseneck-rgb", filename="model.onnx")
# Load the model
session = ort.InferenceSession(model_path)
# ImageNet normalization parameters
mean = np.array([0.485, 0.456, 0.406])
std = np.array([0.229, 0.224, 0.225])
# Preprocess your RGB image
def preprocess(image):
"""
Preprocess RGB image for model input
image: numpy array of shape [height, width, 3] with pixel values 0-255
"""
# Normalize to 0-1
image = image.astype(np.float32) / 255.0
# Apply ImageNet normalization
image = (image - mean) / std
# Reshape to model input format [batch, channels, height, width]
image = np.transpose(image, (2, 0, 1)) # HWC to CHW
image = np.expand_dims(image, axis=0) # Add batch dimension
return image
# Load and preprocess image
image = np.array(Image.open("intertidal_drone_image.jpg"))
preprocessed = preprocess(image)
# Run inference
input_name = session.get_inputs()[0].name
output = session.run(None, {input_name: preprocessed})
# Postprocess to get multi-class mask
logits = output[0]
prediction = np.argmax(logits, axis=1).squeeze(0).astype(np.uint8)
# Result: 0=background, 1=mussels, 2=gooseneck barnacles
```
### 4. Using HuggingFace Hub Integration
```python
from huggingface_hub import hf_hub_download
import onnxruntime as ort
# Download and load model
model_path = hf_hub_download(
repo_id="HakaiInstitute/mussel-gooseneck-rgb",
filename="model.onnx",
cache_dir="./models"
)
session = ort.InferenceSession(model_path)
# ... continue with preprocessing and inference as above
```
## Installation
### For kelp-o-matic usage:
```bash
# Via pip
pip install git+https://github.com/HakaiInstitute/kelp-o-matic@dev
```
### For direct ONNX usage:
```bash
pip install onnxruntime huggingface-hub numpy pillow
# For GPU support:
pip install onnxruntime-gpu
```
## Input Requirements
- **Image Format:** 3-band RGB raster (JPEG, PNG, GeoTIFF)
- **Band Order:** Red, Green, Blue
- **Pixel Values:** Standard 8-bit (0-255 range)
- **Spatial Resolution:** Optimized for high-resolution drone imagery (cm-level)
- **Scene Type:** Intertidal zones with exposed mussel beds and barnacle colonies
## Output Format
- **Type:** Single-band raster with class labels
- **Values:**
- 0: Background (water, rocks, other substrates)
- 1: Mussels (typically blue mussels, *Mytilus* spp.)
- 2: Gooseneck barnacles (*Pollicipes* spp.)
- **Format:** Matches input raster format and projection
- **Spatial Resolution:** Same as input
**Note:** The model outputs class probabilities, but kelp-o-matic automatically applies argmax to convert these to discrete class labels.
## Performance Notes
- **Dynamic Tile Size:** Supports flexible tile sizes (recommended: 2048x2048 or 1024x1024)
- **Batch Size:** Start with 4, adjust based on available GPU memory
## Large Image Processing
For processing large geospatial images, the kelp-o-matic package handles:
- **Automatic Tiling:** Splits large images into manageable tiles
- **Overlap Handling:** Uses overlapping tiles to avoid edge artifacts
- **Memory Management:** Processes tiles in batches to manage memory usage
- **Geospatial Metadata:** Preserves coordinate reference system and geotransforms
- **Post-processing:** Optional median filtering and morphological operations
## Citation
If you use this model in your research, please cite:
```bibtex
@software{Denouden_Kelp-O-Matic,
author = {Denouden, Taylor and Reshitnyk, Luba},
doi = {10.5281/zenodo.7672166},
title = {{Kelp-O-Matic}},
url = {https://github.com/HakaiInstitute/kelp-o-matic}
}
```
## License
MIT License - see the [kelp-o-matic repository](https://github.com/HakaiInstitute/kelp-o-matic/blob/main/LICENSE) for details.
## Related Resources
- **Documentation:** [kelp-o-matic.readthedocs.io](https://kelp-o-matic.readthedocs.io)
- **Source Code:** [github.com/HakaiInstitute/kelp-o-matic](https://github.com/HakaiInstitute/kelp-o-matic)
- **Other Models:** Check the [Hakai Institute HuggingFace organization](https://huggingface.co/HakaiInstitute) for additional marine segmentation models
## Contact
For questions or issues:
- Open an issue on the [GitHub repository](https://github.com/HakaiInstitute/kelp-o-matic/issues)
- Contact: [Hakai Institute](https://www.hakai.org) |