社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  aigc

送书 | AIGC实战工业缺陷检测:从原理到代码

OpenCV学堂 • 1 月前 • 55 次点击  
相比于 AIGC 在传感技术中的应用显得较为严谨和技术性,AIGC 技术在视觉中的应用可以说是充满了活力和创造力。

AIGC 在视觉中的应用不仅限于传统的图像处理和识别,还包括自动生成视觉内容图像修复与增强虚拟现实与增强现实的视觉体验等多个方面。

下面通过案例分析揭示 AIGC 如何在提高生产效率、增强系统可靠性和改善用户体验方面发挥关键作用。

1. 案例描述

在木制品加工厂中,原材料木料的质量直接影响最终产品的外观和品质(图 1 为正常的木料与异常木料的对比展示图)。传统的木料缺陷检测通常依赖人工检查,不仅效率低下,而且容易受到人为主观因素的影响。

图片图1  正常木料与异常木料对比展示图

通过引入 AI 技术,可以让机器自动检测和识别木料中的缺陷,从而大幅提高检测效率和准确性,确保生产出高质量的木制品。对异常木料进行检测并标记其中缺陷,如图 2 所示。

图片图2  异常位置mask展示图

在众多数据中挑选示例图时,笔者起初也忽略了图 1 中的部分异常,这表明人工检查的方式仍然存在一定的弊端。

然而,AI 技术引入时需要大量高质量的数据进行模型训练,而获取足够的缺陷样本数据常常是一大难题。在实际生产过程中,很多工艺的良率可以达到 99% 甚至是 99.9%,因此要采集几百条甚至是上千条负样本数据是十分困难的,甚至在一些领域中几乎无法实现。

这一瓶颈限制了 AI 模型的检测性能,因为在缺少多样化缺陷数据的情况下,模型难以全面学习和识别各种可能的缺陷类型。

此处简单 AI 模型实际上是指一个效果一般甚至不太理想、无法投入应用的模型,在 AI 专业术语中泛指欠拟合的模型。

本案例中已经训练一个简单 AI 模型所需要的数据集的详细信息,使用开源数据集 mvtec。

在上述背景下,AIGC 技术的引入显得尤为重要。AIGC 技术能够通过结合最相关的特定技术手段来生成逼真的缺陷图像,丰富训练数据集,从而提升 AI 模型的检测性能。如图 3 所示,这是通过正样本生成带缺陷的负样本结果实例图。

图片图3  通过正样本生成带缺陷负样本结果实例图

此外,AIGC 系统还可以接收操作人员的直接需求,从而进一步提高检测的可靠性和准确性。例如,操作人员可以通过简单的语言指令,让系统自动生成特定类型的缺陷图像或调整模型参数,减少对专业知识的依赖。

通过结合 AI 模型和 AIGC 技术,木料缺陷检测不仅能够实现更高的自动化水平,还能显著降低操作人员的介入需求。这种智能化的检测系统能够快速、准确地识别木料中的缺陷,确保生产过程中的每一块木料都达到高质量标准,从而提升最终产品的品质和市场竞争力。

2. 核心功能 / 需求描述

前面已经详细介绍过人机交互以及通过对话提取需求的原理与实现方式,且此案例将会直接基于前面的内容进行方案设计,因此在此案例中不再详细介绍人机交互功能和需求提取的部分,而是重点介绍 AIGC 在机器视觉中的其他重要应用功能。

(1)图像生成

图像生成在视觉领域中有着比较广泛的应用,将其基于使用场景进行分类可以大体分为以下两类:

  • 缺陷图像生成

该应用是指利用 AIGC 技术自动生成逼真的缺陷图像。通过模拟真实缺陷,如划痕、污渍和裂纹等,生成多样化的缺陷数据,丰富训练数据集,使 AI 模型能够更全面地学习和识别各种缺陷,从而显著提升检测的准确性和性能。这一过程不仅减少了模型训练时对大量真实缺陷样本的依赖,还提高了模型在实际应用中的可靠性和有效性。这一类应用的技术核心是生成式对抗网络。

  • 基于需求的图像生成

该应用是指利用生成式模型,根据用户输入的需求或描述,自动生成相应图像。其关键在于理解用户的需求,并将其转换为具体的视觉表现。其中涉及的技术核心有两点:生成式模型(包括生成式对抗网络)自然语言处理技术

此处自然语言处理技术需要实现的不仅仅是从用户语言中直接获取需求,还包括将需求转换为机器(或者系统)可以直接理解、执行的指令。

(2)图像质量评估与修复

