【超简单】之基于PaddleX的2022“兴智杯”齿轮瑕疵检测训练

简介: 【超简单】之基于PaddleX的2022“兴智杯”齿轮瑕疵检测训练

一、【超简单】之基于PaddleX的2022“兴智杯”齿轮瑕疵检测训练


1.赛事背景说明


近年来,AI+工业瑕疵检测已成为工业智能领域的重要应用场景,能够进一步提升工业检测效率和精度、降低人力成本。本赛题选取齿轮配件异常检测作为AI+工业瑕疵检测比赛场景,鼓励选手通过机器视觉技术提升齿轮异常检测速度和准确率。


齿轮配件异常检测是工业瑕疵检测的痛点场景。齿轮传动装置是机械装备的重要基础件,与带链、摩擦、液压等传动方式相比,具有功率范围大、传动效率高、运动平稳、传动比准确、使用寿命长、结构紧凑等特点,同时安全、可靠、性价比优越的优点,决定了它在通用机械装备领域中的不可替代性。齿轮作为一种典型的动力传递器件,其质量的好坏直接影响着机械产品性能。


目前机器视觉行业依然由少数国际龙头垄断。美国康耐视(cognex)及日本基恩士(Keyence)几乎垄断全球 50%以上的视觉检测市场,两者均基于核心零部件和技术(操作系统、传感器等)提供相应解决方案。国内机器视觉检测方案虽已有长足发展,但与世界巨头相比仍存较大差距。因此,齿轮异常检测任务对于提升我国工业质检效率,保障产品质量具有重要意义。


2.赛题任务


赛题链接

赛题选取制造领域的齿轮配件异常检测场景,提供真实生产环境数据集,要求基于百度飞桨国产开发框架构建算法模型,比拼算法精度、召回率等指标,从而提升国产框架在工业智能领域的应用能力,解决企业实际生产痛点问题。参赛团队构建算法模型,实现从测试数据集中自动检测齿面黑皮、齿底黑皮、磕碰三类缺陷的目标。


3.数据集介绍


本任务数据集为一汽红旗汽车提供的齿轮配件在生产加工中的真实数据,所有数据在生产流水线中拍摄而得。


根据赛事要求为确保数据隐私性,数据仅可通过赛题平台下载,下载后仅可用于本次比赛,禁止在其他途径传播,各位读者可以到比赛页面注册登录,然后点击页面最下方的【数据下载】获得任务数据集。


数据集中的图片均为真实缺陷齿轮的平面展开图,并由专业人员标注。样图中会明确标识影像中所包含的缺陷和识别线类型。


下面从左至右分别为齿轮示意图、原始图像和标注后的例图:

image.png

下面是典型缺陷的局部放大图:

image.pngimage.pngimage.png

训练数据文件结构

将提供用于训练的图像数据和识别标签,文件夹结构:

|-- Images/train # 存放测试图像数据,jpeg编码图像文件

|-- Annotations # 存放属性标签标注数据

数据标注文件的结构上,属于比较标注的coco格式标注。


二、数据处理


image.png


1.标注文件整理


数据集文件名是中文,解压的时候要指定编码(抄坑总,确实好,记住了)


