德州哪里做网站,查看网站开发语言,软件制作网站,石景山网站建设制作公司目标检测和实例分割(OBJECT_DETECTION AND INSTANCE SEGMENTATION) 文章目录 目标检测和实例分割(OBJECT_DETECTION AND INSTANCE SEGMENTATION)一. 计算机视觉(AI VISION)1. 图像分类2. 目标检测与定位3. 语义分割和实例分割目标检测算法可以分为两大类#xff1a; R-CNN生成…目标检测和实例分割(OBJECT_DETECTION AND INSTANCE SEGMENTATION) 文章目录 目标检测和实例分割(OBJECT_DETECTION AND INSTANCE SEGMENTATION)一. 计算机视觉(AI VISION)1. 图像分类2. 目标检测与定位3. 语义分割和实例分割目标检测算法可以分为两大类 R-CNN生成候选区域(Region Proposal)对每个区域进行CNN特征提取使用SVM分类器判断是否属于该类使用回归器修正候选框位置 SPPNETFast R-CNNR-CNN缺点SPPNet缺点从上图我们可以知道Fast R-CNN相较于R-CNN和SPPNet的优点Fast R-CNN的架构 端到端 (END TO END)在介绍FASTER R-CNN之前我们首先介绍一个概念端到端(end to end). Faster R-CNNRPN网络RPN网络的工作流程就是anchorLoss Funtion 总结 在本篇开始之前我推荐一个很好的图片The Modern History of Object Recognition — Infographic 强力推荐大家看一下这里因为csdn原因无法将图片贴上来。 本篇文章将介绍目标检测和实例分割的经典网络模型 (从R-CNN,SPPNet,Fast R-CNN,Faster R-CNN)让我们来一起探索这些伟大的模型是如何一步步改进完善的 一. 计算机视觉(AI VISION)
在介绍目标检测和实例分割之前我们先介绍一下计算机视觉的任务分类以及最新的神经网络模型(来源讯飞星火AI): 1. 图像分类 图像分类是指将图像分到预定义类别中的任务。例如给定一张图片算法需要判断这张图片中是否包含某种物体如猫或狗。这个我们就太熟悉了在之前的文章中以及介绍过了经典网络模型和精读了它们的论文。 ConvNeXt和CrossViT是当前在图像分类任务上表现突出的最新模型。ConvNeXt通过改进卷积网络结构来优化性能而CrossViT结合了CNN和Transformer的优势提高了分类准确性 2. 目标检测与定位 目标检测不仅要识别图像中的物体还要精确地标定其位置通常通过边界框来实现。传统的目标检测方法依赖于滑动窗口和手工设计的特征但这种方法在计算量和准确性上存在限制。随着深度学习的发展基于CNN的方法显著改善了检测效果。 Yolov7和Swin Transformer是两种最新的目标检测模型。Yolov7通过新的网络结构和增强算法提升了检测速度和精度而Swin Transformer利用分层建模能力处理不同尺寸的对象。 3. 语义分割和实例分割 语义分割任务将图像中的每个像素分类到特定类别这适用于场景理解等应用。实例分割则更进一步需要区分同一类别的不同个体。 SETR和Mask2Former是最新的分割模型。SETR利用Transformer的全局信息来提升分割精度而Mask2Former则在同一个Transformer框架内同时解决目标检测和实例分割任务。 下面我们将用一张图充分的理解分类(Image classification)检测(Object localization)语义分割(Semantic segmentation)和实例分割(Instance Segmentation)之间的区别 从图中我们可以看到分类检测分割的区别很明显不明显的是语义分割和实例分割。 图像分类(classification) 就是对图像判断出所属的分类比如在学习分类中数据集有人person、羊sheep、狗dog和猫cat四种图像分类要求给定一个图片输出图片里含有哪些分类比如上图的例子是含有person、sheep和dog三种。 目标检测(object detection) 有什么在哪里。比分类多了一个定位需要确定目标的位置用矩形框将目标框出。 语义分割(semantic segmentation) 就是需要区分到图中每一点像素点而不仅仅是矩形框框住了。但是同一物体的不同实例不需要单独分割出来。对下图左标注为人羊狗草地。而不需要羊1羊2羊3羊4羊5等。 实例分割(instance segmentation) 实例分割其实就是目标检测和语义分割的结合。相对目标检测的边界框实例分割可精确到物体的边缘相对语义分割实例分割需要标注出图上同一物体的不同个体羊1羊2羊3… 全景分割(Panoramic segmentation): 全景分割是语义分割和实例分割的结合。跟实例分割不同的是实例分割只对图像中的object进行检测并对检测到的object进行分割而全景分割是对图中的所有物体包括背景都要进行检测和分割。
目标检测算法可以分为两大类
一类是基于Region Proposal区域推荐的R-CNN系算法R-CNNFAST R-CNNFaster R-CNN等这些算法需要two-stage即需要先算法产生目标候选框也就是目标位置然后对候选框做分类与回归。另一类是YoloSSD这类one-stage算法仅仅使用一个卷积神经网络CNN直接预测不同目标的类别与位置。
接下来我们开始本篇重点基于Region Proposal区域推荐的R-CNN系算法。两阶段(two-stage)
R-CNN
论文地址Rich feature hierarchies for accurate object detection and semantic segmentation 生成候选区域(Region Proposal) 通过SS(Selective Search)算法生成2000个候选框之后对候选框进行归一化缩放到固定大小(227*227).这里我们简单介绍一下选择性搜索算法(Selective Search) 输入图像通过类似聚类的方法找到初始的颜色纹理大小形状相似度比较一致的分割区域然后对区域进行加权合并得到不同层次的2000个候选框 对每个区域进行CNN特征提取 使用SVM分类器判断是否属于该类 使用非极大值抑制剔除重叠建议框 非极大值抑制 定义IoU指数即 ( A ∩ B ) / ( A ∪ B ) (A \cap B) / (A \cup B) (A∩B)/(A∪B),如下图所示,A是向日葵类对应的所有候选框中概率最大的区域B是另一个区域,计算AB的IoU其结果大于阈值那么就认为AB属于同一类即都是向日葵所以应该保留A删除B这就是非极大值抑制。 使用回归器修正候选框位置
黄色框表示候选区域 Region Proposal,绿色窗口表示实际区域Ground Truth人工标注的红色窗口表示 Region Proposal 进行回归后的预测区域这里就跟机器学习中的回归预测房价类似。 缺点 (1) R-CNN将所有输入图片缩放至227*227大小会影响原图的比例导致模型检测精度下降。尺寸归一化导致物体变形纵横比特征丢失。(2) 步骤繁琐需要对每一张候选区域提取特征。 提出问题 (1) 能否改进从而可以使喂入全连接层的图片大小不固定(2) 能否只提取一次特征然后找到候选区域对应的特征图 SPPNET
论文地址Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition 从上图我们可以知道 R-CNNimage–裁剪变换(crop/warp)–卷积–全连接层–输出结果。 SPPNETimage–卷积–空间金字塔池化(spatial pyramid pooling)–全连接层–结果。 改进了最主要的两个点
直接将整幅图片喂入CNN然后在特征图上找到大约2000个候选区域。使用空间金字塔池化。
下面我们将介绍这两点 作者发现,卷积后对应的位置并不会发生改变每个卷积层会匹配响应的区域。如上图所示(a)图为输入的照片(b)为第5层卷积层之后提取的特征图©为测试集中能使该特征图激活最大的一些图片: 车轮在原图中的位置在特征图上也会出现在响应的位置。 这样在目标检测使可以根据特征图画出该物体的位置也就可以画出具体的框了。 上图就是SPPNET最核心的部分空间金字塔池化层。 分别将特征图划分1×1、2×2、4×4大小的子块显然在不同的划分模式下子块大小是不一致的输入特征图尺寸不一致时子块大小也不一样然后对每个子块进行最大池化即将不同大小的子块都转化为一个值将池化之后的结果进行拼接即可得到一个大小固定为21维的输出。如此一来无论输入特征图的尺寸发生如何变化Spatial Pyramid Pooling均可将其转化为固定大小的尺寸进行输出。 特点 空间金字塔池化的池化核的步长和大小是动态变化的过程上边提到的1 * 12 * 24 * 4都是输出的大小例如对于44的输出输入1313的图像 s i z e 13 / 4 向上取整 4 s t r i d e 13 / 4 向下取整 3 size 13/4 向上取整4stride 13/4 向下取整3 size13/4向上取整4stride13/4向下取整3。 总结
空间金字塔池化(spatial pyramid pooling layer),解决了R-CNN输入图片大小固定的问题只提取一次特征直接在特征图上找到候选区域避免了裁剪变形提高了检测精度。使用共享卷积运算所有候选框共享这一次卷积的feature map大大提高了计算效率。
缺点
无法通过反向传播来进行微调离端到端的的检测还差很多分类和回归是分开进行的需要分别训练
提出问题
能否把SVM和边界框去掉由CNN直接得到类别和边框可不可以
Fast R-CNN
论文地址Fast R-CNN
在介绍Fast R-CNN之前我们先介绍以下RCNN和SPPNet的缺点如下图所示 R-CNN缺点
训练是一个多阶段的(training is a multi-stage pipeline) R-CNN首先需要通过CNN网络提取特征再通过SVM网络对提取到的特征进行分类最后需要通过bounding-box回归修正预选框。 训练消耗大量的空间和时间(training is expensive in space and time) SVM需要每一张图片上的每一个候选框区域的特征所以CNN提取到的特征需要存储到磁盘中所以将耗费大量的空间去存储大量的时间去提取特征。 目标检测速度非常慢(object detection is slow) 因为R-CNN每一张照片都要生成2000个候选框这就导致在测试阶段使用VGG16处理一张图片将消耗47秒。 所以SPPNet使用共享计算来解决R-CNN对一张图片生成2000候选框再喂入网络造成计算效率低下的问题。 SPPNet缺点
同R-CNN一样同R-CNN一样是多阶段的训练无法更新金字塔池化之前的卷积层这就限制了非常深网络的准确性。 是由于 SPP做fine-tuning时输入是多个不同的图片这样对于每一个图片都要重新产出新的feature map效率很低而Fast-RCNN对其进行了改进。 从上图我们可以知道Fast R-CNN相较于R-CNN和SPPNet的优点
有更高的检测精度训练是单阶段使用多任务损失函数 把不同模型整合为一个网络:损失函数使用多任务损失函数 multi-task loss将边框回归bounding box regression 直接加入CNN网络中训练。 训练可以更新所有层的网络参数 用反向传播训练所有网络权重是Fast R-CNN的重要能力。首先让我们阐明为什么SPPnet无法更新低于空间金字塔池化层的权重。 根本原因是当每个训练样本即RoI来自不同的图像时通过SPP层的反向传播是非常低效的这正是训练R-CNN和SPPnet网络的方法。低效的部分是因为每个RoI可能具有非常大的感受野通常跨越整个输入图像。由于正向传播必须处理整个感受野训练输入很大通常是整个图像。 我们提出了一种更有效的训练方法利用训练期间的特征共享。在Fast RCNN网络训练中随机梯度下降SGD的小批量是被分层采样的首先采样N个图像然后从每个图像采样R/N个 RoI。关键的是来自同一图像的RoI在向前和向后传播中共享计算和内存。减小N就减少了小批量的计算。例如当N2和R128时得到的训练方案比从128幅不同的图采样一个RoI即R-CNN和SPPnet的策略快64倍。 这个策略的一个令人担心的问题是它可能导致训练收敛变慢因为来自相同图像的RoI是相关的。这个问题似乎在实际情况下并不存在当N2和R128时我们使用比R-CNN更少的SGD迭代就获得了良好的结果。 上面是论文中的翻译个人理解采用类似于批标准化不再是1张1张的喂入图片而是将N张图片喂入网络中然后从每个图像采样R/N个利用权重共享来加快训练。个人感觉这个微调思路很费看看Faster R-CNN论文。 特征缓存不需要磁盘存储使用简化的空间金字塔池化ROI池化 什么是ROI池化就是简化的空间金字塔池化空间金字塔池化是固定池化输出为1 * 12 * 24 * 4(在CNN中说到过不同大小的子块感受野不同)的聚合而ROI就是固定池化输出为一个大小例如7 * 7. 这种固定大小的映射可能导致信息的损失或扭曲特别是对于较小或较大的目标区域。 Fast R-CNN的架构 Fast R-CNN流程是 输入一张图片– 通过CNN提取特征图 -- 通过ROI projection(依旧采用SS提取2000个候选框)得到候选区域 -- 通过ROI Pooling将候选区域映射到固定大小的特征图 -- 通过全连接层 -- 在最后并行两个全连接层用于进行softmax分类和bounding-box回归。
端到端 (END TO END)
在介绍FASTER R-CNN之前我们首先介绍一个概念端到端(end to end).
什么是端到端呢 在目标检测领域端到端指的是 能否直接从输入的图像数据获得最终的检测结果而 不需要人为的特征选择或其他手动设计的功能。这类模型的训练和推理过程更加直接和高效。 例如 相对于深度学习传统机器学习的流程往往由多个独立的模块组成比如在一个典型的自然语言处理Natural Language Processing问题中包括分词、词性标注、句法分析、语义分析等多个独立步骤每个步骤是一个独立的任务其结果的好坏会影响到下一步骤从而影响整个训练的结果这是非端到端的。
首先我们关注的是在目标检测领域满足那点的为端到端
能否 直接(不需要人为的特征选择或其他手动设计的功能)从输入的图像数据获得最终的检测结果。
接下来我们就分析R-CNNSPPENTFAST R-CNN
R-CNN它通过选择性搜索算法生成区域建议然后对每个区域建议独立提取CNN特征最后利用SVM分类器进行分类和回归器精修边界框。显然R-CNN是一个 多阶段的处理流程需要人为的特征选择和多个分离的步骤才能得到结果因此它不是端到端的。SPPNET针对R-CNN重复计算卷积图的问题进行了改进引入了空间金字塔池化层允许不同大小的区域建议在特征图上直接映射并池化为固定尺寸的输出从而一次性完成特征提取。尽管SPPNet减少了重复计算但依然保留了R-CNN的 多阶段特点即先提取特征后进行 分类和回归所以也不是端到端系统。FAST R-CNN在R-CNN和SPPNet的基础上进行了进一步优化提出了RoI池化层并将分类和回归合并为一个多任务目标使得整个网络可以联合训练。虽然Fast R-CNN实现了多任务学习但它仍然 依赖于外部的区域建议生成方法如选择性搜索算法因此整体流程并非完全端到端。FASTER R-CNN引入了区域建议网络RPN使得区域建议的生成可以直接在网络内部完成从而实现了端到端的检测流程。
Faster R-CNN
论文地址Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
在前面我们已经讲过了Fast R-CNN在最后并行两个全连接层用于进行softmax分类和bounding-box回归较大的提升了计算效率但是FAST R-CNN依旧依赖于SS提取候选框依赖于CPU并不能像CNN一样使用GPU这种高效的计算这就导致处理一张图片需要2秒钟。于是FASTER R-CNN提出RPN网络用于提取候选框将一部分也用GPU运行。这就可以实时检测图片增加实用性。 从上图我们可以看到FASTER R-CNN的流程图
输入一张图片– 通过CNN提取特征图 -- 通过RPN网络对特征图提取候选框 -- 通过ROI Pooling将候选区域映射到固定大小的特征图 -- 通过全连接层 -- 在最后并行两个全连接层用于进行softmax分类和bounding-box回归。 我们可以看到FASTER R-CNN跟FAST R-CNN的区别就是用RPN网络替换掉了SS直接在特征图上提取候选框。 接下来我们详细介绍一下RPN网络 RPN网络 RPN网络的工作流程就是
通过(3 * 3)小网络扫描特征图产生256维的一个低维特征然后分别喂入分类层(cls layer)和回归层(reg layer)这里解释以下图中为什么是4kcoordinate2kscores这里4中心点加上宽和奥就能确定一个矩形框的位置但是预测出的候选框跟实际框会有差距这时候就需要判断框中是否含有目标值所以为2kscores。kanchor。
anchor 当你利用特征图并不是凭空产生候选框的并且凭空产生的候选框也不准确所以会事先定义参考框最后输出的是每个参考框的偏移量。 我们在特征图中找一个点就可以在原图中找到对应的一个像素点以该像素点为中心画出9个不同大小和长宽比的框称为anchor 。如下图所示这些anchor里面可能包含目标也可能没有目标。因为我们在一张图中想找的的目标的大小和长宽比并不是固定的所以这里用9个不同大小和长宽比的anchor来进行预测。 本文使用的Anchor的大小和比例是事先预定好的。大小为 ( 12 8 2 , 25 6 2 , 51 2 2 ) (128^2,256^2,512^2) (1282,2562,5122),比例是 ( 1 2 1 1 2 1 ) ( 这里的指定策略矮胖的用于检测车马之类的瘦高的可以表示人之类的等等 ) (121121) (这里的指定策略矮胖的用于检测车马之类的瘦高的可以表示人之类的等等) (121121)(这里的指定策略矮胖的用于检测车马之类的瘦高的可以表示人之类的等等)。 在之后的YOLO和SSD中是自适应的候选框提升了检测精度和泛化能力。
Loss Funtion 预测值和实际值的偏差对于每一个anchorRPN网络输出的2 4就是预测值那么作者是如何定义anchor的真实值的呢 将正标签分配给两种anchor
具有最大IOU重叠的anchor具有大于0.7的IOU重叠的anchor
这样就可以保证至少有一个anchor被分配为正标签 而负标签分配给具有IOU重叠小于0.3的anchor。
总结 参考同济子豪兄 Faster R-CNN最全讲解 CV之DL之FastR-CNNFast R-CNN算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略