深度学习入门(四十二)计算机视觉——目标检测和边界框

news2025/8/10 9:17:22

深度学习入门(四十二)计算机视觉——目标检测和边界框

  • 前言
  • 计算机视觉——目标检测和边界框
    • 课件
      • 图片分类和目标检测
      • 边缘框
      • 目标检测数据集
      • 总结
    • 教材
      • 1 边界框
      • 2 小结

前言

核心内容来自博客链接1博客连接2希望大家多多支持作者
本文记录用,防止遗忘

计算机视觉——目标检测和边界框

课件

图片分类和目标检测

在这里插入图片描述

边缘框

—个边缘框可以通过4个数字定义

  • (左上x,左上y,右下x,右下y)
  • (左上x,左上y,宽,高)
  • 在这里插入图片描述

    目标检测数据集

    每行表示一个物体:图片文件名,物体类别,边缘框
    CoCo (cocodataset.org):80物体,330K图片,1.5M物体

    总结

    1、物体检测识别图片里的多个物体的类别和位置
    2、位置通常用边缘框表示

    教材

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

    目标检测在多个领域中被广泛使用。 例如,在无人驾驶里,我们需要通过识别拍摄到的视频图像里的车辆、行人、道路和障碍物的位置来规划行进线路。 机器人也常通过该任务来检测感兴趣的目标。安防领域则需要检测异常目标,如歹徒或者炸弹。

    在接下来的几节中,我们将介绍几种用于目标检测的深度学习方法。 我们将首先介绍目标的位置。

    %matplotlib inline
    import torch
    from d2l import torch as d2l
    

    下面加载本节将使用的示例图像。可以看到图像左边是一只狗,右边是一只猫。 它们是这张图像里的两个主要目标。

    d2l.set_figsize()
    img = d2l.plt.imread('../img/catdog.jpg')
    d2l.plt.imshow(img);
    

    输出:
    在这里插入图片描述

    1 边界框

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

    在这里,我们定义在这两种表示法之间进行转换的函数:box_corner_to_center从两角表示法转换为中心宽度表示法,而box_center_to_corner反之亦然。 输入参数boxes可以是长度为4的张量,也可以是形状为(,4)的二维张量,其中是边界框的数量。

    def box_corner_to_center(boxes):
        """从(左上,右下)转换到(中间,宽度,高度)"""
        x1, y1, x2, y2 = boxes[:, 0], boxes[:, 1], boxes[:, 2], boxes[:, 3]
        cx = (x1 + x2) / 2
        cy = (y1 + y2) / 2
        w = x2 - x1
        h = y2 - y1
        boxes = torch.stack((cx, cy, w, h), axis=-1)
        return boxes
    
    def box_center_to_corner(boxes):
        """从(中间,宽度,高度)转换到(左上,右下)"""
        cx, cy, w, h = boxes[:, 0], boxes[:, 1], boxes[:, 2], boxes[:, 3]
        x1 = cx - 0.5 * w
        y1 = cy - 0.5 * h
        x2 = cx + 0.5 * w
        y2 = cy + 0.5 * h
        boxes = torch.stack((x1, y1, x2, y2), axis=-1)
        return boxes
    

    我们将根据坐标信息定义图像中狗和猫的边界框。 图像中坐标的原点是图像的左上角,向右的方向为 x x x轴的正方向,向下的方向为 y y y轴的正方向。

    # 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))
    box_center_to_corner(box_corner_to_center(boxes)) == boxes
    

    输出:

    tensor([[True, True, True, True],
            [True, True, True, True]])
    

    我们可以将边界框在图中画出,以检查其是否准确。 画之前,我们定义一个辅助函数bbox_to_rect。 它将边界框表示成matplotlib的边界框格式。

    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'));
    

    输出:
    在这里插入图片描述

    2 小结

    1、目标检测不仅可以识别图像中所有感兴趣的物体,还能识别它们的位置,该位置通常由矩形边界框表示。
    2、我们可以在两种常用的边界框表示(中间,宽度,高度)和(左上,右下)坐标之间进行转换。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

m基于MATLAB数字调制解调仿真,包括ASK,FSK,DPSK及MDPSK,对比误码率

目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 振幅键控(也称幅移键控),记做ASK,或称其为开关键控(通断键控),记做OOK 。二进制数字振幅键控通常记做2ASK。 对于振…

Spring Cloud(十一):Spring Cloud Security Oauth2

OAuth2 登录历程 basic 用户名:密码session cookietokenjwt 登录流程分析: https://www.processon.com/view/link/60a32e7a079129157118740f 微信开发平台文档: https://developers.weixin.qq.com/doc/oplatform/Mobile_App/WeChat_Logi…

(2)paddle---简单线性回归和波士顿房价预测

1、参考地址 (1)blibli网站地址 251-03_PaddlePaddle求解线性模型_dec_哔哩哔哩_bilibili (2)波士顿数据集介绍参考了 机器学习:波士顿房价数据集_mjiansun的博客-CSDN博客 2、简单线性回归 (1)测试一…

上海亚商投顾:沪指失守3100点 教育板块逆势大涨

上海亚商投顾前言:无惧大盘大跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪大小指数今日走势分化,沪指震荡调整,尾盘再度失守3100点,创业板指盘中涨超1%&am…

定制activemq_RPM包,注册系统服务并开机自启

