人工智能--图像语义分割

2a20c54b85e042bfa2440367ae4807e9.gif

个人主页:欢迎来到 Papicatch的博客

课设专栏 :学生成绩管理系统

 专业知识专栏:专业知识

文章目录

🍉引言

🍉介绍

🍈工作原理

🍍数据准备

🍍特征提取

🍍像素分类

🍍模型训练

🍍模型评估与优化

🍈关键技术

🍍特征提取

🍍上采样和下采样

🍍注意力机制

🍍多尺度融合

🍍损失函数

🍉分割方法

🍈基于阈值的分割方法

🍍基本原理

🍍阈值的选择

🍍优点

🍍缺点

🍍应用场景

🍍改进方法

🍈基于边缘检测的分割方法

🍍基本原理

🍍常见的边缘检测算子

🍍优点

🍍缺点

🍍应用场景

🍍改进和扩展

🍈基于区域的分割方法

🍍基本原理

🍍常见的基于区域的分割方法

🍍相似性准则

🍍优点

🍍缺点

🍍应用场景

🍍改进和发展

🍈基于聚类的分割方法

🍍优点

🍍缺点

🍍应用场景

🍈基于图的分割方法

🍍优点

🍍缺点

🍍应用场景

🍈基于深度学习的分割方法

🍍优点

🍍缺点

🍍应用场景

🍉示例

 🍈以下是一个使用 Python 和 TensorFlow 实现简单的全卷积网络(FCN)进行自然图像分割的示例。

🍈以下是一个使用 Python 和 TensorFlow 实现简单的 U-Net 模型进行医学图像分割的示例

🍉总结


2a20c54b85e042bfa2440367ae4807e9.gif

🍉引言

        图像语义分割是计算机视觉领域中的一项重要任务,它旨在将图像中的每个像素分配一个特定的类别标签,从而实现对图像内容的精细理解和划分。

        在人工智能的背景下,图像语义分割技术取得了显著的进展。它的应用范围广泛,包括自动驾驶、医学图像分析、卫星图像解译、虚拟现实和增强现实等领域。

🍉介绍

🍈工作原理

        图像语义分割的工作过程主要包含以下几个关键步骤:

🍍数据准备

        首先,需要收集大量的图像数据,并对这些图像中的每个像素进行类别标注。标注的类别可以是物体类别,如人、车、建筑物等,也可以是场景类别,如室内、室外、森林等。 

🍍特征提取

        使用深度卷积神经网络(CNN)来自动提取图像的特征。CNN 由多个卷积层和池化层组成。卷积层通过卷积操作来捕捉图像中的局部模式和特征,池化层则用于降低特征图的分辨率,减少计算量并提取主要特征。在这个过程中,图像从原始的像素空间被转换为抽象的特征空间。 

🍍编码 - 解码结构
许多图像语义分割模型采用编码 - 解码的结构。编码部分(通常是一系列卷积和池化层)逐渐降低图像的分辨率,提取高级语义特征。解码部分(通常包含上采样和反卷积操作)则逐步恢复图像的分辨率,将抽象的语义特征映射回像素空间,以实现像素级的分类预测。

🍍像素分类

        在特征提取和映射的基础上,对每个像素进行分类。通过在网络的最后一层使用 softmax 函数或其他分类器,为每个像素计算属于不同类别的概率。最终,根据概率分布为每个像素分配一个确定的类别标签。 

🍍模型训练

        使用准备好的带有标注的图像数据对模型进行训练。通过不断调整网络的参数,使得模型的预测结果与真实的标注尽可能接近。训练过程中,使用损失函数来衡量预测结果与真实标签之间的差异,常见的损失函数如交叉熵损失、Dice 损失等。通过反向传播算法来更新网络参数,优化模型性能。 

🍍模型评估与优化

        使用验证集或测试集对训练好的模型进行评估,常见的评估指标包括像素准确率、平均交并比(mIoU)等。根据评估结果,对模型进行进一步的优化,例如调整网络结构、超参数,或者使用更先进的技术如注意力机制、多尺度融合等。

        例如,对于一张包含汽车和道路的图像,模型会先提取图像中关于汽车和道路的特征,然后对每个像素判断其是属于汽车还是道路的类别,最终实现将汽车和道路在像素级别上进行准确的分割。

        再比如,在医学图像中,对肿瘤的分割,模型会学习肿瘤的特征,然后为图像中的每个像素判断其是否属于肿瘤区域,从而辅助医生进行诊断和治疗规划。

