【2023 Intel有奖征文】基于爱克斯板开发属于自己的AI作画助手

Tango 更新于 8月前

爱克斯板:

英特尔数字化开发套件AIxBoard(X板)是一款IA架构的人工智能嵌入式开发板,体积小巧功能强大,可让您在图像分类、目标检测、分割和语音处理等应用中并行运行多个神经网络。它是一款面向专业创客、开发者的功能强大的小型计算机,借助OpenVINO工具套件,CPU、iGPU都具备强劲的AI推理能力,为您下一款基于 AI 的产品进行原型设计并将其快速推向市场的理想解决方案。

OpenVINO:

OpenVINO是英特尔基于自身现有的硬件平台开发的一种可以加快高性能计算机视觉和深度学习视觉应用开发速度工具套件,支持各种英特尔平台的硬件加速器上进行深度学习,并且允许直接异构执行。支持在Windows与Linux系统,Python/C++语言。OpenVINO最显著的3个特点是:高性能深度学习推理,简化开发 易于使用,一次编写 任意部署

SD

Stable Diffusion是一种潜在扩散模型(Latent Diffusion Model),能够从文本描述中生成详细的图像。它还可以用于图像修复、图像绘制、文本到图像和图像到图像等任务。简单地说,我们只要给出想要的图片的文字描述在提Stable Diffusion就能生成符合你要求的逼真的图像!

我们今天一起尝试在爱克斯板上实现文生图,看看效果如何。


1. 基础环境

OS:Windows11

软件:

- Python:miniconda
- OpenVINO
- git

硬件:

 - 爱克斯版

 - 硬盘

2. 安装Python环境

我们为了操作方便,可以远程连接到爱克斯开发板(后面简称为开发板)

image-20230919211408713

安装miniconda

image-20230919211929569

image-20230919211952353

image-20230919212010889

image-20230919212055497

image-20230919212124349

image-20230919212217748

image-20230919212232397

打开CMD确认Python是否安装成功

image-20230919212441399

image-20230919212503031

3. 安装git

官网:Git - Downloading Package (git-scm.com)

image-20230919213634485

image-20230919213649917

image-20230919213705095

image-20230919213717551

image-20230919213731487

image-20230919213752404

image-20230919213810767

image-20230919213826103

image-20230919213836968

image-20230919213847167

image-20230919213857702

image-20230919213908821

image-20230919213920069

image-20230919213932190

image-20230919213946924

image-20230919214003073

image-20230919214219847

其实选择的都是默认,至此Git也完成了安装。

如果你看到如下报错

image-20230919221140939

则需要添加一下环境变量

image-20230919221236484

4. 创建项目虚拟环境

我们将项目保存在D盘(这是我额外安装的一块固态硬盘,如下图)

292d980a9fe086387072f32ccde84f7

后续我们还需要创建虚拟内存,也是配置在这块硬盘上的。

1. 创建Python3.9的虚拟环境

cd D:\Work
conda create -n py39 python==3.9.0 -y

image-20230919215011498

image-20230919215100459

激活虚拟环境

conda activate py39

image-20230919215139049

2. 拉取stable_diffusion.openvino项目

我们可以先已这个项目为基础,将SD的环境准备好,并通过OpenVINO加速。

git clone --depth=1 https://github.com/openvinotoolkit/openvino_notebooks.git

image-20230920004147418

创建openvino_env

python -m venv openvino_env
openvino_env\Scripts\activate

image-20230920003140475

image-20230920003238487

3. 安装环境依赖文件

cd openvino_notebook***r/>python -m pip install --upgrade pip wheel setuptool***r/>pip install -r requirements.txt

image-20230920004736171

image-20230920005630651

6. 设置虚拟内存

在windows上设置虚拟内存还是比较简单的。

image-20230919230105197

进入高级系统设置

image-20230919230144197

点击设置

image-20230919230216911

选择高级

image-20230919230247860

点击更改

image-20230919230333498

去掉自动管理....并选中D盘

image-20230919230456078

选择自定义并设置20G的虚拟内存,点击设置进行保存。

image-20230919230601237

完成设置。需要重启电脑生效。

image-20230919230647637

7. 文生图效果查看

运行以下命令启动notebooks

jupyter lab notebooks

image-20230920005907143

逐个单元格运行一下即可看到效果,如果pip 执行的比较慢可以修改一下代码,例如:

%pip install -q "optimum-intel[openvino,diffusers]" "ipywidgets" "transformers >= 4.31" -i https://pypi.mirrors.ustc.edu.cn/simple/

第一次运行时会下载一下模型文件

image-20230920011740634

当在出图的过程中,我们可以观察一下CPU和内存的占用情况

image-20230920013312609

很明显,如果不设置虚拟内存是没有办**常运行的,如果要想速度快一些,建议搭建也是使用固态硬盘这样效果会好一些。

去掉下载模型的时间,使用原生的方法出图大概15分钟左右,效果如下

image-20230920013838208

接下来我们使用OpenVINO优化后可以节省三分之一的时间,因此我们后续会使用OpenVINO优化后的方案进行案例的落地。由于篇幅问题,这里先暂时告一段落。项目部分我们再另写一篇文章。

8. 注意点

1. 用户名不要使用中文

