目录

  • 目标检测
    • 1 定义
    • 2 常用数据集
      • 2.1 PASCAL VOC数据集
      • 2.2 MS COCO数据集
    • 3 常用的评价指标
      • 3.1 IOU
      • 3.2 mAP(Mean Average Precision)
    • 4 NMS(非极大值抑制)
    • 5 目标检测方法分类
      • 5.1 two-stage的算法
      • 5.2 One-stage的算法
    • 6 经典深度学习网络
      • 6.1 RCNN
        • 1 候选区域生成
        • 2 CNN网络提取特征
        • 3 目标分类(SVM)
        • 4 目标定位
        • 5 预测过程
        • 算法总结
      • 6.2 Fast RCNN
        • 6.2.1 模型特点
        • 6.2.2 算法流程
      • 6.3 Faster RCNN
      • 6.4 YOLO
        • 4.1 网络输入
        • 4.2 网络输出

目标检测

1 定义

目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标,并确定它们的类别和位置。

目标检测中能检测出来的物体取决于当前任务(数据集)需要检测的物体有哪些。假设我们的目标检测模型定位是检测动物(牛、羊、猪、狗、猫五种结果),那么模型对任何一张图片输出结果不会输出鸭子、书籍等其它类型结果。

目标检测的位置信息一般由两种格式(以图片左上角为原点(0,0)):

1、极坐标表示:(xmin, ymin, xmax, ymax)

  • xmin,ymin:x,y坐标的最小值
  • xmin,ymin:x,y坐标的最大值

2、中心点坐标:(x_center, y_center, w, h)

  • x_center, y_center:目标检测框的中心点坐标
  • w,h:目标检测框的宽、高

2 常用数据集

经典的目标检测数据集有两种,PASCAL VOC数据集MS COCO数据集

2.1 PASCAL VOC数据集

PASCAL VOC是目标检测领域的经典数据集。PASCAL VOC包含约10,000张带有边界框的图片用于训练和验证。PASCAL VOC数据集是目标检测问题的一个基准数据集,很多模型都是在此数据集上得到的,常用的是VOC2007和VOC2012两个版本数据,共20个类别,分别是:

也就是:

1.人: 人

2.动物: 鸟,猫,牛,狗,马,羊

3.交通工具: 飞机,自行车,船,公共汽车,汽车,摩托车,火车

4.室内: 瓶子,椅子,餐桌,盆栽,沙发,电视/显示器

下载地址:https://pjreddie.com/projects/pascal-voc-dataset-mirror/

整个数据的目录结构如下所示:

其中:

  1. JPEGImages存放图片文件
  2. Annotations下存放的是xml文件,描述了图片信息,如下图所示,需要关注的就是节点下的数据,尤其是bndbox下的数据.xmin,ymin构成了boundingbox的左上角,xmax,ymax构成了boundingbox的右下角,也就是图像中的目标位置信息

  1. ImageSets包含以下4个文件夹:
  2. Action下存放的是人的动作(例如running、jumping等等)
  3. Layout下存放的是具有人体部位的数据(人的head、hand、feet等等)
  4. Segmentation下存放的是可用于分割的数据。
  5. Main下存放的是图像物体识别的数据,总共分为20类,这是进行目标检测的重点。该文件夹中的数据对负样本文件进行了描述。

2.2 MS COCO数据集

MS COCO的全称是Microsoft Common Objects in Context,微软于2014年出资标注的Microsoft COCO数据集,与ImageNet竞赛一样,被视为是计算机视觉领域最受关注和最权威的比赛之一。

COCO数据集是一个大型的、丰富的物体检测,分割和字幕数据集。这个数据集以场景理解为目标,主要从复杂的日常场景中截取,图像中的目标通过精确的分割进行位置的标定。图像包括91类目标,328,000影像和2,500,000个label。目前为止目标检测的最大数据集,提供的类别有80 类,有超过33 万张图片,其中20 万张有标注,整个数据集中个体的数目超过150 万个。

图像示例:

coco数据集的标签文件标记了每个segmentation+bounding box的精确坐标,其精度均为小数点后两位一个目标的标签示意如下:

{“segmentation”:[[392.87, 275.77, 402.24, 284.2, 382.54, 342.36, 375.99, 356.43, 372.23, 357.37, 372.23, 397.7, 383.48, 419.27,407.87, 439.91, 427.57, 389.25, 447.26, 346.11, 447.26, 328.29, 468.84, 290.77,472.59, 266.38], [429.44,465.23, 453.83, 473.67, 636.73, 474.61, 636.73, 392.07, 571.07, 364.88, 546.69,363.0]], “area”: 28458.996150000003, “iscrowd”: 0,“image_id”: 503837, “bbox”: [372.23, 266.38, 264.5,208.23], “category_id”: 4, “id”: 151109},

3 常用的评价指标

3.1 IOU

在目标检测算法中,IoU(intersection over union,交并比)是目标检测算法中用来评价2个矩形框之间相似度的指标:

IoU = 两个矩形框相交的面积 / 两个矩形框相并的面积

如下图所示:

通过一个例子看下在目标检测中的应用:

其中上图蓝色框框为检测结果,红色框框为真实标注。

那我们就可以通过预测结果与真实结果之间的交并比来衡量两者之间的相似度。一般情况下对于检测框的判定都会存在一个阈值,也就是IoU的阈值,一般可以设置当IoU的值大于0.5的时候,则可认为检测到目标物体。

实现方法:

import numpy as np
# 定义方法计算IOU
def Iou(box1, box2, wh=False):# 判断bbox的表示形式if wh == False:# 使用极坐标形式表示:直接获取两个bbox的坐标xmin1, ymin1, xmax1, ymax1 = box1xmin2, ymin2, xmax2, ymax2 = box2else:# 使用中心点形式表示: 获取两个两个bbox的极坐标表示形式# 第一个框左上角坐标xmin1, ymin1 = int(box1[0]-box1[2]/2.0), int(box1[1]-box1[3]/2.0)# 第一个框右下角坐标xmax1, ymax1 = int(box1[0]+box1[2]/2.0), int(box1[1]+box1[3]/2.0)# 第二个框左上角坐标xmin2, ymin2 = int(box2[0]-box2[2]/2.0), int(box2[1]-box2[3]/2.0)# 第二个框右下角坐标xmax2, ymax2 = int(box2[0]+box2[2]/2.0), int(box2[1]+box2[3]/2.0)# 获取矩形框交集对应的左上角和右下角的坐标(intersection)xx1 = np.max([xmin1, xmin2])yy1 = np.max([ymin1, ymin2])xx2 = np.min([xmax1, xmax2])yy2 = np.min([ymax1, ymax2])# 计算两个矩形框面积area1 = (xmax1-xmin1) * (ymax1-ymin1) area2 = (xmax2-xmin2) * (ymax2-ymin2)#计算交集面积inter_area = (np.max([0, xx2-xx1])) * (np.max([0, yy2-yy1]))#计算交并比iou = inter_area / (area1+area2-inter_area+1e-6)return iou

假设我们检测结果如下所示,并展示在图像上:

import matplotlib.pyplot as plt
import matplotlib.patches as patches
# 真实框与预测框
True_bbox, predict_bbox = [100, 35, 398, 400], [40, 150, 355, 398]
# bbox是bounding box的缩写
img = plt.imread('dog.jpeg')
fig = plt.imshow(img)
# 将边界框(左上x, 左上y, 右下x, 右下y)格式转换成matplotlib格式:((左上x, 左上y), 宽, 高)
# 真实框绘制
fig.axes.add_patch(plt.Rectangle(xy=(True_bbox[0], True_bbox[1]), width=True_bbox[2]-True_bbox[0], height=True_bbox[3]-True_bbox[1],fill=False, edgecolor="blue", linewidth=2))
# 预测框绘制
fig.axes.add_patch(plt.Rectangle(xy=(predict_bbox[0], predict_bbox[1]), width=predict_bbox[2]-predict_bbox[0], height=predict_bbox[3]-predict_bbox[1],fill=False, edgecolor="red", linewidth=2))

