计算机视觉任务(一)

发布时间 2023-04-29 17:26:58作者: 季俊豪

1. 图像分类(Image classification)

图像分类是指将图像分为不同的类别或标签,通常使用机器学习和深度学习技术。给定一张输入图像,图像分类任务旨在判断该图像所属类别。这些算法利用计算机视觉技术和模式识别技术,从图像中提取有用的特征,然后将其与预定义的类别或标签匹配。这种技术的应用范围非常广泛,例如,它可以用于自动驾驶汽车中的道路标志识别,医学图像中的疾病检测,安全监控中的人脸识别,以及社交媒体中的图像过滤等。

1.1 相关概念

  1. 图像分类器(Image Classifier):图像分类器是一种用于将输入的图像分为不同类别的算法。常见的图像分类器包括基于深度学习的算法,如卷积神经网络(Convolutional Neural Network,CNN)。
  2. 特征提取(Feature Extraction):特征提取是指从输入的图像中提取有用的特征表示,以便分类器能够更好地进行分类。在基于深度学习的图像分类算法中,通常使用卷积神经网络(CNN)来提取图像的特征。
  3. 类别标签(Class Label):类别标签是用于表示不同类别的标签。通常用数字或字符串表示不同的类别。
  4. 训练集(Training Set):训练集是用于训练图像分类器的数据集。通常包含大量的图像和对应的类别标签。
  5. 验证集(Validation Set):验证集是用于调整图像分类器超参数的数据集。通常包含与训练集不同的图像和对应的类别标签。
  6. 测试集(Test Set):测试集是用于评估图像分类器性能的数据集。通常包含与训练集和验证集不同的图像和对应的类别标签。
  7. Top-k 准确率(Top-k Accuracy):Top-k 准确率是指预测的类别在前 k 个中是否包含了正确的类别。通常用来评估图像分类器的性能。
  8. 损失函数(Loss Function):损失函数是用于衡量分类器输出和真实标签之间的差异的函数。通常使用交叉熵损失函数来训练图像分类器。
  9. 预处理(Preprocessing):预处理是指在输入图像被送入分类器之前,对其进行一些必要的预处理操作,如缩放、裁剪、归一化等。

1.2 常用数据集

https://paperswithcode.com/datasets?task=image-classification&page=1

以下是几种常用分类数据集:

  • MNIST:包含0-9手写数字图像的数据集。训练图像:60k、测试图像10k、10个类别、图像大小1×28×28。

  • CIFAR-10CIFAR-100:分别包含10和100个类别的彩色图像。训练图像:50k、测试图像:10k、图像大小3×32×32。

  • ImageNet:1k个类别,最大的图像分类数据集之一。训练图像:1.2M、测试图像:50k、验证图像:50k、图像大小一般在256x256或224x224。

  • ...

1.3 卷积神经网络

将图像拉直成向量传入全连接层存在一些问题:参数量过大(224×224的神经元);图像的局部不变性无法提取(伸缩、平移等)

卷积神经网络(Convolutional Neural Network, CNN)是一种深度学习模型,以下是卷积神经网络的相关概念:

  1. 卷积层:卷积层是卷积神经网络中最重要的组成部分,其通过滑动卷积核在输入图像上进行卷积操作,提取不同尺度的特征。卷积层通常包括多个卷积核和偏置项,每个卷积核对应一个输出通道。可调整的地方:卷积核大小(kernel_size)、步长(stride)、填充(padding)
  2. 池化层:池化层是用于降低特征图尺寸和提高特征的鲁棒性的一种操作。常见的池化操作包括最大池化平均池化,其分别在输入图像的每个子区域中取最大或平均值作为输出。(一般来说可有可无,只是为了减少特征,防止过拟合)
  3. 激活函数:激活函数是用于引入非线性表达能力的一种操作,常见的激活函数包括ReLU、Sigmoid和Tanh等。ReLU是目前最常用的激活函数,其可以有效地缓解梯度消失问题和加速收敛速度。
  4. 全连接层:全连接层是用于将卷积层和池化层提取的特征进行分类的一种操作。全连接层通常包括多个神经元和偏置项,其通过权重矩阵将输入图像映射到不同类别的概率分布。

