ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

AI-For-Beginners 目标检测实战指南:从边界框回归、IoU/mAP 评估到 R-CNN 系列与 YOLO 的完整解析

AI-For-Beginners 目标检测实战指南:从边界框回归、IoU/mAP 评估到 R-CNN 系列与 YOLO 的完整解析 教程人工智能机器学习深度学习【免费下载链接】AI-For-Beginners12 Weeks, 24 Lessons, AI for All!项目地址https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners点击查看免费下载目标检测Object Detection是计算机视觉中看得懂位置的关键任务它不仅要回答图片里有什么还要用边界框bounding box精确标出物体在哪里。本文以 AI-For-Beginners 课程第 11 课为主线系统讲解朴素切块检测为何不够精确、如何用回归网络预测边界框坐标、IoU/AP/mAP 三大评估指标的计算逻辑以及 R-CNN 家族与 YOLO 等经典架构的设计思想并结合仓库内的 ObjectDetection.ipynb 实战代码带你从零跑通识别并定位的完整流程。从图像分类到目标检测任务发生了什么变化此前课程中接触的图像分类模型如 MNIST 手写数字识别输入一张图输出一个类别结论例如这是数字 7。但很多实际场景不仅想知道图片中有物体更想知道物体的精确位置——这正是目标检测的用武之地见 课时说明。在 AI-For-Beginners 的课程体系中目标检测位于 4-ComputerVision 模块承接了卷积神经网络与迁移学习的知识并为后续 图像分割 做了铺垫——分割本质上是对边界框的进一步细化达到像素级定位。朴素方法把图片切块再逐个分类假设我们要在一张图中找猫最直觉的做法分三步见 课时原文档把图片切分成若干小块tile对每一块运行图像分类激活值足够高的块即被认为包含目标物体。在 ObjectDetection.ipynb 中这一思路被完整实现为可运行代码。首先用 OpenCV 读取示例图片images/1200px-Girl_and_cat.jpg并做边缘填充补齐为正方形然后加载预训练的 VGG-16 卷积网络import cv2 from tensorflow import keras import numpy as np import matplotlib.pyplot as plt img cv2.imread(images/1200px-Girl_and_cat.jpg) img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img np.pad(img, ((158, 158), (0, 0), (0, 0)), modeedge) vgg keras.applications.vgg16.VGG16(weightsimagenet)由于 ImageNet 中猫的类别索引为 281294notebook 定义predict函数时把这几类概率求和得到整张图是猫的概率def predict(img): im cv2.resize(img, (224, 224)) im keras.applications.vgg16.preprocess_input(im) pr vgg.predict(np.expand_dims(im, axis0))[0] return np.sum(pr[281:294]) # VGG 中猫的类别是 281~294随后用predict_map把图片切成n×n个方块逐块求猫概率生成激活热力图来可视化目标的大致区域。朴素方法的局限切块的粒度决定了定位精度边界框位置非常粗糙。课程明确指出更精确的定位需要引入回归——直接预测边界框的坐标。回归方案让网络直接输出边界框坐标为了让检测框更准确需要训练一个回归模型输出边界框坐标而这就依赖于带标注的数据集。notebook 用一个极简的合成任务演示了完整链路在 8×8 的黑色背景图片中随机生成白色矩形标签是矩形的[x, y, w, h]。def generate_images(num_imgs, img_size8, min_object_size1, max_object_size4): bboxes np.zeros((num_imgs, 4)) imgs np.zeros((num_imgs, img_size, img_size)) # 背景置 0 for i_img in range(num_imgs): w, h np.random.randint(min_object_size, max_object_size, size2) x np.random.randint(0, img_size - w) y np.random.randint(0, img_size - h) imgs[i_img, x:xw, y:yh] 1. # 矩形区域置 1 bboxes[i_img] [x, y, w, h] return imgs, bboxes imgs, bboxes generate_images(100000)为了让网络输出落在 [0,1] 区间将坐标除以图片尺寸归一化bb bboxes / 8.0。模型选用全连接网络真实复杂物体场景下建议用 CNN使用SGD 优化器 均方误差MSE损失因为本任务本质是回归model keras.Sequential([ keras.layers.Flatten(input_shape(8, 8)), keras.layers.Dense(200, activationrelu), keras.layers.Dropout(0.2), keras.layers.Dense(4) # 输出 x, y, w, h ]) model.compile(sgd, mse)训练前对输入做均值-标准差归一化model.fit(imgs_norm, bb, epochs30)训练 30 个 epoch 后损失从约 0.056 降至约 0.002。评估时生成 500 张测试图用 notebook 中实现的 IOU 函数度量预测框与真实框的重叠程度500 张图的平均 IoU 约 0.715——这就是回归 边界框思路的完整最小演示。目标检测常用数据集训练这类模型需要专门的标注数据见 课时原文档PASCAL VOC20 个类别COCOCommon Objects in Context80 个类别提供边界框和分割掩码segmentation masks。评估指标IoU、AP 与 mAP图像分类好评估目标检测却要同时衡量类别是否正确和边界框位置是否精确。交并比Intersection over UnionIoUIoU 度量两个框或任意两块区域的重叠程度交集面积 ÷ 并集面积。两个完全相同的区域 IoU1完全不相交 IoU0其余介于 0~1 之间。实践中通常只接受 IoU 超过某个阈值的检测框。notebook 中的实现如下def IOU(bbox1, bbox2): x1, y1, w1, h1 bbox1[0], bbox1[1], bbox1[2], bbox1[3] x2, y2, w2, h2 bbox2[0], bbox2[1], bbox2[2], bbox2[3] w_I min(x1 w1, x2 w2) - max(x1, x2) h_I min(y1 h1, y2 h2) - max(y1, y2) if w_I 0 or h_I 0: # 无重叠 return 0. I w_I * h_I U w1 * h1 w2 * h2 - I return I / U平均精度Average PrecisionAP要评估某类物体 $C$ 被识别得好不好用平均精度绘制 Precision-Recall 曲线精度随检测阈值0~1变化阈值变化时检出的物体数量、精度与召回率随之变化类别 $C$ 的 AP 就是曲线下的面积。精确做法是把召回率轴分成 10 段对 11 个点上的精度求平均$$AP \frac{1}{11}\sum_{i0}^{10}\text{Precision}(\text{Recall}\frac{i}{10})$$AP 与 IoU 阈值、mAP只有 IoU 超过阈值的检测才纳入统计例如 PASCAL VOC 通常取 $\text{IoU Threshold}0.5$而 COCO 会对多个 IoU 阈值分别测量 AP。mAPMean Average Precision是目标检测的核心指标对所有物体类别有时也对所有 IoU 阈值的 AP 取平均。mAP 的详细计算过程可参考原文档引用的两篇文章见 课时原文档 的 mAP 一节。两类主流目标检测架构课程把检测算法分为两大类见 课时原文档区域提案网络Region Proposal NetworksR-CNN、Fast R-CNN、Faster R-CNN。核心是先智能地生成感兴趣区域ROI再对每个 ROI 运行 CNN 寻找最大激活。类似朴素方法但 ROI 生成更聪明主要缺点是慢——CNN 分类器需要在图上跑多次。单阶段方法One-passYOLO、SSD、RetinaNet。网络在一次前向传播中同时预测类别与 ROI。R-CNN区域卷积网络R-CNN 用Selective Search生成 ROI 的层次化结构ROI 依次经过 CNN 特征提取器、SVM 分类器确定物体类别再用线性回归修正边界框坐标论文见原文档链接。Fast R-CNN 与 Faster R-CNNFast R-CNN思路与 R-CNN 类似但 ROI 在卷积层之后才确定避免了重复计算Faster R-CNN核心是用一个神经网络——区域提案网络Region Proposal NetworkRPN——来预测 ROI将提案环节也纳入端到端训练。R-FCN区域全卷积网络R-FCN 比 Faster R-CNN 更快流程如下用 ResNet-101 提取特征特征经**位置敏感得分图Position-Sensitive Score Map**处理把每个类别 $C$ 的物体划分成 $k\times k$ 区域训练网络预测物体的各个部位每个 $k\times k$ 区域中的各部分由所有网络对物体类别投票得票最多的类别胜出。YOLOYou Only Look OnceYOLO 是实时单阶段算法核心思想图片被划分为 $S\times S$ 个网格区域每个区域由 CNN 预测 $n$ 个可能的物体、边界框坐标以及置信度 概率 × IoU。其他单阶段算法RetinaNet官方论文见原文档链接提供 Torchvision 的 PyTorch 实现、Keras 实现及 Keras 官方示例Object Detection with RetinaNetSSDSingle Shot Detector单阶段检测器论文见原文档链接。动手实践与挑战练习ObjectDetection.ipynb继续学习请打开 ObjectDetection.ipynb其中包含VGG-16 热力图定位、合成矩形数据的边界框回归训练、IoU 定义与平均 IoU 评估。真实场景的检测模型训练notebook 推荐跟随 Keras 官方的 RetinaNet 目标检测教程或直接使用 Keras RetinaNet 库训练自己的模型。挑战实验Hollywood Heads 人头检测课程配套实验见 lab/README.md给出一个真实业务问题统计视频监控画面中的人数用于估算商店客流、餐厅高峰时段等。方案是用Hollywood Heads Dataset训练人头检测模型——该数据集包含 224,740 个好莱坞电影帧中标注的 369,846 个人头采用 PASCAL VOC 格式每张图片对应一个 XML 描述文件内含多个object节点每个节点给出name类别如head和bndbox边界框坐标xmin/ymin/xmax/ymax。实验提供了三条训练路径使用Azure Custom Vision的 Python API 在云端训练该服务对训练图片数量有限制可能需要裁剪数据集参考Keras 官方 RetinaNet 教程训练直接使用torchvision.models.detection.RetinaNet内置模块。小结目标检测是工业界高频需求。虽然已有 Azure Custom Vision 等现成服务可以直接调用但理解检测的内部原理、能独立训练自己的模型依然重要。通过本课你已掌握朴素切块方法的局限与回归边界框的必要性、PASCAL VOC 与 COCO 数据集形态、IoU/AP/mAP 的度量逻辑、R-CNN 系列与 YOLO/SSD/RetinaNet 的架构差异并可在 ObjectDetection.ipynb 中亲手完成一次定位矩形 平均 IoU 评估的端到端实验。下一步可继续学习 图像分割把边界框升级为像素级掩码。赞分享教程人工智能机器学习深度学习【免费下载链接】AI-For-Beginners12 Weeks, 24 Lessons, AI for All!项目地址https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners点击查看免费下载相关推荐AI-For-Beginners 目标检测实战指南从 IoU/mAP 评估指标到 R-CNN 与 YOLO 算法全解析AI For Beginners 目标检测实战指南从 IoU/mAP 评估指标到 R CNN 与 YOLO 算法全解析 目标检测Object Detecti教程人工智能机器学习深度学习AI-For-Beginners 目标检测实战全解从朴素滑窗到 R-CNN/YOLO 与 mAP 评估体系AI For Beginners 目标检测实战全解从朴素滑窗到 R CNN/YOLO 与 mAP 评估体系 本指南基于 AI For Beginners 课程教程人工智能机器学习深度学习AI-For-Beginners 目标检测Object Detection实战指南从 IoU 指标到 R-CNN/YOLO 算法全景解析AI For Beginners 目标检测Object Detection实战指南从 IoU 指标到 R CNN/YOLO 算法全景解析 目标检测Obj教程人工智能机器学习深度学习创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表