【aosp源码阅读环境】【注入与隐藏源码】【raid1源码】在线课题申报系统源码_在线课题申报系统源码怎么弄

时间:2024-12-23 23:21:45 编辑:68源码网 来源:源码资本投资Stori

1.国内低代码平台哪家强?
2.腾讯T2I-adapter源码分析(1)-运行源码跑训练
3.编译原理

在线课题申报系统源码_在线课题申报系统源码怎么弄

国内低代码平台哪家强?

       è¯ä¸å¤šè¯´ï¼Œç›´æŽ¥ç»™å¤§å®¶æŽ¨èå‡ ä¸ªå›½å†…比较主流的低代码开发平台,

       1、织信Informat,是深圳基石协作推出的面向业务人员的低/零代码开发平台,具有高度灵活的“数据+权限+流程”动态信息管理模型,用户不再需要以来代码开发,可以通过自主配置的方式,快速搭建企业运营所需的各类管理系统。而且它与企业微信、钉钉紧密集成,能够大幅节约研发成本和时间,帮助企业实现全方位的数字化转型。它还提供了+现成的应用和行业模板,企业不需要从零开始,直接基于应用或模板来修改或拓展功能,可以更快速高效地搭建出贴近需求的应用。

       ç¬¬äºŒä¸ªï¼Œé’‰é’‰å®œæ­ï¼Œé˜¿é‡Œè‡ªå·±å¼€å‘的低代码平台,跟钉钉也有比较深度的绑定,其实功能都是差不多的,通过拖拉拽的方式设计表单设计流程,设计仪表盘之后,你可以一键把它发布到电脑端和手机端,让你公司其他同事来使用。

       ç¬¬ä¸‰ä¸ªæ˜¯å¥¥å“²ï¼Œè¿™ä¸ªä¹Ÿæ˜¯é’‰é’‰å‚股的。它的特点是面向不同的场景和不同的人群做了一些细分。比如说,有面向专业开发者的、面向业务人群的、面向数字化管理员的,你可以根据你们公司不同的开发水平去选择某一个。

       ç¬¬å››ä¸ªæ˜¯æ€æ³‰äº‘。我之所以介绍这一点,是发现他们把 OA 和 CRM 做了打通,相当于是专注在某一个点上。如果你对这方面需求比较强的话,可以试一试。

       ç¬¬äº”个呢就是伙伴云,创始人是戴志康,过去的后创业四少,当时创业就做了Discuz!国内的论坛软件,其实一直也是 To B 得,也是国内最早一批做零代码开发平台的。

       ä»–们其实跟企业微信的打通比较多,你在企业微信里边做线上的销售,一整套的CRM流程他们做的是比较完善的。

       ç¬¬å…­ä¸ªå°±æ˜¯æ˜Žé“云,这也是一个非常老牌的创业公司了,从最早明道去做企业服务,然后现在明道云做的低代码。他们家的有一个特点就是能够提供私有化的部署。

       å¦‚果你对数据安全各方面有要求的话,你就可以试试,他们感觉会更适合中大型的企业。

       ç¬¬ä¸ƒä¸ªå°±æ˜¯ç®€é“云,我发现他们的介绍写得特别好,你用它去做开发,基本上就是三步,第一步是设计表单,第二步设计流程,第三个就是仪表盘。简单的应用搭建用它还行。

       ä»¥ä¸Šå†…容,希望大家有所帮助!