卷积神经网络的特性:局部连接权重共享池化迁移学习

1.4 经典网络结构

Fine-tuning:针对类似图像分类、目标检测等视觉任务,可以采用已有的经典网络结构,如AlexNet、VGG、ResNet等,进行微调以适应具体任务需求。在微调时,可以通过去掉最后一个全连接层和对应softmax,加上适合任务的全连接层和softmax,再固定住前面的层,只训练加入的部分。如果训练数据比较丰富,也可以考虑微调所有层。此外,还可以使用预训练模型,如ImageNet预训练模型,将其用于特定任务的微调。这样可以避免从头开始训练网络,从而节省时间和计算资源,并提高模型的性能。

LeNet-5

亮点:卷积、最大池化

LeNet的输入层为32x32的图像,经过两个卷积层和两个池化层后,输出为5x5的特征图。然后将特征图展开,分别经过两个全连接层,最后输出10个神经元,对应10个数字类别。

LeNet采用sigmoid作为激活函数,使用最小二乘法作为损失函数进行训练。在训练过程中,LeNet采用随机梯度下降法进行参数更新。

import torch.nn as nn

class LeNet5(nn.Module):
    def __init__(self):
        super(LeNet5,self).__init__()
        self.conv1 = nn.Conv2d(1, 6, 5)
        self.pool1 = nn.MaxPool2d(2, 2)
        self.conv2 = nn.Conv2d(6, 16, 5)
        self.pool2 = nn.MaxPool2d(2, 2)
        self.fc1 = nn.Linear(16*4*4, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)
        self.act = nn.Sigmoid()
    
    def forward(self,x):
        x = self.pool1(self.act(self.conv1(x)))
        x = self.pool2(self.act(self.conv2(x)))
        x = x.view(-1, 16*4*4)
        x = self.act(self.fc1(x))
        x = self.act(self.fc2(x))
        x = self.fc3(x)
        return x

AlexNet

亮点:不同大小的卷积核、ReLU激活函数、dropout正则化、交叉熵损失函数

AlexNet的输入图像大小为224x224,经过五个卷积层和三个池化层后,输出大小为6x6x256的特征图。然后将特征图展开,分别经过两个全连接层,最后输出1000个神经元,对应1000个类别。

AlexNet采用ReLU作为激活函数,使用dropout技术进行正则化,使用交叉熵损失函数进行训练。在训练过程中,AlexNet采用随机梯度下降法进行参数更新,并使用GPU加速训练。

import torch.nn as nn

class AlexNet(nn.Module):
    def __init__(self):
        super(AlexNet, self).__init__()
        
        # 卷积层1
        self.conv1 = nn.Sequential(
            nn.Conv2d(in_channels=3, out_channels=96, kernel_size=11, stride=4, padding=0),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2)
        )
        
        # 卷积层2
        self.conv2 = nn.Sequential(
            nn.Conv2d(in_channels=96, out_channels=256, kernel_size=5, stride=1, padding=2),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2)
        )
        
        # 卷积层3-5
        self.conv3 = nn.Conv2d(in_channels=256, out_channels=384, kernel_size=3, stride=1, padding=1)
        self.conv4 = nn.Conv2d(in_channels=384, out_channels=384, kernel_size=3, stride=1, padding=1)
        self.conv5 = nn.Conv2d(in_channels=384, out_channels=256, kernel_size=3, stride=1, padding=1)
        self.pool5 = nn.MaxPool2d(kernel_size=3, stride=2)
        
        # 全连接层
        self.fc1 = nn.Sequential(
            nn.Linear(in_features=6*6*256, out_features=4096),
            nn.ReLU(inplace=True),
            nn.Dropout()
        )
        self.fc2 = nn.Sequential(
            nn.Linear(in_features=4096, out_features=4096),
            nn.ReLU(inplace=True),
            nn.Dropout()
        )
        self.fc3 = nn.Linear(in_features=4096, out_features=1000)
        
    def forward(self, x):
        x = self.conv1(x)
        x = self.conv2(x)
        x = self.conv3(x)
        x = self.conv4(x)
        x = self.conv5(x)
        x = self.pool5(x)
        x = x.view(x.size(0), 256*6*6)
        x = self.fc1(x)
        x = self.fc2(x)
        x = self.fc3(x)
        return x

