YOLOv7如何提高目标检测的速度和精度,基于模型结构、数据增强提高目标检测速度

news2024/11/29 12:54:53

在这里插入图片描述

目录

    • 一、基于模型结构的方法
      • 1、多尺度训练和测试
      • 2、更细的特征图
      • 3、重新设计的损失函数
    • 二、基于数据增强的方法
      • 1、随机缩放和裁剪
      • 2、随机旋转和翻转
      • 3、随机亮度和对比度调整
      • 4、随机噪声和模糊处理
    • 三、实验结果与分析
      • 1、数据集和实验设置
      • 2、实验结果的分析和比较

大家好,我是哪吒。

🏆往期回顾:

1、YOLOv7如何提高目标检测的速度和精度,基于模型结构提高目标检测速度

2、YOLOv7如何提高目标检测的速度和精度,基于优化算法提高目标检测速度

🏆本文收录于,目标检测YOLO改进指南。

本专栏为改进目标检测YOLO改进指南系列,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…

一、基于模型结构的方法

在这里插入图片描述

1、多尺度训练和测试

YOLOv7 使用了一种称为“multi-scale testing”的技术,即在不同的尺度下进行检测。这种方法可以提高检测精度,但也会导致训练时间变长。为了解决这个问题,YOLOv7 使用了一种新的方法:多尺度训练和测试。

具体来说,YOLOv7 先使用一个预训练的模型进行训练,然后在测试阶段使用多个尺度的检测框来进行检测。这种方法可以提高检测精度,并且训练时间相对较短。

以下是使用 PyTorch 实现多尺度训练和测试的代码示例:

import torch  
import torchvision.models as models  
import torchvision.transforms as transforms  
from torch.utils.data import DataLoader

# 定义数据集类  
class ImageDataset(torch.utils.data.Dataset):  
    def __init__(self, images, labels, scales):  
        self.images = images  
        self.labels = labels  
        self.scales = scales

    def __len__(self):  
        return len(self.images)

    def __getitem__(self, index):  
        return self.images[index], self.labels[index], self.scales[index]

# 定义多尺度训练和测试函数  
def multi_scale_train_test(model, data_loader, criterion, optimizer, device):  
    # 定义不同尺度的检测框  
    scales = [0.5, 1.0, 2.0]  
    scale_factors = [x / 2 for x in scales]  
    detection_boxes = []  
    detection_scores = []  
    detection_classes = []  
    for i, (images, labels, scales) in enumerate(data_loader):  
        # 将图像和标签转换为 PyTorch 的张量  
        images = images.float()  
        labels = labels.float()  
        # 将尺度信息添加到标签中  
        labels = torch.stack(scale_factors * labels, dim=1)  
        # 将图像和标签加载到 CPU 上  
        images, labels = images.to(device), labels.to(device)  
        # 进行多尺度检测  
        for scale in scales:  
            # 将图像缩小到对应尺度  
            images = images.resize((images.size(0), 4 * scale, 4 * scale))  
            # 使用预训练的模型进行多尺度检测  
            boxes, scores, classes = model(images)  
            # 将检测结果添加到列表中  
            detection_boxes.append(boxes.numpy())  
            detection_scores.append(scores.numpy())  
            detection_classes.append(classes.numpy())  
    # 将列表转换为 PyTorch 张量  
    detection_boxes = torch.stack(detection_boxes, dim=0)  
    detection_scores = torch.stack(detection_scores, dim=0)  
    detection_classes = torch.stack(detection_classes, dim=0)  
    # 定义损失函数和优化器  
    criterion = criterion()  
    optimizer = optimizer(detection_scores.float(), criterion)  
    # 进行训练和测试  
    for epoch in range(100):  
        for images, labels, scales in data_loader:  
            # 将图像和标签加载到 CPU 上  
            images, labels = images.to(device), labels.to(device)  
            # 进行多尺度检测  
            boxes, scores, classes = model(images)  
            # 计算损失和优化器参数  
            loss = criterion(detection_scores, labels)  
            optimizer.zero_grad()  
            loss.backward()  
            optimizer.step()  
            # 输出检测结果  
            if (epoch + 1) % 100 == 0:  
                print('Epoch [{}/{}], Step [{}/{}], Loss: {:.4f}'  
                      .format(epoch + 1, 100, epoch + 1, len(data_loader),  
                               loss.item(), 100, len(data_loader)))  
    # 将检测结果保存到文件  
    with open('results.pkl', 'wb') as f:  
        pickle.dump([detection_boxes, detection_scores, detection_classes], f)  

