GRADUATE PROJECT · TOPIC 01

基于混合专家模型的视觉巡检异常检测与定位系统设计

给程序一张图片,让它判断“有没有异常、异常在哪里”。你需要在平台提供的图像特征提取程序上,训练至少两个自定义专家,再训练一个负责选择专家的路由器,比较不同方案的检测效果和运行时间。

混合专家 MoE专家训练稀疏路由异常定位
研究生课程实验 01 · 在线评测使用发放的图片完成实验;重点是训练专家、训练选择器,并用实验说明效果。机器人现场巡检为选做。

任务与交付概览

保留冻结基座,训练自定义专家与路由器,完成对比和消融,并提交可运行组件与实验报告。

1 明确目标与接口2 实现专家与路由3 核对评价要求4 整理提交材料
基础输入图片与品类 + 冻结 ResNet18 公共特征
核心输出异常分数、正常或异常判断、异常区域
必做实验基线、专家、路由、对比、消融与成败案例
实验规模六类图像、四种条件、996次开发推理

一、实验目标

输入一张图片,判断是否异常,并标出异常区域。这里的定位指图像中的位置,不涉及三维坐标或小车导航。

  1. 跑通基线,理解特征提取与正常参考匹配。
  2. 训练至少两个自定义专家和一个路由器,根据图像选择 1~2 个专家。
  3. 完成对比与消融,分析检测、定位效果及运行成本。
术语说明

专家是处理图像特征的算法模块;基础专家 base由平台提供并保持冻结;自定义专家是本次实验实现和训练的模块。路由器负责选择专家,Top-1 / Top-2 分别表示选一个或两个。正常参考库用于匹配,阈值由独立正常校准集确定。

二、提供内容与实现任务

平台提供

冻结 ResNet18、基础专家 base、起始工程、六类数据划分、统一接口与评价规则。

需要实现

至少两个自定义专家、一个路由器,以及训练、参考库重建、校准、保存与重载流程。

一张图片是怎样完成异常检测的?

公共骨干负责提取特征;基础专家和自定义专家负责处理这些特征,它们是不同模块。

输入图片与品类例如:一张待检查的产品图片
公共骨干:冻结的 ResNet18每张图只运行一次,提取公共特征,供路由器和专家使用
路由器:选择本次使用的专家Top-1 选1个,Top-2 选2个;从整个专家池中选择

候选专家池(至少3个;每张图不是全部执行)

基础专家 base平台提供,保持冻结
自定义专家1你设计并训练
自定义专家2你设计并训练

例如:本帧选择“基础专家+自定义专家2”,未选中的专家不参与本帧计算。

融合所选专家的特征按路由权重组合特征
与正常参考库比较一次根据融合特征与正常样本的差异,判断异常
输出:异常分数、异常判断与异常区域回答“有没有异常、异常在哪里”

公共骨干每张图都要运行;基础专家是否参与这一帧,由路由器决定。两者虽然都保存在 teacher/base.pt 中,但不是同一个模块。

以 jetson003 为目标的组件配置要求

本课程以 jetson003 的现有环境为部署基准;组件应适配小车,不要求为组件升级车端系统或全局依赖。服务器数据评测用于检查算法,车端试运行用于确认实际兼容性与资源占用。以下限制针对整个组件,不是单个专家。文件大小与运行内存是两种不同指标:ZIP很小,也可能在运行时占用大量内存。

检查项目服务器数据评测jetson003远程测试
整个提交方案 ZIP≤128 MiB(包括模型权重、配置、源码及包内其他文件)与服务器上传限制相同
整个组件解压大小≤256 MiB,最多128个文件组件部署磁盘预算≤512 MiB;还需计入框架文件
组件峰值运行内存≤2 GiB(组件及其子进程合计,包含公共骨干、专家、参考库、中间特征和运行开销)≤2 GiB(与服务器采用相同组件预算,须车端实测验证)
显存 / GPUCPU评测,不提供GPU;不得依赖CUDA运行当前仅开放CPU配置,不使用GPU显存;CUDA组件暂未开放验证
CPU最多2核最多2线程
系统与Python使用平台固定的CPU评测环境;接口与算法保持一致,不能以服务器运行代替ARM64验证ARM64/aarch64 · Ubuntu22.04.5 · Python3.10.12
车端依赖基准提交源码须兼容右侧车端版本;服务器现有评测环境暂不变更PyTorch2.7.0、torchvision0.22.0、NumPy1.26.4、Pillow9.0.1、SciPy1.15.3、scikit-learn1.7.2
网络与依赖离线运行,不在评测时联网下载模型或安装依赖离线运行;依赖须与车端环境兼容