VGG-16/VGG-19

亮点:使用3x3卷积核、多个卷积配一个池化的架构、ReLU激活函数、在全连接层引入dropout、优化算法改进

VGG-16和VGG-19中的卷积层和全连接层都使用了ReLU激活函数,而且在全连接层之间使用了Dropout层来防止过拟合。此外,在训练过程中,使用了带动量的随机梯度下降算法来优化网络参数。

GoogLeNet

亮点:Inception模块、平均池化层、1x1卷积核

Inception模块是GoogLeNet网络的核心,它采用了多个不同大小的卷积核并行进行卷积操作,然后将不同大小的卷积结果在通道维度上进行拼接,从而获得更加丰富的特征表达。每个Inception模块包含了多个分支,每个分支采用不同大小的卷积核进行卷积操作,然后将不同的卷积结果在通道维度上进行拼接。具体来说,每个分支的卷积核大小分别为1x1、3x3、5x5和3x3的最大池化,其中,1x1卷积核用于降低通道数,减少计算量;3x3和5x5的卷积核用于提取不同大小的特征,增加网络的丰富性;3x3的最大池化层用于提取图像的空间特征。通过将不同分支的卷积结果在通道维度上进行拼接,可以获得更加丰富的特征表达,从而提高图像分类的准确率。

ResNet

Residual Block、预激活(Pre-activation)、参数初始化(基于方差缩放的参数初始化)、学习率调整、批归一化(Batch Normalization)

Residual跳跃连接将输入直接添加到输出中,从而允许信息在网络中跳过若干层。此外ResNet采用了一些优化策略来提高网络的性能:

  • 批归一化(Batch Normalization):在每个卷积层之后,ResNet都采用了批归一化,这可以提高网络的泛化能力和收敛速度。
  • 预激活(Pre-activation):在每个残差模块中,ResNet采用了预激活,即在每个卷积层之前先进行BN和激活操作,这可以提高网络的泛化能力和收敛速度。
  • 参数初始化:ResNet中采用了Xavier初始化方法,这可以提高网络的收敛速度和泛化能力。
  • 学习率调整:在训练过程中,ResNet采用了学习率衰减和动量更新等方法,从而提高网络的收敛速度和泛化能力。
# 残差
import torch.nn as nn

class Residual(nn.Module):
    def __init__(self, fn):
        super().__init__()
        self.fn = fn

    def forward(self, x, *args, **kwargs):
        return self.fn(x, *args, **kwargs) + x

【论文阅读】Deep Residual Learning for Image Recognition