图像质量评估与修复的工作原理包括两个主要方面:图像质量评估图像修复

  • 图像质量评估通过深度学习模型或者计算机视觉算法来自动分析图像的清晰度、颜色准确性、对比度等质量指标,并根据预设的标准对图像进行打分,指出诸如模糊、噪点或失真等缺陷。

  • 图像修复技术会通过进一步的深度学习算法(如卷积神经网络或生成式对抗网络)来识别图像中的具体缺陷,并对其进行修复,以恢复图像的清晰度和色彩。这种应用在工业中还用于修复图像数据采集设备中的失焦、模糊、色彩失真以及进行超分辨处理,以显著提升图像的清晰度和细节展现能力。

缺陷图像生成、基于需求的图像生成以及图像质量评估与修复这三个功能,从技术实现方案的角度理解,是同一个功能下面的三个子功能,相互之间既有一定的相似之处,也有区别。

3. 方案概述

直接根据前面拆解的核心功能 / 需求进行设计。整个方案的拓扑图如图 4 所示。

图片图4  方案拓扑图

该方案的要点如下:

①整个案例的核心是一个 AIGC 云服务,即图 4 中的 AIGC 主服务。这一服务在整个系统中扮演着关键角色。

②所有功能模块按照两级结构进行组织。一级功能模块由主服务进行集中调度,而二级功能模块则直接为相应的一级功能模块提供服务。

③如果后续需要扩展其他非标准需求,可以直接在 AIGC 主服务上进行扩展。

2. 人机交互

AIGC 在机器视觉领域中的应用,与 AIGC 在传感技术中的应用形式有所不同。这里的视觉应用主要涉及人机交互,强调感官体验等主观、抽象需求,与数据采集、设备状态监控等具体任务的关联较少。

相比之下,AIGC 结合传感器的案例更注重于具体的传感技术应用和设备状态监测。也就是说,本案例的特点在于其需求更为主观和抽象,旨在提升用户的感官体验和交互质量。

在视觉领域中应用 AIGC 相关技术或 AIGC 系统时,从用户需求的角度来看,人机交互功能显得尤为重要。原因在于不同用户的主观思维和感官体验各不相同。具体来说,在设计术语库(或知识库)的过程中,不仅需要结合行业的专业知识,还需特别关注与感官体验和主观思维相关的内容。例如,对于同样的需求 让图像更清晰一点,不同用户可能会有不同的理解和期望,有的可能希望 让图像更亮一点,而有的则可能希望 提高图像对比度。这就要求系统能够灵活地捕捉和理解用户的具体需求,并进行相应的调整,以提供符合用户期望的结果。

这种区别反映了 AIGC 技术在不同领域和应用场景中的灵活应用能力,既能应对具体的技术挑战,也能支持更为抽象和感性的用户需求。

在视觉应用场景中,即使面对同一数据(如图 3 所示的实例图),不同的需求方可能会有截然不同的要求。有些需求方可能选择忽略图像中的某些缺陷,而有些则会严格要求所有缺陷都被检测出来。然而,在技术实现层面,最基础的缺陷检测模型会始终尝试检测出所有的缺陷。

因此,当需求方需要忽略某些缺陷时,就需要依赖人机交互功能来捕捉到这一需求,并调整整个系统的行为。这包括在最终呈现给用户的图像结果中进行过滤,将被要求忽略的缺陷类型从中去除。

在工业中有时候会把上面描述的 过滤 功能称为 卡控

在实际操作中,本案例依托 AIGC 主服务来支持各种非标准需求的拓展。这意味着如果未来需要引入新的功能或调整现有功能以满足不同的视觉应用场景,则可以直接在 AIGC 主服务基础上进行扩展和优化。这种灵活性不仅能够满足用户日益多样化的需求,还有助于提升系统的整体可扩展性和适应性。

下面截取一个知识库的部分内容进行展示。其中技术实现、映射操作被转换成了文本描述(实际系统中的实现方式要参考知识库的构建方式,另外单独介绍)。下面示例中这两个位置对应系统中相关的代码接口。

[
    {        "需求分类""清晰度提升",        "用户描述": ["让图像更清晰一点""提升图像清晰度"],         "技术实现""应用超分辨率技术提高图像分辨率",        "映射操作""调用超分辨率模型"    },    {        "需求分类""亮度调整",        "用户描述": ["让图像更亮一点""增加亮度"],        "技术实现""调整图像亮度曲线",        "映射操作""应用亮度增强算法"    },    {         "需求分类""对比度增强",        "用户描述": ["提高图像对比度""增加对比度"],        "技术实现""应用对比度增强技术",        "映射操作""调整图像对比度参数"    }]

