---
title: Dataset_PULP_Dronet_v3_testing
canonical_url: "https://www.modelscope.cn/datasets/lhh010/Dataset_PULP_Dronet_v3_testing"
md_url: "https://www.modelscope.cn/datasets/lhh010/Dataset_PULP_Dronet_v3_testing.md"
repository: lhh010/Dataset_PULP_Dronet_v3_testing
chinese_name: "无人机视觉多任务-测试集"
last_updated: 2026-07-12
license: cc-by-nc-sa-4.0
downloads: 1481
stars: 0
---

# Dataset_PULP_Dronet_v3_testing

> Dataset_PULP_Dronet_v3_testing - lhh010 在 ModelScope 开源的数据集。无人机视觉多任务-测试集 Dataset_PULP_Dronet_v3_testing

lhh010/Dataset_PULP_Dronet_v3_testing 是 ModelScope 魔搭社区上的数据集，采用 cc-by-nc-sa-4.0 许可。

- **Repository**: lhh010/Dataset_PULP_Dronet_v3_testing
- **License**: cc-by-nc-sa-4.0
- **Downloads**: 1481
- **Stars**: 0
- **Last updated**: 2026-07-12

Source: https://www.modelscope.cn/datasets/lhh010/Dataset_PULP_Dronet_v3_testing

---

# PULP-DroNet v3 Testing Dataset

