日萌社

人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)


  • CNN:

    • 目标检测:

      • RCNN
      • SPPNet
      • Fast RCNN
      • Faster RCNN
      • YOLO V1
      • YOLO V2
      • YOLO V3
      • SSD
    • 目标分割:
      • FCN
      • SegNet
      • U-Net
      • DeepLab V1
      • DeepLab V2
      • DeepLab V3
      • DeepLab V3+
      • Mask RCNN
    • 单目标跟踪:
      • FCNT
      • GOTURN
      • Siamese系列网络:
        • SiamFC
        • SiamRPN
        • DaSiamRPN
        • SiamRPN++
        • SiamMask

目标检测

目标检测:R-CNN

目标检测:SPPNet

目标检测:Fast R-CNN

目标检测:Faster R-CNN、Faster RCNN接口

目标检测:YOLO V1、YOLO V2、YOLO V3 算法

目标检测:SSD 算法

目标分割

目标分割:FCN全卷积网络、上采样upsample、反卷积/转置卷积Conv2DTranspose、跳跃连接skip layers实现融合预测fusion prediction

目标分割:SegNet、U-Net

目标分割:DeepLab V1、DeepLab V2、DeepLab V3、DeepLab V3+、ASPP/ASPP+、Encoder-Decoder、CRF

计算IoU:计算交并比

目标分割:Mask RCNN

目标分割:Mask RCNN 气球分割案例 part1

目标分割:Mask RCNN 气球分割案例 part2

目标追踪:FCNT、GOTURN、SiamFC

单目标跟踪 Siamese系列网络:SiamFC、SiamRPN、one-shot跟踪、one-shotting单样本学习、DaSiamRPN、SiamRPN++、SiamMask

单目标跟踪SiamMask:特定目标车辆追踪 part1

单目标跟踪SiamMask:特定目标车辆追踪 part2

单目标跟踪:跟踪效果

单目标跟踪:数据集处理

单目标跟踪:模型搭建

单目标跟踪:模型训练

单目标跟踪:模型测试



yolo、FPN特征金字塔