腾讯T2I-adapter源码分析(1)-运行源码跑训练

       稳定扩散、线课系统midjourney等AI绘图技术,题申统源为人们带来了令人惊叹的报系效果,不禁让人感叹技术发展的码线日新月异。然而,课题AI绘图的申报aosp源码阅读环境可控性一直不是很好,通过prompt描述词来操控图像很难做到随心所欲。源码为了使AI绘制的线课系统图像更具可控性,Controlnet、题申统源T2I-adapter等技术应运而生。报系本系列文章将从T2I-adapter的码线源码出发,分析其实现方法。课题

       本篇是申报第一篇,主要介绍源码的源码运行方法,后续两篇将以深度图为例,线课系统注入与隐藏源码分别分析推理部分和训练部分的代码。分析T2I-Adapter,也是为了继续研究我一直在研究的课题:“AI生成同一人物不同动作”,例如:罗培羽:stable-diffusion生成同一人物不同动作的尝试(多姿势图),Controlnet、T2I-adapter给了我一些灵感,后续将进行尝试。

       T2I-Adapter论文地址如下,它与controlnet类似,都是在原模型增加一个旁路,然后对推理结果求和。

       T2I-Adapter和controlnet有两个主要的不同点,从图中可见,其一是raid1源码在unet的编码阶段增加参数,而controlnet主要是解码阶段;其二是controlnet复制unit的上半部结构,而T2I-Adapter使用不同的模型结构。由于采用较小的模型,因此T2I-Adapter的模型较小,默认下占用M左右,而controlnet模型一般要5G空间。

       首先确保机器上装有3.6版本以上python,然后把代码clone下来。随后安装依赖项,打开requirements.txt,可以看到依赖项的内容。然后下载示例,下载的会放到examples目录下。接着下载sd模型到model目录下,servlet源码包weblogic再下载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等技术,我们也分析了它的源码实现,写了一系列文章。

