训练CV模型常用的方法与技巧

AI测试引擎中CV和ML模型的技术架构 此层负责收集各种类型的数据,为后续的模型训练和测试提供基础。对于CV模型,主要采集图像、视频数据,可来源于摄像头、图像数据库等;对于ML模型,采集结构化数据(如表格数据)、非结构化数据(如文本数据)等,数据来源包括业务系统日志、传感器数据等。 阅读详情
AI摘要

本文介绍了训练图像识别模型时常用的一些技巧,包括图像增强方法(如颜色调整、随机裁剪等)、模型选择与改进、学习率调度、优化器的选择、正则化手段、标签平滑、知识蒸馏、伪标签和错误分析。这些技巧对于提高模型性能和泛化能力具有重要意义。,

最近参加一个CV比赛,看到有参赛者分享了自己训练图像识别模型时常用到的小技巧,故对其进行记录、整理,方便未来继续学习。整理了很多,它们不一定每次有用,但请记在心中,说不定未来某个任务它们就发挥了作用!

主要从以下9个方面进行介绍:

  1. 图像增强

  1. 更好的模型

  1. 学习率和scheduler

  1. 优化器

  1. 正则化手段

  1. 标签平滑

  1. 知识蒸馏

  1. 伪标签

  1. 错误分析

1.图像增强

以下列出了许多增强方式,有的甚至没见过,但是也不是每一种增强方式都是有利的,需要自己根据任务和实验进行选择合适的增强方式。

颜色增强

Color Skew:

这种增强通过将每个通道乘以随机选择的系数来随机调整图像的色调、饱和度和亮度。系数从 [0:6;1:4] 的范围内选择,以确保生成的图像不会过于失真。

def color_skew(image):
    h, s, v = cv2.split(image)
    h = h * np.random.uniform(low=0, high=6)
    s = s * np.random.uniform(low=1, high=4)
    v = v * np.random.uniform(low=0, high=6)
    return cv2.merge((h, s, v))

RGB Norm:

这种增强通过从每个通道的值中减去每个通道的平均值并除以通道的标准差来标准化图像的 RGB 通道。这有助于标准化图像中的值,并可以提高模型的性能。

def rgb_norm(image):
    r, g, b = cv2.split(image)
    r = (r - np.mean(r)) / np.std(r)
    g = (g - np.mean(g)) / np.std(g)
    b = (b - np.mean(b)) / np.std(b)
    return cv2.merge((r, g, b))

Black and White:

这种增强通过将图像转换为灰度色彩空间将图像转换为黑白。

defblack_and_white(image):
    return cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)

Ben Graham: Greyscale + Gaussian Blur:

这种增强将图像转换为灰度并应用高斯模糊来平滑图像中的任何噪声或细节。

def ben_graham(image):
    image = cv2.cvtColor(image, cv2.COLOR_RGB2HSV)
    image = cv2.GaussianBlur(image, (5, 5), 0)
    return image

Hue, Saturation, Brightness:

这种增强将图像转换为 HLS 色彩空间,HLS 色彩空间将图像分成色调、饱和度和亮度通道。

def hsb(image):
    return cv2.cvtColor(image, cv2.COLOR_RGB2HLS)

LUV Color Space:

这种增强将图像转换为 LUV 色彩空间,该空间旨在在感知上保持一致并实现更准确的色彩比较。

def luv(image):
    return cv2.cvtColor(image, cv2.COLOR_RGB2LUV)

Alpha Channel:

这种增强为图像添加了一个 alpha 通道,可用于增加透明效果。

def alpha_channel(image):
    return cv2.cvtColor(image, cv2.COLOR_RGB2RGBA)

YZ Color Space:

这种增强将图像转换为 XYZ 颜色空间,这是一种与设备无关的颜色空间,可以实现更准确的颜色表示。

def xyz(image):
    return cv2.cvtColor(image, cv2.COLOR_RGB2XYZ)

Luma Chroma:

这种增强将图像转换为 YCrCb 颜色空间,它将图像分成亮度(亮度)和色度(颜色)通道。

def luma_chroma(image):
    return cv2.cvtColor(image, cv2.COLOR_RGB2YCrCb)

CIE Lab:

这种增强将图像转换为 CIE Lab 颜色空间,该颜色空间设计为感知均匀,可实现更准确的颜色比较。

def cie_lab(image):
    return cv2.cvtColor(image, cv2.COLOR_RGB2Lab)

YUV Color Space:

这种增强将图像转换为 YUV 颜色空间,它将图像分成亮度(亮度)和色度(颜色)通道。

def yuv(image):
    return cv2.cvtColor(image, cv2.COLOR_RGB2YUV)

Center Crop:

这种增强随机裁剪长宽比为 [3/4,4/3] 的矩形区域,然后按 [8%,100%] 之间的因子随机缩放裁剪,最后将裁剪调整为 img_{size} * img_{size} img_{size} * img_{size} 正方形。这是在每个批次上随机完成的。

transforms.CenterCrop((100, 100))

Flippings:

这种增强增加了图像随机水平翻转的概率。例如,概率为 0.5,图像有 50% 的机会被水平翻转。

def flippings(image):
    if np.random.uniform() < 0.5:
        image = cv2.flip(image, 1)
    return image

Random Crop:

这种增强从图像中随机裁剪出一个矩形区域。

transforms.RandomCrop((100, 100))

Random Resized Crop:

这种增强从图像中随机调整大小和裁剪矩形区域。

transforms.RandomResizedCrop((100, 100))

Color Jitter:

这种增强随机调整图像的亮度、对比度、饱和度和色调。

transforms.ColorJitter(brightness=0.5, contrast=0.5, saturation=0.5, hue=0.5)

Random Affine:

这种增强对图像随机应用仿射变换,包括旋转、缩放和剪切。

transforms.RandomAffine(degrees=45,translate=(0.1,0.1),scale=(0.5,2.0),shear=45)

Random Horizontal Flip:

以 0.5 的概率随机水平翻转图像。

transforms.RandomHorizontalFlip()

Random Vertical Flip:

这种增强以 0.5 的概率随机垂直翻转图像。

transforms.RandomVerticalFlip()

Random Perspective:

这种增强随机对图像应用透视变换。

transforms.RandomPerspective()

Random Rotation:

这种增强将图像随机旋转给定的度数范围。

transforms.RandomRotation(degrees=45)

Random Invert:

这种增强会随机反转图像的颜色。

transforms.RandomInvert()

Random Posterize:

这种增强随机减少了用于表示每个像素值的位数,从而产生了分色效果。

transforms.RandomPosterize(bits=4)

Random Solarize:

这种增强对图像随机应用曝光效果,其中高于某个强度阈值的像素被反转。

transforms.RandomSolarize(threshold=128)

Random Autocontrast:

这种增强通过将强度值拉伸到整个可用范围来随机调整图像的对比度。

transforms.RandomAutocontrast()

Random Equalize:

这种增强随机地均衡了图像的直方图,从而增加了对比度。

transforms.RandomEqualize()

更高级的增强方式

除了以上的基础增强方式,还有一些更高级的增强方式。

Auto Augment:

Auto Augment 是一种增强方法,它使用强化学习来搜索给定数据集的最佳增强策略。它已被证明可以提高图像分类模型的性能。

from autoaugment import AutoAugment

auto_augment = AutoAugment()
image = auto_augment(image)

Fast Autoaugment:

Fast Autoaugment 是 Auto Augment 方法的更快实现。它使用神经网络来预测给定数据集的最佳扩充策略。

from fast_autoaugment import FastAutoAugment

fast_auto_augment = FastAutoAugment()
image = fast_auto_augment(image)

Augmix:

Augmix 是一种增强方法,它将多个增强图像组合起来创建一个单一的、更加多样化和逼真的图像。它已被证明可以提高图像分类模型的鲁棒性和泛化能力。

from augmix import AugMix

aug_mix = AugMix()
image = aug_mix(image)

Mixup/Cutout:

Mixup 是一种增强方法,通过线性插值像素值来组合两个图像。Cutout 是一种从图像中随机删除矩形区域的增强方法。这些方法已被证明可以提高图像分类模型的鲁棒性和泛化能力。

"You take a picture of a cat and add some "transparent dog" on top of it. The amount of transparency is a hyperparam."

x=lambda*x1+(1-lambda)x2,

y=lambda*x1+(1-lambda)y2

