秋招历险记-深度学习

深度学习

1、如何预防网络过拟合?

  • 数据集增广:对数据集进行操作、旋转、翻转等操作。添加干扰也可以认为是一种数据增强的方法。

  • 模型过于复杂:针对于mnist等比较简单的数据集却安排了一个比较强的模型。

    • Early Stopping:根据验证曲线来判定训练是否继续下去,可以认为若是在验证曲线上有比较长的一段时间出现了
    • BN正则化L1或者L2:L1和L2用于对于损失函数添加惩罚项来进行约束。
  • Dropout与多任务学习

2、卷积核一定越大越好?

并不是,首先随着卷积核变大,网络的训练参数会出现激增的情况,难以拟合;在VGG中提出用两个3×3的卷积可以实现代替5×5的卷积。卷积核如果多大会导致对于小目标内容的分类与检测效果不够好。

ResNet与DenseNet

原有的线性网络由于一味的网络层级叠加,由于反向传播中链式法则所决定的累乘效应,又或者存在极小梯度在传递链上的连续出现,又或者出现连续出现的极大梯度就会导致浅层网络无法接受反向传播给定的变化值,出现梯度弥散与梯度爆炸的问题。

3、样本不均衡的问题

样本类别分布不均衡导致的危害?

​ 样本类别不均衡将导致样本量少的分类所包含的特征过少,并很难从中提取规律;即使得到分类模型,也容易产生过度依赖与有限的数据样本而导致过拟合问题,当模型应用到新的数据上时,模型的准确性会很差。

解决方法:

随机过采样:从少数类样本集中随机重复抽取样本(有放回)以得到更多的样本;
随机欠采样:从多数类样本集中随机选择较少的样本(有放回/无放回);

随机过采样缺点:会导致对少量的困难样本复制多份,虽然扩大了困难样本的数据规模,但是也导致了模型出现了过拟合的问题,可能对于经过过采样的样本会有比较好的效果,但是对于新的困难样本表现的很差。随机欠采样缺点:对于简单样本会丢失部分样本,可能会丢失比较有用的样本,会导致某些特征出现欠拟合的问题。

4、卷积方式类型

卷积前后大小的计算公式:

普通卷积

分组卷积:将通道数进行分割,然后对不同的通道分别卷积,可以有效的减少参数。

空间可分离卷积:用参数更少的卷积核之积代替已有的卷积核

深度可分离卷积:考虑到原有的卷积将一张图片的不同通道层进行统一运算,没有考虑到不同通道之间的差异性,所以用depthwise与pointwise取代原有的卷积方式,在可以减少参数的情况下可以提高检测模型的能力。

空洞卷积:可以保证在参数量相同的情况下,实现更大的感受野,将原有的3*3的卷积核,中间添加不可训练的0值,可以模拟出不同大小的感受野。

可形变卷积:可以直接在原来的过滤器前面再加一层过滤器,这层过滤器学习的是下一层卷积核的位置偏移量(offset),这样只是增加了一层过滤器,或者直接把原网络中的某一层过滤器当成学习offset的过滤器,

5、Pytorch中的train方法和eval方法之间的差距?

train(),启动BN层和Dropout的参数,并将它们设置成True

eval(),不启动BN层和Dropout中的参数,并设置成True

在eval中,Dropout的处理办法,假设Dropout中drop_rate设置成0.5,则在eval时,激活所有神经元,并且乘上一个补偿系数。BN层则是进行一个Batch中的平移操作。

6、平滑标签

针对问题:

  • 针对模型中可能存在的错误标准问题
  • 使模型对自己的输出并不自信,具有较强的迁移能力

效果:

  • 减少类内距离、聚类增强
  • 放大类间距离,使得簇间分化

缺点:

  • 标签平滑如果用于知识蒸馏,会导致教师网络效果比较好,但是学生网络的效果很差,这是可能因为标签传播导致的数值偏移。

7、1*1的卷积有什么作用

  • 实现跨通道的交互与信息融合问题
  • 实现卷积核通道数的升维和降维
  • 实现了多个特征图的线性组合
  • 不印象卷积层的感受野,增强决策函数的非线性表达能力

