机器学习训练营——机器学习爱好者的自由交流空间(入群联系qq:2279055353)

案例介绍

钢铁是现代工业最重要的建筑材料之一。钢铁企业对生产的钢铁进行缺陷检查,是保证钢铁产品质量的重要环节。
如今,钢铁企业使用高分辨率的平板钢铁图像,开发机器学习算法定位并分类钢铁表面的缺陷。

数据描述

本案例的任务是预测钢铁产品的缺陷类型和位置。钢铁的图像由唯一的ImageID标识。每张图像可以没有缺陷,一个类缺陷,多个类缺陷,你必须分割每个类的缺陷。ClassId = [1, 2, 3, 4], 每个缺陷类将编码为一个行向量。

文件

  • train_images

  • test_images

  • train.csv

数据探索

加载库

import numpy as np # linear algebra
import pandas as pd
pd.set_option("display.max_rows", 101)
import os
print(os.listdir("../input"))
import cv2
import json
import matplotlib.pyplot as pltplt.rcParams["font.size"] = 15
import seaborn as sns
from collections import Counter
from PIL import Image
import math
import seaborn as sns
from collections import defaultdict
from pathlib import Path
import cv2
from tqdm import tqdm

导入数据集

train_df = pd.read_csv("../input/train.csv")
train_df.head()


检查钢铁缺陷类的图片数。

class_dict = defaultdict(int)kind_class_dict = defaultdict(int)no_defects_num = 0
defects_num = 0for col in range(0, len(train_df), 4):img_names = [str(i).split("_")[0] for i in train_df.iloc[col:col+4, 0].values]if not (img_names[0] == img_names[1] == img_names[2] == img_names[3]):raise ValueErrorlabels = train_df.iloc[col:col+4, 1]if labels.isna().all():no_defects_num += 1else:defects_num += 1kind_class_dict[sum(labels.isna().values == False)] += 1for idx, label in enumerate(labels.isna().values.tolist()):if label == False:class_dict[idx+1] += 1
print("the number of images with on defects: {}".format(no_defects_num))
print("the number of images with defects: {}".format(defects_num))

the number of images with no defects: 5902

the number of images with defects: 6666

fig, ax = plt.subplots()
sns.barplot(x=list(class_dict.keys()), y=list(class_dict.values()), ax=ax)
ax.set_title("the number of images for each class")
ax.set_xlabel("class")
class_dict

defaultdict(int, {1: 897, 3: 5150, 4: 801, 2: 247})


从上图可以看出:缺陷类是不平衡的。我们再看一看每张图像有多少个类?

fig, ax = plt.subplots()
sns.barplot(x=list(kind_class_dict.keys()), y=list(kind_class_dict.values()), ax=ax)
ax.set_title("Number of classes included in each image");
ax.set_xlabel("number of classes in the image")
kind_class_dict

defaultdict(int, {1: 6239, 0: 5902, 2: 425, 3: 2})

检查图像数据

图像大小

train_size_dict = defaultdict(int)
train_path = Path("../input/train_images/")for img_name in train_path.iterdir():img = Image.open(img_name)train_size_dict[img.size] += 1train_size_dict

defaultdict(int, {(1600, 256): 12568})

同样的,也可以得到检验集的图像大小。

defaultdict(int, {(1600, 256): 1801})

所有的图像都有相同的大小: (1600, 256)

设定类的颜色

我们想用不同的颜色分隔出不同的缺陷类。那么,就要设定不同的分隔颜色。

palet = [(249, 192, 12), (0, 185, 241), (114, 0, 218), (249,50,12)]def name_and_mask(start_idx):col = start_idximg_names = [str(i).split("_")[0] for i in train_df.iloc[col:col+4, 0].values]if not (img_names[0] == img_names[1] == img_names[2] == img_names[3]):raise ValueErrorlabels = train_df.iloc[col:col+4, 1]mask = np.zeros((256, 1600, 4), dtype=np.uint8)for idx, label in enumerate(labels.values):if label is not np.nan:mask_label = np.zeros(1600*256, dtype=np.uint8)label = label.split(" ")positions = map(int, label[0::2])length = map(int, label[1::2])for pos, le in zip(positions, length):mask_label[pos-1:pos+le-1] = 1mask[:, :, idx] = mask_label.reshape(256, 1600, order='F')return img_names[0], maskdef show_mask_image(col):name, mask = name_and_mask(col)img = cv2.imread(str(train_path / name))fig, ax = plt.subplots(figsize=(15, 15))for ch in range(4):contours, _ = cv2.findContours(mask[:, :, ch], cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)for i in range(0, len(contours)):cv2.polylines(img, contours[i], True, palet[ch], 2)ax.set_title(name)ax.imshow(img)plt.show()fig, ax = plt.subplots(1, 4, figsize=(15, 5))
for i in range(4):ax[i].axis('off')ax[i].imshow(np.ones((50, 50, 3), dtype=np.uint8) * palet[i])ax[i].set_title("class color: {}".format(i+1))
fig.suptitle("each class colors")plt.show()

不同缺陷类型的钢铁图像

无缺陷的图像

for idx in idx_no_defect[:5]:show_mask_image(idx)

1-型缺陷类

for idx in idx_class_1[:5]:show_mask_image(idx)

2-型缺陷类

for idx in idx_class_1[:5]:show_mask_image(idx)

3-型缺陷类

for idx in idx_class_1[:5]:show_mask_image(idx)

4-型缺陷类

for idx in idx_class_1[:5]:show_mask_image(idx)