计算IoU:

Iou(True_bbox,predict_bbox)

结果为:

0.5114435907762924
3.2 mAP(Mean Average Precision)

目标检测问题中的每个图片都可能包含一些不同类别的物体,需要评估模型的物体分类和定位性能。因此,用于图像分类问题的标准指标precision不能直接应用于此。 在目标检测中,mAP是主要的衡量指标。

mAP是多个分类任务的AP的平均值,而AP(average precision)是PR曲线下的面积,所以在介绍mAP之前我们要先得到PR曲线。

TP、FP、FN、TN

查准率、查全率

  • 查准率(Precision): TP/(TP + FP)
  • 查全率(Recall): TP/(TP + FN)

二者绘制的曲线称为 P-R 曲线

先定义两个公式,一个是 Precision,一个是 Recall,与上面的公式相同,扩展开来,用另外一种形式进行展示,其中 all detctions 代表所有预测框的数量, all ground truths 代表所有 GT 的数量。

AP 是计算某一类 P-R 曲线下的面积,mAP 则是计算所有类别 P-R 曲线下面积的平均值。

假设我们有 7 张图片(Images1-Image7),这些图片有 15 个目标(绿色的框,GT 的数量,上文提及的 all ground truths)以及 24 个预测边框(红色的框,A-Y 编号表示,并且有一个置信度值):

根据上图以及说明,我们可以列出以下表格,其中 Images 代表图片的编号,Detections 代表预测边框的编号,Confidences 代表预测边框的置信度,TP or FP 代表预测的边框是标记为 TP 还是 FP(认为预测边框与 GT 的 IOU 值大于等于 0.3 就标记为 TP;若一个 GT 有多个预测边框,则认为 IOU 最大且大于等于 0.3 的预测框标记为 TP,其他的标记为 FP,即一个 GT 只能有一个预测框标记为 TP),这里的 0.3 是随机取的一个值。