🍈关键技术

🍍特征提取

  • 特征提取是图像语义分割的基础。常用的特征提取方法基于卷积神经网络(CNN)。
  • 卷积层能够自动学习图像中的局部特征,通过不同大小的卷积核来捕捉不同尺度的信息。例如,较小的卷积核可以提取细节特征,如边缘和纹理;较大的卷积核则能获取更宏观的特征,如物体的形状。
  • 池化层用于降低特征图的分辨率,减少计算量并实现一定的平移不变性。但过度的池化可能会导致信息丢失,因此一些先进的方法采用了空洞卷积来在不降低分辨率的情况下扩大感受野。

🍍上采样和下采样

  • 下采样通过卷积和池化操作降低图像的分辨率,提取抽象的语义信息,但会丢失空间细节。
  • 上采样则相反,用于恢复图像的分辨率,将低分辨率的特征图映射回原始图像大小。常见的上采样方法包括双线性插值、反卷积等。
  • 例如,在卫星图像分割中,下采样用于获取大范围的地理特征,而上采样则能精确描绘小区域的细节。

🍍注意力机制

  • 注意力机制使模型能够聚焦于图像中的重要区域,从而提高分割的准确性。
  • 空间注意力机制可以根据像素之间的空间关系来分配权重,突出重要的空间位置。
  • 通道注意力机制则关注不同特征通道的重要性,为更有价值的通道赋予更高的权重。
  • 比如在场景复杂的图像中,注意力机制能够让模型优先关注主要物体,而不是被背景干扰。

🍍多尺度融合

  • 由于图像中的物体大小不一,单一尺度的特征可能无法很好地进行分割。
  • 多尺度融合方法将不同层次和尺度的特征进行组合。
  • 例如,通过金字塔池化模块获取不同尺度的特征图,并进行融合,从而能够同时分割大物体和小物体。

🍍损失函数

  • 损失函数用于衡量模型预测结果与真实标签之间的差异,引导模型的训练。
  • 常见的损失函数有交叉熵损失、Dice 损失等。
  • 交叉熵损失常用于二分类和多分类问题,但对于类别不平衡的图像分割任务,Dice 损失可能更有效,它更关注前景区域的分割准确性。
  • 例如,在医学图像中,病变区域通常较小,使用 Dice 损失可以更好地优化分割模型。

🍉分割方法

🍈基于阈值的分割方法

        基于阈值的分割方法是一种简单而直接的图像分割技术,其核心思想是通过设定一个或多个阈值,将图像中的像素分为不同的类别或区域。

🍍基本原理

        该方法基于像素的灰度值、颜色值或其他特征值与设定阈值的比较来进行分类。如果像素的值大于阈值,则将其分配到一个类别;如果小于阈值,则分配到另一个类别。当使用多个阈值时,可以实现更复杂的多类别分割。

🍍阈值的选择

        全局阈值:为整个图像设定一个固定的阈值。选择全局阈值的方法包括手动选择、基于图像的灰度直方图分析(如选择直方图双峰之间的谷底作为阈值)等。

  • 例如,对于具有明显双峰灰度直方图的图像,可直观地确定阈值。

        局部阈值:根据像素的局部邻域信息来确定每个像素的阈值。这对于光照不均匀或对比度变化较大的图像更有效。

  • 比如在一张部分区域明亮、部分区域昏暗的图像中,局部阈值能更好地适应不同区域的特征。

🍍优点

  • 计算简单,效率高,尤其对于简单的图像能快速实现分割。
  • 不需要复杂的先验知识和模型训练。

🍍缺点

  • 对噪声较为敏感,噪声可能导致像素值的异常,从而影响阈值的选择和分割结果。
  • 对于复杂的图像,可能难以找到一个合适的全局阈值,导致分割不准确。

🍍应用场景

  • 目标和背景灰度差异明显的图像,如文档图像中的文字和背景分离。
  • 简单的工业检测图像,例如检测产品表面的缺陷。

🍍改进方法

        为了克服基于阈值分割方法的一些局限性,发展出了一些改进的方法,如自适应阈值法、多阈值结合形态学操作等。

🍈基于边缘检测的分割方法

     基于边缘检测的分割方法旨在通过识别图像中像素值的显著变化来确定物体的边界,从而实现图像分割。

