tiny-dream

tiny-dream

轻量级 Stable Diffusion C++ 推理库

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

Tiny DreamStable DiffusionC++嵌入式图像生成Github开源项目
<h1 align="center">微梦境<br><br>一个嵌入式、仅头文件的稳定扩散推理C++库<br><a href="https://pixlab.io/tiny-dream">pixlab.io/tiny-dream</a></h1>

td_screen_website

<h5><em>最新动态</em> 🔥</h5> <ul> <li><strong>微梦境 1.7.5 版本<a href="https://github.com/symisc/tiny-dream/releases/tag/1.7.5">已发布</a> - <a href="https://pixlab.io/tiny-dream">立即开始</a></strong>。</li> </ul>

API文档 依赖 许可证

<h2 id="tiny-dream">介绍PixLab的Tiny Dream</h2> <p><a href="https://pixlab.io/tiny-dream" target="_blank">Tiny Dream</a>是一个仅包含头文件、无依赖、<strong>部分未经审查的、用C++编写的Stable Diffusion实现</strong>,主要专注于CPU效率和较小的内存占用。<strong>Tiny Dream</strong>在普通消费级硬件上运行速度<a href="https://pixlab.io/tiny-dream#features">相当快</a>,<a href="https://pixlab.io/tiny-dream#features">只需要</a><strong>1.7 ~ 5.5 GB的RAM</strong>即可执行,不强制要求Nvidia GPU,并且<strong>设计用于<a href="https://pixlab.io/tiny-dream#getting-started">嵌入</a>更大的代码库(宿主程序)中,提供易于使用的<a href="https://pixlab.io/tiny-dream#cpp-api">C++ API</a></strong>。其可能性几乎是无限的,或者至少延伸到Stable Diffusion潜在流形的边界。</p> <h2 id="td-features">特性 🔥</h2> <em>完整的特性列表,请参阅<a href="https://pixlab.io/tiny-dream#features" target="_blank"><strong>此处</strong></a>的官方文档。</em> <br><br> <ul> <li><strong>无OpenCV依赖</strong>:仅需优秀的<a href="https://github.com/nothings/stb/" target="_blank">stb <em class="ti ti-new-window"></em></a>单头文件、公共领域C库中的<font face="courier"><a href="https://github.com/nothings/stb/blob/master/stb_image_write.h" target="_blank">stb_image_write.h</a></font>用于将图像保存到磁盘。</li> <li><strong>运行Stable Diffusion推理时<a href="https://pixlab.io/tiny-dream#features" target="_blank">内存占用</a>最小</strong>。</li> <li><strong>易于<a href="https://pixlab.io/tiny-dream#getting-started" target="_blank">集成到现有代码库</strong>:只需将<font face="courier"><em>tinydream.hpp</em></font>和<font face="courier"><em>stb_image_write.h</em></font>以及<a href="https://pixlab.io/tiny-dream#downloads"><strong>预训练模型和资源</strong></a>添加到您的源代码树中。</li> <li><strong>在Intel/AMD CPU上速度相当快(<a href="https://pixlab.io/tiny-dream#bench">基准测试</a>)</strong>:使用TBB线程和SSE/AVX矢量化。</li> <li><strong>支持<a href="https://github.com/xinntao/Real-ESRGAN" target="_blank">Real-ESRGAN</a>,一个超分辨率网络放大器</strong>。</li> <li><strong>完全支持词语优先级</strong>:指示模型注意并<strong>给予更高优先级</strong>的词语(<em>关键词</em>)用括号<em><strong>()</strong></em>包围。</li> <li><strong>支持输出元数据</strong>:将元信息链接到输出图像,如<em>版权声明</em>、<em>注释</em>或任何其他您希望与图像关联的元数据。</li> <li><strong>支持Stable Diffusion额外参数</strong>:调整<a href="https://pixlab.io/tiny-dream#tiny-dream-method">种子调整大小</a>和<a href="https://pixlab.io/tiny-dream#tiny-dream-method">引导比例</a>。</li> </ul> <h2 id="td-start">开始使用Tiny-Dream 🔥</h2> <p><strong>将Tiny Dream集成到您现有的代码库中非常简单</strong>。以下是无需大量繁琐的阅读和配置即可完成的操作:</p> <h4>下载Tiny-Dream</h4> <ul> <li><a href="https://github.com/symisc/tiny-dream/releases">下载</a>Tiny Dream的最新公开发布版本,并将包解压到您选择的目录中。</li> <li>参考<a href="https://pixlab.io/tiny-dream#downloads">下载部分</a>获取Tiny Dream源代码以及<strong>预训练模型和资源</strong>的副本。</li> </ul> <h4>嵌入Tiny-Dream</h4> <ul> <li>Tiny Dream源代码<a href="https://pixlab.io/tiny-dream#downloads">仅包含</a><strong>两个头文件</strong>,即<font face="courier"><strong>tinydream.hpp</strong></font>和<font face="courier"><strong>stb_image_write.h</strong></font>。</li> <li>您只需要将这两个C/C++头文件放入您的源代码目录中,然后如下方伪C++代码所示<a href="https://pixlab.io/tiny-dream#tiny-dream-constructor">实例化</a>一个新的<font face="courier">tinyDream</font>对象:</li> </ul>
#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;
}
<h4>学习基础知识(C++ API)</h4> <ul> <li>上面的代码应该是不言自明的,对于普通的C++程序员来说很容易理解。嵌入Tiny Dream的典型应用程序的<strong>完整C++集成代码</strong>位于:<a href="https://pixlab.io/tiny-dream#code-gist">pixlab.io/tiny-dream#code-gist</a>。</li> <li>在此版本中,库公开了一个名为<code>tinyDream</code>的单一类,具有以下导出方法: <ul> <li><a href="https://pixlab.io/tiny-dream#tiny-dream-constructor">tinyDream::tinyDream()</a> - <em>构造函数</em></li> <li><a href="https://pixlab.io/tiny-dream#tiny-dream-method"><strong>tinyDream::dream()</strong></a> - <em>稳定扩散推理</em></li> <li><a href="https://pixlab.io/tiny-dream#set-img-output-method">tinyDream::setImageOutputPath()</a></li> <li><a href="https://pixlab.io/tiny-dream#set-img-output-prefix">tinyDream::setImageOutputPrefix()</a></li> <li><a href="https://pixlab.io/tiny-dream#set-log-callback">tinyDream::setLogCallback()</a></li> <li><a href="https://pixlab.io/tiny-dream#set-assets-path-method">tinyDream::setAssetsPath()</a></li> <li><a href="https://pixlab.io/tiny-dream#prompt-example-method">tinyDream::promptExample()</a></li> <li><a href="https://pixlab.io/tiny-dream#about-method">tinyDream::about()</a></li> </ul> </li> <li><strong>上述方法的详细分步集成指南和调用逻辑位于:<a href="https://pixlab.io/tiny-dream#step-by-step-cpp">pixlab.io/tiny-dream#step-by-step-cpp</a></strong>。</li> </ul> <h4>构建Tiny-Dream</h4> <ul> <li>从源代码构建Tiny-Dream需要现代的C++17编译器,如GCC 7或更高版本、Clang或Microsoft Visual Studio(MSVC)。</li> <li>你还<strong>需要链接到默认的后端张量库</strong>以生成可执行文件。</li> <li>在此版本中,<a href="https://github.com/Tencent/ncnn/wiki/how-to-build" target="_blank">NCNN <em class="ti ti-new-window"></em></a>是默认的张量库。在我们的<a href="#roadmap">路线图</a>中,我们计划放弃<font face="courier">ncnn</font>,转而使用更轻量级的张量库,如<a href="https://sod.pixlab.io" target="_blank">SOD</a>或<a href="https://github.com/ggerganov/ggml " target="_blank">GGML</a>,重点关注CPU效率</strong>。</li> <li>或者,你可以依赖构建管理器(如CMAKE)来为你构建可执行文件。Tiny-Dream仓库已经包含了从源代码构建可执行文件所需的必要CMAKE模板。</li> <li>下面展示了一个不依赖外部构建管理器生成高度优化可执行文件的示例:</li> </ul> ``` 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 "金字塔、沙漠、棕榈树、河流、(风景)、(高质量)" ``` <h4>获取预训练模型和资源</h4> <ul> <li>一旦编译完可执行文件,<strong>你需要让Tiny Dream的<a href="https://pixlab.io/tiny-dream#downloads">预训练模型和资源</a>路径可被你的可执行文件访问</strong>。</li> <li>Tiny Dream资源包含<a href="https://pixlab.io/tiny-dream#tiny-dream-method"><font face="courier">tinyDream::dream()</font></a>方法进行稳定扩散推理所需的所有预训练模型(<strong>本版本超过2GB</strong>)。</li> <li>你可以从<a href="https://pixlab.io/">PixLab</a>网站的<a href="https://pixlab.io/tiny-dream#downloads">下载</a>部分下载预训练模型。</li> <li>下载后,将资源ZIP压缩包解压到你选择的目录(通常是可执行文件所在的目录),并通过<font face="courier"><a href="https://pixlab.io/tiny-dream#set-assets-path-method">tinyDream::setAssetsPath()</a></font>或Tiny Dream的<a href="https://pixlab.io/tiny-dream#tiny-dream-constructor">构造函数</a>设置完整路径。</li> </ul> <h4>继续阅读C++ API参考指南</h4> <p>Tiny Dream <a href="https://pixlab.io/tiny-dream#cpp-api">C++接口</a>详细说明了Tiny Dream类导出的各种方法的规格。一旦读者理解了<strong>Tiny Dream</strong>的基本操作原理,该<a href="https://pixlab.io/tiny-dream##cpp-api">文档</a>应该可以作为参考指南。</p> <h2 id="roadmap">待办事项和路线图 🔥</h2> <p>随着我们继续开发和改进Tiny Dream,我们计划了一系列令人兴奋的未来附加功能和增强功能。请参阅<a href="https://pixlab.io/tiny-dream#roadmap">pixlab.io/tiny-dream</a>的路线图页面或<a href="https://blog.pixlab.io">PixLab博客</a>以获取完整的待办事项列表和正在进行的进展...</p> <ul> <li><strong>将张量库迁移到非臃肿的库,如<a href="https://sod.pixlab.io/">SOD</a>或<a href="https://github.com/ggerganov/ggml">GGML</a>,专注于CPU性能</strong>。</li> <li><strong>为Tiny Dream提供一个使用<a href="https://github.com/ocornut/imgui">Dear imGUI</a>实现的跨平台GUI</strong>。</li> <li>一旦未来的张量库(SOD或GGML)移植到WASM,提供该库的Web-Assembly版本。</li> <li>输出SVG和易于修改的格式(可能是PSD),而不是静态PNG。</li> <li>提供一个Android概念验证展示APK。</li> </ul> <h2>官方文档和资源</h2> <table class="table"> <tbody> <tr> <th><a href="https://pixlab.io/tiny-dream#downloads">预训练模型和资源下载</a></th> <td><a href="https://pixlab.io/tiny-dream#getting-started">入门指南</a></th> <td><a href="https://pixlab.io/tiny-dream#license">许可证</a></td> <td><a href="https://pixlab.io/tiny-dream#cpp-api">C++ API参考指南</a></td> <td><a href="https://pixlab.io/tiny-dream#roadmap">项目路线图</a></td> <td><a href="https://pixlab.io/tiny-dream#features">特性</a></td> </tr> </tbody> </table> <h2 id="td-projects">相关项目 🔥</h2> <p>你可能会发现以下由<a href="https://pixlab.io">PixLab</a> | <a href="https://symisc.net">Symisc Systems</a>开发和维护的生产就绪项目很有用:</p> <ul> <li><a href="https://sod.pixlab.io">SOD</a> - 一个嵌入式、无依赖的计算机视觉C/C++库。</li> <li><a href="https://faceio.net">FACEIO</a> - 跨浏览器、无密码的面部认证框架。</li> <li><a href="https://annotate.pixlab.io/">PixLab Annotate</a> - 在线图像标注、标签和分割工具。</li> <li><a href="https://pixlab.io/art">ASCII Art</a> - 实时ASCII艺术渲染C语言库。</li> <li><a href="https://unqlite.org">UnQLite</a> - 一个嵌入式、支持事务的键值数据库引擎。</li> </ul>

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多