目标检测学习(一)

目标检测学习(一)

1.边界框(bounding box)

在目标检测中,边界框用来描述目标位置。边界框是一个矩形框,是由矩形左上角x和y轴坐标与右下角的x与y轴坐标确定。

1_box , 2_box = [60,45,378,516],[400,112,655,493]
import matplotlib.pyplot as plt

def bbox_to_rect(bbox,color):
    return plt.Rectangle(
        xy = (bbox[0],bbox[1]),width = bbox[2] - bbox[0],height = bbox[3] - 
        bbox[1],fill = False,edgecolor = color,linewidth=2
    ) 
#将边界框(左上x,左下y,右下x,右下y)格式转换成matplotlib格式:
#((左上x,左上y),宽,高)
fig = plt.imshow(img)
fig.axes.add_patch(bbox_to_rect(1_bbox,'blue'))
fig.axes.add_patch(bbox_to_rect(2_bbox,'red'))
#根据边界框的xy轴坐标以及宽高,给两张图片分别红蓝的框框

img

def xy_to_cxcy(xy):
    return torch.cat([(xy[:,2:] + xy[:,:2]) /2, #将xy轴的坐标换算成图像的中心点
                      xy[:,2:] - xy[:,:2]] , 1) #计算图像的宽高

2.交并比(IOU)

目标检测中使用的一个概念是产生的候选框与原标记框的交叠率,即是他们的交集与并集的比值。最理想的情况是完全重叠,即比值为1。

example:

(交集)

A={1,2,3} B={2,3,4}
A n B = {2,3}

(并集)

A={1,2,3} B={2,3,4}
A U B = {1,2,3,4}

img

IOU:

file

变换一下,父母可以用面积减去相交的面积表示为:

file

python代码实现:
import torch

def iou(rect1,rect2):
    xmin1, ymin1, xmax1, ymax1 = rect1
    xmin2, ymin2, xmax2, ymax2 = rect2
    s1 = (xmax1 - xmin1) * (ymax1 - ymin1)
    s2 = (xmax2 - xmin2) * (ymax2 - ymin2)

    sum_area = s1 + s2

    left = max(xmin2,xmin1)
    right = min(xmax2,xmax1)
    top = max(ymin1,ymin2)
    bottom = min(ymax1,ymax2)

    if left >= right or top >= bottom:
        return 0

    intersection = (right - left) * (bottom - top) #计算两个矩阵交集的面积
    i = intersection / (sum_area - intersection) * 1.0 #计算iou
    print(i)


if __name__ == '__main__':
    rect1 = torch.tensor([1,2,3,4])
    rect2 = torch.tensor([2,2,3,4])
    iou(rect1,rect2)
Out[3]:tensor(0.5000)

即矩阵[1,2,3,4]与矩阵[2,2,3,4]的交并集(IOU)的值为0.5

3.VOC数据集

VOC数据集是目标检测领域最常用的标准数据集之一,几乎所有检测方向的论文,如faster_rcnn、yolo、SSD等都会给出其在VOC数据集上训练并评测的效果。因此我们我们的教程也基于VOC来开展实验,具体地,我们使用VOC2007和VOC2012这两个最流行的版本作为训练和测试的数据。

数据集类别:

VOC数据集在类别上可以分为4大类,20小类

image-20201116192847109

数据集量级voc

其中,Images表示图片数量,Objects表示目标数量(上面两组照片是GitHub里的,所以----- 你懂的!)

posted @ 2020-12-16 23:10  AiGgBoY  阅读(206)  评论(0编辑  收藏  举报