0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于英特尔开发套件的AI字幕生成器设计

英特尔物联网 来源:英特尔物联网 2023-09-27 16:59 次阅读

作者:周兆靖 英特尔软件应用工程师

一、本文目的

市面上有很多自然语言处理模型,本文旨在帮助开发者快速将 OpenAI* 的热门 NLP 模型 Whisper 部署至英特尔开发套件爱克斯开发板上,由于开发板内存有限,所以我们选择较轻量化的 Base Whisper 模型通过 OpenVINO 工具套件进行 AI 推理部署。由于声音处理应用的广泛性,开发者可以基于本项目继续进行 AI 应用的顶层开发。

二、项目介绍

语音识别人工智能中的一个领域,它允许计算机理解人类语音并将其转换为文本。该技术用于 Alexa*和各种聊天机器人应用程序等设备。而我们最常见的就是语音转录,语音转录可以语音转换为文字记录或字幕。通过输入音频,通过 OpenVINO 优化过的Whisper模型,将音频进行 AI 处理,最后输出音频处理结果。此结果可以根据开发者不同的需求,继续进行再次开发。

英特尔 开发套件——爱克斯开发板简介

英特尔认证的开发套件 —— AIxBoard(爱克斯板*)开发板是专为支持入门级边缘 AI 应用程序所设计的嵌入式硬件,它能够满足开发者对于人工智能学习、开发、实训等应用场景的使用需求。

基于 x86 平台所设计的开发板,可支持 Linux* Ubuntu*及完整版 Windows* 操作系统,很方便开发者进行软硬件开发,以及尝试所有 x86 平台能够应用的软件功能。开发板搭载一颗英特尔赛扬N5105 4 核 4 线程处理器,睿频可达 2.9GHz,且内置英特尔超核芯显卡,含有 24 个执行单元,分辨率最大支持 4K 60 帧,同时支持英特尔 Quick Sync Video 技术可以快速转换便携式多媒体播放器的视频。板载 64GB eMMC 存储及 LPDDR4x 2933MHz(4GB/6GB/8GB),内置蓝牙Wi-Fi 模组,支持 USB 3.0、HDMI 视频输出、3.5mm 音频接口,1000Mbps 以太网口。

此外, 其接口与 Jetson Nano 载板兼容,GPIO 与树莓派兼容,能够最大限度地复用树莓派、Jetson Nano 等生态资源,无论是摄像头物体识别,3D 打印,还是 CNC 实时插补控制都能稳定运行。可作为边缘计算引擎用于人工智能产品验证、开发;也可以作为域控核心用于机器人产品开发。

OpenVINO 工具套件介绍

OpenVINO 是一个开源工具包,可优化和部署深度学习模型。它提供了针对视觉、音频和语言模型的深度学习性能加速,支持流行框架如 TensorFlow、PyTorch 等。

f96585a6-5d13-11ee-939d-92fbcf53809c.png

图 3:OpenVINO 工具套件部署架构图

OpenVINO 可以优化几乎任何框架的深度学习模型,并在各种英特尔处理器和其他硬件平台上以最佳性能进行部署。OpenVINO Runtime 可以自动使用激进的图形融合、内存重用、负载平衡和跨 CPUGPU、VPU 等进行集成并行处理,以优化深度学习流水线。您可以集成和卸载加速器附加操作,以减少端到端延迟并提高吞吐量。通过 OpenVINO 的后训练优化工具和神经网络压缩框架中提供的量化和其他最先进的压缩技术,进一步提高模型的速度。这些技术还可以减少模型的大小和内存需求,使其能够部署在资源受限的边缘硬件上。

Whisper 模型介绍

Whisper 来自于知名 AI 组织 OpenAI*,这个模型是一种通用的语音识别模型。它是在各种音频的大型数据集上训练的,也是一个多任务模型,可以执行多语言语音识别、语音翻译和语言识别。

wav2vec2、Conformer 和 Hubert 等最先进模型的最新发展极大地推动了语音识别领域的发展。这些模型采用无需人工标记数据即可从原始音频中学习的技术,从而使它们能够有效地使用未标记语音的大型数据集。它们还被扩展为使用多达 1,000,000小时的训练数据,远远超过学术监督数据集中使用的传统 1,000小时,但是以监督方式跨多个数据集和领域预训练的模型已被发现表现出更好的鲁棒性和对持有数据集的泛化,所以执行语音识别等任务仍然需要微调,这限制了它们的全部潜力。为了解决这个问题 OpenAI 开发了 Whisper,一种利用弱监督方法的模型。

f97bcc12-5d13-11ee-939d-92fbcf53809c.png

