跟李沐学AI:目标检测、锚框

边缘框

用于表示物体的位置,一个边缘框通过四个数字定义:(坐上x, 左上y, 右下x, 右下y)或(左上x, 左上y, 宽, 高)

通常物体检测或目标检测的数据集比图片分类的数据集小很多,因为物体检测数据集标注成本高很多。

目标检测数据集

目标检测数据集一般每行表示一个物体,每行分别有图片文件名、物体类别、边缘框。

COCO是目标检测中常用的数据集:COCO - Common Objects in Context。该数据集包含80类物体、330K张图片以及1.5M个物体

目标检测总结

物体检测或目标检测之别图片中多个物体的类别和位置。

位置常用边缘框表示。

锚框

boudingbox是目标在图像中的真实位置,锚框是算法对目标位置的猜测。

一类目标检测算法是基于锚框。算法首先提出多个锚框,随后算法预测每个锚框内是否含有我们需要检测的物体,如果含有,预测这个锚框到真实边缘框的偏移。

IoU-交并比

IoU用来计算两个框之间的相似度。

交并比为0表示两个框之间无重叠,1则表示完全重合。 公式表示如下:

赋予锚框标号

每个锚框是一个训练样本。每个锚框要么标注为背景,要么关联上一个真实边缘框。算法会生成大量的锚框,但真实的边缘框很少,绝大数的锚框都是背景,故导致大量的负样本。

一个例子

假设该矩阵为一个图像,该图像有四个边缘框和九个锚框。每个锚框计算IoU值。跳出最大的IoU值,本例中假设为X_{23},则将边缘框3赋值给锚框2作为锚框2的标号。随后将X_{23}所对应的行、列删除。

同理,选出次最大值,样例中为X_{71}将边缘框1赋值给锚框7,随后删除对应行、列。重复直至所有边缘框都被赋值。

其中,锚框的x\y\w\h是相对于featuremap或者原图的一个比例,大小为(0,1]。所以从featuremap中确定的锚框可以按比例缩放回原图中。

使用非极大值抑制(NMS)输出

每个锚框预测一个边缘框。每个预测的精度可能不同。NMS可以合并相似的预测:首先选中非背景类的最大预测值,去掉所有其它与他IoU值大于\theta的预测值,即去掉与它高度重合的锚框。重负上述过程直至所有预测被选中或去除。

 锚框总结

一类目标检测算法基于锚框进行预测。

首先生成大量锚框并赋予标号,每个锚框作为一个样本进行训练。

在预测时,使用NMS去除冗余的预测。

<think>好的,我现在需要处理用户关于李沐老师《动手学深度学习》中(anchor box)相关的教程或资料请求。首先,我需要回忆一下的概念和应用,确保自己理解正确。目标检测中用于生成候选区域,帮助模型定位和识别物体。用户可能希望了解具体的实现方法或者代码示例。 接下来,我应该检查用户提供的引用内容。引用[1]提到李沐老师的课程涉及计算性能和计算机视觉,包括PyTorch实现。引用[2]则列出了一些深度学习资料,包括图像识别、分类等,可能包含目标检测相关内容。需要确定这些引用是否直接提到,但看起来引用[1]更相关,因为李沐的课程确实涵盖这部分内容。 用户可能需要具体的教程链接或代码示例。李沐老师的课程和书籍通常配套有Jupyter Notebook,里面应该包含的实现。我需要回忆课程结构,确认出现在目标检测章节,比如SSD或Faster R-CNN部分。此外,可能需要提供PyTorch代码片段,展示如何生成或计算交并比(IoU)。 另外,用户可能对的作用、如何设置不同尺度和宽高比,以及如何在训练中使用感兴趣。因此,回答中需要涵盖这些点,并结合实际代码示例,帮助用户理解。同时,要确保遵循系统级指令,正确使用数学公式的格式,例如交并比的计算公式需要用$...$包裹。 还需要生成相关问题,可能涉及的设计选择、优化方法,或者与其他目标检测技术的比较。确保问题与紧密相关,帮助用户深入探索。 最后,检查回答是否符合中文要求,结构清晰,引用正确标注,代码块使用正确语法,数学公式格式无误。确保没有使用Markdown,只用纯文本,并自然融入引用标识。</think>关于李沐《动手学深度学习》中(anchor box)的内容,以下是关键信息汇总: 1. **核心概念** 目标检测中用于生成候选预测区域的基础单元,通过预设不同尺度和宽高比的矩形,帮助模型定位物体位置。在SSD、Faster R-CNN等算法中广泛应用[^1]。 2. **关键实现代码** 书中配套的PyTorch实现包含生成和交并比计算: ```python # 生成示例 def generate_anchors(base_size=16, ratios=[0.5, 1, 2], scales=[8, 16, 32]): anchors = [] for ratio in ratios: for scale in scales: h = base_size * scale * math.sqrt(ratio) w = base_size * scale / math.sqrt(ratio) anchors.append([-w/2, -h/2, w/2, h/2]) return torch.tensor(anchors) # 交并比计算 def box_iou(boxes1, boxes2): area1 = (boxes1[:, 2] - boxes1[:, 0]) * (boxes1[:, 3] - boxes1[:, 1]) area2 = (boxes2[:, 2] - boxes2[:, 0]) * (boxes2[:, 3] - boxes2[:, 1]) inter = (torch.min(boxes1[:, 2:], boxes2[:, 2:]) - torch.max(boxes1[:, :2], boxes2[:, :2])).clamp(min=0) return inter.prod(dim=1) / (area1 + area2 - inter) ``` 3. **学习资源** - 官方教材第七章「目标检测」详细讲解原理 - 配套Jupyter Notebook提供交互式代码演示 - 李沐B站视频教程中对应章节包含动画解析[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值