🍍基本原理

     图像中的边缘通常对应着物体的轮廓、纹理的变化或者不同区域的交界。边缘检测算法通过计算像素及其邻域像素之间的差异来确定边缘的位置。这种差异可以通过梯度、导数等数学运算来衡量。

🍍常见的边缘检测算子

  • Sobel 算子:对水平和垂直方向分别进行卷积运算,得到相应方向的边缘强度。
  • Prewitt 算子:与 Sobel 算子类似,用于检测边缘。
  • Roberts 算子:计算对角方向上的梯度。
  • Canny 算子:被认为是一种较为优秀的边缘检测算法,具有较好的信噪比和定位精度。它包括高斯滤波平滑图像、计算梯度幅值和方向、非极大值抑制以及双阈值检测和边缘连接等步骤。

🍍优点

  • 能够有效地捕捉物体的轮廓信息,为图像分割提供重要的线索。
  • 计算相对简单,效率较高。

🍍缺点

  • 对噪声敏感,噪声可能会导致虚假边缘的出现。
  • 检测到的边缘可能不连续,需要后续的处理来连接边缘。
  • 只能检测到灰度值的变化,对于颜色或纹理复杂的区域可能效果不佳。

🍍应用场景

  1. 工业检测中对物体外形的提取。
  2. 医学图像中器官边界的确定。

🍍改进和扩展

        为了改善边缘检测的效果,常常会采取以下措施:

  1. 先对图像进行平滑去噪处理,再进行边缘检测。
  2. 结合其他分割方法,如区域生长,以利用边缘信息和区域信息来提高分割的准确性。

🍈基于区域的分割方法

        基于区域的分割方法是一种通过将具有相似特征的像素组合成区域来实现图像分割的技术。

🍍基本原理

        从初始的像素或小区域开始,根据预先定义的相似性准则,逐步合并或分裂这些区域,直到满足特定的终止条件。相似性可以基于像素的灰度值、颜色、纹理、形状等特征来衡量。

🍍常见的基于区域的分割方法

        区域生长法:选择一个或多个种子点作为起始,然后将邻域中与种子点具有相似特征的像素合并到当前区域,不断重复这个过程,直到没有可合并的像素为止。

  • 例如,在一张肺部 CT 图像中,选择一个位于肺部组织内的像素作为种子点,基于灰度值相似性逐渐生长出整个肺部区域。

        区域分裂合并法:首先将图像视为一个整体区域,然后根据某种不相似性准则将其分裂为较小的子区域,接着对相邻的子区域进行合并,直到满足终止条件。

  • 比如对于一幅包含多个物体的图像,先将其大致分裂为几个区域,再根据区域之间的相似性判断是否合并。

🍍相似性准则

  1. 灰度值:比较像素之间的灰度差异。
  2. 颜色:基于颜色空间(如 RGB、HSV 等)的距离。
  3. 纹理:分析像素的纹理特征,如粗糙度、方向性等。

🍍优点

  • 对噪声的敏感度相对较低,能够得到较为完整和连续的区域。
  • 通常能够产生有意义的区域,符合人类对图像的直观理解。

🍍缺点

  • 计算复杂度较高,特别是对于大规模图像和复杂的相似性准则。
  • 初始种子点的选择或区域的初始划分对最终结果有较大影响。
  • 相似性准则的定义和选择可能具有一定的主观性。

🍍应用场景

  1. 卫星图像中不同地理区域的划分。
  2. 医学图像中对病变组织的提取。

🍍改进和发展

        为了提高基于区域分割方法的性能,出现了一些改进措施,如结合多尺度分析、使用自适应的相似性准则、引入先验知识等。

🍈基于聚类的分割方法

        基于聚类的分割方法将图像中的像素看作数据点,根据它们之间的相似性将像素分组为不同的簇,每个簇对应一个分割区域。

        常见的聚类算法包括 K-Means 、层次聚类等。

🍍以 K-Means 为例,其工作步骤如下:

  1. 随机选择 K 个像素作为初始聚类中心。
  2. 计算每个像素到 K 个中心的距离,将像素分配到距离最近的中心所属的簇。
  3. 重新计算每个簇的中心。
  4. 重复步骤 2 和 3 ,直到聚类中心不再变化或达到设定的迭代次数。

🍍优点

  • 能够自动确定分割的类别数量。
  • 对于数据分布有一定的适应性。