1.yolo网络结构:yolo网络结构分为两部分,分类模型和检测模型。1.yolo v1:检测模型部分为448*448的输入,前面有24个卷积层,最后面是2个全连接层。只使用1×1降维层,后面是3×3卷积层,全连接层输出7×7×30的特征图。2.快速版的YOLO:较少卷积层(9层而不是24层)的神经网络,在这些层中使用较少的滤波器。yolo v1和快速版YOLO网络的最终输出都是7×7×30的预测张量。3.yolo v2:1.缩减了网络,所有卷积层上添加批量标准化,检测模型部分为416x416的输入,移除了全连接层,最终输出13x13的特征图。由于仅使用卷积层和池化层,移除了全连接层,因此能够在不同尺寸的图像上运行,可以实时调整大小将多尺度训练应到模型中。2.引入Anchor机制使用锚框来预测边界框:检测模型输出13x13的特征图,映射到原图则为被切分成13x13的网络单元。13x13特征图中每个像素对应的每个单元格预测5个锚框anchor box,每个锚框都预测一个bbox边界框的位置信息、置信度和分类概率值。也即每个单元格上通过5个anchor锚框预测5个边界框bbox,YOLOv2可以预测13x13x5=845个边界框。以anchor锚框为基准,计算Ground Truth(GT)真实框对其anchor锚框的平移缩放变化参数,然后通过anchor锚框预测边界框(bounding boxes)bbox通过回归调整接近Ground Truth(GT)真实框以此构建回归的目标函数求最小值。在计算回归损失的时候,因为是以anchor窗口为基准来预测边界框bbox,所以要使预测边界框bbox和GT真实框足够接近,以此来构建目标函数求最小值,达到回归的目的。3.高分辨率分类器:1.分类模型:先用224x224的输入在ImageNet数据集训练分类网络,然后将输入调整到448x448继续在ImageNet数据集训练分类网络。2.检测模型:利用预训练得到的模型在检测数据集上fine-tuning微调。4.采用标准的k-means聚类实现边界框boxes尺寸维度聚类Faster-RCNN中的锚框anchor boxes的个数和宽高维度往往是手动精选的先验框,YOLOv2使用k-means聚类算法对训练集中的边界框做了聚类分析,尝试找到合适尺寸的Anchor,一开始就选择了更好的、更有代表性的先验boxes维度,那么网络就应该更容易学到准确的预测位置。由于我们限制bbox边界框的位置信息为单元格内的偏移量预测,因此参数化更容易学习,从而使网络更加稳定,使用维度聚类并直接预测边界框中心位置。希望的是误差和边界框boxes尺寸大小没有太大关系,所以通过IOU定义了如下的距离函数,使得误差和边界框boxes尺寸大小无关:

     5.细粒度功能不单只在13×13特征图上预测检测结果,这对于大型物体的检测是足够的,还增加从较早的层中提取26×26的分辨率特征,这可以增加更细粒度特征对定位较小物体有好处。实现:添加一个直通层将高分辨率特征与低分辨率特征连接起来,将相邻特征叠加到不同的通道中,而不是空间位置上,类似于ResNet中的恒等映射,即把在较早的层中所提取出来的26×26分辨率特征从26×26×512=346112的特征图变为13×13×2048=346112的特征图。6.多尺度训练          由于仅使用卷积层和池化层,移除了全连接层,因此yolo v2能够在不同尺寸的图像上进行读取训练,可以实时调整大小将多尺度图像训练应用到模型中。每隔几个批次迭代就改变一次网络,比如每10个批次网络会随机选择一个新的图像尺寸大小。由于模型缩减了32倍,所以从32的倍数中抽取:{320,352,…,608},因此,最小的选项是320×320,最大的是608×608。4.yolo v3:1.特征金字塔(FPN网络)1.yolo V3使用了特征金字塔(FPN网络),在13x13、26x26、52x52 一共3个不同大小的特征图上做bbox预测。2.3个不同大小的特征图上的每个像素点映射到原图中的每个单元格cell 均使用3种(默认)不同尺寸的锚框来预测bbox(边界框bounding boxes)。每种不同尺寸的锚框Anchor boxes所预测的bbox(边界框bounding boxes)包含:4个预测位置(x、y、w、h)、1个bbox置信度分数confidence scores、M个分类类别的概率值。3.那么一个NxN的特征图映射原图就有NxN个网格单元cell,那么这个NxN的特征图(NxN个网格单元)预测的数据量为NxNx(3x(4+1+M个分类类别的概率值))。yolo V3分别在13x13、26x26、52x52 一共3个特征图做bbox预测,设置13x13为NxN的话,那么26x26为2x(NxN),52x52为4x(NxN),那么3个不同尺度特征图一共预测的数据量为(NxN + 2x(NxN) + 4x(NxN)) x (3x(4+1+N个分类类别的概率值))2.使用二分类的逻辑回归代替了softmax来作为分类器,并使用二分类交叉熵作为损失。3.引入了残差模块,并进一步加深了网络,改进后的网络有53个卷积层,命名为Darknet-53。5.YOLO V3 Tensorflow2.0源码分析YOLOv3 的网络结构由基础特征提取网络、多尺度特征融合层和输出层组成。1.YOLOv3引入了残差模块,并进一步加深了网络,改进后的网络有53个卷积层,命名为Darknet-53。特征提取网络:YOLOv3使用DarkNet-53作为特征提取网络:DarkNet-53 基本采用了全卷积网络,用步长为2的卷积操作替代了池化层,同时添加了 Residual残差单元,避免在网络层数过深时发生梯度弥散。2.YOLOv3借鉴了FPN的思想,从不同尺度提取特征。特征融合层:为了解决之前YOLO版本对小目标不敏感的问题,YOLOv3采用了3个不同尺度的特征图来进行目标检测,分别为13x13,26x26,52x52,用来检测大、中、小三种目标。特征融合层选取Darknet-53产出的三种尺度特征图作为输入,借鉴了FPN(feature pyramid networks)的思想,通过一系列的卷积层和上采样对各尺度的特征图进行融合。3.输出层:同样使用了全卷积结构。3x(20+4+1)=75表示一个grid cell单元格预测的3个bounding box,4表示框的4个坐标信息,1表示Confidence Score,20表示VOC数据集中20个类别的概率。如果换用别的数据集,20可以更改为实际类别数量。2.yolo v1输出7x7的特征图映射到原图中的7x7=49个网格单元cell中,yolo v2输出13x13的特征图映射到原图中的13x13=169个网格单元cell中那么这些yolo网络中的每个网格单元预测目标的流程:1.原始图片resize到448x448,经过yolo v1的24个卷积层/快速版的YOLO的9个卷积层之后,将图片输出成了一个7*7*30的特征图。yolo v1网络输出为7x7的特征图,那么即是把输入原图切分成7x7=49个网格单元cell。2.yolo v1的输入原图中的7x7=49个网格单元cell7x7=49个像素值,理解成49个单元格,每个单元格可以代表原图的一个方块。每个网格单元cell都会预测N个边界框bounding boxes、每个bbox框对应的1个置信度分数confidence scores、M个类别的概率值。3.每个bbox框对应的1个置信度分数confidence scores1.如果目标的中心点落到49个网格单元中的某个网格单元cell中,那么该网格就负责检测该目标。判断一个网格单元中是否包含目标,首先看一个图片中真实目标的ground truth(GT真实框)的中心点坐标是在哪一个grid cell中。如果某个真实目标的ground truth(GT真实框)的中心点坐标在这一个网格单元中的话,那么也就是说这个真实目标的预测就由这一个网格单元所预测bbox(边界框bounding boxes)来负责。注意:如果多个目标物体的ground truth(GT真实框)的中心点坐标都出现在同一个单元格cell中的话,那么并不建议使用yolo V1,因为yolo V1中每个网格所预测的2个bbox中最终只会有1个bbox用于预测目标物体,yolo V1的每个单元格都只能预测一个物体。2.一个网格单元会预测N个bbox(边界框bounding boxes),如果决定了由这一个单元格来负责预测真实目标的话,那么会通过N个bbox对应的各自的置信度分数confidence scores来进行比较由哪个bbox来负责预测。3.置信度分数confidence scores评估标准:这些置信度分数反映了该模型对那个框内是否包含目标的信心,以及它对自己的预测的准确度的估量。1.比如yolo V1中的每个单元格会预测2个bounding box,那么会由其中一个bbox来预测目标,前提是这个单元格包含物体。包含目标的某一个单元格所预测的2个bounding box分别与ground truth(GT真实框)的IOU哪个更大,那么IOU最大的这一个bbox更接近目标的GT真实框,那么就由这一个bounding box来负责预测该对象是否存在。2.计算confidence score公式:1.如果单元格中不包含目标,那么这一个单元格所预测的N个bbox对应的confidence scores均为0。2.如果单元格中包含目标,那么某个bbox的confidence score 等于 预测的bbox和ground truth(GT真实框)的IOU乘积。那么负责预测该目标的bbox与ground truth(GT真实框)的IOU的最大值为1。3.计算置信度分数confidence scores公式:

 4.M个类别的概率值1.所预测的类别概率值实际为类别的条件概率值。类别的条件概率值中的条件指的是这个单元格包含物体的前提下,那么预测这个物体分别是M个类别中每一个类别的概率。2.联合概率、条件概率与相互独立1.联合概率:包含多个条件,且所有条件同时成立的概率记作:P(A,B)2.条件概率:就是事件A在另外一个事件B已经发生条件下的发生概率记作:P(A|B)例子:P(程序员|喜欢):在女神喜欢的条件下,职业是程序员的概率?3.相互独立:如果P(A, B) = P(A)P(B),则称事件A与事件B相互独立。3.比如yolo v1中每个单元格所预测的20个类别概率值实际预测属于这个单元格的类别概率值,并不是预测属于这个bbox的类别概率值。4.并不会直接使用单元格所预测的类别的条件概率值,而是通过计算类别的条件概率值和每个bbox框预测的置信度分数相乘得到每个bbox框的特定类别的置信度分数。这些bbox框的特定类别的置信度分数体现了某类别出现在某bbox框中的概率以及预测框拟合目标的程度。计算每个bbox框的特定类别的置信度分数公式:

 5.非最大抑制(NMS)得到每个bbox框的特定类别的置信度分数之后,首先设置阈值过滤掉分数低的bbox预测框,然后对过滤后剩余的bbox预测框进行非最大抑制(NMS)处理。最终便得到预测为某类别的bbox预测框。3.yolo V1、yolo V2、yolo V3 的bbox(边界框bounding boxes)数目变化1.yolo V1:1.每个网格单元cell预测2个(默认)bbox(边界框bounding boxes):yolo网络输出的7x7的特征图把输入原图切分成7x7=49个网格单元,那么输入图像一共有 7x7x2=98个bbox(边界框bounding boxes)。2.每个网格单元就要预测2个(默认)bbox(边界框bounding boxes),那么一个网格单元要预测的数据量就是 2x(4+1)+20=30。7x7=49个网格单元一共预测的数据量:7x7x(2x(4+1)+20)=1470。2:每个网格单元预测的2个(默认)bbox(边界框bounding boxes)。4+1:每个bbox(边界框bounding boxes)包含 4个预测位置(x、y、w、h)和1个bbox置信度分数confidence scores。20:所预测的20个类别概率值实际预测属于这个单元格的类别概率值,并不是预测属于这个bbox的类别概率值。所预测的类别概率值实际为类别的条件概率值。类别的条件概率值中的条件指的是这个单元格包含物体的前提下,那么预测这个物体分别是M个类别中每一个类别的概率。并不会直接使用单元格所预测的类别的条件概率值,而是通过计算类别的条件概率值和每个bbox框预测的置信度分数相乘得到每个bbox框的特定类别的置信度分数。这些bbox框的特定类别的置信度分数体现了某类别出现在某bbox框中的概率以及预测框拟合目标的程度。3.yolo V1的缺点:正因为yolo V1中每个网格所预测的2个bbox中最终只会有1个bbox用于预测目标物体,即每个单元格cell只会预测1个目标物体,如果多个目标物体的ground truth(GT真实框)的中心点坐标都出现在同一个单元格cell中的话,那么并不建议使用yolo V1,因为yolo V1的每个单元格都只能预测一个物体。2.yolo V2:1.每个网格单元cell都使用5种(默认)不同尺寸的锚框Anchor boxes来预测bbox(边界框bounding boxes),一个网格单元cell中每种不同尺寸的锚框Anchor boxes各预测一个bbox(边界框bounding boxes),一共预测5个(默认)bbox(边界框bounding boxes)。输入图像一共预测有 13x13x5=845个bbox(边界框bounding boxes)。输入图像一共预测的数据量(假如预测20个类别和在13x13特征图上做预测):13x13x(5x(4+1+20))=169*125=21125注意:5个(默认)的锚框Anchor boxes的尺寸大小都是不一样的。2.每种不同尺寸的锚框Anchor boxes所预测的bbox(边界框bounding boxes)包含:4个预测位置(x、y、w、h),1个bbox置信度分数confidence scores,N个分类类别的预测概率值。3.一个网格单元cell中5种(默认)不同尺寸的锚框Anchor boxes所预测的5个(默认)bbox(边界框bounding boxes)一共预测的数据量(假如预测20个类别):5x(4+1+20)=1251.5代表5个(默认)bbox(边界框bounding boxes)。2.每个bbox(边界框bounding boxes)都分别有4个预测位置(x、y、w、h),1个bbox置信度分数confidence scores,20个类别的预测概率值。3.所预测的20个类别概率值实际预测属于这个单元格的类别概率值,并不是预测属于这个bbox的类别概率值。所预测的类别概率值实际为类别的条件概率值。类别的条件概率值中的条件指的是这个单元格包含物体的前提下,那么预测这个物体分别是M个类别中每一个类别的概率。并不会直接使用单元格所预测的类别的条件概率值,而是通过计算类别的条件概率值和每个bbox框预测的置信度分数相乘得到每个bbox框的特定类别的置信度分数。这些bbox框的特定类别的置信度分数体现了某类别出现在某bbox框中的概率以及预测框拟合目标的程度。4.YOLO V2基于卷积的Anchor机制(Convolutional With Anchor Boxes):移除了全连接层,并使用5个(默认)不同尺寸的锚框Anchor boxes来预测bbox(边界框bounding boxes)。YOLO V2通过缩减网络,使用416x416的输入,模型下采样的总步长为32,最后得到13x13的特征图,13x13的特征图对应在输入原图分割13x13个单元格cell。每个单元格cell预测5个不同尺寸锚框anchor boxes对应的bbox(边界框bounding boxes),每个锚框anchor box所预测的bbox(边界框bounding boxes) 包含4个位置信息、1个置信度、N个分类类别的概率值。YOLO V2采用的5种不同尺寸锚框Anchor boxes可以预测13x13x5=845个bbox(边界框bounding boxes)。YOLO V2引⼊faster rcnn中anchor机制,anchor尺度就是用来预测网络预测值和目标GT做尺度变换的。3.yolo V3:1.特征金字塔(FPN网络)1.yolo V3使用了特征金字塔(FPN网络),在13x13、26x26、52x52 一共3个不同大小的特征图上做bbox预测。2.3个不同大小的特征图上的每个像素点映射到原图中的每个单元格cell 均使用3种(默认)不同尺寸的锚框来预测bbox(边界框bounding boxes)。每种不同尺寸的锚框Anchor boxes所预测的bbox(边界框bounding boxes)包含:4个预测位置(x、y、w、h)、1个bbox置信度分数confidence scores、M个分类类别的概率值。3.那么一个NxN的特征图映射原图就有NxN个网格单元cell,那么这个NxN的特征图(NxN个网格单元)预测的数据量为NxNx(3x(4+1+M个分类类别的概率值))。yolo V3分别在13x13、26x26、52x52 一共3个特征图做bbox预测,设置13x13为NxN的话,那么26x26为2x(NxN),52x52为4x(NxN),那么3个不同尺度特征图一共预测的数据量为(NxN + 2x(NxN) + 4x(NxN)) x (3x(4+1+N个分类类别的概率值))2.每种不同尺度特征图上所设置的先验框(bbox边界框bounding boxes)大小,会从下面的array数组yolo_anchors中选出对应合适的组合作为先验框(bbox边界框bounding boxes)的大小。yolo_anchors = np.array([(10, 13), (16, 30), (33, 23), (30, 61), (62, 45), (59, 119), (116, 90), (156, 198), (373, 326)], np.float32) / 4164.预测bbox位置:通过回归offset 代替 直接回归坐标                         1.每个bbox(边界框bounding boxes)的预测数据量:4个预测位置(x、y、w、h)、1个bbox置信度分数confidence scores、N个类别的预测概率值。预测的bbox的4个预测位置(x、y、w、h)都是相对于正在处理的网格单元进行计算而言的。2.(x, y) 1.预测的bbox的(x, y) (x, y)表示bbox的中心点相对于单元格(grid cell)原点的偏移值,单元格(grid cell)的原点即为该单元格的左上角顶点坐标(top-left)。yolo将单元格的左上角的top-left顶点(原点)设置为(0, 0),右下角的bottom-right顶点设置为(1, 1),所以x和y的取值范围都分别在0到1之间。x和y将始终介于0到1之间,因为bbox的中心点始终位于该单元格(grid cell)之内。之所以把(x, y)预测为bbox中心点相对于单元格原点的位置坐标,是因为可以使得计算界限在0到1的值之间,也使得更加容易学习,从而使网络更加稳定。2.yolo输出层输出的(bx, by) 把预测的bbox的(tx, ty)转换为yolo输出层输出的(bx, by)。σ读作sigma。Cx和Cy分别为当前单元格(grid cell)距离输入原图的左上角原点的边距离。W和H为输入原图像的宽和高。分别除以W和H,目的是归一化。σ(tx) + Cx:边界框的中心点在输入原图像中的x坐标,也即边界框的中心点离输入原图像原点的x方向长度σ(ty) + Cy:边界框的中心点在输入原图像中的y坐标,也即边界框的中心点离输入原图像原点的y方向长度tx->bx:bx = (σ(tx) + Cx) / Wty->by:by = (σ(ty) + Cy) / H(bx, by) 相对于整张图片的宽和高, 通过图像宽度和高度来规范边界框的中心点坐标,即使用图片的宽和高标准化自己, 使之取值范围也在(0, 1)之间。3.(w, h) 1.预测的bbox的(w, h)(w, h)分别为bbox边界框的高度与相应单元网格的高度之比、bbox边界框的宽度与相应单元网格的宽度之比。根据所预测的bbox(边界框bounding boxes)是大于还是小于单元格(grid cell)的尺寸来决定(w, h)的取值范围是大于1还是在0到1之间。如果边界框bbox的尺寸小于单元格(grid cell)的尺寸的话,w和h的取值范围都分别是在0到1之间。如果边界框bbox的尺寸大于单元格(grid cell)的尺寸的话,w和h的取值范围都可以大于1。2.yolo输出层输出的(bw, bh)把预测的bbox的(tw, th)转换为yolo输出层输出的(bw, bh)。pw和ph分别为手动设定的锚框Anchor boxes宽和高。pw * e^tw:边界框在输入原图像中的宽度ph * e^th:边界框在输入原图像中的高度tw->bw:bw = (pw * e^tw) / Wth->bh:bh = (ph * e^th) / H(bw, bh) 相对于整张图片的宽和高, 通过图像宽度和高度来规范边界框的宽度和高度,即使用图片的宽和高标准化自己, 使之取值范围也在(0, 1)之间。4.yolo V2、yolo V3都基于卷积的Anchor机制(Convolutional With Anchor Boxes)yolo V2使用5种不同尺寸的锚框Anchor boxes预测一共5个边界框的4个位置信息、1个置信度、N个分类类别的概率值。yolo V3使用3种不同尺寸的锚框Anchor boxes预测一共3个边界框的4个位置信息、1个置信度、N个分类类别的概率值。5.anchor尺寸就是用来预测网络预测值和目标GT之间做尺度变换的。比如下面的蓝色框是锚框Anchor boxes预测的bbox(边界框bounding boxes),黑色点的矩形框是锚框Anchor boxes。每一个锚框Anchor boxes预测的bbox(边界框bounding boxes)都包含 tx、ty、tw、th、to(置信度)。如果这个单元格(grid cell)距离输入原图的左上角原点的边距离为(cx,cy),该单元格(grid cell)对应的边界框bbox维度(边界框优先bounding box prior)的长和宽分别为(pw,ph),pw和ph实际即为手动设定的锚框Anchor boxes宽和高,那么对应的边界框bbox计算结果实际为:1.yolo V2/yolo V3中不同尺寸的锚框Anchor boxes所预测的bbox(边界框bounding boxes)的4个位置信息为(tx, ty, tw, th),那么tx和ty分别为相对于单元格(grid cell)原点的0到1之间取值的值,tw和th则根据所预测的bbox(边界框bounding boxes)是大于还是小于单元格(grid cell)的尺寸来决定tw和th的取值范围是在0到1之间还是在大于1。2.pw和ph分别为手动设定的锚框Anchor boxes宽和高,而yolo网络最终计算的预测结果为(bx, by, bw, bh),因此需要把预测的bbox的位置信息(tx, ty, tw, th)转换为yolo输出层的最终输出的位置信息(bx, by, bw, bh)。3.把(tx, ty, tw, th)转换为(bx, by, bw, bh)作为yolo输出层的最终输出:σ读作sigma。Cx和Cy分别为当前单元格(grid cell)距离输入原图的左上角原点的边距离。W和H为输入原图像的宽和高。分别除以W和H,目的是归一化。tx->bx:bx = (σ(tx) + Cx) / Wty->by:by = (σ(ty) + Cy) / Htw->bw:bw = (pw * e^tw) / Wth->bh:bh = (ph * e^th) / H4.σ(tx) + Cx:边界框的中心点在输入原图像中的x坐标,也即边界框的中心点离输入原图像原点的x方向长度σ(ty) + Cy:边界框的中心点在输入原图像中的y坐标,也即边界框的中心点离输入原图像原点的y方向长度pw * e^tw:边界框在输入原图像中的宽度ph * e^th:边界框在输入原图像中的高度

    """输出layerOutsputs介绍:是YOLO算法在图片中检测到的bbx的信息由于YOLO v3有三个输出,也就是上面提到的['yolo_82', 'yolo_94', 'yolo_106']因此layerOutsputs是一个长度为3的列表其中,列表中每一个元素的维度是(num_detection, 85)num_detections表示该层输出检测到bbx的个数85:因为该模型在COCO数据集上训练,[5:]表示类别概率;[0:4]表示bbx的位置信息;[5]表示置信度下面对网络输出的bbx进行检查:判定每一个bbx的置信度是否足够的高,以及执行NMS算法去除冗余的bbx"""# 遍历每个输出层[yolo-82, yolo-94, yolo-106]for output in layerOutputs:# 遍历某个输出层的检测框结果for detection in output:# detction检测框:1*85维度的向量。其中[5:]表示类别,[0:4]bbox的位置信息 [4]置信度scores = detection[5:] #80个类别的概率值。scores的大小应该是1*80,因为在训练yolo模型时是80类目标classID = np.argmax(scores) #获取最大概率值的类别索引值confidence = scores[classID] #根据最大概率值的类别索引值 获取出对应的类别#如果该最大概率的类别的预测概率值 大于 0.3if confidence > 0.3:"""1.pw和ph分别为手动设定的锚框Anchor boxes宽和高,而网络最终计算的预测结果为(bx, by, bw, bh),因此需要把(tx, ty, tw, th)转换为(bx, by, bw, bh)。2.把(tx, ty, tw, th)转换为(bx, by, bw, bh)作为yolo输出层的最终输出:σ读作sigma。Cx和Cy分别为当前单元格(grid cell)距离输入原图的左上角原点的边距离。W和H为输入原图像的宽和高。分别除以W和H,目的是归一化。tx->bx:bx = (σ(tx) + Cx) / Wty->by:by = (σ(ty) + Cy) / Htw->bw:bw = (pw * e^tw) / Wth->bh:bh = (ph * e^th) / Hσ(tx) + Cx:边界框的中心点在输入原图像中的x坐标,也即边界框的中心点离输入原图像原点的x方向长度σ(ty) + Cy:边界框的中心点在输入原图像中的y坐标,也即边界框的中心点离输入原图像原点的y方向长度pw * e^tw:边界框在输入原图像中的宽度ph * e^th:边界框在输入原图像中的高度"""# 将检测结果边界框的坐标还原至与原图片适配,YOLO返回的是边界框的中心坐标以及边界框的宽度和高度box = detection[0:4] * np.array([W, H, W, H])# 使用 astype("int") 对上述 array 进行强制类型转换# centerX:检测框的中心点横坐标, centerY:检测框的中心点纵坐标,width:检测框的宽度,height:检测框的高度(centerX, centerY, width, height) = box.astype("int")# 计算边界框的左上角的横坐标:检测框的中心点横坐标 - 检测框的宽度/2x = int(centerX - width / 2)# 计算边界框的左上角的纵坐标:检测框的中心点纵坐标 - 检测框的高度/2y = int(centerY - height / 2)# 更新检测到的目标框,置信度和类别ID# boxes:[边界框的左上角的横坐标, 边界框的左上角的纵坐标, 检测框的宽度, 检测框的高度]boxes.append([x, y, int(width), int(height)]) # 将边框的信息添加到列表boxesconfidences.append(float(confidence)) # 将识别出是某种物体的置信度添加到列表confidencesclassIDs.append(classID) # 将识别物体归属于哪一类的信息添加到列表classIDs