{% pdf https://arxiv.org/pdf/1512.03385.pdf %}

DenseNet

亮点:Dense Block、Transition Layer、Global Average Pooling

Dense Block是DenseNet的核心模块,其本质上是一堆卷积层的堆叠,其中每个卷积层都接受前面所有层的输入特征作为输入,并将其与自己的输出特征连接在一起。这样,每个卷积层都可以直接访问前面所有层的输入特征,从而增强了特征重用和梯度流动。

Transition Layer通常包括一个1x1的卷积层和一个平均池化层,可以将输入特征的通道数减半,并将特征图的空间分辨率降低一半。这样,可以有效地减少计算量和内存消耗,并提高模型的性能。

在DenseNet的最后一个Dense Block之后,通常会使用一个全局平均池化层来将特征图的高度和宽度降为1,得到一个全局特征向量。这样,可以消除最后一层卷积层的空间信息,使得模型更加关注图像的全局特征。最后,可以使用一个全连接层将全局特征向量映射到输出类别。

SENet

“Squeeze-and-Excitation”(SE)模块的注意力机制

MobileNet

深度可分离卷积(Depthwise Separable Convolution)和线性瓶颈(Linear Bottleneck)

2. 目标定位(Object localization)

目标定位(object localization)是计算机视觉中的一个任务,旨在从图像中定位和识别出特定物体的位置和范围。与图像分类任务不同,目标定位需要不仅需要识别出物体所属的类别,还需要预测物体所在的位置和大小,通常用矩形框(bounding box)来表示。

目标定位通常包括两个子任务:物体检测(object detection)和物体定位(object localization)。物体检测是指在图像中检测出所有可能存在的物体,并对其进行分类和定位,常常采用滑动窗口或区域提议(region proposal)等方法。物体定位是指在已知物体存在的情况下,准确地定位并标注物体的位置和大小,常常采用回归(regression)或者分类回归(classification and regression)的方法。

在目标定位的多任务学习中,可以将图像分类和关键点回归作为两个不同的任务,并在网络结构中引入两个输出分支,一个用于图像分类,一个用于关键点回归。具体地,分类分支可以采用全连接层加上softmax进行分类,回归分支可以采用全连接层或者卷积层进行参数回归。在训练过程中,可以同时对分类和回归任务进行优化,以提高整个网络的综合性能和泛化能力。

需要注意的是,在人体位姿定位和人脸定位等任务中,关键点的数量通常比较多,因此回归分支需要输出多个参数,例如人体姿态估计中需要输出多个关节点的横纵坐标等信息。同时,由于关键点之间存在一定的关联性,因此可以采用一些特殊的网络结构或者损失函数来加强关键点的相关性,以提高定位精度和鲁棒性。

2.1 常用数据集

  • WIDER FACE:是一个用于人脸检测和定位的数据集,包含超过32,000张图像和40,000个人脸,是目前最为流行的人脸检测和定位数据集之一。

3. 目标检测(Object detection)

目标检测(Object detection)是计算机视觉领域中的一个重要任务,旨在从图像或视频中识别出存在的物体,并确定它们的位置和大小。与传统的图像分类任务和目标定位任务不同,目标检测需要同时对图像中的多个物体进行检测和定位,图像中出现的目标种类和数目都不定。常用的目标检测算法包括基于候选区域的方法(如RCNN、Fast R-CNN、Faster R-CNN等)和基于直接回滚的方法(如YOLO、SSD等)。

3.1 相关概念

  1. 物体类别:目标检测的第一步是确定图像中存在的物体类别,例如车、人、动物等。
  2. 边界框(Bounding Box):边界框是是目标检测中常用的一种表示物体位置的方式。它是一个矩形框,通常用左上角点的坐标和右下角点的坐标来表示。在目标检测中,边界框的主要作用是定位物体的位置,并用于计算目标检测算法的性能指标。
  3. 非极大值抑制(Non-Maximum Suppression, NMS):非极大值抑制是目标检测中常用的一种去重技术,用于去除重复的检测框。NMS的基本思想是对所有检测框按照置信度进行排序,然后从置信度最高的框开始,逐个遍历所有框,对于与当前框IOU大于某个阈值的框,将其去除。
  4. MAP(Mean Average Precision):平均精度均值是常用的目标检测指标之一,用于评估模型的检测性能。MAP的计算方法是先计算每个类别的AP(Average Precision),然后对所有类别的AP取平均值。AP是通过计算Precision-Recall曲线下的面积来计算的,具体计算方法可以参考PASCAL VOC的评估方法。
  5. IOU(Intersection over Union):交并比是目标检测中常用的用来衡量检测框和真实框之间重叠程度的指标。IOU的计算可以通过检测框和真实框的交集面积与并集面积的比值来实现,取值为[0, 1]。通常情况下,如果检测框和真实框之间的IOU大于某个阈值,就认为检测框正确识别了物体。
  6. 锚框(Anchor):在基于区域的目标检测算法中,通常需要事先定义一些大小和宽高比不同的锚框,用于对图像中可能存在的物体进行检测。每个锚框都有一个与之对应的偏移量,用于调整锚框的位置和大小,从而更好地与真实框匹配。
  7. 骨干网络(Backbone):在目标检测中,骨干网络通常用于提取图像特征。常见的骨干网络包括VGG、ResNet、Inception等,这些网络通常在ImageNet等大规模图像分类数据集上进行预训练,然后在目标检测任务中进行微调。
  8. Online Hard Example Mining(OHEM):OHEM是目标检测中一种用于训练深度神经网络的技术,其目的是从训练数据中筛选出难以分类的样本,使模型能够更好地学习难例。
  9. 对数空间回归(Log-Space Regression):对数空间回归是一种在目标检测中常用的边界框回归方法。与普通的边界框回归不同,对数空间回归将边界框的坐标值从线性空间转换为对数空间,以便更好地处理不同尺度下的边界框变化。

3.2 常用数据集

  • PASCAL VOC:包括20个类别的物体。通常是用VOC07和VOC12的trainval并集作为训练,用VOC07的测试集作为测试。
  • MS COCO:COCO包含80k训练图像、40k验证图像、和20k没有公开标记的测试图像(test-dev),80个类别,平均每张图7.2个目标。通常是用80k训练和35k验证图像的并集作为训练,其余5k图像作为验证,20k测试图像用于线上测试。

3.3 基于候选区域的目标检测算法

基于候选区域的目标检测算法(Region-based Object Detection)是一类常用于目标检测的算法,其基本思想是通过在图像中生成一些候选区域(即可能包含物体的区域),然后对每个候选区域进行分类和回归等操作,以确定该区域是否包含目标物体及其准确位置。

基于候选区域的目标检测算法主要包括以下几个步骤:

  1. 候选区域生成:通过使用不同的方法(如选择性搜索Selective search、EdgeBoxes等)在图像中生成一些候选区域,这些区域包括可能包含目标物体的区域。
  2. 特征提取:对于每个候选区域,从图像中提取特征,通常使用卷积神经网络(CNN)等深度学习方法进行特征提取。
  3. 候选区域分类:使用分类器对每个候选区域进行分类,以确定该区域是否包含目标物体,通常使用支持向量机(SVM)、softmax分类器等方法进行分类。
  4. 边界框回归:对于被分类为包含目标物体的候选区域,使用回归器对其进行进一步的微调,以得到更准确的边界框位置。
  5. 非极大值抑制(NMS):对于重叠的候选区域,使用NMS算法进行抑制,以去除重复的检测结果。

R-CNN

亮点:引入神经网络分类

Fast R-CNN

亮点:RoI池化层(Region of Interest Pooling)、候选区域网络(Region Proposal Networks)、多任务损失函数

RoI池化层(Region of Interest Pooling):RoI池化层可以将不同大小的候选区域映射到相同大小的特征图上,减少了特征提取的计算量,提高了算法的速度。

候选区域网络(Region Proposal Networks):RPN的基本思想是在CNN特征图上滑动一个小的卷积窗口,对每个窗口生成一个固定数量的候选区域。在卷积窗口的中心点上,通过两个分支来预测每个候选区域的边界框坐标和是否包含目标物体。这两个分支在RPN中共享卷积特征,可以有效地减少计算量。候选区域网络实际上延续了基于滑动窗进行目标定位的思路,不同之处在于候选区域网络在卷积特征而不是在原图上进行滑动。

多任务损失函数:Fast R-CNN算法使用了一个多任务损失函数,同时训练分类和回归器,使得算法的训练过程更加简单和高效。

【论文阅读】Fast R-CNN

{% pdf https://arxiv.org/pdf/1504.08083.pdf %}

【论文阅读】Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

{% pdf https://arxiv.org/pdf/1506.01497.pdf %}

R-FCN

亮点:在RoI池化层加一个全卷积层并平均池化

在R-FCN中,候选区域首先被划分成一个固定的网格,每个网格对应于候选卷积特征的不同通道。然后,每个网格中的特征进行平均池化,得到一个固定大小的特征向量。这些特征向量经过分类器和回归器的处理,得到候选区域的类别和位置信息。

基于候选区域的目标检测算法通过不断地优化网络结构和算法流程,逐渐提高了检测精度和计算效率。其中,网络中图像级别计算(提取深度特征)的比例逐渐提高,而区域级别计算(包括分类和回归)的比例逐渐降低,从而实现了高效的目标检测。具体而言,R-CNN是第一个采用候选区域的目标检测算法,需要对每个候选区域进行单独的前馈计算,速度较慢。Fast R-CNN通过RoI池化层将候选区域投影到特征映射上,从而实现了一次特征提取和共享,速度有所提升。Faster R-CNN则引入了RPN网络,可以直接生成候选区域,进一步提高了检测速度。R-FCN将分类和回归过程融合到全卷积网络中,实现了端到端的训练和高效的目标检测,大部分计算都是图像级别计算。这些算法的演进思路是逐渐提高网络中图像级别计算的比例,同时降低区域级别计算的比例,以实现更高效的目标检测。

3.4 基于直接回归的目标检测算法

基于直接回归的目标检测算法是一种不需要候选区域的方法,直接对整张图像进行分类和回归,通常可以达到实时目标检测的要求。这类方法的基本思路是直接从图像中提取深度特征,并对每个像素或一组像素进行分类和回归预测,得到目标的位置和类别信息。基于直接回归的目标检测算法通常分为两种类型:单阶段方法密集预测方法

  • 单阶段方法直接对每个位置进行分类和回归,如YOLO系列、RetinaNet等。这些方法通常具有较高的检测速度和较低的计算成本,但在检测精度方面可能会受到一定的影响。这是因为单阶段方法忽略了目标的复杂形状和尺寸变化,可能会导致目标漏检或误检。
  • 密集预测方法则在每个位置生成一组候选框,如FCN-Object-Detection、Deformable ConvNets等。这些方法通常具有更好的检测精度,但计算成本相对较高。

YOLO(You Only Look Once)

网格划分、在线运行、Darknet

  1. Grid Cell(网格单元):YOLO将图像划分为一个固定大小的网格,每个网格单元对应一个预测框。在训练时,每个网格单元负责预测Anchor Box的位置和置信度,以及目标的类别。
  2. Confidence Score(置信度得分):YOLO通过置信度得分来衡量预测框中是否包含目标。置信度得分由两部分组成,即目标存在的概率和预测框与真实框之间的IOU(交并比)值。
  3. Darknet:Darknet是YOLO使用的深度神经网络框架,支持多种深度学习算法,包括卷积神经网络、循环神经网络和深度强化学习等。

【论文阅读】You Only Look Once: Unified, Real-Time Object Detection

{% pdf https://arxiv.org/pdf/1506.02640.pdf %}

【论文阅读】YOLOv3: An Incremental Improvement

{% pdf https://arxiv.org/pdf/1804.02767.pdf %}

SSD(Single Shot MultiBox Detector)

多尺度的卷积神经网络

【论文阅读】SSD: Single Shot MultiBox Detector

{% pdf https://arxiv.org/pdf/1512.02325.pdf %}

FPN

特征金字塔架构

RetinaNet

Focal Loss函数

4. 语义分割(Semantic Segmentation)

语义分割(Semantic Segmentation)目标是将图像中的每个像素分配到其所属的语义类别。与目标检测不同,语义分割不仅需要检测图像中的物体,还需要对物体内部的像素进行分类。因此,语义分割通常被视为一种像素级别的分类,即判断图像中哪些像素属于哪个目标。

4.1 相关概念

  1. 掩码(Mask):指将图像中的每个像素标记为其所属的语义类别的二进制图像。在语义分割中,掩码通常用于表示分割结果或用于实例分割。
  2. 交并比(Intersection over Union,IoU):是一种用于衡量分割模型准确性的指标,表示预测的掩码与真实掩码之间的重叠程度。

4.2 常用数据集

  • PASCAL VOC:包括20个类别的物体。通常是用VOC07和VOC12的trainval并集作为训练,用VOC07的测试集作为测试。
  • MS COCO:COCO包含80k训练图像、40k验证图像、和20k没有公开标记的测试图像(test-dev),80个类别,平均每张图7.2个目标。通常是用80k训练和35k验证图像的并集作为训练,其余5k图像作为验证,20k测试图像用于线上测试。
  • Cityscapes:是一个面向城市场景的语义分割数据集,包含了从城市街道到城市广场等不同场景的图像。该数据集包含了20个语义类别,是评估城市场景下的语义分割算法性能的重要数据集之一。

4.3 经典模型

FCN(Fully Convolutional Network)

全卷积代替全连接、反卷积(Deconvolution)、跳跃连接(Skip Connection)

FCN的网络结构通常由两部分组成:编码器和解码器。编码器使用卷积层来提取图像的特征,将图像转化为高维特征图。解码器使用反卷积层将特征图还原为原始大小,同时进行像素级别的分类预测。此外,为了减少模型在分割边界处的错误,FCN还引入了跳跃连接(Skip Connection)来跨过不同层级的特征图,从而获得更全面的特征信息。

反卷积(Deconvolution)和转置卷积(Transpose Convolution)是指卷积神经网络中一种常用的操作,用于将卷积层的输出还原为原始输入的大小。反卷积的滤波器在输出图像中进行滑动,每个由一个输入神经元乘以滤波器得到一个输出局部区域。

DeepLab

空洞卷积(Dilated Convolution)、全局池化(Global Pooling)

DeepLab的网络结构由编码器和解码器两部分组成。编码器使用卷积层和空洞卷积层来提取图像的特征,其中空洞卷积层可以增加特征图的感受野,从而捕获更广阔的上下文信息。解码器使用反卷积层和双线性插值(Bilinear Interpolation)来将特征图还原为原始输入的大小,并进行像素级别的分类预测。此外,DeepLab还使用了全局平均池化层(Global Average Pooling)来减少模型参数和计算量。

U-Net

反卷积(Deconvolution)、上采样(Upsampling)、跳跃连接(Skip Connection)

U-Net的网络结构由对称的编码器和解码器组成,中间通过跳跃连接连接起来。编码器由多个卷积层和池化层组成,用于提取图像的特征。解码器则由多个上采样层和卷积层组成,用于将特征图还原为原始输入的大小,并进行像素级别的分类预测。利用低层结果可以弥补随着网络加深丢失的细节和边缘信息。

【论文阅读】U-Net: Convolutional Networks for Biomedical Image Segmentation

{% pdf https://arxiv.org/pdf/1505.04597.pdf %}

5. 实例分割(Instance Segmentation)

实例分割(Instance Segmentation)是一种计算机视觉任务,旨在将图像中的每个像素分配给其对应的物体实例,并同时对物体进行精确的像素级别分割。例如,当图像中有多只猫时,语义分割会将两只猫整体的所有像素预测为“猫”这个类别。与此不同的是,实例分割需要区分出哪些像素属于第一只猫、哪些像素属于第二只猫。常见思想是:先用目标检测方法将图像中的不同实例框出,再用语义分割方法在不同包围盒内进行逐像素标记。

FCIS(Fully Convolutional Instance-aware Semantic Segmentation)

FCN、RoI池化层、实例分割分支

Mask R-CNN

共享卷积层(Shared Convolutional Layer)、区域提议网络(Region Proposal Network,RPN)、分割分支、多任务损失函数(Multi-task Loss Function)

共享卷积层用于提取图像的特征,RPN用于生成候选物体区域,并计算每个区域的物体得分和边界框位置。分割分支则基于RPN提供的候选物体区域,对每个物体生成一个掩码,从而实现像素级别的实例分割。分割分支使用了全卷积网络(Fully Convolutional Network,FCN)的结构,并对其进行了改进。具体来说,分割分支引入了一个并行的全连接层(Parallel Fully Connected Layer),用于生成每个物体的掩码。此外,分割分支还使用了RoI Pooling和RoI Align等技术,以提高掩码的准确性和稳定性。

Mask R-CNN的训练过程通常使用多任务损失函数(Multi-task Loss Function)进行优化,其中包括物体分类损失、边界框回归损失和掩码分割损失。

【论文阅读】Mask R-CNN

{% pdf https://arxiv.org/pdf/1703.06870.pdf %}

PANet(Path Aggregation Network)

Path Aggregation模块