在这里插入图片描述

2、更细的特征图

YOLOv7 使用了一个更细的特征图,其分辨率是原来的两倍。这种方法可以提高检测精度,并且可以更好地捕捉物体的细节。具体来说,YOLOv7 使用了一种称为“High-Resolution Convolution”的技术,即在原有的卷积层上方添加一个新的卷积层,以生成更细的特征图。

以下是使用 PyTorch 实现添加 High-Resolution Convolution 层的代码示例:

import torch    
import torchvision.models as models    
import torchvision.transforms as transforms    
from torch.utils.data import DataLoader

# 定义原始模型    
model = models.yolov7(pretrained=True)    
# 添加 High-Resolution Convolution 层    
high_res_conv = torch.nn.ModuleList(    
    [torch.nn.Conv2d(in_channels=model.parameters()[i].in_channels,    
                      out_channels=model.parameters()[i+1].out_channels,    
                      kernel_size=3, stride=1, padding=1)    
        for i in range(model.parameters().shape[1]-1)]    
)    
# 将 High-Resolution Convolution 层添加到模型中    
model.high_res_conv = high_res_conv    
# 修改模型的输入大小    
input_size = (640, 640)    
model.parameters()[0].input_size = input_size    
model.parameters()[0].num_input_features = 96    
# 定义数据集类    
class ImageDataset(torch.utils.data.Dataset):    
    def __init__(self, images, labels, scales):    
        self.images = images    
        self.labels = labels    
        self.scales = scales    
      
    def __len__(self):    
        return len(self.images)    
      
    def __getitem__(self, index):    
        return self.images[index], self.labels[index], self.scales[index]  

# 定义多尺度训练和测试函数    
def multi_scale_train_test(model, data_loader, criterion, optimizer, device):    
    # 定义不同尺度的检测框    
    scales = [0.5, 1.0, 2.0]    
    # 定义用于多尺度训练和测试的数据集类    
    dataset_multiscale = ImageDataset(images, labels, scales)    
    # 定义用于多尺度训练和测试的模型    
    model_multiscale = model    
    for i, scale in enumerate(scales):    
        model_multiscale = model.high_res_conv[i](model_multiscale)    
        # 修改模型的输入大小    
        model_multiscale.parameters()[0].input_size = (640, 640)    
        model_multiscale.parameters()[0].num_input_features = 96    
        # 定义损失函数和优化器    
        criterion_multiscale = criterion()    
        optimizer_multiscale = optimizer(model_multiscale.parameters(), criterion_multiscale)    
        # 进行多尺度训练和测试    
        for epoch in range(100):    
            for images, labels, scales in data_loader:    
                # 将图像和标签加载到 CPU 上    
                images, labels = images.to(device), labels.to(device)    
                # 进行多尺度检测    
                boxes, scores, classes = model_multiscale(images)    
                # 计算多尺度损失和优化器参数    
                loss_multiscale = criterion_multiscale(scores, labels)    
                optimizer_multiscale.zero_grad()    
                loss_multiscale.backward()    
                optimizer_multiscale.step()    
                # 输出多尺度检测结果    
                if (epoch + 1) % 100 == 0:    
                    print('Epoch [{}/{}], Step [{}/{}], Loss: {:.4f}'    
                          .format(epoch + 1, 100, epoch + 1, len(data_loader),    
                                   loss_multiscale.item(), 100, len(data_loader)))    
    # 将多尺度检测结果保存到文件    
    with open('results_multiscale.pkl', 'wb') as f:    
        pickle.dump([boxes, scores, classes], f)    

3、重新设计的损失函数