Test Time Augmentations(TTA)

图像增强不仅在训练期间很有用,而且在测试期间也很有用。用在测试阶段,人们称它为TTA,只需将测试集的图像进行多次增强,应用于预测并对结果进行平均即可。这种方法能增强预测的鲁棒性,但是相应的,会增加时间。对测试集做增强,不适应太高级的增强方式,常见的如改变图像尺度,crop不同的地方,进行翻转等。

个人感觉这种做法应该只适用于比赛中吧~

2.更好的模型

虽然下面的模型距离现在相隔几年,但是它们出众的性能,使得它们仍在比赛中占据前排,这几年虽然出了更好的模型,但很多模型未开源或是太大了,并未得到更广泛的应用。

tf_efficientnetv1,v2系列
seresnext

以及一些可以尝试的想法和模型。

Swin Transformer
BeIT Transformer
ViT Transformers

在backbone后面添加更多隐藏层

添加更多层可能是有益的,因为你可以使用它们来学习更多高级特征,但它也可以缓和大型预训练模型的微调,甚至损害模型性能。

逐层解冻

一个可以让你获得微小改进的简单技巧是随着训练的进行解冻预训练骨干的层。先添加更多层并冻结backbone,然后再慢慢解冻backbone的参数让其参与训练。

## Weight freezing
for param in model.parameters():
  param.requires_grad = False 

## Weight unfreezing
for param in model.parameters():
  param.requires_grad = True

TensorFlow 中的权重冻结和解冻

## Weight freezing
layer.trainable = False
## Weight unfreezing
layer.trainable = True

3.学习率和scheduler

学习率和学习率调度器会影响模型的训练性能。改变学习率会对性能和训练收敛产生很大影响。

学习率schedulers

最近,One Cycle Cosine schedule 已经显示出在其在多个任务上提供更好的结果,你可以这样使用它:

One Cycle Cosine scheduling in PyTorch

from torch.optim.lr_scheduler import CosineAnnealingLR
optimizer = torch.optim.Adam(optimizer_grouped_parameters, lr=args.learning_rate, eps=args.adam_epsilon)
#这里使用
scheduler = CosineAnnealingLR(optimizer, T_max=num_train_optimization_steps)
num_training_steps = num_train_optimization_steps / args.gradient_accumulation_steps
# Update the scheduler
scheduler.step()
# step the learning rate scheduler here, 
# you will want to step the learning rate scheduler only once per optimizer step nothing more nothing less. 
# So in this case, it should be called before you expect the gradients to be applied.

tensorflow

## One Cycle Cosine scheduling in TensorFlow
optimizer = tf.keras.optimizers.Adam(learning_rate)
scheduler = tf.keras.optimizers.schedules.CosineDecay(learning_rate, decay_steps=num_training_steps)

使用学习率调度器的小技巧

  • 使用“Triangular”或“One Cyclic”方法进行学习率调整可以提供微妙但显着的改进——这些学习率调度的智能方法可以克服一些batch大小问题。

  • 花时间研究适合你的任务和你使用的模型的最佳学习率调度方法,这是你的模型如何收敛的一个非常重要的部分。

  • 学习率调度策略可用于训练具有较低batchsize或多个学习率的模型。

  • 众所周知,学习率很重要,所以首先优先尝试低学习率,再看看提高学习率是有助于还是损害模型的表现。

  • 在训练的后期增加学习率或多个学习率或batchsize或梯度累积或学习率调度策略有时会帮助模型更好地收敛,这是一种高级技术,因为有时它会损害性能但前提是你给予它太大的值 - 记得测试它。

  • 当使用梯度累积或多个学习率或高批量大小时,Loss scaling有助于减少损失方差并改善梯度流,但如果你试图通过增加批量大小来解决该问题,请尝试增加学习率,因为它有时会产生更好的性能。

4.优化器

现在很多人都在使用 Adam 或 AdamW。如果你希望从 Adam 优化器中获得最佳性能,则需要了解几件事:

找到最佳的权重衰减值可能很麻烦,依靠大量的实验(和运气)。

  • 另一个重要的超参数是 Adam 优化器中使用的 beta1 和 beta2,选择最佳值取决于你的任务和数据。许多新任务可以从较低的 beta1 和较高的 beta2 中获益,而在已建立的任务中它们会执行相反的操作。再强调一遍:实验将是你最好的朋友。

  • 在 Adam 优化器的世界中,首要规则是不要低估优化器 epsilon 值的重要性。寻找最佳权重衰减超参数的相同原则也适用于此。

  • 不要过度使用梯度裁剪范数——当你的梯度爆炸时它有时可能会有所帮助,反之亦然——它会阻止某些任务的收敛。

  • 梯度累积仍然可以提供一些微妙的好处,我通常累积大约 2 步的梯度,但如果你的 GPU 没有耗尽内存,你最多可以推送 8 步梯度累积。使用混合精度时,梯度累积也很有用。

另外,如果你以足够的时间去调整 SGD的动量,你可能会得到更好的结果,但这同样需要大量调整。

以下还有几个值得注意的优化器:

  • AdamW:这是 Adam 算法的扩展,可防止外层模型权重的指数权重衰减,并鼓励低于默认权重的惩罚超体积。

  • Adafactor:它被设计成具有低内存使用率和可扩展性。该优化器可以使用多个 GPU 提供显着的优化器性能。

  • Novograd:基本上是另一个类似 Adam 的优化器,但具有更好的特性。它是用于训练 bert-large 模型的优化器之一。

  • Ranger:Ranger 优化器是一个非常有趣的优化器,它在性能优化方面的解决方案中取得了不错的成绩,但它不是很出名或不受支持。

  • Lamb:由 GLUE 和 QQP 竞赛获胜者开发的 GPU 优化可重用 Adam 优化器。

  • Lookahead:一种流行的优化器,你可以在其他优化器之上使用它,它将为你提供一些性能提升。

5.正则化手段

使用dropout!在层之间添加dropout通常会产生更高的训练稳定性和更可靠的结果,请在隐藏层中使用。Dropout 也可用于小幅提高性能,在训练前尝试设置层 dropouts。任务和模型。

正则化:当你的神经网络过度拟合或欠拟合时,正则化可以极大地提升性能,对于正常的机器学习模型,L1 或 L2 正则化是可以的。

始终使用实验来检验想法:使用实验。实验。实验并尝试模型。

Multi Validations:你可以通过使用Multi Validations来提高模型对过度拟合的稳健性。然而,这是以计算时间为代价的。

6.标签平滑

论文链接:

When Does Label Smoothing Help?:

https://arxiv.org/pdf/1906.02629.pdf

核心公式一行概括之:

通常效果很好,可以在很多比赛中看到它的身影。以二分类任务为例,以下给出标签平滑的示例代码,可以直接用。

Tensorflow:

loss = BinaryCrossentropy(label_smoothing = label_smoothing)

Pytorch:

from torch.nn.modules.loss import _WeightedLoss

class SmoothBCEwLogits(_WeightedLoss):
    def __init__(self, weight = None, reduction = 'mean', smoothing = 0.0, pos_weight = None):
        super().__init__(weight=weight, reduction=reduction)
        self.smoothing = smoothing
        self.weight = weight
        self.reduction = reduction
        self.pos_weight = pos_weight

    @staticmethod
    def _smooth(targets, n_labels, smoothing = 0.0):
        assert 0 <= smoothing < 1
        with torch.no_grad(): targets = targets * (1.0 - smoothing) + 0.5 * smoothing
        return targets

    def forward(self, inputs, targets):
        targets = SmoothBCEwLogits._smooth(targets, inputs.size(-1), self.smoothing)
        loss = F.binary_cross_entropy_with_logits(inputs, targets,self.weight, pos_weight = self.pos_weight)
        if  self.reduction == 'sum': loss = loss.sum()
        elif  self.reduction == 'mean': loss = loss.mean()
        return loss

7.知识蒸馏

用一个大的teacher network来指导一个small network的学习。

步骤:

  • 训练大型模型:在数据上训练大型模型。

  • 计算软标签:使用训练好的大模型计算软标签。即大模型“软化”后softmax的输出

  • Student模型训练:在大模型的基础上,训练一个基于教师输出的学生模型作为额外的软标签损失函数,通过插值调整两个损失函数的比例。

8.伪标签

使用模型标记未标记的数据(例如测试数据),然后使用新的标记数据来重新训练模型。

