Project Icon

tiny-dream

轻量级 Stable Diffusion C++ 推理库

Tiny Dream 是一个轻量级的 Stable Diffusion C++ 实现,仅包含头文件且无外部依赖。该库专注于提高 CPU 效率和减少内存占用,在普通硬件上即可高效运行。Tiny Dream 内存需求低,支持多种高级功能,并提供简洁的 C++ API,便于集成到现有项目中。

微梦境

一个嵌入式、仅头文件的稳定扩散推理C++库
pixlab.io/tiny-dream

td_screen_website

最新动态 🔥

API文档 依赖 许可证

介绍PixLab的Tiny Dream

Tiny Dream是一个仅包含头文件、无依赖、部分未经审查的、用C++编写的Stable Diffusion实现,主要专注于CPU效率和较小的内存占用。Tiny Dream在普通消费级硬件上运行速度相当快只需要1.7 ~ 5.5 GB的RAM即可执行,不强制要求Nvidia GPU,并且设计用于嵌入更大的代码库(宿主程序)中,提供易于使用的C++ API。其可能性几乎是无限的,或者至少延伸到Stable Diffusion潜在流形的边界。

特性 🔥

完整的特性列表,请参阅此处的官方文档。

开始使用Tiny-Dream 🔥

将Tiny Dream集成到您现有的代码库中非常简单。以下是无需大量繁琐的阅读和配置即可完成的操作:

下载Tiny-Dream

  • 下载Tiny Dream的最新公开发布版本,并将包解压到您选择的目录中。
  • 参考下载部分获取Tiny Dream源代码以及预训练模型和资源的副本。

嵌入Tiny-Dream

  • Tiny Dream源代码仅包含两个头文件,即tinydream.hppstb_image_write.h
  • 您只需要将这两个C/C++头文件放入您的源代码目录中,然后如下方伪C++代码所示实例化一个新的tinyDream对象:
#include "tinydream.hpp"
/*
* 主入口点。唯一必需的参数是正向提示词。
* 不过,强烈建议也传入负向提示词(用逗号分隔的词语)。
* 
* 我们建议您尝试不同的种子值和步数,
* 以达到理想的结果。
* 
* ./tinydream "正向提示词" ["负向提示词"] [种子值] [步数]
*/
int main(int argc, char *argv[]) 
{
	tinyDream td; // 栈上分配的tinyDream对象
// 显示库当前的推理引擎、版本号和版权声明
std::cout << tinyDream::about() << std::endl;

// 至少需要通过命令行提供一个正面提示
if (argc < 2) {
    std::cout << "缺少正面(可能还有负面)提示:请描述你想要生成的内容..." << std::endl;
    std::cout << "提示示例:" << std::endl;
    // 内置正面/负面提示的示例
    auto prompts = tinyDream::promptExample();
    std::cout << "\t正面提示:" << prompts.first << std::endl;
    std::cout << "\t负面提示:" << prompts.second << std::endl;
    return -1;
}

// 注册负责处理推理过程中生成的日志消息的回调函数
td.setLogCallback(logCallback, nullptr);

// 可选:如果预训练模型不在可执行文件所在目录,请设置资源路径
// Tiny-Dream资源可以从以下地址下载:https://pixlab.io/tiny-dream#downloads
td.setAssetsPath("/path/to/tinydream/assets"); // 如果资源位于可执行文件所在目录,请删除或注释此行

// 可选:为每个新生成的图像名称设置前缀
td.setImageOutputPrefix("tinydream-");

// 可选:设置生成图像的存储目录
td.setImageOutputPath("/home/photos/");

int seedMax = 90;
if (argc > 3) {
    /*
    * Stable Diffusion中的种子是用于初始化生成过程的数字。
    * 控制种子可以帮助你生成可重复的图像,实验其他参数,或提示变化。
    */
    seedMax = std::atoi(argv[3]);
}
int step = 30;
if (argc > 4) {
    /*
    * 调整Stable Diffusion的推理步骤:使用的步骤越多,
    * 质量越好,但不应将步骤设置得尽可能高。
    * 大约30个采样步骤(默认值)通常足以生成高质量图像。
    */
    step = std::atoi(argv[4]);
}

/*
* 用户提供的提示 - 生成符合输入条件的图像。
* 
* 正面提示(必需):描述你想要生成的内容(逗号分隔的词语)。
* 负面提示(可选):描述你不想看到的内容(逗号分隔的词语)。
*/
std::string positivePrompt{ argv[1] };
std::string negativePrompt{ "" };
if (argc > 2) {
    negativePrompt = std::string{ argv[2] };
}

/*
* 最后,运行Stable Diffusion进行推理
* 
* 之前注册的日志消费者回调函数应该很快就会收到
* 推理过程中生成的所有日志消息(包括错误,如果有的话)。
* 
* 关于tinyDream::dream()方法所需参数的说明,
* 请参考官方文档:https://pixlab.io/tiny-dream#tiny-dream-method
*/
for (int seed = 1; seed < seedMax; seed++) {
    std::string outputImagePath;

    td.dream(
        positivePrompt, 
        negativePrompt, 
        outputImagePath, 
        true, /* 如果你想要512x512像素的输出而不是2048x2048的输出,请设置为false */
        seed,
        step
    );
}
// 你不需要每次都通过std::cout手动显示生成的图像路径
// 因为提供的日志回调应该已经完成了这项工作。
std::cout << "输出图像位置: " << outputImagePath << std::endl; // 如果太繁琐可以取消注释
}
return 0;
}

