二、OpenVINO简述与构建流程

二、OpenVINO简述与构建流程

1 人工智能与视觉应用

1. 计算机视觉与图像处理
  • 图像: 在计算机中,每张图像是由像素构成的阵列,表示为像素值。通常在灰度图中,像素仅单个通道,每个像素值的区间为0 ~ 255,其中255表示白色,0表示黑色。而在彩色RGB图像中,每个像素由R、G、B三个通道组成,每个通道中的像素值区间均为0 ~ 255。

  • 视频: 如果说图像是多个像素构成的阵列,那么视频则是由一系列连续图像组成的序列,当图像切换速度足够快时,就形成了平滑连续的视觉效果。如在电影视频中,每秒24帧指的是视频每秒放映的画面数,一幅画面就是一帧,连续的24帧构成了视频一秒内的输出内容。至于为什么看24帧的电影毫无违和感,而60帧以下的游戏却会感觉到明显卡顿,这里就涉及到动态模糊,现实光影在记录时会因为动态模糊存在“多余”的丰富图像信息,而游戏3D实时渲染却不会存在这些动态模糊带来的“多余”信息,其间的差异就造成了观看时的卡顿感。至于动态模糊的概念,这里暂且不做过多赘述。

  • 图像处理

    • 模糊:平滑处理每个像素及其周围的8个像素值,选取其平均值作为该点的像素值,即可获得更加模糊的图像。

    • 锐化:扩大像素点与周围像素点的差异,将会得到更锐利的图像。继续进行锐化,图像将仅保留像素值的显著差异,只能看到图像中物体的边缘,可用于检测图像的角、边缘、线等

      二、OpenVINO简述与构建流程_第1张图片

    • 边缘:在RGB图像中,边缘常常存在于像素值剧烈变化处。因此常常针对这一特征进行物体边缘检测。可以检测图像中的边缘、线、角作为图像特征,由此查找真实图像

      二、OpenVINO简述与构建流程_第2张图片

2. 视频压缩技术与加速处理
  • 视频压缩技术: 假设在未经压缩的情况下,1080P 25帧视频的一帧由1920×1080个像素点组成,每个像素点有RGB三个通道,大小约3 bytes。此时一帧图像约为6.2 MB,每秒需要155 MB存储空间,那么一分钟视频约为9.3 GB。为了压缩这些数据,达到通过较少比特去呈现大量数据,同时不丢失太多信息的目的。就需要利用视频压缩,即冗余技术。

  • 冗余:

    • 空间冗余:在一系列图像内,天空区域所有像素都是相同颜色,此时无需存储每张图像中天空区域的全部像素,仅需存储该区域所有像素的平均值,在显示时应用到天空区域内每个像素上即可。

      二、OpenVINO简述与构建流程_第3张图片

    • 时间冗余:在连续帧中局部区域内目标对象像素颜色相同,位置随时间变化,此时仅需存储第一帧中该对象的像素,在后续帧中直接使用即可。

      二、OpenVINO简述与构建流程_第4张图片

    • 帧:

      • I 帧:在存储时,某些帧因包含独特信息,需要将整帧像素内容全部存储,这种帧就叫做 I
      • P 帧:在两个 I 帧之间,可以用于记录两帧间的差异,这些帧就叫 P 帧。其中包含了如何从上一个 I 帧生成此 P帧的信息,数据量约为 I 帧的 1/2。
      • B 帧:存在于 I 帧与 P 帧之间,记录帧与帧之间的差值,数据量量为 I 帧的 1/4,B 帧之间的变化可以自动生成。

      二、OpenVINO简述与构建流程_第5张图片

  • 编解码器与视频加速

    • 编解码器:视频在传输与存储时应进行编码压缩,播放时需要解码还原。为保证双端一致,其间的规则为编解码技术,由编解码器对视频进行压缩和解压缩。目前常用的编解码器为H.264与AVC、H.265与HEVC等,后者的压缩速度为前者的两倍,但消耗的资源则是前者的三倍。

    • 视频文件:视频文件的本质是一个Container容器文件,以mp4文件为例,其中包含了视频流文件H.264、音频流文件mp3以及信息流元数据等。

      二、OpenVINO简述与构建流程_第6张图片

    • 视频处理任务:将视频存储在大型缓冲区中进行逐帧处理,比较并查看两帧之间发生的变化。

    • 硬件加速:基于Intel 快速视频同步技术(Quick Sync Video Technology,QSVT),Intel CPU可以完成对视频的编解码处理任务。同时Intel集成显卡包含EUs和QSVT两部分,EUs为GPU处理器单元,用于图像视频渲染任务,QSVT则负责加速视频编解码等处理任务。

      二、OpenVINO简述与构建流程_第7张图片

    • 软件加速:Intel 驱动程序 位于集成GPU上层,在其之上是 VAAPI-Libva 视频加速API,在往上则是封装好的 Media-SDK,用于提供C++/Python的API接口,帮助用户在多平台多系统下通过该软件使用Intel QSVT完成对视频的编解码以及处理任务。可通过 OpenCVFFMPEGGStreamer 直接访问Media-SDK API,目前OpenVINO中已包含了Media-SDK。

3. 视觉应用与神经网络加速
  • 神经网络

    • 训练:神经网络输入大量数据,改进权重,降低错误率,最终获得一个具有特定权重的神经网络的过程。
    • 推理:神经网络输入新的图像,获得答案的过程。
  • DLDT: DLDT为Intel提供的深度学习部署套件(Deep Learning Deployment Toolkit),作为OpenVINO的核心组件,DLDT提供了构建AI应用的解决方案、示例、程序以及模型下载器等。通过DLDT,用户可以将预训练模型(TensorFlow、Caffe、mxnet、ONNX)输入到模型优化器中,转换为中间表示的IR格式,随后采用推理引擎读取IR文件,在多种硬件上进行推理即可。对于PyTorch模型,需要先转化为ONNX格式,再输入到模型优化器中进行转换即可。

    二、OpenVINO简述与构建流程_第8张图片

