Skip to main content

Coconut tree detection from drone imagery

Project description

Object Detection on Aerial Imagery for Coconut Trees Detection

Coconut tree detection from drone imagery using YOLOv8, Yolov12, and RT_DERT models with OpenStreetMap labels and OpenAerialMap imagery.

Overview

  • OpenStreetMap point data: bounding boxes with buffer zones
  • Tile large aerial imagery (256×256 at 9cm/pixel): Source
  • Convert geographic coordinates to YOLO format
  • Train multiple models of YOLOv8 (nano, small, medium) on coconut trees from Kolovai, Tonga
  • Train Yolov12 and also RT-DERT.

Source: World Bank - Automated Feature Detection of Aerial Imagery from the South Pacific

Data

Statistics:

  • Original: 10,631 trees (Coconut: 10,092 | Mango: 261 | Banana: 181 | Papaya: 97)
  • Target: Coconut trees only
  • Tiles: 256×256px at zoom 19, EPSG:4326
  • Train/Val: 441 / 167 tiles (80/20 stratified split), but we did later 70,20,10 for train, val, test for hyperparameter tuning and improve model accuracy.

Structure

data/
├── raw/                # OAM imagery + OSM points
├── chips/              # 256×256 tiles (.tif)
├── labels/             # Per-tile annotations (.geojson)
└── yolo/
    ├── train/          # Training data (.png + .txt)
    ├── val/            # Validation data
    └── config.yaml     # YOLO config

notebooks/
├── experiment.ipynb         # including the dl4cv-oda package and all functions

Setup

curl -LsSf https://astral.sh/uv/install.sh | sh
git clone https://github.com/kshitijrajsharma/dl4cv-object-detection-on-aerial-imagery
cd dl4cv-object-detection-on-aerial-imagery
uv sync
pip install dl4cv_oda

Workflow

image

1. Clean OSM Data : Filter coconut trees, generate buffered bounding boxes

2. Tile Imagery : Create 256×256 tiles, clip labels to tile extents

3. YOLO Conversion : Transform coordinates (EPSG:4326 : pixels : normalized [0,1])

row, col = src.index(lon, lat)  # rasterio
x_norm = col / img_width
y_norm = row / img_height

4. Train : YOLOv8n, 100 epochs, batch 16

from ultralytics import YOLO
model = YOLO('yolov8n.pt')
model.train(data='data/yolo/config.yaml', epochs=100, imgsz=256, batch=16)

References

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dl4cv_oda-0.1.2.tar.gz (3.5 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dl4cv_oda-0.1.2-py3-none-any.whl (8.6 kB view details)

Uploaded Python 3

File details

Details for the file dl4cv_oda-0.1.2.tar.gz.

File metadata

  • Download URL: dl4cv_oda-0.1.2.tar.gz
  • Upload date:
  • Size: 3.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.24 {"installer":{"name":"uv","version":"0.9.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for dl4cv_oda-0.1.2.tar.gz
Algorithm Hash digest
SHA256 83329d03d7f1d4f32115a1cdb87f19698acffc0cd9d9ef02944ce14ebac40a11
MD5 d1ec1e7380c32f5090f97aea03590022
BLAKE2b-256 47c3b20009b862d795da1930786536c57adf15932cd0b96418ba1ec9558b5440

See more details on using hashes here.

File details

Details for the file dl4cv_oda-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: dl4cv_oda-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 8.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.24 {"installer":{"name":"uv","version":"0.9.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for dl4cv_oda-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 4375233cc934905a22c12d95f308410a7231e63a8820b135e2af9d7ce679f730
MD5 66b5c25d50581be0585fb01269b3db8d
BLAKE2b-256 5f9d75b281102f4bd8768215c957c1f835892a7e77d3e6d82fe28954ea07a790

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page