🍍缺点

  • 对初始聚类中心敏感,不同的初始选择可能导致不同的结果。
  • 难以处理复杂的形状和空间关系。

🍍应用场景

  • 例如对自然场景图像中的不同颜色区域进行分割。

🍈基于图的分割方法

        基于图的分割方法将图像构建为一个图,其中像素是节点,像素之间的关系是边,边的权重表示像素之间的相似性。

        常见的算法如 Graph Cut (图割)。

        其基本思想是将图像分割问题转化为一个能量最小化问题。通过定义一个能量函数,包括区域项和边界项,区域项鼓励像素在区域内具有相似性,边界项鼓励边界在低能量处切割。

🍍优点

  • 能够处理复杂的结构和全局关系。
  • 可以结合先验知识和约束条件。

🍍缺点

  • 计算复杂度高,尤其是对于大规模图像。
  • 参数设置较为复杂。

🍍应用场景

        在医学图像分割中,处理具有复杂结构的器官。

🍈基于深度学习的分割方法

        基于深度学习的分割方法利用深度卷积神经网络(CNN)自动学习图像的特征,并进行像素级的分类预测。

        常见的模型如 FCN (全卷积网络)、U-Net 等。

        这些模型通过大量的有标注数据进行训练,学习到不同类别像素的特征模式。

🍍优点

  • 分割精度高,能够处理复杂的场景和多类别分割任务。
  • 具有强大的泛化能力,可以应用于各种类型的图像。

🍍缺点

  • 需要大量的标注数据和强大的计算资源进行训练。
  • 模型解释性较差。

🍍应用场景

        自动驾驶中的道路和车辆分割、医学图像中的肿瘤和器官分割等。

🍉示例

 🍈以下是一个使用 Python 和 TensorFlow 实现简单的全卷积网络(FCN)进行自然图像分割的示例。

import tensorflow as tf
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, Conv2D, MaxPooling2D, UpSampling2D, concatenatedef fcn_model(input_shape=(224, 224, 3), num_classes=2):# 输入层inputs = Input(shape=input_shape)# 编码器:卷积和池化层conv1 = Conv2D(64, (3, 3), activation='relu', padding='same')(inputs)conv1 = Conv2D(64, (3, 3), activation='relu', padding='same')(conv1)pool1 = MaxPooling2D((2, 2), strides=(2, 2))(conv1)conv2 = Conv2D(128, (3, 3), activation='relu', padding='same')(pool1)conv2 = Conv2D(128, (3, 3), activation='relu', padding='same')(conv2)pool2 = MaxPooling2D((2, 2), strides=(2, 2))(conv2)conv3 = Conv2D(256, (3, 3), activation='relu', padding='same')(pool2)conv3 = Conv2D(256, (3, 3), activation='relu', padding='same')(conv3)conv3 = Conv2D(256, (3, 3), activation='relu', padding='same')(conv3)pool3 = MaxPooling2D((2, 2), strides=(2, 2))(conv3)conv4 = Conv2D(512, (3, 3), activation='relu', padding='same')(pool3)conv4 = Conv2D(512, (3, 3), activation='relu', padding='same')(conv4)conv4 = Conv2D(512, (3, 3), activation='relu', padding='same')(conv4)pool4 = MaxPooling2D((2, 2), strides=(2, 2))(conv4)conv5 = Conv2D(512, (3, 3), activation='relu', padding='same')(pool4)conv5 = Conv2D(512, (3, 3), activation='relu', padding='same')(conv5)conv5 = Conv2D(512, (3, 3), activation='relu', padding='same')(conv5)# 解码器:上采样和特征融合up6 = concatenate([UpSampling2D((2, 2))(conv5), conv4], axis=-1)conv6 = Conv2D(256, (3, 3), activation='relu', padding='same')(up6)conv6 = Conv2D(256, (3, 3), activation='relu', padding='same')(conv6)up7 = concatenate([UpSampling2D((2, 2))(conv6), conv3], axis=-1)conv7 = Conv2D(128, (3, 3), activation='relu', padding='same')(up7)conv7 = Conv2D(128, (3, 3), activation='relu', padding='same')(conv7)up8 = concatenate([UpSampling2D((2, 2))(conv7), conv2], axis=-1)conv8 = Conv2D(64, (3, 3), activation='relu', padding='same')(up8)conv8 = Conv2D(64, (3, 3), activation='relu', padding='same')(conv8)# 输出层outputs = Conv2D(num_classes, (1, 1), activation='softmax')(conv8)model = Model(inputs=inputs, outputs=outputs)return model# 示例用法
model = fcn_model()
model.summary()

