FPGA-based Intelligent Detection System — Metal Surface Defect Detection & Auto-Sorting on Cyclone V SoC (AIEP)
面向集创赛(CCIC)「皓耀」企业命题——金属材料表面缺陷检测与自动分拣任务,基于 Intel/Altera Cyclone V SoC FPGA + AIEP 加速平台 构建的端到端缺陷检测系统:从数据集标注、模型训练、QAT 量化部署,到 FPGA 板端实时推理与尺寸标注,全链路闭环可复现。
- 5 类缺陷检测:划痕(ca_shang)、脏污(zang_wu)、褶皱(zhe_zhou)、针孔(zhen_kong)、正常(zheng_chang),基于 SSD-MobileNetV1 检测模型。
- QAT 量化部署:训练后量化感知训练(Quant-Aware Training)并导出
.nb板端模型,适配 AIEP 的 Paddle-Lite 推理运行时。 - FPGA 板端推理:通过 SSH 一键上传图片并在板端执行
ssd_detection推理,回传类别与置信度。 - 尺寸标注:推理结果叠加像素尺寸与按像素当量换算的物理尺寸(px + mm),输出可视化结果图。
- 一键部署与取证脚本:
deploy_to_aiep.py支持向目标板卡下发模型、标签与运行环境(含--bootstrap-runtime自动解包官方运行时),capture_board_evidence.py提供逐图板端原始证据采集。
graph LR
A[数据集标注<br/>241 张 / 5 类] --> B[PaddleDetection 训练<br/>SSD-MobileNetV1]
B --> C[QAT 量化感知训练]
C --> D[导出推理模型<br/>.pdmodel / .pdiparams]
D --> E[Paddle-Lite opt 转换<br/>.nb 板端模型]
E --> F[SSH 部署到 AIEP<br/>Cyclone V SoC FPGA]
F --> G[板端推理 ssd_detection]
G --> H[结果回传<br/>类别 + 置信度]
G --> I[尺寸标注<br/>px + mm 可视化]
- Python 3.8 + PaddlePaddle 2.x(训练侧)
- PaddleDetection 2.x(
training/PaddleDetection/) - 目标板卡:AIEP 平台(Cyclone V SoC FPGA),可通过 SSH 访问
# 基础训练
python tools/train.py -c configs/myconfig/ssd_mobilenet_v1.yml
# QAT 量化感知训练
python tools/train.py -c configs/myconfig/ssd_mobilenet_v1.yml \
--slim_config configs/myconfig/ssd_mobilenet_v1_qat.yml以上命令在
training/PaddleDetection/目录下执行。
python tools/export_model.py \
-c configs/myconfig/ssd_mobilenet_v1.yml \
--slim_config configs/myconfig/ssd_mobilenet_v1_qat.yml \
-o weights=output/ssd_mobilenet_v1_qat/model_final导出后使用 Paddle-Lite opt 工具转换为 .nb 板端模型(.nb 为体积较大的构建产物,按 .gitignore 规则不入库,可按需在本地转换生成;转换入口见 初赛/ 相关脚本与 training/ 导出配置)。
python 初赛/deploy_to_aiep.py \
--host <board_ip> --password <board_password>如需同时下发官方 Paddle-Lite 运行时(适用于未预置运行时的板卡):
python 初赛/deploy_to_aiep.py \
--host <board_ip> --password <board_password> --bootstrap-runtime# 上传本地图片并在板端推理
python 初赛/board_infer.py <image_name> \
--host <board_ip> --password <board_password>
# 或指定本地图片路径(自动上传)
python 初赛/board_infer.py --image-file <local_image_path> \
--host <board_ip> --password <board_password>python 初赛/infer_with_size.py \
--model_dir training/PaddleDetection/output_inference/ssd_mobilenet_v1_qat \
--image_file <image_path> \
--output_dir output_vis_size/板端地址与口令请替换为实际板卡信息,脚本同样支持通过环境变量
AIEP_PASS提供口令。
| 目录 | 说明 |
|---|---|
赛题/ |
赛题原文与精简版,含评分项与提交要求 |
初赛/ |
板端推理、模型部署、尺寸标注脚本及结果证据 |
初赛/提交材料/ |
技术文档(Markdown/Word/PDF)、统一图像归集 |
training/ |
PaddleDetection 自定义训练配置、数据集与导出模型 |
preliminary round/v2/ |
初赛提交镜像包(文档、结果图、脚本、日志归集) |
output_vis/ |
批量推理结果可视化图(覆盖 5 类样本) |
皓耀_初赛/ |
初赛交付组织目录(技术文档、评分结果、官方要求参考) |
以下为团队自采数据上的推理结果示例(output_vis/):
| 划痕 | 脏污 | 褶皱 | 针孔 | 正常 |
|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
板端推理结果示例(初赛/results/):
| 划痕 | 脏污 | 褶皱 | 针孔 |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
核心指标图(初赛/提交材料/初赛全部图片/01_核心成图/):
| 端侧部署关键指标 | 训练损失收敛 |
|---|---|
![]() |
![]() |
- 训练数据:241 张团队自采并标注的金属材料表面图像,覆盖划痕、脏污、褶皱、针孔与正常 5 类,采用 VOC 格式组织。
- 官方测试集:初赛官方测试集(10 张)及其推理/标注衍生图版权归组委会所有,不随本仓库分发,仅本地保留用于对照。仓库内保留的是团队对测试集的检测结果统计与文档配图。
- 本仓库代码与文档以 MIT License 开源(Copyright © 2026 Techd81)。
- 感谢组委会「皓耀」企业命题提供的赛题与测试环境;感谢 PaddleDetection 与 Paddle-Lite 开源框架。