A visual-navigation dataset for nano-UAVs, used to **test / fine-tune** the
[PULP-DroNet](https://github.com/pulp-platform/pulp-dronet) convolutional neural
network — a lightweight CNN that estimates a **steering yaw-rate** and a
**collision probability** from a single grayscale image, designed to run onboard
resource-constrained nano-drones such as the Bitcraze Crazyflie 2.1.

The network is a port of the original [DroNet](https://github.com/uzh-rpg/rpg_public_dronet)
(Loquercio et al., RAL 2018) to the PULP (Parallel Ultra-Low-Power Processing)
platform.

## Dataset Description

| | |
|---|---|
| **Modality** | Monocular grayscale images (front-facing camera) |
| **Image format** | JPEG, grayscale, `324 x 244` px |
| **Images** | 8,409 |
| **Acquisitions** | 50 (36 in `eth_finetuning/` + 14 in `lorenzo_bellone/`) |
| **Tasks** | (1) yaw-rate regression, (2) binary collision classification |
| **License** | CC BY-NC-SA 4.0 (see `LICENSE.CC.md`) |

## Dataset Structure

The dataset is organised by data-collection session (`acquisition*`). Each
acquisition is a self-contained folder holding the raw images plus several CSV /
JSON sidecar files:

```
.
├── eth_finetuning/                 # data collected at ETH (place_ident = ETH)
│   └── acquisition1/
│       ├── images/                 # *.jpeg frames
│       ├── characteristics.json    # session metadata
│       ├── labeled_images.csv      # per-image labels (yaw_rate, collision)
│       ├── labels_partitioned.csv  # per-image labels + train/valid/test split
│       ├── yaw_collision.csv       # raw timestamp-keyed labels
│       └── state_labels_DroneState.csv   # onboard drone state log (ETH schema)
│
└── lorenzo_bellone/                # data collected by Lorenzo Bellone (place_ident = LOB_*)
    └── acquisition10lb/
        ├── images/
        ├── characteristics.json
        ├── labeled_images.csv
        ├── labels_partitioned.csv
        └── state_labels_PULP_STATES.csv   # onboard drone state log (PULP schema)
```

> The two top-level subsets differ only in the **state-log schema** they ship
> (`state_labels_DroneState.csv` vs `state_labels_PULP_STATES.csv`). The image
> and label format is identical across both.

## File Schema

### `characteristics.json`
A single-element list describing the acquisition:

```json
[{"scenario": "indoor", "path": "straight", "obstacles": "none",
  "height": 1.0, "behaviour": "n/a", "light": "mixed",
  "place_ident": "ETH", "date": "2022-04-01"}]
```

| Field | Meaning |
|---|---|
| `scenario` | Environment type, e.g. `indoor` |
| `path` | Trajectory shape, e.g. `straight` |
| `obstacles` | Obstacle presence, e.g. `none` |
| `height` | Flight height (m) |
| `behaviour` | Flight behaviour descriptor |
| `light` | Lighting condition, e.g. `mixed`, `bright` |
| `place_ident` | Collection-site identifier, e.g. `ETH`, `LOB_1` |
| `date` | Collection date (`YYYY-MM-DD`) |

### Image labels

| File | Columns | Notes |
|---|---|---|
| `labeled_images.csv` | `filename, label_yaw_rate, label_collision` | One row per labeled image |
| `labels_partitioned.csv` | `filename, label_yaw_rate, label_collision, partition` | Same labels + `partition` ∈ {`train`, `valid`, `test`} |
| `yaw_collision.csv` | `timeTicks.jpeg, yaw_rate, collision_label` | Raw labels keyed by timestamp filename |

### Onboard state logs
High-rate state estimates logged during flight (used to derive the image labels):

| File (subset) | Columns |
|---|---|
| `state_labels_DroneState.csv` (`eth_finetuning`) | `timeTicks, range.front, mRange.rangeStatusFront, controller.yawRate, ctrltarget.yaw, stateEstimateZ.rateYaw` |
| `state_labels_PULP_STATES.csv` (`lorenzo_bellone`) | `timeTicks, ctrltarget.yaw, stateEstimate.yaw, stateEstimateZ.rateYaw, stateEstimate.pitch` |

## Labels & Tasks

For each image the network predicts two heads:

- **`label_yaw_rate`** — continuous steering command (rad/s). **Regression** target.
- **`label_collision`** — `{0, 1}` collision probability. **Binary classification** target.

The `filename` column matches the image name inside the acquisition's `images/`
folder (e.g. `25153.jpeg`).

## Splits

Aggregated over every `labels_partitioned.csv` in the dataset:

| Partition | Images |
|---|---|
| `train` | 5,479 |
| `valid` | 789 |
| `test` | 484 |
| *(unassigned)* | ~1,028 |

Splits are defined per-image within each acquisition; combine the
`labels_partitioned.csv` files across acquisitions to reconstruct the full split.

## Loading

The repository is a plain folder tree (not a single table), so load images with a
simple glob and join the nearest `labels_partitioned.csv`:

```python
from pathlib import Path
import pandas as pd
from PIL import Image

root = Path("Dataset_PULP_Dronet_v3_testing")
records = []
for split_csv in root.glob("**/labels_partitioned.csv"):
    acq = split_csv.parent
    df = pd.read_csv(split_csv)
    df["image_path"] = df["filename"].map(lambda f: str(acq / "images" / f))
    records.append(df)
df = pd.concat(records, ignore_index=True)

train = df[df.partition == "train"]
im = Image.open(train.iloc[0].image_path)   # PIL image, mode="L", 324x244
```

Or stream individual files with the ModelScope SDK:

```python
from modelscope import HubApi
api = HubApi()
# download a single file
api.dataset_download_file(
    "lhh010/Dataset_PULP_Dronet_v3_testing",
    file_path="eth_finetuning/acquisition1/labels_partitioned.csv",
    revision="master",
)
```

## Citation

If you use this dataset, please cite the original DroNet and PULP-DroNet works:

```bibtex
@article{loquercio2018dronet,
  title   = {{DroNet}: Learning to Fly by Driving},
  author  = {Loquercio, Antonio and Maqueda, Ana I. and Del-Blanco, Carlos R. and Scaramuzza, Davide},
  journal = {IEEE Robotics and Automation Letters},
  volume  = {3},
  number  = {2},
  pages   = {1088--1095},
  year    = {2018}
}

@article{palossi2019pulpdronet,
  title   = {An Open Source and Open Hardware Deep Learning-powered Visual
             Navigation Engine for Nano-drones},
  author  = {Palossi, Daniele and Conti, Francesco and Benini, Luca},
  journal = {arXiv preprint arXiv:1905.04166},
  year    = {2019}
}
```

## License

Distributed under the **Creative Commons Attribution-NonCommercial-ShareAlike 4.0
International** (CC BY-NC-SA 4.0) license. See [`LICENSE.CC.md`](./LICENSE.CC.md)
for the full text.