步骤:

  • 训练教师模型:根据你拥有的数据训练模型。

  • 计算伪标签:使用训练好的大模型为未标注数据计算软标签。

  • 仅使用模型“确定”的目标:仅使用最高置信度的预测作为伪标签,以尽可能避免错误。(如果你不这样做,它可能不起作用)

  • Studnet 模型训练:根据你拥有的新标记数据训练学生模型。

9.错误分析

很多人在训练的时候,都只是一昧的调参,却不懂得分析,在公司里面也常常听到分析bad case这一词。它同样很重要,甚至有时候可以为我们提供额外的思路。可以为你节省大量时间的一个重要做法是使用你的模型来查找更难或损坏的数据样本。图像对于你的模型来说“更难”的原因可能有很多,例如,小目标对象、不同颜色、切断目标、无效注释等等。尝试从中找出原因,这可能能帮助你。

错误有时候是好消息!

这些它们正是将排行榜顶部大佬与其他参与者区分开来的样本。如果你很难解释你的模型发生了什么,那么看看你的模型遇到的验证样本。

Finding Your Model's Errors!

查找错误的最简单方法是根据模型的置信度分数对验证样本进行排序,并查看哪些样本的预测置信度最低。

mistakes_idx = [img_idx for img_idx in range(len(train)) if int(pred[img_idx] > 0.5) != target[img_idx]]
mistakes_preds = pred[mistakes_idx]
sorted_idx = np.argsort(mistakes_preds)[:20]
# Show the images of the sorted idx here..

总结

以上,整理了很多,它们不一定每次有用,但请记在心中,说不定未来某个任务它们就发挥了作用!

训练自己的数据集并通过cv2引用实现摄像头跟踪 可使用CVAT(计算机视觉标注工具)免费标注工具或者使用Labelimg,它是一种图形图像标注工具,用于使用图像中的边界框来标记对象。它是用 Python 编写的。你可以将标注导出为 PASCAL VOC 格式的 XML 文件。 阅读详情

相关推荐

CV模型性能调优方法与技巧

作者:禅与计算机程序设计艺术 1.简介 图像分类(Classification)、目标检测(Object Detection)、实例分割(Instance Segmentation)等计算机视觉任务都需要根据输入图像对不同类别或目标进行区分和定位。随着模型的深入学习能力以及解决各种任务的方法的提出,人们

AI天才研究院 1714

CV学习笔记-推理和训练

推理和训练 1. 概述 训练(Training): 一个初始神经网络通过不断的优化自身参数,来让自己变得准确。这整个过程就称之为训练(Training) 推理(Inference): 你训练好了一个模型,在训练数据集中表现良好,但是我们的期望是它可以对以前没看过的图片进行识别。你重新拍一张图片扔进网络让网络做判断,这种图片就叫做现场数据(livedata),如果现场数据的区分准确率非常高,那么证明你的网络训练的是非常好的。这个过程,称为推理(Inference)。 Supervised Learning有

Moresweet 猫甜 2750

javaCV神经网络训练

javaCV训练样本成xml文件,且带有识别功能,一个类,多个方法,调用简单

20、日光化 transforms.RandomSolarize(threshold, p=0.5)

transforms.RandomSolarize(threshold, p=0.5) 通过反转阈值以上的所有像素值,以给定的概率随机对图像进行日光化 import torchvision.transforms as transform from PIL import Image import matplotlib.pyplot as plt import numpy as np import torch img0=Image.open('lin-xiao-xun-000003.jpg') img1=t

lichaoqi1的博客 1177

win11禁止更新,草履虫教程

本文介绍了彻底禁止Windows 11系统更新的组合方法,包括禁用核心服务、修改注册表、关闭计划任务和使用组策略(专业版适用)。作者特别提醒,禁止更新会影响系统安全性,建议实体机保持更新,仅虚拟机等特殊情况下使用这些方法。同时强调即使禁用更新,也应定期手动检查重要安全补丁。文章最后附上了作者的个人网站信息。

testwzc1的博客 561

5.2 自抗扰控制 (ADRC)