jetson003整机约8GB CPU/GPU共享内存,并非另有8GB独立显存。当前CPU组件的GPU显存使用为0;以后开放CUDA时,仍需将CPU与GPU占用合并核算,不能各自按8GB申请。

另需遵守模型预算:全部自定义可学习参数合计≤10万个;每点位自定义专家、路由及融合状态≤2 MiB;相关参考向量总数≤2048,每个向量≤96维;正式输出特征维度为32。冻结公共资产也计入实际部署体积及运行开销。

当前自动检查范围:服务器执行3 GiB容器总内存硬限制;组件峰值≤2 GiB是两端统一的适配要求,当前尚未自动测量并判定组件及其子进程的峰值,不能将容器评测通过视为已满足此项。车端2 GiB内存与512 MiB磁盘仍属配置预检预算,尚未完成车端隔离试运行。静态通过不代表实车可部署。当前待适配项属于课程公共框架:旧示例声明Pillow≥10、<13,并使用车端Pillow9.0.1没有的Image.Resampling接口。应提供兼容实现(例如兼容选择Image.BILINEAR),完成框架、模板与车端验证后再发布适配版;不要仅放宽版本声明。现有发行包和检查规则暂时保留,旧包的未通过状态不会因此自动解除。

基础专家与冻结基座下载

平台已提供 teacher/base.pt,包含冻结 ResNet18 和六类基础专家状态。组件模板中已经包含同版本资产;也可单独下载基础专家包(49.2 MiB),配合组件模板使用。

下载基础专家与冻结基座 ↓ SHA-256 校验值

基础专家保持冻结;在此基础上训练自定义专家和路由器。它与已训练完整参考组件不同,不是可直接上传的最终提交包。

下载范围已调整:仅含3093张正常训练、180张正常适应、326张正常校准图片。249张开发评测图片及标注不再提供下载;服务器仍按原规则评测。此前已公开的数据不视为全新隐藏测试。

三、数据与训练范围

使用 VisA 与 MVTec LOCO AD 各三类图像。六类指物品场景,分别包含外观缺陷或数量、组合、位置关系异常。

数据集品类重点
VisAcandle、capsules、pcb1
蜡烛、胶囊、电路板
外观缺陷与区域定位
LOCOpushpins、screw_bag、splicing_connectors
图钉分格容器、螺钉袋、导线连接器
逻辑异常与结构异常
查看六类图像:正常 / 异常 / 区域标注
candle正常、异常及mask标注样例
candle · 蜡烛产品
capsules正常、异常及mask标注样例
capsules · 胶囊产品
pcb1正常、异常及mask标注样例
pcb1 · 电路板产品
图钉分格容器正常、逻辑异常和结构异常样例
pushpins · 图钉分格容器
螺钉与垫圈配套正常、逻辑异常和结构异常样例
screw_bag · 螺钉与垫圈配套
导线连接器装配正常、逻辑异常和结构异常样例
splicing_connectors · 导线连接器装配

图例来自本次发放的数据,完整数据与角色数量见数据与代码。

划分原图数量用途
正常训练3093拟合专家与正常建模
正常适应180训练路由及允许的明暗、阴影适应
正常校准326独立确定阈值
本地开发验证144(正常72、异常72)独立公开开发集;模型选择、对照与失败分析
服务器开发诊断249(正常107、异常142)既有诊断与榜单;非保密考试

训练边界:开发异常与 mask 不得用于拟合、正常建库或阈值寻优。开发图按常规、偏暗×0.7、偏亮×1.3、中部阴影×0.7四种条件评测,共996次推理。当前为公开图像划分,独立现场采集为选做。

四、实现流程

