目标检测入门系列Task01-目标检测数据集

一、目标检测基本概念

1.1 目标检测与图像分类的区别

  • 图像分类:只需要判断输入的图像中是否包含感兴趣物体。
  • 目标检测:需要在识别出图片中目标类别的基础上,还要精确定位到目标的具体位置,并用外接矩形框标出。

1.2 目标检测的思路

  • 发现的问题:CNN不善于直接预测坐标信息,并且一幅图像中可能出现的物体个数也是不定的。
  • 想到的解决方案:如果知道了图中某个位置存在物体,再将对应的局部区域送到分类网络中去判别。
  • 如何知道每个物体的位置:。通过滑窗的方式,罗列图中各种可能的区域,分别送入到分类网络得到其类别。同时我们会对当前的边界框进行微调,这样对于图像中每个区域都能得到(class,x1,y1,x2,y2)五个属性,汇总后最终就得到了图中物体的类别和坐标信息。
  • 每个框送入到分类网络分类都有一个得分(代表当前框中有一个船的置信度),那么得分最高的就代表识别的最准确的框,其位置就是最终要检测的目标的位置。
    先确立众多候选框->对候选框进行分类和微调->选择置信度最高的框作为目标检测的位置
    在这里插入图片描述

1.3 目标框定义的方式

任何图像任务的训练数据都要包括两项,图片和真实标签信息,通常叫做GT。

图像分类中,标签信息是类别。目标检测的标签信息除了类别label以外,需要同时包含目标的位置信息,也就是目标的外接矩形框bounding box。

用来表达bbox的格式通常有两种,(x1, y1, x2, y2) 和 (c_x, c_y, w, h)
在这里插入图片描述两种格式互相转换的实现在utils.py中:

def xy_to_cxcy(xy):
    """
    Convert bounding boxes from boundary coordinates (x_min, y_min, x_max, y_max) to center-size coordinates (c_x, c_y, w, h).

    :param xy: bounding boxes in boundary coordinates, a tensor of size (n_boxes, 4)
    :return: bounding boxes in center-size coordinates, a tensor of size (n_boxes, 4)
    """
    return torch.cat([(xy[:, 2:] + xy[:, :2]) / 2,  # c_x, c_y
                      xy[:, 2:] - xy[:, :2]], 1)  # w, h


def cxcy_to_xy(cxcy):
    """
    Convert bounding boxes from center-size coordinates (c_x, c_y, w, h) to boundary coordinates (x_min, y_min, x_max, y_max).

    :param cxcy: bounding boxes in center-size coordinates, a tensor of size (n_boxes, 4)
    :return: bounding boxes in boundary coordinates, a tensor of size (n_boxes, 4)
    """
    return torch.cat([cxcy[:, :2] - (cxcy[:, 2:] / 2),  # x_min, y_min
                      cxcy[:, :2] + (cxcy[:, 2:] / 2)], 1)  # x_max, y_max

1.4 交并比(IoU)

表示两个目标框的交集占并集的比例,用来衡量两个目标框的重叠程度。
在这里插入图片描述图中可以看到,分子中黄色区域为红bbox和绿bbox的交集,分母中黄+红+绿区域为红bbox和绿bbox的并集,两者之比即为iou。

计算流程:

1.首先获取两个框的坐标,红框坐标: 左上(red_x1, red_y1), 右下(red_x2, red_y2),绿框坐标: 左上(green_x1, green_y1),右下(green_x2, green_y2)
2.计算两个框左上点的坐标最大值:(max(red_x1, green_x1), max(red_y1, green_y1)), 和右下点坐标最小值:(min(red_x2, green_x2), min(red_y2, green_y2))
3.利用2算出的信息计算黄框面积:yellow_area
4.计算红绿框的面积:red_area 和 green_area
5.iou = yellow_area / (red_area + green_area - yellow_area)

二、目标检测数据集VOC

2.1 VOC简介

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

VOC数据集在类别上可以分为4大类,20小类:
在这里插入图片描述VOC数量集图像和目标数量的基本信息如下图所示,Images表示图片数量,Objects表示目标数量:
在这里插入图片描述

2.2 VOC数据集的下载

1、进入官网:http://host.robots.ox.ac.uk/pascal/VOC/
2、在挑战赛找到2012和2007年的挑战赛

在这里插入图片描述3、在此位置找到如图所示区域,并下载第一个。

在这里插入图片描述

2.3 VOC数据集的结构

将下载得到的压缩包解压,可以得到如图3-9所示的一系列文件夹,由于VOC数据集不仅被拿来做目标检测,也可以拿来做分割等任务,因此除了目标检测所需的文件之外,还包含分割任务所需的文件,比如SegmentationClass,SegmentationObject,这里,我们主要对目标检测任务涉及到的文件进行介绍。
在这里插入图片描述
1.JPEGImages

这个文件夹中存放所有的图片,包括训练验证测试用到的所有图片。

