想象你是一家连锁餐饮集团的中央厨房负责人。总部研发中心在实验厨房里做出了惊艳的招牌菜——新鲜食材、复杂工序、限量供应。可这道菜要复制到全国三百家社区门店,问题就来了:每家门店的灶台火力不同、厨师水平参差,按原方子照搬,不仅出菜慢,味道还忽好忽坏。于是你建了一条中央厨房的前处理线:把食材统一切配、焯水、封装成标准料包,再附一张配方卡。门店后厨只需拆包、加热、装盘,三分钟上菜,味道稳定。这,就是 OpenVINO 在做的事。 数据科学家用 PyTorch 或 TensorFlow 训练出的深度学习模型,就像实验厨房里的招牌菜——在数据中心的高性能 GPU 上跑得流光溢彩,可一旦搬到小区门禁、工厂流水线、自动售货机这些边缘设备上,立刻水土不服:算力不够、内存吃紧、功耗超标。OpenVINO(Open Visual Inference and Neural Network Optimization)就是 AI 界的中央厨房。它把各种框架训练的模型改造成统一规格的“标准料包”(IR 中间表示),再交给英特尔 CPU、核显 GPU、神经计算棒(VPU)这些“门店后厨”去高效烹饪。本文就带你走进这座 AI 中央厨房,看食材如何变成料包、料包如何端上餐桌。
掌握 OpenVINO,意味着你拥有了一条把云端模型批量搬到千万台 Intel 边缘设备的成熟生产线——这是从纯算法工程师走向边缘 AI 全栈工程师的关键一跃。
可视化演示
展示OpenVINO模型优化器转换IR表示、INT8量化校准与多硬件异步推理流水线的交互过程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
模型优化器转换流程 ONNX/TF模型 IR中间表示 MO: .onnx→.xml+.bin 算子融合与优化
工具箱全景
中央厨房里不止有一台切菜机,还有真空封装机、冷藏运输车、温度记录仪。OpenVINO 同样是一整套工具链,而不是单个工具。它由模型优化器(Model Optimizer)、推理引擎(Inference Engine)、运行时库、以及设备插件(Plugin)构成。模型优化器负责“前处理”,把各种框架训练好的模型改造成统一格式;推理引擎负责“后厨烹饪”,把 IR 加载到指定硬件上执行;设备插件则像不同品牌的灶台适配器——同样的料包,插上燃气灶、电磁炉、炭火炉都能做熟。
从工作流看,OpenVINO 的全部流程可以浓缩成一个生产链:训练好的模型先经过模型优化器,输出 IR 文件;推理引擎读取 IR,把它加载到某个设备上执行,最终得到推理结果。这个链条是理解后面所有细节的主干。
回到中央厨房的比喻:如果没有这趟前处理线,每家门店都得从买菜、洗菜、切菜做起,出品自然参差不齐。OpenVINO 做的正是把“烹饪过程”标准化——模型转换一次,处处高效运行。
- Model(输入食材)可以是 PyTorch、TensorFlow、ONNX、MXNet 等任意框架训练好的模型文件,格式五花八门,像不同产地、不同大小的食材。
- Model Optimizer(切配台)模型优化器读取原始模型,进行前端解析与图变换,产出设备无关的 IR 文件,对应中央厨房精心设计的半成品料包。
- IR(标准料包)中间表示(Intermediate Representation),由拓扑文件与权重文件组成,与具体硬件解耦,所有设备插件都能“拆包”。
- Inference Engine(门店后厨)推理引擎把 IR 加载到指定设备上,创建执行请求完成推理,对应后厨按照配方卡加热出菜。
模型优化器
中央厨房最关键的岗位是那位“神级切配师”。整条鲈鱼送到手里,他手起刀落,去鳞、剔骨、片成大小一致的鱼片,装袋贴标一气呵成。模型优化器就是这个岗位:它不负责发明新菜(不重新训练模型),也不改变菜的味道(不改变模型语义),只负责把食材处理成便于门店烹饪的标准件。
模型优化器(Model Optimizer,简称 MO)的转换流程清晰:先通过前端解析器读入原始框架模型,把计算图和参数加载到内存中;接着执行一系列图变换(graph transformations),比如合并批归一化层、折叠常量节点、删除训练状态的输入输出;最后把化简后的计算图导出为 IR 文件。它能直接对接 PyTorch(经 ONNX 中转)、TensorFlow 等主流框架,也支持通过命令行参数指定输入尺寸、均值、精度等细节,比如 --input_shape [1,3,224,224]。
无论做多少变换,MO 有一条不能逾越的红线——语义等价:
切配师再厉害,也不能把鲈鱼片成鸡胸肉。模型优化器同样如此:它可能把算子 A+B 合并成 C,但 C 的计算结果必须和 A+B 一致。理解了这条红线,你就理解了 IR 的真实性质。
- 输入空间 X表示所有可能的输入样本集合,比如 224×224 的 RGB 图像空间。
- 原模型 FF 是训练得到的原始模型,对输入 x 输出推理结果,可以看成“主厨的私房配方”。
- 优化后模型 F′F′ 是经过图变换后的新模型,由 IR 文件承载,结构更精简、更贴合底层硬件的执行方式。
- 全称量词 ∀x ∈ X要求每一个输入都满足等价条件。这是优化器的“军令状”——只要有一个输入输出不一致,就说明变换出了问题。
IR中间表示
中央厨房的料包有两样东西:一张配方卡,写明每道菜有几道工序、每步需要多少克食材;一袋真空包装的食材,按配方卡的要求预先称量分装好。OpenVINO 的 IR 文件(Intermediate Representation,中间表示)也正是两个文件的组合:.xml 和 .bin。.xml 是配方卡——描述网络的拓扑结构,包括每一层(节点)的类型、参数,以及层与层之间的连接关系;.bin 是食材包——以二进制格式保存网络的全部权重和偏置参数。二者合在一起,就是一个完整可部署的模型。
从计算图的角度看,IR 描述了一张有向无环图。图的节点是算子,边是数据流向。模型优化器在导出 IR 时,会把原始框架中一些“装修性”的节点(比如训练阶段的 dropout)清除,只保留推理必需的部分,使整张图更紧凑。
配方卡加食材包的设计,让 IR 既不依赖原始框架,也不绑定目标硬件。同一份 IR,既可以拿到 Intel CPU 后厨“清炒”,也可以送给神经计算棒“铁板烧”——这就是它作为标准料包的最大价值。
- 顶点集合 V网络中的所有层,如 Conv2D、MaxPool、MatMul,每个顶点都带超参数(卷积核大小、步长、激活类型),相当于配方卡上的每一道工序。
- 边集合 E数据流的方向与张量形状,规定上一层输出如何作为下一层输入,相当于“切好的鱼片送往腌料台”。
- 有向无环结构推理时数据从输入层单向流到输出层,不允许存在循环回边,保证任务能一次走完。
INT8量化
中央厨房推行“健康化改造”:把一份高油高糖的大餐,改成减盐减油但不失风味的轻食。INT8 量化就是这个思路——把神经网络中常用的 32 位浮点数(FP32)权重和激活值,压缩成 8 位整数(INT8)。参数体积立刻缩小到原来的四分之一,推理速度在支持 INT8 指令集的 CPU 上能提升 2~4 倍,功耗也随之下降。
量化的核心是要找到每个张量的动态范围,也就是所有数值的分布区间。做法是准备一批有代表性的校准数据集(calibration dataset),通常是几百张真实业务场景的图片,把它们送入模型做前向推理,统计每一层激活值的分布,得到最大值和最小值。然后按对称量化公式计算缩放因子 scale,再把浮点值映射到整数区间 [-127, 127]。
量化毕竟是“减盐减油”,有些菜品口味会变淡。为此 OpenVINO 提供精度回退机制:用 Accuracy Checker 工具在量化前后分别评估模型精度,如果掉点超过业务可接受范围(比如 0.5%),可以把敏感层回退到 FP16 或 FP32。这套“先评估、再回退”的流程,保证了轻食虽然低卡,但绝不至于难以下咽。
- 缩放因子 s把浮点范围压缩到整数范围的“比例尺”,由统计得到的动态范围上限决定。
- 量化映射每个浮点值 x 除以 s 后四舍五入,得到对应的 8 位整数 q,相当于把每种调料按比例折算成标准勺数。
- 反量化推理时把 INT8 结果乘回 s 恢复近似浮点值,用于下一层的计算,注意这步会引入微小量化误差。
推理引擎API
标准料包送到门店后,后厨需要一台“总控灶台”来拆包、加热、装盘。推理引擎(Inference Engine,简称 IE)就是这台总控灶台,而 IECore 是它的核心入口类。开发者通过 IECore 完成三件事:读取网络、加载设备、创建请求。
具体来说,ie.read_network() 读取 IR 的 xml 与 bin 文件,在内存中构建网络对象;ie.load_network() 把网络编译成目标设备(CPU、GPU、MYRIAD 等)可执行的格式,得到一个可执行网络对象;接着调用 create_infer_request() 创建推理请求对象,为输入输出分配缓冲区。一次请求的生命周期包括:写入输入数据、启动推理、等待完成、读取输出结果。同步接口 infer() 会阻塞等待推理完成,适合简单场景;异步接口 start_async() 不会阻塞,立即返回,适合后面要讲的流水线场景。
从调用者角度看,一次同步推理的总时间由三部分构成:
总控灶台的价值在于“同一个料包,插上什么灶具都能做”。IECore 屏蔽了底层设备的差异——开发者用同一套 API 操作 CPU、GPU、VPU,不必关心各家驱动的细节,这也是 OpenVINO 能够高效支撑边缘部署的根本原因。
- 排队时间 t_queue多个请求同时提交时,设备按序执行,后来的请求需要等待,像饭点排队等桌。
- 推理时间 t_infer设备真正执行网络计算的时间,是整段时间的核心,受算子效率与硬件算力影响。
- 传输时间 t_transfer输入张量从 CPU 内存拷贝到设备显存、输出再拷贝回来的时间,异构场景下不可忽视。
异构执行部署
中央厨房同时给写字楼门店、大学食堂、高速公路服务区供货,各店的灶具不同:写字楼用电磁炉(性能均衡的 Intel NUC),服务区用便携燃气灶(即插即用的神经计算棒)。更聪明的做法是,一道菜可以让电磁炉烧水、燃气灶爆炒——把不同的工序交给最适合的设备。OpenVINO 的异构执行(HETERO)正是如此:允许把网络的不同层分配到不同设备上执行。
异构执行的典型配置是 "HETERO:GPU,CPU",表示优先把计算量大的卷积层放到 GPU(或核显),把不适合 GPU 的层(如某些 LSTM、自定义算子)留给 CPU。OpenVINO 会按设备优先级自动分析层性能,完成负载分配;开发者也可以手动指定某层跑在哪个设备上。部署形态上,Intel NUC 适合固定点位、需要一定算力的场景,如园区闸机、边缘服务器;神经计算棒(基于 Myriad VPU)功耗不到 1 瓦,USB 即插即用,适合改造已有嵌入式设备。
串行异构执行的总耗时可以建模为各层执行时间之和:
中央厨房不追求一台万能灶具,而是让每台设备做自己最擅长的事。NUC 守固定点位、计算棒随身部署、GPU 做重活、CPU 兜底——异构执行让“中央厨房 + 多门店”的模式发挥到了极致。
- 层编号 i网络按拓扑顺序编号,从第 1 层到第 n 层,每一层都必须被分配到某个设备。
- 设备决策 d_i表示第 i 层的执行设备,可能是 CPU、GPU、VPU 或其中的组合,对应“这道工序交给哪台灶具”。
- 累加求和把每层耗时加起来得到整体延迟,调度器正是通过不断对比不同分配方案来寻找最优组合。
数据流结构
客人点菜到上桌,中间有一条清晰的链路:点单(摄像头采集画面)→ 传菜(预处理)→ 后厨烹饪(推理)→ 装盘上桌(后处理)。这条链路中任何一个环节卡住,整桌客人都会干等。边缘 AI 的数据流结构,研究的就是如何让这条链路高效运转。
输入预处理通常包括:把摄像头帧缩放到网络要求的尺寸(如 224×224)、将像素值从 0~255 归一化到 0~1、把 HWC 通道顺序调整为 CHW、再加一个批次维度。输出后处理则根据任务类型而定:分类任务做 softmax 取最大概率类别,目标检测任务要解析边界框并执行 NMS 非极大值抑制。另一个容易忽略的优化点是请求复用:InferRequest 对象的输入输出缓冲区可以反复使用,避免每次推理都重新分配内存、拷贝数据。
单路视频流的帧率可以表示为:
明白了这条链路,再看异步流水线就顺理成章了:既然三个环节串行会互相拖累,为什么不让他们像流水线上的工人一样各忙各的、同时开工呢?
- 预处理耗时 t_pre包括图像解码、缩放、归一化、内存拷贝,相当于餐厅传菜员把食材送到后厨的时间。
- 推理耗时 t_infer设备执行网络计算的时间,是三个阶段中最主要的开销。
- 后处理耗时 t_post解析网络原始输出、执行阈值过滤或 NMS 的时间,相当于装盘与点缀。
- 倒数关系帧率是总耗时的倒数——总耗时越小,帧率越高,这是衡量数据流性能的最终尺子。
异步流水线
传统后厨一桌一桌地做:洗菜、切菜、炒菜、装盘,做完一桌再做下一桌。灶台空着等切菜,切菜台空着等炒菜——资源大量浪费。聪明的做法是流水线作业:洗好一批菜传给切菜师傅,切好的传给掌勺师傅,三拨人同时忙活。异步流水线(asynchronous pipeline)正是把这个思路用到推理上。
具体实现是创建多个 InferRequest(比如 2~4 个),让它们交替工作:请求 0 正在设备上推理时,CPU 同时为请求 1 做预处理,而上一轮请求 2 的输出正在做后处理。三个阶段在时间上重叠,设备一直处于工作状态。代码层面,用 start_async() 提交推理后立刻返回,等需要结果时调用 wait() 查询是否完成。这就是异步 API 与同步 API 的本质区别——不是让单次推理更快,而是让整个系统“永不空转”。
理想情况下,流水线的吞吐量由最慢的阶段决定:
中央厨房的流水线让大厨的勺始终在火上颠动。异步流水线同样是“让算力不空转”的艺术——多路视频、多路传感器并发接入时,这种设计带来的吞吐提升往往比换更强的 CPU 还明显。
- 瓶颈阶段 max取预处理、推理、后处理三者中最长的耗时作为流水线的节拍,最短的一块板决定木桶容量。
- 理想吞吐稳态下每帧的平均间隔等于瓶颈耗时,帧率取其倒数,实现三阶段重叠的极限性能。
- 实际修正现实中存在上下文切换与同步开销,实际帧率略低于理想值,需要增加请求数来弥补间隙。
AI 应用场景
楼宇安防闸机人脸识别
阶段:模型压缩与边缘部署
解决的问题:传统闸机把人脸比对请求发到云端 API,网络往返耗时高、隐私风险大、断网即瘫痪。用 OpenVINO 在 Intel NUC 上本地推理,延迟可控且数据不出园区。
具体案例:某园区把训练好的 FaceNet 模型导出 ONNX,用模型优化器转成 IR,再做 INT8 量化校准。部署在 NUC 上后,单次人脸比对推理延迟从云端方案的约 80ms 降到 35ms,配合异步流水线做到 1:N 实时检索,门禁通行效率提升近一倍。
智能零售货架商品识别
阶段:推理引擎与 VPU 设备适配
解决的问题:自动售货机内部空间狭小、供电紧张,普通工控机塞不进去。神经计算棒(VPU)体积只有 U 盘大小、功耗不到 1 瓦,是嵌入式改造的理想选择。
具体案例:某便利店改造老式售货机,把 YOLOv5s 模型转成 IR 后部署到插入主板的计算棒上,FP16 精度下帧率稳定在 60ms/帧,能实时识别 120 种商品并联动货道出货与库存盘点。
工业质检多相机异步流水线
阶段:异步推理管线设计
解决的问题:产线上 4 台相机同时拍摄电路板的不同角度,如果用同步方式串行推理,单件检测总耗时接近 800ms,无法满足节拍要求。
具体案例:某电子厂使用 OpenVINO 的 HETERO 模式(GPU 跑卷积、CPU 跑预处理与后处理),并创建 4 个 InferRequest 构建异步流水线。4 路相机数据交错进入流水线,综合吞吐达到 6 件/秒,单件耗时降到 160ms,完全满足产线节拍。
Python 演示
import timeimport cv2import numpy as npfrom openvino.inference_engine import IECore MODEL_XML = "model.xml"MODEL_BIN = "model.bin"DEVICE = "CPU"INPUT_SIZE = (224, 224) def preprocess(frame): img = cv2.resize(frame, INPUT_SIZE) img = img.astype(np.float32) / 255.0 img = img.transpose((2, 0, 1)) img = img[np.newaxis, ...] return img def postprocess(output): probs = output[0] cls_id = int(np.argmax(probs)) score = float(probs[cls_id]) return cls_id, score def main(): ie = IECore() net = ie.read_network(model=MODEL_XML, weights=MODEL_BIN) exec_net = ie.load_network(network=net, device_name=DEVICE) input_blob = next(iter(net.input_info)) output_blob = next(iter(net.outputs)) infer_request = exec_net.create_infer_request() cap = cv2.VideoCapture(0) frame_count = 0 while True: ok, frame = cap.read() if not ok: break input_data = preprocess(frame) start = time.time() infer_request.infer({input_blob: input_data}) output = infer_request.output_blobs[output_blob].buffer cls_id, score = postprocess(output) frame_count += 1 cv2.putText(frame, f"{cls_id}:{score:.2f}", (20, 40), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0, 255, 0), 2) cv2.imshow("demo", frame) if cv2.waitKey(1) & 0xFF == ord("q"): break cap.release() cv2.destroyAllWindows() print(f"processed {frame_count} frames") if __name__ == "__main__": main()
net = ie.read_network(model=MODEL_XML, weights=MODEL_BIN)读取 IR 的“配方卡”与“食材包”,在内存中重建网络结构。exec_net = ie.load_network(network=net, device_name=DEVICE)将网络编译到指定设备,相当于把料包交给对应灶台。input_blob = next(iter(net.input_info))获取网络输入层的名称,后续喂数据时按名字传张量。infer_request = exec_net.create_infer_request()创建一次推理请求并复用,避免反复分配内存的额外开销。infer_request.infer({input_blob: input_data})执行同步推理,阻塞直到结果返回,适合单路视频流的简单场景。output = infer_request.output_blobs[output_blob].buffer读取推理结果的原始缓冲区,交给后处理解析类别与置信度。
常见误区
误区模型优化器名字里带“优化”,它应该像炼丹一样把模型再训练一遍,所以优化后的模型精度会更高。
正解模型优化器百分之百不做训练,它只做等价图变换——合并批归一化层、折叠常量、删掉训练专用节点。这一切的核心约束是“语义等价”:输入相同,输出必须相同。精度提升是额外红利(比如删除冗余节点后数值更稳定),绝不来自重新学习。
为何常见:“优化”一词在中文里常与“调优、改进”挂钩,让人误以为 MO 会重训模型,而实际上它只是格式转换与结构化简。
误区IR 是 Intel 私有的二进制格式,转成 IR 就等于被“锁死”在 Intel 平台上,别的设备碰都碰不了。
正解IR 是设备无关的中间表示,描述的是网络拓扑与权重数据,本身不包含任何特定硬件的指令。OpenVINO 的插件机制可以将同一份 IR 编译到 CPU、核显 GPU、VPU(神经计算棒)、FPGA,甚至能够再导出成 ONNX 给其他框架使用。真正绑定硬件的是编译后的可执行网络,而不是 IR 文件本身。
为何常见:OpenVINO 全名带有 Intel 字样,加上官方教程主要展示 Intel 设备,容易形成“Intel 私有格式”的刻板印象。
误区量化不就是把 FP32 的小数四舍五入成整数吗?写个 round() 循环就搞定了。
正解真实的 INT8 量化要先收集校准数据集,跑前向推理统计每一层激活值的动态范围,再计算每个张量专属的缩放因子 scale。量化后还要用 Accuracy Checker 验证精度,掉点严重时要把敏感层回退到 FP16/FP32。盲目四舍五入往往导致精度断崖式下跌。
为何常见:从数学形式上看量化确实只是“除以 scale 再取整”,但“scale 怎么来”才是工程的精髓,外行容易忽略校准与回退这两个关键环节。
误区start_async 是异步的,肯定要开多个线程才有意义,单线程用异步等于白用。
正解异步 API 的价值在于“提交后立刻返回”,让 CPU 在设备执行推理的同时去处理其他数据——比如为下一帧做预处理。创建多个 InferRequest 形成流水线,单线程同样能获得显著的吞吐提升。多线程并行是另一层优化,二者解决的问题不同。
为何常见:“异步”与“多线程”在编程中被频繁绑定,让人误以为异步必须依托多线程,而忽略了流水线重叠才是异步推理的核心收益。
误区计算棒是 Intel 出品的 AI 加速器,什么模型插上去都能比 CPU 快好几倍。
正解VPU(Myriad X)的算力适合轻量级模型(如 MobileNet 系列、小型 YOLO),对需要大矩阵运算的 Transformer 或超大 CNN 力不从心,反而可能比 CPU 更慢。部署前应先在目标设备上做性能基准测试,而不是盲目迷信“加速棒”。
为何常见:厂商宣传强调“AI 推理加速”,容易让人忽略加速器也有算力上限,且不同模型对硬件特性的适配度差异巨大。
面试题
Q1. 模型优化器(MO)的主要产物是什么?
- A.训练好的权重文件
- B.中间表示IR文件← 正确答案
- C.端到端预训练模型
- D.前端反向传播图
答案:B。模型优化器的职责是把训练好的模型转换为 IR 中间表示(xml + bin),供推理引擎加载。权重文件是训练阶段的产物,预训练模型是输入而非输出,反向传播图与推理无关。
Q2. OpenVINO 的 IR 文件由哪两部分组成?
- A.XML拓扑加BIN权重← 正确答案
- B.CFG配置加LOG日志
- C.JSON结构加NPY数据
- D.H头文件加SO动态库
答案:A。IR 由 .xml(网络拓扑、层参数与连接关系,相当于配方卡)和 .bin(二进制权重与偏置,相当于食材包)组成。其他选项都是无关文件格式。
Q3. 下列哪个设备属于 VPU?
- A.Intel NUC迷你主机
- B.Intel神经计算棒← 正确答案
- C.独立游戏显卡
- D.企业级SSD硬盘
答案:B。神经计算棒基于 Myriad VPU 芯片,是典型的 VPU 设备。NUC 是搭载 CPU/GPU 的迷你主机,游戏显卡是 GPU,SSD 是存储设备。
Q4. INT8 对称量化公式中,缩放因子 s 的分子是 max(|x|),它的含义是什么?
- A.权重绝对值最大值← 正确答案
- B.权重绝对值平均值
- C.激活值中位数大小
- D.激活值标准差数值
答案:A。对称量化用动态范围上限作为基准,即统计张量中绝对值最大的数值,将其映射到 INT8 的 127。平均值、中位数、标准差都不能保证所有数值落在可表示范围内。
Q5. 模型优化器做图变换时最核心的约束是什么?
- A.提升模型分类精度
- B.保持语义等价化简← 正确答案
- C.扩增训练数据规模
- D.减少模型参数量
答案:B。语义等价是 MO 的红线——任意输入下优化前后输出必须一致,它只改变计算路径不改变判断逻辑。减少参数量是 IR 导出的副作用而非目标,提升精度属于训练阶段任务。
Q6. 异步推理(start_async)的主要优势是什么?
- A.让单次推理延迟变小
- B.提高设备整体利用率← 正确答案
- C.训练阶段梯度加速
- D.替代INT8完成量化
答案:B。异步 API 让 CPU 在设备算力执行推理的同时处理预处理与后处理,多个 InferRequest 组成流水线,提升系统吞吐与设备利用率。单次推理延迟主要由硬件决定,异步并不会减少单次耗时。
Q7. 关于 OpenVINO 异构执行(HETERO),下列说法正确的有哪些?
- A.仅由CPU单设备执行
- B.按层分派至多设备← 正确答案
- C.MULTI模式并发调度← 正确答案
- D.必须关闭核显设备
答案:BC。HETERO 模式可将网络的不同层分派到不同设备执行,比如卷积层跑 GPU、LSTM 层跑 CPU;MULTI 模式则是多个设备并发分摊多个请求。A 是单设备执行,D 说法错误,异构恰恰鼓励多设备协同。
Q8. Accuracy Checker 工具在 INT8 量化流程中的作用是什么?
- A.训练过程中评测辅助
- B.量化前后精度对比← 正确答案
- C.重建训练数据管道
- D.自动补全缺失标签
答案:B。Accuracy Checker 会在量化前后分别评估模型精度,量化掉点超过阈值时触发精度回退,把敏感层恢复为 FP16/FP32。它是保证“减盐不减味”的质量关口,而非训练或数据工具。
Q9. 模型优化器能够直接对接哪些框架格式?
- A.PyTorch导出的ONNX← 正确答案
- B.TensorFlow的pb文件← 正确答案
- C.摄像头视频流AVI
- D.数据库备份SQL
答案:AB。MO 的前端解析器支持 ONNX、TensorFlow(pb/frozen graph)等主流格式,PyTorch 模型需先导出为 ONNX 再接入。视频流与 SQL 是运行时数据,不是模型格式。
Q10. 下列哪些手段能够提升边缘推理的整体吞吐量?
- A.多请求异步流水线← 正确答案
- B.INT8低精度推理← 正确答案
- C.增加网络模型层数
- D.改用FP64权重推理
答案:AB。异步流水线让预处理、推理、后处理重叠执行,INT8 量化降低计算量与内存带宽,两者均能提升吞吐。增加层数会加长推理时间,FP64 权重精度高但计算慢,均会拉低吞吐。