2026/1/14 1:48:47
网站建设
项目流程
自己可以做网站放在百度上面嘛,西宁建设网站软件,旅游网站开发开题报告,版面设计图Day 14: 目标检测 (Object Detection) 摘要#xff1a;不仅要问“图里有什么#xff1f;(Classification)”#xff0c;还要问“它在哪里#xff1f;(Localization)”。目标检测是自动驾驶和安防的核心技术。本文将带你梳理从 Two-stage (Faster R-CNN) 到 One-stage (YOLO…Day 14: 目标检测 (Object Detection)摘要不仅要问“图里有什么(Classification)”还要问“它在哪里(Localization)”。目标检测是自动驾驶和安防的核心技术。本文将带你梳理从 Two-stage (Faster R-CNN) 到 One-stage (YOLO) 的演进路线并彻底搞懂 IOU、NMS 和 Anchor 这些核心概念。1. 核心概念扫盲在讲模型之前必须先懂这三个术语。1.1 IOU (Intersection over Union)含义交并比。用来衡量两个框重叠程度的指标。公式IoU 交集面积 并集面积 \text{IoU} \frac{\text{交集面积}}{\text{并集面积}}IoU并集面积交集面积用途训练时区分正负样本。PASCAL VOC 默认阈值为 0.5人眼感觉框得还行的阈值。现在 COCO 标准更严会计算 AP0.5:0.95要求极高。测试时用来去重NMS。Loss 计算现在常用1 - IoU或 CIoU 作为回归损失。1.2 NMS (Non-Maximum Suppression)问题模型可能会对着同一只猫预测出 10 个框每个框都挺准。我们只需要保留最好的那一个。算法流程把所有框按置信度从高到低排序。选出得分最高的框 A把它当作“最终赢家”。把剩下所有框里和 A 的 IoU 超过阈值如 0.5的框全部删掉因为它们和 A 重叠度太高大概率是重复预测。循环现在 A 搞定了剩下的框里选个分最高的 B 当新老大重复步骤 3直到所有框都被处理完。1.3 Anchor (锚框)痛点直接预测框的坐标( x , y , w , h ) (x, y, w, h)(x,y,w,h)很难收敛因为框的长宽变化太大了。解决预先设定好一堆固定大小的参考框 (Anchor)比如长的、方的、扁的。模型不预测绝对坐标只预测相对偏移量 (Offset)。“在那个长条形的 Anchor 基础上稍微变宽一点点”这样模型更容易学。2. Faster R-CNN (Two-stage 王者)Two-stage 的意思是检测分两步走先找哪里可能有物体再精细判断是什么。2.1 RPN (Region Proposal Network)任务RPN 是一个“筛选器”。它在图上均匀撒下成千上万个 Anchor只关心**“这里有没有物体”**二分类不关心具体是猫还是狗。输出它会选出几千个可能包含物体的框称为Proposals。2.2 ROI PoolingRPN 选出来的框大小不一有的 20x20有的 100x50。但后面的分类网络需要固定输入比如 7x7。ROI Pooling把特征图上对应区域“抠”出来强制池化成固定的7 × 7 7 \times 77×7大小。3. YOLO (You Only Look Once)One-stage 的代表主打快。它把检测问题变成了一个端到端的回归问题。3.1 核心思想网格划分 (Grid)与分包责任制YOLO 的核心在于它不需要 RPN 那样的预选框过程而是直接把图切成S × S S \times SS×S个网格比如7 × 7 7 \times 77×7。“中心点”规则规则如果一个物体比如狗的几何中心点落在了某个网格里这个网格就全权负责预测这只狗。通俗理解这就好比“分包责任制”。为了防止多个格子抢着预测同一只狗导致重复框YOLO 强制规定只有中心点落脚的那个地盘的主人才是这只狗的唯一负责人。旁边的格子即使压到了狗的尾巴只要中心点不在它那儿它就只负责预测背景或者预测中心点在它那儿的其他物体。3.2 预测具体是怎么做的每个网格会直接输出一个长长的向量包含B 个框的坐标( x , y , w , h ) (x, y, w, h)(x,y,w,h)。置信度 (Confidence)这格子里有物体的概率× \times×预测框的 IoU。C 个类别的概率是猫的概率、是狗的概率…3.3 YOLO vs Faster R-CNN两种流派的本质对决特性Faster R-CNN (Two-stage)YOLO (One-stage)核心逻辑先筛选后精修。RPN 负责找框Head 负责分类。一步到位。网格直接回归出框和类别。预测方式基于 Anchor 机制对每个 Anchor 做二分类 回归。基于 Grid 机制每个网格负责中心点落在其中的物体。速度慢需要运行 RPN 和 Head 两次网络。快只需要运行一次 CNN。为什么这么设追求极致的准确率。分两步走能过滤掉绝大部分背景让 Head 专注于难分类的样本。追求极致的速度和全局视野。网格机制简单粗暴利用 CNN 的全局感受野。思考Faster R-CNN 能不能也用网格其实 RPN 本质上也是在特征图的每个点网格上生成 Anchor但它只做简单的二分类。如果 RPN 直接把分类也做了那它就变成了类似 YOLO/SSD 的 One-stage 检测器了。4. FPN (Feature Pyramid Network)这是解决多尺度检测大物体、小物体同时存在的神器。问题深层特征图小图语义强知道是猫但分辨率低看不清位置小物体消失。浅层特征图大图分辨率高细节丰富但语义弱不知道是啥。解决自顶向下的融合上采样 (Upsample)把深层的小图放大比如 2 倍让它和浅层的大图一样大。元素级相加 (Element-wise Add)把放大后的深层图有语义和浅层图有细节加起来。效果这就好比把一张“模糊的彩色图”叠加在“清晰的黑白轮廓图”上得到了一张既有语义又有细节的特征图对小物体检测极其友好。5. 损失函数 (Loss Function)检测任务的 Loss 通常由三部分组成L L c l s L o b j L b o x L L_{cls} L_{obj} L_{box}LLclsLobjLbox分类 Loss (L c l s L_{cls}Lcls)预测类别的准确度通常用交叉熵。置信度 Loss (L o b j L_{obj}Lobj)正样本网格有物体希望置信度趋近 1或真实 IoU。负样本网格是背景希望置信度趋近 0。回归 Loss (L b o x L_{box}Lbox)框准不准早期用 MSE均方误差算( x , y , w , h ) (x,y,w,h)(x,y,w,h)的差值。现代直接用 IoU 相关 Loss如CIoU Loss因为它直接优化重叠度且考虑了中心点距离和长宽比。6. 代码实践计算 IOUimporttorchdefbox_iou(box1,box2): 计算两个框的 IoU box1: [N, 4] (x1, y1, x2, y2) box2: [M, 4] (x1, y1, x2, y2) Returns: [N, M] # 1. 计算交集 (Intersection)# max(x1), max(y1)lttorch.max(box1[:,None,:2],box2[:,:2])# min(x2), min(y2)rbtorch.min(box1[:,None,2:],box2[:,2:])# 宽高 rb - lt如果负数则说明没重叠设为0wh(rb-lt).clamp(min0)interwh[:,:,0]*wh[:,:,1]# [N, M]# 2. 计算并集 (Union)area1(box1[:,2]-box1[:,0])*(box1[:,3]-box1[:,1])area2(box2[:,2]-box2[:,0])*(box2[:,3]-box2[:,1])# Union A B - Intersectionunionarea1[:,None]area2-interreturninter/union7. 总结Faster R-CNN两步走RPN 提建议Head 做精修。精度高适合打比赛。YOLO一步到位网格直接预测。速度快适合工业落地。FPN让模型同时看清蚂蚁和大象。IoU/NMS检测任务的基石算法。参考资料Faster R-CNN PaperYOLOv3 Paper