编译原理

       C语言编译过程详解

       C语言的编译链接过程是要把我们编写的一个C程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织形成最终生成可执行代码的过程。过程图解如下:

       ä»Žå›¾ä¸Šå¯ä»¥çœ‹åˆ°ï¼Œæ•´ä¸ªä»£ç çš„编译过程分为编译和链接两个过程,编译对应图中的大括号括起的部分,其余则为链接过程。

       ä¸€ã€ç¼–译过程

       ç¼–译过程又可以分成两个阶段:编译和汇编。

       1、编译

       ç¼–译是读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,源文件的编译过程包含两个主要阶段:

       ç¬¬ä¸€ä¸ªé˜¶æ®µæ˜¯é¢„处理阶段,在正式的编译阶段之前进行。预处理阶段将根据已放置在文件中的预处理指令来修改源文件的内容。如#include指令就是一个预处理指令,它把头文件的内容添加到.cpp文件中。这个在编译之前修改源文件的方式提供了很大的灵活性,以适应不同的计算机和操作系统环境的限制。一个环境需要的代码跟另一个环境所需的代码可能有所不同,因为可用的硬件或操作系统是不同的。在许多情况下,可以把用于不同环境的代码放在同一个文件中,再在预处理阶段修改代码,使之适应当前的环境。

       ä¸»è¦æ˜¯ä»¥ä¸‹å‡ æ–¹é¢çš„处理:

       (1)宏定义指令,如 #define a b。

       å¯¹äºŽè¿™ç§ä¼ªæŒ‡ä»¤ï¼Œé¢„编译所要做的是将程序中的所有a用b替换,但作为字符串常量的 a则不被替换。还有 #undef,则将取消对某个宏的定义,使以后该串的出现不再被替换。

       (2)条件编译指令,如#ifdef,#ifndef,#else,#elif,#endif等。

       è¿™äº›ä¼ªæŒ‡ä»¤çš„引入使得程序员可以通过定义不同的宏来决定编译程序对哪些代码进行处理。预编译程序将根据有关的文件,将那些不必要的代码过滤掉

       (3) 头文件包含指令,如#include "FileName"或者#include <FileName>等。

       åœ¨å¤´æ–‡ä»¶ä¸­ä¸€èˆ¬ç”¨ä¼ªæŒ‡ä»¤#define定义了大量的宏(最常见的是字符常量),同时包含有各种外部符号的声明。采用头文件的目的主要是为了使某些定义可以供多个不同的C源程序使用。因为在需要用到这些定义的C源程序中,只需加上一条#include语句即可,而不必再在此文件中将这些定义重复一遍。预编译程序将把头文件中的定义统统都加入到它所产生的输出文件中,以供编译程序对之进行处理。包含到C源程序中的头文件可以是系统提供的,这些头文件一般被放在/usr/include目录下。在程序中#include它们要使用尖括号(<>)。另外开发人员也可以定义自己的头文件,这些文件一般与C源程序放在同一目录下,此时在#include中要用双引号("")。

       (4)特殊符号,预编译程序可以识别一些特殊的符号。

       ä¾‹å¦‚在源程序中出现的LINE标识将被解释为当前行号(十进制数),FILE则被解释为当前被编译的C源程序的名称。预编译程序对于在源程序中出现的这些串将用合适的值进行替换。

       é¢„编译程序所完成的基本上是对源程序的“替代”工作。经过此种替代,生成一个没有宏定义、没有条件编译指令、没有特殊符号的输出文件。这个文件的含义同没有经过预处理的源文件是相同的,但内容有所不同。下一步,此输出文件将作为编译程序的输出而被翻译成为机器指令。

       ç¬¬äºŒä¸ªé˜¶æ®µç¼–译、优化阶段。经过预编译得到的输出文件中,只有常量;如数字、字符串、变量的定义,以及C语言的关键字,如main,if,else,for,while,{ ,}, +,-,*,\等等。

       ç¼–译程序所要作得工作就是通过词法分析和语法分析,在确认所有的指令都符合语法规则之后,将其翻译成等价的中间代码表示或汇编代码。

       ä¼˜åŒ–处理是编译系统中一项比较艰深的技术。它涉及到的问题不仅同编译技术本身有关,而且同机器的硬件环境也有很大的关系。优化一部分是对中间代码的优化。这种优化不依赖于具体的计算机。另一种优化则主要针对目标代码的生成而进行的。

       å¯¹äºŽå‰ä¸€ç§ä¼˜åŒ–,主要的工作是删除公共表达式、循环优化(代码外提、强度削弱、变换循环控制条件、已知量的合并等)、复写传播,以及无用赋值的删除,等等。

        后一种类型的优化同机器的硬件结构密切相关,最主要的是考虑是如何充分利用机器的各个硬件寄存器存放的有关变量的值,以减少对于内存的访问次数。另外,如何根据机器硬件执行指令的特点(如流水线、RISC、CISC、VLIW等)而对指令进行一些调整使目标代码比较短,执行的效率比较高,也是一个重要的研究课题。

       2、汇编

       æ±‡ç¼–实际上指把汇编语言代码翻译成目标机器指令的过程。对于被翻译系统处理的每一个C语言源程序,都将最终经过这一处理而得到相应的目标文件。目标文件中所存放的也就是与源程序等效的目标的机器语言代码。目标文件由段组成。通常一个目标文件中至少有两个段:

       ä»£ç æ®µï¼šè¯¥æ®µä¸­æ‰€åŒ…含的主要是程序的指令。该段一般是可读和可执行的,但一般却不可写。

       æ•°æ®æ®µï¼šä¸»è¦å­˜æ”¾ç¨‹åºä¸­è¦ç”¨åˆ°çš„各种全局变量或静态的数据。一般数据段都是可读,可写,可执行的。

       UNIX环境下主要有三种类型的目标文件:

       (1)可重定位文件

       å…¶ä¸­åŒ…含有适合于其它目标文件链接来创建一个可执行的或者共享的目标文件的代码和数据。

       (2)共享的目标文件

       è¿™ç§æ–‡ä»¶å­˜æ”¾äº†é€‚合于在两种上下文里链接的代码和数据。

       ç¬¬ä¸€ç§æ˜¯é“¾æŽ¥ç¨‹åºå¯æŠŠå®ƒä¸Žå…¶å®ƒå¯é‡å®šä½æ–‡ä»¶åŠå…±äº«çš„目标文件一起处理来创建另一个 目标文件;

       ç¬¬äºŒç§æ˜¯åŠ¨æ€é“¾æŽ¥ç¨‹åºå°†å®ƒä¸Žå¦ä¸€ä¸ªå¯æ‰§è¡Œæ–‡ä»¶åŠå…¶å®ƒçš„共享目标文件结合到一起,创建一个进程映象。

       (3)可执行文件

       å®ƒåŒ…含了一个可以被操作系统创建一个进程来执行之的文件。汇编程序生成的实际上是第一种类型的目标文件。对于后两种还需要其他的一些处理方能得到,这个就是链接程序的工作了。

       äºŒã€é“¾æŽ¥è¿‡ç¨‹

       ç”±æ±‡ç¼–程序生成的目标文件并不能立即就被执行,其中可能还有许多没有解决的问题。

       ä¾‹å¦‚,某个源文件中的函数可能引用了另一个源文件中定义的某个符号(如变量或者函数调用等);在程序中可能调用了某个库文件中的函数,等等。所有的这些问题,都需要经链接程序的处理方能得以解决。

       é“¾æŽ¥ç¨‹åºçš„主要工作就是将有关的目标文件彼此相连接,也即将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来,使得所有的这些目标文件成为一个能够被操作系统装入执行的统一整体。

       æ ¹æ®å¼€å‘人员指定的同库函数的链接方式的不同,链接处理可分为两种:

       (1)静态链接

       åœ¨è¿™ç§é“¾æŽ¥æ–¹å¼ä¸‹ï¼Œå‡½æ•°çš„代码将从其所在地静态链接库中被拷贝到最终的可执行程序中。这样该程序在被执行时这些代码将被装入到该进程的虚拟地址空间中。静态链接库实际上是一个目标文件的集合,其中的每个文件含有库中的一个或者一组相关函数的代码。

       (2) 动态链接

       åœ¨æ­¤ç§æ–¹å¼ä¸‹ï¼Œå‡½æ•°çš„代码被放到称作是动态链接库或共享对象的某个目标文件中。链接程序此时所作的只是在最终的可执行程序中记录下共享对象的名字以及其它少量的登记信息。在此可执行文件被执行时,动态链接库的全部内容将被映射到运行时相应进程的虚地址空间。动态链接程序将根据可执行程序中记录的信息找到相应的函数代码。

       å¯¹äºŽå¯æ‰§è¡Œæ–‡ä»¶ä¸­çš„函数调用,可分别采用动态链接或静态链接的方法。使用动态链接能够使最终的可执行文件比较短小,并且当共享对象被多个进程使用时能节约一些内存,因为在内存中只需要保存一份此共享对象的代码。但并不是使用动态链接就一定比使用静态链接要优越。在某些情况下动态链接可能带来一些性能上损害。

       æˆ‘们在linux使用的gcc编译器便是把以上的几个过程进行捆绑,使用户只使用一次命令就把编译工作完成,这的确方便了编译工作,但对于初学者了解编译过程就很不利了,下图便是gcc代理的编译过程:

       ä»Žä¸Šå›¾å¯ä»¥çœ‹åˆ°ï¼š

       é¢„编译

       å°†.c 文件转化成 .i文件

       ä½¿ç”¨çš„gcc命令是:gcc –E

       å¯¹åº”于预处理命令cpp

       ç¼–译

       å°†.c/.h文件转换成.s文件

       ä½¿ç”¨çš„gcc命令是:gcc –S

       å¯¹åº”于编译命令 cc –S

       æ±‡ç¼–

       å°†.s 文件转化成 .o文件

       ä½¿ç”¨çš„gcc 命令是:gcc –c

       å¯¹åº”于汇编命令是 as

       é“¾æŽ¥

       å°†.o文件转化成可执行程序

       ä½¿ç”¨çš„gcc 命令是: gcc

       å¯¹åº”于链接命令是 ld

       æ€»ç»“起来编译过程就上面的四个过程:预编译、编译、汇编、链接。了解这四个过程中所做的工作,对我们理解头文件、库等的工作过程是有帮助的,而且清楚的了解编译链接过程还对我们在编程时定位错误,以及编程时尽量调动编译器的检测错误会有很大的帮助的。

       æ˜¯å¦å¯ä»¥è§£å†³æ‚¨çš„问题?