学习基础知识(C++ API)

构建Tiny-Dream

  • 从源代码构建Tiny-Dream需要现代的C++17编译器,如GCC 7或更高版本、Clang或Microsoft Visual Studio(MSVC)。
  • 你还需要链接到默认的后端张量库以生成可执行文件。
  • 在此版本中,NCNN 是默认的张量库。在我们的路线图中,我们计划放弃ncnn,转而使用更轻量级的张量库,如SODGGML,重点关注CPU效率。
  • 或者,你可以依赖构建管理器(如CMAKE)来为你构建可执行文件。Tiny-Dream仓库已经包含了从源代码构建可执行文件所需的必要CMAKE模板。
  • 下面展示了一个不依赖外部构建管理器生成高度优化可执行文件的示例:
``` git clone https://github.com/symisc/tiny-dream.git cd tiny-dream g++ -o tinydream boilerplate.cpp -funsafe-math-optimizations -Ofast -flto=auto -funroll-all-loops -pipe -march=native -std=c++17 -Wall -Wextra `pkg-config --cflags --libs ncnn` -lstdc++ -pthread -Wl -flto -fopt-info-vec-optimized ./tinydream "金字塔、沙漠、棕榈树、河流、(风景)、(高质量)" ```

获取预训练模型和资源

  • 一旦编译完可执行文件,你需要让Tiny Dream的预训练模型和资源路径可被你的可执行文件访问
  • Tiny Dream资源包含tinyDream::dream()方法进行稳定扩散推理所需的所有预训练模型(本版本超过2GB)。
  • 你可以从PixLab网站的下载部分下载预训练模型。
  • 下载后,将资源ZIP压缩包解压到你选择的目录(通常是可执行文件所在的目录),并通过tinyDream::setAssetsPath()或Tiny Dream的构造函数设置完整路径。

继续阅读C++ API参考指南

Tiny Dream C++接口详细说明了Tiny Dream类导出的各种方法的规格。一旦读者理解了Tiny Dream的基本操作原理,该文档应该可以作为参考指南。

待办事项和路线图 🔥

随着我们继续开发和改进Tiny Dream,我们计划了一系列令人兴奋的未来附加功能和增强功能。请参阅pixlab.io/tiny-dream的路线图页面或PixLab博客以获取完整的待办事项列表和正在进行的进展...

  • 将张量库迁移到非臃肿的库,如SODGGML,专注于CPU性能
  • 为Tiny Dream提供一个使用Dear imGUI实现的跨平台GUI
  • 一旦未来的张量库(SOD或GGML)移植到WASM,提供该库的Web-Assembly版本。
  • 输出SVG和易于修改的格式(可能是PSD),而不是静态PNG。
  • 提供一个Android概念验证展示APK。

官方文档和资源

相关项目 🔥

你可能会发现以下由PixLab | Symisc Systems开发和维护的生产就绪项目很有用:

  • SOD - 一个嵌入式、无依赖的计算机视觉C/C++库。
  • FACEIO - 跨浏览器、无密码的面部认证框架。
  • PixLab Annotate - 在线图像标注、标签和分割工具。
  • ASCII Art - 实时ASCII艺术渲染C语言库。
  • UnQLite - 一个嵌入式、支持事务的键值数据库引擎。
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号