# 数据集解压缩:读者可以将数据集上传到AI Studio,再根据实际项目的具体路径,解压数据集
# 注意由于数据集文件名是中文,解压的时候要指定编码(也可以本地对数据集改名后再上传)
!unzip -qoa -O GBK data/data163113/齿轮检测数据集.zip -d ./data/
# 整理数据集结构
!mv data/齿轮检测数据集/train/train_coco.json data/齿轮检测数据集/
!rm data/齿轮检测数据集/train/Thumbs.db
!mkdir data/JPEGImages
!mv data/齿轮检测数据集/train/*.jpg data/JPEGImages/
!mv data/齿轮检测数据集/train_coco.json data/annotations.json
!rm data/齿轮检测数据集 -rf
# 统计文件数量
import glob
# 加载训练集路径
img_dir = 'data/JPEGImages/'
# 加载训练集图片目录
train_imgs = glob.glob(img_dir + '/*.jpg')
print('数据集图片数量: {}'.format(len(train_imgs)))
数据集图片数量: 2000
!dir data -l
总用量 7176
-rw-r--r-- 1 aistudio aistudio 7177387 6月  23 10:35 annotations.json
drwxrwxrwx 6 aistudio aistudio    4096 8月  28 09:39 data163113
drwxr-xr-x 2 aistudio aistudio  159744 8月  28 09:53 JPEGImages
  • 经查看,图片有2000张
  • 格式整理为PaddleX常用的coco格式


2.PaddleX安装


!python -m pip install --upgrade -q pip --user
!pip install -q -U paddlex


3.数据集划分


# 按比例切分数据集
!paddlex --split_dataset --format COCO --dataset_dir data --val_value 0.2
  • Train samples: 1600
  • Eval samples: 400


三、模型训练


1.transforms定义


# 定义训练和验证时的transforms
# API说明:https://github.com/PaddlePaddle/PaddleX/blob/develop/docs/apis/transforms/transforms.md
import paddlex as pdx
from paddlex import transforms as T
train_transforms = T.Compose([
    # T.MixupImage(mixup_epoch=-1), 
    T.RandomDistort(),
    T.RandomHorizontalFlip(), 
    T.RandomVerticalFlip(),         
    T.BatchRandomResize(
        target_sizes=[320, 352, 384, 416, 448, 480, 512, 544, 576, 608],
        interp='RANDOM'), 
    # T.Resize(target_size=224, interp='LINEAR'),
    T.Normalize(
            mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])
eval_transforms = T.Compose([
    T.Resize(
        224, interp='CUBIC'), T.Normalize(
            mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])
[08-28 10:02:45 MainThread @utils.py:79] WRN paddlepaddle version: 2.3.1. The dynamic graph version of PARL is under development, not fully tested and supported
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/parl/remote/communication.py:38: DeprecationWarning: 'pyarrow.default_serialization_context' is deprecated as of 2.0.0 and will be removed in a future version. Use pickle or the pyarrow IPC functionality instead.
  context = pyarrow.default_serialization_context()
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/__init__.py:107: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working
  from collections import MutableMapping
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/rcsetup.py:20: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working
  from collections import Iterable, Mapping
/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/matplotlib/colors.py:53: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working
  from collections import Sized
2022-08-28 10:02:46,648-WARNING: type object 'QuantizationTransformPass' has no attribute '_supported_quantizable_op_type'
2022-08-28 10:02:46,650-WARNING: If you want to use training-aware and post-training quantization, please use Paddle >= 1.8.4 or develop version


2.数据集定义


# 定义训练和验证所用的数据集
# API说明:https://github.com/PaddlePaddle/PaddleX/blob/develop/docs/apis/datasets.md
train_dataset = pdx.datasets.CocoDetection(
    data_dir='data/JPEGImages',
    ann_file='data/train.json',
    transforms=train_transforms,
    shuffle=True)
eval_dataset = pdx.datasets.CocoDetection(
    data_dir='data/JPEGImages',
    ann_file='data/val.json',
    transforms=eval_transforms)
loading annotations into memory...
Done (t=0.30s)
creating index...
index created!
2022-08-28 10:06:35 [INFO]  Starting to read file list from dataset...
2022-08-28 10:06:35 [INFO]  1121 samples in file data/train.json, including 1121 positive samples and 0 negative samples.
loading annotations into memory...
Done (t=0.02s)
creating index...
index created!
2022-08-28 10:06:35 [INFO]  Starting to read file list from dataset...
2022-08-28 10:06:35 [INFO]  277 samples in file data/val.json, including 277 positive samples and 0 negative samples.


3.模型定义


# YOLO检测模型的预置anchor生成
# API说明: https://github.com/PaddlePaddle/PaddleX/blob/release/2.0.0/paddlex/tools/anchor_clustering/yolo_cluster.py
import numpy as np
anchors = train_dataset.cluster_yolo_anchor(num_anchors=9, image_size=480)
anchor_masks = [[6, 7, 8], [3, 4, 5], [0, 1, 2]]
# 初始化模型,并进行训练
# 可使用VisualDL查看训练指标,参考https://github.com/PaddlePaddle/PaddleX/tree/release/2.0.0/tutorials/train#visualdl可视化训练指标
num_classes = len(train_dataset.labels)
model = pdx.det.YOLOv3(
    num_classes=num_classes,
    backbone='DarkNet53',
    anchors=anchors.tolist() if isinstance(anchors, np.ndarray) else anchors,
    anchor_masks=[[6, 7, 8], [3, 4, 5], [0, 1, 2]],
    label_smooth=True,
    ignore_threshold=0.6)
100%|██████████| 1121/1121 [00:00<00:00, 20013.00it/s]
2022-08-28 10:07:25 [WARNING] Extremely small objects found. 32 of 22857 labels are < 3 pixels in width or height
2022-08-28 10:07:25 [INFO]  Running kmeans for 9 anchors on 22857 points...
Evolving anchors with Genetic Algorithm: fitness = 0.7917: 100%|██████████| 1000/1000 [00:05<00:00, 171.65it/s]
W0828 10:07:38.093415  1037 gpu_resources.cc:61] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 11.2, Runtime API Version: 10.1
W0828 10:07:38.097923  1037 gpu_resources.cc:91] device: 0, cuDNN Version: 7.6.


4.模型训练


主要是batch size 选择,按比例调整,尽可能利用好显存。

# API说明:https://github.com/PaddlePaddle/PaddleX/blob/release/2.0.0/paddlex/cv/models/detector.py
# 各参数介绍与调整说明:https://paddlex.readthedocs.io/zh_CN/develop/appendix/parameters.html
model.train(
    num_epochs=300,  # 训练轮次
    train_dataset=train_dataset,  # 训练数据
    eval_dataset=eval_dataset,  # 验证数据
    train_batch_size=20,  # 批大小
    pretrain_weights='COCO',  # 预训练权重
    learning_rate=0.005 / 12,  # 学习率
    warmup_steps=500,  # 预热步数
    warmup_start_lr=0.0,  # 预热起始学习率
    save_interval_epochs=5,  # 每5个轮次保存一次,有验证数据时,自动评估
    lr_decay_epochs=[85, 135],  # step学习率衰减
    save_dir='output/yolov3_darknet53',  # 保存路径
    use_vdl=True)  # 其用visuadl进行可视化训练记录


目录
相关文章
|
数据采集 NoSQL Redis
Python爬虫-代理池原理和搭建
代理池架构,代理池的实现
323 0
|
机器学习/深度学习 计算机视觉
秒懂Precision精确率、Recall召回率-附代码和案例
秒懂Precision精确率、Recall召回率-附代码和案例
|
弹性计算 Ubuntu 安全
基于Ubuntu20.4搭建WordPress个人博客
在Ubuntu20.4系统上成功搭建了WordPress个人博客并且对WordPress进行了简单的配置。
1443 2
基于Ubuntu20.4搭建WordPress个人博客
|
机器学习/深度学习 算法 数据可视化
智能扑克牌识别软件(Python+YOLOv5深度学习模型+清新界面)
智能扑克牌识别软件(Python+YOLOv5深度学习模型+清新界面)
1502 0
|
机器学习/深度学习 计算机视觉
【YOLOv8改进】 ODConv(Omni-Dimensional Dynamic Convolution):全维度动态卷积
ODConv是一种增强型动态卷积方法,通过多维注意力机制在卷积的四个维度上学习互补注意力,提升轻量级CNN准确性和效率。与现有动态卷积不同,ODConv覆盖了空间、输入/输出通道和核数维度。在ImageNet和MS-COCO上,对MobileNetV2|ResNet等模型有显著性能提升,减少参数的同时超越传统方法。代码和论文链接可用。在YOLO系列中,ODConv改进了特征学习,优化了目标检测性能。
|
Web App开发 数据采集 移动开发
提升Selenium在Chrome上的HTML5视频捕获效果的五个方法
在Selenium中优化Chrome的HTML5视频捕获涉及更新Chrome和ChromeDriver、配置浏览器选项、使用代理IP、调整加载策略及确保安装了正确编解码器。例如,更新驱动程序,添加如`--autoplay-policy`和`--proxy-server`的命令行参数,使用代理以防止被封,设置页面加载策略为&#39;eager&#39;,并安装必要的编解码器来确保视频播放。代码示例展示了如何集成这些优化措施。
420 2
提升Selenium在Chrome上的HTML5视频捕获效果的五个方法
|
9月前
|
敏捷开发 存储 数据可视化
高效无纸化办公指南:轻量级看板工具
在推进无纸化办公的过程中,轻量级、使用成本低、入门快 的项目管理工具是企业实现数字化转型的有效途径之一。
257 7
高效无纸化办公指南:轻量级看板工具
|
8月前
|
缓存 JSON 数据格式
harbor2.0安装
harbor2.0安装过程和私有镜像上传
744 2
harbor2.0安装
|
搜索推荐 Java 数据库
基于springboot+vue网上图书商城(程序+数据库+文档)
基于springboot+vue网上图书商城(程序+数据库+文档)
|
存储 运维 定位技术
恢复点目标(Recovery Point Objective,简称RPO)
恢复点目标(Recovery Point Objective,简称RPO)
1597 3

热门文章

最新文章