CNN:RCNN、SPPNet、Fast RCNN、Faster RCNN、YOLO V1 V2 V3、SSD、FCN、SegNet、U-Net、DeepLab V1 V2 V3、Mask RCNN相关推荐

  1. 《目标检测》R-CNN、SPP-NET、Fast R-CNN、Faster R-CNN

    学习内容来自:https://www.bilibili.com/video/BV1m5411A7FD?p=2 类似的博文:https://blog.csdn.net/v_JULY_v/article/ ...

  2. 深度学习目标检测之RCNN、SPP-net、Fast RCNN、Faster RCNN

    一.目标检测介绍 目标检测(目标提取)是一种基于目标几何和统计特征的图像分割,将目标的分割和识别合二为一,主要是明确从图中看到了什么物体.它们分别在什么位置.传统的目标检测方法一般分为三个阶段:首先在 ...

  3. 详解何恺明团队4篇大作 !(附代码)| 从特征金字塔网络、Mask R-CNN到学习分割一切

    来源:新智元 作者:krish 本文5000字,建议阅读10+分钟. 本文介绍FAIR何恺明.Tsung-Yi Lin等人的团队在计算机视觉领域最新的一些创新,包括特征金字塔网络.RetinaNet. ...

  4. 论文精读:Mask R-CNN

    Abstract 我们提出了一个概念上简单.灵活和通用的对象实例分割框架.我们的方法可以有效地检测图像中的对象,同时为每个实例生成一个高质量的分割掩模.该方法被称为MaskR-CNN,通过与现有用于边 ...

  5. CVPR目标检测与实例分割算法解析:FCOS(2019),Mask R-CNN(2019),PolarMask(2020)

    CVPR目标检测与实例分割算法解析:FCOS(2019),Mask R-CNN(2019),PolarMask(2020) 目标检测:FCOS(CVPR 2019) 目标检测算法FCOS(FCOS: ...

  6. 实例分割:Mask RCNN

    Mask RCNN 学习目标 说明Mask RCNN的结构特点 掌握Mask RCNN的RoIAlign方法 掌握Mask RCNN的mask原理 知道Mask RCNN的损失函数 上图是MaskRC ...

  7. Mask R-CNN详解和安装

    Detectron是Facebook的物体检测平台,今天宣布开源,它基于Caffe2,用Python写成,这次开放的代码中就包含了Mask R-CNN的实现. 除此之外,Detectron还包含了IC ...

  8. Mask R-CNN官方实现“又”来了!基于PyTorch,训练速度是原来2倍

    晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI 来自官方的Mask R-CNN实现终于"又"来了!PyTorch官方Twitter今天公布了一个名为Mask R-CNN ...

  9. 卷积神经网络——实例分割之Mask R-CNN论文翻译

    论文链接 https://arxiv.org/abs/1703.06870 相关论文翻译链接 R-CNN:https://blog.csdn.net/itlilyer/article/details/ ...

  10. Mask R-CNN论文

    目录 摘要 1.引言 2.相关工作 3.Mask R-CNN 3.1 实施细节 4.实验:实例分割 4.1 主要结果 4.2 消融实验 4.3 边界框检测结果 4.4 时序 5.Mask R-CNN ...

最新文章

  1. oracle 查询数据横向,Oracle 查询存储过程做横向报表的方法
  2. springboot 成员变量_springboot系列之04-提高开发效率必备工具lombok
  3. 开发日记-20190703 关键词 读书笔记《Linux 系统管理技术手册(第二版)》DAY 9
  4. ledisDB底层实现——本质上就是用leveldb这样的底层存储,和ssdb一样,meta里存的是hash、list等的元数据...
  5. 用route命令解决Wifi和网卡不能同时上内外网问题
  6. IDEA的十大快捷键
  7. 【微机原理与接口技术】具体芯片(1)并行接口8255A(1):全局观
  8. android 指定语言的资源,Android国际化多语言切换
  9. 【重难点】【JVM 03】CMS、G1、ZGC
  10. HDU2046 骨牌铺方格【递推】
  11. webgote的例子(5)Sql注入(Blog)
  12. qt值qml制作足球动画(参考qmlbook)
  13. 云课堂让职业院校软件开发教学更简单
  14. layui表单验证提交
  15. 生活中的 真、善、美
  16. deepin创建快捷方式图标
  17. flink sql读取kafka-入门级
  18. 电能计量芯片HLW8110/HLW8112
  19. 微服务架构通讯模式架构分析
  20. win7怎么开热点(win7怎么开热点)

热门文章

  1. linux pppd源码下载_Linux中的pppd
  2. 网上教务评教管理系统(教学评价系统)
  3. 我看无损音频APE和FLAC
  4. HBase(2):HBase数据模型
  5. Android Studio开发(六)短距离无线通信——蓝牙通信
  6. 进销存设计中的库存设计
  7. 快速学习计算机系统编程
  8. 一定要知道的简单配置Webpack操作
  9. linux如何删除进程,Linux查看和删除进程
  10. vba中取小数点后两位数_如何在Excel中提取小数点后面的数字?