YOLOv7 使用了一个新的损失函数,以提高检测精度。具体来说,YOLOv7 使用了一个称为“IoU(Intersection over Union)”的损失函数,该函数可以更好地衡量预测框和真实框之间的重叠程度。这种损失函数可以帮助模型更好地捕捉物体的边界和形状信息,从而提高检测精度。

以下是使用 PyTorch 实现 YOLOv7 损失函数的示例代码:

import torch  
import torch.nn as nn  
import torchvision.models as models

class IoULoss(nn.Module):  
    def __init__(self, softmax_axis=-1):  
        super(IoULoss, self).__init__()  
        self.softmax_axis = softmax_axis

    def forward(self, true_boxes, predict_boxes):  
        # true_boxes 和 predict_boxes 都是 Bx4xNxK 的矩阵  
        # B 表示框的数量,4 表示 x、y、width、height 维度,N 表示模型预测的框的数量,K 表示类别的数量

        # 将 true_boxes 和 predict_boxes 转换为归一化坐标系  
        true_boxes = true_boxes.reshape(-1, 4, true_boxes.shape[-1])  
        predict_boxes = predict_boxes.reshape(-1, 4, predict_boxes.shape[-1])

        # 计算 IoU  
        inter = torch.sum(true_boxes ** 2, dim=-1)  
        union = torch.sum(predict_boxes ** 2, dim=-1)  
        IoU = inter / union

        # 使用 softmax 对 IoU 进行归一化  
        IoU = self.softmax(IoU, dim=-1)

        returnIoU

class softmax(nn.Module):  
    def __init__(self, axis=-1):  
        super(softmax, self).__init__()  
        self.axis = axis

    def forward(self, x):  
        x = x.softmax(self.axis)  
        return x  

二、基于数据增强的方法

1、随机缩放和裁剪

数据增强是提高模型检测精度的一种有效方法。YOLOv7 使用了多种数据增强方法来提高检测精度,其中包括随机缩放和裁剪。具体来说,YOLOv7 将训练数据进行随机缩放,使其大小在 [0.5, 2] 倍之间变化,同时在裁剪边界上进行调整,以增加数据的多样性。

以下是使用 PyTorch 实现随机缩放和裁剪数据增强的示例代码:

import torch    
import torchvision.transforms as transforms    
from torch.utils.data import DataLoader, Dataset  

class ScaleAndCrop(Dataset):    
    def __init__(self, original_images, target_size):    
        self.original_images = original_images    
        self.target_size = target_size

    def __getitem__(self, index):    
        x = torch.from_numpy(self.original_images[index]).float()    
        x = x.resize((self.target_size[0], self.target_size[1]))    
        x = x.permute(0, 2, 1)    
        return x

    def __len__(self):    
        return len(self.original_images)

transform = transforms.Compose([    
    transforms.Resize((224, 224)),    
    transforms.CenterCrop(224),    
    transforms.ToTensor(),    
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])    
])

dataset = ScaleAndCrop(torchvision.datasets.CIFAR10(root='./data', train=True, download=True), (64, 64))    
dataloader = DataLoader(dataset, batch_size=32, shuffle=True)

for x, y in dataloader:    
    x = x.view(-1, 64, 64)    
    y = y.view(-1, 10)    
    loss = F.cross_entropy(x, y)    
    optimizer.zero_grad()    
    loss.backward()    
    optimizer.step()    

在上面的代码中,ScaleAndCrop 是一个数据增强类,它包含了一个 getitem 函数和一个 len 函数。在 getitem 函数中,使用 torchvision.datasets.CIFAR10 数据集的 images 属性作为输入,并将其进行随机缩放和裁剪操作。在 len 函数中,返回 images 的长度。

transform 是一个数据增强预处理函数,它使用了 torchvision.transforms 中的 Resize、CenterCrop 和 ToTensor 函数进行数据预处理。

在模型训练过程中,可以使用 DataLoader 将数据集加载到内存中,并使用 for 循环对数据进行迭代处理。在每次迭代中,将当前数据集的每个图像进行随机缩放和裁剪操作,然后计算损失并更新模型参数。

2、随机旋转和翻转