以下是对关键部分的解析:

  • 编码器部分:通过一系列的卷积和池化层逐渐降低特征图的分辨率,提取图像的高级特征。
    • Conv2D 层用于进行卷积操作,提取特征。
    • MaxPooling2D 层用于降低特征图的大小,减少计算量。
  • 解码器部分:通过上采样和特征融合来恢复图像的分辨率,并进行像素级的分类预测。
    • UpSampling2D 层用于对特征图进行上采样。
    • concatenate 用于融合不同层次的特征。
  • 输出层:使用 Conv2D 层和 softmax 激活函数进行像素级的分类,得到每个像素属于不同类别的概率。

🍈以下是一个使用 Python 和 TensorFlow 实现简单的 U-Net 模型进行医学图像分割的示例

import tensorflow as tf
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, Conv2D, MaxPooling2D, UpSampling2D, concatenatedef unet_model(input_shape=(256, 256, 1), num_classes=2):# 输入层inputs = Input(shape=input_shape)# 收缩路径(编码器)conv1 = Conv2D(64, (3, 3), activation='relu', padding='same')(inputs)conv1 = Conv2D(64, (3, 3), activation='relu', padding='same')(conv1)pool1 = MaxPooling2D((2, 2))(conv1)conv2 = Conv2D(128, (3, 3), activation='relu', padding='same')(pool1)conv2 = Conv2D(128, (3, 3), activation='relu', padding='same')(conv2)pool2 = MaxPooling2D((2, 2))(conv2)conv3 = Conv2D(256, (3, 3), activation='relu', padding='same')(pool2)conv3 = Conv2D(256, (3, 3), activation='relu', padding='same')(conv3)pool3 = MaxPooling2D((2, 2))(conv3)conv4 = Conv2D(512, (3, 3), activation='relu', padding='same')(pool3)conv4 = Conv2D(512, (3, 3), activation='relu', padding='same')(conv4)drop4 = tf.keras.layers.Dropout(0.5)(conv4)  # 添加 dropout 防止过拟合pool4 = MaxPooling2D((2, 2))(drop4)conv5 = Conv2D(1024, (3, 3), activation='relu', padding='same')(pool4)conv5 = Conv2D(1024, (3, 3), activation='relu', padding='same')(conv5)drop5 = tf.keras.layers.Dropout(0.5)(conv5)  # 添加 dropout 防止过拟合# 扩展路径(解码器)up6 = concatenate([UpSampling2D((2, 2))(drop5), conv4], axis=3)conv6 = Conv2D(512, (3, 3), activation='relu', padding='same')(up6)conv6 = Conv2D(512, (3, 3), activation='relu', padding='same')(conv6)up7 = concatenate([UpSampling2D((2, 2))(conv6), conv3], axis=3)conv7 = Conv2D(256, (3, 3), activation='relu', padding='same')(up7)conv7 = Conv2D(256, (3, 3), activation='relu', padding='same')(conv7)up8 = concatenate([UpSampling2D((2, 2))(conv7), conv2], axis=3)conv8 = Conv2D(128, (3, 3), activation='relu', padding='same')(up8)conv8 = Conv2D(128, (3, 3), activation='relu', padding='same')(conv8)up9 = concatenate([UpSampling2D((2, 2))(conv8), conv1], axis=3)conv9 = Conv2D(64, (3, 3), activation='relu', padding='same')(up9)conv9 = Conv2D(64, (3, 3), activation='relu', padding='same')(conv9)# 输出层outputs = Conv2D(num_classes, (1, 1), activation='softmax')(conv9)model = Model(inputs=inputs, outputs=outputs)return model# 示例用法
model = unet_model()
model.summary()

以下是对关键部分的分析:

  • 收缩路径(编码器)
    • 通过一系列的卷积和最大池化操作逐渐降低特征图的分辨率,提取图像的高层抽象特征。每经过一次卷积操作,特征通道数增加,以获取更丰富的特征表示。
    • Dropout 层用于随机地将神经元的输出设置为 0,以防止模型过拟合。
  • 扩展路径(解码器)
    • 通过上采样操作逐渐恢复特征图的分辨率,并与来自收缩路径的对应特征图进行拼接(concatenate),融合高层和低层的特征信息。
    • 随后经过卷积操作进一步处理特征,以得到更准确的分割预测。
  • 输出层
    • 最终使用一个 Conv2D 层和 softmax 激活函数进行像素级的分类,输出每个像素属于不同类别的概率。