通过上表,我们可以绘制出 P-R 曲线(因为 AP 就是 P-R 曲线下面的面积),但是在此之前我们需要计算出 P-R 曲线上各个点的坐标,根据置信度从大到小排序所有的预测框,然后就可以计算 Precision 和 Recall 的值,见下表。(需要记住一个叫累加的概念,就是下图的 ACC TP 和 ACC FP)

  • 标号为 1 的 Precision 和 Recall 的计算方式:Precision=TP/(TP+FP)=1/(1+0)=1,Recall=TP/(TP+FN)=TP/(all ground truths)=1/15=0.0666 (all ground truths 上面有定义过了
  • 标号 2:Precision=TP/(TP+FP)=1/(1+1)=0.5,Recall=TP/(TP+FN)=TP/(all ground truths)=1/15=0.0666
  • 标号 3:Precision=TP/(TP+FP)=2/(2+1)=0.6666,Recall=TP/(TP+FN)=TP/(all ground truths)=2/15=0.1333
  • 其他的依次类推

然后就可以绘制出 P-R 曲线

得到 P-R 曲线就可以计算 AP(P-R 曲线下的面积),要计算 P-R 下方的面积,有两种方法:

  • 在VOC2010以前,只需要选取当Recall >= 0, 0.1, 0.2, …, 1共11个点时的Precision最大值,然后AP就是这11个Precision的平均值,取 11 个点 [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1] 的插值所得

得到一个类别的 AP 结果如下:

要计算 mAP,就把所有类别的 AP 计算出来,然后求取平均即可。

  • 在VOC2010及以后,需要针对每一个不同的Recall值(包括0和1),选取其大于等于这些Recall值时的Precision最大值,如下图所示:

然后计算PR曲线下面积作为AP值:

计算方法如下所示:

4 NMS(非极大值抑制)

非极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的元素。例如在行人检测中,滑动窗口经提取特征,经分类器分类识别后,每个窗口都会得到一个分数。但是滑动窗口会导致很多窗口与其他窗口存在包含或者大部分交叉的情况。这时就需要用到NMS来选取那些邻域里分数最高(是行人的概率最大),并且抑制那些分数低的窗口。 NMS在计算机视觉领域有着非常重要的应用,如视频目标跟踪、数据挖掘、3D重建、目标识别以及纹理分析等 。

在目标检测中,NMS的目的就是要去除冗余的检测框,保留最好的一个,如下图所示:

NMS的原理是对于预测框的列表B及其对应的置信度S,选择具有最大score的检测框M,将其从B集合中移除并加入到最终的检测结果D中.通常将B中剩余检测框中与M的IoU大于阈值Nt的框从B中移除.重复这个过程,直到B为空。

使用流程如下图所示:

  • 首先是检测出一系列的检测框
  • 将检测框按照类别进行分类
  • 对同一类别的检测框应用NMS获取最终的检测结果

通过一个例子看些NMS的使用方法,假设定位车辆,算法就找出了一系列的矩形框,我们需要判别哪些矩形框是没用的,需要使用NMS的方法来实现。

假设现在检测窗口有:A、B、C、D、E 5个候选框,接下来进行迭代计算:

  • 第一轮:因为B是得分最高的,与B的IoU>0.5删除。A,CDE中现在与B计算IoU,DE结果>0.5,剔除DE,B作为一个预测结果,有个检测框留下B,放入集合
  • 第二轮:A的得分最高,与A计算IoU,C的结果>0.5,剔除C,A作为一个结果

最终结果为在这个5个中检测出了两个目标为A和B。

单类别的NMS的实现方法如下所示:

import numpy as np
def nms(bboxes, confidence_score, threshold):"""非极大抑制过程:param bboxes: 同类别候选框坐标:param confidence: 同类别候选框分数:param threshold: iou阈值:return:"""# 1、传入无候选框返回空if len(bboxes) == 0:return [], []# 强转数组bboxes = np.array(bboxes)score = np.array(confidence_score)# 取出n个的极坐标点x1 = bboxes[:, 0]y1 = bboxes[:, 1]x2 = bboxes[:, 2]y2 = bboxes[:, 3]# 2、对候选框进行NMS筛选# 返回的框坐标和分数picked_boxes = []picked_score = []# 对置信度进行排序, 获取排序后的下标序号, argsort默认从小到大排序order = np.argsort(score)areas = (x2 - x1) * (y2 - y1)while order.size > 0:# 将当前置信度最大的框加入返回值列表中index = order[-1]#保留该类剩余box中得分最高的一个picked_boxes.append(bboxes[index])picked_score.append(confidence_score[index])# 获取当前置信度最大的候选框与其他任意候选框的相交面积x11 = np.maximum(x1[index], x1[order[:-1]])y11 = np.maximum(y1[index], y1[order[:-1]])x22 = np.minimum(x2[index], x2[order[:-1]])y22 = np.minimum(y2[index], y2[order[:-1]])# 计算相交的面积,不重叠时面积为0w = np.maximum(0.0, x22 - x11)h = np.maximum(0.0, y22 - y11)intersection = w * h# 利用相交的面积和两个框自身的面积计算框的交并比ratio = intersection / (areas[index] + areas[order[:-1]] - intersection)# 保留IoU小于阈值的boxkeep_boxes_indics = np.where(ratio < threshold)# 保留剩余的框order = order[keep_boxes_indics]# 返回NMS后的框及分类结果   return picked_boxes, picked_score

假设有检测结果如下:

bounding = [(187, 82, 337, 317), (150, 67, 305, 282), (246, 121, 368, 304)]
confidence_score = [0.9, 0.65, 0.8]
threshold = 0.3
picked_boxes, picked_score = nms(bounding, confidence_score, threshold)
print('阈值threshold为:', threshold)
print('NMS后得到的bbox是:', picked_boxes)
print('NMS后得到的bbox的confidences是:', picked_score)

返回结果:

阈值threshold为: 0.3
NMS后得到的bbox是: [array([187,  82, 337, 317])]
NMS后得到的bbox的confidences是: [0.9]

5 目标检测方法分类

目标检测算法主要分为two-stage(两阶段)和one-stage(单阶段)两类:

5.1 two-stage的算法

先由算法生成一系列作为样本的候选框,再通过卷积神经网络进行样本分类。如下图所示,主要通过一个卷积神经网络来完成目标检测过程,其提取的是CNN卷积特征,进行候选区域的筛选和目标检测两部分。网络的准确度高、速度相对较慢。

two-stages算法的代表是RCNN系列:R-CNN到Faster R-CNN网络

5.2 One-stage的算法

直接通过主干网络给出目标的类别和位置信息,没有使用候选区域的筛选网路,这种算法速度快,但是精度相对Two-stage目标检测网络降低了很多。

one-stage算法的代表是: YOLO系列:YOLOv1、YOLOv2、YOLOv3、 SSD等

6 经典深度学习网络

6.1 RCNN

2014年提出R-CNN网络,该网络不再使用暴力穷举的方法,而是使用候选区域方法(region proposal method)创建目标检测的区域来完成目标检测的任务,R-CNN是以深度神经网络为基础的目标检测的模型 ,以R-CNN为基点,后续的Fast R-CNN、Faster R-CNN模型都延续了这种目标检测思路。

步骤是:

  1. 候选区域生成:使用选择性搜索(Selective Search)的方法找出图片中可能存在目标的侯选区域
  2. CNN网络提取特征:选取预训练卷积神经网网络(AlexNet或VGG)用于进行特征提取。
  3. 目标分类:训练支持向量机(SVM)来辨别目标物体和背景,对每个类别,都要训练一个二元SVM。
  4. 目标定位:训练一个线性回归模型,为每个辨识到的物体生成更精确的边界框。
1 候选区域生成

选择性搜索(SelectiveSearch,SS)中,使用语义分割的方法,它将颜色、边界、纹理等信息作为合并条件,采用多尺度的综合方法,将图像在像素级上划分出一系列的区域,这些区域要远远少于传统的滑动窗口的穷举法产生的候选区域。

SelectiveSearch在一张图片上提取出来约2000个侯选区域,需要注意的是这些候选区域的长宽不固定。 而使用CNN提取候选区域的特征向量,需要接受固定长度的输入,所以需要对候选区域做一些尺寸上的修改。

2 CNN网络提取特征

采用预训练模型(AlexNet或VGG)在生成的候选区域上进行特征提取,将提取好的特征保存在磁盘中,用于后续步骤的分类和回归。

1.全连接层的输入数据的尺寸是固定的,因此在将候选区域送入CNN网络中时,需进行裁剪或变形为固定的尺寸,在进行特征提取。

2.预训练模型在ImageNet数据集上获得,最后的全连接层是1000,在这里我们需要将其改为N+1(N为目标类别的数目,例如VOC数据集中N=20,coco数据集中N=80,1是加一个背景)后,进行微调即可。

3.利用微调后的CNN网络,提取每一个候选区域的特征,获取一个4096维的特征,一幅图像就是2000x4096维特征存储到磁盘中。

3 目标分类(SVM)

假设我们要检测猫狗两个类别,那我们需要训练猫和狗两个不同类别的SVM分类器,然后使用训练好的分类器对一幅图像中2000个候选区域的特征向量分别判断一次,这样得出[2000, 2]的得分矩阵,如下图所示:

对于N个类别的检测任务,需要训练N(目标类别数目)个SVM分类器,对候选区域的特征向量(4096维)进行二分类,判断其是某一类别的目标,还是背景来完成目标分类。

4 目标定位

通过选择性搜索获取的目标位置不是非常的准确,实验证明,训练一个线性回归模型在给定的候选区域的结果上去预测一个新的检测窗口,能够获得更精确的位置。修正过程如下图所示:

通过训练一个回归器来对候选区域的范围进行一个调整,这些候选区域最开始只是用选择性搜索的方法粗略得到的,通过调整之后得到更精确的位置,如下所示:

5 预测过程

使用选择性搜索的方法从一张图片中提取2000个候选区域,将每个区域送入CNN网络中进行特征提取,然后送入到SVM中进行分类,并使用候选框回归器,计算出每个候选区域的位置。 候选区域较多,有2000个,需要剔除掉部分检测结果。 针对每个类,通过计算IOU,采取非最大值抑制NMS的方法,保留比较好的检测结果。

算法总结

1、训练阶段多,训练耗时: 微调CNN网络+训练SVM+训练边框回归器。

2、预测速度慢: 使用GPU, VGG16模型处理一张图像需要47s

3、占用磁盘空间大:5000张图像产生几百G的特征文件。

4、数据的形状变化:候选区域要经过缩放来固定大小,无法保证目标的不变形

6.2 Fast RCNN
6.2.1 模型特点

相比于R-CNN, Fast R-CNN主要在以下三个方面进行了改进:

1、提高训练和预测的速度

R-CNN首先从测试图中提取2000个候选区域,然后将这2000个候选区域分别输入到预训练好的CNN中提取特征。由于候选区域有大量的重叠,这种提取特征的方法,就会重复的计算重叠区域的特征。在Fast-RCNN中,将整张图输入到CNN中提取特征,将候选区域映射到特征图上,这样就避免了对图像区域进行重复处理,提高效率减少时间。

2、不需要额外的空间保存CNN网络提取的特征向量

RCNN中需要将提取到的特征保存下来,用于为每个类训练单独的SVM分类器和边框回归器。在Fast-RCNN中,将类别判断和边框回归统一使用CNN实现,不需要在额外的空间存储特征。

3、不在直接对候选区域进行缩放

RCNN中需要对候选区域进行缩放送入CNN中进行特征提取,在Fast-RCNN中使用ROIpooling的方法进行尺寸的调整。

6.2.2 算法流程

Fast_RCNN的流程如下图所示:

步骤是:

1、候选区域生成:使用选择性搜索(Selective Search)的方法找出图片中可能存在目标的侯选区域,只需要候选区域的位置信息

2、CNN网络特征提取:将整张图像输入到CNN网络中,得到整副图的特征图,并将上一步获取的候选区域位置从原图映射到该特征图上

3、ROIPooling: 对于每个特征图上候选框,RoI pooling层从特征图中提取固定长度的特征向量每个特征向量被送入一系列全连接(fc)层中。

4、目标检测:分两部分完成,一个输出各类别加上1个背景类别的Softmax概率估计,另一个为各类别的每一个类别输出四个实数值,来确定目标的位置信息。

6.3 Faster RCNN

在R-CNN和Fast RCNN的基础上,在2016年提出了Faster RCNN网络模型,在结构上,Faster RCNN已经将候选区域的生成,特征提取,目标分类及目标框的回归都整合在了一个网络中,综合性能有较大提高,在检测速度方面尤为明显。

1、特征提取:将整个图像缩放至固定的大小输入到CNN网络中进行特征提取,得到特征图。

2、候选区域提取:输入特征图,使用区域生成网络RPN,产生一些列的候选区域

3、ROIPooling: 与Fast RCNN网络中一样,使用最大池化固定候选区域的尺寸,送入后续网络中进行处理

4、目标分类和回归:与Fast RCNN网络中一样,使用两个同级层:K+1个类别的SoftMax分类层和边框的回归层,来完成目标的分类和回归。

Faster R-CNN的流程与Fast R-CNN的区别不是很大,重要的改进是使用RPN网络来替代选择性搜索获取候选区域,所以我们可以将Faster R-CNN网络看做RPN和Fast R-CNN网络的结合。

将网络分为四部分:

  • Backbone:Backbone由CNN卷积神经网络构成,常用的是VGG和resnet, 用来提取图像中的特征,获取图像的特征图。该特征图被共享用于后续RPN层生成候选区域和ROIPooling层中。
  • RPN网络:RPN网络用于生成候选区域,用于后续的目标检测。
  • Roi Pooling: 该部分收集图像的特征图和RPN网络提取的候选区域位置,综合信息后获取固定尺寸的特征,送入后续全连接层判定目标类别和确定目标位置。
  • 目标分类与回归: 该部分利用ROIpooling输出特征向量计算候选区域的类别,并通过回归获得检测框最终的精确位置。
6.4 YOLO

Yolo意思是You Only Look Once,它并没有真正的去掉候选区域,而是创造性的将候选区和目标分类合二为一,看一眼图片就能知道有哪些对象以及它们的位置。

Yolo模型采用预定义预测区域的方法来完成目标检测,具体而言是将原始图像划分为 7x7=49 个网格(grid),每个网格允许预测出2个边框(bounding box,包含某个对象的矩形框),总共 49x2=98 个bounding box。我们将其理解为98个预测区,很粗略的覆盖了图片的整个区域,就在这98个预测区中进行目标检测。

YOLO的结构非常简单,就是单纯的卷积、池化最后加了两层全连接,从网络结构上看,与前面介绍的CNN分类网络没有本质的区别,最大的差异是输出层用线性函数做激活函数,因为需要预测bounding box的位置(数值型),而不仅仅是对象的概率。所以粗略来说,YOLO的整个结构就是输入图片经过神经网络的变换得到一个输出的张量,如下图所示:

网络结构比较简单,重点是我们要理解网络输入与输出之间的关系。

4.1 网络输入

网络的输入是原始图像,唯一的要求是缩放到448x448的大小。主要是因为Yolo的网络中,卷积层最后接了两个全连接层,全连接层是要求固定大小的向量作为输入,所以Yolo的输入图像的大小固定为448x448。

4.2 网络输出

网络的输出就是一个7x7x30 的张量(tensor)。那这个输出结果我们要怎么理解那?

4.2.1 7X7网格

根据YOLO的设计,输入图像被划分为 7x7 的网格(grid),输出张量中的 7x7 就对应着输入图像的 7x7 网格。或者我们把 7x7x30 的张量看作 7x7=49个30维的向量,也就是输入图像中的每个网格对应输出一个30维的向量。如下图所示,比如输入图像左上角的网格对应到输出张量中左上角的向量。

4.2.2 30维向量

30维的向量包含:2个bbox的位置和置信度以及该网格属于20个类别的概率

  • 2个bounding box的位置 每个bounding box需要4个数值来表示其位置,(Center_x,Center_y,width,height),即(bounding box的中心点的x坐标,y坐标,bounding box的宽度,高度),2个bounding box共需要8个数值来表示其位置。
  • 2个bounding box的置信度 bounding box的置信度 = 该bounding box内存在对象的概率 * 该bounding box与该对象实际bounding box的IOU,用公式表示就是:

Pr(Object)是bounding box内存在对象的概率

  • 20个对象分类的概率

Yolo支持识别20种不同的对象(人、鸟、猫、汽车、椅子等),所以这里有20个值表示该网格位置存在任一种对象的概率.

【详解】计算机视觉之目标检测相关推荐

  1. B站教学 手把手教你使用YOLOV5之口罩检测项目 最全记录详解 ( 深度学习 / 目标检测 / pytorch )

    目录 一.环境搭建 pytorch的下载 测试(cmd窗口中) pycharm下测试(要配置pycharm中的虚拟环境) 二.数据标注 下载labor image 使用labelimg进行图片标注 划 ...

  2. 经验 | 详解 Faster R-CNN目标检测的实现过程

    计算机视觉联盟  报道 转载于 :机器之心 Faster R-CNN 实现代码:https://github.com/tryolabs/luminoth/tree/master/luminoth/mo ...

  3. YOLOv7详解:实时目标检测新标杆 | Chien-Yao Wang团队与Alexey团队倾力打造

    论文地址:https://arxiv.org/abs/2207.02696 代码地址:https://github.com/WongKinYiu/yolov7 权重: https://pan.baid ...

  4. 【论文解读】深度学习目标检测的开山鼻祖 |R-CNN详解 | 两阶段目标检测代表

    目录 前言 目标检测近年里程碑 深度学习目标检测 1 R-CNN简介 1.1 何为R-CNN? 1.2 摘要 1.2.1 论文综述 1.2.2 优点汇总 1.2.3 缺点汇总 2. RCNN网络结构解 ...

  5. 详解经典旋转目标检测算法RoI Transformer

    一.引言 1.旋转目标检测检测 旋转目标检测检测就是将具有旋转方向的目标检测出来,也就是需要检测目标的中心点.长宽.角度.在俯视图的目标检测中比较常见,如遥感图像目标检测.航拍图像目标检测等.(见下图 ...

  6. 计算机视觉算法——目标检测网络总结

    计算机视觉算法--目标检测网络总结 计算机视觉算法--目标检测网络总结 1. RCNN系列 1.1 RCNN 1.1.1 关键知识点--网络结构及特点 1.1.2 关键知识点--RCNN存在的问题 1 ...

  7. 计算机视觉多目标检测整合算法

    计算机视觉多目标检测整合算法 输入输出接口 Input:image/video Output:(1)BandingBox左上右下的坐标位置 (2)Type类型:人,车,-,-(3) 执行度:是指判别目 ...

  8. CV之OD:计算机视觉之目标检测(Object Detection)方向的简介、使用方法、案例应用之详细攻略

    CV之OD:计算机视觉之目标检测(Object Detection)方向的简介.使用方法.案例应用之详细攻略 目录 OD目标检测的简介 1.Selective Search for Object Re ...

  9. 计算机视觉:目标检测的发展历程与基础概念

    计算机视觉:目标检测的发展历程与基础概念 目标检测发展历程 目标检测基础概念 边界框(bounding box) 锚框(Anchor box) 交并比 对计算机而言,能够"看到"的 ...

  10. 非极大值抑制_【计算机视觉——RCNN目标检测系列】三、IoU与非极大抑制

    写在前面 在上一篇博客:[计算机视觉-RCNN目标检测系列]二.边界框回归(Bounding-Box Regression)( 戴璞微:[计算机视觉-RCNN目标检测系列]二.边界框回归(Boundi ...

最新文章

  1. leetcode算法题--用两个栈实现队列
  2. mysql数据存在就更新_Mysql:如果数据存在则更新,不存在则插入
  3. 【Jetson Nano学习笔记】4. python 3编译bridge
  4. Qt界面制作(QSS、获取屏幕分辨率、自定义控件、版权)
  5. 国外机器人产业发展经验
  6. seL4操作系统基础06:dataport interface与seL4SharedData connector
  7. qt调用import sys库_QTCreator调用动态库实例
  8. 实战开发经验:是什么阻碍了我们跨平台
  9. windows系统bat批处理 一键添加共享打印机
  10. Tensorflow训练mnist数据集源代码解析
  11. 怎样把win7系统下的屏幕设置成护眼的非常柔和的豆沙绿色?
  12. 485有时候从机接收指令没反应_多动症儿童反应慢好几拍?神经递质释放速度太慢就会出现这种问题!科学训练高效提升孩子反应力!...
  13. Yoshua Bengio:注意力是“有意识”AI的核心要素
  14. 9/28shell合集
  15. Excel单元格自定义数值格式详细测试整理 及 Python用openpyxl设置Excel单元格属性——数值格式
  16. JS 基础: 你真的了解 console 吗?
  17. 注册微信公众平台测试账号
  18. not properly quoted string terminated_oracle quoted string not properly terminated
  19. 创立仅一年GMV突破3亿!这个新锐品牌如何在快手实现爆发?
  20. 安装一个apk引起的无法开机。

热门文章

  1. 建筑识图入门(初学者 入门)
  2. 易优cms 设置伪静态 Eyoucms快速入门
  3. 【已解决】玩客云云添加下载慢怎么办?
  4. 【教程汇总】谷歌站内SEO部分
  5. 侯捷c++课程笔记 (面向对象高级编程)
  6. TP-LINK 1208路由器教程(2)
  7. 雪球python爬虫炒股_鲁迅《雪》原文及赏析
  8. PTA----神坛 (30分)(计算几何)
  9. 【转载】USB Type-C设备是否需要CC逻辑芯片
  10. 服务化框架技术选型实践