赞
踩
基本概念: 数据增广是指通过对原始数据集进行一系列的变换来增加数据集数量,这些变换可以是几何变换(如旋转、缩放、裁剪等)、颜色变换(如改变亮度、对比度等)或添加噪声等方式。通过数据增广,可以生成新的训练数据,使模型更好地适应各种变化,提高模型的性能。
采集数据得到的训练场景与实际部署场景不同是常见的问题,这种变化有时会显著影响模型表现。在训练集中尽可能模拟部署时可能遇到的场景对模型的泛化性十分重要。
数据增强是指在一个已有数据集上操作使其有更多的多样性。对语音来说可以加入不同的背景噪音,对图片而言可以改变其颜色,形状等。
一般来说不会先将数据集做增广后存下来再用于训练;而是直接在线生成,从原始数据中读图片并随机做数据增强,再进入模型训练。通常只在训练时做数据增强而测试时不用。可以将数据增强理解为一个正则项。
翻转
左右翻转,上下翻转
切割
颜色
其他
问题引入:很多时候,例如我们想对家具进行分类,但是往往在努力收集数据得到的数据集也比较小假如我们想识别图片中不同类型的椅子,然后向用户推荐购买链接。
一种可能的方法是首先识别100把普通椅子,为每把椅子拍摄1000张不同角度的图像,然后在收集的图像数据集上训练一个分类模型。 尽管这个椅子数据集可能大于Fashion-MNIST数据集,但实例数量仍然不到ImageNet中的十分之一。
适合ImageNet的复杂模型可能会在这个椅子数据集上过拟合。 此外,由于训练样本数量有限,训练模型的准确性可能无法满足实际要求。为了避免这种情况,我们可以有两种方法:
显然的想法就是收集更多的数据,但是,收集和标记数据可能需要大量的时间和金钱。 例如,为了收集ImageNet数据集,研究人员花费了数百万美元的研究资金。 尽管目前的数据收集成本已大幅降低,但这一成本仍不能忽视。
我们可以考虑迁移学习将从源数据集学到的知识迁移到目标数据集。 例如,尽管ImageNet数据集中的大多数图像与椅子无关,但在此数据集上训练的模型可能会提取更通用的图像特征,这有助于识别边缘、纹理、形状和对象组合。 这些类似的特征也可能有效地识别椅子。
在源数据集(例如ImageNet数据集)上预训练神经网络模型,即源模型。
创建一个新的神经网络模型,即目标模型。这将复制源模型上的所有模型设计及其参数(输出层除外)。我们假定这些模型参数包含从源数据集中学到的知识,这些知识也将适用于目标数据集。我们还假设源模型的输出层与源数据集的标签密切相关;因此不在目标模型中使用该层。
向目标模型添加输出层,其输出数是目标数据集中的类别数。然后随机初始化该层的模型参数。
在目标数据集(如椅子数据集)上训练目标模型。输出层将从头开始进行训练,而所有其他层的参数将根据源模型的参数进行微调。
通常来讲,微调速度更快,并且具有较强的正则性,一般学习率比较小,也不需要很多轮的数据迭代,对于不同的任务往往只需要改变最后输出层,这一层随机初始化即可。
在目标检测中,我们通常使用边界框(bounding box)来描述对象的空间位置。 边界框是矩形的,由矩形左上角的以及右下角的x和y坐标决定。 另一种常用的边界框表示方法是边界框中心的(x,y)轴坐标以及框的宽度和高度。
在这里,我们定义在这两种表示法之间进行转换的函数:box_corner_to_center
从两角表示法转换为中心宽度表示法,而box_center_to_corner
反之亦然。 输入参数boxes
可以是长度为4的张量,也可以是形状为(n,4)的二维张量,其中n是边界框的数量。
#@save def box_corner_to_center(boxes): """从(左上,右下)转换到(中间,宽度,高度)""" x1, y1, x2, y2 = boxes[:, 0], boxes[:, 1], boxes[:, 2], boxes[:, 3] cx = (x1 + x2) / 2 cy = (y1 + y2) / 2 w = x2 - x1 h = y2 - y1 boxes = torch.stack((cx, cy, w, h), axis=-1) return boxes #@save def box_center_to_corner(boxes): """从(中间,宽度,高度)转换到(左上,右下)""" cx, cy, w, h = boxes[:, 0], boxes[:, 1], boxes[:, 2], boxes[:, 3] x1 = cx - 0.5 * w y1 = cy - 0.5 * h x2 = cx + 0.5 * w y2 = cy + 0.5 * h boxes = torch.stack((x1, y1, x2, y2), axis=-1) return boxes
# bbox是边界框的英文缩写
dog_bbox, cat_bbox = [60.0, 45.0, 378.0, 516.0], [400.0, 112.0, 655.0, 493.0]
bbox_to_rect
。 它将边界框表示成matplotlib
的边界框格式。#@save
def bbox_to_rect(bbox, color):
# 将边界框(左上x,左上y,右下x,右下y)格式转换成matplotlib格式:
# ((左上x,左上y),宽,高)
return d2l.plt.Rectangle(
xy=(bbox[0], bbox[1]), width=bbox[2]-bbox[0], height=bbox[3]-bbox[1],
fill=False, edgecolor=color, linewidth=2)
fig = d2l.plt.imshow(img)
fig.axes.add_patch(bbox_to_rect(dog_bbox, 'blue'))
fig.axes.add_patch(bbox_to_rect(cat_bbox, 'red'));
定义与背景:
算法流程:
创新与特点:
后续发展:
RCNN需要对每个锚框进行CNN运算,这些特征抽取计算有重复,并且锚框数量大,特征抽取的计算量也大。Fast RCNN改进了这种计算量大的问题
使用CNN对整张图片抽取特征(快的关键)
使用Rol池化层对每个锚框(将在原图片中搜索到的锚框,映射到CNN得到的结果上),生成固定长度的特征
Fast R-CNN是目标检测领域的一个重要模型,它在R-CNN的基础上进行了改进,显著提高了检测速度和效率
一、定义与背景
二、算法流程
Fast R-CNN的算法流程主要包括以下几个步骤:
三、特点与优势
生成锚框
SSD模型
总结
YOLO(You Only Look Once)是一种高效的目标检测算法,它通过一次前向传播即可同时预测多个目标的位置和类别,显著提高了目标检测的速度和效率。
YOLOv1
1. 基本原理
2. 特点
3. 局限性
对小目标和密集目标的检测效果可能不佳。
由于网格划分,有时会出现边界框定位不准确的情况。
YOLOv2
1. 改进点
2. 拓展数据集
YOLO9000:除了使用COCO数据集进行训练外,还结合了ImageNet数据集,实现了对9000多种类别的检测。
YOLOv3
1. 改进点
使用更深、更复杂的网络结构Darknet-53,提高了特征提取能力。
引入了多尺度预测,提高了对不同大小目标的检测效果。
使用了逻辑回归损失函数来替代softmax进行分类预测,以处理多标签分类问题。
YOLOv4
1. 改进点
2. 性能
基于卷积神经网络(CNN)的样式迁移是这一领域的奠基性工作。其工作原理大致如下:
初始化合成图片:通常将合成图片初始化为内容图片。
选择预训练的卷积神经网络:用于抽取图片的特征。在训练过程中,该网络的权重保持不变。
特征抽取:卷积神经网络通过多个层逐级抽取图像的特征。可以选择某些层的输出作为内容特征或样式特征。
训练过程:
样式迁移常用的损失函数由三部分组成:
样式迁移在艺术创作、广告设计、游戏开发等领域具有广泛的应用前景。例如,可以将名画的风格迁移到现代照片上,创造出独特的艺术效果;也可以将不同的艺术风格应用于广告图像,提高广告的吸引力和创新性。
如下图所示,可以用一个预训练好的神经网络来实现样式迁移:
内容损失
神经网络内容相关层的输出的相似度可以直接反应两张图片在内容上的相似度,因此内容损失可以直接将对应层的输出视为内容直接求平方差损失。
风格损失:格拉姆矩阵
对于内容层,可以直接将对应层的输出求平方差损失,但是对于风格则略有不同
一般认为,风格层对应的输出的多个通道分别对应着不同类型的信息,如果将输出的形状从 [ b a t c h _ s i z e = 1 , c h a n n e l s , h , w ] [batch\_size=1,channels,h,w] [batch_size=1,channels,h,w]转化为 [ c h a n n e l s , h ∗ w ] [channels,h*w] [channels,h∗w]就能得到通道数个向量,以 x 1 , x 2 . . . x c x_1,x_2...x_c x1,x2...xc表示,代表不同通道所提取出的不同信息,而风格可以视作这些信息之间的关联,即相似度。
定义格拉姆矩阵 X ∗ X T ∈ R c ⋅ c \bold X * \bold X^T \in R^{c \cdot c} X∗XT∈Rc⋅c,矩阵的第i行第j列即向量 x i x_i xi与 x j x_j xj的内积,这个矩阵就代表了一张图片的风格。
对于生成图片和风格图片的格拉姆矩阵求平方差损失就能得到所需的风格损失
此外,为了让风格损失不受格拉姆矩阵及向量的大小影响,实际将格拉姆矩阵除以这些大小 c h a n n n e l s ∗ h ∗ w channnels*h*w channnels∗h∗w。
全变分损失
用于去除高频噪点(过明过暗像素点)
∑
i
,
j
∣
x
i
,
j
−
x
i
+
1
,
j
∣
+
∣
x
i
,
j
−
x
i
,
j
+
1
∣
\sum_{i, j} \left|x_{i, j} - x_{i+1, j}\right| + \left|x_{i, j} - x_{i, j+1}\right|
i,j∑∣xi,j−xi+1,j∣+∣xi,j−xi,j+1∣
https://www.kaggle.com/competitions/cifar-10
[已解决]
import os
os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"
[已解决]
解决方案:使用相对路径 ,进行简化代替
[已解决]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。