2.ImageSets

这个文件夹中包含三个子文件夹,Layout、Main、Segmentation

  • Layout文件夹中存放的是train,valid,test和train+valid数据集的文件名

  • Segmentation文件夹中存放的是分割所用train,valid,test和train+valid数据集的文件名

  • Main文件夹中存放的是各个类别所在图片的文件名,比如cow_val,表示valid数据集中,包含有cow类别目标的图片名称。

3.Annotations

Annotation文件夹中存放着每张图片相关的标注信息,以xml格式的文件存储,可以通过记事本或者浏览器打开,我们以000001.jpg这张图片为例说明标注文件中各个属性的含义

在这里插入图片描述
猛一看去,内容又多又复杂,其实仔细研究一下,只有红框区域内的内容是我们真正需要关注的。

  • filename:图片名称

  • size:图片宽高,

  • depth表示图片通道数

  • object:表示目标,包含下面两部分内容。

    • 首先是目标类别name为dog。pose表示目标姿势为left,truncated表示是否是一个被截断的目标,1表示是,0表示不是,在这个例子中,只露出狗头部分,所以truncated为1。difficult为0表示此目标不是一个难以识别的目标。

    • 然后就是目标的bbox信息,可以看到,这里是以[xmin,ymin,xmax,ymax]格式进行标注的,分别表示dog目标的左上角和右下角坐标。

一张图片中有多少需要识别的目标,其xml文件中就有多少个object。上面的例子中有两个object,分别对应人和狗。

2.4 VOC数据集dataloader的构建

2.4.1 使用的环境

为了使用gpu进行训练,所以特地白嫖了谷歌colab。
具体的配置可以网上查到,教程很多。配置好pytorch环境后,我们还需要上传数据集。

2.4.2 上传并解压数据集

我们首先需要把数据集上传到谷歌云盘里,这里只要点击新建并上传文件即可。但是colab上传文件夹非常慢,我们最好直接上传压缩文件,然后再解压,亲测上传压缩文件会比直接上传文件夹快得多的多。上传好后就是如图所示得样子。
在这里插入图片描述

2.4.3 挂载谷歌云盘

进入colab界面,并输入下面的指令:

from google.colab import drive
drive.mount('/content/gdrive')

然后会出现如下的内容
在这里插入图片描述
进入链接并复制到下面的验证码框里,就ok了。挂载好谷歌云盘的效果如图所示,会出现如下的目录:
在这里插入图片描述

注意每次重启colab后都需要重新挂载一下云盘。
接下来需要改变当前工作目录到指定的路径。
比如我已经把数据集放到了MyDrive文件夹下面,就需要运行如下的指令将工作目录指定到此文件夹下面:

import os
os.chdir("/content/gdrive/My Drive/")

2.4.4 解压数据集

接下来我们需要解压数据集,注意这里的是tar文件,所以使用如下指令:

!tar xvf VOCtrainval_06-Nov-2007.tar

即可解压成功。如果遇到报错:Transport endpoint is not connected,则很有可能是因为上一步中没有把工作目录指定到当前的目录,一定要让当前的工作目录中包含数据集压缩包
解压好的目录结构如图所示:(Colab Notebooks是存放colab代码的文件)
在这里插入图片描述
经过以上步骤,数据集就已经成功加载并解压到colab环境中了,就可以构建dataloader了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Transformer目标检测是一种基于Transformer模型的目标检测算法。传统的目标检测算法主要基于卷积神经网络(CNN),而Transformer模型则是一种能够建模图像全局依赖关系的模型,能够更好地利用上下文信息。Transformer目标检测算法在近年来成为研究的热点,并取得了显著的成果。 Transformer目标检测算法的发展主要集中在特征学习、目标估计和标签匹配三个关键环节。在特征学习方面,Transformer模型能够更好地建模图像的全局依赖关系,从而提取更丰富的特征信息。在目标估计方面,Transformer模型能够对图像中的目标进行准确的位置估计和类别识别。在标签匹配方面,Transformer模型能够通过注意力机制对目标和背景进行区分,从而提高目标检测的准确性。 目前,基于Transformer的目标检测算法已经在多个数据集上取得了优异的性能。其中,DETR(Detection Transformer)是一种重要的Transformer目标检测框架,为后续的改进算法奠定了基础。另外,ViT-FRCNN是一种代表性的使用Transformer代替卷积骨干的目标检测算法,通过注意力机制对图像全局特征进行编码。 总的来说,Transformer目标检测算法在目标检测领域展现出了巨大的潜力,并为各个领域提供了更新的解决方案。随着研究的不断深入,我们可以期待Transformer目标检测算法在未来的发展中取得更好的性能和应用。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [【Transformer】基于Transformer的目标检测算法综述](https://blog.csdn.net/qq_45746168/article/details/129313433)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Transformer+目标检测,这一篇入门就够了](https://blog.csdn.net/weixin_44936889/article/details/120597841)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值