精华内容
下载资源
问答
  • 联合目标检测和语义分割 目标检测 目标检测是一种与计算机视觉图像处理相关的计算机技术,用于检测数字图像视频中特定类别的语义对象(例如人,建筑物或汽车)的实例。然而现实中物体的尺寸、姿态、位置都有很大...

    联合目标检测和语义分割

    目标检测

    目标检测是一种与计算机视觉和图像处理相关的计算机技术,用于检测数字图像和视频中特定类别的语义对象(例如人,建筑物或汽车)的实例。然而现实中物体的尺寸、姿态、位置都有很大的差异,甚至还可能出现重叠现象,这使得目标检测的难度变得很大。
    在这里插入图片描述

    图1:目标检测示意图https://en.wikipedia.org/wiki/Object_detection

    什么是目标检测

    目标检测的任务是找出感兴趣的目标,确定他们的类别和位置,这也是计算机视觉的核心问题之一。计算机视觉中关于图像识别有四大类任务:分类(Classification)、定位(Location)、检测(Detection)、分割(Segmentation)。

    目标检测算法分类及演变

    目标检测领域的深度学习方法主要分为两类:Two Stage算法和One Stage算法。

    Two Stage

    Two Stage算法先进行区域生成,我们将该区域称为Region Proposal(RP),再通过卷积神经网络进行样本分类。基本任务流程为:特征提取-生成RP-分类/定位回归。常见的two stage目标检测算法有:R-CNN、SPPNet、Fast R-CNN、Faster R-CNN、R-FCN。CNN网络已经可以完成图像识别分类的任务,因此我们主要讨论如何解决定位问题。
    思路一:在原图片上添加位置参数(x, y, w, h),根据建立的模型同样预测一个(x, y, w, h)标签,将其看成一个回归问题进行优化。这里我们考虑两个loss函数:一个是Classification的loss函数,一般使用交叉熵;另一个是regression的loss函数,这里采用欧几里得距离。Regression的部分有两种处理方法,加在最后一个卷积层后面(如VGG),或加在最后一个全连接层后面(如R-CNN)。
    思路二:我们选取不同大小的框,并让框出现在不同的位置,计算该框框住这个物体的真实标签的概率,我们认为概率最高的框得分最高,也是最可能框柱目标的框。这里引入滑窗法(Sliding Window),对输入图像进行不同窗口大小的从左往右、从上到下的滑动。每次滑动都将前窗口截取的图片输入CNN网络进行分类,若该窗口得分较高,那么我们认为该窗口检测到了物体。完成检测后,我们能够得到不同窗口检测到的物体标记。由于这些窗口的大小、位置存在较高的重复率,因此采用非极大值抑制(Non-Maximum Suppression,NMS)的方法进行筛选,最终获得检测到的物体。
    然而滑窗法时间复杂度较高,常用的找出Region Proposal的改进算法有:Edge Boxes和Selective Search。Selective Search 算法应用了层次聚类的思想,通过将集合中相似度最高的两个簇合为一个,从而不断的合并归类,最终达到预设的簇的数量。由于R-CNN和Fast R-CNN算法都使用Selective Search产生候选框,下面我们介绍R-CNN算法 。
    R-CNN遵循传统目标检测的思路,同样采用提取框,对每个框进行特征提取、图像分类、非极大值抑制四个进行目标检测。只不过在特征提取这一步,将传统的特征(如SIFT、HOG等)换成了深度卷积网络提取的特征。R-CNN框架如图所示
    在这里插入图片描述

    R-CNN框架图https://baike.baidu.com/item/R-CNN/23197553?fr=aladdin
    对于输入的图片,R-CNN基于selective search方法生成大约2000个候选区域,然后每个候选区域被调整成固定大小,并送入一个CNN模型中,最终得到一个特征向量。然后这个特征向量被送入一个多类别SVM分类器中,预测出候选区域中所含物体属于每个类的概率。为了提高定位的准确性,R-CNN最后又训练了一个边界框回归模型,通过该模型对框的准确位置进行修正。在R-CNN的进化过程中,SPP-Net 的思想对其贡献很大,Fast R-CNN就采纳了该方法,进而大大节约了计算时间。Spatial Pyramid Pooling的特点有两个:
    1、结合空间金字塔方法实现CNNs的对尺度的输入,从而避免了原本的数据预处理导致的数据丢失或几何失真。
    在这里插入图片描述
    SPP-Net调整网络结构原理图https://blog.csdn.net/v1_vivian/article/details/73275259
    如图所示,SPP-Net在最后一个卷积层后面,加入了金字塔池化层,使用这种方法,可以让网络输入任意的图片,并生成固定大小的输出。
    在这里插入图片描述

    空间金字塔池化示意图https://blog.csdn.net/v1_vivian/article/details/73275259
    其中黑色图片代表卷积后的特征图,我们通过44, 22, 1*1三个网格提取特征,从而得到21中不同的块,在每个块里提取出一个特征,便得到了我们需要提取的21维特征向量。
    2、只需要对原图提取一次卷积特征。R-CNN需要将每个候选框调整到统一大小,再分别作为CNN的输入,时间复杂度较高。SPP-Net对这一缺点进行优化,只对原图进行一次卷积得到特征图,然后利用每个候选框的映射作为卷积特征,输入到SPP-layer和之后的层,从而节约了大量的时间。
    然而Fast R-CNN在选择候选框时,同样也非常耗时。为了进一步优化,我们可以加入一个提取边缘的神经网络,也就是说找到候选框的工作也交给Region Proposal Network(RPN)完成。使用RPN生成Anchor box,对其进行裁剪过滤后通过softmax判断是否属于物体。同时,使用另一个分支bounding box regression修正anchor box。简单地说,Faster RCNN可以大致看作“区域生成网络+Fast RCNN“的系统,用区域生成网络代替Fast RCNN中的Selective Search方法。
    在这里插入图片描述

    Faster R-CNN示意图https://www.cnblogs.com/zongfa/p/9638289.html

    One Stage

    One Stage算法不需要生成候选区域,可以直接产生物体的类别概率和位置,也就是说只需要经过单次检测就可以得到最终的结果,因此速度更快。常见的One Stage经典算法有:YOLO、SSD、YOLOv2、YOLOv3、Retina-Net。下面以YOLO 和SSD 为例,简要说明One Stage的特点。

    YOLO

    在这里插入图片描述
    YOLO结构示意图You Only Look Once: Unified, Real-Time Object Detection Joseph Redmon∗ , Santosh Divvala∗†, Ross Girshick¶ , Ali Farhadi
    YOLO算法的全拼是You Only Look Once,其核心思想就是利用整张图作为网络的输入,直接在输出层回归bounding box的位置和类别。Faster RCNN中也直接用整张图作为输入,但是Faster-RCNN整体还是采用了RCNN中proposal+classifier的思想,只不过是将提取proposal的步骤放在CNN中实现了,而YOLO则采用直接回归的思路。
    YOLO的网络结构主要分为三个部分:卷积层、目标检测层、NMS筛选层。其中,卷积层采用了Google inceptionV1网络,进行特征提取,从而提高模型的泛化能力;在目标检测层,将提取出的特征图经过4个卷积层和2个全连接层。YOLO将448448的原图分割成77个网络,每个网络要预测两个四维bounding box坐标、是否包含物体的置信度以及物体属于20类物体中每一类的概率,最终生成7730的输出。置信度计算法方法如下式所示:

    置信度 = P r ( O b j e c t ) × I O U p r e d t r u t h \text{置信度}=\mathrm{Pr(} \mathrm{Object} )\times \mathrm{IOU}_{\mathrm{pred}}^{\mathrm{truth}} 置信度=Pr(Object)×IOUpredtruth

    在测试阶段,每个网络预测的类别信息和bounding box预测的置信度信息相乘,就可以得到具体类别的置信分数:
    P r (    C l a s s i ∣    O b j e c t ) × P r ( O b j e c t ) ×    I O U p r e d t r u t h = P r (    C l a s s i ) × I O U p r e d t r u t h \mathrm{Pr}\left( \,\,\mathrm{Class} _i\mid \,\,\mathrm{Object} \right) \times \mathrm{Pr(} \mathrm{Object} )\times \,\,\mathrm{IOU} _{\mathrm{pred}}^{\mathrm{truth}}=\mathrm{Pr}\left( \,\,\mathrm{Class} _i \right) \times \mathrm{IOU} _{\mathrm{pred}}^{\mathrm{truth}} Pr(ClassiObject)×Pr(Object)×IOUpredtruth=Pr(Classi)×IOUpredtruth

    P r (    C l a s s i ∣    O b j e c t ) \mathrm{Pr}\left( \,\,\mathrm{Class} _i\mid \,\,\mathrm{Object} \right) Pr(ClassiObject)表示每个网络预测的类别信息。乘积编码了预测结果属于某一类的概率。根据这一分数,我们可以通过设置阈值,过滤掉得分低的boxes,对剩余的进行NMS处理,进而得到最终的检测结果。
    YOLO的优缺点非常显著。它通过将目标检测转化为回归问题,大大加快了检测的速度,同时由于网络预测目标窗口时使用的是全局信息,使得假目标的比例大幅降低。但是YOLO算法的准确性不高,对于图像上较小的目标检测效果不好。为进一步物体定位的精准性和召回率,YOLO作者又提出了YOLO9000,提高了训练图像的分辨率,并引入了Faster R-CNN中的achor box思想,输出层使用卷积层替代YOLO的全连接层。YOLO9000在识别种类、精度、速度和定位准确度等方面都得到了极大的提升。
    在这里插入图片描述
    在这里插入图片描述

    YOLO与其他算法对比图You Only Look Once: Unified, Real-Time Object Detection Joseph Redmon∗ , Santosh Divvala∗†, Ross Girshick¶ , Ali Farhadi

    SSD(The Single Shot Detector)

    在这里插入图片描述

    SSD网络结构图Liu W, Anguelov D, Erhan D, et al. Ssd: Single shot multibox detector[C]//European conference on computer vision. Springer, Cham, 2016: 21-37.
    SSD至今仍然是目标检测中应用最广泛的算法,其优势主要可分为三点:多尺度、多种宽高比的default box(anchor box)、数据增强。
    1、多尺度性:通过SSD网络结构图可以发现,SSD使用了六个不同特征图检测不同尺度的目标。低层预测小目标,高层预测大目标。
    2、多种宽高比:在特征图的每个像素点处,生成不同宽高比的default box(anchor box),论文中设置的宽高比为{1,2,3,1/2,1/3}。假设每个像素点有k个default box,需要对每个default box进行分类和回归,其中用于分类的卷积核个数为c×k(c表示类别数),回归的卷积核个数为4×k。这里我们先介绍两个概念:理论感受野和有效感受野。影响某个神经元输出的输入区域就是理论感受野,也就是我们平时说的感受野,但该输入区域的每个像素点对输出的重要性不同,越靠近中心的像素点影响越大,呈高斯分布,也就是说只有中间的一小部分区域对最后的输出有重要的影响,这个中间的一小部分区域就是有效感受野。如下图所示:
    在这里插入图片描述

    理论感受野和有效感受野示意图https://blog.csdn.net/weixin_40300585/article/details/90270715
    这样我们就可以得到default box的作用。每一层的default box设置了每一层特征图的有效感受野,然后使用这些default box与ground truth进行匹配来确定特征图上每个像素点实际的有效感受野的label(包含分类label和回归label),分别用于分类和bounding-box回归。
    在这里插入图片描述

    Default box示意图Liu W, Anguelov D, Erhan D, et al. Ssd: Single shot multibox detector[C]//European conference on computer vision. Springer, Cham, 2016: 21-37.
    由于default box是SSD的实际训练样本,如果只设置单一宽高比的default box,最多只有一个default box能够被匹配到。这里设置了多种default box,也就是增加了样本数量,这样模型的训练效果会更好,检测精度也会更精确。

    语义分割

    语意分割是对图像中的每一个像素进行分类,目前广泛应用于医学图像与无人驾驶等。从这几年的论文来看,这一领域主要分为有监督语义分割、无监督语义分割、视频语义分割等。

    什么是语义分割

    图像分类的任务是把一张图片划分为某个类别,语义分割则是在像素级别上的分类,属于同一类的像素都要被划分为同一类。如下图所示,所有的汽车被划分为一类,行人被划分为一类,背景又根据斑马线、道路、楼房、障碍物划分为多个类别。这也就是我们在无人驾驶领域的关键问题。
    在这里插入图片描述

    语义分割示意图https://blog.csdn.net/weixin_40446557/article/details/85624579

    语义分割的方法

    一个通用的语义分割体系结构可以被广泛认为是一组编码器网络和解码器网络。编码器通常是一个预先训练的分类网络,比如VGG/Resnet;解码器网络的主要任务是将编码器学习到的识别特征语义映射到像素空间,进而得到密集的分类。下面我们主要讨论三种方法:基于区域的语义分割、全卷积网络语义分割、弱监督语义分割。

    基于区域的语义分割

    基于区域的语义分割是以直接寻找区域为基础的分割技术。它主要有两种形式:一种是区域生长,从单个像素出发,合并周围的目标像素,进而得到所需要的像素;另一种是从全局出发,逐步切割直到获得所需要的分割区域。
    区域生长的初始值是一组代表不同生长区域的种子像素,之后将这些像素周围里符合条件的像素合并到该像素所代表的生长区域中,并且将新添加的像素作为新的种子像素重复上述合并操作,直到找不到符合条件的新像素为止。这一算法需要解决三个主要问题:初始种子像素的选择、加入新像素点的标准、定制生长的规则。
    区域分裂合并是区域生长的逆过程。它需要从整个图片出发,不断地分裂得到各个子区域,然后将背景区域合并,得到语音分割的前景目标,进而实现目标的提取。四叉树分解是一种典型的区域分裂合并法。区域分裂合并算法的特点包括:对复杂图像语义分割效果好、算法复杂计算量大、分裂有可能破坏区域边界。
    R-CNN是基于区域的语义分割中的代表性工作之一。上文已经对R-CNN进行了简单介绍,我们可以根据其目标检测的结果进行语义分割。R-CNN可以建立在任何CNN基准结构之上,如Alexnet、VGG、Googlenet、Resnet等。对于图像分割任务,R-CNN提取了每个区域的两种特征:全区域特征和前景特征。但是使用R-CNN进行语义分割同样存在一定的缺点:与分段任务不能兼容;包含空间信息不足,无法生成精准边界等。为了解决这些问题,也产生了SDS、Hypercolumns、Mask R-CNN等。

    全卷积网络(FCN)语义分割

    FCN对图像进行像素级的分类,从而解决了语义级别的图像分割问题。与经典的CNN在卷积层之后使用全连接层得到固定长度的特征向量进行分类不同,FCN可以接受任意尺度的输入图像,采用反卷积层对最后一个卷积层的feature map进行上采样,使其恢复到与原输入图像相同的尺寸,从而可以对每个像素都产生一个预测,同时保留了原始输入图像中的空间信息,最后在上采样的特征图上进行逐像素分类。
    在这里插入图片描述

    FCN网络结构示意图https://blog.csdn.net/qq_36269513/article/details/80420363
    其中,虚线上半部分为全卷积网络,蓝色为卷积层、绿色为最大池化层。对于不同尺寸的输入图像,各层数据的尺寸相应变化,深度不变。这部分由深度学习分类问题中经典网络AlexNet 修改而来。只不过,把最后两个全连接层(fc)改成了卷积层,这也和我们的目的是紧密相关的(语义分割输出至少为二维向量)了。下面我们重点看一下FCN采用的三种技术:卷积化(convolutionalization)、上采样(Upsampling)、跳跃结构(Skip Architecture)。

    卷积化

    通常情况下,分类所使用的网络会在最后连接全连接层。它会将原来的二维矩阵压缩成一维的,最终输出一个标量(分类标签),这也导致其丢失了空间信息。但是在图像语义分割领域,输出是一个分割图,其维度至少是二维的。所以,我们将全连接层换成卷积层,而这就是所谓的卷积化。下面这幅图显示了卷积化的过程,图中显示的是AlexNet的结构。
    在这里插入图片描述

    AlexNet结构示意图https://zhuanlan.zhihu.com/p/22976342

    上采样

    上采样对应于上图中生成heatmap的过程。在一般的CNN结构中,如AlexNet、VGGNet均是使用池化层来缩小输出图片的尺寸,例如VGG16,五次池化后图片被缩小了32倍。而在ResNet中,某些卷积层也参与到缩小图片尺寸的过程。我们需要得到的是一个与原图像尺寸相同的分割图,因此我们需要对最后一层进行上采样,在Caffe(Convolutional Architecture for Fast Feature Embedding)中也被称为反卷积(Deconvolution)。为了进一步理解反卷积,下面介绍Caffe的卷积操作。
    在Caffe中计算卷积分为两个步骤:使用im2col操作将图片转换为矩阵、调用GEMM计算实际的结果。先调用im2col将filters和input转换为对应filter matrix(A)和feature matrix(B),然后再用filter matrix乘以feature matrix的转置,就得到了C矩阵,亦即输出矩阵,再将C矩阵通过col2im转换为对应的feature map,这就是Caffe中完整的卷积的前向传播过程。反卷积就是相对于卷积在神经网络结构的正向和反向传播中做相反的运算。所以所谓的转置卷积其实就是正向时左乘 A T A^T AT

    跳跃结构

    根据前面两种结构其实已经可以得到结果了。但是直接将全卷积后的结果上采样得到的结果是非常粗糙的。因此引入跳跃结构这一个概念主要可以优化输出。主要思路就是将不同的池化层的结果进行上采样,然后结合这些结果综合分析来优化输出。具体结构图如下图所示:
    在这里插入图片描述

    跳跃结构示意图https://zhuanlan.zhihu.com/p/22976342
    不同结构得到的结果如下图所示:
    在这里插入图片描述

    不同结构结果对比图https://zhuanlan.zhihu.com/p/22976342

    弱监督语义分割

    弱监督问题是指为了实现某个计算机视觉任务,采用了比该任务更弱的一种人工标注作为监督信息。通常情况下,这种弱监督的标记更容易获取,可以省去大量时间。例如:对于目标检测来说,image-level的标签相比物体的bounding box是一种弱监督的标注;对于语义分割来说,image-level的标签和物体的bounding box相比pixel-level的标签则是一种弱监督的标注。这种弱监督学习的关键问题是如何构建image-level的标签语义和像素点的关联,推断出图像所对应的segmentation mask,再利用FCN学习分割模型。

    联合目标检测和语义分割

    联合目标检测和语义分割 的目标是同时进行目标检测和语义分割。这表明同时进行两个任务可能比单独进行一个任务效果更好。这里我们引入UberNet 进行详细说明。

    UberNet

    对于不同任务下网络的结合,主要需要解决的问题有两个:不同数据集的训练以及内存大小的限制。为了解决第一个问题UberNet诞生了。
    在这里插入图片描述

    UberNet网络示意图R. B. Girshick, J. Donahue, T. Darrell, and J. Malik, “ Rich featurehierarchies for accurate object detection and semantic segmentation,” 2014 IEEE Conference on Computer Vision and Pattern Recognition, pp. 580–587, 2013.
    如图所示,左侧是一个连续的降采样操作得到的影响金字塔,金字塔中的每一个图像都连接着一个CNN网络。其中,C表示VGG,结合B批处理的正则化操作,进而得到特征,最终将所有的回应E结合,完成task-special的操作。
    为了解决内存问题,Vanilla backpropagation方法出现了。如下图所示,黑色箭头代表memory查找操作,黄色箭头代表储存操作,蓝色箭头代表前后向传播。
    在这里插入图片描述

    单个任务Vanilla backpropagation方法示意图R. B. Girshick, J. Donahue, T. Darrell, and J. Malik, “ Rich featurehierarchies for accurate object detection and semantic segmentation,” 2014 IEEE Conference on Computer Vision and Pattern Recognition, pp. 580–587, 2013.
    下图为单个任务下的low-memory backpropagation方法示意图。首先储存memory中的激活值的子集,然后再小网络上提供的anchor points的运行的反向传播算法,进而减少在内存中的激活与梯度信息。
    在这里插入图片描述

    单个任务low-memory backpropagation方法示意图R. B. Girshick, J. Donahue, T. Darrell, and J. Malik, “ Rich featurehierarchies for accurate object detection and semantic segmentation,” 2014 IEEE Conference on Computer Vision and Pattern Recognition, pp. 580–587, 2013.
    应该上述思想,对多任务下的Vanilla backpropagation进行改进。

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    多任务Vanilla backpropagation方法示意图R. B. Girshick, J. Donahue, T. Darrell, and J. Malik, “ Rich featurehierarchies for accurate object detection and semantic segmentation,” 2014 IEEE Conference on Computer Vision and Pattern Recognition, pp. 580–587, 2013.

    Encoder-decoder Neural Network Model

    概述

    在这里插入图片描述

    模型架构示意图Peng J, Nan Z, Xu L, et al. A Deep Model for Joint Object Detection and Semantic Segmentation in Traffic Scenes[C]//2020 International Joint Conference on Neural Networks (IJCNN). IEEE, 2020: 1-8.
    图中显示了该模型的总体架构。该模型主要有三个模块组成:编码器-解码器模块、目标检测模块、语义分割模块。其中,编码解码模块由七个编码层和七个解码层组成,每个解码层通过“Skip Connection”网络与相应的编码层相连。编码器解码器模块对输入的图像进行处理,在编码器层和解码器层生成七种不同大小的特征图像,用于目标检测和语义分割。在目标检测模块中,通过对七个特征图上生成的候选目标进行分类来进行目标检测。在语义分割模块中,首先对特征映射进行上采样,使其大小相同,然后拼接在一起实现分割。接下来,我们将详细介绍编码器-解码器模块、检测模块、分割模块和损失函数。

    编码器-解码器模块

    原文使用ResNet50作为编码器网络的主干。ResNet50由五个块组成,每个块输出一个特征图。为了节省GPU内存使用,使用ResNet50的最后四个特性映射,并将它们表示为E1、E2、E3、E4。在ResNet50后添加了三个新的残差层,生成了三个特征图,分别表示为E5、E6、E7。特征图的大小逐渐减半。如果输入图像的分辨率为H×W,那么E7的分辨率为H/256×W/256。
    编码器的特征映射包含了相对低级的语义信息。为了提高特征图的语义信息,采用了跳连接机制。Squeeze-and-Excitation(SE)模块可以量化每个特征通道的重要性,从而增加有效特征的权重。在Skip Connection模块中加入SE模块,有利于提高解码器特征映射的表示能力。为了更好地理解跳跃连接机制,我们使用E7和E6生成D6。首先对E7进行上采样并通过SE模块将其与E6连接起来,然后对连接后的特征映射进行一系列卷积处理,生成D6。
    通过跳转连接可以生成具有丰富语义信息的不同大小的解码器特征图,这些特征图分别表示为D6、D5、D4、D3、D2和D1,利用D6的全局平均池,我们可以得到D7。解码器特征映射的大小逐渐翻倍。然后就可以利用七个解码器特征映射同时进行目标检测和语义分割。

    目标检测

    为了完成目标检测,首先我们设置了初始化机制PriorBox生成候选目标(采用了分类和回归的方法)。由于交通场景具有高度的复杂性和动态性,物体也具有多样性,这里PriorBox的目标是生成具有不同纵横比的候选目标。PriorBox针对不同特征的规模可以按照下式计算:
    S k = S min ⁡ + S max ⁡ − S min ⁡ m − 2 ( k − 2 ) , k ∈ [ 2 , m ] ( k > = 2 ) S k = S s m a l l e s t ( k = 1 ) S_k=S_{\min}+\frac{S_{\max}-S_{\min}}{m-2}(k-2),k\in [2,m]\text{(}k>=2\text{)} \\ S_k=S_{\mathrm{smallest}}\text{(}k=1\text{)} Sk=Smin+m2SmaxSmin(k2),k[2,m]k>=2Sk=Ssmallestk=1

    其中m是特征映射的数量,k是特征映射的索引。这里我们定义 m = 7 , S s m a l l e s t = 0.04 , S m i n = 0.7 , S m a x = 0.95 m=7,S_{smallest}=0.04,S_{min}=0.7,S_{max}=0.95 m=7Ssmallest=0.04Smin=0.7Smax=0.95
    本模型收到了SSD 的启发,在前五个解码器层(D3,D4,D5…D7)为每个特征映射图位置设置了七个不同比例的PriorBox,纵横比分别为α={1,2,3,4,1/2,1/3,1/4}。在解码器的最后两层(D1,D2)设置了五个不同比例的PriorBox,纵横比分别为α={1,2,3,1/2,1/3}。在所有层中对于α为1的情况,额外引入一种PriorBox,规模为√(S_k S_(k+1) )。对于每一个PriorBox,宽度为w=S_k √α,高度为h=S_k/ √α。如果输入图像的分辨率为300×300,七个解码层的特征映射规模为 S 1 = 0.04 , S 2 = 0.1 , S 3 = 0.27 , S 4 = 0.44 , S 5 = 0.61 , S 6 = 0.78 , S 7 = 0.95 {S_1=0.04,S_2=0.1,S_3=0.27,S_4=0.44,S_5=0.61,S_6=0.78,S_7=0.95} S1=0.04,S2=0.1,S3=0.27,S4=0.44,S5=0.61,S6=0.78,S7=0.95
    如上文所示,这一PriorBox初始化机制可以生成密集的具有特定长宽比的候选对象,有利于复杂动态交通场景中的目标检测。

    语义分割

    研究证明,多尺度特征融合在语义分割中是非常有用的。其主要原因是浅层特征图往往隐含局部语义信息,深层特征图往往隐含全局语义信息。因此,为了得到全局和局部的语义信息,我们将每个解码层的特征映射上采样到相同的分辨率,然后将它们连接在一起形成最终的特征映射。为了在同一特征图中提取出丰富的语义信息,我们在最后一个特征图中采用了MSAC机制。Multi-Scale Atrous Convolution(MSAC)模块能够获得具有不同感受野的信息,能够有效地捕捉信息特征。如上文模型架构示意图所示,MSAC网络主要由5个分支组成,包括1×1卷积分支、3个并行3×3萎缩卷积分支和一个全局平均池分支。

    损失函数

    对于目标检测,这里使用了与SSD、Fast R-CNN相似的损失函数。对于语义分割,损失函数是像素的预测类分布和目标类分布之间的交叉熵。我们使用解码器的每个特征映射分别解析语义像素的标签。我们对每一个分割上采样到与真实数据相同的分辨率,用它们来计算每一个语义分割的损失,并将这些损失累加起来。因此这里定义多任务损失函数为:
    L = L d e t + L s e g L d e t = L c l s + L r e g L s e g = L i n f e r − f m + L d e c o d e r − f m s \begin{array}{c} L=L_{det}+L_{seg}\\ L_{det}=L_{cls}+L_{reg}\\ L_{seg}=L_{infer_-fm}+L_{decoder_-fms}\\ \end{array} L=Ldet+LsegLdet=Lcls+LregLseg=Linferfm+Ldecoderfms

    其中, L c l s L_{cls} Lcls用于对候选对象进行分类, L r e g L_{reg} Lreg用于细化相应的PriorBox, L i n f e r _ f m L_{infer\_fm} Linfer_fm表示融合后的特征映射与真实数据之间的交叉熵, L d e c o d e r _ f m s L_{decoder\_fms} Ldecoder_fms表示每个解码器特征映射与真实数据之间的交叉熵。

    参考文献

    Selective Search for Object Recognition[J]. International Journal of Computer Vision, 2013
    Rich feature hierarchies for accurate object detection and semantic segmentation
    Spatial Pyramid Pooling in Deep ConvolutionalNetworks for Visual Recognition, 2015
    You Only Look Once: Unified, Real-Time Object Detection Joseph Redmon∗ , Santosh Divvala∗†, Ross Girshick¶ , Ali Farhadi
    Liu W, Anguelov D, Erhan D, et al. Ssd: Single shot multibox detector[C]//European conference on computer vision. Springer, Cham, 2016: 21-37.
    A. Krizhevsky, I. Sutskever, and G. E. Hinton. Imagenet classification with deep convolutional neural networks. In NIPS, 2012
    S. Fidler, R. Mottaghi, A. L. Yuille, and R. Urtasun, “Bottom-up segmentation for top-down detection,” 2013 IEEE Conference on Computer Vision and Pattern Recognition, pp. 3294–3301, 2013.
    R. B. Girshick, J. Donahue, T. Darrell, and J. Malik, “ Rich featurehierarchies for accurate object detection and semantic segmentation,” 2014 IEEE Conference on Computer Vision and Pattern Recognition, pp. 580–587, 2013.
    W. Liu, D. Anguelov, D. Erhan, C. Szegedy, S. E. Reed, C.-Y. Fu, and A. C. Berg, “Ssd: Single shot multibox detector,” in ECCV, 2016.

    展开全文
  • 恰好最近Transformer也比较热门,这里就介绍一下如何利用Transformer来进行目标检测以及语义分割。 关于Transformer,可以参考我的这篇文章。 这里我简要地介绍一下Transformer,这是一个用于序列到序列建模的模型...

    介绍

    这次介绍的是Facebook AI的一篇文章“End-to-End Object Detection with Transformers

    恰好最近Transformer也比较热门,这里就介绍一下如何利用Transformer来进行目标检测以及语义分割。

    关于Transformer,可以参考我的这篇文章

    这里我简要地介绍一下Transformer,这是一个用于序列到序列建模的模型架构,被广泛应用于自然语言翻译等领域。Transformer抛弃了以往对序列建模的RNN形式的网络架构,引入了注意力机制,实现了不错的序列建模以及变换能力。

    大致架构以及流程

    DETR的架构
    如上图所示,这里面主要分为两个部分:

    • Backbone:主要是CNN,用来抽取高级语义特征的
    • Encoder-Decoder:将高级语义特征利用并给出目标预测

    更为细节地,给出如下的架构

    架构细节
    我们按顺序地给出流程:

    1. 输入图片,形状为 ( C 0 , H 0 , W 0 ) (C_0, H_0,W_0) (C0,H0,W0), 其中 C 0 = 3 C_0 = 3 C0=3代表通道数量
    2. CNN抽取特征之后,得到 ( C , H , W ) (C,H,W) (C,H,W)形状的张量,其中 C = 2048 , H = H 0 32 , W = W 0 32 C=2048, H=\frac{H_0}{32}, W=\frac{W_0}{32} C=2048,H=32H0,W=32W0
    3. 利用1x1的卷积,对特征的大小进行约减,得到 ( d , H , W ) (d, H, W) (d,H,W)的张量, 其中 d < < C d<< C d<<C
    4. 将张量进行压缩(squeeze),形状变为 ( d , H W ) (d, HW) (d,HW)
    5. 得到了 d d d个向量序列,作为序列输入到Encoder之中
    6. Decoder得到输出的向量序列,通过FFN(Feed Forward Network)得到边界框预测以及类别预测,其中FFN就是简单的3层的感知机,边界框预测包括归一化后的中心坐标以及宽高。

    目标检测的效果

    目标检测效果
    如上图所示,可以看到DETR的计算次数不算多,但是FPS也不算高,只能算中规中矩。

    那么语义分割呢?

    这里给出关于语义分割的大致架构,如下图所示:

    语义分割架构
    注意到,图中所描述的,边界框嵌入(Box Embedding)实质上就是decoder的输出(在FFN之前)。
    然后使用一个多头部注意力的机制,这个机制实质上是对Q,K,V进行多次的线性变换,在这里面,K和V是Encoder的输入,Q是decoder的输出。
    其中M是多头部注意力的头部数量。

    之后,通过一个简单的CNN,得到一个Mask矩阵,用来生成语义分割的结果。

    语义分割结果分析

    语义分割结果
    可以看到比起PanopticFPN++来说,效果的提升有限,特别是AP并不佳,表现一般。

    结论

    文章将Transformer应用到了目标检测以及语义分割的领域,取得了不错的效果,但是性能上相较于FastRCNN类似架构的方法,并没有明显的提升,但显现出这种序列模型不错的扩展能力。用一个架构解决多种问题,统一化模型的目标指日可待。

    展开全文
  • 本文发表于第32届神经信息处理系统会议(NIPS 2018),是法国汽车零部件供应商法雷奥集团(Valeo)研究提出的一种用于自动驾驶领域的多任务神经网络,可同时执行目标检测语义分割任务。

    在这里插入图片描述

    本文发表于第32届神经信息处理系统会议(NIPS 2018),是法国汽车零部件供应商法雷奥集团(Valeo)研究提出的一种用于自动驾驶领域的多任务神经网络,可同时执行目标检测与语义分割任务。
    代码开源地址:https://github.com/MarvinTeichmann/MultiNet

    Abstract

    卷积神经网络(CNN)被成功地用于各种视觉感知任务,包括目标检测、语义分割、光流、深度估计和视觉SLAM。通常,这些任务是独立探索和建模的。

    本文提出了一种同时进行学习目标检测和语义分割的联合多任务网络设计。主要目的是通过共享两个任务的编码器来实现低功耗嵌入式SOC的实时性能。我们使用一个类似于ResNet10的小型编码器构建了一个高效的体系结构,该编码器为两个解码器所共享。目标检测使用YOLOv2类解码器,语义分割使用FCN作为解码器。

    我们在两个公共数据集(Kitti,Cityscapes)和我们的私有鱼眼摄像机数据集中对所提出的网络进行了评估,并证明了联合网络与单独网络具有相同的准确率。我们进一步优化了网络,使1280x384分辨率的图像达到30fps。


    1. Introduction

    卷积神经网络(CNNs)已经成为自动车辆中大多数视觉感知任务的标准构件。目标检测是CNN在行人和车辆检测中的首批成功应用之一。近年来,语义分割逐渐成熟,从检测道路、车道、路缘等道路对象开始。尽管嵌入式系统的计算能力有了很大提高,专用CNN硬件加速器的趋势也在不断发展,但高精度的语义分割的实时性能仍然具有挑战性。本文提出了一种语义分割和目标检测的实时联合网络,覆盖了自动驾驶中所有的关键对象。

    论文的其余部分结构如下。第二节回顾了目标检测在自动驾驶中的应用,并提供了使用多任务网络解决该问题的动机。第三部分详细介绍了实验装置,讨论了所提出的体系结构和实验结果。最后,第四部分对论文进行了总结,并提出了未来可能的研究方向。

    在这里插入图片描述

    2. Multi-task learning in Automated Driving

    多任务的联合学习属于机器学习的一个子分支,称为多任务学习。多任务联合学习背后的基本理论是,网络在接受多任务训练时可以表现得更好,因为它们通过利用任务间规则来更快地学习游戏规则。这些网络不仅具有较好的通用性,而且降低了计算复杂度,使其在低功耗嵌入式系统中非常有效。最近的进展表明,CNN可以用于各种任务[6],包括运动目标检测[13]、深度估计[8]和视觉SLAM[9]。

    我们的工作最接近于最近的MultiNet[14]。我们的不同之处在于,我们关注的是更小的网络更多类的两个任务,以及在三个数据集中进行的更广泛的实验

    2.1 Important Objects for Automated Driving

    流行的语义分割汽车数据集有CamVid[1]和较新的City Scenes[3]。后者具有5000个注释帧的大小,这是相对较小的。在这个数据集上训练的算法不能很好地推广到在其他城市和隧道等看不见的对象上测试的数据。为了弥补这一点,我们创建了像Synthia[11]和Virtual Kitti[4]这样的合成数据集。有一些文献表明,在较小的数据集中,组合会产生合理的结果。但对于自动驾驶系统的商业部署来说,它们仍然有限。因此,最近正在努力构建更大的语义细分数据集,如Mapillary vistas数据集[10]和ApolloScape[7]。Mapillary数据集由25,000幅图像组成,共100类。ApolloScape数据集由50个类别的143,000张图像组成。

    2.2 Pros and Cons of MTL

    在本文中,我们提出了一种具有共享编码器的网络结构,该编码器可以共同学习。其主要优点是提高了效率、可伸缩性,可以利用先前的功能添加更多任务,并通过归纳迁移(任务的学习可转移特征)实现更好的泛化。我们将在下面更详细地讨论共享网络的优缺点。

    共享网络的优点:

    • 计算效率:共享功能背后简单易懂的直觉提高了计算效率。假设有两个类和两个独立的网络,分别占用50%的处理能力。如果有可能在两个网络之间共享30%,则每个网络都可以重复使用额外的15%来单独创建一个稍大的网络。有大量的经验证据表明,网络的初始层是与任务无关的(oriented Gabor filters),我们应该能够进行一定程度的共享,越多越好。
    • 泛化和准确性:在忽略计算效率的情况下,共同学习的网络往往泛化得更好、更准确。这就是为什么ImageNet上的迁移学习非常流行的原因,那里有网络学习非常复杂的类别,比如区分特定种类的狗。因为拉布拉多犬和博美拉多犬这两个物种之间的细微差别是后天习得的,所以它们更善于检测一项更简单的犬类检测任务。另一个论点是,当他们共同学习时,过度适应某项特定任务的可能性较小。
    • 可扩展到更多任务,如流量估计、深度、通信和跟踪。因此,可以协调共同的CNN特写流水线,以用于各种任务。

    共享网络的缺点:

    • 在非共享网络的情况下,算法是完全独立的。这可以使数据集设计、体系结构设计、调优、硬负面挖掘等变得更简单、更容易管理。
    • 调试共享网络(尤其是当它不工作时)相对较难。

    3. Proposed Algorithm and Results

    3.1 Network Architecture

    在本节中,我们将报告我们计划改进的基线网络设计的结果。我们在图1的高级框图中提出了一种联合学习的共享编码器网络体系结构。我们实现了一个由3个分割类(背景、道路、人行道)和3个对象类(汽车、人、骑车人)组成的两任务网络。

    为了在低功耗嵌入式系统上实现可行性,我们使用了一个名为 Resnet10 的小型编码器,该编码器完全共享这两个任务。FCN8 作为语义分割的解码器,YOLO 作为目标检测的解码器。语义分割的损失函数是最小化误分类的交叉熵损失。对于几何函数,以平方误差损失的形式将目标定位的平均精度作为误差函数。对于这两个任务,我们使用单个损失的加权和 L = w s e g ∗ L s e g + w d e t ∗ L d e t L=w_{seg}∗L_{seg}+w_{det}∗L_{det} L=wsegLseg+wdetLdet。在鱼眼相机具有较大空间变异畸变的情况下,我们使用多项式模型实现了镜头畸变校正。

    在这里插入图片描述

    3.2 Experiments

    在这一部分中,我们将解释实验设置,包括使用的数据集、训练算法细节等,并讨论结果。

    我们在包含5000张图像和两个公开可用的数据集Kitti[5]和CitySces[3]的内部鱼眼数据集上进行了训练和评估。我们使用Keras[2]实现了不同提出的多任务架构。我们使用了来自ImageNet的预先训练好的Resnet10编码器权重,然后针对这两个任务进行了微调FCN8上采样层使用随机权重进行初始化。

    我们使用ADAM优化器,因为它提供了更快的收敛速度,学习率为0.0005。优化器采用分类交叉熵损失和平方误差损失作为损失函数。以平均类IOU(交集)和每类IOU作为语义分割的精度度量,以平均平均精度(MAP)和每类平均精度作为目标检测的精度度量。由于多个任务需要内存,所有输入图像的大小都调整为1280x384

    表1总结了在Kitti、Citycapes和我们的内部鱼眼数据集上STL网络和MTL网络所获得的结果。这旨在为合并更复杂的多任务学习技术提供基准精度。我们将分割网络(STL Seg)和检测网络(STL Det)与执行分割和检测的MTL网络(MTL、MTL100和MTL100)进行比较。

    在这里插入图片描述

    我们测试了MTL损耗的3种配置,第一种配置(MTL)使用分割损耗和检测损耗的简单和 ( w s e g = w d e t = 1 ) (w_{seg}=w_{det}=1) (wseg=wdet=1)。另外两个配置MTL10MTL100使用任务损失的加权和,其中分割损失分别用权重 w s e g = 10 w_{seg}=10 wseg=10 w s e g = 100 w_{seg}=100 wseg=100加权。这弥补了任务损失尺度的差异:在训练过程中,分割损失是检测损失的10-100倍

    MTL网络中的这种加权提高了3个数据集的分割任务的性能。即使分割任务的MTL结果略低于STL(Single-task Learning)结果,本实验也表明,通过正确调整参数,多任务网络具有学习更多的能力。此外,通过保持几乎相同的精度,我们在内存和计算效率方面有了显著的提高。我们利用几种标准的优化技术来进一步改善运行时间,并在汽车级低功耗SOC上实现30fps。

    4 Conclusion

    本文中,我们讨论了多任务学习在自动驾驶环境中的应用,用于联合语义分割和目标检测任务。首先,我们激发了完成这两项任务的需要而不仅仅是语义分割。

    然后我们讨论了使用多任务方法的利弊。我们通过精心选择编解码器,构建了一个高效的联合网络,并对其进行了进一步优化,在低功耗的嵌入式系统上达到了30fps。

    我们分享了在三个数据集上的实验结果,证明了联合网络的有效性。在未来的工作中,我们计划探索增加视觉感知任务,如深度估计、流量估计和视觉SLAM。

    更多精彩内容,请关注我的公众号【AI 修炼之路】!

    展开全文
  • 在进行语义分割目标检测等一些任务进行深度学习时,需要对原始数据进行一定的处理再输入到网络当中。本文实现对原始图像的缩小,但是不改变原始图像的长宽,对于缩小的

           在进行语义分割,目标检测等深度学习任务时,需要对原始数据进行一定的处理,增广数据集,再入到网络当中。本文实现对原始图像的缩小,但是不改变原始图像的长宽,对于缩小的图像进行边缘的填充,使得和原始图像大小一致。

    import numpy as np
    import cv2
    import math
    import random
    import os
    import xml.etree.ElementTree as ET
    from PIL import Image
    
    name_classes = ['hqc']  # 类别名,可以更改为对应的voc类别名称即可
    
    def resize_xml(xml_file_name,new_xml_name,original_jpg_name,original_png_name,new_jpg_name,new_png_name,new_size=(224,224),original_size=(256,256)):
    
        original_jpg =Image.open(original_jpg_name)
        cv_original_jpg = cv2.cvtColor(np.asarray(original_jpg), cv2.COLOR_RGB2BGR)
        cv_original_jpg= cv2.resize(cv_original_jpg,(224,224))
        # 16是边缘填充的长度,图片先resize为224大小,则再变回256,则四边都需要填充16
        new_jpg =cv2.copyMakeBorder(cv_original_jpg, 16, 16, 16, 16, cv2.BORDER_CONSTANT, value=(0, 0, 0))   # 填充保持图片的大小不变。
        cv2.imencode('.jpg', new_jpg)[1].tofile(new_jpg_name)
    
        original_png =Image.open(original_png_name)
        cv_original_png = cv2.cvtColor(np.asarray(original_png), cv2.COLOR_RGB2BGR)
        cv_original_png = cv2.resize(cv_original_png, (224, 224))
        new_png = cv2.copyMakeBorder(cv_original_png, 16, 16, 16, 16, cv2.BORDER_CONSTANT, value=(0, 0, 0))
        cv2.imencode('.png', new_png)[1].tofile(new_png_name)
    
        scale_x =new_size[0]/original_size[0]
        scale_y = new_size[1] / original_size[1]
    
        tree = ET.parse(xml_file_name)         # 因为我对边缘进行了填充,故不改变原图的大小size,只是对xml的边界框坐标进行更改。
        objs = tree.findall('object')
        for ix, obj in enumerate(objs):
            name = obj.find('name').text
            if name in name_classes:            # name_classes的里面放的是你含有多少种类的框的名字,列表
                # print(xml_file)
                obj_new = obj.find('bndbox')
                xmin= str(int(float(obj_new.find('xmin').text) * scale_x)+16)
                xmax = str(int(float(obj_new.find('xmax').text) * scale_x)+16)
                ymin = str(int(float(obj_new.find('ymin').text) * scale_y)+16)
                ymax = str(int(float(obj_new.find('ymax').text) * scale_y)+16)
                obj_new.find('xmin').text = xmin
                obj_new.find('xmax').text = xmax
                obj_new.find('ymin').text = ymin
                obj_new.find('ymax').text = ymax
                tree.write(new_xml_name)
    
    if __name__ == '__main__':
        resize_jpg_path = r'F:\数据集\image'
        resize_png_path = r'F:\数据集\label'
        resize_xml_path = r'F:\数据集\annotation'
    
        orginal_jpg_files =os.listdir(resize_jpg_path)
        orginal_png_files = os.listdir(resize_png_path)
        orginal_xml_files = os.listdir(resize_xml_path)
    
        # new_size = (224, 224)
        # original_size = (256, 256)
    
        new_jpg_path='F:/数据集/image'
        new_png_path = 'F:/数据集/label'
        new_xml_path = 'F:/数据集/annotation'
    
        num =1
        for i in orginal_jpg_files:
            orginal_image_id = i
            orginal_png_id = i.split('.')[0] + '.png'
            orginal_xml_id = i.split('.')[0] + '.xml'
            orginal_jpg_name = os.path.join(resize_jpg_path, orginal_image_id)
            orginal_png_name = os.path.join(resize_png_path, orginal_png_id)
            orginal_xml_name = os.path.join(resize_xml_path, orginal_xml_id)
    
    
            new_jpg_id = str(num) + '.jpg'
            new_jpg_name = os.path.join(new_jpg_path, new_jpg_id)
            new_png_id = str(num) + '.png'
            new_png_name = os.path.join(new_png_path, new_png_id)
            new_xml_id = str(num) + '.xml'
            new_xml_name = os.path.join(new_xml_path, new_xml_id)
    
            resize_xml(xml_file_name=orginal_xml_name,new_xml_name=new_xml_name,original_jpg_name=orginal_jpg_name,
                       new_jpg_name=new_jpg_name,original_png_name=orginal_png_name,new_png_name=new_png_name)
            num=num+1

     图像进行边缘填充时,利用的函数时cv2.copyMakeBorder()

    本文中:

    cv2.copyMakeBorder(cv_original_jpg, 16, 16, 16, 16, cv2.BORDER_CONSTANT, value=(0, 0, 0))

    参数的说明:

    • src:要处理的原图        cv_original_jpg
    • top, bottom, left, right:上下左右要扩展的像素数,本文的原始图像256*256,缩小为224*224,然后要保持原始图像一样的大小,故需要对边缘各填充16个像素值
    • borderType:边框类型,这个就是需要关注的填充方式。  cv2.BORDER_CONSTANT是一个常数值的填充,value=(0,0,0)全黑的填充。

     本人做的是多任务的学习,故分割的标签做同样的处理。

    标签处理的代码说明:

        for ix, obj in enumerate(objs):
            name = obj.find('name').text
            if name in name_classes:            # name_classes的里面放的是你含有多少种类的框的名字,列表
                # print(xml_file)
                obj_new = obj.find('bndbox')
                xmin= str(int(float(obj_new.find('xmin').text) * scale_x)+16)
                xmax = str(int(float(obj_new.find('xmax').text) * scale_x)+16)
                ymin = str(int(float(obj_new.find('ymin').text) * scale_y)+16)
                ymax = str(int(float(obj_new.find('ymax').text) * scale_y)+16)
                obj_new.find('xmin').text = xmin
                obj_new.find('xmax').text = xmax
                obj_new.find('ymin').text = ymin
                obj_new.find('ymax').text = ymax
                tree.write(new_xml_name)

    坐标变换的公式:

    xmin= str(int(float(obj_new.find('xmin').text) * scale_x)+16)

           注意存入xml的值是字符串,故需要str强制性数据转换,scale是缩放尺度,加16是因为边缘都填充了16个像素值。所以缩放后的坐标值相对于224*224图像中的值,因此加上边缘16为填充后256*256图像上的坐标值。

    总体的效果展示:

    resize填充之后的图像

     

    resize填充之后的标签

     

    resize后框的结果

     

     

     

     

    展开全文
  • Classification 简单地说,图像分类是一种用于对图像中特定对象的类别进行分类或预测的技术,该技术的主要目的是...目标分割是检测到图像中的所有目标,分为语义分割(Semantic-level)实例分割(Instance-level).
  • 原始图像,目标检测的标签框和语义分割的标签水平翻转处理:https://blog.csdn.net/hejunran/article/details/117483650 原始图像加雾化,目标检测的标签框和语义分割的标签重命名处理:...目标检测的标签框和语义分割...
  • 实例分割:(上图右)其实就是目标检测和语义分割的结合。相对目标检测的边界框,实例分割可精确到物体的边缘;相对语义分割,实例分割需要标注出图上同一物体的不同个体(羊1,羊2,羊3…) 目前常用的实例分割...
  • 本周开始我将为大家持续分享最新的CVPR2021论文解读,本篇文章收录了目标检测和语义分割的最新论文合集,以最快的形式发送给需要阅读的迈微社友,每篇文章会给出论文链接以及作者开源的代码。 目标检测篇 1、...
  • 单发多框检测模型 (Single shot multibox detection, SSD)单发多框检测模型主要由一个基础网络块若干个多尺度特征块串联而成。我们可以设计基础网络,使它输出的高和宽较大。这样一来,基于该特征图生成的锚框数量...
  • 从博客https://blog.csdn.net/jiugeshao/article/details/112093981写完...后面会把目标检测和目标分类中的常用算法实现一遍,然后就打算转战Linux下实现。 一.目标分类 1. 从经典的LetNet, AlexNet, VggNet,GooleNet
  • 作者丨Tom Hardy@知乎编辑丨计算机视觉工坊来源丨https://zhuanlan.zhihu.com/p/355137468感慨:知识蒸馏大放异彩~目标检测篇1、Semantic...
  • 本周开始我将为大家持续分享最新的CVPR2021论文解读,本篇文章收录了目标检测和语义分割的最新论文合集,以最快的形式发送给需要阅读的迈微社友,每篇文章会给出论文链接以及作者开源的代码。
  • 文 / 研究员 Alireza Fathi AI 实习生 Rui Huang,Google Research 过去几年里,3D 传感器(如激光雷达、...最近,计算机视觉领域开始在 3D 场景理解方面取得良好进展,包括用于移动 3D 目标检测、透明目标检..
  • 目标检测+语义分割=实例分割

    千次阅读 2021-12-11 13:18:52
    目标检测:给你一张只有一条狗的图片,输入训练好的模型中(假设模型包含了所有类型的狗),不管狗出现在图片中的哪个位置,它都能被检测为狗;给你一张有两条狗的图片,输入网络,会生成两个bbox,均被检测为狗,...
  • 但是需要正确区分语义分割和实例分割,虽然他们在名称上很相似,但是他们属于不同的计算机视觉任务。例如,一张照片中有多个人,针对语义分割任务,只需将所有人的像素都归为一类即可,但是针对实例分割任务,则需要...
  • Mask R-CNN(目标检测语义分割)测试Mask R-CNN(目标检测,语义分割)测试Kaiming He的大作Mask R-CNN(https://arxiv.org/pdf/1703.06870.pdf)已经放出来一段时间了,最近才有空进行代码学习编译。图像目标检测是图像...
  • 计算机视觉的任务很多,有图像分类、目标检测语义分割、实例分割和全景分割等,那它们的区别是什么呢?1、Image Classification(图像分类)图像分类(下图左)就是对图像判断出所属的分类,比如在学习分类中数据集有...
  • 语义分割更多的在强调目标的类别含义(class-level),而目标检测更强调目标的物体含义(object-level).换句话讲,语义分割不关注目标是否是一个物体,而是关注该目标属于哪一类;而目标检测关注的是一个目标的几何...
  • 基于pytorch用yolov5算法实现目标检测分割

    千次阅读 热门讨论 2021-09-13 18:44:21
    目标检测的目的是判断在单张图片或者连续图片(视频)中,感兴趣的单个或者 多个物体是否存在,如果存在,需要将感兴趣的单个或者多个物体的位置大小确 定。通常情况下我们使用一个矩形框来表示一个物体的位置...
  • 语义分割数据集转目标检测数据集

    千次阅读 2021-12-14 21:08:54
    最近,在做实时性计算的东西,最初用的语义分割unet,发现它在服务器级GPU下推理的特别慢,但是精度还不错,但是我们追求的是实时性,所以我们还是用一下目标检测,最终选定yolov5 yolov5的数据集大家都知道,是需要...
  • 二维上的计算机视觉的任务很多,有图像分类、目标检测语义分割、实例分割和全景分割等,那它们的区别是什么呢? 1、Image Classification(图像分类) 图像分类:就是对图像判断出所属的分类,比如在学习分类中...
  • 1. 图像分类(image classification) 图像分类就是识别图像中存在的内容,对图像判断出所属的分类。如下图,有人(person)、树(tree)、草地(grass)、天空(sky), ...3. 语义分割(semantic segmentati
  • 2、目标检测(object detection) 识别图像中存在的内容检测其位置,如下图,以识别检测人(person)为例。 3、语义分割(semantic segmentation) 对图像中的每个像素打上类别标签,如下图,把图像分为人...
  • 1. 目标检测中的IOU 假设,我们有两个框,rec1rec1rec1与rec2rec2rec2,我们要计算其IOUIOUIOU。其中IOUIOUIOU的计算公式为,其交叉面积IntersectionIntersectionIntersection除以其并集UnionUnionUnion。 ...
  • 2、目标检测(object detection) 识别图像中存在的内容检测其位置,如下图,以识别检测人(person)为例 3、语义分割(semantic segmentation) 对图像中的每个像素打上类别标签,如下图,把图像分为人...
  • 目标检测语义分割的术语

    千次阅读 2021-12-09 17:32:15
    1.Backbone 提取特征 2.neck 更好的提取特征 3....7.pretext taskdownstream task 预训练任务、下游任务 8.temperature parameters 控制softmax的平滑程度,β越大,越平滑 9.Warm up 前面几个epoch,学习率较小 Ref
  • Yolov5同时进行目标检测和分割分割

    千次阅读 2021-12-13 19:36:19
    基于yolov5(v6.0分支)的多任务检测和分割模型。 整体框架 参考: 1.[YOLOP: You Only Look Once for Panoptic Driving Perception](https://arxiv.org/abs/2108.11250) 2. GitHub - ultralytics/...
  • 本文总结了计算机视觉中图像分类、目标检测语义分割的一些经典算法,包括论文对应的代码实现,文章放在了项目的papers目录中,而classification、yolov3、segment三个文件夹下分别存放了三种任务经典论文的...
  • 1、Image Classification(图像分类) 图像分类(下图左)就是对图像判断出所属的分类,比如在学习分类中数据集有人(person)、羊(sheep)、狗(dog)猫(cat...目前常用的目标检测算法有Faster R-CNN基于YOLO..

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,387
精华内容 10,954
关键字:

目标检测和语义分割