# DataDreamer

## 快速开始

[DataDreamer](https://github.com/luxonis/datadreamer) 是 Luxonis 的一个工具，用于两个相关的工作流程：

 * 使用生成式 AI 和基础视觉模型从头生成合成数据集。
 * 对现有图像数据集进行预标注，以减少审查和训练前的手动标注工作量。

当您还没有足够的训练数据，或者想在使用 [Luxonis Train](https://docs.luxonis.com/software-v3/ai-inference/model-source/training/luxonis-train.md)
训练前加快数据集准备时，这非常有用。

要使用自定义类别生成数据集，只需执行两个命令：

```bash
pip install datadreamer
datadreamer --class_names person moon robot
```

有关完整的 CLI 界面，请参阅 [API 参考](https://docs.luxonis.com/software-v3/ai-inference/model-source/training/datadreamer/api-reference.md)。

以下是一些教程，您可以使用它们开始使用 DataDreamer 生成数据和训练模型：

 * 包含如何生成数据集、训练模型并导出到 RVC2/RVC3 的说明的 Google Colab 笔记本：[DataDreamer
   快速入门](https://colab.research.google.com/github/luxonis/ai-tutorials/blob/main/training/datadreamer/generate_dataset_and_train_yolo.ipynb)
 * 头盔检测示例：[头盔检测](https://colab.research.google.com/github/luxonis/ai-tutorials/blob/main/training/datadreamer/helmet_detection.ipynb)
 * 实例分割示例：[实例分割](https://colab.research.google.com/github/luxonis/ai-tutorials/blob/main/training/datadreamer/generate_instance_segmentation_dataset_and_train_yolo.ipynb)

更多信息请访问 [DataDreamer GitHub 仓库](https://github.com/luxonis/datadreamer)。

## 概述

DataDreamer 是一个高级工具包，旨在促进边缘 AI 模型的开发，无论初始数据是否可用。DataDreamer 的独特功能包括：

 * 合成数据生成：消除对大量数据集用于 AI 训练的依赖。DataDreamer 使用能够生成高质量、多样化图像的先进 AI 算法，使用户能够从头生成合成数据集。

 * 真实数据预标注：对您已有的图像使用相同的标注流程，为分类、目标检测和实例分割任务启动标签。

 * 从基础模型中提取知识：DataDreamer 利用嵌入在复杂、预训练 AI 模型中的潜在知识。这一功能允许将来自这些“基础模型”的广泛理解转移到更小的自定义模型中，显著增强其能力。

 * 高效而强大的模型：DataDreamer 的主要目标是实现创建紧凑的模型，这些模型既在尺寸上高效以便集成到任何设备中，又在性能上稳健以用于特定任务。

## 功能特性

 * 提示生成：使用强大的语言模型自动创建图像提示。
   
   提供的类名：["horse", "robot"]
   
   生成的提示："一张马和机器人和平共处于宁静牧场的照片。"

 * 图像生成：使用最先进的生成模型生成合成数据集。

 * 数据集标注：利用基础模型自动标注数据集。

 * 预标注现有数据：当您希望在手动质检之前获得初步标签时，在真实图像的目录上运行 DataDreamer。

 * 边缘模型训练：为边缘部署训练高效的小规模神经网络。（此库不包含此功能）

## 预标注现有数据集

DataDreamer 可以完全跳过合成图像生成，直接标注您已有的图像。当您希望在保持其余训练工作流程不变的情况下加速标注时，这非常有用。

```bash
datadreamer \
  --task instance-segmentation \
  --image_annotator owlv2-slimsam \
  --save_dir dataset_path \
  --class_names dumpling \
  --annotate_only
```

--annotate_only 禁用了提示生成和图像生成，因此 DataDreamer 仅运行标注阶段。将其与 --task 和 --image_annotator 结合使用，可在分类、检测和实例分割工作流程之间切换。

## 安装

DataDreamer 可以通过 PyPI 安装，也可以从发布的 Docker 镜像运行。

```bash
pip install datadreamer
```

```bash
docker pull ghcr.io/luxonis/datadreamer:latest
docker run --rm -v "$(pwd):/app" ghcr.io/luxonis/datadreamer:latest --save_dir generated_dataset --device cpu
```

在支持 CUDA 的机器上运行容器时，请将 --gpus all 与 --device cuda 结合使用。

## 硬件要求

 * 建议使用至少 16 GB 显存的 CUDA 兼容 GPU，以获得最佳体验。
 * 建议至少 16 GB 系统内存，对于较大任务，推荐 32 GB 或更多。

## 可用模型

| 模型类别 | 模型名称 | 描述/说明 |
| --- | --- | --- |
| 提示生成 | [Mistral-7B-Instruct-v0.1](https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.1) | 语义丰富的提示 |
| | [TinyLlama-1.1B-Chat-v1.0](https://huggingface.co/TinyLlama/TinyLlama-1.1B-Chat-v1.0) | 小型语言模型 |
| | [Qwen2.5-1.5B-Instruct](https://huggingface.co/Qwen/Qwen2.5-1.5B-Instruct) | Qwen2.5 语言模型 |
| | 简单随机生成器 | 随机组合对象名称 |
| 脏话过滤 | [Qwen2.5-1.5B-Instruct](https://huggingface.co/Qwen/Qwen2.5-1.5B-Instruct) | 快速准确的 LM 脏话过滤器 |
| 图像生成 | [SDXL-1.0](https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0) | 慢速但准确（1024x1024 图像） |
| | [SDXL-Turbo](https://huggingface.co/stabilityai/sdxl-turbo) | 快速但准确性较低（512x512 图像） |
| | [SDXL-Lightning](https://huggingface.co/ByteDance/SDXL-Lightning) | 快速且准确（1024x1024 图像） |
| | [Shuttle-3-Diffusion](https://huggingface.co/shuttleai/shuttle-3-diffusion) | 快速且准确（512x512 图像） |
| 图像标注 | [OWLv2](https://huggingface.co/google/owlv2-base-patch16-ensemble) | 开放词汇目标检测器 |
| | [CLIP](https://huggingface.co/openai/clip-vit-base-patch32) | 零样本图像分类 |
| | [AIMv2](https://huggingface.co/apple/aimv2-large-patch14-224-lit) | 零样本图像分类 |
| | [SlimSAM](https://huggingface.co/Zigeng/SlimSAM-uniform-50) | 零样本实例分割 |
| | [SAM2.1](https://huggingface.co/facebook/sam2.1-hiera-large) | 零样本实例分割 |

## 使用

DataDreamer 可以直接通过 CLI 参数驱动，也可以通过 YAML 配置文件驱动。

```bash
datadreamer --save_dir path/to/save_directory --config configs/det_config.yaml
```

一些最重要的选项包括：

 * --task 可选择 detection、classification 或 instance-segmentation
 * --dataset_format 可选择 raw、yolo、coco、voc、luxonis-dataset 或 cls-single
 * --image_annotator 用于选择检测器、分类器或分割堆栈
 * --device 可选择 cuda 或 cpu

使用原始格式时，DataDreamer 会生成图像以及 prompts.json 和 annotations.json 文件。其他输出格式旨在直接接入常见的训练流程。

## 示例

```bash
datadreamer --save_dir path/to/save_directory --class_names person moon robot --prompts_number 20 --prompt_generator simple --num_objects_range 1 3 --image_generator sdxl-turbo
```

该命令为指定的对象生成图像，并将其和标注保存在给定目录中。该脚本允许通过多种参数对生成过程进行自定义，以适应不同的需求和硬件配置。

## 实用提示

 * 批量生成：在内存允许的情况下，增加 --batch_size_prompt、--batch_size_image 和 --batch_size_annotation 以提高吞吐量。
 * 更好的图像质量：当质量比速度更重要时，优先选择 sdxl-lightning、shuttle-3 或 sdxl，而不是 sdxl-turbo。
 * 图像选择：当您希望 DataDreamer 花更多时间选择更好的生成结果时，请使用 --use_image_tester 结合 --image_tester_patience。
 * 每张图像中的对象数量：保持 --num_objects_range 适中。超过 3 的值通常更难被当前的图像生成器可靠地渲染。
 * 提示生成：当您希望获得比简单随机生成器更多样化的提示时，请使用 --prompt_generator tiny、lm 或 qwen2。