4. 缺陷图像生成

通过生成带有各种缺陷(如划痕、污渍、裂纹等)的图像来增强训练数据集,使 AI 模型能够更全面地学习和识别不同类型的缺陷。生成式对抗网络是实现这一功能的关键技术。

下面实现一个常规的生成式对抗网络代码,用于学习正常样本知识和缺陷知识,从而生成逼真的假缺陷样本图像(此处仅展示部分训练的逻辑代码)。




    
ansform = transforms.Compose([
    transforms.Resize(image_size),    transforms.CenterCrop(image_size),    transforms.ToTensor(),    transforms.Normalize((0.5,), (0.5,))])dataset = dsets.CIFAR10(root='./data', download=True, transform=transform)dataloader = DataLoader(dataset, batch_size=batch_size, shuffle=True)# 初始化模型和优化器device = torch.device("cuda"if torch.cuda.is_available() else"cpu")netG = Generator().to(device)netD = Discriminator().to(device)criterion = nn.BCELoss()optimizerD = optim.Adam(netD.parameters(), lr=0.0002, betas=(0.5, 0.999))optimizerG = optim.Adam(netG.parameters(), lr=0.0002, betas=(0.5, 0.999))# 训练循环for epoch in range(num_epochs):    for  i, data in enumerate(dataloader, 0):        ############################        # (1) 更新判别器        ###########################        netD.zero_grad()        real_images = data[0].to(device)        batch_size = real_images.size(0)        labels = torch.full((batch_size,), 1, dtype=torch.float, device=device)        output = netD(real_images).view(-1)        lossD_real = criterion(output, labels)        lossD_real.backward()        D_x = output.mean().item()        noise = torch.randn(batch_size, nz, 1, 1, device=device)        fake_images = netG(noise)        labels.fill_(0)        output = netD(fake_images.detach()).view(-1)        lossD_fake = criterion(output, labels)        lossD_fake.backward()        D_G_z1 = output.mean().item()        lossD = lossD_real + lossD_fake        optimizerD.step()        ############################        # (2) 更新生成器        ###########################        netG.zero_grad()        labels.fill_(1)        output = netD(fake_images).view(-1)        lossG = criterion(output, labels)        lossG.backward()         D_G_z2 = output.mean().item()        optimizerG.step()        # 打印日志        if i % 50 == 0:            print(f'Epoch [{epoch+1}/{num_epochs}] Batch {i}/{len(dataloader)} Loss D: {lossD.item()}, Loss G: {lossG.item()} D(x): {D_x}, D(G(z)): {D_G_z1} / {D_G_z2}')        # 保存模型    if (epoch + 1) % 5 == 0:        torch.save(netG.state_dict(), f'generator_epoch_{epoch+1}.pth')        torch.save(netD.state_dict(), f'discriminator_epoch_{epoch+1}.pth')

在使用生成式对抗网络生成缺陷图像时,训练过程通常需要较长时间。因此,为了提升系统的使用体验,常常采用离线学习机制。

通常的做法是在系统工作期间积累数据,在非工作时间利用这些数据自动学习。这种方法可以显著提高系统性能和用户体验。特别是,如果系统部署在硬件资源充足的环境中,则可以实现实时自动学习,从而进一步优化系统的性能和用户体验。

5. 基于需求的图像生成

基于需求的图像生成功能要根据用户特定要求生成定制化图像,这一任务可以借助多种技术方法实现。生成式对抗网络是其中一种主流的实现技术,它能够生成逼真的图像,但并不能满足所有的需求,比如图像增强或对比度调整等特定要求。

因此,基于需求的图像生成功能在实现过程中除了生成式对抗网络以外,还需要用其他的技术来满足特定的需求,包括但不限于以下几种。

(1)图像增强

图像增强通过调整图像的亮度、对比度、饱和度等参数来提升图像的视觉质量。例如,直方图均衡化能够增强图像的整体对比度,而自适应对比度增强则可保持局部细节和对比度的平衡,适用于各种光照条件下的图像。

如图 5 所示,这是对一张木料图分别进行亮度增强、直方均衡化后的效果展示图。

图片图 5 图像增强效果实例图

(2)图像超分辨率

图像超分辨率技术旨在从低分辨率图像中恢复高质量的细节和清晰度,使其接近甚至超越原始高分辨率图像的效果。超分辨率生成对抗网络和卷积神经网络是常用的方法,能够有效提升图像在放大后的视觉质量,适用于提高图像细节的需求场景。

