人像卡通画训练营:课时1:AI人像动漫画实操教学
AI人像动漫画实操教学
实战教学
实战教学将主要包括两个方面:一个是如何搭建适用于不同应用的模型,另一个是如何进行模型的推理训练。
首先,我们介绍如何在空间上创建一个云像相关化的应用,这个应用是关于中空间的。
当我们点击"双空间"时,可以看到现有的一些中间应用。然后,我们可以在这里选择创建一个创空间。
一旦进入创建页面,会要求我输入一些关于我们想要创建的应用的参数,例如应用名称,我们可以随意填写。然后,为了使中文更具可读性。在背景通道方面,可以自己上传图片,但也可以选择默认设置。
我们可以选择个人或者训练营的组织代码。LIcense取决于个人需求。然后,整个设置变得公开可见。在描述部分,简单地写了一些有关动漫的内容。对于SDK,这是关于如何在前端进行布局的接入,我们选择了默认设置,因为大多数情况下都可以使用这些代码。我们可以查看一下这个新创建的空间。
一旦创建完成,我们等待一段时间,然后我们会来到一个界面,看到创建成功的信息。
此时,它实际上为我们提供了通过GET请求访问在线文件复制,以及如何上传已经编辑好的代码的说明。此外,也支持在Web上直接上传。
接下来,我们可以查看本地的空间文件,它已经被初始化为默认好的一个redme。在这里,它会涉及一些Tige参数配置,需要我们来编写,实际上,这是一个入口文件,关于这一点的创建,您也可以参考文档中心的创建空间的视屏结束后,大家有任何不明白的地方,可以参照这里来做。
关于入口文件的撰写,也会给一些示例,包括有关文字和图片输入输出的说明,以及如何编写入口文件。
在此示例中,我们首先导入了Python包,它可以将我们的算法模型封装成Web界面的形式。
在函数上,我们定义了一个功能函数,它处理图像的特定模式。
对一张图旋转了45度,然后在这它声明了一个关于demo的一个类,这是之间的一个demo,首先我们初始化gradio的界面,它要走的功能函数就是inmati mod,它的输入是一张图像,是gradio下面的一个类,处理类型就是一个纰漏的模式。输出是另一张图像。
这里是决定于你是否需要数据回滚,是否设置,都是无关的,demo声明好了之后,我们在命令函数中启动这个Demo,然后,我们可以看到这个界面。因此,在这方面,我们的创新空间是一个app,我们的入口文件可以写成这样。
然后,我找到了刚刚创建的空间,这个空间看起来已经设置好了。我们将入口文件上传到了这个空间,其实在本地的一些记事本,学习法都是可以写的。当然为了使调试更加友好,我们可以使用IDE来进行编写,为了方便本地调试和处理问题,我们应该知道在哪里打开相关的内容。
那么notebook应该在哪里打开呢,首先,因为我们要讨论动漫风格相关的内容,所以我们依托于modelscop上的一些相关漫画的现有的算法模型。
这块我们可以通过打开卡通化专题,在专题里有非常多的相关模型,一些典型的模型,然后我们点模型应用,因为这是更新的一个模型展示,在这个主题下有三个标签,其中一个是"TCP模型",这与我们之前讨论的关于将数量图像进行转换的模型有关。当然,它包含了不同风格的嵌入,可以生成相应风格的效果。
关于"拓散拓生成模型",实际上它是增加面向文生图的。当然,他还可以去做图生图 ,还有"DCT-net这一块,还有一种是用这种扩散模型去训练出来的一些DCT-net model,他的用法和前面的dcdnet是完全一致的。
对于这七种风格,其中有两种风格加上"DCT-net有五种,我们都可以通过我们提供的方式来调用和创空间应用,因为每种风格都有一些不同之处。我们打开了第一个DCT-net模型的卡片,并在页面底部找到了与该模型相关的链接。
这七种风格的示例都是缩略图,我们的日漫图,可以看到第一个风格图像的转换效果。还有三维风格、手绘风格、素描、以及漫画风格等效果的展示。以下是有关目前模型的一些描述,以及如何使用它们进行模型推理的信息,我们将在后面详细介绍如何进行模型推理。
接下来,我们要打开Notebook,并选择上面的一个选项,因为Notebook上已经提供了一些包,我们可以直接在本地调用,但如果您使用pip安装了modeltoolkit,您也可以在Notebook上进行安装。
在Notebook中,它为我们提供了两种环境,一种是CPU环境,另一种是GPU环境。由于我们只进行推理,这些模型本身非常快速,而GPU是有限的,因此在CPU环境下进行演示是合适的。我们选择了CPU环境,然后创建一个Notebook,打开一个频道。这一过程可能需要五到十分钟,因此请耐心等待。这是我已经打开的一个示例,所以我们可以直接点击查看Notebook。
然后就会跳转到一个编辑界面。这是我刚刚写好的。稍等一下,实际上,一旦我们来到这里,它会为我们提供一份已经复制好的代码,我们可以关闭它。我们可以来到这个控制台,选择Notbook直接编辑代码块的开发。我们还可以打开Python的控制台,实际上,这里还有一个Terinal终端。它就像我们远程连接一样,我们可以列出本地工作目录,这里可能有一些杂乱的文件,大家可以新建一个文件夹。我创建了一个,我可以在这个空间中使用它。当然,如果你不想创建文件夹,也可以直接在上面编写你的应用程序,入口文件也可以正常工作,因为我们只是为了调试。我首先使用cd命令进入了我刚刚创建的应用程序文件夹,然后可以看到在这里有一些材料,以及在下面的节目间还有一些需要的素材。
实际上,因为左侧窗口栏提供了一个可视化的界面,你可以在这里看到。首先,我们需要编写一个入口文件。入口文件的编写方式就像我们在文档中心看到的最简单页面示例一样。实际上,这是非常简单的一种类型,不同的是我们需要导入一些Model scop相关的函数来进行算法处理。在这里,我们将初始化一个关于卡通化的类。然后,我们初始化了一个卡通化的类,然后我们可以指定它是否是原始的,如果不指定它,它将规定我们的所有代码都遵循模型初始化和模型推理的一套流程。所有TCP系列模型都可以用,只需指定不同的模型ID来控制不同风格的生成。对于生成这一块,我选择的是Dct-net,最原始的原像卡通化,就是日漫然后我把他的model id ,在哪儿看呢,就是我们可以打开相应的模型。
对应模型的页面显示了模型的ID。接下来,我们可以复制这个代码块,然后将其粘贴到我们刚刚创建的id处。一旦我们初始化了这个函数,当然,这个页面的写法和刚才讲的一样,然后你还可以设置更多参数,例如标题,它会在页面上显示标题对应的内容,然后是描述,描述会显示在标题下面另起一段进行相关的文本描述。Example就是说头像我们可以通过本地图像或已经提供的图像。在我这里,我使用了一张本地图像,然后上传它。你可以在本地文件中选择一张图像,然后双击以将其上传到当前工作目录中。
所以,在接口中,我们主要需要填写的是方法,也就是我们需要使用的处理方法,以及要处理的输入图像。在这种情况下,我们的输入是一张图像,输出也是一张图像,然后我们告诉它要使用这个示例代码进行处理。其余部分都是可选的。一旦你完成了这个演示,你可以启动它,这是我写的"share",以便我们可以在本地进行调试,然后你可以将这个代码注释掉。
当我们编写了这个app并运行python之后,我们可以在终端界面上看到输出。因为这一步,如果你将界面直接发布到线上,它可能需要一些时间。如果你的代码有错误,它可能会报错。在这种情况下,你将无法进行调试,所以最好的方法是在本地调试代码,然后再发布到创空间上,这样更高效,我们可以查看错误信息。
例如,在这里,我们只需运行python app.py来启动我们的文入口件,然后查看输出,实际上,这会开始执行对应代码。
事实上,当你在这个环境中运行代码时,正常情况下,你需要安装一些包,例如在modelscope里面,默认情况下是没有安装这些包的,所以通常情况下,你需要执行以下步骤,如果你直接运行它,它会显示一个错误消息,然后在这种情况下,你可以执行以下操作。
使用type,然后安装jrdio包,我们可以先安装这个必要的包。因为我这里已经安装好了,所以它现在可用。因此,当装好这个包后,就可以打开Python的入口文件,然后稍等一下,让这个环境加载。实际上,在我们创建的这个界面上,后台所做的事情与我们现在做的事情是一样的。然后,你可以看到我们的模型现在正在本地运行,它会显示一个本地服务器上的地址,同时它还会给我们一个公共的URL,然后我们可以复制这个地址,在稍后会用到。然后再打开一个页面,然后可以看到这个创空间的应用程序,这是我们之前指定的主题,以及对应的描述。这是一个图像到图像的转换的ui。默认情况下,它的UI已经被关闭,默认为关闭,然后我们已经提供了一张图像。然后在这个界面上,我们可以点击一下示例,然后它就会进入我们的图像选择。然后我可以上传一张本地的图像,然后在这里找到一张图像,可以点击叉号清除画布,然后到本地双击以上传到当前工作目录。
一旦上传完成,一切都将正常进行。接下来,我们可以点击提交,然后它将自动开始生成。因为这是第一次运行,它可能会较慢,因为在第一次运行时,它需要下载相应的模型,然后你可以在这里看到它的相关日志信息,实际上,在模型启动时,它会首先下载所需的模型,这通常需要一些时间。比如当我换一个3D风格,他可以在3D风格的模型界面去找他的模型ID,在模型启动的时候就会进行一个模型的下载。一旦初始化了一些模型并找到了相关信息,然后看一下。
然后,我们直接复制这个链接,然后将其粘贴到这里,然后再次点击提交。在后台,你将看到我们的推理代码正在运行。然后这个块会显示我们的推理已经完成,因为在我们的调试代码中,如果每张图片都被处理完毕,它会显示“完成”,然后在后台,你将看到它的推理任务已经完成。如果出现任何错误,实际上它也会在这里提示,即在我们的终端上,我可以在后台查看它具体报了什么错误,有什么问题,这部分我们可以解决。然后,大多数报错实际上都与你的输入和输出之间的格式转换有关,再卡通化的模型它可能会默认为PJR格式,但你可能需要将它进行适当的格式转换。这种操作通常涉及将djr或通道从一种格式转换为另一种,这取决于输入图像的原始格式。
在进行RDB(数据库)变换或者其他格式处理时,需要注意输入和输出之间的格式转换。有时候,模型可能需要特定的输入格式,如int编码格式,或者它可能不接受某些格式。这可能导致一些错误,所以在处理过程中需要小心。但是,你已经成功地将这个应用在本地进行了测试,然后得到了相应的结果。现在,你可以将这个应用上传到创作空间中。
在上传应用到创作空间之前,你可能需要检查是否有登录选项。如果有,你可以登录并将应用上传到你的创作空间。然后,你可以返回到创作空间的页面继续操作。
我们已经有一个了。接下来,点击添加本地素菜文件,然后上传,这样就能将我当前的文件直接上传。
当然,我可以在本地查看、下载,这是我刚刚下载的文件。然后,将其命名为适当的信息,比如:
上传完成后,这是我刚刚写好的文件。接着,我们可以再添加一个本地的素材文件。
然后,点击下方的输入框,我发现"input one"这个命名有点问题。我觉得这个名称应该与刚刚的"app.py"对应,而不是输入的图像名称。我会在本地的应用进行修改,或者直接在下面进行编辑。修改一下这个命名。
此外,还有Redme信息需要填写。我们可以大致查看一下这些内容。
实际上,还会提供详细的接口文档。在这里,需要填写一些信息,比如它属于的类别(CV、LP、语音等),以及希望在上面添加的测试标签。这些标签会反映在我们的空间中,例如文本、读音等,您可以通过点击上面的链接找到我们创建的这些模型。
然后,在文本部分,我们要填写的是一些测试标签,这些标签是我们在上面点击的一些测试。
还有一个重要的信息是关键咨询,这些信息将帮助您更容易找到我们的模型。请记住回到这个页面,然后查看数据集,模型,应用的介绍,测试评估以及训练过程等信息。如果您在公司的内部使用,也可以写下公司名称。这些都是可选的。还有一个与Models关联模型有关的信息,您可以在这里创空间里进行关联。关于部署配置,您可以选择要使用的机器、路口文件(例如"app.py")以及CPU核心数、内存、GPU数量和彩线的数量。这些也是可选的,如果不填写,将使用默认值Cpu 。
最后,有一个关于代码使用范围的部分。在这里,您可以在页面上看到如何使用这个项目的说明。这块我找一个已经写好的,可以复制一些创空间应用上的,比如说redme,直接在页面上复制已经写好的代码,然后打开创空间应用,然后保留原始getclone,然后点击确定提交修改,然后,试一下,我们首先来到发布,这里包括原文件,反馈,问题交流,然后设置到空间的一个上线,点击上线空间展示,点击确认上线,等待创空间创建完成。
创建完成后会显示预请中,然后这时候我们可以点击返回创空间,以查看效果,这是我们已经创建好的创作界面。当然这块大家也可以嵌入一些前端的代码让它变得更好看一些。比如可以点击这张图像,然后点击提交。这是应用的一个示例,创空间应用我们已经就创建完成了。您还可以选择不同的风格模型进行创作。也可以做类似于之前的人像AI多风格的漫画,相当于多了一个选择的风格,接我可以简单介绍一下这个应用。实际上,您可以选择不同的模型进行生成。在这个界面上,您可以调整风格模型的一些参数。这个应用的代码修改非常少,因为它是基于您提供的服务进行调用的。最大的不同之处在于,您可以在这里选择风格。然后,将这个组件添加到输入中,和输入输出一起放到inpus里面,这个字段将对应于风格选择,可以是慢风、三维风格等。这个修改会对应到输出的样式上。
然后,我有一个映射表,它对应于我们的风格。在这个映射字典中,您可以找到与"三d"相对应的"3D",当输入function里面。现在让我们看一下代码,因为在这个Function是一个Influence,所以在推理函数(infer)中,我们需要根据这个字符串来设置style。这些字符串如"慢风"、"三d"等字段,实际上是您输入的中文名字,它接受到的就是什么,我们通过翻译来接收它们。这个字段实际上是我们可以接收到的不同风格的一种方式。当使用不同的风格时,只需为其提供不同的style值,然后将其组合成不同的模型id,例如在三维风格的情况下,我们添加了一个"3d"前缀。然后,模型的id本身实际上都是一样的,只需根据需要替换id,然后进行调用即可。所以这个过程非常简单。
此外,还有一个创新应用可以参考,名为"零像ai零像视频",这个应用与图像不同,它涉及到视频拆帧的处理。您可以查看该应用的代码,了解如何读取和处理视频帧。它也涉及到不同id的组合,类似于之前的应用。这个应用的代码更复杂一些,因为它需要处理视频的帧。可以看到它的infers函数,也会进行一些视频的读取,这块也是对于模型ID的组合,在不同风格下的组合,这块,跟我们的也是一样的,也是通过paplan初始化的形式进行model scop 然后进行变化的推理。
总之,大家可以参考这些代码,如果您对模型的接口格式和前端需要有了解,那么在处理数据和推理时,代码会更加简洁。然后,我们将介绍如何使用模型进行推理和训练。
接下来,让我们打开"动漫化模型",点击"模型应用",然后选择"DCD"模型,它是一个快速开发的模型,适用于动漫化的应用。
在模型页面上,您会发现一些代码示例,包括用于模型推理和模型训练的代码。您可以复制这两个代码示例。首先,点击"快速开发"。因为我们将进行模型训练,所以我们需要选择GPU环境。我已经打开了一个示例,所以您可以直接点击查看。
接下来,我们将创建一个新的文件夹,命名为"tutorial"。我已经创建好了这个文件夹。
现在,让我们谈一谈推理,我已经为推理写好了一个名为"infer"的代码块。您可以通过点击加号来添加一个代码块,然后选择Python。这将为您创建一个代码块,您可以在其中粘贴代码并运行。每个代码块的上方都有一个说明,让我们首先整理一下结果,然后点击第一个代码块。
在这个代码块中,首先引入了一些必要的第三方包,例如OpenCV和Python requests。然后,我初始化了一个拍卡机(Camera),并指定了要使用的模型的ID。您可以在模型的页面上找到这个ID,复制并粘贴到这里。不同的模型对应不同的任务,但它们都遵循相同的初始化、预处理、推理和后处理流程。
接下来,我们可以提供一张图片的URL或本地路径。在这个示例中,我将上传一张本地图片。我们可以使用upload函数来提供图片的路径,然后我们将获取结果并将其转换为可读的格式。由于这个模型输出的是一种特殊类型,所以我们需要在这里进行转换。最后,我们将结果保存在输出文件中。请注意,您可以在此处修改模型的ID以使用不同的模型。
运行完毕后,您将看到许多运行信息。如果没有错误,您可以忽略这些信息。
接着,我们可以查看生成的结果,这些结果会保存在"results"文件夹中。您可以在那里找到输入图像和生成的图像。如果您想下载输入图像,您可以使用以下代码将URL上的图像下载到本地,并将其命名为"input.jpg"。让我们看看这张图像。
接下来,让我们继续讨论如何使用这个模型进行训练。在训练之前,您可能需要适应一些新的数据或任务。让我们查看一下这个示例。
首先,我们需要打开示例文件,找到"train"部分。请注意,这个示例要求您的环境兼容TensorFlow 1.15版本。如果您使用的是TensorFlow 2.x版本,可能会出现兼容性问题,所以您需要进行一些调整。我们可以复制这些代码并在合适的环境中运行。在这里,我们将使用pip指定特定的版本进行安装。
然后,您可以运行代码块,它会安装所需的库。请注意,如果出现一些依赖关系的冲突,通常不会影响训练过程。接下来,我们可以运行训练代码。
这个训练代码主要包括卡通化模型的训练器,以及与模型后端导出相关的一些步骤。还涉及到一些数据集,您可以在上面上传好。让我们继续学习如何设置训练。
数据集的需求是相同的,此外,还需要一些必要的软件包。在这方面,我们需要提供一个ID,用于指定我们希望基于哪个风格模型进行训练。
选择与我们训练的风格最接近的模型,我们将其作为基础进行训练。首先,让我们以Slow Wind和Beauty为例。首先,我们需要提供一个ID,然后在数据集加载方面,首先加载我们之前上传的数据集。这些数据集保存在my_data/train目录下,由于数据量相对较小,所以加载速度非常快。我们需要选择加载哪一部分数据,接下来,让我们查看一下这个数据集的版本,因为某些版本可能不包含缩略图。之前上传时,可能会省略一些内容,我们可以在数据浏览器中查看数据的预览。
实际上,我们可以看到这些数据是什么样的。实际上,这些数据包含了一些简化风格的卡通图像。现在,让我们来看看这个数据集的名称,以及它对应的目录结构。它包含两个子文件夹,一个叫做"cartoon",其中包含一些卡通风格的图像,另一个叫做"real",其中包含一些真实世界的图像。这里可能没有显示完全,因为它可能只是部分数据,但你已经明白了。这两个人脸看起来都已经被处理成了卡通风格,这是我们的训练集。
在演示时,我们将使用一个简化版的数据集,也就是所谓的"mini"版本,这个版本会更小、更快。现在,让我们使用数据集加载功能将其导入,然后选择要加载的数据片段。接下来,我们会得到一个路径,告诉我们数据集存储在哪里。一旦有了这些,我们需要指定一些参数,有两个参数需要注意。因为数据集包括了一个现实世界的转换,我们需要指定现实世界的数据存储位置。此外,我们还需要指定在哪里保存我们的实验中间结果。上面的一些是一些通用设置,现在让我们来指定ID,以及训练多少个"stack"(可以理解为一轮训练),决定进行多少次迭代。
然后,对于我们现在的设置,我们可以将这个值设置得非常低。通常,我们可以考虑设置为大约30万左右,这应该是一个比较好的状态。对,然后在这一步,我们可以初始化我们的训练器,首先指定ID,然后在每个基础上进行训练。它会自动将模型下载到我们的本地目录中。
然后,可以查看一下,在我们的模型文件夹中,文件结构是怎样的。实际上,在推理时,我们通常以.pp的形式规定格式,而在训练时,需要另一种格式。这个过程中,中间文件也会被保存。当加载模型时,它将从我们现有的模型文件基础上进行微调,并打开我们的代码。
这相当于它会自动拉取这个模型。然后,这个目录是我们工作的主目录,包括一些文件夹,其中包括照片的文件夹和卡通图像的文件夹。还有我们指定模型进行多少次训练,这个步骤中,实际上我们可以在方便的时候选择不上传数据集到网络,而是在本地加载。只需要将路径替换成本地路径就可以了,还有一些其他设置。
替换本地路径,就是填入这两个字段,指明数据集存储在本地的哪个位置,然后,在这个界面上,我们可以点击“添加”来查看当前的工作目录。
然后,对于这一部分,我将为大家演示一下。实际上,对于我们的路线,我们可以使用这个调用来查看我们的进度。让我看一下我们的数学用路线,它已经计算到哪个程度了。然后,我们在这里运行单一的迭代,会有很多关于模块加载的中间信息,然后开始训练。在这个阶段,我们可以看到我们的模型是从哪个模型开始微调的。然后,我们设置了14次迭代,这是在训练的过程中。这个步骤中会有一些……
我们可以看到,这是我们完成训练后的模型。然后可以查看我们的输出路线,因为我们的输出路线会在这个时间点上保存。它保存了一些结果,例如第零次迭代时的结果...
我们的模型在训练好后会保存在这个位置,但实际上以另一种格式,便于后续推理和部署。我们会将其转换为.ppt文件,这样在使用时就不需要再加载原始的网络结构了,因为它已经被自动固定化在我们的软件内部了。因此,在导出模型时,我们可以更方便地进行后续部署。
所以我们将对模型进行导出,那么,如何导出呢?这一部分,我们在代码中已经准备好了,使用起来非常简单。首先,我们需要指定模型所在的位置,即我们完成训练的路径。
然后,需要指定导出的目标文件夹以及保存的迭代次数。比如,如果你想导出训练到了十万次的模型,只需要指定十万,它会自动找到模型和数据文件。最后,需要指定目标文件的路径,即我们希望将转换后的文件存储到哪里。因为推理时还涉及其他资源的依赖,所以我们建议将它保存在与原始资源相同的目录下,以便在推理时可以直接使用原始的资源。一旦我们导出了这个训练模型,我们的工作就完成了。
然后,调用导出这个模型为.ppt文件的命令。命令的输入参数包括原始模型的路径和期望输出的.pb文件的路径。运行该命令后,它会自动将导出的模型存储在指定的目录中。然后,我们可以查看一下。
实际上,这个过程非常迅速,然后,它将存储在指定的路径下。然后,模型已经成功导出,就位于特定的文件夹下。
就是位于这个文件夹下,然后,这个.ppt文件,我们可以直接用它进行推理。进行推理的过程与之前描述的推理流程相同。
然后,对于模型的加载,我们可以直接使用本地路径,而不需要指定模型的 ID。本地路径就是刚才我们提到的,您可以将它直接添加到代码中。
实际上,这个过程就是加载了本地存储的模型,与之前描述的推理过程类似。
如果您想查看训练结果,只需简单运行一下代码,您就可以看到它。可以查看我们保存的结果。事实上,这与您之前使用的模型应该是相同的,因为它只经过了 10 次迭代。而且,默认情况下,该模型每经过 5455000 次迭代才保存一次。因此,您只需相应地更改迭代次数即可使用我们自己训练的模型进行标准的运行,至于训练代码,实际上也相当简单。
但是想训练好一个卡通画模型,自定义风格的这种,其实还是有很大难度的。
这里数据可以看到,我们已经准备好了的一个现实的人头还有卡通的一些人头数据,卡通数据的质量越高,对它肯定是有一定帮助的,而且涉及到数量有限。
关于前期的一些脚本和卡通样本是没有包含的,如果大家想做可以参加参考一个项目。
下面给大家介绍下人像卡通化效果
在这里我们可以你看到AI人像多风格漫画,可以选择风格和实例图像。
输入图像可以从实例图片中选择,也可以本地上传,选择实例图形点击一键生成,即可生成对应的效果
我们也可以选择不同的风格效果,比如3D风,一键生成,生成对应的效果。打开手绘风的页面,
复制代码后,会自动进行下载
打开结果图形
可以看都到转化效果。这就是他的实例展示效果。