2024_ESDC 陪跑——关于我和intel杯的那些事
前言
笔者在大三发现要没书读了,开始疯狂打竞赛,索性运气较好,取得了不错的成绩。属于是输了大二,赢了大三,从此开始大四躺平。作品虽然开发时间不是很长,不过也是熬的筋疲力尽,作品完整性也有待商榷,但胜在创新性以及可展示性。果然嵌入式和电子设计还是不太一样()。下为报告灌水。
摘要
如今嵌入式芯片系统设计开发领域正迅猛发展,电子工程师对于系统自动化测试、提高生产力和测试测量效率的需求迅速增加。为解决电子工程师对于系统和芯片自动测试、仪器自动化运作需求,本项目将借助 Intel 强大的算力和丰富的接口,以哪吒开发套件为中心设备,配合其他通用VISA接口的仪器设备,以语音交互为操作方式,利用 Agent 将工程师请求解析成系统标准命令流,实现控制各类仪器;同时利用手势识别代替传统机械按键,实现仪器的“去按键化”,提升操作的便利性和灵活性。该项目提供一站式的系统和芯片调试测量、仪器使用帮助,极大的简化了仪器操作方式以适应不同的测试需求,为工程师提供及时和准确的测试结果。
关键词:仪器控制,数据分析,语音交互,手势识别,大语言模型,开放平台
项目背景
立项背景和意义
在当今,嵌入式芯片系统设计开发领域正以惊人的速度迅猛发展。据预测,从 2021 年到 2025 年,我国嵌入式系统市场规模的年复合增长率将达到 21%,智能硬件系列更是呈现出 25% 的增长趋势。在这一背景下,电子工程师对于系统自动化测试、提高生产力和测试测量效率的需求迅速增加、选型和参数调整愈加复杂,但常用仪器软件的迭代更新速度缓慢,计算和存储性能不足,功能单一集约,难以实现自动化测量,个人在系统开发当中进行迅捷测试的需求重要性不断凸显。部分个人开发者对于仪器高级使用仍未完全熟悉,有时难以捕获重要信息波形,造成信息延误。
随着科技的发展,诸如 GPT3.5、文心一言、ChatGLM、Google Bard 等通用大模型的涌现,以及新发展的 AI Agent 技术,已经为解决这一问题提供了新的可能性。这些通用大模型拥有庞大的知识储备,能够从自主决策走向自主行动,丰富了应用场景,提升了用户体验。自 AutoGPT 火爆以来,AI Agent 热度一路飙涨。落地应用离不开 Agent,开会活动聚焦 Agent,创业项目也在走向A gent。
回顾近几年来智能设备的设计发展,其实体按键和接口逐渐减少,在整体尺寸大小不变的情况下,通过将机械按键改为虚拟按键,尽可能增加屏幕屏占比以致于增加信息量。然而,使用传统的 QWERTY 键盘或是触摸屏界面,都将不可避免地导致设备磨损。此外,触摸屏界面在潮湿的环境中、用户戴着手套或者很难接触控制面板的情况下都不能使用,为提升用户操作的便利性和灵活性,基于手势识别的虚拟按键应运而生。动作识别技术在控制这方面展现出了广阔的应用前景。
在本次项目中,我们将借助 Intel 强大的算力和丰富的接口,一方面让 Intel AI Box 能够运行通用大模型,让非智能仪器接入模型,实现智能测量。使个人能够轻松获得科学合理完整统一的测试测量报告,降低了对于芯片、系统测试的使用门槛,另一方面,本项目致力于仪器“去按钮化”,通过手势识别来实现无接触控制仪器,进一步提升用户操作的便利性和灵活性。同时,本项目能够在任意仪器间轻松放置和迁移,降低仪器使用门槛,实现了从“学习仪器”到“仪器主动展示其功能”的转变。本项目将为新手入门到老手调试提供一站式的系统和芯片调试测量、仪器使用帮助或简化操作服务。
国内外发展现状
国内外对于芯片或系统测试的发展,主要集中于两个类别当中,一是:集中于生产环境当中对于芯片出厂时测试的专业设备,二是:个人使用针对小器件的测试设备。这两种设备中,专业设备主要的服务场景并非以开发为核心的工程师,同时价格高、难以获取、需要专人操作,而且专业设备自身整合了部分实验室设备,与嵌入式工程师现有设备功能存在重合;但专业性操作较多、个人工程师学习曲线陡峭。体积较大、功能受限,并非适用于实验室的设备。同时存在售价高昂、调整测试项目不便等问题。
而个人使用的设备,存在算力低、功能有限、功能分散的特点。在构建一套完整的测试体系时,除了接入整个电路之外,还需要进行手工的反复调整、机械劳动才能获得较为规整的数据。而这些调节过程,都可以通过一套完整的远程协议(如VISA)进行控制。
除此之外,目前的手势控制仅能实现比较简单的功能,即便如此,在真正的用户体验过程中还是会出现一些问题。不管是采用 ToF、结构光还是毫米波雷达识别手势,都要求手势指令必须在特定的区域内操作,所有手势还必须要符合系统对动作的标准要求;现有的识别多为单次按键类操作,对于连续的操作控制还处于发展阶段。
项目特点及优势
- 通用性强:与上述示波器等个人设备相比,我们的项目着重于解决系统和芯片自动测试、仪器自动化运作的需求,而不仅仅局限于单一测试功能。我们的系统提供全面的智能且自动化测试解决方案,还涵盖了信号生成、数据采集、分析和报告等方面的功能。提供更加综合和全面的测试、内容讲解支持。
- 场景灵活:与专业设备相比,我们的设备功能可以随着连接的设备不同而达到不同的连接形态。自主生成解决方案,采用通用的测试方法和硬件设备,以中心 + 分布的形式,不仅能够提供全流程的决策支持,还能够适应不同的测试需求,自主生成解决方案实现高效的数据提取和分析,为用户提供更加及时和准确的测试结果。通过语音识别和手势识别的方式,提升操作的便利性和灵活性。
- 价格优势:我们的项目采用通用的算法和硬件设备,降低用户终端设备成本,能够连接现有设备转化为测试节点和智能测试设备,无需另购置测试仪器,降低了系统总造价。这在市场推广和服务方面具有更好的竞争力。目前大模型加持下的嵌入式Agent设备,还处于“蓝海”阶段。
项目概述
研究开发内容
本项目聚焦于开发一套用于协助电子工程师解决系统和芯片自动测试、仪器自动化运作的需求的智能辅助系统。系统整体主要有 4 个模块组成:一是语音识别模块。该模块部署 AI 处理算法实现语言识别,进行语音到自然语言转换和语义完善修正;二是 Agent 智能体系模块。该模块进行语义提炼和测试方案的生成决策,进而进行仪器控制标准命令流生成;三是手势识别模块。该模块利用手势识别代替传统机械按键来控制仪器,实现仪器的去“按键化”,提升操作的便利性和灵活性。四是仪器控制模块。该模块执行 Agent 生成的标准命令流,实现控制各类仪器。通过标准接口进行仪器设备的操作,输出激励信号到待测系统,并读取输出信号进一步分析,以及进行最终测试报告的书写。
工程师只需连接系统,提出需求并进行手势操作,即可立即获得测试结果。这一简化流程大大提高了交互性,让工程师享受到智能调试带来的沉浸式体验,进而有利于提高工作效率。整个交互过程更贴近人类的自然行为,实现了更智能、更自然、更高效的用户体验。
系统工作流程
系统工作时,工程师使用语音输入,在说出唤醒词前,系统进入低功耗阻塞等待;确认唤醒后开始语音识别进行内容提取,确认后再进行以大模型 + Agent 生成测试方案并;在主程序中,不断检查解决方案进程是否存在,保证服务质量。通过“无需必要,勿增实体”的设计方式,增加系统鲁棒性和当前执行任务时的性能。也方便构建易用、简洁的用户界面。
同时工程师可以下达调节仪器参数命令,系统将识别工程师的手势动作对仪器进行细微调节,方便细致的观察实际波形和调节参数。当整个测试方案生成后,Agent 将采用完整的工具链来输出控制仪器的标准命令流,实时追踪方案实施情况并输出。当整个测试结束后,系统整合测试数据生成测试报告以便工程师调取或阅读。
2.4 软件流程
本系统采用中心分布式的设计,终端各部分有各自的运行逻辑与进程,进程之间相互配合,共同完成整个测试过程。具体过程如下图 3,图 4 所示:
由上图可知,系统启动后保持待机状态,待收到关键词唤醒后,进行语音识别,根据用户指令判断当前任务。
如果为测试要求,则系统进行解决方案的子流程的调用。通过 LLM-Agent 将用户请求解析成系统可以理解的标准命令流,进而进行规范性工具链函数的调用来控制仪器完成测量并输出结果和分析报告,最后结束调用并转移至主程序。
如果为修改仪器参数,则系统进行手势识别子流程的调用。通过摄像头进行手势捕捉,进而进行手势动作变化分析,当调节至合适时,结束调用并转移至主程序。
关键技术和特色
基于Agent体系的IVI命令流
在这个部分,我们使用 LLM-Agent 将用户请求解析成系统可以理解的标准命令流,进而调用工具链来实现控制各类仪器。
Agent的概念
在日常工作中,我们通常将一项任务拆解成几个步骤:制定计划、执行计划、检查结果,然后将成功的作为标准,未成功的则留待下一次循环解决,这种方法已经被证明是高效完成任务的经验总结。而 Agent 的执行过程与人做事的方式类似,以 LLM(大语言模型)作为其核心构建Agent是一个很酷的概念,AutoGPT、GPT-Engineer 和 BabyAGI 等几个概念验证演示都是很不错的示例,可以简单的将 Agent 视为一个强大的通用问题解决器。对于一个标准的 Agent 系统,可以由以下核心组件组成: 用户请求、Agent、规划、记忆、工具集。
在 LLM 驱动的 Agent 系统中,LLM 充当代理的大脑,处理交互信息;规划模块将用户需求的大型任务分解为更小的、可管理的子目标,从而能够有效处理复杂的任务,同时对过去的行为进行自我批评和自我反思,从错误中吸取教训,并针对未来的步骤进行完善,从而提高最终结果的质量;记忆模块记录着过去的思考、行动及对环境的观察,涵盖了 Agent 和用户之间所有交互;工具集学习调用外部 API 来获取模型权重中缺失的额外信息,包括当前信息、代码执行能力、对专有信息源的访问等。
大语言模型
在 LLM-Agent 选择方面,采用开源的 ChatGLM 模型作为核心引擎,该模型在自然语言处理领域表现优异,能够理解和生成高质量文本内容;同时基于 AgentTuning 技术,利用多个 Agent 任务交互轨迹对 LLM 进行指令调整,以强大泛化能力适应各种仪器调试场景;而且 ChatGLM 原生对中文的强大支持,也便于 Agent 理解我们的需求。同时我们采用嵌入式设备和计算中心两套模型的本地运行和 API 接口整合,确保了其在复杂环境下的稳健性,使其更加高效、精准。
规划模块
而对于规划模块,通常可分为无反馈规划和有反馈规划两种类型。常见的无反馈规划技术包括思维链(COT)和思维树(TOT);而常见的有反馈规划技术则包括 ReAct 和 Reflexion 。本项目采用 ReAct 提示词策略,旨在为每一步操作提供详尽的思维链,以深入理解模型的决策过程。我们采用LangChain来构建整个规划模块,它需要处理用户原始的需求,给出一条完整的思维链。这条思维链的格式为:
Thought: …
Action: …
Observation: …
同时为了防止无休止的“思考”下去,我们需要加入 AgentFinish 结束整条链。接着在后面加上一个 parser 解析出每个 Action 传递给 Tools 模块。如此一来,将调试仪器的过程具体化和规范化,同时保证调试过程安全性和正确性。
记忆模块
一般而言,记忆模块存储 Agent 的内部日志,其中包括过去的思考、行动及对环境的观察,涵盖了 Agent 和用户之间所有交互。主要两种记忆类型是短期记忆和长期记忆。本项目选用混合记忆,综合短期记忆和长期记忆,一方面保证不同场景下调试仪器灵活性,另一方面提高 Agent 长期推理和经验积累能力,让 Agent 记住一些用户指导的仪器调试操作步骤。我们需要实现消息存储与历史记录管理、限制十条上下文长度、消息格式化和输出。规划和记忆模块允许 Agent 在动态环境中操作,并使其能够有效地回忆过去的行为和计划未来的行动。
工具模块
工具集使 LLM-Agent 能够与仪器进行交互。通过工作流执行任务,这些工作流帮助工具利用方面我们采用 Function Calling,定义一组工具 API 并将其作为请求的一部分提供给模型,使模型能够将规划好的抽象过程转变为现实仪器的操作。我们定义本系统的工具规范为:
- name=name:这是函数的名称
- func=func:这是函数的实际执行体
- coroutine=coroutine:是否为协程
- description=description:这是函数的描述或说明
- return_direct=return_direct:是否直接返回
- args_schema=args_schema:用于验证和描述函数所需的参数结构。
- kwargs:这个是用来接收额外的关键字参数
Agent整个系统
本次项目中,首先通过语音识别获取用户请求同时将工具集传入 LLM-Agent,再通过规划模块决策整个调试过程,工具利用后返回现实仪器的操作和测试的结果,同时在整个系统中都通过记忆模块来储存 Agent 和用户之间的所有交互。本项目工具集采用 Python 的 PyVISA 库控制设备。IVI 驱动程序标准定义了一个开放的驱动程序架构、一组仪器类和共享软件组件。这些共同提供了仪器互换性所需的关键元素。使用 IVI 驱动程序设计的系统享有标准化代码的好处,这些代码可以互换到其他系统中。该代码还支持测量设备的互换,有助于防止硬件过时。在三个级别上支持可互换性: IVI 架构规范允许架构可互换性——这是可以重复使用的标准驱动程序架构。类规范提供语法互换性,支持以最少的代码更改进行仪器交换。通过使用 IVI 信号规范实现了最高水平的互换性。
Agent整体工作流程如下所示:
我们使用 PyVISA 作为 Python IVI 的通讯接口的封装驱动程序来连接仪器设备。在此基础上进行规范性工具链函数库的封装,以便 Agent 生成的方案转换进一步的调用控制仪器来输出信号以及读取信号,并将信息进行反馈进一步分析后输出分析报告。
智能语音识别
在这部分,我们主要完成对用户语音的识别,以获取用户指令,满足与用户交互的需求。
我们将用户的下达的语音指令通过 AI 处理算法,实现语言识别,进行从语音到自然语言的转换。为指令解析做准备。我们使用阿里巴巴开源的 Paraformer 语音模型和 CT-Transformer 标点模型来进行高性能推理。该模型大大加快了识别速度,同时针对x86下的AI新架构,采用对 x86 架构的 AVX 支持,适合 N97 神经网络芯片。
Paraformer 模型结构如上图所示,由 Encoder、Predictor、Sampler、Decoder 与 Loss function 五部分组成。Encoder 可以采用不同的网络结构,例如 self-attention,conformer,SAN-M 等。Predictor 为两层FFN,预测目标文字个数以及抽取目标文字对应的声学向量。Sampler 为无可学习参数模块,依据输入的声学向量和目标向量,生产含有语义的特征向量。Decoder 结构与自回归模型类似,为双向建模(自回归为单向建模)。Loss function 部分,除了交叉熵(CE)与 MWER 区分性优化目标,还包括了 Predictor 优化目标 MAE。
其核心点主要有:
- Predictor 模块:基于 Continuous integrate-and-fire (CIF) 的 预测器 (Predictor) 来抽取目标文字对应的声学特征向量,可以更加准确的预测语音中目标文字个数。
- Sampler:通过采样,将声学特征向量与目标文字向量变换成含有语义信息的特征向量,配合双向的 Decoder 来增强模型对于上下文的建模能力。
- 基于负样本采样的 MWER 训练准则。
Paraformer 属于单轮非自回归模型。院采用一个预测器(Predictor)来预测文字个数并通过 Continuous integrate-and-fire (CIF)机制来抽取文字对应的声学隐变量;并一个基于 GLM 的 Sampler 模块来增强模型对上下文语义的建模。在离线运行测试下,对于长达 10s 的语音命令,识别的时延也只有0.2s左右,这大大提高了交互的效率。
手势识别
手势交互是一种更自然、直观的控制方式,在这个部分,我们通过摄像头采集用户的手势动作,通过机器学习模型识别手势动作,来进行进一步的仪器控制和参数精密调节。考虑到用户的手部会在实验桌上大范围活动,我们采用固定放置的广角摄像头来捕捉用户的手势,这样的方案具有更好的可靠性和稳定性。
我们使用 MediaPipe 机器学习模型来识别摄像头采集的视频流中的手势。MediaPipe 是 Google 推出的一款开源机器学习框架,其中包含了许多预训练的模型,可以直接使用,也可以根据需求进行微调训练。MediaPipe 手部识别模型参数量和计算量小,并且提供量化模型,适合在嵌入式设备上部署。对输入图像进行手势识别大致分为三个步骤:
(1) 手掌检测:使用基于卷积神经网络的单阶段目标检测模型,检测输入图像中的手掌位置。在此步骤中,完整的输入图像被缩放到 尺寸,由卷积神经网络进行特征提取得到表示锚框位置的特征向量,然后通过非极大值抑制算法得到最终的手掌位置。
(2) 手部跟踪:将图像中由手掌检测模型得到的手掌位置部分裁切并缩放到 尺寸,输入到基于卷积神经网络的回归模型中,预测 21 个关键点的 3D 坐标与置信度。这 21 个关键点包括手掌中心、手指关节等。在上一帧图像存在手部关键点的情况下,后续的预测将改用参数量更小的轻量级模型,以提高实时性。
(3) 手势分类:将手部跟踪模型得到的手部关键点坐标输入到带残差模块的全连接神经网络中得到嵌入向量,并使用全连接分类检测头来得到当前帧中手势的分类结果。MediaPipe 的预训练模型能分类包括伸出食指、握拳、张开手掌动作等 8 种手势,通过结合手部跟踪结果和手势分类结果进行判断,我们还实现了对拧旋钮等手势的识别。
以上的算法流程实现了从单张输入图像中预测其中包含的手势类型。为了实现通过手势控制与系统交互,还需要设计状态机从连续的手势动作中提取出用户的意图,在正确的时机触发系统的相应行为。我们将用户的手势操作分为两类,一是单次交互手势,例如张开手掌、握拳等,我们在一段时间内首次检测到用户做出这类手势时,就触发系统的相应行为,如开始测量、结束测量等;二是连续调节手势,例如拧旋钮、上下滑动等,这类手势允许用户通过手部的运动幅度来连续地调节实验仪器和系统的各项参数,给用户更好的沉浸式交互体验。
补充
Agent 部分
Agent 部分后增加了交互模式,可以进行命令的中断和修改,在执行流程中及时的修正因为 LLM 不稳定带来的问题。
在交互过程中,首先设置初始上下文信息,包括用户的目标、环境状态、可用资源等。LLM 根据当前上下文信息生成一个行动建议,用户可以对行动建议进行评估,并提供输入,包括同意、修改建议和停止。Agent 阻塞等待用户输入,输入完成后轮询用户输入队列,获取用户反馈,根据用户反馈调整行动计划——若用户接受建议,将生成的行动执行或模拟执行,将行动结果反馈到上下文中,为下一步决策提供信息,重复上述过程,继续生成行动、执行、更新上下文和用户交互;若用户拒绝操作并给出建议,则根据用户建议做出操作;若用户选择停止操作,则直接打断当前操作,等待新的指令。当获得“finish”行动或用户明确表示结束时,停止交互过程。