自抗扰控制(Active Disturbance Rejection Control, ADRC)是由韩京清研究员于1998年提出的一种不依赖被控对象精确数学模型的新型控制技术[reference:0]。其核心思想是将系统的模型不确定性、内部参数摄动以及外部负载变化等所有影响统一定义为“总扰动”,通过一个名为扩张状态观测器(ESO)的环节对其进行实时估计并主动补偿,从而实现动态解耦和强鲁棒性。

技术工作者 1176

计算机视觉(CV)自然语言处理(NLP)大模型应用,如何实现小模型

未来,大模型将更加普及,应用范围也将进一步扩展,如医疗、金融、农业等领域。同时,我们也需要关注大模型的可解释性、隐私保护等问题,以推动其更加健康、可持续的发展。近年来,随着数据规模的不断增长和计算能力的提升,大模型的出现成为了可能。然而,大模型也面临着诸多挑战,如参数数量庞大、训练时间长、资源消耗大等。在CV领域,大模型如ResNet、EfficientNet等已成为图像分类、目标检测等任务的主流。大模型是人工智能领域的重要里程碑,它们不仅改变了我们对人工智能的认识,也为我们带来了更多的机遇和挑战。

优快云7689的博客 1546

维纳滤波和卡尔曼滤波

本文的主要内容是维纳滤波和卡尔曼滤波的介绍,包含匹配滤波器、维纳滤波器、维纳预测、卡尔曼滤波等内容。

西岸贤 9520

LUV色彩空间介绍及从RGB到LUV的转换

CIE 1931 XYZ 色彩空间(也叫做 CIE 1931 色彩空间)是其中一个最先采用数学方式来定义的色彩空间,它由国际照明委员会(CIE)于1931年创立。人类眼睛有对于短(S)、中(M)和长(L)波长光的感受器(叫做视锥细胞),所以原则上只要三个参数便能描述颜色感觉了。在三色加色法模型中,如果某一种颜色和另一种混合了不同份量的三种原色的颜色,均使人类看上去是相同的话,我们把这三种原色的份量

kit_147的专栏 3万+

Windows平台无人机仿真:从零搭建SITL环境与QGC联调

本文详细指导了在Windows平台上从零搭建无人机软件在环(SITL)仿真环境,并与QGroundControl(QGC)进行联调的完整流程。通过使用Cygwin工具链,开发者可以在没有实体硬件的情况下,模拟运行ArduPilot飞控,并通过MAVLink协议连接QGC地面站进行全功能测试,为无人机软件开发提供了一个安全、经济的虚拟沙盒环境。

weixin_29239279的博客 409

Arduino MLX90393磁力计驱动库:高精度三轴霍尔传感器开发指南

三轴霍尔效应磁力计是嵌入式系统中实现无接触角度检测、电子罗盘与电流传感的核心器件。其工作原理基于霍尔电压随外磁场矢量变化的物理特性,通过I²C接口输出高分辨率(16/20-bit)XYZ轴原始数据,并集成温度补偿与数字滤波功能。技术价值体现在确定性响应、低功耗(典型0.5 μA待机)及强抗干扰能力,适用于电池供电设备与实时操作系统环境。典型应用场景包括电机位置反馈、永磁体旋转角度解算、工业编码器和地磁导航。本库专为Arduino生态优化,深度封装MLX90393寄存器协议与自校准流程,同时兼容STM32、E

weixin_29363791的博客 642

CV深度学习模型基本概述

论文地址VGGNet突出贡献是证明了很小的卷积,通过增加网络深度可以有效提高性能;小卷积核组:通过堆叠多个3*3的卷积核来替代大的卷积核,以减少所需参数;全部使用3x3卷积核,不仅会涉及到计算量,还影响到感受野。在VGG中,使用3个3x3卷积核来替代7x7卷积核,主要目的是保证在具有相同感受野的条件下,提高网络深度,一定程度上提升神经网络的效果。感受野,简单理解是输出Feature Map上的一个神经元对应输入层的区域大小。

m0_62649870的博客 3034

[AI] 嵌入模型选择:bge / text-embedding-3 / Jina Embeddings 对比与选型指南