图 4:Whisper 模型框图

主要采用的结构是编码器 - 解码器结构。

模型的输入音频重采样设为 16000 Hz,针对音频的特征提取方法是使用 25 毫秒的窗口和 10 毫秒的步幅计算80通道的 log Mel 谱图。最后对输入特征进行归一化,将输入在全局内缩放到 -1 到 1 之间,并且在预训练数据集上具有近似为零的平均值。

编码器/解码器:

该模型的编码器和解码器采用 Transformers

编码器的过程:

编码器首先使用一个包含两个卷积层(滤波器宽度为 3)的词干处理输入表示,使用 GELU 激活函数。

第二个卷积层的步幅为 2,然后将正弦位置嵌入添加到词干的输出中,然后应用编码器 Transformer 块。

Transformers 使用预激活残差块,编码器的输出使用归一化层进行归一化。

解码的过程:

在解码器中,使用了学习位置嵌入和绑定输入输出标记表示。

编码器和解码器具有相同的宽度和数量的 Transformers 块。

训练:

为了改进模型的缩放属性,它在不同的输入大小上进行了训练。

通过 FP16、动态损失缩放,并采用数据并行来训练模型。

使用 AdamW 和梯度范数裁剪,在对前 2048 次更新进行预热后,线性学习率衰减为零。

使用 256 个批大小,并训练模型进行 220 次更新,这相当于对数据集进行两到三次前向传递。

Whisper 在不同数据集上的对比结果,相比 wav2vec 取得了目前最低的词错误率,如下表:

f996f49c-5d13-11ee-939d-92fbcf53809c.png

图 5:Whisper 模型与 wav2vec 词错误率对比表

三、项目流程

f9d2daca-5d13-11ee-939d-92fbcf53809c.png

图 6:Whisper 模型语音处理流程图

利用 Whisper 模型进行视频文字识别的流程如上,首先准备语音文件,常规操作是将语音流从视频流中分离,然后通过 Whisper 模型编码语音文件的前 30 秒,输出该语音文件对于的语言种类的多种可能性,选择可能性最高的一种语言继续进行编码。将整段语音文件分割成多个 30 秒的小段进行编码,再通过 Beam 搜索算法将音频特征都转 为token ID, 最后将 token ID 翻译成 tokens 就可以获得识别到的文本了。

使用 OpenVINO 工具套件对 Whisper 模型进行推理加速,主要在 Encoder 和 Decoder 上使用 OpenVINO Runtime,对应到流程图中,我们在不更改主体 pipeline 的前提下,OpenVINO 为流程中的“Positional Encoding”和“Cross attention”赋能,代码实现层面就是使用 OpenVINO Runtime API 替换掉原先的 Encoder 和 Decoder,使得 OpenVINO 得以加入到这个音频处理流程中,如下图所示:

f9f1659e-5d13-11ee-939d-92fbcf53809c.png

图 7:OpenVINO 赋能 Whisper 模型项目示意图

四、实验流程

硬件:英特尔开发套件 —— 爱克斯开发板

OS:Ubuntu 20.04LTS

软件:OpenVINO 2023.0,Whisper

由于 Whisper 预训练模型根据参数量分为 Tiny, Base, Small, Medium, Large。本次实验中选择参数量为 74M 的 base 模型进行实验,使用预训练模型直接通过 OpenVINO 的模型优化器 API 转换为 IR 格式文件,将 Whisper 的编解码器构建成流水线,便可对视频进行语音转文字的 AI 处理了。

安装依赖:

为实现最快速的部署,我们直接下载 OpenVINO Open Model Zoo 里的现成 Notebook 进行实验。

Git clone https://github.com/openvinotoolkit/ openvino_notebooks.git

左滑查看更多

构建虚拟环境,安装 OpenVINO,Whisper 以及其他依赖:

python3 -m venv openvino_env
source env/bin/activate

左滑查看更多

命令行中运行如下 pip 安装指令:

pip install openvino
pip install -q "python-ffmpeg<=1.0.16" moviepy transformers onnx
python -m pip install pytube
pip install -q -U gradio
pip install git+https://github.com/openai/whisper.git

左滑查看更多

进入 notebooks/227-whisper-subtitles-generation/目录中,安装 Jupyter Notebook 并打开 227-whisper-convert.ipynb 文件:

pip install notebook
jupyter notebook

下面进入 227-whisper-convert.ipynb 文件中运行代码

首先,下载 Whisper 现成的预训练模型,代号为“base”

import whisper


model = whisper.load_model("base")
model.to("cpu")
model.eval()
pass

左滑查看更多

模型主要是编码器 - 解码器的结构,所以我们先把 Encoder 部分被转成 IR 模型,保存至本地:

import torch
import openvino as ov


mel = torch.zeros((1, 80, 3000))
audio_features = model.encoder(mel)
encoder_model = ov.convert_model(model.encoder, example_input=mel)
ov.save_model(encoder_model, WHISPER_ENCODER_OV)

左滑查看更多

然后把模型的 Decoder 部分也转成 IR 模型,保存至本地:

tokens = torch.ones((5, 3), dtype=torch.int64)
logits, kv_cache = model.decoder(tokens, audio_features, kv_cache=None)


tokens = torch.ones((5, 1), dtype=torch.int64)
decoder_model = ov.convert_model(model.decoder, example_input=(tokens, audio_features, kv_cache))


ov.save_model(decoder_model, WHISPER_DECODER_OV)

左滑查看更多

创建 core 对象,启用 OpenVINO Runtime:

core = ov.Core()

推理设备选择“AUTO”Plugin,表示自动选择当前系统最优的推理硬件:

device = widgets.Dropdown(
  options=core.available_devices + ["AUTO"],
  value='AUTO',
  description='Device:',
  disabled=False,
)

左滑查看更多

我们的实验将复用原生模型处理音频的 pipeline,只需要将原来的编码器和解码器用 OpenVINO Runtime API 重写,即可得到 OpenVINO 加速过的 pipeline。

当前文件目录下包含“utils.py”,此脚本中集成了三个最重要的类,分别是:

patch_whisper_for_ov_inference,

OpenVINOAudioEncoder,

OpenVINOTextDecoder。

patch_whisper_for_ov_inference 主要提供了一些功能函数,比如获取音频,增加时间戳,生成字幕文件等等。另外两个类在这里的作用是使用 OpenVINO Runtime API 对原始模型 Encoder 和 Decoder 进行重写,利用 OpenVINO Runtime 替换掉原始模型中的 Encoder 和 Decoder 以加速优化模型运行的速度。

from utils import patch_whisper_for_ov_inference, OpenVINOAudioEncoder, OpenVINOTextDecoder


patch_whisper_for_ov_inference(model)


model.encoder = OpenVINOAudioEncoder(core, WHISPER_ENCODER_OV, device=device.value)
model.decoder = OpenVINOTextDecoder(core, WHISPER_DECODER_OV, device=device.value)

左滑查看更多

最终,调用 model.transcribe 函数,运行 AI 推理,并将生成的字幕文件保存为 srt 格式文件:

output_file = Path("downloaded_video.mp4")
from utils import get_audio


audio = get_audio(output_file)
task = widgets.Select(
  options=["transcribe", "translate"],
  value="translate",
  description="Select task:",
  disabled=False
)
task
transcription = model.transcribe(audio, task=task.value)
from utils import prepare_srt


srt_lines = prepare_srt(transcription)
# save transcription
with output_file.with_suffix(".srt").open("w") as f:
  f.writelines(srt_lines)

左滑查看更多

注意,由于 Notebook 提供的视频是 YTB 的视频,可能遇到无法下载的情况,这里我们也提供了一小段英文视频可供读者自由下载

只需将下载视频替换 notebook 里的视频路径即可体验 AI 字幕的功能。

结果展示:

视频播放软件可以直接导入 SRT 字幕文件生成字幕

五、小结

英特尔认证的开发套件—— 爱克斯开发板以 Intel Celeron N5105 作为处理核心,在相同的功耗下获得了优秀的计算性能。在本次实验中,它在 OpenVINO 工具套件的加持下可以轻松完成语音转文字的任务,通过轻量化 AI 模型(Whisper)实现字幕实时生成的功能。回顾之前搭建流媒体服务器的文章,我们可以使用开发板搭建一个 RTMP 流媒体服务器,然后可以将它们结合,将输入服务器的视频流实时生成字幕之后进行输出,这样就可以获得一个能给视频加英文字幕的流媒体服务器。爱克斯板的 I/O 接口丰富,摄像头,麦克风,传感器都可以进行接入,并且开发板有着不错的 CPU 处理性能,可以在 OpenVINO 工具套件的加持下处理一些常规的 AI 推理任务,开发者可以根据项目需求进行巧妙搭配,组合创新。作为英特尔认证的 DevKit,这块小小的开发板却蕴含着巨大的能量,可以兼容市面上大多数的扩展设备,也可以应用上英特尔提供的软硬件技术,加上集成显卡能为编解码处理与 AI 推理赋能,这块板子还是能创造出许多有趣的应用的。如果你对这块开发板感兴趣,那就赶快行动起来,开始你的开发创造之旅吧。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 英特尔
    +关注

    关注

    60

    文章

    9421

    浏览量

    168826
  • AI
    AI
    +关注

    关注

    87

    文章

    26443

    浏览量

    264052
  • 人工智能
    +关注

    关注

    1776

    文章

    43845

    浏览量

    230605
  • 开发套件
    +关注

    关注

    2

    文章

    125

    浏览量

    24156
  • OpenVINO
    +关注

    关注

    0

    文章

    59

    浏览量

    91

