035、目标检测-物体和数据集

之——物体检测和数据集

目录

之——物体检测和数据集

杂谈

正文

1.目标检测

2.目标检测数据集

3.目标检测和边界框

4.目标检测数据集示例


杂谈

        目标检测是计算机视觉中应用最为广泛的,之前所研究的图片分类等都需要基于目标检测完成。

        在图像分类任务中,我们假设图像中只有一个主要物体对象,我们只关注如何识别其类别。 然而,很多时候图像里有多个我们感兴趣的目标,我们不仅想知道它们的类别,还想得到它们在图像中的具体位置。 在计算机视觉里,我们将这类任务称为目标检测(object detection)或目标识别(object recognition)。

        以下是一些主流的目标检测算法。请注意,领域中的进展可能导致新的算法和方法的出现,因此建议查阅最新的文献和研究以获取最新信息。

  1. Faster R-CNN (Region-based Convolutional Neural Network): Faster R-CNN是一种经典的目标检测框架,它引入了区域提议网络(Region Proposal Network,RPN)来生成候选区域,然后使用分类器和回归器来完成目标检测。

  2. YOLO (You Only Look Once): YOLO是一种实时目标检测算法,通过将图像划分为网格并在每个网格上预测边界框和类别,实现了高效的目标检测。YOLO的多个版本,如YOLOv2、YOLOv3、YOLOv4,都在改进性能和精度方面进行了优化。

  3. SSD (Single Shot Multibox Detector): SSD是一种单阶段的目标检测算法,它直接在图像中预测多个边界框和类别,具有高效性能和较好的准确度。

  4. Mask R-CNN: Mask R-CNN是在Faster R-CNN的基础上扩展而来,不仅可以进行目标检测,还可以生成目标的精确分割掩码。这使得它在实例分割任务中表现优异。

  5. RetinaNet: RetinaNet引入了一种名为Focal Loss的损失函数,用于解决目标检测中类别不平衡的问题。这个框架在同时保持高召回率的情况下提高了检测框的精度。

  6. EfficientDet: EfficientDet是一种基于EfficientNet的轻量级目标检测算法,通过优化模型结构和参数,实现了高效的目标检测性能。

  7. CenterNet: CenterNet通过预测目标的中心点,然后通过回归得到目标的边界框,具有简单而强大的设计,适用于多种场景。

  8. Cascade R-CNN: Cascade R-CNN通过级联使用多个检测器,每个检测器都在前一个阶段的基础上进行细化,从而提高了检测性能。

        这些算法都在不同的任务和场景中取得了良好的效果,选择最适合特定应用的算法通常取决于实际需求、计算资源和准确度要求。请注意,领域中的研究和发展一直在进行,因此可能有新的算法和技术已经问世。


正文

1.目标检测

        图片分类和目标检测:

         无人车的实时目标识别应用:

        边缘框:

在目标检测中,我们通常使用边界框(bounding box)来描述对象的空间位置。 边界框是矩形的,由矩形左上角的以及右角的x和y坐标决定。 另一种常用的边界框表示方法是边界框中心的(x,y)轴坐标以及框的宽度和高度。 


2.目标检测数据集

        经典的目标检测数据集,就是已经框好的:

        COO(Common Objects in Context)数据集是一个用于计算机视觉任务的大规模图像数据集,由微软研究院创建和维护。COCO数据集的目的是为目标检测、分割、图像标注等计算机视觉任务提供丰富多样的图像数据和标注信息。

以下是COCO数据集的一些关键特点:

  1. 图像数量: COCO数据集包含33w张图像,每张图像包括多个物体,总共有150w个物体,这些图像来自于不同的场景和情境。

  2. 对象类别: 数据集涵盖了80多个不同的对象类别,包括人、动物、交通工具、家具等,多为人造物体。这种多样性使得COCO数据集适用于亲民的目标检测和分类任务。

  3. 图像标注: 每张图像都有详细的标注信息,包括对象的边界框和对象的语义分割标签。这使得COCO数据集成为训练和评估目标检测、分割等模型的理想选择。

  4. 场景复杂性: 数据集中的图像通常具有复杂的场景,包括多个对象的重叠和各种遮挡。这使得模型在处理真实世界场景时更具挑战性。

  5. 用途广泛: COCO数据集被广泛用于评估计算机视觉模型的性能,特别是在目标检测、分割和图像生成等任务上。很多研究论文和竞赛中都使用了COCO数据集。

  6. 年度挑战赛: COCO每年都举办一个挑战赛,邀请研究人员提交他们在该数据集上训练的模型,并评估这些模型在不同任务上的性能。

        COCO数据集的贡献在于为计算机视觉社区提供了一个丰富而具有挑战性的数据集,推动了目标检测、分割和其他相关任务的研究和发展。