8、激活函数与优化器

  • Sigmoid

  • SGD

  • SGD with momentum(SGDM)

  • Adagrad

  • RMSProp

  • Adam

9、数据增强方法

  1. GridMask代码详解
import torch
import torch.nn as nn
import numpy as np
from PIL import Image
import pdb
import math

class Grid(object):
    def __init__(self, d1, d2, rotate = 1, ratio = 0.5, mode=0, prob=1.):
        # 初始化参数
        self.d1 = d1
        self.d2 = d2
        self.rotate = rotate
        self.ratio = ratio
        self.mode=mode
        self.st_prob = self.prob = prob

    def set_prob(self, epoch, max_epoch):
        # 类似一个预热的过程,如果epoch>max_epoch
        self.prob = self.st_prob * min(1, epoch / max_epoch)

    def __call__(self, img):
        if np.random.rand() > self.prob:
            return img
        h = img.size(1)
        w = img.size(2)
        
        # 1.5 * h, 1.5 * w works fine with the squared images
        # But with rectangular input, the mask might not be able to recover back to the input image shape
        # A square mask with edge length equal to the diagnoal of the input image 
        # will be able to cover all the image spot after the rotation. This is also the minimum square.
        hh = math.ceil((math.sqrt(h*h + w*w)))
        # d 表示随机数(d1,d2)之间
        d = np.random.randint(self.d1, self.d2)
        #d = self.d
        
        # maybe use ceil? but i guess no big difference
        self.l = math.ceil(d*self.ratio)
        # 定义一个hh*hh大小的mask,hh可以认为根号下h平方+w平方
        mask = np.ones((hh, hh), np.float32)
        st_h = np.random.randint(d)
        st_w = np.random.randint(d)
        # d表示distance 表示间隔距离
        for i in range(-1, hh//d+1):
                s = d*i + st_h
                t = s+self.l
                s = max(min(s, hh), 0)
                t = max(min(t, hh), 0)
                mask[s:t,:] *= 0
        for i in range(-1, hh//d+1):
                s = d*i + st_w
                t = s+self.l
                s = max(min(s, hh), 0)
                t = max(min(t, hh), 0)
                mask[:,s:t] *= 0
        r = np.random.randint(self.rotate)
        mask = Image.fromarray(np.uint8(mask))
        mask = mask.rotate(r)
        mask = np.asarray(mask)
        mask = mask[(hh-h)//2:(hh-h)//2+h, (hh-w)//2:(hh-w)//2+w]

        mask = torch.from_numpy(mask).float().cuda()
        if self.mode == 1:
            mask = 1-mask

        mask = mask.expand_as(img)
        img = img * mask 

        return img

class GridMask(nn.Module):
    def __init__(self, d1, d2, rotate = 1, ratio = 0.5, mode=0, prob=1.):
        super(GridMask, self).__init__()
        self.rotate = rotate
        self.ratio = ratio
        self.mode = mode
        self.st_prob = prob
        self.grid = Grid(d1, d2, rotate, ratio, mode, prob)

    def set_prob(self, epoch, max_epoch):
        self.grid.set_prob(epoch, max_epoch)

    def forward(self, x):
        if not self.training:
            return x
        n,c,h,w = x.size()
        y = []
        for i in range(n):
            y.append(self.grid(x[i]))
        y = torch.cat(y).view(n,c,h,w)
        return y

10、感受野的计算方法

比如下图(该图为了方便,将二维简化为一维),这个三层的神经卷积神经网络,每一层卷积核的 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lrdYhW87-1650337802831)(https://www.zhihu.com/equation?tex=kernel_size%3D3)], [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qib1N3D2-1650337802832)(https://www.zhihu.com/equation?tex=stride%3D1)] ,那么最上层特征所对应的感受野就为如图所示的7x7。

img

二、计算方式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SGcsPw72-1650337802834)(https://www.zhihu.com/equation?tex=RF_{l%2B1}%3DRF_{l}%2B(kernel_size_{l%2B1}-1)]\times+feature_stride_{l})

其中 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5CQjES5E-1650337802836)(https://www.zhihu.com/equation?tex=RF)] 表示特征感受野大小, [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7c5rd9p7-1650337802837)(https://www.zhihu.com/equation?tex=l)] 表示层数, [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vdBXNMhC-1650337802838)(https://www.zhihu.com/equation?tex=feature_stride_l%3D\prod_{i%3D1}^{l}stride_i)], [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pnhLjMFC-1650337802838)(https://www.zhihu.com/equation?tex=l%3D0)] 表示输入层, [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kMXq941L-1650337802839)(https://www.zhihu.com/equation?tex=RF_{0}%3D1)] , [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nh5Gnfdn-1650337802839)(https://www.zhihu.com/equation?tex=feature_stride_0%3D1)] 。

  • 第一层特征,感受野为3

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cB9gNpPR-1650337802840)(https://www.zhihu.com/equation?tex=RF_{1}%3DRF_{0}%2B(kernel_size_{1}-1)]\times+feature_stride_{0}%3D1%2B(3-1)\times+1%3D3)

img

  • 第二层特征,感受野为5

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QT7BQORj-1650337802841)(https://www.zhihu.com/equation?tex=RF_{2}%3DRF_{1}%2B(kernel_size_{2}-1)]\times+feature_stride_{1}%3D3%2B(3-1)\times+1%3D5)

img

  • 第三层特征,感受野为7

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-98qkXyoT-1650337802842)(https://www.zhihu.com/equation?tex=RF_{3}%3DRF_{2}%2B(kernel_size_{3}-1)]\times+feature_stride_{2}%3D5%2B(3-1)\times+1%3D7)

img

如果有dilated conv的话,计算公式为

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m8yAdwjb-1650337802843)(https://www.zhihu.com/equation?tex=RF_{l%2B1}%3DRF_{l}%2B(kernel_size_{l%2B1}-1)]\times+feature_stride_{l}\times+dilation_{l%2B1})

11、目标检测Object detection

本期更新的AI-hub的topic是Object Detection,主要包含的内容有:

  1. Object Detection任务介绍和相关数据集
  2. Object Detection评价标准
  3. 著名系列方法:R-CNN,YOLO,SSD,Anchor-Free(共计约20篇paper)
  • 内容过多,不是特别深入,还需很多朋友继续讨论。主要目的应付工作面试。
  1. 简介
    Object Detection属于image -> knowledge任务,比分类问题更近一步地理解对象在图像中的localization信息,比Image Segmentation稍微弱一点,因为不需要分辨出具体对象的细微轮廓。数据集著名的PASICAL VOC和MSCOCO(查一下全称吧,别问我为什么,这个不知道就没必要往下聊了)
  2. 评价标准
    IOU(也有写IoU, Intersection-over-Union,over有要大写的,也有没大写的),mAP(这些东西怎么算的还挺复杂,需要花点时间临时背背八股文),还有什么Precision、Recall就不说了~真正了解的时候,我觉得这些的根源就是IOU。
  3. 方法
    其实deep learning很多方法推荐熟读理解《The Modern Mathematics of Deep Learning》这篇论文,可以说所有的计算机视觉任务的研究思路和发展方向都可以通过数学原理演绎得到,那些一个个令人惊艳的idea有时候在数学解释下不是偶然的,而是必然的。众所周知,deep learning中的问题可以分为classification and regression,就是输出一个类别(class)还是一个数值(scalar)的区别。除此之外,deep learning还需要解决一个更加general的任务就是输出一个object(包括class, scalar, tree, list, bounding box, image, sentence etc.)那么这就是Structure Learning(这个理论没有什么解决具体问题的能力,著名的可能只有Structure SVM了,但是这个理论给予我们一个看待问题的universal角度。)
    以上是一些废话(Preface),但我仍然觉得很重要,至少它帮助我能在短时间理解一个领域的发展。正题开始……
    输入一个image,要输出bounding box(es),不一定只是一个,当然确实我们也不知道是多少个。对于具体的问题,比如人脸检测,对狗检测等等,我们可以去handcrafted and heuristic却设计很多方法,我觉得鼎鼎大名的就是DPM,用什么SIFT、HOG等等高级数字图像处理算子。作者是RBG大神,众所周知,我觉得他比Kaiming He更加有个性……这里要讨论的是General Object Detection Framework,即通用的目标检测算法。一个领域发展的动机是很重要的,而且这个动机没有标准答案,我给出我的理解和展望:
    一张图像中不同位置和不同大小的bounding box是massive的,构成了一个非常庞大的solution. space,一个一个和image去匹配(sliding window,滑动窗口)就显然力不从心,而且我还只是说的是一个,一张image中可能有狗、自行车、汽车等多个objects,所以一个很显然的动机就是shrink solution space,这是deep learning在很多领域内的非常naive的想法和做法。此时R-CNN就诞生了。
    跟着这个思路,由一个比较常用的架构就产生了,一个图片,我们先挑出很多候选方案,然后再对这个能接受的数量的bbox进行逐一验证、调整等等的后处理工作,就得到了结果。此时,你的大脑里应该出现了很多算法,比如R-CNN系列、YOLO系列、SSD系列。还有一个非常耳熟能详的词叫做NMS后处理。什么SS,SPP,RPN,划分grid cell等等等等。带着这个动机去看论文,一下午能阅读十几篇,再结合点网络资源,非常快能理解很多文章的内容。
    在具体领域中,Object Detection产生了非常多的派别,我能够所知(一周内所搜集的)以下:
    • RCNN系列:R-CNN, SPP-Net, Fast R-CNN, Faster R-CNN还有最新的几篇
    • YOLOv1,2,3,4,5,X,grid cell就是标志(还有那条狗和邪教风格的Darknet)
    • SSD系列
    • Anchor-Free系列(Spring in 2019-): 既然有Anchor-Free,就有Anchor-based,一句话,Anchor-based非常有my supervisor的指导风格(哈哈,吐槽下设计、排序、编码、。。。。。),所以Anchor-based和deep learning有点违和,不符合deep learning的路子,就是感觉不优雅,还有最后的NMS,你都叫它post processing了,还怎么敢说end-to-end,和语音识别领域中的LSA有点类似。那么Anchor-free借用了其他领域的知识和方法,图像分割、人体姿态估计,所以啊,万物本是一物,做研究不能管中窥豹,只盯着自己的方向,NLP不看看哪儿来的Vision Transformer……
  4. 一些关键性问题(工作!工作!干活!):
    • IOU怎么算,手写代码
    • NMS会实现吗?手撸代码。
    • One-stage和Two-stage的区别(区分Object Detection的一个维度)
    • ANchor-Free vs. Anchor-based的区别,为什么开始Anchor-free了,Anchor-based出现了什么问题?
    • ANchor-Free的本质是什么?(就是定义GT的方式变了,bbox不仅可以是框框,还可以是对角线交点,角点,OK?)
    • R-CNN准,YOLO快,咋回事?
    • 其他每个模型的细节咯,你简历里写了啥,那就把论文背熟吧!

12、注意力机制 Attention Mechanism

​ 在计算机视觉中,Attention Mechanism很早就出现了。对于一张图像或一个通过CNN的feature map,它有空间域(Spatial Domain)、通道域(Channel Domain),那么最早的一些工作就是通过对每个通道进行加权得到最终的feature map,那么这就是SE-Net (Squeeze and Excitation Network),这个Squeeze和Excitation就是vision attention的一个范式了。通道上可以,空间像素上也是可以的,那么混合(Mixed Domain)也是可以的。有一些著名的工作比如SE-Net, CBAM, ResAttention, ECA, A2Net, BAM, RAM, FCA等等.
​ 以上的文章都可以分为squeeze阶段和excitation阶段。简略介绍下:以SE-Net为例,一个feature map有H W C三个维度,那么我们要做的是给这个feature map的每个通道上乘以一个[0,1]的权重,那么有的通道就不重要就不会被激活了在后面的网络中。第一步:我们要将HxWxC变成1xC的张量,这个过程就是squeeze,这个部分就可以很多自由发挥的room,比如Global Max/Average Pooling;第二步:我们需要通过一个网络得到一系列的weight,那么很简单地,我们可以通过一个fully-connected neural network就可以了,而ECA中,使用的是Conv1D的卷积。这就是所有文章关注设计的两个主要stages。
​ Attention不仅于此,attend的东西可以更加抽象!比如,可以是一系列行为,举个例子,CVPR2019上有paper介绍了这样一份工作关于image restoration。那我们知道,image会受到噪声、压缩、模糊等等,那么这些攻击有可能是都发生的,或有可能是发生了其中几个。作者就根据此提出了使用Attention的机制进行图像恢复。
​ 最后几个问题:

  1. Hard Attention通常不可微,需要使用强化学习!

  2. 将权重赋予到object的各个component上的方法有很多,不仅仅是标准的vector之间的inner-product。

  3. query and key是通常在Attention中出现的角色,你需要关注Q,K,V。

  4. Attention通常会带来很多可解释性的副产品。Attention和Explainable Learning有密切的联系。

  5. Self-Attention是Attention的一种。不要混淆Self-Attention和Attention。

13、数据增强有哪些方法?

通过数据集的增广:可以对数据集进行一些简单的操作,旋转、翻转等操作下,添加一些必要的扰动模型也可以认为是保护模型多样性的一个结果。例如一些数据集增强方法:GridMask和Mixup(比较有名)。

  • Color Jittering:对颜色的数据增强:图像亮度、饱和度、对比度变化(此处对色彩抖动的理解不知是否得当);

  • PCA Jittering:首先按照RGB三个颜色通道计算均值和标准差,再在整个训练集上计算协方差矩阵,进行特征分解,得到特征向量和特征值,用来做PCA Jittering;

  • Random Scale:尺度变换;

  • Random Crop:采用随机图像差值方式,对图像进行裁剪、缩放;包括Scale Jittering方法(VGG及ResNet模型使用)或者尺度和长宽比增强变换;

  • Horizontal/Vertical Flip:水平/垂直翻转;

  • Shift:平移变换;

  • Rotation/Reflection:旋转/仿射变换;

  • Noise:高斯噪声、模糊处理;

  • Label Shuffle:类别不平衡数据的增广;

  • GridMask:是一种自动的数据集增强方法主要用于目标检测等领域,通过生成一个与原图大小相同的Mask,在有规律的设置出一些数值伪0的黑色区域让其与原题相乘

img

14、BN(Batch Normalization)层问题

添加BN层有什么好处?

  • 加速网络的收敛,解决Internel Covariate Shift(内部协方差),使得每一层的数值的分布存在相似性。
  • 防止梯度爆炸或者梯度弥散:归一化的数据可以有效的帮助网络进行拟合,保证了梯度反向传播的过程中的稳定性
  • 防止过拟合:批正则化具有L2正则化等类似的属性,将数据的锐点等数值进行消除,可以帮助个别样本对于网络的影响。

BN层的过程有哪些?

  1. 求出一个Batch数据的平均值
  2. 通过平均值得到这组数据的方差
  3. 利用平均值和方差对数据进行标准化,大概为(对应数值-平均值)/根号下(方差+一个极小值)
  4. 最后将经过标准化的数据呈上一个超参λ并加上一个超参β

这两个超参数有什么用?

超参λ和超参β

  1. 可以帮助数据进行有效的放缩和平移
  2. 超参λ和超参β可以认为是将每一层BN层的决定权交给网络自己的执行,类似于ResNet的感觉;在网络中,模型可以根据这层的信息是否有效的来保证这个对应的内容是否保存。在标准化比较好的时候,两个超参数尽量不影响对应的标准化内容,但是如果是效果不太好的标准化,利用超参数可以取消这些网络并不任何的内容。

还有什么其他正则化方法?

LN(Layer Normalization)是对每一层的所有神经元进行归一化,一般常用于RNN网络中,与BN的差距如下:

  • LN中同层神经网络具有相同的均值和方差,不同的样本输入就有不同的值和方差,不同的样本输入有不同的均值和方差
  • BN中针对不同神经元输入计算均值和方差,同一个Batch有用相同的均值和方差

IN(Instance Normalizaion)主要用于风格迁移的这一类内容,主要是为了保持每张图片本身具有的独立性

其他还有GN、SN(采用所有的正则化方法,但是具体的参数交给网络自己去选择,有早期的那种NAS的感觉)

15、ResNet介绍

评价:ResNet是CV领域的最要标志性成果,完成了技术爆炸的关键一环,ResNet首次解决了网络退化问题,网络退化指的是网络层数变深、卷积层的提取效果变好,但是效果并没有变好的这样一个问题。

描述:其中两层weight layer称之为残差结构而不是identity这条分支被认为是。因此,让模型自己去拟合残差特征图,残差哪怕没有学号也会影响到恒等变换,这样就可以提升模型的自主选择能力。

img

ResNet为什么能够解决网络退化呢?

  • 深度梯度回传顺畅
    • 恒等变换可以有效的防止梯度弥散或者梯度爆炸,可以有效的帮助梯度的传递。
  • 传统线性结构网络其实是无法做到恒等变换的
    • 有时候,什么都不做也很重要。
    • skip connection可以让网络模型自行选择要不要对模型进行更新,将选择权交给网络本身,弥补了高度非线性可能会造成的不可逆的信息损失。

16、YOLOv5介绍

img

输入端:

(1)Mosaic数据增强

Yolov5的输入端采用了和Yolov4一样的Mosaic数据增强的方式。

Mosaic数据增强提出的作者也是来自Yolov5团队的成员,不过,随机缩放随机裁剪随机排布的方式进行拼接,对于小目标的检测效果还是很不错的。

img

个人理解:主要是为了解决前期数据量不足的问题,采用数据增强的方法对于数据进行增广。

(2) 自适应锚框计算

(3)自适应图片缩放

a.这里大白填充的是黑色,即**(0,0,0),而Yolov5中填充的是灰色,即(114,114,114)**,都是一样的效果。

b.训练时没有采用缩减黑边的方式,还是采用传统填充的方式,即缩放到416*416大小。只是在测试,使用模型推理时,才采用缩减黑边的方式,提高目标检测,推理的速度。

BackBone:

(1) Focus结构

image-20211003193459651

Focus结构主要是用于将输入的图片的大小进行放缩、同时不影响图像本身的内容,将一张图变成多张图进行操作。这样可以有效的提升Flops速度(作者说的)。

(2) CSP结构

image-20211003193844252

17、U-Net介绍

在这里插入图片描述

​ U-Net网络主要应用于医学领域或者细胞分割,相较于FCN这种全卷积网络具有更好的鲁棒性和兼容性。因此,在目标分割领域以至于后期的显著性检测等领域都非常重视该文章的复现了了解。

​ 首先,数据集我们的原始图像的尺寸都是 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yiKZYpfn-1650337802847)(https://www.zhihu.com/equation?tex=512\times512)] 的。为了能更好的处理图像的边界像素,U-Net使用了镜像操作(Overlay-tile Strategy)来解决该问题。镜像操作即是给输入图像加入一个对称的边,那么边的宽度是多少呢?一个比较好的策略是通过感受野确定。因为有效卷积是会降低Feature Map分辨率的,但是我们希望 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TB8gFk8H-1650337802847)(https://www.zhihu.com/equation?tex=512%5Ctimes512)] 的图像的边界点能够保留到最后一层Feature Map。所以我们需要通过加边的操作增加图像的分辨率,增加的尺寸即是感受野的大小,也就是说每条边界增加感受野的一半作为镜像边。

在这里插入图片描述

​ U-Net整体可以分为3个不同的子模块:主干特征提取网络、加强特征提取网络、预测网络三个不同的模块。

  • 主干特征提取网络:原始图像为512×512大小的图片,考虑到边界值直接参与卷积会导致边缘信息的丢失,所以原本中采用镜像操作,可以认为是Padding,但是Padding的内容是受到局限的,是和像素有关的内容进行30个像素值的翻转。主干特征提取网络的主要结构还是与VGG具有较高的相似度,

  • Unet所使用的加强特征提取网络是一个U的形状。

    利用第一步我们可以获得五个初步的有效特征层,在加强特征提取网络这里,我们会利用这五个初步的有效特征层进行特征融合特征融合的方式就是对特征层进行上采样并且进行堆叠

  • 损失部分:采用交叉熵和Dice Loss

    Cross Entropy Loss就是普通的交叉熵损失,当语义分割平台利用Softmax对像素点进行分类的时候,进行使用。

    Dice loss将语义分割的评价指标作为Loss,Dice系数是一种集合相似度度量函数,通常用于计算两个样本的相似度,取值范围在[0,1]。

    计算公式如下:

    在这里插入图片描述

    就是预测结果和真实结果的交乘上2,除上预测结果加上真实结果。其值在0-1之间。越大表示预测结果和真实结果重合度越大。所以Dice系数是越大越好。

    如果作为LOSS的话是越小越好,所以使得Dice loss = 1 - Dice,就可以将Loss作为语义分割的损失了。

18、不同的IOU损失

https://zhuanlan.zhihu.com/p/331783358转载

  • IOU损失函数

IOU损失表示预测框A和真实框B之间交并比的差值,反映预测检测框的检测效果。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0A35VesQ-1650337802849)(https://www.zhihu.com/equation?tex=L_{IOU}%3D1-IOU(A%2CB)])

但是,作为损失函数会出现以下问题:

  • 如果两个框没有相交,根据定义,IoU=0,不能度量IoU为零距离远近的程度。同时因为loss=0,没有梯度回传,无法进行学习训练。
  • IoU无法精确的反映两者的重合度大小。如下图所示,三种情况IoU都相等,但看得出来他们的重合度是不一样的,左边的图回归的效果最好,右边的最差。

img

  • GIOU损失函数

GIOU是为了缓解IOU损失在检测框不重叠时出现的梯度问题而提出来的,在原来的IOU损失的基础上加上一个惩罚项。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fWR2lwoC-1650337802849)(https://www.zhihu.com/equation?tex=L_{GIOU}%3D1-IOU(A%2CB)]%2B\left|+C-A\cup+B+\right|%2F\left|+C+\right|)

其中,A是预测框,B是真实框,C是A和B的最小包围框,A、B、C的关系具体如下图所示。

img

惩罚项的意思是下图右边黄色区域的比值。

img

  • 当两个box没有重叠,并且距离比较远的时候,找到的矩形会比较大,空区域的面积也会比较大,极限情况下,空区域的面积除以矩形面积,结果为1。此时IoU为0。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9LXWUzEq-1650337802850)(https://www.zhihu.com/equation?tex=L_%7BGIOU%7D%3D2)] 。
  • 假设两个box大小相同,正好左右相邻,此时,空区域面积为0,IoU为0。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dc836d3h-1650337802851)(https://www.zhihu.com/equation?tex=L_%7BGIOU%7D%3D1)] 。
  • 假设两个box完全重合,此时,空区域为0,IoU为1。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3a7jLftn-1650337802851)(https://www.zhihu.com/equation?tex=L_{GIOU}%3D0)]。

可以看出,[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1zOgpKKI-1650337802852)(https://www.zhihu.com/equation?tex=L_{GIOU})]从0到2,越小越好。但是,作为损失函数会出现以下问题:

下图中,绿色框为真实框,黑色框为先验Anchor,蓝色为预测框。预测框是以先验框为基础进行位置移动和大小缩放。GIOU首先尝试增大预测框的大小,使得它能够与真实框有所重叠(如下图中间所示),然后进行上述公式中 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PGtpjIYe-1650337802852)(https://www.zhihu.com/equation?tex=IOU(A%2CB)]) 的计算。会消耗大量的时间在预测框尝试与真实框接触上,影响损失的收敛速度。

img

  • DIOU损失

为了加快收敛速度,DIOU在IOU损失的基础上加一个惩罚项,用来最小化两个检测框中心点之间的标准化距离。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jx3AzfUg-1650337802853)(https://www.zhihu.com/equation?tex=L_{DIOU}%3D1-IOU(A%2CB)]%2B\rho{2}(A_{ctr}%2CB_{ctr})%2Fc{2})

其中,A为预测框,B为真实框;[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F7W2jcry-1650337802853)(https://www.zhihu.com/equation?tex=A_{ctr})]为预测框中心点坐标,[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dpUjLsLC-1650337802853)(https://www.zhihu.com/equation?tex=B_{ctr})]为真实框中心点坐标。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tbMH8Q3j-1650337802854)(https://www.zhihu.com/equation?tex=\rho(\cdot)])是欧式距离计算;c为A、B最小包围框的对角线长度。

img图5 DIOU回归过程

与GIoU loss类似,DIoU loss在预测框与目标框不重叠时,仍然可以为边界框提供优化移动方向。由于DIoU loss可以直接最小化两个目标框的距离,因此比GIoU loss收敛要快。此外,DIoU还可以替换普通的IoU评价策略,应用于NMS中,使得NMS得到的结果更加合理和有效。

  • CIOU损失

CIOU在DIOU的基础上将长宽比吸纳进来。CIOU损失包括重叠面积、中心点距离和长宽比三项。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4E9l8Pt4-1650337802855)(https://www.zhihu.com/equation?tex=L_{CIOU}%3D1-IOU(A%2CB)]%2B\rho{2}(A_{ctr}%2CB_{ctr})%2Fc{2}%2B\alpha\upsilon)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-njmfkots-1650337802855)(https://www.zhihu.com/equation?tex=\upsilon%3D\frac{4}{\pi{2}}(arctan\frac{w{gt}}{h{gt}}-arctan\frac{w}{h})]{2}) [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oyByEBe8-1650337802855)(https://www.zhihu.com/equation?tex=\alpha%3D\frac{\nu}{(1-IoU)]%2Bv})

其中,[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TFUyNZZN-1650337802856)(https://www.zhihu.com/equation?tex=w{gt})]和[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6WwHfomb-1650337802856)(https://www.zhihu.com/equation?tex=h{gt})]分别表示真实框的宽和高;w和h分别表示预测框的宽和高。

若真实框和预测框的宽高相似,那么[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gAKyDwjB-1650337802856)(https://www.zhihu.com/equation?tex=v)]为0,该惩罚项就不起作用了。所以很直观地,这个惩罚项作用就是控制预测框的宽高能够尽可能快速地与真实框的宽高接近。

19、精确率、召回率、F1分数

Precision / Recall / F_1 Score

对于二分类问题,我们常常使用精确率(Precision)、召回率(Recall)以及F_1 Score来评估二分类模型的性能。对于一个二分类器,在数据集上的预测情况可以分为以下4种:

  • TP(True Positive),将正类正确预测为正类;
  • TN(True Negative),将负类正确预测为负类;
  • FP(False Positive),将负类错误预测为正类;
  • FN(False Negative),将正类错误预测为负类;

有了以上概念,我们可以给出以下评估指标的定义:

  • 精确率定义为:
    P = T P T P + F P P=\frac{TP}{TP+FP} P=TP+FPTP
    即在模型预测为正类的样本中,预测正确的比例。可以看到,精确率更加关注于模型认为是正类样本的结果。

  • 召回率定义为:
    R = T P T P + F N R=\frac{TP}{TP+FN} R=TP+FNTP
    即在正类的样本中,模型预测正确的比例。相比之下,召回率更加关注于那些真实值为正类的样本。

  • 此外,F_1 值定义为精确率与召回率的调和均值,即
    2 F 1 = 1 P + 1 R \frac{2}{F_1}=\frac{1}{P}+\frac{1}{R} F12=P1+R1

    F 1 = 2 × P × R P + R = 2 T P 2 T P + F P + F N F_1 = \frac{2 \times P \times R}{P + R} = \frac{2TP}{2TP+FP+FN} F1=P+R2×P×R=2TP+FP+FN2TP

    当精确率和召回率都高时,F_1值也会高。

混淆矩阵 Confusion Matrix

分类结果的混淆矩阵如下表所示。

ConfusionMatrix

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值