rpmbuild命令用于创建软件的二进制包和源代码包。 1.准备环境 系统:Centos7 安装所需编译环境: # yum install epel-release -y # yum install rpmdevtools rpm-build gcc make tcl jemalloc -y 2.提前编译安装redis,此处以activemq-5…

nodejs学习week01

说明:学习nodejs之气那应该掌握html,css,JavaScript等前端基础技术 目录 一、什么是nodejs 二、nodejs的内部模块 1.fs文件系统模块 2.path路径模块 3.http服务器模块 三、module.exports对象 四、时间格式化 1.使用JavaScript的方…

Python自动化运维之一(Python入门)

Python简介 python是吉多范罗苏姆发明的一种面向对象的脚本语言,可能有些人不知道面向对象和脚本具体是什么意思,但是对于一个初学者来说,现在并不需要明白。大家都知道,当下全栈工程师的概念很火,而Python是一种全栈的…

docker-compose模板文件、命令的使用

docker-compose官网 一、docker-compose的命令 1、up(启动) 格式为 docker-compose up [options] [SERVICE…] 该命令十分强大,它将尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器…

FAQ是什么?该如何编辑FAQ?

“FAQ”这个关键词可能很多人都见过,但是如果不是行业内的人,大概还不知道它的含义,所以本文将介绍 FAQ和 FAQ文档的编写。 “FAQ”是中文意思,意思是“常见问题解答”或“帮助中心”。研究显示,客户服务支持每天要花…

第四章. Pandas进阶—数据分组统计

第四章. Pandas进阶 4.3 数据分组统计 1.分组统计函数(groupby函数) 1).功能: 根据给定的条件将数据拆分成组每个组否可以独立应用函数(sum,mean,min)将结果合并到一个数据结构中 2).语法: DataFrame.gro…

5G无线技术基础自学系列 | 物理上行共享信道

素材来源:《5G无线网络优化实践》 一边学习一边整理内容,并与大家分享,侵权即删,谢谢支持! 附上汇总贴:5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 NR PUSCH支持两种波形(参阅TS…

Python入门自学进阶-Web框架——26、DjangoAdmin项目应用-数据记录操作

对于每个表显示的数据,点击其中一条,进入这条数据的修改页面,显示此条数据的具体内容,并提供修改、删除等功能。主要是ModelForm的应用。 一、记录数据修改 首先是路由项的添加,点击一条记录后,进入相应的…

MaxEnt模型融合技术的物种分布模拟、参数优化方法、结果分析制图与论文写作

什么是MaxEnt模型? MaxEnt模型的原理是什么?有哪些用途? MaxEnt运行需要哪些输入文件?注意那些事项? 融合R语言的MaxEnt模型的优势? 常用数据检索与R语言自动化下载及可视化方法 常用数据下载网站&…

第一章《初学者问题大集合》第7节:编写第一个Java程序

下载并安装好IDEA之后,就可以编写Java程序啦!前文曾经讲过,Java程序最初的存在形式是Java源文件,经过编译之后又会产生字节码文件。当今时代,软件项目的规模越来越大,因此软件项目中会有多个Java源文件和字…

Android Gradle - AGP(Android Gradle Plugin)更新失败,你遇到了吗?

因为项目中有Java和Kt,同时也是组件化项目,所以配置方面一直存在一些问题(项目可正常运行,只是影响开发效率),此处仅记录我在AndroidStudio中更新AGP(Android Gradle Plugin,即Android 官方开发…

jmeter 使用

下载安装 去官网下载binary文件https://jmeter.apache.org/download_jmeter.cgi 解压后,进入解压目录的 /bin/ ,通过 sh jmeter 命令来启动 Jmeter。 使用jmeter GUI创建test plan 创建线程组流程:测试计划–>右键–>添加–>线程…

threeJS与模型交互

效果预览 该场景是模拟两个楼层,当鼠标放到不同的楼层上时改变其透明度 blender中的模型如下图: 首先导入模型 import { FBXLoader } from three/examples/jsm/loaders/FBXLoader.js addfbx () {const loader new FBXLoader()loader.load(/models/…

算法:最长递增子序列

一、题目描述 给定一个长度为N的数组a0,a1,a2…,an-1&#xff0c;找出一个最长的单调递增子序列&#xff08;注&#xff1a;递增的意思是对于任意的i<j&#xff0c;都满足ai<aj&#xff0c;此外子序列的意思是不要求连续&#xff0c;顺序不乱即可&#xff09;。例如&…

K8s自动化集群环境搭建

文章目录一、环境规划1.1 集群类型1.2 安装方式二、环境搭建1、主机安装2、主机名分配3、时钟同步4. 禁用firewalld、selinux、postfix5. 禁用swap分区6. 开启IP转发&#xff0c;和修改内核信息7. 配置IPVS功能8. ssh免密认证三、安装docker1、更换阿里云镜像仓库2、安装docker…

【前端】HTTP —— HTTP 协议中的细节(超详细!!)

JavaEE传送门JavaEE 【前端】JavaScript —— JS的基本语法之数组, 函数… 【前端】JavaScript —— WebAPI 目录HTTP 协议抓包工具 fiddler协议格式RequestResponseHTTP 协议中的细节认识 URLURL 基本格式URL encode/ decode认识 "方法" methodGETPOSTGET 和 POST…