4. 视频分析处理流程
  • 视频分析 = 视频处理 + 计算机视觉 + AI 推理

    • 解码:对压缩的视频流进行解码,可同时解码多个不同分辨率和格式的视频流
    • 预处理:通过锐化、亮度调整等操作提升图像质量;当图像尺寸过大时,可缩小图像或裁剪感兴趣区域(ROI);可选择跳过部分帧或尝试推理所有帧。
    • 推理:使用多个或单个深度学习模型进行推理,对输入图像进行检测、分类以及识别等操作
    • 发送处理:在获得处理结果后针对原始图像进行处理,如绘制检测框等
    • 编码:压缩视频以便进行传输或存储
  • 注:上述所有操作均要在每一帧上运行,但也有部分操作需要跨帧运行,以”跟踪(Tracking)“为例,对于移动状态的同一对象,无需重新连续识别浪费资源,只需跳帧识别,比较连续帧,确认是同一对象即可。

  • 组件应用情况

    • Media-SDK:编解码和预处理
    • DLDT:基于深度学习的推理加速
    • OpenCV:理论上基本可完成整个流程,但有时需要调用Media-SDK或推理引擎

    二、OpenVINO简述与构建流程_第9张图片

2 OpenVINO简述 与 AI应用构建流程

1. OpenVINO简述
  • OpenVINO Toolkit,由Intel提供的开放视觉推理与神经网络优化(Open Visual Inference and Neural Optimization)工具集,是一整套面向AI应用的Intel解决方案,提供了大量开源资源,包括预训练模型、应用示例以及场景演示等。

  • OpenVINO架构

    二、OpenVINO简述与构建流程_第10张图片

2. 模型优化器简介
  • 模型优化器(Model Optimizer):跨平台的命令行工具,支持训练和部署环境之间的转换,执行静态模型分析并自动调整深度学习模型
  • IR文件(IR):OpenVINO的中间层表示,由一个包含网络拓扑信息的xml文件和一个包含权重和偏差二进制数据的bin文件组成。
  • 推理引擎(Inference Engine):支持IR格式模型,采用模型在多种设备上运行并完成推理
  • 处理流程可采用离线方式,需要采用模型优化器将模型转为IR文件,在得到IR文件后,即可进行反复推理。

二、OpenVINO简述与构建流程_第11张图片

3. AI应用构建流程

二、OpenVINO简述与构建流程_第12张图片

  • 模型获取(Model):寻找合适的深度学习模型执行相应的任务

    • 使用OpenVINO提供的模型下载器进行下载

      python downloader.py --name model_name --output path

    • 从零开始训练模型,在制作数据集时可采用CVAT进行标注

    • 从Model Zoo中下载预训练模型,这些模型均针对推理进行了优化,也可通过个人数据集进行重新训练,模型精度有FP32、FP16、INT8三种

  • 推理前准备(Prepare Inference):模型通常是在云环境中训练,采用的是浮点格式,可支持模型格式转换。

    • 模型优化器可将各种框架中训练的模型转化成中间表示IR文件,以Caffe模型为例,执行命令mo_caffe.py --input_model path --output_dir path,即可将转化后的IR文件输出到指定路径,供推理引擎进行推理。
    • IR文件为OpenVINO的中间层表示,由一个包含网络拓扑信息的xml文件和一个包含权重和偏差二进制数据的bin文件组成。

    二、OpenVINO简述与构建流程_第13张图片

  • 性能指标评测(Benchmark):在多平台使用多项优化技术和多种数据格式进行性能指标评测,最终选择符合要求的

    二、OpenVINO简述与构建流程_第14张图片

    • 在准备好用于推理的模型后,Intel提供了用于基准性能测试的试用程序,在输入IR模型后,会输出该模型的各项参数数据。

      ./benchmark_app -m /model_name.xml

    • DEV Cloud包括多种可用于对工作负载进行性能测试的硬件系统,可免费注册进行测试

    • 若要对网络进行深层调试,OpenVINO API中内置了性能计算器,可对网络的每一层数据进行查找

    • WorkBench是为深度学习模型的性能分析与调试提供可视化的web应用,DL WorkBench在生成模型性能报告时可以实现:

      • 拓扑可视化
      • 模型性能对比
      • 模型逐层分析
  • 选择系统(Select System):这是整个流程中最关键的一步,需要选取合适的系统进行任务,尽量选择异构的系统对推理进行支持,如将CPU、GPU、FPGA以及VPU等进行组合。

  • 编解码密度(Decode Density):采用Media-SDK进行编解码并处理图像,同时了解设备的编解码能力,选取合适的设备进行支持。AI应用系统通过支持尽可能多的摄像头与视频流,来降低系统的整体成本

    二、OpenVINO简述与构建流程_第15张图片

  • 模拟工作负载(Full Pipeline):为了最大限度发挥系统性能,常采用GStreamer插件模拟整个流程的工作负载,获得相应的模拟结果以选择合适工作环境,以下图为例,其具体流程为:

    二、OpenVINO简述与构建流程_第16张图片

    加载视频→解码→转换解视频输出格式→加载加载脸部检测模型进行检测→加载情绪识别模型进行识别

  • 构建AI应用(AI Application):在确认所选系统可胜任工作后,构建软件或采用OpenVINO将视频分析处理流程和推理整合到现有应用中。需要注意的是,在实际AI系统中,解码、编码以及推理工作常常一起进行。

你可能感兴趣的:(openvino,计算机视觉,人工智能)