本文由米尔论坛优秀评测者“ALSET”提供。
01.项目背景介绍
AIGC(即ArtificialIntelligence Generated Content),中文译为人工智能生成内容。简单来说,就是经过大量特征训练过的神经网络模型来对新的内容或者需求来生成人们需要的创作内容,类似使用人类用思考和创造力才能完成的工作过程,而现在可以利用人工智能技术来替代我们完成。在狭义上AIGC是指利用AI自动生成内容的生产方式,比如自动写作、自动设计等。在广义上,AIGC是指像人类一样具备生成创造能力的AI技术,它可以基于训练数据和生成算法来完成各类的内容生成创作。
在图像生成模型生成方面最主要的几个代表模型,是以下常见的4个模型:
DNN
GAN
VAE
Diffusion
其中基于深度神经网络(DNN)的进行图像艺术风格转移(Transform),生成高质量的具有艺术风格图像的神经网络模型。该模型通过深度神经网络分别提取图像中的内容和风格特征,然后对其目标图片内容进行重组,生成具有原图内容和艺术风格的图像,其风格转移不仅对图像的图案,颜色,特征等进行修改还保留原图高可辨识的内容载体。
通常AIGC对硬件性能要求较高,只要具备高性能的图形图像的PC图形工作站或者服务器上来运行。而这里我们将使用MYD-YG2L开发板上来实现在嵌入式设备上完成图像风格转移计算这一任务。并且结合图形界面和USB摄像头完成对任意拍摄的图片进行图像风格化的开发。让嵌入式上也能够体验这种独特的AIGC内容生成方式。
02.技术硬件方案
项目采用MYD-YG2L为主控板,使用800万像素4K级广角USB相机镜头,通过采集画面,在主控板内完成对画面的风格化处理,并通过HDMI输出显示生成的图像。
这里使用开发板连接HDMI显示器和接入一个4K高清镜头,主要硬件连接如下图:
03.主要技术原理
图像风格转移的主要过程是对输入img_content和img_style,然后要把img_content的内容主体和img_style进行一个结合,实现一个图像的创意创作,这个过程也叫做Style Transform 即风格转移。如下图中,第一列是输入的原图像, 第二列是风格图,第三列之后就是各种控制参数下的输出风格图像:
其核心的算法是把基于CNN卷积编码后的特征向量transformer第一个结合到风格迁移任务中,再对混合后的内容进行解码,从而输出新的图像内容,主要参考李飞飞论文,其核心流程如下图:
经过测试MYD-YG2L较好的支持OpenCV这个工具库,并且具备较强的图像处理能力。那么就可以在板上使用OpenCV的DNN模块来实现以上算法过程。OpenCV的DNN模块从发行版开始,主要是支持推理,而数据训练不是其支持的目标。因此我们可以使用已经训练好的模型,在板上上完成推理过程,即图像风格转移生成的这一过程。现在OpenCV已经支持TensorFlow、Pytorch/Torch、Caffe、DarkNet等模型的读取,OpenCV的 DNN模块的用法。
OpenCV的DNN模块进行模型推理就显得比较简单,过程就是:
1.加载模型
因为OpenCV DNN模块主要用来做推理计算,所以在使用前首先准备一个训练好的模型(如何训练自己的不同风格的模型后面也会阐述)。OpenCV支持所有主流框架的大部分模型。OpenCV的readNet系列函数就可以看出所支持的框架类型:
readNetFromCaffe
readNetFromTensorflow
readNetFromTorch
readNetFromDarknet
readNetFromONNX
readNetFromModelOptimizer
这里所用风格迁移模型是开源的Torch/Lua的模型fast-neural-style。他们提供了十种风格迁移的模型,模型的下载脚本在:https://github.com/jcjohnson/fas ... _transfer_models.sh。这里使用OpenCV的readNetFromTorch函数加载PyTorch模型。
2.输入图像预处理
在OpenCV中输入给模型的图像需要首先被构建成一个4个区块的数据块(Blob),并且做如resize、归一化和缩放之类的一些预处理。
3.模型推理
模型推理过程就是把输入构建的blob输入给模型神经网络模型进行一次前向传播,在OpenCV中,用以下非常简单的两行代码即可完成:
net.setInput(blob)
output = net.forward()
04.软件系统设计
在本软件开发,主要使用MYD-YG2L的SDK中,使用了OpenCV SDK与QT SDK。QT 主要实现文件图像风格转移的界面操作,使用OpenCV实现DNN图像推理计算。
设计QTUI,选择文件或者摄像头采集原图像
开发UI交互逻辑代码
开发OpenCV DNN神经网络调用模块
在开发板的交叉编译环境编译,把编译的结果部署到开发板上。另外把风格转移用到的训练模型文件也部署到开发板上,经过实际测试,以下模型在开发板上运行正常,而其它模型则因内存不够而报错。
1: "udnie",
2: "la_muse",
3: "the_scream",
4: "candy",
5: "mosaic",
6: "feathers",
7: "starry_night"
05.软件运行效果
把QT软件与相关模型文件部署到开发板上后,即可以运行测试效果,开发板上启动运行QT程序命令:
./style_transform -platform linuxfb
运行后,选择一张图片显示如下:
点击 “transform”按钮,等待约13秒,得到风格转移输出画面,如下:
再换一张米尔的LOGO图,这个图片尺寸较小,图像内容变化率低看一下,风格化转换时间:
测试仍然为13秒左右,得到如下输出图像:
这上面使用的是feathers模型生成的风格图片,其它模型时间也差不多在这个时间。
06.开发后记
最后使用开发的图像转换程序,在MAC电脑上编译了MAC版本与开发板上对同一图片转换进行比较。其使用MacBook Pro 2.2G 16G内存主频硬件运行该图片转换时,需要8.6秒。多次测试,对不同模型的转换分别测试,基本上在MYD-YG2LX上运行速度能达到MAC电脑转换的66%性能,这个结果看该开发板其DNN推理计算性能比较强悍。
该项目在后续的发展中,在有更多时间时,将尝试训练更多特色的风格,以及融入GAN生成神经网络模型的内容生成模型,尝试多种方法来进行更丰富多彩的内容生成。
在做本项目开发时,从资料中已知知名的内容生成项目stable diffusion已经在一些嵌入式开发板上移植运行成功,这个振奋的消息会不会又给自己挖了一个坑呢。
07.参考文献与资料
[1]. MYD-YG2LX开发板文档:http://down.myir-tech.com/MYD-YG2LX
[2] PerceptualLosses for Real-Time Style Transfer and Super-Resolution。李飞飞
[3].MYD-YG2LX_Linux软件开发指南http://down.myir-tech.com/MYD-YG2LX/User_Manual.zip
[4].SDK 及原理图仓库:http://down.myir-tech.com/MYD-YG2LX/01_Documents.zip
[5] 黄俊明; 陈平平; 王彩申; Linux环境下基于OpenCV图像处理,电脑编程技巧与维护,2023.1
[6] Perceptual lossfor Real time Style Transfer and Super-Resolution 论文阅读分析https://zhuanlan.zhihu.com/p/27165113
[7] Torch风格转移训练完成模型:https://github.com/jcjohnson/fast-neural-style