🍉总结

        图像语义分割是计算机视觉领域中的关键任务,旨在为图像中的每个像素赋予特定的类别标签,以实现对图像内容的精细理解和划分。

        其具有广泛的应用,涵盖了自动驾驶、医学图像分析、卫星图像解译等众多领域。在技术层面,它融合了多种方法和技术,如基于阈值、边缘检测、区域、聚类、图以及深度学习的分割方法。

        基于阈值的方法简单直接,但对复杂图像效果有限;边缘检测能捕捉物体轮廓,但易受噪声影响且可能存在边缘不连续;区域方法对噪声敏感度低,但计算复杂且受初始条件影响;聚类方法自动确定类别数量,但对初始选择敏感;图方法处理复杂结构出色,但计算和参数设置复杂;深度学习方法,尤其是如 FCN、U-Net 等模型,分割精度高、泛化能力强,但依赖大量标注数据和强大计算资源。

        未来,图像语义分割有望在技术创新、性能提升、多模态数据融合以及更广泛的应用场景拓展等方面取得进一步的发展,为解决各种实际问题提供更强大的支持。

2a20c54b85e042bfa2440367ae4807e9.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/39605.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数智化人物展】法大大黄翔:从他山之石看中国企业数智化升级的机会点

黄翔 本文由法大大创始人兼CEO黄翔投递并参与由数据猿联合上海大数据联盟共同推出的《2024中国数智化转型升级先锋人物》榜单/奖项评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 随着AI、云计算、大数据等技术的飞速发展,数智化转型升级已是全球企业的共识…

css flex 子元素溢出时,父元素被撑开解决方案

当父元素使用flex: 1;自适应填满时,子元素内容溢出,父元素内容撑大,导致页面显示问题,或设置了overflow 为scroll 的元素没出现滚动条等问题 解决方案: 1.如果是横向排列,flex: 1;的元素加上width: 0; 此…

调整分区失败致盘无法访问:深度解析与数据恢复全攻略

调整分区失败盘打不开的困境 在计算机的日常维护与管理中,调整磁盘分区是常见的操作之一,旨在优化存储空间布局、提升系统性能或满足特定应用需求。然而,当这一操作未能如预期般顺利进行,反而导致分区调整失败,进而使…

模拟算法系列|替换所有的问号|提莫攻击|种花问题|Z字形变换|兼具大小写的英文字母|删除字符使频率相同

大家好,我是LvZi,今天带来模拟算法系列|替换所有的问号|提莫攻击|种花问题|Z字形变换|兼具大小写的英文字母|删除字符使频率相同 一.基本概念 模拟算法就是根据题意 模拟出代码的过程,模拟算法的题意往往都很简单,考验的是将思路转化为代码的能力,十分的锻炼代码能力,且能很好…

【日记】在街上跳舞被同事看见了(470 字)

正文 昨晚跳舞,照例在街上表演,被单位里的保洁阿姨撞见了…… 我以为这就完了,结果她还拍了视频发给做饭阿姨。晚上吃饭无意间聊起才知道有这回事。我竟一时间不知该哭还是该笑……. 今天非常非常闲。虽然不是没工作,只是我懒得去…

418天内第6次发布,科大讯飞星火大模型在跟谁赛跑?

常言道“一步慢,步步慢”,大模型市场瞬息万变,快人一步就是竞争的反转。 6月27日,科大讯飞如期公布星火大模型的最新进展:大模型底座七大核心能力得到全面提升,星火大模型V4.0可对标GPT-4 Turbo&#xff0…

软考系统架构师高效备考方法论

软考系统架构师高效备考方法论 本章总结的备考方法论也是希望能帮助更多的小伙伴高效的备考最终通过考试,这种考试个人感觉是尽量一次性考过, 要不然老拖着,虽然每年可以考两次,5月和11月,两次考试间隔5个月时间&#…

ELK日志实时监控

