YOLO Dataset Quality Analysis Tool powered by FiftyOne
Project description
๐ YoloScout โ YOLO Dataset quality analysis tool
A comprehensive tool for analyzing and visualizing YOLO dataset quality using a custom FiftyOne wrapper
๐ Quick Start
Installation
# Install the package from PyPI
pip install yolo-scout
Basic Usage
# Object detection dataset
yolo-scout data=/path/to/dataset task=detect
# Segmentation with MetaCLIP embeddings
yolo-scout data=/path/to/data.yaml task=segment model=metaclip_400m
# Ultralytics Platform dataset
ULTRALYTICS_API_KEY=<your_key> yolo-scout data=ul://username/datasets/my-dataset task=detect
# Config file with CLI overrides
yolo-scout config=my_config.yaml batch=8
# Force reload of an existing dataset
yolo-scout data=/path/to/dataset task=detect reload=true
If you want to use the configuration file option, you can create a config file (e.g., my_config.yaml) with the
following structure (all keys are optional and override the defaults):
data: "/path/to/your/dataset" # directory, data.yaml, or ul://username/datasets/slug
task: "detect" # detect, segment, classify, pose, obb
name: "my_dataset" # auto-generated from path if not set
reload: false
dataset_dir: "yolo_scout/datasets" # where URL-sourced datasets are downloaded
skip_embeddings: false
model: "openai_clip"
batch: 16
mask_background: true
thumbnail_dir: "yolo_scout/thumbnails"
thumbnail_width: 800
skip_quality: false
port: 5151
skip_launch: false
verbose: false
Command-Line Arguments
| Argument | Type | Default | Description |
|---|---|---|---|
config |
str |
None |
Path to config YAML file. Overrides default settings. |
data |
str |
None |
Path to your dataset. Required unless provided in config file. See Supported data sources for all accepted formats. |
task |
str |
'detect' |
Task type: classify, detect, segment, pose, obb. Required unless in config. More info on the tasks below. |
name |
str |
None |
Name for the FiftyOne dataset. Auto-generated from path if not set. |
dataset_dir |
str |
'yolo_scout/datasets' |
Destination directory for datasets downloaded from a URL. Only used when data is a URL. |
reload |
bool |
False |
Force reload of the dataset even if it already exists. The current dataset will be deleted and recreated. |
skip_embeddings |
bool |
False |
Skip CLIP embedding computation (useful for quick visualization). |
model |
str |
'openai_clip' |
Embeddings model to use. See Supported Models for available options and a selection guide. |
batch |
int |
16 |
Batch size used during CLIP embedding computation. |
mask_background |
bool |
True |
Mask background in patch crops for segmentation/OBB tasks. When enabled, background is replaced with gray (114, 114, 114). Set to False to disable. |
thumbnail_width |
int |
800 |
Width (in pixels) of the generated image thumbnails in FiftyOne. The height is adjusted automatically to maintain aspect ratio. Set to -1 to disable thumbnail saving. |
thumbnail_dir |
str |
'yolo_scout/thumbnails' |
Path to the directory where the thumbnails are saved. |
port |
int |
5151 |
Port to launch the FiftyOne app on. |
skip_quality |
bool |
False |
Skip image quality metrics computation (blurriness, brightness, aspect_ratio, entropy). |
skip_launch |
bool |
False |
Skip launching the FiftyOne app after processing. |
verbose |
bool |
False |
Enable debug logging. |
๐ Supported tasks and image metadata
For each expected task format, the following metadata will be computed and available in FiftyOne for each annotation:
| Task | Available parameters when using the UI |
|---|---|
classify |
cls_label.label |
detect |
area, width, height, iou_score |
segment |
area, num_keypoints, width, height, iou_score |
obb |
area, width, height, iou_score |
pose |
area, num_keypoints, width, height, iou_score |
Also, for each image, the following metadata will be computed:
| Image Metadata | Description |
|---|---|
object_count |
Number of objects in the image |
metadata.size_bytes |
Size of the image file in bytes |
metadata.width |
Width of the image in pixels |
metadata.height |
Height of the image in pixels |
metadata.mime_type |
MIME type of the image (e.g., image/jpeg) |
metadata.num_channels |
Number of color channels (e.g., 3 for RGB) |
The following quality metrics are computed unless skip_quality is passed. All metrics operate on grayscale pixel
values and are available at both image and patch level.
| Metric | Description |
|---|---|
blurriness |
Inverse of the Laplacian variance. A score close to 1 indicates a blurry image, while a score close to 0 indicates a sharp one |
brightness |
Mean pixel intensity normalized between 0 and 1. A score of 0 is fully dark and a score of 1 is fully bright |
aspect_ratio |
Width-to-height ratio of the image or patch crop. Values greater than 1 are wider than tall, values less than 1 are taller than wide |
entropy |
Shannon entropy of the pixel intensity histogram. A low score indicates a flat or visually repetitive image |
โญ๏ธ Supported Models
All models use 224x224 input resolution. This is a constraint imposed by FiftyOne's OpenCLIP integration (higher resolution variants (384, 512) cause preprocessing errors when computing embeddings). The 224x224 resolution provides excellent quality for most computer vision tasks while maintaining compatibility with FiftyOne's model zoo.
| Model | Description | Training Dataset |
|---|---|---|
| openai_clip | Original OpenAI CLIP model with ViT-B/32 architecture. Hosted on GitHub releases for offline usage. This is the default model and works without internet connection after first download. | OpenAI CLIP |
| metaclip_400m | MetaCLIP model trained on curated 400M image-text pairs. Offers improved data quality and better embeddings compared to OpenAI CLIP while maintaining the same speed and architecture. | MetaCLIP |
| metaclip_fullcc | MetaCLIP model trained on the full CommonCrawl dataset. Provides the highest quality embeddings among MetaCLIP variants with more diverse training data. | MetaCLIP |
| siglip_base_224 | SigLIP (Sigmoid Loss for Language-Image Pre-training) base model. Uses improved sigmoid loss function for better performance with smaller batch sizes and more efficient training. | SigLIP |
Model Selection Guide
- Use
openai_clipif you want to use the most common embeddings model - Use
metaclip_400mfor better quality embeddings (recommended default) - Use
metaclip_fullccwhen you need the highest quality embeddings - Use
siglip_base_224as an alternative to CLIP-based models
All models have similar inference speed and produce 512-dimensional embeddings with full support for FiftyOne visualization and analysis features.
๐ Supported data sources
| Format | Example | Notes |
|---|---|---|
| Local directory | data=/path/to/dataset |
Standard YOLO directory structure |
| YAML file | data=/path/to/data.yaml |
Resolves to the parent directory automatically |
| NDJSON file | data=/path/to/file.ndjson |
Pre-downloaded Ultralytics Platform export; images are downloaded and converted to YOLO layout |
| URL | data=<url> |
See supported URL schemes below |
The supported URL schemes for the data argument are:
| Scheme | Example | Notes |
|---|---|---|
ul:// |
ul://<username>/datasets/<slug> |
Ultralytics Platform, requires ULTRALYTICS_API_KEY |
๐งฉ Additional installed plugins
This tool ships with a custom-built FiftyOne plugin that is automatically installed at startup. No manual setup required.
| Plugin | Description | Icon | How to use? |
|---|---|---|---|
@ultralytics/image-adjuster |
Custom plugin to adjust image brightness, contrast, and label overlay opacity. | Open a sample, then click the slider icon in the bottom-left corner. |
โ๏ธ Dataset Structure
This tool supports two common YOLO dataset directory structures:
Format 1: Type-First Structure
dataset/
โโโ images/
โ โโโ train/
โ โ โโโ image1.jpg
โ โ โโโ image2.jpg
โ โ โโโ ...
โ โโโ val/
โ โ โโโ image1.jpg
โ โ โโโ ...
โ โโโ test/
โ โโโ ...
โโโ labels/
โโโ train/
โ โโโ image1.txt
โ โโโ image2.txt
โ โโโ ...
โโโ val/
โ โโโ image1.txt
โ โโโ ...
โโโ test/
โโโ ...
In this format, images and labels are organized by type first, then by split.
Format 2: Split-First Structure
dataset/
โโโ train/
โ โโโ images/
โ โ โโโ image1.jpg
โ โ โโโ image2.jpg
โ โ โโโ ...
โ โโโ labels/
โ โโโ image1.txt
โ โโโ image2.txt
โ โโโ ...
โโโ val/
โ โโโ images/
โ โ โโโ ...
โ โโโ labels/
โ โโโ ...
โโโ test/
โโโ images/
โ โโโ ...
โโโ labels/
โโโ ...
In this format, the dataset is organized by split first, then by type (images/labels).
โจ๏ธ FiftyOne commands
If you have used this tool at least one time to visualize a dataset, you can then use the following commands bellow to interact with the FiftyOne datasets and application:
# List all the datasets
fiftyone datasets list
# Delete a specific dataset using its name
fiftyone datasets delete <dataset_name>
# Delete all datasets
python -c "import fiftyone as fo; [fo.delete_dataset(name) for name in fo.list_datasets()]"
# Launch the FiftyOne app
fiftyone app launch
# Launch the FiftyOne app and pre-select a dataset using its name
fiftyone app launch <dataset_name>
๐ค Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.
๐ Acknowledgments
- Built with FiftyOne by Voxel51
- Inspired by Ultralytics YOLO ecosystem
- CLIP models from OpenAI
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file yolo_scout-1.1.5.tar.gz.
File metadata
- Download URL: yolo_scout-1.1.5.tar.gz
- Upload date:
- Size: 1.3 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f9ce7b8ed0a6b60ceccdc94412c585a496511518c64781f9b75c05ebbd4ccd7d
|
|
| MD5 |
699a1a993e38221fa19e0db1de70945c
|
|
| BLAKE2b-256 |
1d9fb0ea916795cb3d583c3d5f78bc0235ae6ed244c57a90d414c0400f349ec9
|
Provenance
The following attestation bundles were made for yolo_scout-1.1.5.tar.gz:
Publisher:
cd.yml on picsalex/yolo-scout
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
yolo_scout-1.1.5.tar.gz -
Subject digest:
f9ce7b8ed0a6b60ceccdc94412c585a496511518c64781f9b75c05ebbd4ccd7d - Sigstore transparency entry: 1199743064
- Sigstore integration time:
-
Permalink:
picsalex/yolo-scout@a9cd5197db2927cdad2ddea6f2a1283696582108 -
Branch / Tag:
refs/tags/v1.1.5 - Owner: https://github.com/picsalex
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
cd.yml@a9cd5197db2927cdad2ddea6f2a1283696582108 -
Trigger Event:
push
-
Statement type:
File details
Details for the file yolo_scout-1.1.5-py3-none-any.whl.
File metadata
- Download URL: yolo_scout-1.1.5-py3-none-any.whl
- Upload date:
- Size: 49.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1bcdc3d9ecaffcb5b14046863857c7beb9f05eea3fd37b5119a52740cd7a7f5e
|
|
| MD5 |
0047f220d990987b0b20381ecc3cd620
|
|
| BLAKE2b-256 |
08c61d1b10ceb83e1059fe3368495e5ee67a3f812f13c13cd24746a781adfa1b
|
Provenance
The following attestation bundles were made for yolo_scout-1.1.5-py3-none-any.whl:
Publisher:
cd.yml on picsalex/yolo-scout
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
yolo_scout-1.1.5-py3-none-any.whl -
Subject digest:
1bcdc3d9ecaffcb5b14046863857c7beb9f05eea3fd37b5119a52740cd7a7f5e - Sigstore transparency entry: 1199743073
- Sigstore integration time:
-
Permalink:
picsalex/yolo-scout@a9cd5197db2927cdad2ddea6f2a1283696582108 -
Branch / Tag:
refs/tags/v1.1.5 - Owner: https://github.com/picsalex
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
cd.yml@a9cd5197db2927cdad2ddea6f2a1283696582108 -
Trigger Event:
push
-
Statement type: