MIXUP理解

论文:Bag of Freebies for Training Object Detection Neural Networks
论文链接:https://arxiv.org/abs/1902.04103

     网上有很多对该论文的介绍,请自行百度:

     尽管mixup给人更合理一些的感觉,但它们都没有回答一个很重要的问题:两幅图像相加后,结果已经不是一幅合理的图像了,这跟我们通常说的数据扩增完全不是一回事,为什么效果还会好?

     让我们更数学化地描述这个问题,对于训练集对(x1,y1),(x2,y2),…,(xn,yn)(x1,y1),(x2,y2),…,(xn,yn),我们希望找到一个模型ff,使得y=f(x)y=f(x)。对于图像分类等任务,鉴于问题本身具有较强的非线性,所以我们一般会用非常深的网络来拟合。然而,网络越深也意味着更加容易对训练集过拟合。

假设模型已经有能力预测ya=f(xa),yb=f(xb)ya=f(xa),yb=f(xb)了,那么对于mixup,它说这样还不够,模型还要同时对εxa+(1−ε)xbεxa+(1−ε)xb输出εya+(1−ε)ybεya+(1−ε)yb才行,也就是

                            εya+(1−ε)yb=f(εxa+(1−ε)xb)εya+(1−ε)yb=f(εxa+(1−ε)xb)


ya,ybya,ybf(xa),f(xb)f(xa),f(xb)代替,那么得到

                                        εf(xa)+(1−ε)f(xb)=f(εxa+(1−ε)xb)

    这其实是一个函数方程,假如ε,xa,xbε,xa,xb都是任意的,那么上述函数方程的解就是“线性函数”,也就是说,只有线性函数才能使得上式恒成立,换句话说,mixup希望模型ff是一个线性函数

    我们知道,线性函数相当于没有加激活函数的单层神经网络,可以说是最简单的模型了,而我们实际建模时的模型则是深层的、具有大量参数的、具有强非线性能力的网络,而参数越多,越容易过拟合。这样一来,mixup的含义就很明显了:

mixup相当于一个正则项,它希望模型尽可能往线性函数靠近,也就是说,既保证模型预测尽可能准确,又让模型尽可能简单。

所以,mixup就是一个很强悍的模型过滤器:

在所有效果都差不多的模型中,选择最接近线性函数的那一个。

实际上是通过数据扩增的形式来给模型增加正则项,或者说对模型进行剪枝。

因此,我们就不需要纠结“相加后的图像都已经不是一幅合理的“图像”了,数据扩增为啥还会有效”的问题了,因为它不是数据扩增

参考链接:https://spaces.ac.cn/archives/5693

  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
图像mixup是一种用于数据增强的技术,可以增加训练数据的多样性并提高模型的泛化能力。该技术主要通过将两个不同的图像进行混合来创建一个新的训练样本。 在使用Python实现图像mixup时,我们需要使用一些图像处理库和深度学习框架,比如OpenCV和Tensorflow或PyTorch。以下是一个简单的实现过程: 1. 导入必要的库和模块: ``` import cv2 import numpy as np import tensorflow as tf ``` 2. 定义一个函数来加载和处理图像: ``` def load_image(image_path): # 使用opencv加载图像 image = cv2.imread(image_path) # 将图像像素值归一化到0到1之间 image = image / 255.0 return image ``` 3. 定义一个函数来进行图像mixup: ``` def mixup(image1, image2, label1, label2, alpha=0.2): # 生成一个随机的mixup系数 lam = np.random.beta(alpha, alpha) # 使用mixup系数对图像和标签进行混合 mix_image = lam * image1 + (1 - lam) * image2 mix_label = lam * label1 + (1 - lam) * label2 return mix_image, mix_label ``` 4. 在训练过程中,使用mixup函数生成新的训练样本: ``` # 加载图像和标签 image1 = load_image("image1.jpg") image2 = load_image("image2.jpg") label1 = tf.one_hot(0, num_classes) label2 = tf.one_hot(1, num_classes) # 进行图像mixup mix_image, mix_label = mixup(image1, image2, label1, label2) # 将mixup生成的新样本用于训练 # ... ``` 通过实现图像mixup,我们可以扩充训练数据集,以增强模型对新图像的泛化能力,从而提高模型的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值