正式框架支持默认关闭的light-preprocess-v1:按类别配置固定90°倍数旋转及0.8–1.2亮度/对比度。旋转须声明方向不变性。配置随模型绑定,训练、建库、校准与推理保持一致;热图恢复原图坐标,耗时计入评测,仍只运行一次骨干。配置入口与命令见数据代码页。修改后必须完整重训,不能只编辑已有权重或提交清单。

  1. 接入特征:公共程序将输入处理为320×320,运行一次冻结 ResNet18。专家的 embed(features, context) 返回 float32 [1,40,40,32],设备一致且数值有限。
  2. 训练专家与路由:保留冻结 base,至少训练两个自定义专家。logits(features, context) 返回 [1,E],E含base,顺序与配置一致。只执行选中的专家,再归一化融合。
  3. 建库并校准:按候选策略建立融合正常参考库,用独立正常校准图确定图像与像素阈值。更新专家或路由后,重新建库与校准。
  4. 检查并评测:保存配置与日志,在全新进程重载模型,先完成本地144图四条件576次推理,再上传执行服务器996次诊断。两套数据不同,分数分别报告。
专家数量、每张图的处理流程与资源限制
  • 先准备至少3个专家:保留平台提供的1个基础专家,再实现至少2个自定义专家。“最多两个”不是限制专家总数。
  • 每张图只选1个或2个专家:路由器从专家池里选择本次要使用的专家。Top-1表示选1个,Top-2表示选2个;没有选中的专家不参与本次计算。例如,有“基础、位置、方向”3个专家时,本次可以选“基础+方向”,下次可以选“位置+方向”。
  • 公共特征只提取一次:每张图先经过一次冻结的公共骨干,再交给选中的专家处理,最后将特征融合并进行一次参考匹配。不要重复运行骨干、额外调用视觉大模型,也不要用异常分数或热力图代替接口要求的特征。
  • 每个点位的存储限制:自定义专家、路由器及融合相关状态合计不超过2 MiB;相关参考库和自定义原型合计不超过2048个向量,每个向量最多96维。专家正式输出的特征维度固定为32。
  • 整个模型的训练参数限制:全部点位的自定义网络、路由器和其他可学习张量,合计不超过10万个参数。平台提供的冻结资产单独列出;报告中还需写明完整部署包大小和实际推理耗时。
  • 结果解释要准确:路由权重表示融合时的占比,不表示专家的正确率;异常分数未经校准,不能直接称为异常概率。具体检查以当前发行包的规则为准。

五、对比与评价

实验比较内容
基线与专家仅base、各单专家、完整方法
融合与路由固定融合、Top-1、Top-2
消融移除或替换一个专家,其他条件一致
稳健性与成本六类四条件的误报、漏检、定位、平均/P95耗时、调用次数与存储

比较时保持数据、输入尺寸、骨干和设备一致。展示至少三个失败案例,性能变好、持平或下降均如实报告。全专家融合仅作为诊断对照,单独说明开销。

评价细节与数据来源

输出图像级异常分数、二分类与区域;报告图像级AUROC及适用的定位指标。VisA与结构异常采用IoU;LOCO逻辑异常采用课程饱和区域覆盖与区域外误报惩罚,不等同于官方sPRO/AUC。按六类宏平均,并分别展示VisA外观、LOCO结构与逻辑结果,旧三类成绩不与新版混排。

既有训练与服务器诊断角色共3848张原图;新增本地开发144图与其及教学30图按解码像素隔离。VisA保留原划分,LOCO每类从正常训练图划出30张适应,正常validation用于校准,开发每类固定20正常、20逻辑、20结构。正常训练包不附带完整LOCO测试集;另发144图本地开发包与标注,供模型选择但不拟合专家/路由/参考库或寻优正式阈值。允许的正常变化及衍生伪异常以课程配置为准。

VisA来源:Amazon Science,CC BY 4.0;LOCO来源:MVTec,CC BY-NC-SA 4.0。遵守许可,保留下载包中的来源与论文引用。

六、提交材料

  • 提交源码:专家、路由、训练、建库、校准与推理程序,附依赖和启动说明。
  • 模型与配置:权重、参考库、专家顺序、Top-1/Top-2策略与各类阈值。
  • 实验记录:数据角色清单、训练与校准日志、本地576次与服务器996次逐图结果(分开记录);记录分数、阈值、判断、热力图、区域、专家权重与耗时。
  • 实验报告:基线、对比、消融、至少三个失败案例和资源开销。

从左侧“提交方案”上传并检查,在“数据评测”查看结果,在“实验报告”保存报告正文和附件,在“远程测试”查看现场测试入口。数据和打包命令见独立工作区的“数据代码”。上传检查通过不代表检测效果达标;现场巡检为选做,另交采集与验证记录。