这几天有空要研究了一下作画。仅仅是利用AI中已经存储的概念的画图,已经不能满足了。于是决定尝试一下训练AI模型,让他能够学习新的概念,画出以前模型中并不存在的东西。
其实从本质上来说AI模型并没有那么神秘,它实际上就是存储的一大堆的参数。就像我们这个世界本质上也就是那么几个基本粒子的排列组合一样。但是,AI之所以,发展到这么令人不可思议的地步,就是因为它的参数数量是海量的。动辄以千万、亿、来计。普通的电脑根本处理不过来。而要处理如此大量的参数一般都需要使用显存在八个g以上的高端显卡。这也是普通人想要训练AI模型学习新概念的一个瓶颈,毕竟这样的高端显卡在普通用户中的保有量是非常少的。说实话我也没有。
但是没有关系。那些平常被人们痛骂的大公司,垄断企业,如谷歌、百度都在网上提供免费使用的GPU。虽然有很多限制条件,但是我们拿来训练生成图像的AI模型已经足够用了。相比之下,谷歌的免费GPU要更加开放一些。也更好用一点。唯一美中不足的就是需要翻墙。
其实要训练AI画它以前不知道的东西很简单,和人类学习其实很像,首先你要收集一些和这个新概念有关的图片。图片的数量不一定要非常多,但是特点要比较突出。比如最近新闻比较热门的是西方国家又升级了对乌克兰的援助,将自己的现役的主战坦克援助给乌克兰,这其中就包括著名的豹二坦克。那么我就想画一下豹二坦克在战场上的样子。直接用AI模型画,它只会给你画一些奇形怪状的坦克,而不知道怎么画德国的豹二。我就从网上收集了几张豹二坦克的图片。为了突出让AI学习的部分,还将背景和其他的东西用颜色涂掉。
然后把这些图片上传到谷歌的服务器上面。按照训练程序要求的目录结构保存好,然后设置好训练参数。主要是包括你给这个新概念起的名字。这样当你在提示词中输入这个名字的时候。模型就会调用与这个概念相关的新训练出来的参数,其他的设置都是一些人工智能算法中很基本的东西,比如学习率之类的参数。然后就可以开始训练。 这里我使用是最近比较流行的新训练算法——Lora。这种算法在谷歌的服务器上运行的非常有效率,不到10分钟就完成了训练,生成了新的模型。将模型下载下来,然后用插件挂载到原来的模型上面,这样就可以让AI出豹二坦克在战场上作战的景象。
下面这个是豹二坦克的对手,俄罗斯的t90m,也是AI经过训练之后画的:
当然这种方法更广泛的用途就是把你喜欢的明星、亲友,甚至你自己也加入到模型中去,比如下面这两副,都是AI学习了明星相片之后画出来的。你看出来分别是谁了吗?