目录 一、ELK/EFK简介 1.1 什么是ELK/EFK? 1.2 常见架构 1、Elasticsearch Logstash Kibana 2、Elasticsearch Logstash Filebeat Kibana 3、Elasticsearch Logstash Filebeat Kibana Redis 4、Elasticsearch Fluentd Filebeat Kibana 1.3 基本流程 二、…

JVM专题之垃圾收集算法

标记清除算法 第一步:标记 (找出内存中需要回收的对象,并且把它们标记出来) 第二步:清除 (清除掉被标记需要回收的对象,释放出对应的内存空间) 缺点: 标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需 要分配较大对象时,无法找到…

反射--通俗易懂

一、反射(Reflection) 反射就是:加载类,并允许以编程的方式解剖类中的各种成分(成员变量、方法、构造器等) 动态语言,是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他…

多重奖励拿到手软,OPENAIGC开发者大赛燃爆这个夏天!

你是否渴望在AI领域一展身手? 你是否拥有开创性的技术和创意? 2024 OPENAIGC开发者大赛就是你的最佳舞台! 不论你是经验丰富的开发者, 还是技术领域的创新者, 都有机会在这里大放异彩! 由联想拯救者、…

每日一题 7月1日

1 设数组data[m]作为循环队列的存储空间,front为队头指针,rear为队尾指针,则执行出队操作后其头指针front值为____ 2 采用滑动窗口机制对两个相邻结点A(发送方)和B(接收方)的通信过程进行流量控制。假定帧的序号长度为3比特,发送窗口与接收窗口的大小均为7,当A发送了…

分析Profiler Timeline中的算子序列,通过寻找频繁项集的办法,得到TOPK可融合的算子序列

分析Profiler Timeline中的算子序列,通过寻找频繁项集的办法,得到TOPK可融合的算子序列 1.相关链接2.代码【仅分析带通信算子的Pattern】3.在实际工程中发现 [all_gather, matrix_mm_out]频率最高4.[Ascend MC2](https://gitee.com/ascend/MindSpeed/blob/master/docs/features…

1:25万基础电子地图(西藏版)

我们为你分享过四川版、云南版、江西版、贵州版、重庆版和青海版的1比25万基础电子地图,现在再为你分享西藏版的电子地图。 如果你需要西藏版的1比25万基础电子地图,你可以在文末查看该数据的领取方法。 基础电子地图西藏版 西藏版1:25万基础电子地图…

压缩pdf文件大小,压缩pdf文件大小软件哪个好

在数字化时代,PDF文件因其卓越的跨平台兼容性和稳定性而成为工作与学习的好帮手。然而,当PDF文件体积过大时,传输和存储便成了一项挑战。别担心,本文将为你揭秘如何快速压缩PDF文件,让你的文档轻装上路! 压…

postman请求访问:认证失败,无法访问系统资源

1、使用postman时,没有传入相应的token,就会出现这种情况,此时需要把token放进去 发现问题: { "msg": "请求访问:/getInfo,认证失败,无法访问系统资源", "code": 401 } 1…

Monorepo(单体仓库)与 MultiRepo(多仓库): Monorepo 单体仓库开发策略与实践指南

🔥 个人主页:空白诗 文章目录 一、引言1. Monorepo 和 MultiRepo 简介2. 为什么选择 Monorepo? 二、Monorepo 和 MultiRepo 的区别1. 定义和概述2. 各自的优点和缺点3. 适用场景 三、Monorepo 的开发策略1. 版本控制2. 依赖管理3. 构建和发布…

python-切片、集合

序列是指:内容连续、有序,可使用下标索引的一类数据容器 序列的常用操作 - 切片 切片的语法 序列的常用操作 - 切片 注意切片的范围是左闭右开 为什么使用集合 集合的常用操作 - 修改 集合的常用操作 - 集合长度 集合常用功能总结 集合的特点

程序员鱼皮的写简历指南(保姆级)2、简历优化

大家好,我是程序员鱼皮。做知识分享这些年来,我看过太多简历、也帮忙修改过很多的简历,发现很多同学是完全不会写简历的、会犯很多常见的问题,不能把自己的优势充分展示出来,导致措施了很多面试机会,实在是…

AI时代来临,程序员如何应对AI挑战?

随着 AI 技术的飞速发展,特别是大模型的出现,传统的程序员角色正在经历深刻的变革,AI 已经对现有的软件开发模式和程序员的工作模式造成了冲击,并且大语言模型在某些特定语言内的表现甚至超过了大部分的程序员。 但人工智能没有情…