摘要: 本文对比了BGE-M3、OpenAI和Jina三种主流嵌入模型在语言覆盖、性能、延迟、维度和成本等维度的差异。BGE-M3适合中文场景,本地部署成本低;OpenAI API多语能力强但依赖网络;Jina在多语表现突出但需关注商用许可。测试显示BGE-M3本地延迟3-6ms,OpenAI API延迟200-600ms。选型建议:隐私场景选BGE本地部署,多语低维护选OpenAI,高精度选Jina。部署时需注意批处理优化、向量库压缩和商用许可等问题,建议建立评测指标并监控关键指标。

每日出拳老爷子的博客 428

深度学习「CV」学习实践指南

十次的结果的正确率(或差错率)的平均值作为对算法精度的估计,一般还需要进行多次十折交叉验证(例如十次十折交叉验证),再求其均值,作为对算法准确性的估计。卷积运算的目的是提取输入的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网络能从低级特征中迭代提取更复杂的特征。LeNet5通过巧妙的设计,利用卷积、参数共享、池化等操作提取特征,避免了大量的计算成本,最后再使用全连接神经网络进行分类识别,这个网络也是最近大量神经网络架构的起点。因此,决策树是许多商业规则归纳系统的基础。

zhangjianke888的博客 694

潇洒郎: 小白一次性成功——红米 Note 12 5G Android12 系统13.0.16/14.0.9 小米红米手机解BL锁+ROOT-刷面具—官方ROM下载-线刷降级—解锁system系统分区

小白一次性成功——红米 Note 12 5G Android12 系统13.0.16/14.0.9 小米红米手机解BL锁+ROOT-刷面具—官方ROM下载-线刷降级—解锁system系统分区

潇洒郎的博客 4585

YOLOv8的二次创新 | 结合iRMB与EMA打造全新的iEMA机制,提升动态检测性能【附保姆级代码】

YOLOv8继承了YOLO系列的轻量化和高效检测特性,同时通过改进的架构设计使得其在实时场景下具有更高的检测精度。然而,随着检测需求的增加,尤其是在动态目标检测和长时间序列检测中,YOLOv8的鲁棒性依然可以提升。通过iEMA机制的引入,我们将在这些方面进行进一步优化。iRMB模块是我们对传统Residual Block的进一步改进。通过多层特征提取,iRMB能够捕捉更多层次的特征信息,并通过引入轻量化的残差结构,提升计算效率。

一键难忘的博客 3085

提高CV模型训练性能的 9 个技巧

导读 本文[1] 主要想分享一些可能有助于提高计算机视觉任务模型训练速度和准确性的一般技巧或建议,这些建议是通过课程、阅读顶级文章或论文学习所得来的。 1. 分辨率 从较小的分辨率开始: 前两个技巧侧重于实现更快的模型——您尝试的想法越多,获得更好结果的机会就越大。为了更快地迭代,我们需要从“小”着手以减少我们的训练时间: Ayush 创建了一个指向所有共享数据集的数据集线程[2]。从较小的数据集尺寸或分辨率开始可以让您更快地迭代。 如果您使用较小的 GPU 内存,那么可以通过增加 batch_size

冷冻工厂 1270

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

NLP几种常用的对抗训练方法

NLP几种常用的对抗训练方法   对抗训练本质是为了提高模型的鲁棒性,一般情况下在传统训练的基础上,添加了对抗训练是可以进一步提升效果的,在比赛打榜、调参时是非常重要的一个trick。对抗训练在CV领域内非常常用,那么在NLP领域如何使用呢?本文简单总结几种常用的对抗训练方法。   对抗训练旨在对原始输入样本 xxx 上施加扰动 radvr_{adv}radv​,得到对抗样本后用其进行训练: 公式理解: 最大化扰动:挑选一个能使得模型产生更大损失(梯度较大)的扰动量,作为攻击; 最小化损失:根据最大

夏栀的博客 9193

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

零基础入门CV赛事(四):模型训练与验证

零基础入门CV赛事(四):模型训练与验证 目录零基础入门CV赛事(四):模型训练与验证4 模型训练与验证4.1 学习目标4.2 构造验证集• 留出法(Hold-Out)• 交叉验证法(Cross Validation,CV)• 自助采样法(BootStrap)4.3 模型训练与验证4.4 模型保存与加载4.5 模型调参流程4.6 本章小节【参考资料】 在上一章节我们构建了一个简单的CNN进行训练,并可视化了训练过程中的误差损失和第一个字符预测准确率,但这些还远远不够。一个成熟合格的深度学习训练流程至少具备以