如图 6 所示,这是对一张木料图进行超分辨率技术处理后的实例图。左侧原图分辨率为1024 × 1024 ,右侧通过超分辨率技术将图像放大 4 倍后的分辨率为4096 × 4096。

图片图 6 图像超分辨率技术处理实例图

(3)去噪和修复

去噪技术用于消除图像中的噪点和瑕疵,恢复图像的原始质量和清晰度。卷积神经网络和自编码器是常见的工具,能够识别并移除图像中的噪声,使得图像更加干净和真实,适用于需要高质量视觉表现的应用场景。

如图 7 所示,这是对一张正常的木料图进行人为噪声引入,然后分别使用高斯滤波去噪和中值滤波去噪的结果实例图。

图片图 7  像去噪实例图

以下代码示例展示了如何将图像增强、图像超分辨率、去噪和修复这三种功能与自然语言处理技术相结合,实现 AIGC 功能(由于代码过长,因此每个具体功能(算法)的实现代码已被省略)。

import cv2
from transformers import pipeline# 提取用户意图和子功能def extract_user_intent_and_sub_option(user_input):    nlp = pipeline("zero-shot-classification", model="facebook/bart-large-mnli")    labels = ["图像增强" "图像超分辨""去噪""修复"]    result = nlp(user_input, labels)    intent = result['labels'][0]    # 提取子功能    sub_option = None    if intent == "图像增强":        sub_labels = ["直方图均衡化""对比度增强""亮度增强"]        sub_result = nlp(user_input, sub_labels)        sub_option = sub_result['labels'][0]    return intent, sub_option# 图像增强def enhance_image(image, sub_option):     print("二级需求为: ")    if sub_option == "直方图均衡化":        # 使用直方图均衡化进行图像增强(详细代码省略)        print("使用直方图均衡化")    elif sub_option == "对比度增强":        # 对比度增强(详细代码省略)        print("使用对比度增强")    elif sub_option == "亮度增强" :        # 亮度增强(详细代码省略)        print("使用亮度增强")    return image# 超分辨def super_resolution(image):    # 使用超分辨率模型(详细代码省略)    print("使用超分辨率")    return image# 去噪和修复def denoise_and_repair(image):    # 降噪(详细代码省略)    print("使用去噪和修复")     return image# 任务调度def aigc_system(user_input, image):    intent, sub_option = extract_user_intent_and_sub_option(user_input)    print(f"获取到一级需求: {intent}")    if intent == "图像增强":        return enhance_image(image, sub_option)    elif intent == "图像超分辨":        return super_resolution(image)    elif intent == "去噪" or intent == "修复":         return denoise_and_repair(image)    else:        raise ValueError("无法识别的需求")# 示例用户输入和图像user_input = "请帮我增强图像对比度"image = cv2.imread("image.png", cv2.IMREAD_GRAYSCALE) output_image = aigc_system(user_input, image)

在这个案例代码的实现过程中,核心的功能在函数 extract_user_intent_and_sub_option() 中实现。

①首先加载零样本分类模型 facebook/bart-large-mnli。该模型由 Meta 的 AI 研究团队开发,基于 BART 模型,能够在不进行特定任务训练的情况下,通过上下文理解实现新输入的分类。

②定义标签列表 labels,代表系统支持的主要功能(即一级功能)。

③使用步骤①中的模型将用户的输入与标签列表 labels 进行匹配,选择得分最高的标签作为系统提取到的用户意图(即一级功能)。

④如果系统获取到用户期望的一级功能是“图像增强”,那么再用上述同样的方式获取详细的用户对子功能实现的需求。

例如:用户输入对话文本我  觉 ** 图像对比度有点低,你帮我增强一下图像吧 ,系统获取到的一级功能需求为图像增强,二级需求为使用对比度增强

注意:AIGC 融合传感器的案例实现完全基于检索式对话系统的方式,而 AIGC 在机器视觉场景中的应用由于涉及较多的用户主观感受,因此无法完全依赖检索式对话系统进行用户需求的直接提取。


AIGC 在传感器领域的应用,以及 AIGC 结合各工业领域的原理与案例,包括 算法选择模型训练系统集成 各个环节等,请关注 《AIGC驱动工业智能设备》

10年+ 智能算法专家,针对真实的工业场景,高效构建可落地的 AIGC 工业系统。

图片

图片
图片

福利时间 
留言就有机会获取新书
在本文下方留言, 至下周一(4月28日晚22:00) 
点赞数 前三 粉丝 免费送新书一本。



图片

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/181457
 
55 次点击