1.腾讯T2I-adapter源码分析(1)-运行源码跑训练
2.腾讯T2I-adapter源码分析(3)-训练源码分析
3.EasyLogger源码学习笔记(5)
4.源代码审计怎么做?有哪些常用工具?
5.四款源代码扫描工具
6.腾讯T2I-adapter源码分析(2)-推理源码分析
腾讯T2I-adapter源码分析(1)-运行源码跑训练
稳定扩散、真人真人midjourney等AI绘图技术,可控可控为人们带来了令人惊叹的源码源码效果,不禁让人感叹技术发展的下载日新月异。然而,真人真人AI绘图的可控可控服装溯源码可控性一直不是很好,通过prompt描述词来操控图像很难做到随心所欲。源码源码为了使AI绘制的下载图像更具可控性,Controlnet、真人真人T2I-adapter等技术应运而生。可控可控本系列文章将从T2I-adapter的源码源码源码出发,分析其实现方法。下载
本篇是真人真人第一篇,主要介绍源码的可控可控运行方法,后续两篇将以深度图为例,源码源码分别分析推理部分和训练部分的代码。分析T2I-Adapter,也是为了继续研究我一直在研究的课题:“AI生成同一人物不同动作”,例如:罗培羽:stable-diffusion生成同一人物不同动作的尝试(多姿势图),Controlnet、T2I-adapter给了我一些灵感,后续将进行尝试。
T2I-Adapter论文地址如下,它与controlnet类似,都是在原模型增加一个旁路,然后对推理结果求和。
T2I-Adapter和controlnet有两个主要的不同点,从图中可见,其一是在unet的编码阶段增加参数,而controlnet主要是解码阶段;其二是controlnet复制unit的上半部结构,而T2I-Adapter使用不同的模型结构。由于采用较小的模型,因此T2I-Adapter的模型较小,默认下占用M左右,而controlnet模型一般要5G空间。
首先确保机器上装有3.6版本以上python,然后把代码clone下来。随后安装依赖项,打开requirements.txt,可以看到依赖项的内容。然后下载示例,下载的htmlcss实战源码会放到examples目录下。接着下载sd模型到model目录下,再下载T2I-Adapter的模型到目录下,模型可以按需到huggingface.co/TencentA...下载。这里我下载了depth和openpose。sd模型除了上述的v1-5,也还下载了sd-v1-4.ckpt。
根据文档,尝试运行一个由深度图生成的例子,下图的左侧是深度图,提示语是"desk, best quality, extremely detailed",右侧是生成出来的。运行过程比较艰辛,一开始在一台8G显存的服务器上跑,显存不够;重新搭环境在一台G显存的服务器上跑,还是不够;最后用一台G显存的服务器,终于运行起来了。
接下来尝试跑openpose的例子,下图左侧是骨架图,提示词为"Iron man, high-quality, high-res",右侧是生成的图像。
既然能跑推理,那么尝试跑训练。为了后续修改代码运行,目标是准备一点点数据把训练代码跑起来,至于训练的效果不是当前关注的。程序中也有训练的脚步,我们以训练深度图条件为例,来运行train_depth.py。
显然,习惯了,会有一些问题没法直接运行,需要先做两步工作。准备训练数据,分析代码,定位到ldm/data/dataset_depth.py,反推它的数据集结构,然后准备对应数据。先创建文件datasets/laion_depth_meta_v1.txt,用于存放数据文件的地址,由于只是测试,我就只添加两行。反码源码转换然后准备,图中的.png和.png是结果图,.depth.png和.depth.png是深度图,.txt和.txt是对应的文本描述。
文本描述如下,都只是为了把代码跑起来而做的简单设置。设置环境变量,由于T2I-Adapter使用多卡训练,显然我也没这个环境,因此要让它在单机上跑。而代码中也会获取一些环境变量,因此做简单的设置。
做好准备工作,可以运行程序了,出于硬件条件限制,只能把batch size设置为1。在A显卡跑了约8小时,完成,按默认的配置,模型保存experiments/train_depth/models/model_ad_.pth。那么,使用训练出来的模型试试效果,能生成如下(此处只是为了跑起来代码,用训练集来测试),验证了可以跑起来。
运行起来,但这还不够,我们还得看看代码是怎么写法,下一篇见。
PS:《直观理解AI博弈原理》是笔者写的一篇长文,从五子棋、象棋、围棋的AI演进讲起,从深度遍历、MAX-MIN剪枝再到蒙特卡罗树搜索,一步步介绍AI博弈的原理,而后引出强化学习方法,通俗易懂地介绍AlphaGo围棋、星际争霸强化学习AI、王者荣耀AI的一些强化学习要点,值得推荐。麻游源码
AUTOMATIC的webui是近期很流行的stable-diffusion应用,它集合stable-diffusion各项常用功能,还通过扩展的形式支持controlnet、lora等技术,我们也分析了它的源码实现,写了一系列文章。
腾讯T2I-adapter源码分析(3)-训练源码分析
随着stable-diffusion和midjourney等AI技术展现令人惊叹的艺术创作,人们对AI可控绘图的追求日益高涨。为提升AI图像生成的可控性,Controlnet和T2I-adapter等解决方案应运而生。系列文章将从T2I-adapter的源码出发,深入剖析其训练部分的实现原理。
本篇我们将聚焦于训练源码的解析,通过代码结构的梳理,了解T2I-Adapter的训练流程。
训练代码的运行涉及数据处理、模型加载、优化器设置以及实际训练过程。在第一部分,我们首先设置参数并加载数据,如DepthDataset,它从txt文件中读取、对应的深度图和文本描述。
在模型加载阶段,我们区分了stable-diffusion模型和adapter。stable-diffusion模型加载时,其配置与推理阶段有所差异,如增加调度器参数、提高精度、调整分辨率和训练相关参数。adapter模型的加载则遵循推理过程中的初始化方法,通过构建不同模块来实现。
训练过程中,adapter模型的关键结构包括下采样、卷积和ResnetBlock的使用,相比controlnet,T2I-adapter的参数更少,没有注意力层,这使得训练更为高效。模型放入GPU后,使用adamW优化器进行训练,html 生成源码同时设置学习率和数据保存路径。
状态恢复部分,程序会判断是否从头开始或恢复训练,设置log信息。接下来,代码进入实际的训练循环,包括条件编码、隐藏状态生成、adapter结果附加至sd模型以及adapter梯度计算。
loss函数定义在模型配置中,采用L2损失来衡量生成图像与给定时间点加噪ground truth的接近程度。训练过程中,loss计算和模型保存都在代码中明确体现。
总的来说,T2I-adapter的训练源码展示了精细的结构和参数设置,确保了AI绘画的可控性和性能。在AI艺术的探索中,每一行代码都承载着技术进步的点滴痕迹。
EasyLogger源码学习笔记(5)
在EasyLogger源码的学习中,我们了解到日志对象使用了互斥锁以确保同一时刻只有一个线程能进行操作,保证了日志管理的安全性与高效性。
对于异步输出,EasyLogger通过信号量实现了优化。当需要等待执行时,某个线程会被阻塞,以减少CPU的占用。这一特性允许用户单独设置异步输出的日志等级,提高系统的灵活性与可控性。
在文件输出时,使用了信号量集合,其中仅包含一个信号量。这一设计确保了同时只有一个线程能向文件中写入日志,避免了多线程并发写入导致的文件混乱。
日志输出的多样选择体现了EasyLogger的灵活性,无论是输出到文件还是串口,都可以根据需要配置是否采用异步输出,以适应不同的应用场景与性能需求。
此外,sem_post函数用于解锁由semby指定的信号量,执行对特定信号量的解锁操作。而semop函数则用于执行一组预先定义的信号量操作,适用于对多个信号量进行原子性操作。
在信号量集合仅包含一个信号量的情况下,使用sem_post函数进行操作可能直接替代使用semop函数。这一设计简化了信号量管理,提高了代码的可读性和效率。
源代码审计怎么做?有哪些常用工具?
源代码审计,作为发现潜在安全漏洞的有效手段,通过仔细检查源代码实现。常用工具包括静态代码分析、动态代码分析、代码审查工具等,它们能有效识别代码中的错误、不安全实践或漏洞。
在源代码审计中,正向追踪数据流与逆向溯源数据流是两种重要方法。正向追踪数据流,通过跟踪用户输入参数,直至代码逻辑,识别并审计可能存在的缺陷,构造payload尝试攻击代码。逆向溯源数据流,则从特定操作函数开始,追踪可控参数,审计逻辑缺陷,构造payload。这种方法有助于快速定位问题,要求开发者具备面向对象与面向过程编程能力,通过实践项目提升对代码的理解。
深入学习编程语言、面向对象编程及面向过程编程,是掌握源代码审计的关键。编写项目实践,能有效提升对代码的理解能力,同时对各种漏洞具备独立挖掘、利用及理解其危害的能力。通过不断学习与实践,开发者能更全面地理解代码,为源代码审计工作打下坚实基础。
四款源代码扫描工具
一、DMSCA-企业级静态源代码扫描分析服务平台
DMSCA,端玛科技的企业级静态源代码扫描分析服务平台,专注于源代码安全漏洞、质量缺陷及逻辑缺陷的识别、跟踪与修复,为软件开发与测试团队提供专业建议,助力提升软件产品的可靠性与安全性。该平台兼容国际与国内行业合规标准,基于多年静态分析技术研发成果,与国内外知名大学和专家合作,深度分析全球静态分析技术优缺点,结合当前开发语言技术现状、源代码缺陷发展趋势与市场,推出新一代源代码企业级分析方案。DMSCA解决了传统静态分析工具的误报率高与漏报问题,为中国提供自主可控的高端源代码安全和质量扫描产品,并支持国家标准(GB/T- Java、GB/T- C/C++、GB/T- C#)。
二、VeraCode静态源代码扫描分析服务平台
VeraCode是全球领先的软件安全漏洞与质量缺陷发现平台,广受数千家软件科技公司青睐。
三、Fortify Scan
Fortify SCA是一款静态、白盒软件源代码安全测试工具,运用五大主要分析引擎,全面匹配、查找软件源代码中的安全漏洞,整理报告。
四、Checkmarx
Checkmarx的CxEnterprise是一款综合的源代码安全扫描与管理方案,提供用户、角色与团队管理、权限管理等企业级源代码安全扫描与管理功能。
腾讯T2I-adapter源码分析(2)-推理源码分析
随着stable-diffusion和midjourney展示出AI绘图的惊人潜力,人们对技术进步的惊叹不已。然而,AI绘图的可控性一直是痛点,仅凭描述词控制图像并不尽如人意。为增强AI图像的可控性,Controlnet和T2I-adapter等技术应运而生。本文将通过解析T2I-adapter的推理源码,揭示其工作原理。
本文将深入剖析推理部分的代码,以便理解T2I-Adapter的实际操作。使用如下的命令行指令进行推理,如test_adapter.py,它需要指定条件类型、深度图路径、前置处理器类型、提示语、模型和缩放尺寸等参数。
在test_adapter.py中,主要分为参数读取、模型加载和推理运算三个步骤。参数读取部分包括检查支持的条件、构建提示语,以及根据输入选择前置处理。模型加载涉及stable-diffusion和adapter模型,前者通过配置加载,后者根据输入条件构造Adapter模型。
加载stable-diffusion模型时,代码引用了来自github的CompVis/stable-diffusion库,其中关键部分包括加载参数、模型配置以及UNetModel的改动。Adapter模型的构造与论文中的结构图一致,通过ResnetBlock的组合实现。
在推理过程中,先对输入进行预处理,如深度图的处理。随后,get_adapter_feature和diffusion_inference两个核心函数调用adapter模型,与stable-diffusion模型结合进行特征融合和采样。最后,DDIM采样器接收并处理adapter特征,最终生成图像。
通过以上分析,我们逐步揭示了T2I-adapter的推理机制。后续文章将探讨训练代码。在游戏开发中,AI生成游戏角色动作的应用,如AUTOMATIC,展示了这种技术的实际应用,以解决美术资源匮乏的问题。
urule pro规则引擎自主可控是不是安全可靠?
URule Pro是由上海锐道信息技术有限公司自主研发的纯Java决策引擎,其设计旨在运行于Windows、Linux、Unix等各类操作系统之上。URule Pro的独特之处在于其采用纯浏览器编辑模式的规则设计器,无需额外安装任何工具,用户仅需打开浏览器即可进行复杂规则的设计与测试,极大地简化了规则开发和管理流程。
对于"URule Pro规则引擎自主可控是不是安全可靠?"这一问题,我们可以从几个关键点进行分析。首先,URule Pro作为自主研发的决策引擎,其源代码完全掌握在开发者手中,不存在未知的代码来源或不可控的第三方组件,这为自主可控提供了坚实的底层基础。其次,纯Java开发意味着引擎的运行依赖于Java虚拟机,Java语言在安全性方面有成熟的沙箱机制和异常处理机制,能有效防止恶意代码的注入和运行。再者,URule Pro设计时考虑到了安全性,规则设计与测试流程在浏览器内进行,避免了可能存在的中间件或服务器端的安全漏洞。最后,由于URule Pro运行在各类操作系统之上,且支持多种环境,这为其在不同场景下的安全应用提供了广泛的适应性。
综上所述,URule Pro作为一款自主可控的规则引擎,通过其独特的开发模式、语言特性以及全面的安全设计,为用户提供了一个安全可靠的选择。在当前信息化快速发展的时代,选择自主可控的规则引擎对于保障数据安全、提高决策效率具有重要意义。
什么是源代码?
源代码是程序设计的核心,它指的是编写程序时使用的语言,相对于机器可以直接识别和执行的二进制代码而言。代码是一种人工设计的符号系统,用以指示计算机执行特定任务。
编程是将想法转化为代码的过程,最终形成可执行的程序。程序是按照一定逻辑执行指令的序列集合,它能完成特定功能。在早期,程序员直接编写二进制代码,但这种方式效率低下且容易出错。为了提高效率,出现了编译器,它能够将人类可读的源代码转换为机器可执行的目标代码。
源代码的形式多样,常见的如汇编语言、C、Java、Python等编程语言。这些语言都是源代码,方便人类阅读和理解。在开发软件时,源代码通常被视为商业机密,用户仅需关注最终生成的程序是否满足其需求。
开源软件是指其源代码可以公开获取和修改的软件。这种模式鼓励社区成员共同参与软件开发,促进创新和改进。开源软件和商业软件在功能上并无本质区别,两者地位平等。
开源的意义在于促进软件创新、提高代码质量和促进知识共享。它为开发者提供了丰富的资源和支持,使软件开发更加高效和灵活。对于用户而言,开源软件通常具有更高的透明度和可控性,有助于提升软件的可靠性和安全性。
总之,源代码是编程的基础,通过编译器转换为机器可执行的目标代码,实现了人与机器之间的沟通。开源软件的开放性和协作性为软件行业带来了前所未有的活力和创新。