3.目标检测和边界框

        定义两种框的表示方法:

#左上右下表示法与中间高宽表示法的转换
#boxes是传入的多个框tenser
def box_corner_to_center(boxes):"""从(左上,右下)转换到(中间,宽度,高度)"""x1, y1, x2, y2 = boxes[:, 0], boxes[:, 1], boxes[:, 2], boxes[:, 3]cx = (x1 + x2) / 2cy = (y1 + y2) / 2w = x2 - x1h = y2 - y1boxes = torch.stack((cx, cy, w, h), axis=-1)return boxesdef box_center_to_corner(boxes):"""从(中间,宽度,高度)转换到(左上,右下)"""cx, cy, w, h = boxes[:, 0], boxes[:, 1], boxes[:, 2], boxes[:, 3]x1 = cx - 0.5 * wy1 = cy - 0.5 * hx2 = cx + 0.5 * wy2 = cy + 0.5 * hboxes = torch.stack((x1, y1, x2, y2), axis=-1)return boxes# bbox是边界框的英文缩写
dog_bbox, cat_bbox = [60.0, 45.0, 378.0, 516.0], [400.0, 112.0, 655.0, 493.0]#%%
boxes = torch.tensor((dog_bbox, cat_bbox))
print(box_center_to_corner(box_corner_to_center(boxes)) == boxes)

        画边界框:

#画边界框
def bbox_to_rect(bbox, color):# 将边界框(左上x,左上y,右下x,右下y)格式转换成matplotlib格式:# ((左上x,左上y),宽,高)return d2l.plt.Rectangle(xy=(bbox[0], bbox[1]), width=bbox[2]-bbox[0], height=bbox[3]-bbox[1],fill=False, edgecolor=color, linewidth=2)fig = d2l.plt.imshow(img)
fig.axes.add_patch(bbox_to_rect(dog_bbox, 'blue'))
fig.axes.add_patch(bbox_to_rect(cat_bbox, 'red'));

         显示结果:


4.目标检测数据集示例

        目前没有特别小的目标检测数据集用于示例,大的数据集跑起来都太慢了,感谢d2l团队搞了个香蕉数据集用于学习:

        拍摄了一组香蕉的照片,并生成了1000张不同角度和大小的香蕉图像。 然后,我们在一些背景图片的随机位置上放一张香蕉的图像。 最后,我们在图片上为这些香蕉标记了边界框。

         下载数据集:

import os
import pandas as pd
import torch
import torchvision
from d2l import torch as d2l#@save
d2l.DATA_HUB['banana-detection'] = (d2l.DATA_URL + 'banana-detection.zip','5de26c8fce5ccdea9f91267273464dc968d20d72')#%%
#读取香蕉检测数据集。
# 该数据集包括一个的CSV文件,内含目标类别标签和位于左上角和右下角的真实边界框坐标
def read_data_bananas(is_train=True):"""读取香蕉检测数据集中的图像和标签"""data_dir = d2l.download_extract('banana-detection')csv_fname = os.path.join(data_dir, 'bananas_train' if is_trainelse 'bananas_val', 'label.csv')csv_data = pd.read_csv(csv_fname)csv_data = csv_data.set_index('img_name')images, targets = [], []for img_name, target in csv_data.iterrows():images.append(torchvision.io.read_image(os.path.join(data_dir, 'bananas_train' if is_train else'bananas_val', 'images', f'{img_name}')))# 这里的target包含(类别,左上角x,左上角y,右下角x,右下角y),# 其中所有图像都具有相同的香蕉类(索引为0)targets.append(list(target))return images, torch.tensor(targets).unsqueeze(1) / 256

        自定义dataset,读取:

