# DataDreamer

## 快速开始

[DataDreamer](https://github.com/luxonis/datadreamer) 使您能够使用生成式 AI 和基础计算机视觉模型从头创建带标注的数据集。这样，您就可以为边缘 AI 应用（如目标检测）训练自己的模型，而无需真实世界数据。

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

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

 * Google Colab 笔记本，包含生成数据集、训练模型并导出到 RVC2/RVC3 的指导：[DataDreamer
   快速开始](https://colab.research.google.com/github/luxonis/datadreamer/blob/main/examples/generate_dataset_and_train_yolo.ipynb)
 * 安全帽检测示例：[安全帽检测](https://github.com/luxonis/datadreamer/blob/main/examples/helmet_detection.ipynb)
 * 更多信息请查看 [DataDreamer GitHub 仓库](https://github.com/luxonis/datadreamer)

## 概述

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

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

 * 从基础模型中提取知识：DataDreamer 利用强大的预训练 AI 模型中蕴含的潜在知识。这种能力允许将来自这些“基础模型”的广泛理解转移到更小的定制模型中，显著增强其性能。

 * 高效且强大的模型：DataDreamer 的主要目标是创建既小巧（适合集成到任何设备）又在特定任务上性能强劲的紧凑模型。

## 功能特性

 * 提示生成：使用强大的语言模型自动创建图像提示。
   
   提供的类别名称：["horse", "robot"]
   
   生成的提示："A photo of a horse and a robot coexisting peacefully in the midst of a serene pasture."（注：提示本身为英文，通常保持原样，但为完整理解，此处保留英文）

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

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

 * 边缘模型训练：训练高效的小规模神经网络用于边缘部署。（不属于本库范围）

## 安装

您可以通过 pip 安装 DataDreamer：

```bash
pip install datadreamer
```

## 可用模型

| 模型类别 | 模型名称 | 描述/备注 |
| --- | --- | --- |
| 提示生成 | [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) | 小型语言模型 |
| | 简单随机生成器 | 随机组合所选对象名称 |
| 图像生成 | [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 图像） |
| 图像标注 | [OWLv2](https://huggingface.co/google/owlv2-base-patch16-ensemble) | 开放词汇目标检测器 |

## 示例

```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 参数增加批量大小。如果遇到内存不足，请尝试减小批量大小。
 * 更佳图像质量：为获得更好的图像质量，请考虑调整以下参数：
   * --image_generator：选择图像质量更高的模型。SDXL-Turbo → SDXL-Lightning → SDXL（从最快到最慢，从最低质量到最高质量）。
   * --use_image_tester 和 --image_tester_patience：启用迭代图像生成，并使用 CLIP 模型选择最佳图像。考虑增加耐心阈值以获得更好的结果。
 * 每张图像的对象数量：要生成具有不同对象数量的图像，请使用 --num_objects_range 参数。例如，--num_objects_range 1 3 生成包含 1、2 或 3 个对象的图像。不建议使用大于 3
   的值，因为当前模型生成复杂场景的能力有限。
 * 提示生成：要生成更多样化的提示，请考虑使用 --prompt_generator tiny 生成器，它使用小型语言模型生成提示。