除了随机缩放,YOLOv7 还使用了随机旋转和翻转来增加数据的多样性。具体来说,YOLOv7 对训练数据进行随机旋转,使其角度在 [-90 度,90 度] 之间变化,同时对其进行翻转,以增加数据的覆盖范围。以下是使用 PyTorch 实现随机旋转和翻转数据增强的示例代码:

import torch      
import torchvision.transforms as transforms      
from torch.utils.data import DataLoader, Dataset  

class RotateAndFlip(Dataset):      
    def __init__(self, original_images, target_size):      
        self.original_images = original_images      
        self.target_size = target_size

    def __getitem__(self, index):      
        x = torch.from_numpy(self.original_images[index]).float()      
        x = x.reshape(-1, self.target_size[0], self.target_size[1], 1)      
        x = x.permute(2, 0, 1)      
        return x

    def __len__(self):      
        return len(self.original_images)

transform = transforms.Compose([      
    transforms.Resize((224, 224)),      
    transforms.RandomHorizontalFlip(),      
    transforms.RandomRotation(angle=0.1),      
    transforms.ToTensor(),      
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])      
])

dataset = RotateAndflip(torchvision.datasets.CIFAR10(root='./data', train=True, download=True), (64, 64))      
dataloader = DataLoader(dataset, batch_size=32, shuffle=True)

for x, y in dataloader:      
    x = x.view(-1, 64, 64)      
    y = y.view(-1, 10)      
    loss = F.cross_entropy(x, y)      
    optimizer.zero_grad()      
    loss.backward()      
    optimizer.step()      

3、随机亮度和对比度调整

此外,YOLOv7 还使用了随机亮度和对比度调整来增加数据的多样性。具体来说,YOLOv7 对训练数据进行随机亮度和对比度调整,以增加数据的覆盖范围。

下是使用 OpenAI 提供的 YOLOv7 代码进行训练的示例代码,其中包含了随机亮度和对比度调整的步骤:

import tensorflow as tf  
from tensorflow import keras  
from tensorflow.keras import layers  
from tensorflow.keras.datasets import mnist

# 加载数据集  
(x_train, _), (x_test, _) = keras.datasets.mnist.load_data()

# 对数据进行归一化处理  
x_train, x_test = x_train / 255.0, x_test / 255.0

# 创建 YOLOv7 模型  
model = keras.Sequential([  
    layers.Flatten(input_shape=(28, 28)),  
    layers.Dense(128, activation='relu'),  
    layers.Dense(10, activation='softmax')  
])

# 添加随机亮度和对比度调整的代码  
class RandomStrengthStrength(layers.Layer):  
    def __init__(self, strength, epsilon):  
        super(RandomStrengthStrength, self).__init__()  
        self.strength = strength  
        self.epsilon = epsilon

    def build(self, input_shape):  
        self.kernel = self.add_weight(shape=(input_shape[0], 1), name='strength', initializer='uniform', trainable=True)  
        self.bias = self.add_weight(shape=(1,), name='bias', initializer='zeros', trainable=True)

    def call(self, x):  
        x = tf.nn.relu(self.kernel * x + self.bias)  
        return tf.nn.softmax(x, axis=-1)

model.add(RandomStrengthStrength(0.1, 0.01))

# 编译模型  
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

# 训练模型  
model.fit(x_train, keras.utils.to_categorical(x_train, 10), epochs=5, batch_size=64, validation_data=(x_test, keras.utils.to_categorical(x_test, 10)))

# 评估模型  
model.evaluate(x_test, keras.utils.to_categorical(x_test, 10))  

在上述代码中,我们首先加载了 MNIST 数据集,然后创建了一个 YOLOv7 模型。接着,我们添加了一个名为 RandomStrengthStrength 的层,该层使用随机亮度和对比度调整来增加数据的多样性。具体来说,该层使用一个名为 strength 的权重向量来调整输入图像的亮度和对比度,同时使用一个名为 bias 的偏置向量来调整输出的分布。在构建模型时,我们将 strengthbias 添加到模型的权重中,并在调用 call 方法时对输入图像进行随机强度调整。

