【超简单】之基于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进行可视化训练记录


目录
相关文章
|
7月前
|
机器学习/深度学习 编解码 API
深度学习+不良身体姿势检测+警报系统+代码+部署(姿态识别矫正系统)
深度学习+不良身体姿势检测+警报系统+代码+部署(姿态识别矫正系统)
|
机器学习/深度学习 人工智能 TensorFlow
检测脸部情绪有多难?10行代码就可以搞定!
检测脸部情绪有多难?10行代码就可以搞定!
|
7月前
|
机器学习/深度学习 算法 前端开发
高速公路表面图像裂缝检测程序
高速公路表面图像裂缝检测程序
100 2
|
机器学习/深度学习 人工智能 TensorFlow
用10行代码检测脸部情绪
用10行代码检测脸部情绪
用10行代码检测脸部情绪
|
机器学习/深度学习 编解码 算法
检测并消除瑕疵,DeSRA让真实场景超分中的GAN更加完美
检测并消除瑕疵,DeSRA让真实场景超分中的GAN更加完美
356 0
|
自动驾驶 算法 Python
车道线识别(附代码)
车道线识别(附代码)
车道线识别(附代码)
|
机器学习/深度学习 自然语言处理 算法
m基于CNN卷积网络和GEI步态能量图的步态识别算法MATLAB仿真,测试样本采用现实拍摄的场景进行测试,带GUI界面
m基于CNN卷积网络和GEI步态能量图的步态识别算法MATLAB仿真,测试样本采用现实拍摄的场景进行测试,带GUI界面
157 0
m基于CNN卷积网络和GEI步态能量图的步态识别算法MATLAB仿真,测试样本采用现实拍摄的场景进行测试,带GUI界面
|
算法 编译器
使用matlab机器视觉工具箱实现人脸特征的检测和定位,识别并标注眉毛,眼睛,鼻子,嘴巴
使用matlab机器视觉工具箱实现人脸特征的检测和定位,识别并标注眉毛,眼睛,鼻子,嘴巴
385 0
使用matlab机器视觉工具箱实现人脸特征的检测和定位,识别并标注眉毛,眼睛,鼻子,嘴巴
|
编解码 vr&ar 计算机视觉
CenterNet++ | CenterNet携手CornerNet终于杀回来了,实时高精度检测值得拥有!(二)
CenterNet++ | CenterNet携手CornerNet终于杀回来了,实时高精度检测值得拥有!(二)
226 0
|
机器学习/深度学习 编解码 算法
CenterNet++ | CenterNet携手CornerNet终于杀回来了,实时高精度检测值得拥有!(一)
CenterNet++ | CenterNet携手CornerNet终于杀回来了,实时高精度检测值得拥有!(一)
188 0

热门文章

最新文章