南有芙蕖 583

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

CV-模型训练与验证

构建验证集 模型训练和验证 模型保存与加载 模型调参 构造验证集 验证集存在的原因 评估模型的重点在于将可用数据还分为三个部分:训练集(training set)、验证集(validation set)和测试集(test set)。在训练集上面训练模型,并且在验证集上面评估模型。一旦模型被准备好,最后就在测试集上面测试模型。   不这样做的原因在于,开发一个模型通常需要我们去调整模型的配置:例如,选择最佳的全连接层数或者每一层的节点数(这些被称之为模型的超参数,以区分于模型自身的参数,如:模型的权重和偏.

evenson1的博客 1815

10倍提速指南:Horovod多GPU训练CV模型性能调优实战

Horovod是一款针对TensorFlow、Keras、PyTorch和Apache MXNet的分布式训练框架,能够帮助开发者轻松实现多GPU并行训练,显著提升计算机视觉(CV)模型的训练效率。本文将分享10个实用的性能调优技巧,让你的CV模型训练速度提升10倍不是梦! ## 一、了解Horovod的分布式训练架构 Horovod的核心优势在于其高效的分布式通信机制。通过MPI(Messa

gitblog_00247的博客 1232

零基础入门CV之 模型训练与验证

1、验证集的构造 在数据挖掘竞赛中一般给出的数据有两种,一种是直接给出训练集、验证集和测试集,另一种是只给出训练集和测试机,就需要我们自己来划分验证机。 为什么要划分验证集呢? 因为在数据分析过程中,模型如果只利用训练集进行训练,就很有可能导致过拟合,也就是说模型对训练集的分布及细节学习的很到位,导致对于从没有见过的测试集就比较差,故模型的泛化能力就很差。为了解决该问题,需要构建一个与测试集具有大体相同分布和细节的数据集,降低模型过拟合,提高模型泛化能力,该数据集称为验证集。 常用验证集的构造方法 (1)

zhangxiaolinxin的博客 1031

CV预训练模型集合

前言 此处推荐一个CV预训练模型集合的github:https://github.com/balavenkatesh3322/CV-pretrained-model 其中,集合了许多常见方法的框架和预训练模型,包括了在Tensorflow、Keras、PyTorch、Caffe、MXNet等多个平台上的预处理模型。 What is pre-trained Model? 预训练模型是由其他人创建的用于解决类似问题的模型。我们可以使用针对其他问题训练的模型作为起点,而不是从头开始构建模型来.

m0_61899108的博客 2279

CV预训练模型集合使用教程

该项目主要包含了计算机视觉(CV)领域的预训练模型集合。以下是基本的目录结构: ``` CV-pretrained-model/ ├── CONTRIBUTING.md # 贡献指南 ├── LICENSE # 开源许可证文件 ├── README.md # 项目简介 ├── logo.jpg # 项目图标 ├── netron.p...

gitblog_00646的博客 445

【预训练模型】一文串起从NLP到CV 预训练技术和范式演进

主题是深度学习中的预训练技术发展,基本思路是顺着CV和NLP双线的预训练技术发展演进。看他们怎么影响和交织。序言会大致的看一下,在2013年,在CNN时代的word2vec,在2020年,...

fengdu78的博客 1489

pytorch CV入门3-预训练模型与迁移学习

使用迁移学习,我们能够快速地为我们的自定义对象分类任务组建一个分类器,并实现高准确率。然而,这个例子并不完全公平,因为原始的VGG-16网络是预先训练的,用于识别猫和狗,因此我们只是重复使用了网络中已经存在的大部分模式。您可以预期在更奇特的领域特定对象上,例如工厂生产线上的细节或不同的树叶上,准确率会更低。您可以看到,我们现在解决的更复杂的任务需要更高的计算能力,并且不能轻易在CPU上解决。在下一个单元中,我们将尝试使用更轻量级的实现来使用更低的计算资源训练相同的模型,这将导致略低的准确率。

青椒的学习笔记 1508
上一篇: 目标检测开源数据集汇总
下一篇: YOLOv8训练自己的数据集(超详细)
AbnerAI
博客等级 码龄4年 751粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值