赞
踩
随着工业生产规模的不断扩大和技术进步,工业品的质量要求越来越高。然而,在工业生产过程中,由于人为操作、设备故障或原材料问题等原因,工业品往往会出现一些缺陷。这些缺陷包括但不限于裂痕、变形、颜色不符合标准、表面不光滑等。如果这些工业品没有及时发现并处理,可能会导致产品质量下降、客户投诉增加甚至造成安全隐患。 传统的缺陷检测方法通常依赖于人工目视检查,这种方法费时费力且容易出错,也无法满足高效率、高精度的缺陷检测需求。因此,利用计算机视觉和图像处理技术来开展工业品缺陷检测具有重要意义。通过建立智能检测系统,可以实现对工业品进行自动化、快速、准确的检测,大大提高了生产效率和产品质量。 基于深度学习和机器学习算法的工业品缺陷检测系统在近年来取得了显著的进展。这些算法可以通过训练模型来学习工业品的正常状态和各种缺陷类型,从而能够自动地对工业品进行分类和检测。通过结合高分辨率图像采集设备、先进的图像处理算法和高性能计算平台,可以实现对工业品缺陷的高效、准确检测,大大提高了生产线的质量控制水平。 因此,开展工业品缺陷检测项目具有重要的现实意义和市场需求。通过引入先进的技术手段,可以有效解决工业品缺陷问题,提高产品质量和竞争力,满足市场对高质量工业品的需求。综合使用计算机技术、网络技术,使用Vue,WTML,JavaScript,Flask,TensorFlow等技术栈构建一个基于Web的AI检测服务。
项目github网址
工业品检测系统是针对具体的一个工业品组装生产线设计的,主要实现以下目标:
项目对时间进度的要求苛刻,建议在系统架构设计时尽量熟悉系统开发过程的目的和特点,使得架构具有一定的适应性和灵活性,可以先完成核心架构和基本功能,满足进度要求,后期再进行必要的改进和完善。
产品名称:轻检系统
应交付文档:
《轻检系统项目计划书》
《轻检系统概要设计方案》
《轻检系统需求分析说明书》
《轻检系统技术实现方案》
《轻检系统测试文档》
《轻检系统用户使用说明书》
《轻检系统项目结题书》
应交付代码:
Web前端代码;微信小程序前端代码;后端代码以及模型算法代码;相关配置文件
Web端需要提供:单张图片上传,后端提供检测服务,前端显示检测结果,推理时间以及置信度;多张图片以压缩包形式上传,然后提示用户输入邮箱,后端将检测结果,推理时间以及置信度以邮件的形式发送至邮箱。
Web端服务流程图如下:
微信小程序端需要提供:单张图片上传,后端提供检测服务,前端显示检测结果,推理时间以及置信度;单张图片手机拍照上传,后端提供检测服务,前端显示检测结果,推理时间以及置信度。
微信小程序端服务流程图如下:
针对于最开始的需求设计,针对不同模块我们对应不同的模块进行了增量式开发。
针对最开始的需求设计,我们使用了敏捷开发,敏捷开发是一种软件开发的流程,强调快速反应、快速迭代、价值驱动。敏捷开发的核心是“个体与交互”胜过“过程与工具”、“可以工作的软件”胜过“面面俱到的文档”、“客户协作”胜过“合同谈判”、“响应变化”胜过“遵循计划”。敏捷开发适用于竞争激烈,快速变化的市场和需求。敏捷开发的优势有:提高了软件产品的质量和客户满意度,因为客户可以及时参与到产品的验收和体验中,提出意见和建议。提高了开发团队的效率和协作能力,因为每个成员都有明确的职责和目标,可以自我管理和调整工作方式。提高了软件产品的适应性和灵活性,因为敏捷开发可以快速响应需求变化,进行迭代和试错。考虑时间关系,敏捷开发再为合适不过。
系统总体设计图如下:
Vue是一种流行的JavaScript前端框架,用于构建用户界面。它是一个开源项目,由尤雨溪(Evan You)创建并维护。
Vue的设计目标是提供一种简单、灵活和高效的方式来构建交互式的Web界面。它采用了组件化的开发模式,允许开发者将界面拆分为独立的可重用组件。每个组件都有自己的逻辑和状态,并可以通过组合这些组件来构建复杂的应用程序。
Vue使用了虚拟DOM (Virtual DOM) 技术来优化性能。当数据发生变化时,Vue会计算出与当前DOM状态的差异,并只更新需要改变的部分,而不是重新渲染整个页面。这使得Vue在处理大规模数据和频繁更新的情况下表现出色。
Vue还提供了响应式数据绑定机制,即数据的变化可以自动反映在界面上,使得开发者无需手动操作DOM。此外,Vue还支持指令系统,通过指令可以对DOM进行操作和控制。
Vue的学习曲线相对较低,文档详细且易于理解,使得初学者也能够迅速上手。同时,Vue具有庞大的社区支持和丰富的插件生态系统,为开发者提供了丰富的资源和工具。
TensorFlow 2和Keras是两个与深度学习相关的Python库。
TensorFlow 2是Google开发的开源机器学习框架,它提供了一种灵活且高效的方式来构建和训练各种机器学习模型。相对于早期版本的TensorFlow,TensorFlow 2更加易用且用户友好。TensorFlow 2采用了Eager Execution模式,使得代码编写更加直观,并且提供了大量高级API,使开发者能够快速构建深度学习模型。此外,TensorFlow 2还增加了许多新功能,如动态图计算、模型序列化和可部署性的改进等。它支持多种硬件设备(如CPU、GPU和TPU)以及分布式计算,可以处理从小规模实验到大规模生产环境的需求。
Keras是一个高级神经网络API,最初是作为独立库开发的,后来被整合到TensorFlow中。它专注于简化深度学习模型的构建过程,提供了一组简洁而直观的接口,使得使用者可以轻松地定义、训练和评估神经网络模型。Keras具有可扩展性强、模块化设计和易用性等优点,适用于各种任务,包括图像分类、文本处理和序列生成等。在TensorFlow 2中,Keras被作为其官方的高级API,成为了构建深度学习模型的主要工具。
总结而言,TensorFlow 2是一个功能强大的机器学习框架,而Keras则提供了简洁易用的接口来构建深度学习模型。由于它们的紧密结合,用户在使用TensorFlow 2时可以自由选择使用原生TensorFlow API或者更简单的Keras API来构建自己的模型。
TensorFlow 在工业界受欢迎的原因有以下几点:
广泛的支持和社区: TensorFlow 是由 Google 开发并维护的,得到了大型公司和机构的广泛支持。它拥有庞大而活跃的开发者社区,提供了丰富的文档、教程、示例代码和预训练模型等资源,使得使用者可以轻松获取帮助和分享经验。
灵活性和可扩展性: TensorFlow 提供了强大的灵活性和可扩展性,适用于各种规模的任务和需求。它支持多种硬件设备(如 CPU、GPU 和 TPU),以及分布式计算,能够处理大规模数据和复杂模型的训练和推理。此外,TensorFlow 支持多种编程语言接口,包括 Python、C++ 和 Java,使得开发者可以根据自己的偏好选择合适的编程语言。
生态系统和部署能力: TensorFlow 提供了丰富的工具和库,构建了一个完整的深度学习生态系统。例如,TensorFlow Hub 提供了大量的预训练模型和模型组件,方便开发者快速搭建模型;TensorBoard 可以可视化模型训练过程和性能指标;TensorFlow Serving 和 TensorFlow Lite 等工具支持模型的部署和移植到生产环境。这些工具和库提供了综合而完善的解决方案,满足了工业界对于深度学习模型开发和部署的需求。
产业应用和成功案例: TensorFlow 在工业界有许多成功的应用案例,被广泛应用于各个领域,如图像识别、自然语言处理、语音识别、推荐系统等。许多大型公司和组织都在使用 TensorFlow 进行创新研究和产品开发,使得 TensorFlow 成为业界的首选之一。
尽管 TensorFlow 在工业界拥有广泛的应用和支持,但也要根据具体需求选择合适的工具。近年来,PyTorch 也获得了很大的关注和增长,成为另一个备受青睐的深度学习框架,特别在学术界和研究领域有较高的使用率。
针对我们这一项目,我们最后决定选用Tensorflow中的keras来搭建训练模型。
keras库中的keras.applications模块提供了预训练模型,具有以下优点:
高性能:预训练模型经过大规模的训练,在广泛的数据集上表现出色。这些模型已经学会了从图像中提取有用的特征,可以用于各种计算机视觉任务,如图像分类、目标检测和图像生成等。
节省时间和资源:使用预训练模型可以避免从头开始训练深度神经网络所需的大量时间和计算资源。这些模型已经在强大的硬件设备上进行了训练,并且经过了仔细的调优,因此可以立即应用于下游任务中。
迁移学习:预训练模型提供了迁移学习的便利。你可以使用这些模型作为基础,并通过微调或添加自定义层来适应你的具体任务。通过在预训练模型的基础上进行微调,你可以在较少的训练样本上获得更好的性能。
广泛的应用领域:Keras库中的预训练模型适用于各种计算机视觉任务和领域。无论是图像分类、目标检测、图像分割还是图像生成,你都可以从这些模型中选择适合新任务的模型。
社区支持和文档丰富:由于这些预训练模型的受欢迎程度,可以轻松地找到大量的教程、示例代码和文档资源。Keras社区非常活跃,可以与其他开发人员交流经验并获得支持。
综上所述,Keras库中的keras.applications模块中的预训练模型具有高性能、节省时间和资源、适用于迁移学习、广泛的应用领域以及丰富的社区支持等优点,使其成为计算机视觉任务中强有力的工具。
根据工业品缺陷类型,将数据分为七类:合格、图片缺角、不合格(缺一螺丝)、不合格(缺对角两螺丝)、不合格(缺临边两螺丝)、不合格(缺三螺丝)、不合格(缺四螺丝)
将数据按照8:2的比例分为训练集和测试集,为了确保每个类别在训练集和测试集中都出现过,所以先随机划分原始图片,再进行数据增强。
数据增强前,每一类别下的数据数量如下:
数据增强是指通过对原始数据进行一系列变换和扩充,生成新的训练样本,以增加训练数据的多样性和数量。这种技术常用于机器学习和深度学习任务中,特别是在数据量有限的情况下。
数据增强的好处如下:
提高模型泛化能力:通过数据增强,可以生成更多样化的训练样本,使得模型能够学习到更广泛的特征和模式,从而提高其泛化能力,减少过拟合的风险。
缓解数据不平衡问题:在某些任务中,不同类别的样本数量可能存在不平衡。通过数据增强,可以生成更多少数类别的样本,从而平衡数据集,提高模型对少数类别的识别能力。
增加数据多样性:数据增强可以通过各种变换操作(如旋转、缩放、平移、翻转等)引入不同的视角和变化,使得模型能够更好地适应真实世界中的各种场景和变化。
提升模型鲁棒性:通过数据增强,可以模拟现实中的噪声、干扰和变形等情况,使得模型在面对这些干扰时能够更好地保持稳定性和准确性。
减少过拟合风险:数据增强可以有效扩充训练数据集,减少模型对于训练数据的过度依赖,从而降低过拟合的风险,提高模型的泛化能力。
总之,数据增强通过生成更多样化、更丰富的训练样本,可以提高模型的泛化能力、鲁棒性和准确性,同时缓解数据不平衡问题,是一种常用的提升机器学习和深度学习模型性能的技术手段。
而我们这一任务,原始的数据集中只有117张图片,数据集的数量过少,如果不经过数据增强,直接输入训练的话,模型很容易过拟合,因此,我们考虑进行数据增强。
Python中有很多有关数据增强的第三方库,以下是一些常用的数据增强的第三方库:
imgaug 是一个功能强大的图像增强库,支持多种图像增强技术,包括旋转、缩放、翻转、裁剪、亮度调整、对比度调整等。albumentations 是一个快速且灵活的图像增强库,支持多种图像增强技术,包括随机裁剪、旋转、缩放、翻转、模糊、颜色调整等。Augmentor 是一个用于图像增强的 Python 库,可以生成大量的增强图像样本。它支持多种增强操作,如旋转、缩放、翻转、平移、变形等。Keras 是一个流行的深度学习库,其中的 ImageDataGenerator 类提供了一系列图像增强方法,如旋转、缩放、翻转、剪切等。Torchvision.transforms:Torchvision 是 PyTorch 的计算机视觉库,其中的 transforms 模块提供了多种图像增强方法,如随机裁剪、旋转、缩放、翻转、亮度调整等。
这些库都提供了丰富的图像增强方法,可以帮助提升数据集的多样性和模型的鲁棒性。
其中,相对常用的是torchvision库和imgaug库,但考虑到本项目是基于Tensorflow2.0中的keras库进行搭建和训练模型,为了保证项目部署的一致性,所以本项目选用imgaug库进行数据增强。
imgaug 是一个用于图像增强的 Python 库,旨在帮助机器学习和计算机视觉任务中的数据预处理。它提供了丰富的图像增强技术和灵活的配置选项,使用户能够自定义和组合各种增强操作。
我们使用水平翻转,垂直翻转,旋转90°,旋转270°,在-180°到180°之间旋转随机角度,加入散粒噪声,加入椒盐噪声,对比度变暗,对比度变亮这9种增强方式,加上原图,将数据集扩充到原来的10倍。由于原始图片的分辨率为512×512,而使用迁移学习的VGG19,ResNet系列模型的输入尺寸为224×224,因此,需要对图片进行resize,这一步骤在数据增强过程中完成。
数据增强后的每一类别的数据数量如下:
因此,我们重新对数据进行增强,只保留了水平翻转,垂直翻转,旋转90°,旋转270°,在-180°到180°之间旋转随机角度,加入散粒噪声,加入椒盐噪声,对比度变暗,对比度变亮这9种增强方式,加上原图,将数据集扩充到原来的10倍。
数据增强后,由于resize操作,图片分辨率变小,图像中的细节和信息可能会被压缩或丢失,这是因为调整图像大小通常涉及到对图像进行插值或采样操作,以适应新的尺寸。在这个过程中,一些细节可能会被模糊化或丢失,从而导致图像特征的损失。
因此在数据增强之后,我对训练数据和测试数据进行了人为的清洗,数据清洗是指对原始数据进行处理和转换,以去除错误、不完整、重复或不相关的数据,从而使数据更加准确、一致和可用于分析和建模。具体操作为:有些原始图片,其中,零件所占的图片大小的比例比较小,只有图像中的一小部分,对于这样的图片,我们可以手动的进行一次裁剪,尽可能使得零件部分占据较大的图片比例。
在数据增强之后,我对训练数据和测试数据进行了人为的清洗,数据清洗是指对原始数据进行处理和转换,以去除错误、不完整、重复或不相关的数据,从而使数据更加准确、一致和可用于分析和建模。具体操作为:有些原始图片,其中,零件所占的图片大小的比例比较小,只有图像中的一小部分,对于这样的图片,我们可以手动的进行一次裁剪,尽可能使得零件部分占据较大的图片比例。
调用keras.applications中的基于ImageNet的预训练模型,只需要模型的特征提取部分,重新搭建分类器,冻结特征提取层的参数,对分类器参数进行训练。
VGG19的模型结构如图所示,我们的模型将最后1000的分类器去掉,更换成我们搭建的分类器,分类数量为7类。
在模型的训练过程中,我们尝试了多种预训练的模型,得到的训练结果如下所示:
最后在精度和推理时间的平衡中,我们选择了VGG19模型,可以看到,相比于精度最高的ResNet152_inception模型,精度只下降了2%,但时间却减少到ResNet152_inception模型所需时间的13%,出于精度和推理时间平衡的考量,我们选择了VGG19模型。
Intel Neural Compressor是由英特尔开发的一种神经网络压缩工具。它旨在通过减少神经网络模型的大小和复杂度,提高神经网络的推理性能和效率。
Intel Neural Compressor使用了一系列压缩技术,包括权重量化、剪枝和量化。通过权重量化,它可以将神经网络模型中的浮点权重转换为低精度的整数权重,从而减少存储空间和内存访问的需求。剪枝技术可以去除冗余的神经元和连接,进一步减小模型的大小。量化技术可以将高精度的浮点数转换为低精度的定点数,降低模型的计算复杂度。
通过使用Intel Neural Compressor,开发人员可以在不显著降低模型性能的情况下,大幅减小神经网络模型的大小和复杂度。这不仅有助于提高模型的推理速度和效率,还可以降低模型在边缘设备上的存储和计算要求。
在Intel Neural Compressor中,提供了如下图所示的API:
最初的想法是使用蒸馏(Distillation)的方法在不显著降低模型性能的前提下,减小神经网络模型的大小和复杂度,和指导教师商议后,最后我们选择量化(Quantization)的方式。
量化(Quantization)是指,将高精度的浮点数转换为低精度的定点数。通常情况下,浮点数需要更多的比特位来表示,而使用定点数可以大幅减小模型的大小。相比于蒸馏(Distillation)技术,量化在神经网络模型中具有以下几个优点:
模型大小减小更明显:量化可以将浮点权重转换为低精度的定点数,从而大幅减小模型的大小。相比之下,蒸馏技术只是通过训练一个较小的模型来近似大模型,减小的模型大小可能没有量化那么显著。
推理速度更快:低精度的定点数计算速度更快,可以加快神经网络模型的推理速度。而蒸馏技术并没有直接减小模型的计算复杂度,因此在推理速度上可能没有量化那么明显的优势。
压缩率更高:量化可以将模型的权重量化为低精度的整数或定点数,从而大幅减小模型的大小。相比之下,蒸馏技术通常只能通过训练一个较小的模型来近似大模型,压缩率可能没有量化那么高。
硬件支持更好:低精度的定点数计算更容易在硬件上实现加速。许多硬件加速器(如FPGA、ASIC等)可以更高效地执行低精度的计算操作,从而提高神经网络模型的推理性能。而蒸馏技术并没有直接改变模型的计算精度,对硬件加速的支持可能没有量化那么好。
因此工业界大多选择量化的方式进行神经网络的压缩,为了贴合真实工业界,我们选择量化的方式进行压缩。
量化的工作流图如下所示:
Flask是一个轻量级的Python Web框架,它被设计成简单易用、灵活且可扩展的工具。它基于Werkzeug和Jinja2库构建,提供了构建Web应用程序所需的基本功能。
以下是一些Flask的主要特点:
简单易用:Flask的设计理念是保持简单性和最小化的核心功能。它提供了一个简洁的API,使得开发者能够快速上手并构建出高效的Web应用。
轻量级:Flask没有过多的依赖项,因此它非常轻量级。这使得应用程序的启动时间快,并且占用的系统资源较少。
灵活性:Flask允许开发者根据自己的需求进行定制。它没有强制性的项目结构,开发者可以根据自己的喜好组织代码。
可扩展性:Flask提供了丰富的扩展机制,开发者可以通过使用众多的第三方扩展来增加功能,如数据库集成、身份验证、缓存等。
RESTful支持:Flask对构建RESTful API提供了良好的支持。它提供了路由、请求处理、响应生成等功能,使开发者能够轻松地构建出符合RESTful设计原则的API。
模板引擎:Flask使用Jinja2作为默认的模板引擎,它提供了强大的模板功能,使开发者能够方便地构建动态的Web页面。
测试支持:Flask内置了测试客户端,可以帮助开发者编写单元测试和集成测试,保证应用程序的质量。
总之,Flask是一个简单、灵活且功能强大的Python Web框架,适用于构建各种规模的Web应用程序。无论是快速原型开发还是构建大型生产应用,Flask都能提供良好的支持和可扩展性。
基于上述原因,本项目选择使用flask作为后端开发框架,进行开发。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。