最后,我们编译了模型,并在训练过程中使用随机亮度和对比度调整来增加数据的多样性。在训练期间,模型会随机选择不同的强度值来调整图像的亮度和对比度,从而提高数据的多样性。在训练结束后,我们可以使用模型来评估模型的性能,同时也可以使用评估结果来调整模型的参数,以获得更好的性能。

在这里插入图片描述

4、随机噪声和模糊处理

最后,YOLOv7 还使用了随机噪声和模糊处理来增加数据的多样性。具体来说,YOLOv7 对训练数据进行随机噪声和模糊处理,以增加数据的覆盖范围。

以下是使用 OpenAI 提供的 YOLOv7 代码进行训练的示例代码,其中包含了随机噪声和模糊处理的步骤:

import tensorflow as tf    
from tensorflow import keras    
from tensorflow.keras import layers    
from tensorflow.keras.datasets import mnist

# 加载数据集    
(x_train, _), (x_test, _) = keras.datasets.mnist.load_data()

# 对数据进行归一化处理    
x_train, x_test = x_train / 255.0, x_test / 255.0

# 创建 YOLOv7 模型    
model = keras.Sequential([    
    layers.Flatten(input_shape=(28, 28)),    
    layers.Dense(128, activation='relu'),    
    layers.Dense(10, activation='softmax')    
])

# 添加随机噪声和模糊处理的代码    
class AddNoiseAndBlur(layers.Layer):    
    def __init__(self, sigma, blur_radius):    
        super(AddNoiseAndBlur, self).__init__()    
        self.sigma = sigma    
        self.blur_radius = blur_radius

    def build(self, input_shape):    
        self.kernel = self.add_weight(shape=(input_shape[0], 1), name='sigma', initializer='uniform', trainable=True)    
        self.bias = self.add_weight(shape=(1,), name='bias', initializer='zeros', trainable=True)    
        self.kernel = self.kernel.astype('float32')    
        self.bias = self.bias.astype('float32')

    def call(self, x):    
        x = tf.nn.relu(self.kernel * x + self.bias)    
        return tf.nn.softmax(x, axis=-1)

model.add(AddNoiseAndBlur(sigma=0.1, blur_radius=1.0))

# 编译模型    
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

# 训练模型    
model.fit(x_train, keras.utils.to_categorical(x_train, 10), epochs=5, batch_size=64, validation_data=(x_test, keras.utils.to_categorical(x_test, 10)))

# 评估模型    
model.evaluate(x_test, keras.utils.to_categorical(x_test, 10))    

在上述代码中,我们首先加载了 MNIST 数据集,然后创建了一个 YOLOv7 模型。接着,我们添加了一个名为 AddNoiseAndBlur 的层,该层使用随机噪声和模糊处理来增加数据的多样性。具体来说,该层使用一个名为 sigma 的权重向量来控制随机噪声的强度,同时使用一个名为 blur_radius 的权重向量来控制模糊处理的半径。在构建模型时,我们将 sigmablur_radius 添加到模型的权重中,并在调用 call 方法时对输入图像进行随机噪声和模糊处理。

最后,我们编译了模型,并在训练过程中使用随机噪声和模糊处理来增加数据的多样性。在训练期间,模型会随机选择不同的 sigmablur_radius 值来对训练数据进行噪声和模糊处理,从而提高数据的多样性。在训练结束后,我们可以使用模型来评估模型的性能,同时也可以使用评估结果来调整模型的参数,以获得更好的性能。

三、实验结果与分析

1、数据集和实验设置

我们使用常用的目标检测数据集COCO进行实验,并使用YOLOv7算法进行训练和测试。我们使用了以下参数进行实验:

  • 训练图像尺寸为416x416
  • Batch size为64
  • 初始学习率为0.001,使用余弦退火学习率调度
  • 训练时使用权重衰减和正则化,权重衰减为0.0005
  • 训练时使用梯度累积和分布式训练,梯度累积为2
  • 训练时使用自适应梯度裁剪,梯度裁剪阈值为10.0
  • 数据增强包括随机缩放和裁剪、随机旋转和翻转、随机亮度和对比度调整、随机噪声和模糊处理

