文章目录
2024 CSDN 人工智能领域 我的机器学习年度深度总结
引言
回顾 2024 年,这一年我在 CSDN 平台上笔耕不辍,相继发布了高质量 70 多篇与人工智能机器学习、深度学习、机器视觉等相关的技术原创博客。其中,
- 关于机器学习基础与相关算法的有 22 篇,从理论层面深入剖析机器学习的各类算法原理,如决策树、支持向量机等,为读者搭建起机器学习的理论框架;
- 机器学习项目实战类博客有 7 篇,通过实际案例,如预测房价、客户流失分析等项目,让读者亲身体验如何将机器学习算法应用于实际业务场景;
- 深度学习基础与项目实战共计 22 篇,既阐述深度学习的神经网络架构、反向传播等基础概念,又展示了图像识别、自然语言处理等项目实战,使读者对深度学习有全面的认识;
- 深度学习框架 TensorFlow 相关的有 4 篇,专注于讲解 TensorFlow 框架的使用技巧、模型搭建等内容,助力读者掌握这一强大的深度学习工具;
- 机器视觉 OpenCV 工具的基础使用有 16 篇,详细介绍 OpenCV 库的各种函数与应用场景,帮助读者快速上手机器视觉开发;
- 重点聚焦机器视觉在工业领域的落地项目博客有 7 篇,涵盖工业缺陷检测、尺寸测量等实际应用,凸显机器视觉在工业生产中的重要价值。
通过对这些技术的不断学习和应用,让我深刻认识到人工智能对我们工作、生活带来的影响,极大地方便了我们的工作流程,提高了生产效率。
-
在工作中
- 机器学习算法能够快速处理海量数据,为企业决策提供精准依据;
- 深度学习在图像和语音识别领域的应用,实现了自动化的任务处理,节省了大量人力成本。
-
在生活方面
- 智能家居设备借助人工智能实现了智能化控制,让我们的生活更加便捷舒适;
- 智能推荐系统根据我们的兴趣偏好推送内容,丰富了我们的娱乐和信息获取渠道。
然而,人工智能的发展也带来了一些挑战,如数据隐私问题、算法偏见等。未来,我将继续深入研究这些技术,不仅在博客中分享更多前沿知识和实践经验,还希望能够探索如何更好地应对这些挑战,让人工智能技术在合理、安全的轨道上持续发展,为人类创造更多福祉。
下面将和大家分享并深度介绍这些技术的学习历程、使用经验。
机器学习
一、定义
机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。它专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。
简单来说,就是让计算机从数据中学习规律,而不是通过显式编程来规定计算机每一步该怎么做。例如,我们可以通过给计算机大量的手写数字图片(从 0 到 9)以及对应的数字标签,让计算机自己学习如何根据图片的特征来识别这是哪个数字,之后当遇到新的手写数字图片时,计算机就能运用学到的规律来进行判断。
二、机器学习的类型
- 监督学习
- 监督学习是指利用一组已知类别的样本调整分类器的参数,使其达到所要求性能的过程。这些已知类别信息的样本被称为训练样本。
- 包括分类和回归两种主要任务。分类任务例如判断一封邮件是垃圾邮件(类别为1)还是正常邮件(类别为0);回归任务比如根据房屋的面积、房龄等特征预测房屋的价格。
- 常见的算法有决策树、支持向量机、朴素贝叶斯等。以决策树为例,它通过构建一个树状结构来对数据进行分类。比如在一个判断水果是苹果还是橙子的决策树中,可能首先根据形状判断,如果是圆形,再根据颜色等其他特征进一步判断,最终确定水果的类别。
- 无监督学习
- 无监督学习的训练样本的标记信息是未知的。其目的是发现数据中的结构,例如数据的分布、聚类等情况。
- 聚类是无监督学习的典型应用。比如对用户的购物行为数据进行聚类,将具有相似购物模式的用户分为一组,这样商家就可以针对不同组的用户制定不同的营销策略。常用的算法有K - 均值聚类算法。它的基本思想是将数据分为K个簇,通过不断地更新簇的中心和重新分配数据点,使得簇内的数据点相似度尽量高,簇间的数据点相似度尽量低。
- 强化学习
- 强化学习是智能体(agent)以“试错”的方式进行学习,通过与环境进行交互获得奖励反馈信号,以最大化长期累积奖励为目标来学习最优策略。
- 例如在机器人控制领域,机器人(智能体)在环境中行动,每一个动作都会得到一个奖励信号。如果机器人成功地从一个房间走到另一个房间,可能会得到一个较高的奖励;如果它撞到了障碍物,可能会得到一个负奖励。通过不断地尝试不同的动作序列,机器人可以学习到最优的移动策略。
三、机器学习的应用领域
- 医疗领域
- 疾病诊断方面,机器学习可以通过分析大量的病历数据、医学影像(如X光、CT等)来帮助医生进行疾病的诊断。例如,通过对大量的肿瘤影像数据进行学习,计算机可以辅助医生判断肿瘤是良性还是恶性,提高诊断的准确性和效率。
- 金融领域
- 风险评估是一个重要应用。银行可以利用机器学习模型分析客户的信用记录、收入情况、资产状况等信息来评估客户的信用风险,决定是否给予贷款以及贷款的额度。同时,在股票市场中,机器学习算法可以分析股票价格的历史数据和相关的宏观经济数据,预测股票价格的走势,帮助投资者做出决策。
- 交通领域
- 智能交通系统利用机器学习来优化交通流量。通过在道路上安装的传感器收集车流量、车速等数据,利用机器学习算法可以预测交通拥堵情况,并及时调整交通信号灯的时长,缓解交通压力。此外,自动驾驶技术也依赖于机器学习,车辆通过摄像头、雷达等传感器收集环境数据,计算机利用机器学习算法对这些数据进行处理,做出驾驶决策,如加速、刹车、转弯等。
机器学习常见算法
机器学习项目实战
深度学习
一、定义
深度学习是机器学习的一个分支领域,它是一种基于对数据进行表征学习的方法。其核心在于构建具有很多层(深度)的神经网络模型,通过大量的数据让模型自动学习数据中的复杂模式和特征表示。
例如,在图像识别中,深度学习模型可以从海量的图像数据中学习到不同物体的特征,从简单的线条、纹理等到复杂的物体形状和组合,从而能够精准地识别图像中的物体,如区分猫和狗。
二、深度学习中的神经网络架构
- 多层感知机(MLP)
- 多层感知机也叫人工神经网络(ANN),它包含输入层、隐藏层和输出层。输入层接收数据,隐藏层进行数据的处理和特征提取,输出层输出结果。
- 例如,在一个简单的手写数字识别任务中,输入层可以接收手写数字图像的像素值,经过隐藏层的神经元对这些像素值进行加权求和、激活等操作,最后输出层输出这个数字是0 - 9中某个数字的概率。
- 卷积神经网络(CNN)
- CNN主要用于处理具有网格结构的数据,特别是图像和音频。它通过卷积层、池化层和全连接层来构建。
- 卷积层利用卷积核在图像上滑动进行卷积操作,提取图像中的局部特征,如边缘、纹理等。池化层可以对特征进行下采样,减少数据量,同时保留主要特征。例如在人脸识别中,卷积神经网络可以先通过卷积层提取人脸的五官特征,经过池化层后,再通过全连接层进行最后的分类,判断这是谁的脸。
- 循环神经网络(RNN)
- RNN是为处理序列数据而设计的,如文本、语音等。它的特点是神经元之间有循环连接,使得信息可以在网络中循环传递。
- 例如在机器翻译中,输入一个句子(源语言),RNN可以逐词地处理这个句子,考虑句子的语序和上下文信息,然后输出对应的翻译句子(目标语言)。长短期记忆网络(LSTM)和门控循环单元(GRU)是RNN的改进版本,它们可以更好地处理长序列数据中的长期依赖问题。
三、深度学习的训练过程
- 前向传播
- 前向传播是指将输入数据通过神经网络的各层,计算出输出结果的过程。在这个过程中,数据按照网络的层次结构依次通过神经元的计算,如加权求和、激活函数等操作,最终得到预测结果。
- 例如,在一个简单的三层神经网络中,输入数据首先经过第一层神经元的计算,得到中间结果,再将中间结果传递给第二层神经元进行计算,以此类推,直到得到最后的输出。
- 反向传播
- 反向传播是用于计算梯度的方法。它的目的是根据损失函数(衡量预测结果与真实结果之间的差距)计算出每个参数的梯度,以便更新网络的参数。
- 假设我们的深度学习模型在图像分类任务中出现了错误分类,通过反向传播,我们可以计算出网络中每个权重参数对这个错误的“贡献”程度,然后根据这个贡献程度来调整权重参数,使得下一次预测能够更准确。
- 优化算法
- 为了更新网络参数,需要使用优化算法。常见的优化算法有随机梯度下降(SGD)及其变种,如Adagrad、Adadelta、Adam等。这些优化算法根据计算出的梯度来调整网络的参数,以最小化损失函数。例如,Adam优化算法结合了动量和自适应学习率的优点,能够更快更稳定地训练深度学习模型。
四、深度学习的应用领域
- 自然语言处理
- 包括文本分类、机器翻译、情感分析等众多应用。在文本分类中,深度学习模型可以对新闻文章进行分类,如分为体育、娱乐、科技等类别。在机器翻译方面,像谷歌翻译等工具利用深度学习技术实现了较为准确的语言之间的翻译。情感分析则可以判断一段文本(如产品评论)是正面评价还是负面评价。
- 计算机视觉
- 从简单的图像分类(如区分不同种类的动物)到复杂的目标检测(检测图像中物体的位置和类别)和语义分割(将图像中的每个像素划分到不同的类别)。例如,在安防领域,目标检测技术可以用于监控摄像头中检测可疑人员和物体;在医学影像分析中,语义分割可以帮助医生更准确地分析病变区域。
- 游戏领域
- 深度学习可以用于游戏中的角色行为建模和策略优化。例如在棋类游戏中,深度学习模型可以学习下棋的策略,像AlphaGo通过深度学习技术击败了世界顶尖的围棋棋手,它通过学习大量的围棋棋局,掌握了高超的下棋策略。
深度学习入门
深度学习进阶
深度学习项目
二、R-CNN(Region with CNN feature)
四、目标检测中的常见指标(Precision、Recall、F1 Score、IoU、AP、mAP、COCO指标)
机器视觉
技术剖析、应用洞察与未来展望
机器视觉作为人工智能领域的关键分支,近年来发展迅猛。它赋予机器“看”和“理解”的能力,通过摄取图像或视频信号,利用计算机算法进行分析、处理,从而实现对目标物体的识别、测量、定位和检测等功能,广泛应用于工业、医疗、交通等众多领域,极大地提升了生产效率和生活智能化水平。
技术核心要素
-
图像采集设备
- 工业相机:是机器视觉系统的“眼睛”,按成像原理可分为CCD(电荷耦合器件)相机和CMOS(互补金属氧化物半导体)相机 。CCD相机具有高灵敏度、低噪声的优点,在对图像质量要求极高的检测场景,如半导体芯片检测中表现出色;CMOS相机则以成本低、帧率高、功耗低等特性,在物流分拣、工业自动化流水线上得到广泛应用。
- 镜头:决定了相机的视野范围和成像质量。定焦镜头焦距固定,适用于目标物体位置和尺寸相对稳定的场景,如电子元件的表面检测;变焦镜头焦距可变,能灵活调整视野,常用于需要大范围监测或跟踪运动目标的场合,如智能交通中的车辆监控。
-
图像处理算法
- 图像预处理:包括灰度化、滤波、增强等操作。灰度化将彩色图像转换为灰度图像,简化后续处理;滤波可去除图像中的噪声,如高斯滤波能有效平滑图像,中值滤波对椒盐噪声有良好的抑制效果;图像增强则提高图像的对比度和清晰度,使目标特征更明显,直方图均衡化是常用的增强方法。
- 特征提取与匹配:从图像中提取能够代表目标物体的关键特征,如SIFT(尺度不变特征变换)、SURF(加速稳健特征)等算法提取的特征点对图像的尺度、旋转、光照变化具有一定的不变性,在目标识别、图像拼接等任务中发挥重要作用。特征匹配通过对比不同图像或图像区域的特征,确定它们之间的对应关系,用于目标定位和跟踪。
- 目标检测与识别:利用分类器对图像中的目标进行检测和分类,传统的有基于Haar特征的级联分类器用于人脸检测,在安防监控中应用广泛;深度学习兴起后,基于卷积神经网络(CNN)的目标检测算法,如YOLO(You Only Look Once)系列、Faster R - CNN等,以更高的精度和速度,在工业缺陷检测、交通标志识别等场景中大量应用。
应用领域全景
-
工业制造
- 产品质量检测:在汽车制造中,对零部件的尺寸精度、表面缺陷进行检测。例如,利用3D机器视觉系统检测发动机缸体的内部结构是否符合标准,通过重建缸体的三维模型,与设计模型对比,快速准确地发现尺寸偏差和铸造缺陷,保障产品质量,降低次品率。
- 装配验证:在电子设备制造中,确保零部件准确装配。如手机主板的贴片元件装配,机器视觉系统通过识别元件的形状、位置和标识,判断元件是否正确放置,及时发现漏装、错装等问题,提高装配效率和准确性。
-
智能交通
- 交通监控:在路口和路段部署机器视觉系统,实时监测交通流量、车辆速度、违章行为等。车牌识别系统利用字符识别算法,快速准确地识别车辆号牌,实现车辆身份验证和交通违法抓拍,提高交通管理效率,保障道路安全。
- 自动驾驶辅助:通过摄像头感知车辆周围环境,为自动驾驶提供视觉信息。如车道偏离预警系统,利用机器视觉检测车道线,当车辆偏离正常行驶车道时及时发出警报,避免交通事故发生;障碍物检测系统则识别前方车辆、行人等障碍物,为自动驾驶汽车的制动和避让决策提供依据。
-
医疗领域
- 医学影像分析:对X光、CT、MRI等医学影像进行分析,辅助医生诊断疾病。如利用深度学习算法对肺部CT图像进行分析,检测肺部结节,判断其良恶性,为早期肺癌诊断提供重要参考,提高诊断的准确性和效率。
- 手术导航与机器人辅助手术:在手术中,机器视觉系统实时跟踪手术器械和患者组织的位置,为医生提供精准的导航信息,提高手术的精度和安全性。例如,在神经外科手术中,借助机器视觉实现手术器械的精确定位,减少对周围正常组织的损伤。
面临挑战与未来展望
-
现存挑战
- 复杂环境适应性:在光照变化剧烈、背景复杂、目标遮挡等复杂环境下,机器视觉系统的性能会受到严重影响。例如,在户外强光或夜间弱光条件下,交通监控摄像头的图像质量下降,导致目标检测和识别准确率降低。
- 实时性与计算资源矛盾:对于高速运动目标的检测和处理,如自动驾驶中的实时路况感知,需要机器视觉系统具备极高的实时性,但复杂的图像处理算法往往需要大量的计算资源,当前硬件设备难以满足两者的平衡,限制了系统的应用范围。
-
未来展望
- 技术融合创新:与人工智能其他领域,如深度学习、强化学习进一步融合,提升机器视觉系统的智能水平和自适应能力。例如,结合强化学习使机器视觉系统能够根据环境变化自主调整检测策略,优化性能。
- 多模态发展:融合视觉、听觉、触觉等多种模态信息,实现更全面、准确的环境感知。在智能机器人领域,多模态机器视觉系统可以结合语音指令和触觉反馈,更灵活地完成复杂任务,如协作机器人与人类共同完成装配工作时,通过多模态感知更好地理解人类意图和环境变化。
机器视觉作为支撑现代工业和社会智能化发展的关键技术,在过去取得了显著进展,未来也将持续突破创新,为更多领域带来变革性的发展机遇,不断拓展人类感知和理解世界的边界 。
工业机器视觉
四、AOI系统之PCB锡膏缺陷检测(创作中)
工具与平台
机器学习方向
(一)编程库
-
- 简介:Scikit - learn是用于机器学习的简单而高效的工具。它涵盖了分类、回归、聚类、降维等多种机器学习算法,如支持向量机(SVM)、决策树、随机森林等。
- 应用场景:在传统机器学习任务中广泛应用。例如,在预测房屋价格的回归任务中,可以使用Scikit - learn中的线性回归或梯度提升回归树(GBRT)算法。对于文本分类任务,朴素贝叶斯分类器是常用的选择。
- 优势:易于使用,有丰富的文档和示例。它的API设计简单直观,能够让用户快速实现机器学习模型,并且在小到中等规模的数据上表现出色。
-
LightGBM和XGBoost
- 简介:这两个是梯度提升框架,用于高效地处理大规模数据集的机器学习任务。它们都是基于决策树的集成学习算法,通过不断地迭代构建新的决策树来优化模型。
- 应用场景:在数据挖掘竞赛和工业界的大数据预测任务中非常受欢迎。例如,在电商平台的用户购买行为预测、广告点击率预测等任务中,LightGBM和XGBoost能够有效地处理大量的用户数据和特征,挖掘其中的潜在规律,提高预测的准确性。
- 优势:具有高效的计算性能和出色的预测准确性。它们支持分布式训练,能够处理大规模数据,并且可以通过调整参数来防止过拟合。
使用示例
# 导入所需的库
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
# 加载鸢尾花数据集
iris = datasets.load_iris()
# 特征数据
X = iris.data
# 目标标签
y = iris.target
# 将数据集划分为训练集和测试集,测试集占 20%
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 使用K近邻分类器,k=4
knn = KNeighborsClassifier(n_neighbors=4)
# 训练模型
knn.fit(X_train, y_train)
# 使用训练好的模型进行预测
y_pred = knn.predict(X_test)
# 计算预测的准确性
accuracy = accuracy_score(y_test, y_pred)
print(f"预测准确率: {accuracy}")
(二)数据处理与可视化工具
-
- 简介:Pandas是一个用于数据处理和分析的库,提供了高效的数据结构,如DataFrame和Series,用于存储和操作数据。
- 应用场景:在机器学习项目的数据预处理阶段必不可少。例如,用于读取和清洗数据集,包括处理缺失值、数据标准化、数据合并和拆分等操作。可以方便地从各种数据源(如CSV文件、数据库等)读取数据,并将其转换为适合机器学习模型输入的格式。
- 优势:操作简单灵活,能够快速地对数据进行筛选、排序、分组等操作,并且与其他机器学习库(如Scikit - learn)有良好的兼容性。
使用示例
import numpy as np
import pandas as pd
# 创建 shape(150,3)的二维标签数组结构DataFrame
df = pd.DataFrame(data = np.random.randint(0,151,size = (150,3)),
index = None,# 行索引默认
columns=['Python','Math','En'])# 列索引
# 查看其属性、概览和统计信息
df.head(10) # 显示头部10行,默认5个
df.tail(10) # 显示末尾10行,默认5个
df.shape # 查看形状,行数和列数
df.dtypes # 查看数据类型
df.index # 行索引
df.columns # 列索引
df.values # 对象值,二维ndarray数组
df.describe() # 查看数值型列的汇总统计,计数、平均值、标准差、最小值、四分位数、最大值
df.info() # 查看列索引、数据类型、非空计数和内存信息
-
- 简介:Matplotlib是一个强大的绘图库,用于创建各种类型的可视化图表,如折线图、柱状图、散点图等。Seaborn是基于Matplotlib的高级数据可视化库,提供了更美观、更具统计意义的可视化样式。
- 应用场景:在数据探索性分析(EDA)阶段,用于可视化数据的分布、变量之间的关系等。例如,在分析数据集中特征与目标变量之间的相关性时,可以使用散点图或热力图来展示。在模型评估阶段,也可以通过绘制学习曲线、验证曲线等来直观地展示模型的性能。
- 优势:Matplotlib具有高度的定制性,可以根据用户的需求创建各种复杂的图表。Seaborn则简化了一些常见的统计图表的绘制过程,并且提供了一些美观的默认主题。
使用示例(Matplotlib)
import numpy as np
import matplotlib.pyplot as plt
# 1、图形绘制
x = np.linspace(0,2*np.pi) # x轴
# y轴
y = np.sin(x) # 正弦
# 绘制线形图
# 调整尺寸
plt.figure(figsize=(9,6))
plt.plot(x,y)
# 继续调用plot绘制多条线形图
# 2、设置网格线
plt.grid(linestyle = '--',# 样式
color = 'green',# 颜色
alpha = 0.75) # 透明度
# 3、设置坐标轴范围
plt.axis([-1,10,-1.5,1.5])
plt.xlim([-1,10])
plt.ylim([-1.5,1.5])
使用示例(Seaborn)
import seaborn as sns
import matplotlib.pyplot as plt
# 加载titanic数据集
titanic = sns.load_dataset('titanic')
# 绘制一个柱状图,展示不同性别乘客的数量
sns.countplot(x='sex', data=titanic)
plt.title('乘客性别分布')
plt.show()
# 绘制一个箱线图,展示不同舱位等级乘客的年龄分布
sns.boxplot(x='class', y='age', data=titanic)
plt.title('不同舱位等级乘客的年龄分布')
plt.show()
# 绘制一个散点图,展示乘客年龄和票价之间的关系,并根据性别进行颜色区分
sns.scatterplot(x='age', y='fare', hue='sex', data=titanic)
plt.title('乘客年龄和票价的关系')
plt.show()
# 绘制一个热力图,展示titanic数据集中数值型变量之间的相关性
correlation_matrix = titanic.corr()
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm')
plt.title('变量间的相关性')
plt.show()
深度学习方向
(一)深度学习框架
-
- 简介:由Google开发的深度学习框架,广泛应用于各种深度学习任务。它支持CPU和GPU计算,具有高效的计算图执行模式,能够实现复杂的神经网络架构。
- 应用场景:在工业界和大型深度学习项目中使用频繁。例如,在语音识别、自然语言处理等领域,像谷歌的语音助手和机器翻译系统就部分基于TensorFlow构建。它还适用于计算机视觉任务,如目标检测和图像分类。
- 优势:具有强大的分布式训练能力,适合处理大规模数据和复杂模型。它有丰富的工具和库,如TensorBoard用于可视化模型训练过程,以及大量的预训练模型可供使用,方便用户进行迁移学习。
使用示例
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
import tensorflow as tf
# 生成线性数据
x = np.linspace(0, 10, 20) + np.random.randn(20)
y = np.linspace(0, 10, 20) + np.random.randn(20)
# W, B 定义为变量
W = tf.Variable(initial_value=np.random.randn())
B = tf.Variable(initial_value=np.random.randn())
# 定义线性模型, TensorFlow2.x没有占位符了.把线性模型封装为一个函数, x作为参数传入
def linear_regression(x):
return W * x + B
# 定义损失函数
def mean_square_loss(y_pred, y_true):
return tf.reduce_sum(tf.square(y_pred - y_true)) / 20
# 优化器 随机梯度下降法
optimizer = tf.optimizers.SGD(0.01)
# 定义优化过程
def run_optimization():
# 把计算过程放在梯度带中执行,可以实现自动微分
with tf.GradientTape() as g:
pred = linear_regression(x)
loss = mean_square_loss(pred, y)
# 计算梯度
gradients = g.gradient(loss, [W, B])
# 更新W和B
optimizer.apply_gradients(zip(gradients, [W, B]))
# 训练
for step in range(1, 5001):
# 每次训练都要更新W和B
run_optimization()
# 展示结果
if step % 100 == 0:
pred = linear_regression(x)
loss = mean_square_loss(pred, y)
print(f'step: {step}, loss: {loss}, W: {W.numpy()}, B: {B.numpy()}')
-
- 简介:由Facebook开发的深度学习框架,以其动态图机制而闻名。这种机制使得模型的构建和调试更加直观和灵活,用户可以像编写普通Python代码一样构建神经网络。
- 应用场景:在学术界和研究领域备受青睐。例如,在新的神经网络架构的实验和开发中,研究人员可以快速地迭代和修改模型。它也在自然语言处理和计算机视觉等领域有广泛应用,许多最新的研究成果都是基于PyTorch实现的。
- 优势:易于上手,尤其是对于初学者和有Python编程经验的人。动态图机制使得代码的编写和理解更加容易,并且在处理小批量数据和动态网络结构(如递归神经网络)时表现出色。
使用示例
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import numpy as np
import matplotlib.pyplot as plt
import torchvision
from torchvision import datasets, transforms
transformation = transforms.Compose([transforms.ToTensor(),])
train_ds = datasets.MNIST('./', train=True, transform=transformation, download=True)
test_ds = datasets.MNIST('./', train=False, transform=transformation, download=True)
train_dl = torch.utils.data.DataLoader(train_ds, batch_size=64, shuffle=True)
test_dl = torch.utils.data.DataLoader(test_ds, batch_size=256)
class Model(nn.Module):
def __init__(self):
super().__init__()
self.conv1 = nn.Conv2d(1, 32, 3)# in: 64, 1, 28 , 28 -> out: 64, 32, 26, 26
self.pool = nn.MaxPool2d((2, 2)) # out: 64, 32, 13, 13
self.conv2 = nn.Conv2d(32, 64, 3)# in: 64, 32, 13, 13 -> out: 64, 64, 11, 11
# 再加一层池化操作, in: 64, 64, 11, 11 --> out: 64, 64, 5, 5
self.linear_1 = nn.Linear(64 * 5 * 5, 256)
self.linear_2 = nn.Linear(256, 10)
def forward(self, input):
x = F.relu(self.conv1(input))
x = self.pool(x)
x = F.relu(self.conv2(x))
x = self.pool(x)
# flatten
x = x.view(-1, 64 * 5 * 5)
x = F.relu(self.linear_1(x))
x = self.linear_2(x)
return x
model = Model()
# 把model拷到GPU上面去
model.to(device)
loss_fn = torch.nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
def fit(epoch, model, train_loader, test_loader):
correct = 0
total = 0
running_loss = 0
for x, y in train_loader:
# 把数据放到GPU上去.
x, y = x.to(device), y.to(device)
y_pred = model(x)
loss = loss_fn(y_pred, y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
with torch.no_grad():
y_pred = torch.argmax(y_pred, dim=1)
correct += (y_pred == y).sum().item()
total += y.size(0)
running_loss += loss.item()
epoch_loss = running_loss / len(train_loader.dataset)
epoch_acc = correct / total
# 测试过程
test_correct = 0
test_total = 0
test_running_loss = 0
with torch.no_grad():
for x, y in test_loader:
x, y = x.to(device), y.to(device)
y_pred = model(x)
loss = loss_fn(y_pred, y)
y_pred = torch.argmax(y_pred, dim=1)
test_correct += (y_pred == y).sum().item()
test_total += y.size(0)
test_running_loss += loss.item()
test_epoch_loss = test_running_loss / len(test_loader.dataset)
test_epoch_acc = test_correct / test_total
print('epoch: ', epoch,
'loss: ', round(epoch_loss, 3),
'accuracy: ', round(epoch_acc, 3),
'test_loss: ', round(test_epoch_loss, 3),
'test_accuracy: ', round(test_epoch_acc))
return epoch_loss, epoch_acc, test_epoch_loss, test_epoch_acc
epochs = 20
train_loss = []
train_acc = []
test_loss = []
test_acc = []
for epoch in range(epochs):
epoch_loss, epoch_acc, test_epoch_loss, test_epoch_acc = fit(epoch, model, train_dl, test_dl)
train_loss.append(epoch_loss)
train_acc.append(epoch_acc)
test_loss.append(epoch_loss)
test_acc.append(epoch_acc)
-
- 简介:Keras是一个高层神经网络API,可以运行在TensorFlow、Theano或CNTK等后端上。它以简单易用、快速搭建模型为特点。
- 应用场景:适合初学者快速构建深度学习模型进行实验。例如,在学习深度学习的初期,使用Keras可以快速搭建一个简单的多层感知机(MLP)用于手写数字识别,或者搭建一个卷积神经网络(CNN)用于图像分类任务。
- 优势:代码简洁,能够在短时间内构建和训练一个基本的深度学习模型。它隐藏了深度学习框架底层的一些复杂细节,让用户专注于模型的设计和训练。
使用示例
from keras.models import Sequential
from keras.layers import Dense, Activation
model = Sequential([
Dense(32, input_shape=(784,)),
Activation('relu'),
Dense(10),
Activation('softmax'),
])
(二)模型部署工具
- ONNX(Open Neural Network Exchange)
- 简介:这是一种用于表示深度学习模型的开放格式,允许不同的深度学习框架之间进行模型转换和部署。
- 应用场景:当需要将在一个深度学习框架(如PyTorch)中训练好的模型部署到另一个环境(如移动设备或嵌入式系统)中,且该环境可能支持不同的深度学习框架(如TensorFlow Lite)时,ONNX可以发挥作用。例如,将一个用于图像分类的深度学习模型从实验室的训练环境(使用PyTorch)转换并部署到实际的产品应用(可能使用TensorFlow Lite的移动设备)中。
- 优势:提供了一种统一的模型表示方法,简化了模型在不同框架和平台之间的转换和部署过程,降低了模型部署的技术门槛。
- TensorFlow Lite和PyTorch Mobile
- 简介:分别是TensorFlow和PyTorch针对移动设备和嵌入式系统推出的轻量化版本。它们可以将深度学习模型进行优化和压缩,以便在资源有限的设备上运行。
- 应用场景:在移动应用开发中,如智能手机上的图像识别应用、语音助手等。例如,一个基于深度学习的实时翻译应用可以使用TensorFlow Lite或PyTorch Mobile将模型部署到手机上,实现离线翻译功能。
- 优势:能够在移动设备上高效地运行深度学习模型,节省设备的电量和存储空间,同时提供了相对较高的性能,满足实时性要求较高的应用场景。
机器视觉方向
(一)图像处理库
-
OpenCV(Open Source Computer Vision Library)
- 简介:OpenCV是一个用于计算机视觉任务的库,提供了各种图像处理和计算机视觉算法。它涵盖了从基本的图像滤波、几何变换到高级的目标检测、特征提取等功能。
- 应用场景:在工业检测、安防监控、自动驾驶等众多领域都有广泛应用。例如,在工业自动化中,利用OpenCV进行产品表面缺陷检测,通过图像滤波去除噪声,然后使用边缘检测算法提取产品的轮廓,进而判断产品是否存在缺陷。在安防领域,用于人脸识别和车牌识别等任务。
- 优势:功能强大且全面,具有高效的实现方式,能够快速地处理图像和视频数据。它支持多种编程语言,包括C++、Python等,并且有丰富的文档和示例代码,方便用户学习和使用。
使用示例
import cv2
import numpy as np
img = cv2.imread('./dog.jpeg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 返回两个结果, 一个是阈值, 另一个是处理后的图片
ret, dst = cv2.threshold(gray, 80, 255, cv2.THRESH_BINARY)
cv2.imshow('dog', np.hstack((gray, dst)))
cv2.waitKey(0)
cv2.destroyAllWindows()
-
- 简介:这是一个用于图像处理的Python库,它建立在SciPy之上,提供了大量的图像处理算法和工具。它侧重于图像数据的处理和分析,包括图像滤波、分割、形态学操作等。
- 应用场景:在医学图像分析、天文图像处理等领域有应用。例如,在医学图像中,Scikit - Image可以用于对细胞图像进行分割,以便于后续的细胞计数和形态分析。在天文图像中,可以用于去除背景噪声,增强星系等天体的图像特征。
- 优势:具有简单易用的API,与Python的科学计算生态系统(如NumPy、Pandas等)紧密结合,方便用户在进行图像处理的同时进行数据处理和分析。
使用示例
import skimage.io as io
import skimage.filters as filters
import skimage.segmentation as seg
import matplotlib.pyplot as plt
# 读取图像
image = io.imread('example_image.jpg')
# 显示原始图像
plt.figure(figsize=(10, 10))
plt.subplot(2, 2, 1)
plt.imshow(image)
plt.title('原始图像')
plt.axis('off')
# 高斯滤波
blurred_image = filters.gaussian(image, sigma=1.0)
plt.subplot(2, 2, 2)
plt.imshow(blurred_image)
plt.title('高斯滤波后的图像 (sigma=1.0)')
plt.axis('off')
# 边缘检测
edge_image = filters.sobel(blurred_image)
plt.subplot(2, 2, 3)
plt.imshow(edge_image, cmap='gray')
plt.title('边缘检测后的图像')
plt.axis('off')
# 基于区域的分割
segments = seg.slic(image, n_segments=100, compactness=10)
plt.subplot(2, 2, 4)
plt.imshow(seg.mark_boundaries(image, segments))
plt.title('基于区域的分割 (n_segments=100, compactness=10)')
plt.axis('off')
plt.tight_layout()
plt.show()
(二)机器视觉开发平台
- Halcon
- 简介:这是一款功能强大的机器视觉软件,提供了全面的视觉算法和工具,包括图像采集、处理、分析和机器视觉系统开发的整套解决方案。
- 应用场景:在工业制造、电子半导体、汽车等高精度检测领域广泛应用。例如,在半导体芯片制造过程中,Halcon可以用于芯片表面的缺陷检测、尺寸测量和封装质量检查等复杂任务。在汽车零部件生产中,用于零部件的外观检测和装配验证。
- 优势:具有高精度的图像处理和检测能力,提供了可视化的开发环境,方便非编程专业人员进行机器视觉系统的开发和调试。它还支持多种工业相机和图像采集设备,能够适应不同的工业生产环境。
- VisionPro
- 简介:这是康耐视(Cognex)公司开发的机器视觉软件,主要用于工业自动化中的视觉检测和识别任务。它提供了丰富的工具和算法,用于图像预处理、特征提取、目标检测和分类等。
- 应用场景:在物流自动化、电子设备制造等行业有广泛应用。例如,在物流仓库中,VisionPro可以用于包裹的自动分拣,通过识别包裹上的条码、标签等信息,将包裹准确地分配到不同的运输通道。在电子设备制造中,用于PCB板的元件检测和装配质量控制。
- 优势:与康耐视的工业相机和硬件设备有良好的兼容性,能够提供高效的视觉解决方案。它具有简单的图形化编程界面,降低了机器视觉系统开发的难度,并且可以快速地集成到工业自动化生产线中。
基于深度学习的工业机器视觉项目实战与成果展示
水表盘机械读数识别
成果展示
最终读数:0.802 m³
总结
2024年CSDN博客总结与人工智能感悟:
- 2024年在CSDN发布70多篇人工智能相关原创博客,涵盖机器学习、深度学习、机器视觉多方面。
- 机器学习基础与算法22篇,含原理剖析;项目实战7篇,有房价预测等案例。
- 深度学习基础与实战22篇,含架构概念和图像、语言项目;TensorFlow相关4篇,讲使用技巧。
- OpenCV基础使用16篇,机器视觉工业项目7篇。
- 技术学习应用让我认识到人工智能对工作和生活的影响:
- 工作中:机器学习处理数据助决策,深度学习用于图像和语音识别省人力。
- 生活中:智能家居、智能推荐带来便利和丰富信息。
- 同时存在数据隐私、算法偏见等挑战,未来将深入研究并分享经验,探索应对挑战,推动技术安全发展。
2025 年对于人工智能领域来说,充满了机遇和挑战。通过不断的技术创新、工具和平台的发展、应用的拓展和深化,以及对各种挑战的应对,有望推动人工智能技术迈向一个新的台阶,为社会带来更多的价值和便利。同时,我也将不断提升自己,在这个领域中继续贡献自己的力量,与广大技术爱好者共同成长。
我将继续在 CSDN 等平台上撰写高质量的技术博客,将 2025 年在人工智能领域的新探索和新发现分享给读者。
- 计划撰写更多的实战项目博客,带领读者亲身体验新技术在实际项目中的应用。
- 针对各种挑战,分享一些可行的解决方案和技术创新,如如何使用联邦学习解决数据隐私问题,如何利用可视化工具解释深度学习模型的决策过程。