多型缺陷类

for idx in idx_class_1[:5]:show_mask_image(idx)

未完待续

【钢铁缺陷检测算法】数据探索相关推荐

  1. 论文研究 | 基于机器视觉的 PCB 缺陷检测算法研究现状及展望

    前面分享了机器视觉在汽车行业与交通行业的应用,其实机器视觉在工业上的应用是最广泛也是最具挑战性的,其中PCB板缺陷检测一直是机器视觉待攻克的难题.印刷电路板(PCB)是电子零件的基板,需求量极大,承载 ...

  2. Spark数据挖掘-基于 K 均值聚类的网络流量异常检测(1): 数据探索、模型初探

    Spark数据挖掘-基于 K 均值聚类的网络流量异常检测(1): 数据探索.模型初探 1 前言 分类和回归是强大易学的机器学习技术.需要注意的是:为了对新的样本预测未知的值, 必须从大量已知目标值的样 ...

  3. 基于PP-PicoDet的钢铁缺陷检测

    基于PP-PicoDet的钢铁缺陷检测 1.背景介绍 近年来,AI视觉检测在安防.工业制造等产业智能化升级进程中发挥着举足轻重的作用. 自动检查和缺陷检测系统使用 AI 来检查零部件的故障和缺陷.通过 ...

  4. 基于飞桨PP-PicoDet的钢铁缺陷检测

    基于飞桨PP-PicoDet的钢铁缺陷检测 1.背景介绍 自动检查和缺陷检测系统使用 AI 来检查零部件的故障和缺陷.通过这种方法,制造厂能够自动检测成品表面的缺陷,该方法广泛应用于金属.半导体晶圆和 ...

  5. 中科院张士峰:基于深度学习的通用物体检测算法对比探索

    https://www.toutiao.com/a6674792954369933838/ 人工智能论坛如今浩如烟海,有硬货.有干货的讲座却百里挑一.由中国科学院大学主办,中国科学院大学学生会承办,读 ...

  6. 数字图像处理——隐形眼镜缺陷检测算法

    数字图像处理--隐形眼镜缺陷检测算法 摘 要:本文致力于寻找出一种具有较强鲁棒性的检测隐形眼镜边缘缺陷的方法.本文针对图像中物体几何形状的特殊性,提出了一种基于霍夫变换的缺陷检测算法,并在低噪声图像的 ...

  7. 液晶屏问题诊断:液晶屏缺陷检测算法总结

    随着液晶显示技术的不断发展,液晶屏幕已经成为了各种电子设备中最为常见的显示屏幕类型之一.然而,由于长时间使用.意外撞击等原因,液晶屏幕可能会出现各种缺陷,例如亮点.暗点.白线.黑线等,这些问题都会严重 ...

  8. 缺陷检测算法matlab,MATLAB 基于模板匹配的玻璃瓶口缺陷检测

    算法步骤: 1.分别在模板图像与待检测图像中定位瓶口,并且去除干扰点. 2.调整去除干扰后的瓶口图像的大小,使模板图像与待检测图像大小保持一致. 3.用模板图像减去待检测图像,并进行联通域分析,获得面 ...

  9. 基于halcon的木板缺陷检测算法代码-基于halcon的区域增长、大津分割算法、直方图均衡化

    关键词:Halcon:图像处理:视觉检测:木板缺陷检测:特征提取 对于木条.木板等木制品表观缺陷检测,是机器视觉检测在工业中的一个主要应用,而在这其中节子的提取和检测又是一项重要的品控检测指标,本文以 ...

  10. 缺陷检测算法汇总(传统+深度学习方式)|综述、源码

    作者丨Tom Hardy@知乎 来源丨https://zhuanlan.zhihu.com/p/305087419 编辑丨3D视觉工坊 文献资料汇总 https://github.com/Eatzhy ...

最新文章

  1. 如何用Python批量提取PDF文本内容?
  2. 【Java】面向对象编程语法知识点总结
  3. 导师(老板)推荐的学术前沿号
  4. Win7在IIS7中启用CGI
  5. JavaWeb中验证码校验的功能实现
  6. Scala集合与Java集合的对比
  7. PAT (Basic Level) Practice (中文)1009 说反话 (20 分)
  8. STM32很难?这些工具可以帮大忙!
  9. Java中四种访问权限总结
  10. 深入理解Linux内核链表
  11. 未来两年我们即将要读的Python书!
  12. 通过数据扩充来扩展数据集
  13. 分布式事务之TCC服务设计和实现注意事项!
  14. css的list,CSS List 入门教程
  15. FISCO BCOS 智能合约库 应用
  16. java学习电子书_Java学习指南(第4版)(上册) 中文完整pdf扫描版[179MB]
  17. 毕业论文排版(六)-三线表
  18. 浅谈智慧校园建设中存在的问题及解决方案
  19. Python期末考试
  20. vnc远程软件,四款值得使用的vnc远程软件推荐

热门文章

  1. C# Thread多线程学习
  2. c2065c语言错误,C语言常见错误
  3. OSPF高级特性(华为设备)
  4. LVS调度算法权威讲解——官方文档翻译
  5. MySQL 第五次练习(MySQL备份恢复)
  6. kickstart技术安装操作系统
  7. VC2005中将Picture控件显示图片保存为BMP,JPG等格式
  8. ​老男孩教育每日一题-第73天 -基础命令点:可恶的^C
  9. 2.《Spring学习笔记-MVC》系列文章,讲解返回json数据的文章共有3篇,分别为:...
  10. linux ssh免密码登录设置