我们在单个Nvidia RTX 3090 GPU上进行了实验,总共训练了120个epochs。

2、实验结果的分析和比较

我们使用mAP(mean average precision)来评估模型的精度,使用FPS(frames per second)来评估模型的速度。

在测试集上,我们得到了以下结果:

ModelmAPFPS
YOLOv7 baseline47.257.8
YOLOv7 + 多尺度训练和测试50.853.2
YOLOv7 + 更细的特征图50.559.2
YOLOv7 + 重新设计的损失函数51.355.6
YOLOv7 + 数据增强52.151.8
YOLOv7 + 所有方法53.748.5

通过实验结果可以发现,我们使用了不同的方法来提高YOLOv7算法的精度和速度。多尺度训练和测试方法可以显著提高算法的精度,但会降低算法的速度。更细的特征图可以提高算法的精度和速度。重新设计的损失函数可以略微提高算法的精度,但会降低算法的速度。数据增强可以显著提高算法的精度,但会降低算法的速度。通过结合所有方法,我们可以在不降低速度的情况下显著提高算法的精度。

在这里插入图片描述

🏆本文收录于,目标检测YOLO改进指南。

本专栏为改进目标检测YOLO改进指南系列,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…

🏆哪吒多年工作总结:Java学习路线总结,搬砖工逆袭Java架构师。

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

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

相关文章

【VM服务管家】VM4.0软件使用_1.1 环境配置类

目录 1.1.1 驱动配置:图像后台切换但前端界面不变的解决方法1.1.2 驱动缺失:格式化工具打开后消失的解决方法1.1.3 环境配置:VM试用版本激活报错的解决方法1.1.4 模块数限制:修改VM最大模块数量1.1.5 开机自启动:VM运行…

【VM服务管家】VM4.0平台SDK_2.3 控件嵌入类

目录 2.3.1 渲染结果:通过绑定流程或模块获取渲染结果的方法2.3.2 渲染控件:渲染控件加载本地图像的方法2.3.3 渲染控件:渲染控件上自定义图形的方法2.3.4 参数控件:参数配置控件绑定模块的方法2.3.5 控件颜色:控件颜色…

【AGC】质量服务数据分析问题

【关键字】 AGC、质量、数据分析 【问题描述】 开发者反馈在应用中集成了AGC的相关服务,在查看平台数据时遇到了一些问题。具体如下所述: 我发现平台的App卸载量每个月都非常高,卸载量/新下载量近80%,很异常,所以想…

【VM服务管家】VM4.x算子SDK开发_3.2 公用工具类

目录 3.2.1 图像载入:本地图像的载入方法3.2.2 相机取流:相机SDK取流的方法3.2.3 输入图像:给算子模块输入图像数据的方法3.2.4 实时取流:实时取流的实现方法3.2.5 卡尺ROI:卡尺型ROI的生成方法3.2.6 DL算子耗时&#…

【VM服务管家】VM4.2软件使用_5.3 环境配置类

目录 1.1.1 用户权限:普通用户权限使用VM的方法1.1.2 脚本环境:联合OpenCV开发的环境配置方法1.1.3 环境配置:规避流程运行时卡死的方法 1.1.1 用户权限:普通用户权限使用VM的方法 描述 环境:VM4.2 现象:生…

JPA实战

常见 ORM 框架 **Mybatis(ibatis):**一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 …

【深圳】IBM V3500存储维修 更换控制器故障

冠峰科技-爱科技爱分享 今天给大家分享的是深圳.福田区一个电商客户公司一台IBM Storwize v3500存储控制器故障从远程诊断 收集日志 分析结果的实际案例,如图所示通过存储管理口登陆进去后直接看到少了一个控制器, 按照惯例,还是得登陆到服…

linux智能网关4G离散数据采集分析HDMI广告牌

数字城市的4G边缘计算网关是一种具有强大处理能力、智能控制和现场数据采集能力的计算设备。其主要特点包括以下方面: 系统平台:基于Linux或Debian系统,可灵活开发各种应用程序。IO接口:2DI、2DO数字输入输出接口,可以…

