---
title: HARD-VQA
canonical_url: "https://www.modelscope.cn/datasets/KAIWANG/HARD-VQA"
md_url: "https://www.modelscope.cn/datasets/KAIWANG/HARD-VQA.md"
repository: KAIWANG/HARD-VQA
chinese_name: HARD-VQA
last_updated: 2026-09-16
license: unknown
storage_size: "245 GB"
downloads: 866
stars: 0
---

# HARD-VQA

> HARD-VQA - KAIWANG 在 ModelScope 开源的数据集。Ultra-High-Resolution Aerial VQA with Original Images Embedded per Question

KAIWANG/HARD-VQA 是 ModelScope 魔搭社区上的数据集，存储大小 245 GB，采用 unknown 许可。

- **Repository**: KAIWANG/HARD-VQA
- **License**: unknown
- **Storage size**: 245 GB
- **Downloads**: 866
- **Stars**: 0
- **Last updated**: 2026-09-16

Source: https://www.modelscope.cn/datasets/KAIWANG/HARD-VQA

---

# HARD-VQA

<table align="center" role="presentation" style="margin:0 auto; border:0; background:transparent;">
  <tr style="border:0; background:transparent;">
    <td align="center" style="border:0; background:transparent; padding:0 8px;">
      <img src="./assets/rl-mind-logo-v2.webp" alt="RL-MIND research group logo" width="160" height="160" loading="eager" fetchpriority="high" decoding="async" style="width:160px; height:160px; object-fit:contain;" />
    </td>
    <td align="center" style="border:0; background:transparent; padding:0 8px;">
      <img src="./assets/dataset-logo-v2.webp" alt="HARD-VQA dataset logo" width="160" height="160" loading="eager" fetchpriority="high" decoding="async" style="width:160px; height:160px; object-fit:contain;" />
    </td>
  </tr>
</table>

<p align="center"><b>Ultra-High-Resolution Aerial VQA with Original Images Embedded per Question</b></p>

<p align="center">
  <a href="https://huggingface.co/datasets/RL-MIND/HARD-VQA">🤗 Hugging Face</a> ·
  <a href="https://www.modelscope.cn/datasets/KAIWANG/HARD-VQA">🟣 ModelScope</a> ·
  <a href="https://huggingface.co/datasets/RL-MIND/HARD-VQA/blob/main/statistics.json">📊 Statistics</a>
</p>

<p align="center"><b>English</b> | 中文：<a href="https://huggingface.co/datasets/RL-MIND/HARD-VQA/blob/main/README_ZH.md">Hugging Face</a> · <a href="https://www.modelscope.cn/datasets/KAIWANG/HARD-VQA/file/view/master/README_ZH.md?status=1">ModelScope</a></p>

## 📚 Introduction

**HARD-VQA** packages ultra-high-resolution aerial visual question answering data as **self-contained Parquet shards**. Each row is one multiple-choice question, with all required original JPEG bytes embedded in its ordered `images` column. Single-image, two-image, and three-image questions retain their original image order.

The native package contains **1,563 valid questions** across **8 task types**, using **854 distinct original images** from `NJU-xianlin`, `UAV-BASE-13`, and `UAV-BASE-14`. Every original image is **12,768 × 9,564 pixels**. Loading a row requires no external image directory, image URL, or source server: each embedded image has a null `path` and its complete JPEG `bytes`.