原文标题:如何使用英特尔开发套件部署 AI 字幕生成器 | 开发者实战

文章出处:【微信号:英特尔物联网,微信公众号:英特尔物联网】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    【Intel Edison试用体验】+Intel Edison开发套件资料 

    本帖最后由 anger0925 于 2016-7-1 08:17 编辑 Intel Edison Arduino开发套件资料: 1,英特尔® Edison开发套件中文官网,http
    发表于 07-01 08:16

    英特尔物联网创客竞赛专贴】有任何问题都可以在这里提

    鼓励业余爱好者、企业开发人员和高校师生了解英特尔® 物联网开发套件并基于套件开发物联网解决方案。发烧友此次承办深圳的IoT Roadshow
    发表于 09-09 10:01

    python生成器

    python生成器1. 什么是生成器生成器(英文名 Generator ),是一个可以像迭代器那样使用for循环来获取元素的函数。生成器的出现(Python 2.2 +),实现了延时
    发表于 02-24 15:56

    pim卡资料生成器

    pim卡资料生成器
    发表于 11-22 23:23 6次下载

    自制酸奶生成器

    自制酸奶生成器
    发表于 04-23 11:48 879次阅读
    自制酸奶<b class='flag-5'>生成器</b>

    LED段码生成器

    本文提供的LED段码生成器,希望对你的学习有所帮助!
    发表于 06-03 15:19 96次下载

    英特尔酷睿2双核处理器SL9380和英特尔3100芯片组开发套件

    英特尔 酷睿2 双核处理器 SL9380 和英特尔 3100 芯片组开发套件为各种嵌入式和通信基础设施应用提供优越的平台,特别是要求高性能、高可靠性和低功耗的小型嵌入式平台应用,例如:
    发表于 12-07 14:07 23次下载
    <b class='flag-5'>英特尔</b>酷睿2双核处理器SL9380和<b class='flag-5'>英特尔</b>3100芯片组<b class='flag-5'>开发套件</b>

    英特尔凌动N270处理器和移动式英特尔945GSE高速芯片组开发套件

    英特尔 凌动 N270 处理器 和移动式英特尔 945GSE 高速芯片组开发套件高速芯片组开发套件为嵌入式市场提供了优异的每瓦性能、高能效显卡, 丰富的 I/O 功能, 并且经济高效的
    发表于 12-07 14:08 30次下载
    <b class='flag-5'>英特尔</b>凌动N270处理器和移动式<b class='flag-5'>英特尔</b>945GSE高速芯片组<b class='flag-5'>开发套件</b>

    英特尔BOOT Loader开发套件-高级嵌入式开发基础

    从技术角度概括介绍用于快速开发和部署启动加载器的英特尔 Boot Loader 开发套件(英特尔 BLDK),该套件基于
    发表于 12-07 14:57 59次下载
    <b class='flag-5'>英特尔</b>BOOT Loader<b class='flag-5'>开发套件</b>-高级嵌入式<b class='flag-5'>开发</b>基础

    代码生成器的应用

    jeesite框架代码生成器,可以很方便的生成代码,挺不错的。
    发表于 01-14 15:19 0次下载

    英特尔的945GME高速芯片组开发套件

    英特尔的945GME高速芯片组开发套件
    发表于 10-30 11:57 3次下载

    使用英特尔物联网商业开发套件改变世界

    使用英特尔®物联网商业开发套件改变世界。
    的头像 发表于 05-31 10:06 1610次阅读

    python生成器是什么

    python生成器 1. 什么是生成器生成器(英文名 Generator ),是一个可以像迭代器那样使用for循环来获取元素的函数。 生成器的出现(Python 2.2 +),实现
    的头像 发表于 02-24 15:53 3079次阅读

    通用RFID生成器

    通用RFID生成器资料分享
    发表于 02-10 15:35 1次下载

    基于OpenVINO在英特尔开发套件上实现眼部追踪

    本文将以训练一个眼部追踪 AI 小模型为背景,介绍从 Pytorch 自定义网络模型,到使用 OpenVINO NNCF 量化工具优化模型,并部署到英特尔开发套件爱克斯开发板 AIx
    的头像 发表于 09-18 10:11 436次阅读