class BananasDataset(torch.utils.data.Dataset):"""一个用于加载香蕉检测数据集的自定义数据集"""def __init__(self, is_train):self.features, self.labels = read_data_bananas(is_train)print('read ' + str(len(self.features)) + (f' training examples' ifis_train else f' validation examples'))def __getitem__(self, idx):return (self.features[idx].float(), self.labels[idx])def __len__(self):return len(self.features)def load_data_bananas(batch_size):"""加载香蕉检测数据集"""train_iter = torch.utils.data.DataLoader(BananasDataset(is_train=True),batch_size, shuffle=True)val_iter = torch.utils.data.DataLoader(BananasDataset(is_train=False),batch_size)return train_iter, val_iter
#%%
batch_size, edge_size = 32, 256
train_iter, _ = load_data_bananas(batch_size)
batch = next(iter(train_iter))
#0是feature,批量大小,RGB通道,图片大小;1是label,批量大小,物体数,标号+四个坐标
print(batch[0].shape, batch[1].shape)

         展示:

#演示
#拿出前十个图像,换下维度
imgs = (batch[0][0:10].permute(0, 2, 3, 1)) / 255
axes = d2l.show_images(imgs, 2, 5, scale=2)
#每个框
for ax, label in zip(axes, batch[1][0:10]):#因为之前归一化到了0~1,所以要乘回来d2l.show_bboxes(ax, [label[0][1:5] * edge_size], colors=['w'])

         满天飞的香蕉:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/201010.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

wsl安装ubuntu的问题点、处理及连接

WSL安装Ubuntu的参考链接 (41条消息) wsl报错:WslRegisterDistribution failed with error: 0x800701bc_yzpyzp的博客-CSDN博客_0x800701bc wsl (41条消息) 使用Ubuntu安装软件出现Unable to locate package错误解决办法_大灰狼学编程的博客-CSDN博客 手把手教你…

栈的生长方向不总是向下

据我了解,栈的生长方向向下,内存地址由高到低 测试 windows下: 符合上述情况 测试Linux下: 由此可见,栈在不同操作系统环境下,生长方向不总是向下

时序预测 | MATLAB实现基于LSTM-AdaBoost长短期记忆网络结合AdaBoost时间序列预测

时序预测 | MATLAB实现基于LSTM-AdaBoost长短期记忆网络结合AdaBoost时间序列预测 目录 时序预测 | MATLAB实现基于LSTM-AdaBoost长短期记忆网络结合AdaBoost时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 x 基本介绍 1.Matlab实现LSTM-Adaboost时间序列预测…

Android HAL学习 及 与BSP的区别

Android HAL学习 及 与BSP的区别 参考链接: 1、https://www.cnblogs.com/looner/articles/11579335.html 2、https://blog.csdn.net/leesan0802/article/details/124087630 3、https://zhuanlan.zhihu.com/p/336531442 在HAL的学习之前,我们来先了解…

京东数据分析(京东数据采集):2023年10月京东平板电视行业品牌销售排行榜

鲸参谋监测的京东平台10月份平板电视市场销售数据已出炉! 根据鲸参谋电商数据分析平台的相关数据显示,10月份,京东平台上平板电视的销量将近77万,环比增长约23%,同比则下降约30%;销售额为21亿,环…

数据库数据恢复—MongoDB数据库文件拷贝出现错误的数据恢复案例

MongoDB数据库数据恢复环境: 一台Windows Server操作系统的虚拟机,虚拟机上部署有MongoDB数据库。 MongoDB数据库故障&检测: 在未关闭MongoDB服务的情况下,工作人员将MongoDB数据库文件拷贝到其他分区,然后将原数…

双12电视盒子推荐:测评员解析目前电视盒子哪个最好

电视盒子不需要每月缴费,只需联网就可以收看海量视频资源,游戏、网课、投屏等功能让电视盒子的使用场景更丰富,我每年都会进行数十次电视盒子测评,本期要分享的是双十二电视盒子推荐,全面解析目前电视盒子哪个最好。 一…

UE4基础篇十七:分析性能

一、性能瓶颈定位 原文地址:小能猫吃牙膏:UE4 性能 - (一)瓶颈定位 P.S. 对于某个具体问题,我个人偏向于遵循 WHY → WHAT → HOW 的思考方法(重要性逐级递减) 加以理解。因为如果找不到做某件事情的意义(WHY)所在,或是对这件事情本身的定义(WHAT)都模棱两可,那么即便经…

计算机视觉与机器学习D1