我们在用OpenVINO转换模型的时候,会在temp文件夹下保存临时文件,如果用户名为中文很可能导致文件保存失败。如果不想重新搞环境,可以在环境变量里面修改temp的设置

image-20230920020615725

2. 项目启动报错

如果path有问题,可能导致启动不了,我这边的解决方案是修改了__init__.py

# -*- coding: utf-8 -*-
# Copyright (C) 2018-2023 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

"""openvino module namespace, exposing factory functions for all ops and other classe*******r/># noqa: F401

import o***r/>import sy***r/>
if sys.platform == 'win32':
   # Installer, yum, pip installs openvino dlls to the different directorie***r/>    # and those paths need to be visible to the openvino module***r/>    #
   # If you're using a custom installation of openvino,
   # add the location of openvino dlls to your system PATH.
   #
   # looking for the libs in the pip installation path by default.
   openvino_libs = [os.path.join(os.path.dirname(__file__), '..', '..', 'openvino', 'lib******r/>    # setupvar***at script set all libs paths to OPENVINO_LIB_PATHS environment variable.
   openvino_libs_installer = os.getenv('OPENVINO_LIB_PATHS')
   if openvino_libs_installer:
       openvino_libs.extend(openvino_libs_installer.split(';'))
   for lib in openvino_libs:
       lib_path = os.path.join(os.path.dirname(__file__), lib)
       if os.path.isdir(lib_path):
           # On Windows, with Python >= 3.8, DLLs are no longer imported from the PATH.
           if (3, 8) <= sys.version_info:
               os.add_dll_directory(os.path.abspath(lib_path))
               # 加上这句
               os.environ['PATH'] = os.path.abspath(lib_path) + ';' + os.environ['PATH']
           else:
               os.environ['PATH'] = os.path.abspath(lib_path) + ';' + os.environ['PATH']

from .ie_api import *

__all__ = ['IENetwork', 'TensorDesc', 'IECore', 'Blob', 'PreProcessInfo', 'get_version']



from openvino.utils import _add_openvino_libs_to_search_path

_add_openvino_libs_to_search_path()

from openvino._pyopenvino import get_version
# -*- coding: utf-8 -*-
# Copyright (C) 2018-2021 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
__version__ = get_version()

# Openvino pybind bindings and python extended classe***r/>from openvino._pyopenvino import Dimension
from openvino._pyopenvino import Input
from openvino._pyopenvino import Output
from openvino._pyopenvino import Node
from openvino._pyopenvino import Type
from openvino._pyopenvino import PartialShape
from openvino._pyopenvino import Shape
from openvino._pyopenvino import Stride***r/>from openvino._pyopenvino import CoordinateDiff
from openvino._pyopenvino import DiscreteTypeInfo
from openvino._pyopenvino import AxisSet
from openvino._pyopenvino import AxisVector
from openvino._pyopenvino import Coordinate
from openvino._pyopenvino import Layout
from openvino._pyopenvino import ConstOutput
from openvino._pyopenvino import layout_helper***r/>from openvino._pyopenvino import OVAny
from openvino._pyopenvino import RTMap
from openvino.runtime.ie_api import Core
from openvino.runtime.ie_api import CompiledModel
from openvino.runtime.ie_api import InferRequest
from openvino.runtime.ie_api import Model
from openvino.runtime.ie_api import AsyncInferQueue
from openvino._pyopenvino import Version
from openvino._pyopenvino import Tensor
from openvino._pyopenvino import Extension
from openvino._pyopenvino import ProfilingInfo
from openvino._pyopenvino import get_batch
from openvino._pyopenvino import set_batch
from openvino._pyopenvino import serialize
from openvino._pyopenvino import save_model
from openvino._pyopenvino import shutdown

# Import opset***r/>from openvino.runtime import opset1
from openvino.runtime import opset2
from openvino.runtime import opset3
from openvino.runtime import opset4
from openvino.runtime import opset5
from openvino.runtime import opset6
from openvino.runtime import opset7
from openvino.runtime import opset8
from openvino.runtime import opset9
from openvino.runtime import opset10
from openvino.runtime import opset11
from openvino.runtime import opset12

# Import properties API
from openvino.runtime import propertie***r/>
# Helper functions for openvino module
from openvino.runtime.ie_api import tensor_from_file
from openvino.runtime.ie_api import compile_model

# Extend Node class to support binary operator***r/>Node.__add__ = opset12.add
Node.__sub__ = opset12.subtract
Node.__mul__ = opset12.multiply
Node.__div__ = opset12.divide
Node.__truediv__ = opset12.divide
Node.__radd__ = lambda left, right: opset12.add(right, left)
Node.__rsub__ = lambda left, right: opset12.subtract(right, left)
Node.__rmul__ = lambda left, right: opset12.multiply(right, left)
Node.__rdiv__ = lambda left, right: opset12.divide(right, left)
Node.__rtruediv__ = lambda left, right: opset12.divide(right, left)
Node.__eq__ = opset12.equal
Node.__ne__ = opset12.not_equal
Node.__lt__ = opset12.les***r/>Node.__le__ = opset12.less_equal
Node.__gt__ = opset12.greater
Node.__ge__ = opset12.greater_equal


0个评论