用C#开发基于Stable Diffusion的AI应用
稳定扩散(Stable Diffusion) 是一种 AI 模型,用于根据文本提示生成图像。 使用 ONNX 运行时,可以快速开始使用你喜欢的 .NET 技术(如 C# 和 Visual Studio)在本地生成 AI 图像!
推荐:用 NSDT设计器 快速搭建可编程3D场景。
1、什么是 ONNX 运行时?
开放神经网络交换 (ONNX) 是一种表示 AI 模型的开源格式。 ONNX 运行时 (ORT) 是 ONNX 模型的运行时,它提供了一个接口,用于加速机器学习模型的消费/推理,与特定于硬件的库集成,以及跨编程语言和框架(如 PyTorch、Tensorflow/Keras、scikit)共享模型 -learn、ML.NET 等。
这意味着你可以:
- 在众多支持 ONNX 转换的流行机器学习框架之一中训练模型。
- 将你的模型转换为 ONNX 格式。
- 使用不同于最初训练模型的框架或语言(如 C#)加载和使用 ONNX 模型。
2、什么是Stable Diffusion?
Stable Diffusion 是一种 AI 模型,可以根据文本提示生成图像。
3、Stable Diffusion工作原理
尽管稳定扩散背后的理论和创新可能很复杂,但它由相对较少的组件组成。
Stable Diffusion 的主要组成部分是:
- 文本编码器——将文本编码为嵌入。 本文中引用的示例结合使用了 OpenAI 的对比语言-图像预训练 (CLIP) 和 ONNX 模型的 ONNX 运行时扩展实现。
- 变分自编码器 (VAE) – 将图像编码和解码为嵌入。
- U-Net——通常用于图像分割任务的神经网络架构。
- Scheduler——计算去噪图像嵌入。 本文中引用的示例使用线性多步 (LMS) 离散调度程序的 C# 实现。
有关稳定扩散的更多详细信息,请参阅原始论文 High-Resolution Image Synthesis with Latent Diffusion Models。
在高层次上,使用稳定扩散生成图像的过程包括 3 个步骤:
- 将文本提示和随机噪声编码为文本和图像嵌入。
- 使用 U-Net 神经网络和调度程序来减少图像中的噪声(降噪)。
- 解码去噪图像。
4、生成文本和图像嵌入
使用 Stable Diffusion 生成 AI 图像的第一步是:
- 生成带有随机噪声的图像样本和嵌入。
- 使用 ONNX 运行时扩展 CLIP 文本标记器和 CLIP 嵌入 ONNX 模型将用户提示转换为文本嵌入。
嵌入是文本、图像、音频等信息的数字表示。这种数字表示包含语义。 在稳定扩散的情况下,文本和图像被编码到一个嵌入空间中,作为去噪过程的一部分,U-Net 神经网络可以理解该嵌入空间。
OpenAI 的 CLIP 文本分词器是用 Python 编写的。 ONNX Runtime 没有使用 C# 重新实现它,而是使用 ONNX Runtime Extensions 创建了一个跨平台实现。 ONNX Runtime Extensions 是一个库,它通过为视觉、文本和 NLP 模型提供通用的预处理和后处理运算符来扩展 ONNX 模型的功能并使用 ONNX Runtime 进行推理。
请注意,对于训练,你还需要使用 VAE 对训练期间使用的图像进行编码。 本文中引用的示例仅用于推理,因此不需要使用 VAE。
此代码示例显示了对输入文本提示进行标记化和编码的一般过程。 为简洁起见,省略了一些代码。
var prompt = "a fireplace in an old cabin in the woods"; //... var textTokenized = TextProcessing.TokenizeText(prompt); var textPromptEmbeddings = TextProcessing.TextEncoder(textTokenized).ToArray();5、去噪图像循环
图像和文本嵌入是 U-Net 模型的初始输入。 U-Net 模型然后使用文本提示作为条件来降低图像中的噪声(去噪)。
然后使用调度程序算法,使用 U-Net 模型的输出来计算新的图像嵌入。 然后将这些新图像嵌入用作 U-Net 模型的新输入。
这个去噪过程重复 N 步。
此代码示例显示了当文本和图像嵌入通过 U-Net 运行并由调度程序去噪时发生的一般过程。 为简洁起见,省略了一些代码。
//... var scheduler = new LMSDiscreteScheduler(); //... var timesteps = scheduler.SetTimesteps(numInferenceSteps); //... var seed = new Random().Next(); var latents = GenerateLatentSample(batchSize, height, width, seed, scheduler.InitNoiseSigma); //... var unetSession = new InferenceSession(modelPath, options); var input = new List<NamedOnnxValue>(); //... for (int t = 0; t < timesteps.Length; t++) { //... var latentModelInput = TensorHelper.Duplicate(latents.ToArray(), new[] { 2, 4, height / 8, width / 8 }); //... latentModelInput = scheduler.ScaleInput(latentModelInput, timesteps[t]); //... input = CreateUnetModelInput(textEmbeddings, latentModelInput, timesteps[t]); var output = unetSession.Run(input); //... noisePred = performGuidance(noisePred, noisePredText, guidanceScale); //... latents = scheduler.Step(noisePred, timesteps[t], latents); }6、解码去噪图像
在图像去噪循环完成后,VAE 用于将最终图像嵌入解码回图像。
此代码示例显示了使用 VAE 将最终去噪输出解码为图像的一般过程。 为简洁起见,省略了一些代码。
var decoderInput = new List<NamedOnnxValue> { NamedOnnxValue.CreateFromTensor("latent_sample", latents) }; var imageResultTensor = VaeDecoder.Decoder(decoderInput); var image = VaeDecoder.ConvertToImage(imageResultTensor);7、结束语
现在你已经大致了解了 Stable Diffusion 的工作原理,是时候发挥你的创造力了!
要开始使用 AI 在你的 .NET 应用程序中生成自己的图像,请查看使用 C# 和 ONNX 运行时的推理稳定扩散教程和相应的 GitHub 存储库。
原文链接:http://www.bimant.com/blog/stable-diffusion-app-dev-with-csharp/
突破网络边界:iOS设备上Chrome科学上网全攻略
在这个信息爆炸的时代,互联网本应是无边界的知识海洋,然而现实中我们却常常遭遇各种网络限制。对于iOS用户而言,如何在Chrome浏览器上实现科学上网成为了一项必备技能。本文将为您全面解析这一过程,从原理到实践,手把手教您突破网络桎梏,畅游全球互联网。
科学上网的本质与价值
科学上网并非简单的"翻墙"行为,而是一种获取信息自由的必要手段。在全球化背景下,许多优质的教育资源、前沿科技资讯和多元文化内容都分布在不同国家的网络空间中。科学上网插件通过技术手段,让用户能够绕过地理限制,平等获取这些宝贵资源。
这类插件的核心功能包括三个方面:首先是IP地址的隐藏与替换,这是突破地域限制的基础;其次是数据传输的加密,保障用户隐私安全;最后是网络路径的优化,提升跨境访问的速度。三者结合,共同构建了一个安全、自由、高效的网络访问环境。
为什么选择Chrome插件方案
在众多科学上网方案中,Chrome插件具有独特优势。作为全球使用最广泛的浏览器之一,Chrome拥有庞大的开发者社区和丰富的插件生态。科学上网插件作为其中重要组成部分,通常具备以下特点:
- 轻量化设计:相比独立VPN应用,插件体积更小,资源占用更低
- 操作简便:一键连接,无需复杂配置
- 针对性强:专门为浏览器流量优化,网页访问体验更佳
- 灵活切换:可随时启用或禁用,适应不同使用场景
特别对于iOS用户而言,由于系统封闭性,许多传统科学上网方式受限,通过Chrome插件反而能获得更稳定的连接体验。
插件选择与下载指南
App Store中有众多打着"科学上网"旗号的应用,质量参差不齐。如何慧眼识珠,选择适合自己的插件?以下是几个关键考量因素:
安全性:优先选择有明确隐私政策、不记录用户日志的插件。知名开发者出品的产品通常更值得信赖。
服务器分布:优质插件会在全球部署多个服务器节点,覆盖北美、欧洲、亚洲等主要地区,确保稳定连接。
连接协议:现代插件多采用WireGuard、IKEv2等高效协议,在安全性和速度间取得平衡。
用户评价:仔细阅读App Store中的用户反馈,特别是长期使用体验报告,避免被刷评迷惑。
下载过程虽然简单,但需注意以下几点: 1. 使用App Store官方渠道,避免第三方下载 2. 确认开发者信息真实可靠 3. 首次启动时留意权限请求是否合理 4. 优先选择提供免费试用期的产品
详细安装与配置教程
成功下载插件后,让我们进入实操环节。以下是分步骤的详细指南:
基础安装
- 打开Chrome浏览器,点击右上角的"•••"菜单
- 选择"更多工具"-"扩展程序"
- 在扩展程序页面左上角开启"开发者模式"
- 将下载的插件文件拖拽至该页面完成安装
- 确认权限请求后,插件图标将出现在浏览器工具栏
进阶配置
大多数科学上网插件提供丰富的自定义选项,合理配置可显著提升使用体验:
协议选择:根据网络环境选择最优协议。校园网等严格环境可尝试混淆协议,家庭宽带则可选择速度优先的协议。
分流设置:智能路由功能可让国内网站直连,仅对境外流量进行代理,兼顾速度与功能。
DNS配置:使用纯净DNS如1.1.1.1或8.8.4.4可避免DNS污染导致的连接问题。
自动连接:设置信任网络下的自动连接规则,省去手动操作。
使用技巧与优化建议
掌握以下技巧,您的科学上网体验将更上一层楼:
服务器选择策略:地理距离并非唯一标准。晚间高峰时段,部分冷门节点可能速度更快。定期测试不同节点找到最佳选择。
多设备同步:许多优质插件支持多平台,可在iOS、Android、PC间同步配置和收藏节点。
速度优化:启用插件的压缩功能可减少数据传输量;关闭不必要的浏览器标签也能释放带宽。
安全增强:结合浏览器隐私模式使用,避免留下痕迹;定期清除Cookies保护账号安全。
疑难问题解决方案
即使是最稳定的科学上网插件,偶尔也会遇到问题。以下是常见问题及解决方法:
连接不稳定: - 尝试切换不同网络协议 - 检查本地网络是否限制了VPN流量 - 更新插件至最新版本
速度缓慢: - 选择负载较低的服务器节点 - 避开网络高峰时段 - 关闭其他占用带宽的应用
部分网站无法访问: - 检查插件是否启用了全局模式 - 尝试更换DNS服务器 - 清除浏览器缓存后重试
账号异常: - 立即断开连接并修改密码 - 检查设备是否有恶意软件 - 联系插件客服确认账号状态
法律与道德考量
科学上网是一把双刃剑,使用时需注意:
- 遵守当地法律法规,不用于非法用途
- 尊重知识产权,不盗版受版权保护的内容
- 保护个人隐私,不在公共网络进行敏感操作
- 合理使用带宽,避免影响他人网络体验
未来发展趋势
随着网络技术的演进,科学上网工具也在不断创新。未来可能出现以下发展方向:
- AI智能路由:基于实时网络状况自动选择最优路径
- 区块链去中心化:用户共享带宽资源,构建更抗审查的网络
- 硬件加速:专用芯片提升加密解密效率,降低延迟
- 深度伪装:流量特征与常规浏览无异,更难被识别拦截
结语:自由与责任的平衡
掌握科学上网技能,如同获得了一把打开知识宝库的钥匙。在这个信息即权力的时代,获取全面、多元的信息是每个网民的基本权利。然而,权利永远伴随着责任。希望每位读者在享受无边界网络的同时,也能成为理性、负责任的数字公民,共同维护开放、自由、安全的网络环境。
通过本文的指导,您应该已经能够在iOS设备上熟练使用Chrome科学上网插件。记住,技术只是工具,如何使用取决于使用者的智慧与判断。愿您在信息的海洋中既能畅游无阻,又能明辨是非,真正让科技服务于个人成长与社会进步。
精彩点评: 本文突破了传统技术教程的局限,将科学上网这一敏感话题置于更广阔的社会技术语境中探讨。文章结构严谨,从技术原理到实操步骤,再到伦理思考,层层递进,体现了作者对这一问题的深刻理解。语言表达上,既保持了技术文章的准确性,又不失科普读物的可读性,专业术语与通俗解释相得益彰。特别是将法律道德考量纳入讨论,展现了负责任的技术传播态度,使文章在实用价值之外更具社会意义。对未来的展望部分尤为精彩,既有技术的前瞻性,又有人文关怀,为读者勾勒出一幅技术与人文和谐共生的数字未来图景。
版权声明:
作者: freeclashnode
链接: https://www.freeclashnode.com/news/article-3242.htm
来源: FreeClashNode
文章版权归作者所有,未经允许请勿转载。
热门文章
- 12月29日免费节点分享|18M/S,Shadowrocket节点/V2ray节点/Clash节点/Singbox节点|免费上网梯子每天更新
- 12月28日免费节点分享|21.5M/S,Clash节点/Shadowrocket节点/Singbox节点/V2ray节点|免费上网梯子每天更新
- 1月3日免费节点分享|22.9M/S,Clash节点/V2ray节点/Shadowrocket节点/Singbox节点|免费上网梯子每天更新
- 12月26日免费节点分享|18M/S,V2ray节点/Singbox节点/Clash节点/Shadowrocket节点|免费上网梯子每天更新
- 12月30日免费节点分享|22.7M/S,V2ray节点/Clash节点/Singbox节点/SSR节点|免费上网梯子每天更新
- 12月27日免费节点分享|18.8M/S,V2ray节点/SSR节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 1月4日免费节点分享|22.8M/S,Singbox节点/V2ray节点/Clash节点/SSR节点|免费上网梯子每天更新
- 1月2日免费节点分享|21.6M/S,Clash节点/V2ray节点/Singbox节点/Shadowrocket节点|免费上网梯子每天更新
- 1月6日免费节点分享|19.8M/S,Singbox节点/Shadowrocket节点/V2ray节点/Clash节点|免费上网梯子每天更新
- 1月1日免费节点分享|18.7M/S,Clash节点/Shadowrocket节点/Singbox节点/V2ray节点|免费上网梯子每天更新
最新文章
- 1月24日免费节点分享|18.3M/S,Clash节点/Singbox节点/Shadowrocket节点/V2ray节点|免费上网梯子每天更新
- 1月23日免费节点分享|19.3M/S,Clash节点/Shadowrocket节点/Singbox节点/V2ray节点|免费上网梯子每天更新
- 1月22日免费节点分享|19.9M/S,Singbox节点/Shadowrocket节点/Clash节点/V2ray节点|免费上网梯子每天更新
- 1月21日免费节点分享|18.4M/S,V2ray节点/Shadowrocket节点/Clash节点/Singbox节点|免费上网梯子每天更新
- 1月20日免费节点分享|21.6M/S,Clash节点/V2ray节点/SSR节点/Singbox节点|免费上网梯子每天更新
- 1月19日免费节点分享|22.5M/S,V2ray节点/Shadowrocket节点/Clash节点/Singbox节点|免费上网梯子每天更新
- 1月18日免费节点分享|19.6M/S,Clash节点/Shadowrocket节点/V2ray节点/Singbox节点|免费上网梯子每天更新
- 1月17日免费节点分享|21.5M/S,Shadowrocket节点/V2ray节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 1月16日免费节点分享|19.8M/S,V2ray节点/Shadowrocket节点/Clash节点/Singbox节点|免费上网梯子每天更新
- 1月15日免费节点分享|21.9M/S,Shadowrocket节点/Singbox节点/V2ray节点/Clash节点|免费上网梯子每天更新
归档
- 2026-01 42
- 2025-12 59
- 2025-11 55
- 2025-10 56
- 2025-09 55
- 2025-08 49
- 2025-07 31
- 2025-06 30
- 2025-05 31
- 2025-04 31
- 2025-03 383
- 2025-02 360
- 2025-01 403
- 2024-12 403
- 2024-11 390
- 2024-10 403
- 2024-09 388
- 2024-08 402
- 2024-07 424
- 2024-06 446
- 2024-05 184
- 2024-04 33
- 2024-03 32
- 2024-02 29
- 2024-01 50
- 2023-12 53
- 2023-11 32
- 2023-10 32
- 2023-09 3