计算机视觉简介 技术背景 了解人工智能方向、热点 目前人工智能的技术方向有: 1、计算机视觉——计算机视觉(CV)是指机器感知环境的能力;这一技术类别中的经典任务有图像形成、图像处理、图像提取和图像的三维推理。物体检测和人脸识别是其比较成功…

什么是凸函数

假设函数是定义在某个向量空间的凸子集上的实值函数,并且,如果对于中的任何两个向量和,都满足: 则称为上的凸函数

目标分割技术-语义分割总览

前言 博主现任高级人工智能工程师,曾发表多篇SCI且获得过多次国际竞赛奖项,理解各类模型原理以及每种模型的建模流程和各类题目分析方法。目的就是为了让零基础快速使用各类代码模型,每一篇文章都包含实战项目以及可运行代码。欢迎大家订阅一…

uniapp 富文本以及移动端富文本的展示问题

富文本展示有几种方式: 1.<view v-html"content"></view> 2. uniapp自带组件 rich-text rich-text | uni-app官网 <rich-text :nodes"content"></rich-text> 3.uView组件 u-parse Parse 富文本解析器 | uView 2.0 - 全面兼…

NSSCTF web刷题记录6

文章目录 [HZNUCTF 2023 final]eznode[MoeCTF 2021]地狱通讯-改[红明谷CTF 2022] Smarty Calculator方法一 CVE-2021-26120方法二 CVE-2021-29454方法三 写马蚁剑连接 [HZNUCTF 2023 final]eznode 考点&#xff1a;vm2沙箱逃逸、原型链污染 打开题目&#xff0c;提示找找源码 …

rabbit MQ的延迟队列处理模型示例(基于SpringBoot死信模式)

说明&#xff1a; 生产者P 往交换机X&#xff08;typedirect&#xff09;会发送两种消息&#xff1a;一、routingKeyXA的消息&#xff08;消息存活周期10s&#xff09;&#xff0c;被队列QA队列绑定入列&#xff1b;一、routingKeyXB的消息&#xff08;消息存活周期40s&#xf…

开发上门按摩系统对技师如何管理,薪资结构怎么设计

开发完上门按摩系统平台上线之后&#xff0c;对技师的管理和薪资结构是非常重要的环节&#xff0c;关乎着平台的服务能力和服务质量&#xff0c;那么应该如何去管理和设计薪资结构呢 首先说技师管理&#xff1a; 一、培训和认证&#xff1a;平台应对技师进行全面的培训&#xf…

电脑磁盘怎么设置密码?磁盘加密软件哪个好?

电脑磁盘经常被用于存放各种重要数据&#xff0c;而为了避免数据泄露&#xff0c;我们需要为磁盘设置密码&#xff0c;以防止未授权人员使用磁盘。那么&#xff0c;电脑磁盘怎么设置密码呢&#xff1f;下面我们就一起来了解一下。 如何设置磁盘密码&#xff1f; 想要为磁盘设置…

释放搜索潜力:基于Docker快速搭建ES语义检索系统(快速版),让信息尽在掌握

搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目实战总结、技术细节以及项目实战(含码源) 专栏详细介绍:搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目实战总结、技术…

某高品质房产企业:借助NineData平台,统一数据库访问权限,保障业务安全

该企业是中国领先的优质房产品开发及生活综合服务供应商。在 2022 年取得了亮眼的业绩表现&#xff0c;销售额市场占有率跻身全国前五。业务涵盖房产开发、房产代建、城市更新、科技装修等多个领域。 2023 年&#xff0c;该企业和玖章算术&#xff08;浙江&#xff09;科技有限…

动态规划求 x 轴上相距最远的两个相邻点 java 代码实现

如图为某一状态下 x 轴上的情况&#xff0c;此时 E、F相距最远&#xff0c;现在加入一个点H&#xff0c;如果H位于点A的左边的话&#xff0c;只需要比较 A、H 的距离 和 E、F 的距离&#xff1b;如果点H位于点G的右边&#xff0c;则值需要比较 G、H 的距离 和 E、F 的距离&…

OceanBase:OBServer节点管理

目录 1.查看节点 2.添加节点 2.1 创建数据目录 2.2.OceanBase 运行时所依赖的部分三方动态库 2.3.安装 OceanBase 数据库的 RPM 包 2.4.启动节点 observer 进程 2.5.向集群中添加节点 3.隔离节点 4.重启节点 4.1 停止服务 4.2 转储 4.3 关闭进程 4.4 启动进程 4.…