网站建设 海口设备网站开发

当前位置: 首页 > news >正文

网站建设 海口,设备网站开发,信用体系建设网站维运工作制度,顺企网是什么网站在深度学习领域中#xff0c;图像分类#xff0c;目标检测和目标分割是三个相对来说较为基础的任务了。再加上图像生成#xff08;GAN#xff0c;VAE#xff0c;扩散模型#xff09;#xff0c;keypoints关键点检测等等#xff0c;基本上涵盖了图像领域大部分场景了。 …在深度学习领域中图像分类目标检测和目标分割是三个相对来说较为基础的任务了。再加上图像生成GANVAE扩散模型keypoints关键点检测等等基本上涵盖了图像领域大部分场景了。 尤其是在目标检测一直是各大比赛Pascal VOC, COCO, ImageNet的主要任务。与此同时检测任务中的两大流派one-stage、two-stage一直是热议的话题。同时也是面试官最喜欢问的话题。 针对本文的这个问题我也帮你们提前问了chatGPT也给出了一个较为总结性的回答如下所示。你们觉得它回答的如何呢 chatGPT已经对本节的内容给出了一个大体的概括总结下包括 算法模型呢 one stage的算法包括SSD、yolo、Retina Net等等two stage的算法包括fast RCNN系列和用于分割的Mask RCNN系列 优点呢 one stage的算法速度非常快适合做实时检测的任务比如视频two stage的算法速度慢 缺点呢 one stage的算法通常相比于two stage的算法效果不太好two stage的算法经过了一步初筛通常效果会更好更准确 目标检测算法综述截图展示了随时间发展one- stage和two- stage的发展分枝。从2014年RCNN开始再到后来SSD和YOLO的横空出世基本上奠定了两条路的主基调。 一、two stage two stage的代表faster RCNN的模型结构图。稍微简述下 特征提取模块backbone主要用于对输入图像进行特征抽取输出特征图Feature Map一般会采用resnet、VGGGoogLeNet的主干部分去掉全连接层作为backbone.第一阶段的RPNregion proposal network区域推荐网络主要就是基于backbone输出的Feature Map筛选目标候选框给出进一步判断的Proposal在RPN完成后得到的候选框还只是区分出它是前景positive和背景negative还不能区分是猫还是狗于是就有了第二阶段对第一阶段提议的阳性positive候选框Proposal与backbone输出的Feature Map裁剪出区域经过ROI Pooling统一到一致的尺寸进入到ROI Head阶段。经过卷积和全连接层区分出具体的类别cls和bbox coor(cx, cy, pw, ph)的偏移量tx, ty, tw, th进一步修正目标框得到最终的位置bxσ(tx)cx, byσ(ty)cy, bwpw*tw, bhph*th。 如下图所示这样看是不是真的把预测目标检测的任务给拆分成两个阶段分段的来进行预测的呢更多内容推荐阅读这里一文读懂Faster RCNN
1.1、训练和验证阶段 其实要理解faster RCNN的整理工作方式需要区分成训练阶段train 和推理阶段inference区别对待。 先说简单的推理阶段inference。 推理阶段与训练阶段最大的不同就是推理阶段没有金标准target 也就没有计算损失更没有办法更新网络模型 backbone的特征提取阶段接触不到target所以这个阶段没有损失值两个阶段都是一样的就是负责把输入图像转成特征图RPN阶段就不同了因为这个阶段是要为最后的分类提供proposal的。这个proposal需要引入anchor box所有的proposal都会被传入ROI Pooling层进行分类和回归在ROI Head阶段RPN推荐的proposal会经过ROI Pooling层调整到统一大小例如7x7。经过两个fc层输出具体的类别背景和坐标框。RPN阶段返回的proposal相互之间是高度重叠的采用了NMS降低数量。 然后是训练阶段train。 训练阶段就要计算损失了就要更新模型了这块都是与推理阶段不一样的 backbone的特征提取阶段一样RPN阶段就不同了因为这个阶段需要区分positive还是negative。咋知道这个anchor是阳性还是阴性呢那就需要使用标记target进行区分。在这个阶段有了IOU就是PD与GT计算IOU。如何区分阳性还是阴性呢 IOU值大于0.7的是阳性IOU值小于0.3的是阴性其他丢弃掉 we randomly sample 256 anchors in an image to compute the loss function of a mini-batch, where the sampled positive and negative anchors have a ratio of up to 1:1. If there are fewer than 128 positive samples in an image, we pad the mini-batch with negative ones. 上段部分来自于论文Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks 的Training RPNs部分。 翻译过来的意思就是在RPN阶段计算一个mini batch的loss function时候我们随机的在一张图片中选择256个anchor阳性和阴性的样本比例1:1。如果一种图片中的阳性anchor少于128个就用negative补上。 此时RPN阶段的损失也是由2分之一(0.5)的positive和2分之1的negative组成的参与损失计算包括阳性or阴性类别损失和位置偏移损失最后在ROI Head阶段输出具体的类别和坐标框这两块都要参与到损失的计算比较的好理解。NMS在训练阶段不参与。我理解是因为在训练阶段NMS会去除掉很多的正样本使得正负样本就更加的不均衡了 在训练阶段会有哪些损失值? RPN 损失函数在 RPN 阶段会使用 RPN 模型生成一系列 anchor并根据这些 anchor 来进行目标检测。RPN 损失函数一般包括两个部分分类损失交叉熵损失和回归损失Smooth L1 。分类损失用于判断 anchor 是否为前景即是否包含目标回归损失用于精确预测目标的位置。 Fast R-CNN ROI Head损失函数在 Fast R-CNN 阶段会使用 RoI Pooling 对 RPN 生成的 proposal 进行特征提取并对提取的特征进行分类和回归。Fast R-CNN 损失函数同样包括分类损失和回归损失。 总损失函数在训练过程中RPN 和 Fast R-CNN 的损失函数需要同时进行优化。因此一般会将 RPN 和 Fast R-CNN 的损失函数合并为一个总损失函数当然也可以分别进行回归调整并使用反向传播算法来进行优化。
两个阶段的位置损失都是 Smooth L1同样一个位置为啥需要计算两次损失呢然后回归两次位置呢 RPN 阶段和 Fast R-CNN 阶段中的位置都是反映在原图上的同一块像素区域都是表示物体的位置偏移量。 对于RPN阶段先对anchor进行一次位置回归得到一组粗略的预测框再利用这些预测框去RoI pooling得到RoI最后对RoI进行第二次位置回归得到最终的目标框位置。 在 RPN 阶段中每个 anchor 与其对应的 ground-truth bbox 之间的位置偏移量会被计算并通过 Smooth L1 损失函数来度量它们之间的差异。这个损失函数的计算仅涉及到对 anchor 的位置回归。 在 Fast R-CNN 阶段中由于每个 RoI 的形状都是不同的所以每个 RoI 与其对应的 ground-truth bbox 之间的位置偏移量也需要被计算并通过 Smooth L1 损失函数来度量它们之间的差异。这个损失函数的计算涉及到对 RoI 的位置回归。 因此Faster R-CNN 中需要计算两次位置损失是因为两个阶段都需要对物体的位置进行回归。需要注意的是这两个阶段的位置回归所针对的对象是不同的 RPN 阶段中的位置回归是针对 anchor 的而 Fast R-CNN 阶段中的位置回归是针对 RoI 的。 两次位置回归的目的都是为了使目标框的位置预测更加准确。
1.2、RCNN、fast RCNN、faster RCNN横评 1.2.1、RCNN(Region-based Convolutional Neutal Network) 目标框的获取方式select search选择性搜索算法来生成候选区域从原图裁剪出ROIs分类方式SVM目标位置bounding-box regressor 缺点 训练是多阶段的先fine tunes目标proposal再训练SVM分类器再训练bounding box回归器训练再内存空间和时间上开销大分阶段训练不同阶段的输出需要写入内存目标检测很慢 1.2.2、 fast RCNN 目标框的获取方式input image和region of interestROIs在特征层阶段相遇、裁剪经过RoI max pooling调整成一致尺寸学习了SPP Net例如7x7大小送入fully convolutional network.分类方式分类分支经过softmax输出类别目标位置Bbox regressor输出位置偏移 缺点候选区域的生成仍然采用选择性搜索算法速度仍有提升空间 1.2.3、faster RCNN 目标框的获取方式基于anchor base的RPN阶段用于输出候选的proposal和特征层相遇、经过RoI max pooling调整成一致尺寸送入fully convolutional network.分类方式分类分支经过softmax输出类别目标位置Bbox regressor输出位置偏移 1.3、mask RCNN mask RCNN是在faster RCNN的基础上增加了一个mask预测分值。其中为了得到更好的mask精细分割结果在fast rcnn head阶段将之前目标检测的roi pooling替换成roi align。 在分类和Bbox预测均和faster RCNN是一样的在mask预测有差别其中 在分类部分输出的shape为(N, num_classes)其中N为RoI的数量num_classes为类别数量包括背景类。每个RoI对应着num_classes个概率值分别表示该RoI属于不同类别的概率。在Bbox回归部分输出的shape也为(N, 4 x num_classes)其中每个RoI对应着4 x num_classes个偏移量分别表示该RoI相对于目标框的水平偏移量、垂直偏移量、宽度缩放比例和高度缩放比例。binary mask预测部分每个RoI对应的特征图块上应用一个全卷积网络Fully Conv Network, FCN输出的shape为(N, mask_height, mask_width, num_classes)其中 N为RoI的数量mask_height和mask_width为输出mask的高度和宽度num_classes为类别数量输出的每个元素表示该RoI属于对应类别时每个像素点经过per-pixel sigmoid操作输出为前景即目标物体的概率mask 采用binary cross-entropy loss(only defined on the k-th mask ,other mask outputs do not contribute to the loss.)
为什么在分类阶段已经对roi的类别进行了预测在mask预测阶段还要对每一个classes进行mask预测呢 答在传统的目标检测中通常是先使用分类器对目标进行分类然后使用回归器对目标的位置进行精确定位最后再使用分割模型对目标进行像素级别的分割。这种做法将分类、定位和分割三个任务放在了不同的阶段进行每个任务都需要单独地训练模型而且彼此之间存在一定的耦合关系。 相比之下Mask R-CNN 将分类、定位和分割三个任务整合到了同一个网络中进行联合训练通过共享网络层来解耦三个任务之间的关系。具体来说Mask R-CNN 在 RoI pooling 的基础上增加了一个分割分支该分支由一个全卷积网络组成负责对每个 RoI 中的像素进行分类并生成相应的掩码。因此分类、定位和分割三个任务可以在同一个网络中共享特征同时也能够互相影响和优化。 Mask R-CNN 的这种设计方式可以使不同任务之间的关系更加松散同时也能够提高网络的训练效率和泛化能力使得网络更加容易学习到目标的语义信息从而提高目标检测和分割的准确率。 二、one stage one stage的开山之作yolo v1论文地址you only look once。其中下面是一张网络模型的简图可以看到 输入图像经过一连串的卷积层操作24 convolutional layers得到了一个channel1024维的向量得到下采样特征图后连接2个 fully connected layers。直接得到预测输出的output大小是7x7x30S ×S×(B∗5C) tensor。For evaluating YOLO on PASCAL VOC, we use S 7, B 2. PASCAL VOC has 20 labelled classes so C 20. Our final prediction is a 7 × 7 × 30 tensor. 可以看出来yolo v1将目标检测问题转化为了回归问题。把中间网络模型学习做的事情都当做了一个黑箱就是输入图像输出目标。具体中间网络是如何办到的这个不管全部交由网络模型的监督信号自己拟合。 2.1、训练和验证阶段 要理解单阶段YOLO V1的整体工作方式需要区分成训练阶段train 和推理阶段inference区别对待。 训练阶段train 损失函数定义如下 要想要看到上面的损失函数公式首先要了解这些字母都表示是什么其中 S grid cell size论文里面是7B bounding box个数论文里面是2x, y, w, h, 分别表示bounding box的中心点坐标和宽、高C, Confidence是否有目标的概率p, Pr(Classi|Object)有目标下类别的条件概率objnoobj表示有物体的权重和没有物体λcoord 5 λnoobj .5有物体的权重和没有物体的权重 每两项之间都是算距离的都是按照回归的方式进行求损失的。其他的建议参考这里YOLOYou Only Look Once算法详解 在inference阶段步骤如下 对于输入图像resize为一个正方形416x416split the image into grid大小为7x7每一个grid cell 都预测B各bounding box框论文里面B2每一个grid cell 只预测一个类。B2两个网格那一个grid cell就是2个网格两个类每一个bounding box框有4个位置参数x_c,y_c,w,h和1个置信度P(Object)表示有物体的概率用于区分存在目标物体还是背景到这里就有了7x7x298个bounding box框每一个框都包含5个参数x_c,y_c,w,hconfidence每个bounding box框的中心点都在对应的grid cell像素内。一个grid cell预测2个bounding box就是10个参数再加上目标条件概率20个类每一个类都有一个条件概率P(Car|Object)。在该阶段最后对应类的概率P(Car|Object) x P(Object)。这样一个grid cell对应的输出向量就是2x52030个。再加上一张输入图像被划分为7x7个grid cell最后的输出就是7x7x30个张量大小。至此我们就预测得到了一堆框框个数是7x7x298。最后经过NMS去掉用于的框得到最终的预测结果。 在没有理解清楚这段之前我一直在疑惑 为什么2个bounding box已经有了一个概率这个概率是什么后面20个类是可以区分具体这个bounding box属于哪个类的他们之间又是什么关系。不知道你到这里是否理解清楚了 这块视频详解参考这里【精读AI论文】YOLO V1目标检测看我就够了-同济子豪兄 一步到位没有two stage的先预测出前景还是背景然后在预测具体类别的过程简化了很多端到端的过程。 YOLO v1算法的缺点 1、位置精确性差对于小目标物体以及物体比较密集的也检测不好(grid cell的原因因为只能预测98个框)比如一群小鸟。 2、YOLO虽然可以降低将背景检测为物体的概率但同时导致召回率较低。 2.2、YOLOv1、 YOLOv2、 YOLOv3、横评 YOLOv2 进行了许多改进包括以下几个方面 使用 batch normalizationYOLOv2 在卷积层后加入 Batch Normalization可以加速训练提高模型的精度和鲁棒性。改进网络结构YOLOv2 采用了更深的网络结构引入了残差网络ResNet的结构和NIN结构增加了网络层数anchor boxes 替代了之前的固定网格grid cell来提高物体检测的精度kmean聚类确定anchor尺寸。passthrough layer 细粒度特征采用了多尺度训练和预测 引入了多尺度训练方法可以提高模型对不同尺度物体的检测能力。不同于FPN他是在训练阶段每10个batch会重新选择一个新的图像尺寸包括{320,352…608}等等32倍数的尺寸 YOLOv3 的改进主要集中在以下几个方面 使用了更深的 Darknet-53 网络YOLOv3 使用了一个名为 Darknet-53 的更深的卷积神经网络相较于之前的 Darknet-19 网络它具有更强的特征提取能力可以提高目标检测的准确性。引入了 FPN 特征金字塔YOLOv3 引入了 FPNFeature Pyramid Network特征金字塔可以利用不同层级的特征信息进行目标检测predicts boxes at 3 different scales. predict 3 boxes at each scale从而提高检测的准确性。使用更多的 Anchor BoxesYOLOv3 使用了更多的 Anchor Boxes可以更好地适应不同大小和形状的目标物体依旧使用 k-means clustering。首次binary cross-entropy loss 用于分类 yolo v3之后作者就不在更新YOLO系列了再之后的改版都是其他人或者团队继续更新的。YOLOv5再YOLOv4更新的没多久就出来了且是pytorch的开源代码所以相比于YOLOv4的C版本受众更多。 YOLOv5 没有论文的改进主要集中在以下几个方面 自适应anchor在训练模型时YOLOv5 会自己学习数据集中的最佳 anchor boxes而不再需要先离线运行 K-means 算法聚类得到 k 个 anchor box 并修改 head 网络参数。总的来说YOLOv5 流程简单且自动化了。自适应图片缩放letterBoxFocus结构 结构图 Focus结构中 原始的640 × 640 × 3的图像输入Focus结构采用切片操作。具体操作是在一张图片中每隔一个像素拿到一个值类似于邻近下采样。将一个channel上W、H信息就集中到了通道空间输入通道扩充了4倍RGB 3个通道就变成了12个channel。先变成320 × 320 × 12的特征图再经过一次卷积操作最终变成320 × 320 × 32的特征图。最终得到了没有信息丢失情况下的二倍下采样特征图。目的是减少传统下采样带来的信息损失。切片操作如下
详尽内容建议参考这里yolov5中的Focus模块的理解 YOLOv5 4个大结构分别是 8. 输入端Mosaic数据增强对于小目标的检测效果好、cutMix、MixUP。自适应锚框计算、自适应图片缩放 9. BackboneFocus结构slice切片操作把高分辨率的图片特征图拆分成多个低分辨率的图片/特征图即隔列采样拼接可以减少下采样带来的信息损失CSP结构 10. NeckFPNPAN结构 11. PredictionGIOU_Loss 三、性能对比 下面是在论文centerNet中作者对普遍常用的目标检测、分割模型做了次系统的测试。其中上部分是two stage的主要算法下部分是one stage的主要算法。可以发现 FPS帧率这块one stage都是相对比较快的尤其是yolo系列。two stage就慢了很多。two stage的AP就比较的高最高能到48.4低的也有46而one stage的就比较低最高才45。尤其是TridentNet几乎是这些里面各个领域都是最佳的。
四、总结 到这里目标检测中one-stage、two-stage算法的内容基本上就结束了。但是面试官是不会罢休的他会沿着目标检测算法继续深入展开比如 anchor base(anchor boxes)和anchor free分别是什么有什么区别和优缺点faster RCNN的ROI Pooling和mask RCNN 的ROI Align分别是什么有什么有缺点yolo的损失函数式什么faster RCNN的损失函数又是什么等等 所以说目标检测是深度学习领域的一个重点能够考察的内容很多主要还是因为在各个企业里面这块的内容是真实可以落地的。所以这块内容是真要吃透。 (上文内容比较的丰富和比较的杂。是根据论文和一些网络资料综合记录的。如果你对其中的内容存在异议或需要纠正的地方欢迎评论区留言一起进步谢谢)