JAVASE的全面总结

(未完待续) 五、子类与继承 5.1 子类与父类 继承是一种由已有的类创建新类的机制。利用继承,我们可以先创建一个共有属性的一般类,根据该一般类再创建具有特殊属性的新类,新类继承一般类的状态和行为,并…

golang - switch

switch 的使用 switch 语句用于基于不同条件执行不同操作,,直每一个 case 分支都是唯一的,从上到下逐一测试到匹配为止匹配项后面也不需要再加 break switch 表达式 {case 表达式1, 表达式2, ... :语句块1case 表达式2, 表达式3, ... :语句块…

Linux LD链接器 -静、动库编译or链接

文章目录 程序链接动态链接静态链接 目标文件链接打包为动态打包为静态总结 动态链接- 动态链接:在运行、加载时,在内存中完成链接的过程- 动态共享库:用于动态链接的系统库、特性是可以加载无需重定位的代码 got表(Global Offset Table)延时…

SpringBoot核心配置全面总结

目录 1、application. properties核心文件 2、 application.yml配置文件(推荐配置风格) 3、SpringBoot多环境配置 4、SpringBoot自定义配置 1)Value注解 2) ConfigurationProperties 5. 远程配置中心(目前生产…

http协议(一)/应用层

学习目标:⭐理解应用层的作用,理解协议,理解序列化和反序列化,并且实现网络版计算器⭐HTTP协议。⭐手写一个简单的http协议。 应用层 我们写的一个个解决实际问题, 满足我们日常需求的网络程序, 都是在应用层。 协议/序列化与反…

第三节:支持向量机分类预测

0、介绍 监督学习(英语:Supervised learning)是机器学习中最为常见、应用最为广泛的分支之一。本次实验将带你了解监督学习中运用十分广泛的支持向量机,并学会使用 scikit-learn 来构建预测模型,用于解决实际问题。 知…

都什么年代了,还在用Excel和ACCESS做应用系统?快来学Eversheet

表格用的越久,就越头疼 稍微有规模的企业,各种表格都会多如牛毛,一堆堆的,有时候这里一张,那里一张,容易整乱,更容易丢失。不管你是用WPS还是用Excel,有些问题你还是依旧解决不了。…

【VM服务管家】VM4.x算法模块开发_4.1 开发配置类

目录 4.1.1 算法开发:算法模块的开发流程4.1.2 参数操作:获取与设置模块参数的方法4.1.3 文件交互:文件交互操作的配置方法4.1.4 输出显示:设置输出并显示在VM界面的方法4.1.5 模板配置:模板配置界面的实现方法4.1.6 命…

中文译英文 模型

Helsinki-NLP/opus-mt-zh-en Hugging FaceWe’re on a journey to advance and democratize artificial intelligence through open source and open science.https://huggingface.co/Helsinki-NLP/opus-mt-zh-en?text%E6%88%91%E5%8F%AB%E6%B2%83%E5%B0%94%E5%A4%AB%E5%86%8…

【Java入门合集】第一章Java概述

【Java入门合集】第一章Java概述 博主:命运之光 专栏:JAVA入门 学习目标 1.理解JVM、JRE、JDK的概念; 2.掌握Java开发环境的搭建,环境变量的配置; 3.掌握Java程序的编写、编译和运行; 4.学会编写第一个Java程序&#x…

Python 科研绘图可视化(后处理)Matplotlib - RGBAxes

Introduction 科研可视化是将数据和信息转化为可视化形式的过程,旨在通过图形化展示数据和信息,使得科研工作者能够更好地理解和分析数据,并从中发现新的知识和洞见。科研可视化可以应用于各种领域,如生物学、物理学、计算机科学…

一文带你入门C++类和对象【十万字详解,一篇足够了】

本文字数较多,建议电脑端访问。不多废话,正文开始 文章目录 ———————————————【类和对象 筑基篇】 ———————————————一、前言二、面向过程与面向对象三、结构体与类1、C中结构体的变化2、C中结构体的具体使用3、结构体 --&…