**HARD-VQA and NJU-HARD use the same valid questions and original images, with different storage layouts.** HARD-VQA embeds the images required by each question directly in that row; images shared by several questions are stored repeatedly. [NJU-HARD on Hugging Face](https://huggingface.co/datasets/RL-MIND/NJU-HARD) / [ModelScope](https://www.modelscope.cn/datasets/KAIWANG/NJU-HARD) stores each original once in an `images` configuration and links to it from a separate `questions` configuration.

## 📊 Dataset at a Glance

| Item | Native package |
|:---|:---|
| Valid questions | 1,563 |
| Task types | 8 |
| Distinct original images | 854 |
| Ordered image occurrences | 2,571 |
| Questions with 1 / 2 / 3 images | 855 / 408 / 300 |
| Original resolution | 12,768 × 9,564 pixels |
| Distinct source JPEG bytes | 87,637,348,481 bytes |
| Embedded JPEG occurrences before Parquet compression | 263,224,331,477 bytes |
| Original-resolution Parquet | 391 shards; 263,218,065,108 bytes (approximately 263.22 GB) |
| Default configuration / split | `default` / `unsplit` |
| Browsing preview | 8 examples, one per task, with derived thumbnails |

These totals describe the native package. Repeated images account for the larger per-question package size. Original JPEGs are **not resized, cropped, or re-encoded**; the preview thumbnails are separate browsing aids.

| Source task label | Questions |
|:---|---:|
| `classification` | 250 |
| `counting` | 200 |
| `property` | 154 |
| `spatial_relation` | 100 |
| `task1_specialdetect` | 66 |
| `task3_region_single` | 151 |
| `task4_findit_nearbox` | 342 |
| `task_2_relocate` | 300 |
| **Total** | **1,563** |

## 📦 Data Organization

| Configuration | Split | Contents |
|:---|:---|:---|
| `default` **(default)** | `unsplit` | Question records with all required original images embedded per row |
| `preview` | `sample` | Eight examples with embedded thumbnails for browsing |

```text
data/        # 391 original-resolution Parquet shards
preview/     # vqa_preview.parquet: 8 thumbnail examples
provenance/  # checksums, excluded records, and validation reports
statistics.json
```

The original-resolution schema is:

| Column | Type | Meaning |
|:---|:---|:---|
| `question_id` | `int32` | Original question ID |
| `images` | `Sequence(Image())` / `List(Image())` | Complete original JPEG bytes, ordered as Image 1, Image 2, Image 3 |
| `question` | `string` | Original question text |
| `options` | struct of A/B/C/D strings | Original choices; C/D are null for binary questions |
| `answer` | `string` | Source-provided correct option key |
| `answer_text` | `string` | Text selected by the source answer key |
| `task_type` | `string` | Original task label |
| `num_images` | `int32` | Number of ordered images |
| `source_image_paths` | list of strings | Provenance identifiers; not required to load images |
| `reference_bbox` | list of `int64` | XYXY pixel coordinates, when supplied |
| `scene`, `sequence` | `string` | Image sequence identifiers |
| `quality_flags` | list of strings | Recorded source-quality issues |

The Parquet feature metadata uses the compatible `Sequence(Image())` representation, which newer Datasets versions normalize to `List(Image())`.

## 🚀 Quick Start

Use **`datasets>=3.6`**. The package has been checked with Datasets **3.6.0 and 5.0.0**. Start with the small preview:

```python
from datasets import load_dataset

preview = load_dataset("RL-MIND/HARD-VQA", "preview", split="sample")
print(preview[0]["question"], preview[0]["options"])
```

Stream original-resolution examples while keeping the images as JPEG bytes:

```python
from datasets import Image, Sequence, load_dataset

ds = load_dataset(
    "RL-MIND/HARD-VQA", "default", split="unsplit", streaming=True
)
ds = ds.cast_column("images", Sequence(Image(decode=False)))
row = next(iter(ds))
print(row["question"], row["options"], row["answer"])
original_jpeg_bytes = row["images"][0]["bytes"]
```

Streaming avoids downloading the entire package before iteration. Each original image is large, so inspect one example at a time and allow adequate memory before decoding. To decode a known packaged original:

```python
from io import BytesIO
from PIL import Image as PILImage

PILImage.MAX_IMAGE_PIXELS = None  # Known high-resolution images verified during packaging.
image = PILImage.open(BytesIO(original_jpeg_bytes))
```

For a local snapshot downloaded from either Hugging Face (`RL-MIND/HARD-VQA`) or ModelScope (`KAIWANG/HARD-VQA`), use the same Parquet loader:

```python
ds = load_dataset(
    "parquet",
    data_files={"unsplit": "/path/to/HARD-VQA/data/*.parquet"},
    split="unsplit",
)
```

A full original-resolution load transfers approximately **263.22 GB** and creates a local cache; allow additional cache space.

## 🔎 Preview and Original Resolution

The `preview` configuration uses **1,024-pixel thumbnails** and marks each row with `preview_only=true`. It is intended for browsing. Questions retain their original wording; the thumbnails are not the original-resolution evaluation data.

For viewers that do not display image lists, the preview also exposes `image_1`, `image_2`, and `image_3` as individual image columns. Missing second or third images are null; the ordered `images` column remains available. Use `default` for the original images and original-coordinate annotations.

## ✅ Source Audit and Splits

The source contained **1,565 records**. IDs **476** and **496** had null questions, options, and answers because generation parsing failed. They are excluded and recorded in [excluded_records.jsonl](https://huggingface.co/datasets/RL-MIND/HARD-VQA/blob/main/provenance/excluded_records.jsonl); images used only by those rejected records are not included.

ID **597** is preserved and flagged `duplicate_option_text`: options A and B are both `white`, and the source answer is B. Filter quality-flagged rows when evaluation requires a unique correct option.

Question text, options, answer keys, image order, and supplied bounding boxes are preserved. Structural validation does not establish the semantic correctness of every source answer. The source did not define train/validation/test membership, so the original-resolution package uses one **`unsplit`** partition. Shared images and adjacent frames should be considered when creating downstream splits.

## 🔐 Integrity and Provenance

The packaging process checks embedded image bytes against the source with SHA-256 and records original-image and Parquet checksums. The validation reports document question-field preservation, ordered image references, and schema compatibility:

- [Original-image checksums](https://huggingface.co/datasets/RL-MIND/HARD-VQA/blob/main/provenance/original_images.sha256.jsonl)
- [Parquet shard checksums](https://huggingface.co/datasets/RL-MIND/HARD-VQA/blob/main/provenance/parquet.sha256.jsonl)
- [Validation report](https://huggingface.co/datasets/RL-MIND/HARD-VQA/blob/main/provenance/validation.json)
- [Schema compatibility report](https://huggingface.co/datasets/RL-MIND/HARD-VQA/blob/main/provenance/schema_compatibility_validation.json)
- [Package statistics](https://huggingface.co/datasets/RL-MIND/HARD-VQA/blob/main/statistics.json)

The same files are included under `provenance/` and at `statistics.json` in the ModelScope package.

## 📜 License

The source did not include a license statement, so the dataset card retains **`license: unknown`**. This packaging does not grant a new reuse license; contact the dataset owner for usage terms.
