【CRAIC】工业缺陷检测实训平台 模型训练指导手册 V1.4

工业缺陷检测实训平台 模型训练指导手册

  • 产品版本:创新版
  • 文档版本:01

版权声明

版权所有©EDUCN 2025。保留一切权利。未得到本公司的书面许可,任何人不得以任何方式或形式对本手册内的任何部分进行复制、摘录、备份、修改、传播、翻译成其他语言、将其全部或部分用于商业用途。

免责声明

本手册内容依据现有信息制作,由于产品版本升级或其他原因,其内容有可能变更。海云捷迅保留在没有任何通知或者提示的情况下对手册内容进行修改的权利。本手册仅作为使用指导,海云捷迅在编写本手册时已尽力保证其内容准确可靠,但并不确保手册内容完全没有错误或遗漏,本手册中的所有信息也不构成任何明示或暗示的担保。

目录

  1. 模型训练流程说明
  2. 开发环境需求
  3. 图像采集
  4. 数据集准备
  5. 模型训练
  6. 模型评估
  7. 模型转换
  8. 模型部署
    • 8.1 [上传模型文件SSD_MOBILENET_V1_OPT.NB 到控制终端(树莓派)](#上传模型文件SSD_MOBILENET_V1_OPT.NB 到控制终端(树莓派))
    • 8.2 [拷贝模型文件到FPGA 开发板](#拷贝模型文件到FPGA 开发板)
    • 8.3 [进入FPGA 开发板部署模型文件](#进入FPGA 开发板部署模型文件)
  9. 运行与测试

1 模型训练流程说明

环境准备、图像采集、数据标注、模型评估、模型训练、数据集制作、模型部署、运行与测试

1.1 基于铝片缺陷的模型训练流程

1.1.1 图像采集与数据集制作
  1. 图像采集
    • 使用高分辨率的工业相机或摄像机捕获铝材表面的图像。
    • 确保在稳定的光照条件下进行图像采集,调试相机聚焦、光圈,以获得高质量的图像数据。
  2. 数据标注
    • 使用labelImg 工具对采集到的图像进行标注。
    • 标注内容包括铝材表面的各类缺陷,如脏污、褶皱、划伤等。
    • 标注过程中,为每个缺陷区域创建边界框,并为其分配相应的类别标签。
    • 标注完成后,将标注信息保存为VOC 格式(XML 文件)。
  3. 数据集制作
    将标注好的图像和对应的标注文件组织成数据集,数据集应包含训练集、验证集和测试集。
1.1.2 PaddleDetection 平台训练
  1. 环境准备
    安装PaddlePaddle 框架和PaddleDetection 库,配置好训练所需的环境和依赖项。
  2. 模型参数配置
    在PaddleDetection 的配置文件中,设置模型的类型、训练参数、数据路径等。
  3. 模型训练
    运行PaddleDetection 的训练脚本,开始训练模型。训练过程中,可以实时监控模型的训练效果,如损失函数的变化、准确率等。
  4. 模型验证
    使用训练好的模型进行推理验证,根据评估结果,调整模型的参数或结构,以优化模型的性能。
1.1.3 模型转换与部署
  1. 模型转换
    使用所提供的opt 工具将PaddleDetection 训练得到的模型转换为FPGA 开发板可支持的格式(*.nb),转换过程中,可能需要对模型进行优化,以减小模型的大小、提高模型的运行速度等。
  2. FPGA 开发板部署
    将转换后的模型部署到FPGA 开发板上。配置FPGA 开发板的环境和参数,确保模型能够正常运行。
  3. 运行与测试
    将检测铝片放在工业缺陷检测实训平台设备上,对部署在FPGA 开发板上的模型进行验证和测试。通过实际运行和对比结果,评估模型在FPGA 开发板上的性能和表现。

1.2 系统检测流程

  1. 检测是否存在对应的sqlite 数据库,不存在则创建,并创建defect_list 表,用于保存检测铝片信息,包括铝片uuid,铝片保存路径,铝片缺陷名字,铝片推理时间,铝片识别准确率以及数据插入时间
  2. 初始化相机,获取相机信息。
  3. 通过计算黑白图片中黑白像素所占比例来判断铝片进入摄像头视野情况,进入视野里铝片面积越大,则白色像素所占比例越大,反之越小。
  4. 设置一个固定的白色像素占比值来判断铝片是否大部分面积暴露在摄像头视野下,大于该固定值才进行模型推理。
  5. 针对运动中的铝片,设置一个lv 参数来判断摄像头拍摄到的铝片是否是同一个铝片,初始值为0,lv由0-->1 表示视野由小变大,如果不是同一铝片则在defect_list 表插入一条数据,用于统计所有检测铝片个数。
  6. 调用推理接口,用于推理当前视野下铝片是否存在缺陷。如果存在缺陷,设置一个lx 参数用来表示是否是同一个缺陷铝片,方法和lv 使用一致,然后调用机械臂自动抓取铝片接口,用于将识别到的缺陷铝片抓取出来。
  7. 针对检测到的缺陷铝片进行画框,添加文字,并根据检测信息,在defect_list 表中插入数据,并将检测结果保存在检测结果目录以及历史检测目录下;如果是正常铝片,则在defect_list 表里插入正常图片信息,并将图片保存在历史检测目录下。
  8. 设置一个固定的白色像素占比值来判断是否铝片很少部分或者不存在铝片暴露在摄像头视野下,小于该固定值就不再进行推理,将lv 和lx 都置为0,表示视野由大变小。
  9. 前端页面显示视频流信息。

2 开发环境需求

  1. 个人电脑端需安装Python 环境,建议安装3.7、3.8 版本;--用于数据标注的labelimg 软件运行、数据集制作等。
  2. 电脑安装MobaXterm(建议)、XShell、XFTP 等相关软件(或者其它类似工具);--主要用于Windows 平台上与远程服务器进行交互(该软件操作方法请通过网络自学,不提供额外支持)。

3 图像采集

图像采集可以通过工业缺陷检测实训平台上的MVS 软件或个人电脑端的MVS 软件完成采集。

3.1 方法一:通过工业缺陷检测实训平台终端采集图像。

需要首先保证电脑和工业缺陷实训平台在同一局域网络,并且可以成功登录进入工业缺陷检测实训平台

3.1.1 链接树莓派

打开MobaXterm 软件,点击Start local terminal,输入如下命令进行链接

ssh 复制代码
ssh root@172.16.68.111
3.1.2 连接成功后如图所示
复制代码
Spet MubExec Tunneing Packaoes Settings Help
4.root Dofoot~ +
(Xserver,SSH client and network tools) ?Mobaxterm Profess ional v24.2?
Your computer drives are access ible through the /drives path
Your USnLAS is yet treoze ot ow
Each command status is specified by a special symbol(orx)
Registered to huxy (1 user)
Last logn: wed pr 2 17:34:46202 rm 1267616.6.
前A3/04/2025 13:54.30/home/mobaxterm
xrandr:cannot find output"HDMI-1"
root Dofbot:~#
3.1.3 停止检测服务,解除相机占用
ssh 复制代码
systemctl stop detect-api.service
root@Dofbot:#systemctl stop detect-api root@Dofbot:~#
3.1.4 进入MVS 路径
ssh 复制代码
cd /opt/MVS/bin
3.1.5 启动MVS 客户端

执行命令启动MVS 客户端,并按照图片指示的操作顺序,逐步打开相机

ssh 复制代码
./MVS
root@Dofbot:/opt/Mvs/bin# pwd
/opt/MVS/bin
Ot pt tt
  1. 双击打开相机
  2. 点击开始采集图标,显示相机实时拍摄到的画面
3.1.6 调整环境设置

将缺陷铝片手动放置在传送带上,调整铝片位置于相机正下方和画面正中间。同时调整光源亮度和相机光圈、焦圈,使画面尽可能清晰。完成后效果如图所示:

3.1.7 设置图片保存路径

注意通过此处的路径是树莓派中的路径,不是个人电脑的本地路径,采集完成后需要手动拷贝到本地。可以使用默认路径:/opt/MVS/bin/Temp/Data

3.1.8 进行图像采集

点击抓拍图像按钮进行图像采集,点一次保存一张,保存路径是之前设置的路径,如果没有设置,就是默认路径/opt/MVS/bin/Temp/Data

3.1.9 结束图像采集

采集到足量图片后(每类缺陷图片采集数量建议不少于100 张),退出MVS 软件

3.1.10 打开XFTP 软件

根据下图输入树莓派的链接信息,点击确定建立连接

  1. 主机(H) 172.16.68.111
  2. 协议® SFTP,端口号(O) 22
  3. 用户名(U): root,密码(P: 为空)
3.1.11 通过安全警告

显示SSH 安全警告时点击"接受并保存"

3.1.12 拷贝/下载图像
  1. 左侧为个人电脑保存采集到的缺陷铝片的实际路径
  2. 右侧为树莓派中通过MVS客户端采集图片时设置的图片保存路径,如果没有进行设置就是默认路径
  3. 选中需要下载的文件,点击右键,再选择传输

3.2 方法二:通过个人电脑采集图像

将工业相机连接至个人Windows 系统的电脑,电脑端安装MVS 客户端进行采集,将采集的图片保存至个人电脑。操作方法和以上方法基本一致,也可以参考《用户手册》第六章节,此处不做详细介绍。

4 数据集准备

4.1 安装并运行标注软件

常用的制作数据集的软件有labelme,labelimg 等,这里主要介绍labelimg 的使用。在个人电脑上启动安装有Python 环境的终端,执行如下命令完成Labelimg 软件安装。

ssh 复制代码
pip install PyQt5 pyqt5-tools lxml labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple

安装完成后,执行labelimg 命令,打开labelimg 软件。

ssh 复制代码
labelimg

执行上述命令后,会自动弹出labelimg 的界面,其中:

  • Open Dir:选择图像采集后保存到本地的文件夹,images 文件夹。
  • Change Save Dir:选择标注信息存放的文件夹,annotations 文件夹(不存在则创建)。
  • 在view 菜单栏中打开auto save mode 格式,这个可以帮助我们自动地保存标记好的图片。
  • 点击creat RectBox 开始标记,在labelImg 中输入标签,如果感觉这个比较难检测,可以点击右上角的difficult

    快捷键:W(创建方框),A(上一张),D(下一张)。
    标注完成后会得到一些标签

    xml 文件里面包含已标注图片的部分信息解释如下:
  • folder:图片所在目录
  • filename:图片名称
  • path:图片所在路径
  • size:图片大小
  • object:标注信息
    • name:标注类别
    • bndbox:标注框坐标

4.2 进行图片标注软件

本文档提供的标注示例共五类,分别为正常(zheng_chang )、脏污(zang_wu )、划痕/擦伤 (ca_shang)、褶皱(zhe_zhou)、针孔(zhen_kong)。标注时可以删除某一分类,需要label_list 文件同步更新。但是请勿新增分类,如需新增,请联系我司商务或售后。




4.3 数据集整理

图片标注完成后,将其进行整理为如图所示两个文件夹,其中images 文件夹存放所有图片文件,annotations 文件夹存放所有标签文件。(注:图片文件应和标签文件一一对应)

再新建一个名为ImageSet 的空文件夹,再将提供的参赛资料中的label_list、dataset_processing_one.py、dataset_processing_two.等文件拷贝进来,得到如下结果:

在包含python 的终端中打开这个文件夹,并执行命令:

ssh 复制代码
python dataset_processing_one.py

会在ImageSets 文件夹下生成4 个文件,分别为test、train、trainval、val。

在终端中执行命令:

ssh 复制代码
python dataset_processing_two.py

会在目录下生成4 个文件,分别为trainval、train、val、test。

4.4 数据集打包

最后检查数据集各部分内容是否正确(对照下图进行检查),如果检查无误则将整个目录进行打包(建议使用zip 格式) ,供训练过程中上传使用。

5 模型训练

方法一:采用智算中心AIStackDC(PaddlePaddle 框架),在其算力平台进行训练(参照以下步骤)。

方法二:自行搭建环境进行训练(该训练方式需要用户自己探索学习,不提供相关支持服务)。

5.1 环境准备

本章节主要介绍AIStackDC 平台进行模型训练的方法,AIStackDC 是一个高效、灵活的算力资源租赁平台。平台提供从"实例的租赁->模型的部署->实例管理->技术支持"的一站式算力租用服务,能够满足个人用户以及包括企业、院校、研究机构在内的各类组织对高性能计算资源的需求。用户可根据个人的具体需求(如GPU 型号、显存要求、预算、技术支持等)灵活配置,通过AIStackDC 的直观操作界面,快速完成容器实例租用流程,进行模型训练、推理、大数据处理、模拟实验等,让整个使用过程更加顺畅和高效。

5.2 训练流程

5.2.1 项目创建
  1. 登录https://aistackdc.com/home,进入AIStackDC 官网,进入控制台(注册过程略)。

  2. 选择"容器实例",新建实例。

  3. 根据个人需求选择显卡配置和计费规则,并点击镜像选择框,选择PaddlePaddle 2.1.2 框架相关的镜像

  4. 选择SSH 密钥对:选择实例需要使用的密钥对用于远程链接,如果没有,点击"创建SSH 密钥对"根据提示进行创建,创建完成后密钥对会自动下载到本地以供后续使用

  5. 完成实例创建后,页面跳转至下图页面所示,实例会进入"创建中"的状态,等待示例状态更新为"运行中",表示实例成功创建

5.2.2 连接容器实例
5.2.2.1 平台JupyterLab 连接(建议)

点击平台JupyterLab 按钮,进入JupyterLab 连接页面,再点击左下角Terminal 进入终端

链接成功后如图所示

5.2.2.2 远程软件连接

点击远程链接按钮,根据弹窗信息在MobaXterm 软件中建立链接

链接成功后如图所示

5.2.3 依赖安装
  1. 在终端中输入以下命令,进行源码下载,下载成功后如下图所示。
ssh 复制代码
git clone https://gitee.com/paddlepaddle/PaddleDetection.git -b release/2.2
  1. 跳转进入目录并分别完成以下依赖安装。依次执行以下命令。
ssh 复制代码
cd PaddleDetection/
pip install paddleslim==2.1.1
sed -i -e 's/sklearn/scikit-learn/g' requirements.txt
pip install -r requirements.txt
python setup.py install
pip install pycocotools
pip install lap
pip install --user --upgrade pyarrow==11.0.0
pip install "protobuf<3.21.0" --upgrade
  1. 执行history 命令,检查以上所有命令是否全部执行。
ssh 复制代码
history
5.2.4 数据集上传
  1. 双击左侧目录树逐级进入目录"PaddleDetection/dataset",选择数据集准备过程中最后打包的数据集进行上传,或选择需要训练的数据集上传。

  2. 等待上传完成

  3. 上传成功后如下图所示

  4. 执行如下命令解压数据集目录

ssh 复制代码
cd /dataset
unzip isdd-dataset-voc.zip
  1. 解压完成后如图所示

  2. 进入"PaddleDetection/configs/datasets/",修改"voc.yml"配置文件参数,修改后执行"ctl+s"保存(isdd-dataset-voc 名称以用户打包数据集名称为准,num_classes:5 为所训练的缺陷类型数量,需要与label_list 文件中行数一致)

ssh 复制代码
cd /root/data/PaddleDetection/configs/datasets/
sed -i -e 's/20/5/g' voc.yml
sed -i -e 's/voc/isdd-dataset-voc/g' voc.yml
5.2.5 量化训练

进入PaddleDetection 目录,执行如下命令进行训练

ssh 复制代码
cd /root/data/PaddleDetection
# 注意:以下命令为一条命令
python tools/train.py -c configs/ssd/ssd_mobilenet_v1_300_120e_voc.yml --slim_config configs/slim/quant/ssd_mobilenet_v1_qat.yml --eval

观察训练过程,当mAP(准确率)大于65%或者Best test bbox ap(最佳准确率)大于0.65 时,才能达到基础使用效果。

如上图所示本次训练Best test bbox ap 准确率达到了0.743,此时可以键盘操作ctrl+c 手动结束训练。训练结束后会在"PaddleDetection/"目录下生成"output"文件夹,文件夹中数据为训练的结果文件夹。

5.2.6 继续训练(可跳过)

在日常训练过程中,可能由于一些原因导致训练中断,可以使用-r 选项,并指定最优迭代(output/ssd_mobilenet_v1_qat/best_model)或者期望继续训练的迭代 (output/ssd_mobilenet_v1_qat/60)恢复训练

ssh 复制代码
cd /root/data/PaddleDetection
# 注意:以下命令为一条命令
python tools/train.py -c configs/ssd/ssd_mobilenet_v1_300_120e_voc.yml --slim_config configs/slim/quant/ssd_mobilenet_v1_qat.yml -r output/ssd_mobilenet_v1_qat/best_model --eval

6 模型评估

6.1 模型精度评估(可跳过)

ssh 复制代码
# 评估动作默认使用训练结束后保存的model_final.pdparams,此处因为准确度已达到100%结束了训练, 故使用-o 手动指定使用训练过程中的best_model
# -c 参数表示指定使用哪个配置文件
# -o 参数表示指定配置文件中的全局变量(覆盖配置文件中的设置)
# 注:以下命令为一条命令。
python tools/eval.py -c configs/ssd/ssd_mobilenet_v1_300_120e_voc.yml --slim_config configs/slim/quant/ssd_mobilenet_v1_qat.yml -o weights=output/ssd_mobilenet_v1_qat/best_model use_gpu=true


6.2 模型预测(可跳过)

ssh 复制代码
# -c 参数表示指定使用哪个配置文件 
# -o 参数表示指定配置文件中的全局变量(覆盖配置文件中的设置) 
# --infer_img 参数指定预测图像路径 
# 其中infer_img=/root/data/PaddleDetection/dataset/isdd-dataset-voc/images/225huaheng.jpg 为 所用测试图片路径,具体以自己使用测试的图片路径为准 
# 注:以下命令为一条命令。
python tools/infer.py -c configs/ssd/ssd_mobilenet_v1_300_120e_voc.yml --slim_config configs/slim/quant/ssd_mobilenet_v1_qat.yml -o weights=output/ssd_mobilenet_v1_qat/best_model use_gpu=true infer_img=/root/data/PaddleDetection/dataset/isdd-dataset-voc/images/225huaheng.jpg

预测结束后会在output 文件夹中生成一张与预测图像同名的图像,其中画有预测结果。可双击预览查看

6.3 模型导出

  1. 执行以下指令。
ssh 复制代码
cd /root/data/PaddleDetection
# 注意:以下命令为一条命令
python tools/export_model.py -c configs/ssd/ssd_mobilenet_v1_300_120e_voc.yml --slim_config configs/slim/quant/ssd_mobilenet_v1_qat.yml -o weights=output/ssd_mobilenet_v1_qat/best_model
  1. 导出成功后,会出现"PaddleDetection/output_inference"文件夹,进入文件夹可以查看到导出的模型数据。

7 模型转换

Opt 工具是Paddle Lite 提供的可以将Paddle 格式模型转换为Paddle Lite 格式的模型优化工具。模型要想通过Paddle Lite 在移动端部署,需要将模型转换为Paddle Lite 支持的格式naive buffer(即.nb 格式)。该格式是Paddle Lite 自研的格式。Opt 工具的主要工作是提供了模型的离线优化方法,包括子图融合、混合调度、Kernel 优选等,从而使得在模型部署之前能够得到一个轻量的,最优的可执行模型。

  1. 上传opt 工具到PaddleDetection 文件夹

    将提供的参赛资料中的opt 工具下载到本地,通过左侧目录树工具切换到如图 /root/data/PaddleDection 目录,点击上传按钮,选择自己本地的opt 文件,点击打开进行上传

    该工具较大,请耐心等待文件上传完成。在页面正下方可以观察到文件上传进度,等待上传完成后在 /root/data/PaddleDection 目录可以看到传输完成的文件

  2. 给文件赋予可执行权限,执行完成可以看到文件颜色发生变化

ssh 复制代码
cd /root/data/PaddleDetection
# 注意:以下命令为一条命令
chmod +x opt
  1. 模型格式转换,将paddle 的模型格式转化为FPGA 可执行格式(*.nb)。
ssh 复制代码
cd /root/data/PaddleDetection
# 注意:以下命令为一条命令
./opt --model_dir=./output_inference/ssd_mobilenet_v1_qat --valid_targets=intel_fpga,arm --optimize_out_type=naive_buffer --optimize_out=ssd_mobilenet_v1_opt
  1. 转换成功后当前目录会出现ssd_mobilenet_v1_opt.nb 文件

  2. 下载模型文件到本地

    右键单击文件,点击下载按钮

8 模型部署

需要首先保证电脑和工业缺陷实训平台在同一局域网络,并且可以成功登录进入工业缺陷检测实训平台
控制终端(树莓派)IP 地址默认为:172.16.68.111 用户名root 密码为空
fpga 开发板IP 地址默认为:172.16.68.110 用户名root 密码awcloud

8.1 上传模型文件SSD_MOBILENET_V1_OPT.NB 到控制终端(树莓派)

8.1.1 打开XFTP 软件

根据下图输入树莓派的链接信息,点击确定建立连接

  1. 主机(H) 172.16.68.111
  2. 协议® SFTP,端口号(O) 22
  3. 用户名(U): root,密码(P: 为空)
8.1.2 通过安全警告

显示SSH 安全警告时点击"接受并保存"

8.1.3 上传模型文件

在左侧窗口找到下载下来的模型文件,双击进行上传。传输完成后右侧目录会显示上传的模型文件

8.2 拷贝模型文件到FPGA 开发板

8.2.1 连接控制端(树莓派)

打开MobaXterm 软件,点击Start local terminal,输入如下命令进行链接

ssh 复制代码
ssh root@172.16.68.111
8.2.2 连接成功后如图所示
8.2.3 通过控制端(树莓派)将文件传输到FPGA 开发板

执行scp 命令将文件传输FPGA 开发板/root 目录中,

ssh 复制代码
scp ssd_mobilenet_v1_opt.nb root@172.16.68.110:/root/

看到提示root@172.16.68.110's password:时,直接输入密码awcloud,输入时不会有交互提示,输入完成后回车即可

8.3 进入FPGA 开发板部署模型文件

8.3.1 通过控制端(树莓派)连接到FPGA 开发板

执行ssh 命令连接fpga 开发板

ssh 复制代码
ssh root@172.16.68.110

看到提示root@172.16.68.110's password:时,直接输入密码awcloud,输入时不会有交互提示,输入完成后回车即可

8.3.2 部署模型文件

执行命令备份原始模型文件,并将上传的模型文件拷贝到执行路径中

ssh 复制代码
cd /opt/ssd_detection_demo/ssd_mobilenet_v1/
mv ssd_mobilenet_v1_opt.nb ssd_mobilenet_v1_opt.nb.bak
cp /root/ssd_mobilenet_v1_opt.nb . # 注意这里有一个英文的. 表示当前路径,必须存在,并且前面要有一个空格
8.3.3 检查label_list 文件

检查并确保label_list 文件内容与训练过程中使用的label_list.txt 文件内容是一致的

ssh 复制代码
cd /opt/ssd_detection_demo/labels
cat label_list
8.3.4 重启FPGA 开发板的推理服务,
ssh 复制代码
systemctl restart detect.service

9 运行与测试

打开工业缺陷检测实训平台的前端页面,运行传送带,进片的铝片的检测识别,关注页面展示的检测结果,以及机械臂的抓取状态,验证和测试训练效果。

相关推荐
SCRC21 小时前
标注工具Labelimg的安装与使用
craic