计算机视觉:学习指南
一、引言
计算机视觉作为人工智能领域的一个重要分支,致力于让计算机理解和解释视觉信息,近年来取得了令人瞩目的进展,广泛应用于安防监控、自动驾驶、图像编辑、医学影像分析等众多领域。从入门到精通计算机视觉需要系统地学习一系列知识和技能,涵盖数学基础、编程语言、图像处理基础、机器学习与深度学习算法以及各种计算机视觉应用技术等。本学习路线将为您详细指引这一征程,助力您逐步成长为计算机视觉领域的专业人才。
二、数学与编程基础
(一)数学基础
- 线性代数
线性代数在计算机视觉中具有基础性地位。向量空间为图像数据的表示提供了框架,图像可以看作是由像素值组成的多维向量。例如,一幅灰度图像可视为一个二维矩阵,其每一行或列都可看作一个向量,而彩色图像则可通过多个颜色通道(如 RGB)的矩阵来表示。矩阵运算在图像变换中起着关键作用,如平移、旋转、缩放等几何变换都可以通过矩阵乘法来实现。例如,二维图像的旋转可以通过构建旋转矩阵与图像矩阵相乘得到旋转后的图像。另外,特征值与特征向量在图像特征提取和主成分分析(PCA)等降维算法中有着重要应用,PCA 可用于提取图像的主要特征,减少数据冗余,提高后续处理效率。 - 概率论与数理统计
概率论为计算机视觉处理不确定性和随机现象提供了理论依据。在图像分析中,概率分布可用于描述图像像素值的分布规律。例如,图像的灰度值可能服从某种特定的概率分布,了解这些分布有助于进行图像增强、阈值选取等操作。贝叶斯定理在目标检测、图像分类等任务中被广泛应用,它通过结合先验知识和观测数据来更新对事件的概率判断。例如,在目标检测中,根据先验知识(如目标的常见形状、颜色等)和当前图像中的观测信息(如边缘、颜色区域等),利用贝叶斯定理来判断某个区域是否为目标的概率。数理统计中的参数估计和假设检验可用于评估计算机视觉模型的性能,如判断模型在不同数据集上的准确率是否有显著差异,从而指导模型的改进和优化。 - 数值计算方法
数值计算方法在计算机视觉算法的实现中至关重要。例如,在图像滤波算法中,需要进行大量的数值计算来确定滤波器的系数和对图像像素进行卷积操作。插值算法用于图像缩放和几何变换中的像素值估计,如双线性插值、双三次插值等方法通过对周围像素值的计算来确定新位置的像素值。数值优化算法在计算机视觉模型的训练中广泛应用,如梯度下降法及其变种用于优化模型参数,使模型能够更好地拟合数据。例如,在深度学习模型用于图像识别时,通过梯度下降法不断调整神经网络的权重和偏差,以最小化损失函数,提高模型对图像类别的预测准确率。
(二)编程基础
- Python 编程基础
Python 以其简洁易读、丰富的库生态成为计算机视觉编程的首选语言。其基本数据类型,如整数、浮点数、字符串、列表、字典和集合等,方便处理图像数据的各种属性和元信息。例如,列表可用于存储图像的像素值序列,字典可用于保存图像的标签、尺寸等信息。控制流语句,包括 if - else 条件判断、for 循环和 while 循环,能够实现对图像数据的各种逻辑操作。例如,通过 for 循环遍历图像的像素点,进行像素值的修改或统计操作。函数定义功能可将常用的图像处理操作封装成函数,提高代码的复用性。例如,定义一个函数用于图像的灰度化处理,在需要对多个图像进行灰度化时可直接调用该函数。此外,Python 的面向对象编程特性便于组织和管理复杂的计算机视觉项目代码,例如创建图像类,将图像的加载、显示、处理等操作封装在类中,使代码结构更加清晰、易于维护。 - 常用 Python 库介绍
Numpy 是 Python 科学计算的核心库,为计算机视觉提供了高效的多维数组对象(ndarray
)和丰富的数组操作函数。ndarray
可用于存储和处理图像数据,其高效的内存布局和向量化运算能力使得图像的数值计算极为快速。例如,使用 Numpy 可以方便地进行图像的矩阵运算,如计算图像的梯度、协方差矩阵等。Pandas 主要用于数据处理和分析,在计算机视觉中可用于处理与图像相关的标注数据、数据集的元信息等。例如,在图像分类任务中,Pandas 可用于读取和整理包含图像文件名、类别标签等信息的 CSV 文件,以便与图像数据进行关联和处理。Matplotlib 是强大的绘图库,用于可视化计算机视觉中的各种数据和结果。例如,可以绘制图像的直方图来展示像素值的分布,绘制图像的边缘图、特征图等来直观地观察图像的处理效果和模型的输出结果,帮助理解和分析计算机视觉算法的性能。
三、图像处理基础
(一)图像的表示与读写
- 图像的数字表示
图像在计算机中以数字形式存储,灰度图像通常由一个二维矩阵表示,矩阵中的每个元素对应图像中的一个像素点,其值表示该像素的灰度强度,范围一般为 0(黑色)到 255(白色)。彩色图像则由多个颜色通道(如常见的 RGB 三个通道)的二维矩阵组成,每个通道分别表示红、绿、蓝三种颜色的强度信息,通过不同通道的组合可以呈现出丰富多彩的颜色。例如,一幅大小为M x N的 RGB 彩色图像可以看作是三个M x N的矩阵,分别对应 R、G、B 通道。 - 图像文件格式与读写操作
常见的图像文件格式有 JPEG、PNG、BMP 等。JPEG 格式是一种有损压缩格式,适用于存储自然图像,它通过去除图像中的一些高频信息来减小文件大小,但会在一定程度上损失图像质量。PNG 格式支持无损压缩,并且可以保存图像的透明度信息,常用于需要保留图像细节和透明度的场景,如网页图标、图形设计等。BMP 格式则是一种简单的位图格式,不进行压缩,文件较大,但能精确地保存图像数据。在 Python 中,可以使用 Pillow 库(Python Imaging Library 的 fork 版本)进行图像的读写操作。例如,使用Image.open()
函数可以读取各种格式的图像文件,并将其转换为Image
对象,然后可以对该对象进行各种操作,如获取图像的尺寸、像素值等信息,使用Image.save()
函数可以将处理后的图像保存为指定格式的文件。
(二)图像预处理
- 灰度化与颜色空间转换
灰度化是将彩色图像转换为灰度图像的过程,其目的是减少数据量和计算复杂度,同时在某些情况下,灰度图像更便于进行特征提取和分析。常用的灰度化方法有多种,如平均值法,即将 RGB 三个通道的像素值求平均得到灰度值;加权平均法,根据人眼对不同颜色的敏感度,给予 R、G、B 通道不同的权重(如0.288R+0.785G+0.125B)来计算灰度值。颜色空间转换则是将图像从一种颜色空间转换到另一种颜色空间,除了常见的 RGB 颜色空间外,还有 HSV(Hue - Saturation - Value)、Lab 等颜色空间。HSV 颜色空间将颜色分为色调(Hue)、饱和度(Saturation)和明度(Value)三个分量,在某些颜色相关的图像处理任务中,如颜色分割、颜色跟踪等,HSV 颜色空间比 RGB 更具优势,因为它更符合人类对颜色的感知方式。例如,在图像中提取特定颜色的物体时,将图像转换到 HSV 颜色空间后,可以更方便地通过设定色调的阈值范围来筛选出目标颜色的区域。 - 图像滤波与增强
图像滤波的目的是去除图像中的噪声或增强图像的某些特征。线性滤波中,均值滤波器通过计算邻域内像素值的平均值来平滑图像,可用于去除高斯噪声,但会使图像变得模糊,因为它在去除噪声的同时也削弱了图像的边缘和细节信息。高斯滤波器则根据高斯函数对邻域像素值进行加权平均,相比于均值滤波器,它对图像的模糊程度较小,并且能够更好地保留图像的边缘信息,在图像预处理中应用广泛。中值滤波器属于非线性滤波,它将邻域内的像素值排序后取中值作为中心像素的新值,对于去除椒盐噪声非常有效,因为椒盐噪声通常表现为图像中的孤立亮点或暗点,中值滤波可以在不明显影响图像边缘和细节的情况下消除这些噪声点。图像增强则是通过各种方法提高图像的视觉效果或突出图像中的某些特征。对比度增强可以通过拉伸图像的灰度直方图来实现,例如将图像的灰度范围扩展到整个 0 - 255 区间,使图像的对比度更加明显,细节更加清晰;直方图均衡化则通过调整图像的直方图分布,使图像在整个灰度范围内的像素分布更加均匀,从而增强图像的对比度和细节信息,尤其适用于曝光过度或不足的图像。 - 图像几何变换
图像几何变换包括平移、旋转、缩放、裁剪等操作。平移变换是将图像在平面内沿水平或垂直方向移动一定的距离,通过修改图像矩阵中像素的坐标位置来实现。旋转变换则是将图像绕某个中心点旋转一定的角度,这需要根据旋转角度构建旋转矩阵,并将图像中的每个像素点通过矩阵乘法进行坐标变换,在旋转过程中还需要考虑图像的尺寸变化和像素值的插值问题,以确保旋转后的图像完整且平滑。缩放变换用于改变图像的大小,可以通过对图像矩阵进行采样或插值操作来实现,如缩小图像时,每隔一定的像素点选取一个像素,放大图像时则需要根据插值算法计算新插入像素的像素值,常用的插值算法有最近邻插值、双线性插值和双三次插值等,不同的插值算法在图像质量和计算复杂度上有所差异。裁剪操作则是从原始图像中选取感兴趣的区域,丢弃其余部分,这在目标检测、图像分割等任务中经常用于提取目标区域或去除图像中的无关背景信息。
(三)图像特征提取
- 边缘检测
边缘检测是计算机视觉中提取图像中物体轮廓和边界的重要操作。常用的边缘检测算子有 Sobel 算子、Prewitt 算子和 Canny 算子等。Sobel 算子通过计算图像在水平和垂直方向的梯度来检测边缘,它采用了两个3x3的卷积核,分别对图像进行水平和垂直方向的卷积运算,得到水平和垂直方向的梯度图像,然后通过计算梯度的幅值和方向来确定边缘的位置和强度。Prewitt 算子与 Sobel 算子类似,也是通过计算梯度来检测边缘,但使用的卷积核略有不同。Canny 算子则是一种更为先进和复杂的边缘检测算法,它包括噪声抑制、计算梯度幅值和方向、非极大值抑制和双阈值检测等多个步骤。首先通过高斯滤波器对图像进行平滑处理,去除噪声干扰,然后计算图像的梯度幅值和方向,接着在梯度方向上进行非极大值抑制,将非边缘点的梯度值置为 0,只保留边缘点的局部最大值,最后通过双阈值检测确定真正的边缘点,即大于高阈值的点肯定是边缘点,小于低阈值的点肯定不是边缘点,而在高低阈值之间的点则根据其与边缘点的连接性来判断是否为边缘点,Canny 算子能够得到更细、更准确且连续的边缘,在实际应用中广泛使用。 - 角点检测
角点是图像中具有显著局部特征的点,它在图像匹配、目标识别、图像拼接等任务中具有重要作用。Harris 角点检测算法是一种经典的角点检测方法,它基于图像的局部自相似性原理,通过计算图像在各个方向上的灰度变化来判断角点。具体来说,它使用一个小窗口在图像上滑动,计算窗口内像素在不同方向上的灰度变化差异,并构建一个响应函数,响应值较大的点即为角点候选点,然后通过设定阈值来筛选出真正的角点。Shi - Tomasi 角点检测算法则是对 Harris 角点检测算法的改进,它使用了不同的角点响应函数,在某些情况下能够更稳定、准确地检测出角点。此外,还有基于机器学习的角点检测方法,如通过训练一个分类器来判断图像中的点是否为角点,这种方法可以根据特定的应用场景和数据特点进行定制化训练,提高角点检测的准确性和适应性。 - 纹理特征提取
纹理是图像中重复出现的局部模式或结构,纹理特征提取对于图像分类、分割和识别等任务具有重要意义。灰度共生矩阵(GLCM)是一种常用的纹理分析方法,它通过统计图像中不同灰度值的像素对在一定距离和方向上的出现频率来描述图像的纹理特征。例如,可以计算 GLCM 的能量、对比度、相关性、熵等统计量,这些统计量从不同角度反映了图像的纹理信息,如能量反映了纹理的均匀程度,对比度反映了纹理的清晰度和粗糙度,相关性反映了纹理的方向性,熵反映了纹理的复杂程度。局部二值模式(LBP)也是一种有效的纹理特征提取方法,它通过将图像中的每个像素与其邻域像素进行比较,生成一个二进制编码,然后统计不同编码的出现频率作为纹理特征。LBP 具有计算简单、对光照变化不敏感等优点,在人脸识别、纹理分类等领域有广泛应用,并且还有许多基于 LBP 的改进算法,如多尺度 LBP、旋转不变 LBP 等,进一步提高了纹理特征提取的性能。
四、机器学习基础
(一)机器学习概述
机器学习是计算机视觉的重要基础,它致力于让计算机从数据中自动学习规律和模式,而无需显式编程。机器学习主要分为监督学习、无监督学习和半监督学习三大类。监督学习是在已知输入数据和对应的输出标签的情况下,训练模型学习输入与输出之间的映射关系。例如,在图像分类任务中,给定大量已标注类别的图像(如猫、狗、汽车等),监督学习模型通过学习这些图像的特征与类别标签之间的关系,从而能够对新的未标注图像进行分类预测。无监督学习则是在没有给定输出标签的情况下,对数据进行分析和挖掘,发现数据中的内在结构和模式。例如,在图像聚类任务中,无监督学习算法可以根据图像的特征将相似的图像自动聚成不同的类别,而不需要事先知道这些图像的具体类别名称,可用于图像数据的初步探索和分析,如发现图像数据中的不同主题或场景。半监督学习介于监督学习和无监督学习之间,它利用少量的标注数据和大量的未标注数据进行学习,通常基于数据的平滑性假设,即相似的数据点具有相似的标签,在实际应用中,当获取大量标注数据较为困难时,半监督学习可以有效地利用未标注数据来提高模型的性能,如在一些医学图像分析任务中,标注数据往往需要专业知识且耗时费力,半监督学习可以在有限的标注数据基础上,结合大量未标注的医学图像进行模型训练,提高疾病诊断等任务的准确性。
可参考这篇:机器学习:全面学习路径指南-CSDN博客
五、计算机视觉中的深度学习
(一)深度学习基础
可参考此篇:深度学习:从入门到精通的全面学习路径-CSDN博客
(二)目标检测算法
-
一阶段目标检测算法(如 YOLO 系列)
一阶段目标检测算法将目标检测任务视为一个回归问题,直接从图像中预测目标的类别和位置信息,具有速度快的特点,能够实时处理视频流,在一些对实时性要求较高的场景如视频监控、自动驾驶中的目标检测有广泛应用。YOLO(You Only Look Once)系列算法是一阶段目标检测算法的典型代表。YOLO 算法将图像划分为多个网格,每个网格负责预测一定数量的目标。它通过一个统一的神经网络结构同时预测目标的边界框坐标(包括中心坐标、宽度和高度)和类别概率。例如,在 YOLOv3 中,网络的输出是一个三维张量,其中每个单元格预测B个边界框以及每个边界框对应的类别概率和置信度得分。置信度得分综合考虑了边界框包含目标的可能性以及预测的准确性。在训练过程中,使用均方误差损失函数来优化网络参数,对边界框坐标误差、类别概率误差和置信度误差进行加权求和。YOLO 算法的优点是速度快,能够在一次前向传播中完成目标检测任务,但在检测精度上相对二阶段目标检测算法可能略逊一筹,尤其是对于小目标和密集目标的检测效果有待提高。 -
二阶段目标检测算法(如 Faster R - CNN)
二阶段目标检测算法先通过区域建议网络(Region Proposal Network,RPN)生成可能包含目标的候选区域,然后再对这些候选区域进行分类和位置精修,虽然速度相对较慢,但在检测精度上往往更高,适用于对检测精度要求较高的场景如医学影像中的病灶检测等。Faster R - CNN 主要由 RPN 和 Fast R - CNN 两部分组成。RPN 以特征图为输入,通过在特征图上滑动窗口的方式生成一系列的锚框(Anchor Boxes),这些锚框具有不同的尺度和长宽比,用于覆盖图像中不同大小和形状的目标可能存在的区域。然后,RPN 对每个锚框进行二分类(判断是否包含目标)和边界框回归(调整锚框的位置和大小),得到初步的候选区域。Fast R - CNN 则对 RPN 生成的候选区域进行特征提取、分类和更精确的边界框回归。它先使用感兴趣区域池化(Region of Interest Pooling,RoI Pooling)将不同大小的候选区域特征映射到固定大小的特征图上,然后通过全连接层进行分类和回归预测。例如,在医学影像分析中,对于肺部 CT 图像,Faster R - CNN 可以先由 RPN 提出可能的病灶候选区域,再由 Fast R - CNN 准确地判断这些区域是否为真正的病灶,并精确地定位病灶的边界,为医生提供更精准的诊断信息。与一阶段算法相比,Faster R - CNN 的网络结构相对复杂,计算量较大,但由于其分阶段的处理方式和对候选区域的精细处理,能够获得更高的检测精度,尤其是在处理复杂背景和小目标时表现出更好的性能。
(三)图像分割算法
-
语义分割算法(如 U - Net)
语义分割算法旨在将图像中的每个像素分类为不同的语义类别,例如将一幅风景图像分割为天空、草地、树木、河流等不同的区域。U - Net 是一种经典的语义分割网络架构,它采用了编码器 - 解码器(Encoder - Decoder)结构。编码器部分通常由卷积层和池化层组成,类似于传统的 CNN,其作用是提取图像的高级特征,随着网络层的深入,特征图的尺寸逐渐减小,而通道数逐渐增加,从而获取到图像更抽象、更具代表性的特征信息。解码器部分则将这些特征逐步还原为与原始图像尺寸相同的分割结果,它通过上采样操作(如反卷积或插值)将特征图的尺寸逐渐恢复到原始图像大小,并结合来自编码器对应层的特征信息进行融合,以补充细节信息,提高分割的准确性。例如,在医学图像分割领域,如对细胞图像的分割,U - Net 能够准确地将细胞从背景中分离出来,识别出细胞的边界和内部结构,帮助医生更精准地分析细胞的形态和分布,对于疾病的诊断和研究具有重要意义。U - Net 的优点在于其对小目标和细节的分割效果较好,并且由于其对称的结构设计,能够有效地利用图像的上下文信息,在许多语义分割任务中都取得了良好的性能。 -
实例分割算法(如 Mask R - CNN)
实例分割算法不仅要对图像中的不同物体进行分类,还要为每个物体生成精确的分割掩码(Mask),即区分出每个物体的具体轮廓和区域。Mask R - CNN 是在 Faster R - CNN 的基础上扩展而来的,它在 Faster R - CNN 的基础上增加了一个用于生成物体掩码的分支。在网络结构上,Mask R - CNN 同样先通过 RPN 生成候选区域,然后在 Fast R - CNN 对候选区域进行分类和边界框回归的同时,利用新增的掩码分支对每个候选区域内的物体进行像素级别的掩码预测。例如,在一张包含多个人物和物体的图像中,Mask R - CNN 能够准确地识别出每个人物和物体的类别,同时为每个人物绘制出精确的轮廓掩码,清晰地界定出每个物体在图像中的具体形状和位置。这在图像编辑、智能安防等领域有着广泛的应用前景,如在图像编辑中,可以方便地将图像中的特定物体提取出来进行单独处理或替换;在智能安防中,能够更精准地识别和跟踪监控画面中的特定人物或物体,提高安防监控的准确性和效率。Mask R - CNN 综合了目标检测和语义分割的功能,能够提供更丰富、更精确的图像分析结果,但由于其复杂的网络结构和多任务的处理要求,计算量较大,对硬件资源和训练数据的要求也相对较高。
六、模型训练与优化
(一)损失函数与优化算法
- 损失函数
在计算机视觉的深度学习模型中,损失函数用于衡量模型预测结果与真实结果之间的差异,是模型训练的关键要素之一。对于图像分类任务,常用的损失函数是交叉熵损失函数(Cross - Entropy Loss)。在多分类情况下,假设模型预测的类别概率分布为,其中y表示类别标签,x表示输入图像数据,真实类别标签的 one - hot 编码为
,则交叉熵损失函数可表示为
,其中C为类别总数。该损失函数能够促使模型输出的类别概率分布尽可能接近真实标签的分布,使得模型在训练过程中不断调整参数,提高分类的准确性。例如,在训练一个用于识别 10 种不同动物的图像分类模型时,通过最小化交叉熵损失函数,模型能够学习到不同动物图像的特征差异,从而准确地预测图像中动物的类别。
对于目标检测任务,损失函数通常由多个部分组成。以 Faster R - CNN 为例,其损失函数包括分类损失(用于判断候选区域内是否包含目标以及目标的类别)、边界框回归损失(用于调整候选区域的边界框位置和大小)和掩码损失(在 Mask R - CNN 中用于生成物体的掩码)。分类损失一般采用交叉熵损失函数,边界框回归损失常用的是平滑 L1 损失(Smooth L1 Loss),它在目标框坐标的预测误差较小时,采用类似均方误差的计算方式,而在误差较大时,采用 L1 范数的计算方式,这样可以在保证对小误差敏感的同时,避免大误差对训练的过度影响。掩码损失则根据具体的掩码生成任务和模型设计而定,例如可以采用二值交叉熵损失函数来衡量掩码预测的准确性。通过综合这些不同部分的损失函数,目标检测模型能够在多个维度上进行优化,提高对目标的检测和定位精度。
在图像分割任务中,对于语义分割,常用的损失函数有像素级别的交叉熵损失函数,它对图像中的每个像素计算预测类别与真实类别之间的交叉熵损失,并求和得到总的损失值。对于实例分割,如 Mask R - CNN 中的掩码损失函数,也是基于像素级别的计算,以确保生成的掩码与真实物体的轮廓尽可能匹配。例如,在语义分割的道路场景图像中,通过最小化像素级交叉熵损失函数,模型能够准确地将道路、车辆、行人、建筑物等不同语义区域的像素进行分类,从而得到精确的分割结果。
2. 优化算法
优化算法用于在模型训练过程中根据损失函数的值来更新模型参数,以最小化损失函数。随机梯度下降(SGD)是最基本的优化算法,它在每次迭代中随机选择一个样本计算梯度并更新模型参数。其更新公式为,其中
表示模型参数,
是学习率,
是损失函数
关于参数
的梯度。然而,SGD 存在一些问题,例如学习率的选择比较敏感,如果学习率过大,可能导致模型在训练过程中无法收敛,甚至发散;如果学习率过小,则会使训练过程变得非常缓慢。
为了克服 SGD 的一些局限性,出现了许多改进的优化算法。Adagrad 根据每个参数的历史梯度平方和来动态调整学习率,对不同参数使用不同的学习率,其更新公式为,其中
,
是一个很小的数,用于防止分母为零。Adadelta 是对 Adagrad 的进一步改进,它在一定程度上解决了 Adagrad 中学习率单调递减的问题,通过引入一个衰减因子来控制历史梯度平方和的积累速度。
RMSProp 与 Adadelta 类似,也是通过对历史梯度平方和进行指数加权平均来调整学习率,其更新公式为,其中
,
是衰减因子。Adam 则结合了动量法和 RMSProp 的优点,既考虑了梯度的一阶矩估计(类似于动量法),又考虑了梯度的二阶矩估计(类似于 RMSProp),其更新公式相对复杂一些:
,
,其中
和
是衰减因子,通常分别设置为0.9和0.999。在实际应用中,Adam 算法在很多情况下都表现出良好的性能,能够快速收敛并且对超参数的设置相对不那么敏感,但在某些特定场景下,其他优化算法可能会更合适,需要根据具体的任务和数据集进行选择和调整。
(二)模型评估与调优
- 模型评估指标
在计算机视觉模型训练完成后,需要对模型的性能进行全面评估,以确定模型的优劣和泛化能力。对于图像分类任务,常用的评估指标包括准确率(Accuracy)、精确率(Precision)、召回率(Recall)和 F1 值等。准确率是指模型正确预测的样本数占总样本数的比例,它直观地反映了模型的整体预测正确性。精确率衡量了模型预测为正类且实际为正类的样本比例,它关注的是模型预测为正类的准确性;召回率则表示实际为正类且被模型预测为正类的样本比例,它侧重于模型对正类样本的覆盖程度。F1 值是精确率和召回率的调和平均值,综合考虑了两者的平衡,能够更全面地评估分类模型的性能。例如,在一个包含 1000 张图像的测试集中,有 800 张图像被正确分类,那么准确率为800/1000=0.8。如果其中预测为某一类别的图像有 60 张,而实际属于该类别的图像有 50 张,那么精确率为50/60=0.83,召回率为50/55=0.91(假设实际该类别共有 55 张图像),F1 值则为2x0.83x0.91/(0.83+0.91)=0.87。
对于目标检测任务,评估指标更为复杂。平均精度(Average Precision,AP)是一个常用的指标,它综合考虑了不同召回率下的精确率。首先计算每个类别在不同置信度阈值下的精确率 - 召回率曲线(Precision - Recall Curve),然后通过对该曲线下面积的计算得到该类别的 AP 值,最后对所有类别的 AP 值求平均得到平均平均精度(Mean Average Precision,mAP)。例如,在一个包含 20 个类别的目标检测任务中,分别计算每个类别的 AP 值,再将这些值求平均得到 mAP,mAP 值越高,说明模型在整体目标检测性能上越好,既能准确地检测到目标,又能减少误报。
在图像分割任务中,常用的评估指标有像素准确率(Pixel Accuracy)、平均交并比(Mean Intersection over Union,mIoU)等。像素准确率是指预测正确的像素数占总像素数的比例,它反映了模型对图像像素分类的整体准确性。mIoU 则是计算预测分割结果与真实分割结果之间的交并比(Intersection over Union,IoU),并对所有类别求平均。IoU 的计算公式为,其中TP表示真正例(True Positive,即预测为正类且实际为正类的像素数),FP表示假正例(False Positive,即预测为正类但实际为负类的像素数),FN表示假反例(False Negative,即预测为负类但实际为正类的像素数)。mIoU 能够更细致地评估模型在不同类别上的分割准确性,例如在医学图像分割中,mIoU 可以衡量模型对不同器官或病变区域的分割精度,帮助医生更好地判断模型的可靠性。
2. 超参数调整
计算机视觉模型中有许多超参数需要精心调整,这些超参数对模型的性能有着显著的影响。例如,学习率是优化算法中的关键超参数,不同的学习率会导致模型训练过程和结果有很大差异。如果学习率过大,模型可能在训练过程中跳过最优解,导致无法收敛甚至发散;如果学习率过小,模型训练将非常缓慢,需要更多的训练时间和计算资源。除了学习率,还有网络层数、每层神经元数量、卷积核大小、池化步长、批处理大小(Batch Size)、训练轮数(Epochs)等超参数。调整超参数的方法通常有手动调整、网格搜索(Grid Search)和随机搜索(Random Search)等。手动调整需要根据经验和对模型的理解,逐个尝试不同的超参数值,观察模型性能的变化,这种方法比较耗时,但在某些情况下可以凭借经验快速找到一些较好的超参数组合。网格搜索则是通过穷举所有可能的超参数组合,在验证集上评估每个组合的模型性能,然后选择性能最佳的组合。例如对于学习率可能取值0.001、0.01、0.1,网络层数可能取2、3、4值,每层神经元数量可能取值32、64、128等,网格搜索会遍历所有这些组合进行训练和评估。虽然网格搜索能够找到全局最优解,但当超参数数量较多或取值范围较大时,计算量会非常大。随机搜索则是在超参数的取值范围内随机采样一些组合进行评估,它不像网格搜索那样穷举所有可能,计算效率相对较高,在很多情况下也能找到较好的超参数组合,尤其是在超参数空间较大时,随机搜索往往比网格搜索更具优势。
七、计算机视觉实战项目
(一)图像分类项目
- 项目背景与目标
在当今数字化时代,图像数据海量增长,图像分类技术在众多领域有着广泛的应用需求,如社交媒体的图像自动标注、电商平台的商品图片分类、安防监控中的场景识别等。本图像分类项目旨在构建一个能够准确识别特定图像类别的模型,例如识别不同种类的花卉图像(玫瑰、百合、郁金香等)。通过对大量标注好的花卉图像数据进行学习,使模型能够自动提取图像的特征,并根据这些特征判断图像中花卉的类别,为相关领域的应用提供高效的图像分类服务。 - 数据准备与预处理
首先,需要收集大量的花卉图像数据,可以从公开的图像数据集(如 ImageNet 中的花卉子集)中获取部分数据,同时也可以通过网络爬虫等方式收集更多特定种类花卉的图像。收集到的数据需要进行预处理,以确保数据的质量和一致性。预处理步骤包括图像的裁剪、缩放、归一化等操作。裁剪操作可以去除图像中的无关背景信息,突出花卉主体;缩放操作则将不同尺寸的图像统一调整为模型所需的输入尺寸,例如将所有图像缩放为224x224像素;归一化操作将图像的像素值进行归一化处理,使其范围在 0 到 1 之间或 -1 到 1 之间,这样可以加快模型的训练速度并提高模型的稳定性。此外,还需要对图像数据进行标注,为每个图像标注其对应的花卉类别,构建训练集、验证集和测试集,通常按照 60%、20%、20% 的比例进行划分,以用于模型的训练、评估和测试。 - 模型选择与训练
针对图像分类任务,选择卷积神经网络(CNN)作为基础模型架构。可以从经典的 CNN 模型(如 AlexNet、VGGNet、ResNet 等)中选择一个合适的模型作为起点,或者根据项目的具体需求和数据特点构建自定义的 CNN 模型。例如,若花卉图像数据集中花朵种类较多且图像特征较为复杂,可以选择 ResNet 这样具有较深网络结构和残差连接的模型,以提高模型的特征提取能力和泛化能力。在模型训练过程中,使用准备好的训练集数据,采用合适的损失函数(如交叉熵损失函数用于分类任务)和优化算法(如随机梯度下降、Adam 优化算法等)进行训练。设置合适的训练参数,如学习率、训练轮数、批次大小等,并利用前面提到的交叉验证技术对模型进行评估和调优,观察模型在验证集上的损失函数值和准确率的变化情况,及时调整训练参数和模型结构,以提高模型的性能。例如,若发现模型在训练过程中出现过拟合现象,可以尝试增加正则化项(如 L2 正则化)、采用数据增强技术(如随机翻转、旋转图像等)或调整模型的复杂度(如减少网络层数或神经元数量)。
-
模型评估与部署
在模型训练完成后,使用测试集对模型进行最终评估,计算模型的准确率、精确率、召回率等评估指标,以全面了解模型在未知数据上的性能表现。如果模型的性能达到预期要求,则可以将模型进行部署应用。在部署方面,可以将训练好的 CNN 模型转换为适合生产环境的格式(如 TensorFlow 的 SavedModel 格式或 PyTorch 的 TorchScript 格式),然后将其集成到相应的应用程序或系统中。例如,在电商平台的商品图片分类系统中,可以将图像分类模型部署在服务器端,当商家上传商品图片时,服务器自动调用模型对图片进行分类,为商品添加正确的标签,方便用户搜索和筛选商品;在社交媒体的图像自动标注应用中,模型可以在用户上传图片时实时对图片进行分类标注,提高用户体验和社交平台的运营效率。
(二)目标检测项目
- 项目背景与目标
目标检测在智能安防、自动驾驶、工业检测等领域具有极其重要的地位。在智能安防领域,需要及时准确地检测监控画面中的人员、车辆等目标,以便进行安全预警和事件追踪;在自动驾驶场景中,车辆的自动驾驶系统必须能够快速精准地检测出道路上的行人、车辆、交通标志等目标,从而做出合理的驾驶决策;工业检测方面,则可用于检测产品表面的缺陷、零部件的装配情况等。本目标检测项目旨在构建一个高效准确的目标检测模型,例如能够在城市交通监控视频中检测出各类车辆(轿车、公交车、卡车等)和行人,并确定其位置和边界框。通过对大量标注有目标信息的交通图像和视频数据进行学习,使模型具备在复杂场景下快速准确地检测目标的能力,为相关领域的智能化应用提供有力支持。 - 数据准备与预处理
收集大量包含目标的图像和视频数据,如交通监控视频数据、自动驾驶场景数据等。对于图像数据,进行与图像分类项目类似的预处理操作,包括裁剪、缩放、归一化等,以统一图像尺寸和像素值范围,便于模型处理。对于视频数据,需要先将其分解为帧图像序列,然后对每一帧图像进行预处理。同时,要对图像和视频中的目标进行精确标注,标注信息包括目标的类别、边界框的坐标(左上角和右下角坐标或中心点坐标、宽度和高度)等,构建训练集、验证集和测试集。在标注过程中,可使用专门的标注工具,如 LabelImg 等,提高标注效率和准确性。标注完成后,将标注数据与图像数据进行关联整合,以便在模型训练过程中使用。 - 模型选择与训练
根据项目需求和场景特点选择合适的目标检测模型架构。对于对实时性要求较高的场景,如自动驾驶中的目标检测,可考虑选择一阶段目标检测算法,如 YOLO 系列。以 YOLOv5 为例,它在保持较高检测速度的同时,不断提升检测精度。在训练时,将预处理后的图像数据输入到模型中,模型根据设定的损失函数(如 YOLO 系列的综合损失函数,包含分类损失、边界框回归损失和置信度损失)和优化算法(如 SGD 或 Adam 优化算法)进行训练。调整训练参数,如学习率、批次大小、迭代次数等,并通过在验证集上的评估结果来优化模型。若选择二阶段目标检测算法,如 Faster R - CNN,则需要先训练区域建议网络(RPN),然后再联合训练 RPN 和 Fast R - CNN 部分,利用其对候选区域精细处理的优势,提高检测精度,适用于对检测精度要求极高的场景,如工业产品缺陷检测中的微小目标检测。 - 模型评估与部署
使用测试集对训练好的目标检测模型进行评估,计算平均精度(AP)、平均平均精度(mAP)等评估指标,评估模型对不同目标类别的检测准确性和定位精度。如果模型性能满足要求,即可进行部署应用。在智能安防系统中,将模型部署在监控服务器或边缘设备上,实时处理监控视频流,一旦检测到异常目标(如闯入的陌生人、违规停放的车辆等),立即发出警报并记录相关信息;在自动驾驶车辆中,将目标检测模型集成到车辆的自动驾驶系统中,与其他模块(如传感器融合模块、决策规划模块等)协同工作,为车辆的安全行驶提供目标信息保障,例如及时检测到前方的行人或车辆,以便车辆提前减速或避让。
(三)图像分割项目
- 项目背景与目标
图像分割在医学影像分析、图像编辑、地理信息系统等领域有着广泛的应用。在医学影像领域,例如对脑部磁共振成像(MRI)或计算机断层扫描(CT)图像进行分割,可以帮助医生精确地识别出不同的组织器官(如大脑、肿瘤、血管等),辅助疾病的诊断、治疗方案的制定和手术规划;在图像编辑方面,可用于将图像中的主体与背景分离,实现背景替换、图像合成等特效;在地理信息系统中,对卫星遥感图像进行分割能够提取出不同的地理要素(如河流、森林、城市区域等),为地理研究和资源管理提供数据支持。本图像分割项目以医学影像分割为例,目标是构建一个能够准确分割医学图像中特定组织器官的模型,如对肺部 CT 图像进行分割,精确地提取出肺部组织以及可能存在的病变区域(如结节、炎症等)。通过对大量标注好的医学图像数据进行学习,使模型能够理解图像中不同组织器官的特征差异,从而实现精准的图像分割,提高医学诊断的准确性和效率。 - 数据准备与预处理
收集大量的医学图像数据,如肺部 CT 扫描图像、脑部 MRI 图像等。由于医学图像数据通常具有较大的尺寸和较高的分辨率,为了便于模型处理和训练,需要进行图像的裁剪、缩放等操作,同时要注意保留图像中的关键信息。例如,在肺部 CT 图像预处理中,可以裁剪掉图像中无关的身体部位区域,将图像缩放至合适的尺寸,如512x512像素。医学图像的像素值通常具有特定的物理意义(如 CT 值反映组织的密度),可能需要进行归一化处理,将像素值映射到合适的范围,如 0 到 1 之间。此外,对医学图像中的组织器官进行精确标注是图像分割项目的数据准备关键环节,标注工作需要专业的医学知识,通常由医生或经过专业培训的人员使用专门的标注工具(如 ITK - SNAP、3D Slicer 等)进行标注,标注信息为每个像素所属的组织器官类别,构建训练集、验证集和测试集,确保数据的分布和比例合理,以有效训练和评估模型。 - 模型选择与训练
针对医学图像分割任务,可选择语义分割模型,如 U - Net 及其变体。U - Net 的编码器 - 解码器结构能够有效地提取图像的高层语义特征并恢复图像的细节信息,在医学图像分割中表现出色。在训练过程中,将预处理后的医学图像数据输入到模型中,采用像素级别的交叉熵损失函数来衡量模型预测结果与真实标注之间的差异,并使用优化算法(如 Adam 优化算法)对模型参数进行更新。根据模型在验证集上的性能表现,调整训练参数,如学习率、训练轮数、批次大小等,同时可以考虑采用数据增强技术,如随机旋转、翻转、弹性变形等,增加训练数据的多样性,提高模型的泛化能力。由于医学图像数据的特殊性和标注的困难性,模型训练可能需要较长的时间和大量的计算资源,并且要特别注意避免过拟合现象,可通过增加正则化项(如 L2 正则化)或采用早停法(Early Stopping)等策略来控制。 - 模型评估与部署
使用测试集对训练好的图像分割模型进行评估,计算像素准确率、平均交并比(mIoU)等评估指标,评估模型对不同组织器官的分割准确性。如果模型性能达到预期要求,可将模型部署到医学影像诊断系统中。在实际应用中,医生将患者的医学图像导入系统,模型自动对图像进行分割,生成不同组织器官的分割结果,如清晰地勾勒出肺部的轮廓和内部病变区域的边界,并将分割结果以可视化的方式呈现给医生,医生可根据这些结果更准确地判断病情、制定治疗方案,例如确定肿瘤的位置、大小和形状,为手术切除或放疗等治疗手段提供精确的定位信息,从而提高医疗诊断的质量和效率,为患者的治疗带来更好的效果。
八、学习资源与学习建议
(一)学习社区与论坛
- 江大白:号主江大白是国内某大厂的 AI 图像视觉总监,有 10 年 AI 算法开发及管理经验。其创办的网站有超过 600W + 的访问量,专注于计算机视觉技术在各业务场景内的产品开发、算法优化、应用落地等,网站上有许多优质的技术文章和实战经验分享.
- 自动驾驶之心:国内最大的自动驾驶开发者社区,主要关注计算机视觉、深度学习、BEV 感知、2D/3D 检测、语义 / 实例 / 全景分割、深度估计、目标跟踪、多传感器 / 多模态融合感知、SLAM 与高精地图、AI 模型部署、领域方案与行业招聘等方向,公众号集视频创作、顶会直播、前沿论文解读、最新职位分享为一体.
- 计算机视觉工坊:由多位 985 硕博士共同运营,主要专注 3D 视觉、计算机视觉算法、SLAM、三维点云处理、三维重建、自动驾驶、图像处理等领域技术干货分享,关注计算机视觉算法及产业落地,添加微信备注 “公开课”,可免费领取计算机视觉精品公开课视频与课件资料.
- CVHub:专注于计算机视觉领域的高质量知识分享平台,全站技术文章原创率达 99%,每日为用户呈献全方位、多领域、有深度的前沿 AI 论文解读及配套的行业级应用解决方案,提供科研、技术、就业一站式服务.
- 极市平台:专注于 CV 领域,每年都会输出许多高质的 CV 干货内容资源,包括顶会论文解读、大咖技术直播、面试面经、开源数据集资源汇总等,内容涵盖了零基础到进阶,还提供了真实项目实践、算法竞赛、实训营等各类实践机会.
(二)论文与代码资源平台
- Papers with Code:创建了一个包含机器学习论文、代码、数据集、方法和评估表的免费开放资源。该平台定期更新计算机视觉和人工智能其他子领域的最新论文和资源,便于查找资源且提供了大量的免费数据集.
- Model Zoo:由 google 的研究工程师 jing yu koh 创建,为深度学习研究人员提供了一个可以快速找到适用于各种平台和任务的预训练模型的平台。该站点会定期更新,并提供过滤功能,以根据计划使用的机器学习框架或手头任务的类别找到合适的模型.
- Open Model Zoo:适用于 OpenVINO™工具包的 Open Model Zoo 提供了各种免费、高度优化的预训练深度学习模型,这些模型在英特尔 CPU、GPU 和 VPU 上运行速度极快,包含 200 多个用于对象检测、分类、图像分割、手写识别、文本到语音、姿势估计等任务的神经网络模型.
- TensorFlow Model Garden:是一个包含许多最先进模型的存储库,其中的模型分为官方、研究、社区三种类型。此存储库的目的是通过在提供的默认配置、数据集和微调可用模型检查点的基础上,为用户提供训练自己模型的构建块,还提供了训练日志,以帮助重现可用模型的训练结果.
- TensorFlow Hub:与 TensorFlow Model Garden 不同,该平台上的模型是即用型的,旨在用作具有设定输入和输出的黑匣子。用户可以发现并下载从知名资源发布的数百个训练有素、可立即部署的机器学习模型,并为模型提供了所有部署详细信息,如输入和输出格式、使用的数据集以及预期的性能指标等,以帮助用户为任务选择最佳模型.
(三)在线课程与教程网站
- Coursera:提供来自世界各地大学和机构的计算机视觉相关课程,如 “计算机视觉基础”“高级计算机视觉” 等专项课程,由专业教师授课,包含视频讲座、作业、测验等学习环节,有助于系统学习计算机视觉知识。
- edX:同样汇聚了多所知名高校的计算机视觉课程,像麻省理工学院的 “计算机视觉导论” 等课程,提供高质量的教学内容和学习体验,部分课程完成后还可获得证书。
- Udemy:有大量由行业专家和从业者开设的计算机视觉课程,如 “Python 计算机视觉实战”“深度学习与计算机视觉” 等,课程内容注重实践操作,适合想要快速掌握实际应用技能的学习者。
- 网易云课堂:集合了众多机构和个人上传的计算机视觉课程,有免费和付费的课程可供选择,例如 “计算机视觉入门基础” 等课程,内容丰富多样,可满足不同层次学习者的需求。
相关文章:
计算机视觉:学习指南
一、引言 计算机视觉作为人工智能领域的一个重要分支,致力于让计算机理解和解释视觉信息,近年来取得了令人瞩目的进展,广泛应用于安防监控、自动驾驶、图像编辑、医学影像分析等众多领域。从入门到精通计算机视觉需要系统地学习一系列知识和…...
创建型设计模式
一、设计模式介绍 1.设计模式是什么 设计模式是指在软件开发中,经过验证的,用于解决在特定环境下,重复出现的,特定问题的解决方案; 2.设计模式怎么来的? 满足设计原则后,慢慢迭代出来的。 3.设…...
【Ubuntu】使用ip link工具创建虚拟局域网并配置?
🦋🦋🦋如何使用ip link工具创建虚拟局域网? sudo ip link add link enx888bd66b7000 name enx.120 type vlan id 120 上述命令使用ip link工具在Linux系统中创建了一个新的虚拟局域网(VLAN)接口,…...
川渝地区软件工程考研择校分析
通过最新数据分析,5所高校软件工程专业2025年考研难度从高到低预计为: 电子科技大学 >> 四川大学 > 重庆大学 ≈ 西南交通大学 > 西南大学 对于想考川渝地区985但核心目标为优先上岸的考生,建议重点考虑西南交通大学软件工程学硕。该校24届软件工程学硕实际录取1…...
云原生基础设施指南:精通 Kubernetes 核心与高级用法
1. 云原生的诞生 随着互联网规模的不断增长,以及企业对敏捷开发、快速交付和高可用性的需求日益增强,传统的单体架构逐渐暴露出局限性,难以满足现代业务对动态扩展和高效迭代的要求。为此,云原生应运而生。 云原生是为云计算时代…...
Pyinstaller使用指南以及遇到的问题
一、在cmd命令行执行安装pyinstaller工具 pip install pyinstaller 二、在命令行中执行打包命令即可 格式如下: pyinstaller [opts] yourprogram.py 参数含义 -F 指定打包后只生成一个exe格式的文件(建议写上这个参数) -D –onedir 创建一个目录,包含…...
美图撕掉蔡文胜标签
卖掉比特币的美图不投机了。 作者|周立青 编辑|杨舟 12月5日,比特币突破10万美元大关,曾花费1亿美元购入虚拟货币的美图宣布已出售所有加密货币。 美图在港交所发布公告称,自2024年11月起,公司已开始出售其持有的加密货币&…...
【Spring】IoC和DI,控制反转,Bean对象的获取方式
阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 一:什么是IoC 1:什么是容器 2:什么是IoC 二:IoC应用…...
【015】对文件进行压缩_#py
对文件进行压缩 1. 下载7z软件2. 调用exe文件3. 压缩和分卷压缩4. 完整代码 1. 下载7z软件 从官网下载https://www.7-zip.org/软件。 2. 调用exe文件 主要是通过 subprocess 调用对应的command的命令。 subprocess.run(command, checkTrue)其中 command 的应包含7z软件的ex…...
OD C卷【智能成绩表】
题目 小明来到某学校当老师,需要将学生按考试总分或单科分数进行排名。 输入描述: 第一行输入学生人数n、科目数量m; 0<n<100; 0<m<10 第二行输入m个科目名称,以空格分开;科目只由英文字母构成,长度不超过…...
开源架构与云计算的传奇融合
开源架构与云计算的传奇融合 一、引言二、开源架构与云计算的卓越优势(一)成本效益惊世骇俗(二)灵活性与可扩展性无与伦比(三)社区支持与创新活力爆棚 三、震撼应用案例剖析(一)容器…...
【SpringBoot-事件监听】
文章目录 1. 定义事件2. 创建监听器3. 发布事件注意事项 在Spring Boot中,事件监听是一种常用的机制,用于在应用程序的不同部分之间进行松耦合的通信。Spring Boot基于Spring框架,因此它继承了Spring的事件发布和监听机制。以下是如何在Sprin…...
【docker】springboot 服务提交至docker
准备docker (不是docker hub或者harbor,就是可以运行docker run的服务),首先确保docker已经安装。 本文以linux下举例说明: systemctl stats docker ● docker.service - Docker Application Container EngineLoaded…...
Facebook广告突然无消耗?原因解析与解决方案。
在Facebook广告投放中,广告突然无消耗是很多广告主都会遇到的难题。这种情况不仅浪费时间,还可能导致营销活动停滞,影响业务发展。那么,广告无消耗的原因是什么?又该如何解决呢? 一、Facebook广告无消耗的…...
05 在 Linux 使用 AXI DMA
DMA简介 DMA 是一种采用硬件实现存储器与存储器之间或存储器与外设之间直接进行高速数据传输的技术,传输过程无需 CPU 参与(但是CPU需要提前配置传输规则),可以大大减轻 CPU 的负担。 DMA 存储传输的过程如下: CPU 向…...
android AIDL ipc binder转换
一. 概述 众所周知AIDL并不是所有的数据类型都可以传输。 可以传输的类型包括: 1.原生类型 2.String 3. CharSequence 4. List 5.Map 6. Binder 7. Parcelable 容器类 parcelable传输的时候会分解成成员,数组item的方式,传输完成后再进行…...
【docker】12. Docker Volume(存储卷)
什么是存储卷? 存储卷就是将宿主机的本地文件系统中存在的某个目录直接与容器内部的文件系统上的某一目录建立绑定关系。这就意味着,当我们在容器中的这个目录下写入数据时,容器会将其内容直接写入到宿主机上与此容器建立了绑定关系的目录。 在宿主机上…...
1. 机器学习基本知识(4)——机器学习测试和验证
1.6 测试和验证 了解模型对新实例的泛化能力的唯一方法是在新实例上进行实际尝试。 一种方法是将模型部署到生产环境并监控其性能。 这种方法很有效,但如果模型非常糟糕,你的用户就会抱怨,所以这显然不是最好的方法。 更好的选择是将数…...
生成式AI概览与详解
1. 生成式AI概览:什么是大模型,大模型应用场景(文生文,多模态) 生成式AI(Generative AI)是指通过机器学习模型生成新的数据或内容的人工智能技术。生成式AI可以生成文本、图像、音频、视频等多种…...
软件项目标书参考,合同拟制,开发合同制定,开发协议,标书整体技术方案,实施方案,通用套用方案,业务流程,技术架构,数据库架构全资料下载(原件)
1、终止合同协议书 2、项目合作协议 3、合同交底纪要 4、合同管理台账 软件资料清单列表部分文档清单:工作安排任务书,可行性分析报告,立项申请审批表,产品需求规格说明书,需求调研计划,用户需求调查单&…...
C++ extern “C“ 用法
extern “C” 由于c中需要支持函数重载,所以c和c中对同一个函数经过编译后生成的函数名是不相同的 extern “C” 的主要作用就是为了实现c代码能够调用其他 c 语言代码。 1(不常用) //告诉编译器 show() 函数按c语言的方式进行编译和链接 extern "C" voi…...
Node.js(v16.13.2版本)安装及环境配置教程
一、进入官网地址下载安装包 https://nodejs.org/zh-cn/download/ 选择对应你系统的Node.js版本,这里我选择的是Windows系统、64位(v16.13.2版本) 下载后的zip文件 二、解压文件到nodejs,并打开文件夹nodejs,复制解压…...
父组件调用子组件的方法
父组件 在父组件中调用子组件的sayHello()函数 <template><div><button click"getChild(wendu)">触发子组件方法wendu</button><button click"getChild(shidu)">触发子组件方法shidu</button><el-dialog v-model…...
运维排错系列:Excel上传失败,在剪切板有大量信息。是否保存其内容...
问题点 在导入 Excel 数据到 SAP 的时候,某些时刻系统会出现如下的弹窗。 上载 excel 文件时,您会收到错误:“剪贴板上有大量信息。XXX” Microsoft Office Excel 的弹出窗口显示以下信息: 剪贴板上存在大量信息。是否保留其内容…...
【自学】Vues基础
学习目录 Vues基础本地应用网络应用综合应用 工具的准备 我个人比较喜欢使用HTMLDROWNER,学习资料推荐使用VC,仅供选择吧 前置知识 HTMLCSSJSAJAX:这个是学习资料博主推荐的 个人感觉认真学好HTMLCSSJS理解vues基础很容易上手 官方网址…...
ubuntu 7z解压rar文件报错:unsupported method message
问题说明 最近项目需要支持线上上传rar格式,7z来解压缩入库。开发测试过程中发现使用以下命令解压报错, 7z x FileImportTest01.rar -p"123456" -o/home/download -y文件目录内容已列出,但无法解压文件!!! 仔细检查命令没有问题…...
C语言基础六:循环结构及面试上机题
Day06:循环结构 定义 代码的重复执行,就叫做循环 循环的分类 无限循环:其实就是死循环,程序设计中尽量避免无限循环。程序中的无限循环必须可控。有限循环:循环限定循环次数或者循环的条件。 循环的构成 循环条件循环体 当型循环的实现…...
【蓝桥杯每日一题】技能升级
技能升级 2024-12-10 蓝桥杯每日一题 技能升级 二分 题目大意 一个角色有 N 种可以增加攻击力的技能,对于第 i 个技能首次升级可以提升 A i A_i Ai 点攻击力,随后的每次升级增加的攻击力都会减少 B i B_i Bi 。升级 ⌈ A i B i ⌉ \lceil \frac{A…...
C++作业4
1、思维导图 2、Person和Stu的拷贝构造和拷贝赋值函数 #include <iostream> using namespace std; class Person {string name;int *age; public:Person():age(new int(23)){cout << "Person的无参构造" << endl;}//初始化列表 :成员属性1(值),成…...
密码学——密码学基础、散列函数与数字签名
1.密码学概述 是信息安全的基础和核心,是防范各种安全威胁的重要手段,信息安全的许多相关知识都与密码学相关。 密码学发展 密码学是一门古老而又年轻的学科 ,几千年以前就存在,至今仍在发展演进。地位非常重要甚至起决定性作用…...
鹦鹉的饮食偏好:探索多彩的食物世界
鹦鹉,作为聪明且迷人的鸟类,其饮食习性一直是鸟类爱好者关注的焦点。了解鹦鹉喜欢吃什么食物,对于确保它们的健康与幸福至关重要。 鹦鹉的食物种类丰富多样,首先是各类种子与谷物。例如,葵花籽富含脂肪和蛋白质&#…...
AtCoder Beginner Contest 383
C - Humidifier 3 Description 一个 h w h \times w hw 的网格,每个格子可能是墙、空地或者城堡。 一个格子是好的,当且仅当从至少一个城堡出发,走不超过 d d d 步能到达。(只能上下左右走,不能穿墙)&…...
HALCON算子函数 Filter(过滤)(1)
Arithmetic图像算数处理 abs_diff_image:计算两个图像的绝对差别;abs_image:计算一个图像的绝对值(模数);add_image:使两个图像相加;div_image:使两个图像相除ÿ…...
哈希知识详解
目录 一、哈希 二、哈希函数 1、直接定值法 2、除留余数法 三、哈希冲突 四、哈希冲突解决 1、闭散列(开放定值法) 闭散列代码 2、哈希桶 哈希桶的结构 查找方法 插入方法 删除方法 析构 迭代器 完整哈希桶代码 五、通过哈希桶封装 unordered_map 和 unordered_set 一、…...
分库分表基本概念讲解
一、基本概念 产生背景 在数据爆炸的年代,单表数据达到千万级别,甚至过亿的量,都是很常见的情景。这时候再对数据库进行操作就是非常吃力的事情了,select个半天都出不来数据,这时候业务已经难以维系。不得已…...
【DRAM存储器四十二】LPDDR5介绍--LPDDR5的bank架构还能配,为什么8B模式只支持BL32?
👉个人主页:highman110 👉作者简介:一名硬件工程师,持续学习,不断记录,保持思考,输出干货内容 参考资料:《某LPDDR5数据手册》 、《JESD209-5C》 目录 BG mode 16B mode 8B mode...
ubuntu 新建脚本shell并增加图标 双击应用实现python运行
1.使用nano创建shell脚本文件 需要在终端窗口中输入“nano”以打开文本编辑器。 nano 在创建脚本文件前,我们要了解脚本文件是如何运行的: 直接运行:直接在终端直接输入需要运行的脚本文件名称,系统或用缺省版本的shell运行脚…...
【0x0006】HCI_Disconnect命令详解
目录 一、命令概述 二、命令格式和参数说明 2.1. HCI_Disconnect 命令格式 2.2. Connection_Handle 2.3. Reason 三、返回事件说明 3.1. HCI_Command_Status 事件 3.2. HCI_Disconnection_Complete事件 3.3. HCI_LE_CIS_Established事件(针对CIS) 四、事件执行流程…...
【C语言练习(5)—回文数判断】
C语言练习(5) 文章目录 C语言练习(5)前言问题问题解析结果总结 前言 通过回文数练习,巩固数字取余和取商如何写代码 问题 输入一个五位数判断是否为回文数? 问题解析 回文数是指正读反读都一样的整数。…...
【全连接神经网络】核心步骤及其缺陷
前向传播 计算公式(其中一种) x1/x2:输入值,一般是神经网络上一层的输出或者输入数据本身,上图中表示两个节点w11 w13:权重,在神经网络中,权重是学习的参数,表示每个输入…...
【Vulkan入门】11-CreateCommandBuffer
[TOC]目录 先叨叨 先叠个甲,我个人都觉得本篇有点灌水的嫌疑。 到上篇为止,已经创建好了Pipeline。接下来就是要给Pipeline发指令进行渲染了。 从一开始就不断强调,发给Vulkan的指令要通过Queue发送给Device。命令不是一条一条推到Queue中的…...
Redis原理—4.核心原理摘要
大纲(9870字) 1.Redis服务器的Socket网络连接建立 2.Redis多路复用监听与文件事件模型 3.基于队列串行化的文件事件处理机制 4.完整的Redis Server网络通信流程 5.Redis串行化单线程模型为什么能高并发 6.Redis内核级请求处理流程与原理 7.Redis通信协议与内核级请求数据…...
面向对象系统的分析和设计
来源:《设计模式精解-GOF23种设计模式解析》 作者:k_eckel k_eckels mindview - 博客园 (cnblogs.com) --------- 面向对象系统的分析和设计实际上追求的就是两点: (1)高内聚 (2)低耦合 …...
单片机:实现交通信号灯(附带源码)
使用单片机实现交通信号灯控制系统是一个经典的嵌入式系统应用。这个项目可以帮助你理解如何通过单片机控制不同颜色的LED灯、处理时间控制、以及输入输出的基本操作。通过这个项目,你将掌握如何设计交通信号灯的时序控制、如何实现定时控制交通灯的切换、以及如何与…...
小白如何学习看懂CAD图纸?
首先,你需要了解CAD图纸的基本构成,包括图例、尺寸标注、比例等等。接着,你可以通过一些专业的书籍、在线课程或视频教程来逐步学习如何识别和理解这些元素。但建议不要学的太复杂了。 掌握基本概念: 坐标系:了解CAD…...
HarmonyOS-高级(一)
文章目录 一次开发、多端部署自由流转 🏡作者主页:点击! 🤖HarmonyOS专栏:点击! ⏰️创作时间:2024年12月09日12点19分 一次开发、多端部署 布局能力 自适应布局 拉伸能力均分能力占比能力缩放…...
Datawhale AI 冬令营(第一期)定制你的第一个专属模型-学习笔记
最近我报名参加了Datawhale组织的主题为“动手学系列,人人都能应用的AI”的Datawhale AI冬令营(第一期)。 本次学习一共12天,从12月10日-12月21日,学习会包含【跑通速通手册】,【学习大模型微调&数据集…...
群控系统服务端开发模式-应用开发-登录退出发送邮件
一、登录成功发送邮件 在根目录下app文件夹下controller文件夹下common文件夹下,修改Login.php,代码如下 <?php /*** 登录退出操作* User: 龙哥三年风水* Date: 2024/10/29* Time: 15:53*/ namespace app\controller\common; use app\controller\Em…...
app-2 App 应用抓包之 Postern+Charles
一、前言 本篇是基于 Postern Charles 方式对安卓应用数据包进行抓取。可以抓取到市面上大多数的app数据包。 二、环境准备 postern:postern下载地址 charles:Charles 4.5.6 中文版(便携免安装).rar 提取码:6d8f 三、配置及抓包测试 3.…...
cnocr配置及训练测试
cnocr配置及训练测试 1,相关链接2,已有模型调用测试(1)下载相关模型(2)Cnstd文本检测模型(3)模型调用解析脚本 3,自定义数据集训练测试(1)标签转换…...