拿大模型代码来训练自用小模型

发布时间:2023-12-31  


本文引用地址:

1 前言

上一期所刊登的《从CLIP 应用领会隐空间的魅力》一文里,就是一个典型的范例:从Github 网页下载OpenAI 公司的CLIP 源代码(Source code),然后搭配自己收集的小数据来训练一个给超市商家使用的小模型( 图1)。

1704030338755507.png

图1 Github上的免费CLIP源码

那么,这大模型与小模型,两者的代码之间,有何不同呢? 这可能会出乎您的预料,其核心模型的代码,大多是一致的、相容的。常常仅是大模型的参数量很大,而小模型参数量较少而已。

于是就能免费拿来大模型的开源代码,把其参数量调小,搭配企业自有IP 的数据( 训练数据量较少),在较省算力的计算机上即可把代码跑起来,训练出企业自有IP 的中小模型了。免费代码既省成本、可靠、省算力、又自有IP,可谓取之不尽、用之不竭的资源,岂不美哉!

例如,在上一期的文章里,就以商店柜台的产品推荐应用为例演示了:拿CLIP 的源代码,搭配商家自有产品图像(Image) 和图像叙述文句(Text),来训练出企业自用的CLIP 小模型。

然而,上一期文章里,并没有详细说明其训练的流程。于是,本文就拿另一个范例来演示,并且说明其开发流程。由于本文的主题是代码,如果您有些Python代码的基础知识,就会更容易理解。

2 以”训练Diffusion写书法”为例

在之前的文章《细观Diffusion 隐空间里UNet 的训练流程》里,曾经介绍过Diffusion 架构,及其训练方法。在AIGC 潮流中,SD(Stable Diffusion) 产品的推出是AIGC 图像生成发展历程中的一个里程碑,提供了高性能模型,能快速生成创意十足的图像。

于是,本范例就拿Diffusion 来学习,及创作书法字体,也就是俗称的:写书法。虽然Diffusion 也能学习依循标准笔顺,来逐笔写出字形。为了从简单范例出发,本文先让Diffusion 来学习程生成整个字形,而不是逐一生成各笔划。

在SD 里,UNet 模型扮演关键性角色。在SD 的隐空间里,它使用了一个UNet 模型,并搭配一个时间调度(Scheduling) 器,来担任图像生成的核心任务。而扩散(Diffusion) 一词则描述了SD 隐空间里进行的图像生成情形,整个过程都是在隐空间里逐步推进(Step by step) 的,现在就依循开发流程来逐步说明之。

Step-1:从Github网页下载Diffusers源码首先访问这个Huggingface 网页( 图2),然后,按下”code”就自动把Diffusers 源码下载到本机里了。这源码本身并不大,只有4.5MB 大小而已。

1704030429531335.png

图2 Github上的免费Diffusers源码

Step-2:把Code放置于Python 的IDLE环境里

把刚才下载的Diffusers代码压缩檔解开,放置于Wibdows 本机的Python 工作区里,例如 /Python310/ 目录区里( 图3),这样,就能先在本机里做简单的测试,例如创建模型并拿简单数据( 或假数据) 来测试,有助于提升成功的自信心。

1704030496590556.png

图3 放置于本机的Python环境里

Step-3:找出Diffusion的核心模型---UNet

由于小模型常常只需要部份代码就足够了,所以就打开上图里的/diffusers/ 活页夹,就会看到所需要的UNet 模型代码文件--- unet_2d_condition.py 档案,如图4 所示。

1704030548331592.png

图4 放置于本机的Python环境里

接着,打开这个unet_2d_condition.py 档案,可以看到内含的类(Class) 定义:

class UNet2DConditionModel(…):

……………

……………

这个UNet2DCondition 类就是所需要的UNet 模型的定义了。

Step-4:准备训练数据(Training data)在本文的范例里,收集了”春、满、干、坤”四个字的书法图像,各5 个图像,如图5 所示。

image.png

1704030614844417.png

图5 训练数据

总共有20 个书法字体的图像。使用这20 张书法图像,来让UNet 模型学习,就能让它”画”出书法字了。之后,也能进一步让它学习没一个字的笔顺,来逐笔地”写”出书法字体了。

Step-5:编写”模型训练”主程序,然后展开训练

准备好了训练数据( 书法图像),就来编写一个主程序,使用UNet2DCondition 类来创建一个UNet 模型。主程序的代码如下:

1704030671475612.png

接着,就拿刚才所准备的训练图像,来展开训练,也就是让UNet 模型来学习了。其代码如下:

1704030702181242.png

在SD 隐空间里,它使用了一个UNet 模型,并搭配一个时间调度(Scheduling) 器,来担任图像生成的核心任务。执行到上图红色框的指令时,就会把随机噪音添加到书法图像里,成为”含噪音图像”(Image noisy)。然后把它输入给UNet 模型,让它预测出此图像所含的噪音。在SD 里,使用数学运算,根据时间步数(即上图里的ts) 来决定将多少噪音量添加到原图像里。这样地重复训练500 回合。如果图像数量增大时,在单机上训练,可能速度非常缓慢。此时可以把这些代码迁移到有GPU 的机器上进行训练,能大幅提高效率。

Step-6:编写”图像生成”主程序,然后展开创作

训练好了,就得到了自用小模型了。最后就可编写另一个主程序,来让UNet 模型生成各种创意的书法作品了。例如,把字写在唐宋时期的国画里,如图6 所示。

image.png

image.png

图6 AI的书法创作

每次执行这个书法主程序,都会有一些不一样的创新,例如图-6 的左右两项书法创作。

3 结语

基于本文的范例,可以继续微调、优化这UNet 模型及主程序代码,让AI 做出更多的创新作品。例如,也能进一步让它学习没一个字的笔顺,来逐笔地“写”出书法字体了( 图7)。

image.png

image.png

图7 AI依笔顺而逐笔创作

本文以AI “画”书法为例,说明如何从Github 园地里,挖掘自己想要的大模型源代码,搭配自己收集的书法图像,来训练出有趣的AI 书法小模型。如果能善用这些免费代码,既能省成本、又可靠、省算力、甚至能拥有自己有IP,可谓取之不尽、用之不竭的资源,不亦美哉!

(本文来源于《电子产品世界》2023年12月期)

文章来源于:电子产品世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>