ARTICLE DETAIL

资讯详情

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

AI-For-Beginners 目标检测(Object Detection)实战指南:从 IoU 指标到 R-CNN/YOLO 算法全景解析

AI-For-Beginners 目标检测(Object Detection)实战指南:从 IoU 指标到 R-CNN/YOLO 算法全景解析 教程人工智能机器学习深度学习【免费下载链接】AI-For-Beginners12 Weeks, 24 Lessons, AI for All!项目地址https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners点击查看免费下载目标检测Object Detection是计算机视觉中继图像分类之后的下一级核心任务不仅要回答图像里有什么还要回答物体在哪里。本文以 AI-For-Beginners 课程中「11-ObjectDetection」一课为主线系统讲解目标检测的朴素思路、回归定位思想、IoU/AP/mAP 评估指标以及 R-CNN 家族与 YOLO 等主流算法并结合仓库配套的 ObjectDetection.ipynb 实验和 Hollywood Heads 实验作业帮助你从理论到代码完整掌握目标检测的核心方法论。从图像分类到目标检测任务定义的升级此前课程讨论的图像分类模型如 MNIST 数字识别输入一张图片输出的是一个类别结果——例如这是数字 5。但在很多实际场景中我们不仅需要知道图片中有某个物体更希望确定它出现的精确位置。这正是目标检测要解决的问题同时输出物体的类别与其边界框Bounding Box坐标。本课在 4-ComputerVision 计算机视觉章节 中处于承上启下的位置前面衔接了卷积神经网络CNN与迁移学习后续衔接语义分割属于定位 分类的综合任务。目标检测的朴素思路切块 分类假设我们要在一张图片中找到一只猫一个非常朴素的检测思路可以这样实现把图片切分成若干小块tiles对每一小块分别运行图像分类激活值足够高的小块即被认为包含目标物体。在 ObjectDetection.ipynb 中这一思路被具体落成了代码首先用 OpenCV 读取并填充pad样例图片为方形然后加载预训练的 VGG-16 模型ImageNet 权重由于 ImageNet 中猫类别的索引为 281~294通过累加这些类别的预测概率得到整图包含猫的综合概率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 中猫类别的索引区间接着将图片划分为n×n网格对每个网格分别求猫概率即可生成一张概率热力图def predict_map(img, n): dx img.shape[0] // n res np.zeros((n, n), dtypenp.float32) for i in range(n): for j in range(n): im img[dx*i:dx*(i1), dx*j:dx*(j1)] res[i, j] predict(im) return res这种朴素方法虽然直观但远非理想它只能非常粗略地定位物体的边界框。要做到精确定位我们需要引入回归Regression思想——直接预测边界框的坐标——而这需要专门的标注数据集作为支撑。用回归预测边界框一个可直接运行的小实验在真实世界中物体形状复杂但在教学实验中可以用合成数据快速验证回归定位的核心机制。Notebook 中的generate_images函数生成了 10 万张 8×8 的图片每张图片中随机放置一个黑色矩形像素值为 1并记录其边界框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)) 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. bboxes[i_img] [x, y, w, h] return imgs, bboxes为了把网络输出限制在 [0,1] 区间边界框坐标需要除以图像尺寸归一化bboxes / 8.0。这里采用一个简单的全连接网络完成回归因为任务是回归问题优化器选用随机梯度下降SGD损失函数选用均方误差MSEmodel keras.Sequential([ keras.layers.Flatten(input_shape(8, 8)), keras.layers.Dense(200, activationrelu), keras.layers.Dropout(0.2), keras.layers.Dense(4) ]) model.compile(sgd, mse)将输入数据标准化减去均值、除以标准差后训练 30 个 epoch损失从约 0.056 稳步下降到约 0.0021。随后在 500 张测试图上计算预测框与真实框的 IoU 并求均值得到约 0.715 的平均 IoU——这说明用回归网络输出四个坐标值x、y、宽、高的定位方案是可行且有效的。在真实场景中物体形状更复杂时应当用 CNN 而非全连接网络来处理该类任务。目标检测常用数据集训练目标检测模型需要同时提供类别标签与边界框坐标的专门数据集。本课提到两个最经典的基准PASCAL VOC共 20 个物体类别是目标检测领域历史最悠久的标准数据集之一COCOCommon Objects in Context共 80 个类别除边界框外还提供实例分割掩码segmentation masks覆盖面更广、难度更高是当今目标检测与实例分割的主流评测基准。评估指标IoU、AP 与 mAP与图像分类只需衡量类别是否正确不同目标检测必须同时衡量类别正确性与边界框位置的精确度。Intersection over UnionIoU交并比IoU 用于衡量两个边界框或任意两个区域的重叠程度用两区域交集面积除以并集面积。两个完全相同的区域IoU 1两个完全不相交的区域IoU 0其余情况取值在 0 到 1 之间。实践中我们通常只把 IoU 超过某个阈值的预测框视为有效检测。Notebook 给出了 IoU 的完整实现def IOU(bbox1, bbox2): 计算两个边界框 [x, y, w, h] 的重叠程度交集面积 / 并集面积 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 / UAverage PrecisionAP平均精度要衡量某一特定类别 $C$ 的检测效果使用AP指标计算过程如下绘制 Precision-Recall 曲线横轴 Recall、纵轴 Precision曲线由检测阈值0 到 1的变化驱动阈值越低检出的物体越多Precision 与 Recall 的取值随之变化类别 $C$ 的 AP 定义为该曲线下的面积。更精确地说Recall 轴通常被划分为 10 段对所有这些采样点的 Precision 取平均$$ AP {1\over11}\sum_{i0}^{10}\mbox{Precision}(\mbox{Recall}{i\over10}) $$AP 与 IoU 阈值的配合计算 AP 时只考虑IoU 高于某阈值的检测框。不同数据集有不同约定PASCAL VOC 通常取 $\mbox{IoU Threshold} 0.5$而 COCO 则在多个 IoU 阈值下分别测量 AP如 0.5、0.75 乃至 0.5:0.95 的平均要求更加严格。Mean Average PrecisionmAP平均精度均值目标检测的主指标是mAP将所有物体类别的 AP 求平均有时还会进一步对多个 IoU 阈值求平均。它是论文与竞赛中最常见的一句话性能数字也是评价检测模型整体能力强弱的标准口径。主流目标检测算法全景目标检测算法大致可分为两大类区域提议网络Region Proposal Networks包括 R-CNN、Fast R-CNN、Faster R-CNN。核心思路是先生成感兴趣区域Region of Interest, ROI再让 CNN 在这些区域上寻找最大激活。它与朴素切块思路类似但 ROI 的生成方式更聪明。这类方法的主要缺点是速度慢——CNN 分类器需要在同一张图上进行多次前向推断单次One-pass方法包括 YOLO、SSD、RetinaNet。这类架构被设计为一次前向传播同时预测类别与 ROI速度更快更适合实时应用。R-CNNRegion-Based CNNR-CNN 使用Selective Search生成层次化的 ROI 区域结构随后将这些区域送入 CNN 特征提取器与 SVM 分类器确定物体类别并用线性回归确定边界框坐标。它是两阶段检测器的鼻祖奠定了区域提议 → 逐区域分类回归的范式。Fast R-CNNF-RCNNFast R-CNN 与 R-CNN 思路相似但关键改进在于区域定义发生在卷积层应用之后——整张图只过一次卷积再在共享特征图上提取区域特征避免了逐区域重复计算从而显著加速。Faster R-CNNFaster R-CNN 的核心贡献是引入神经网络来预测 ROI即所谓的区域提议网络Region Proposal Network, RPN。至此区域提议与后续分类回归全部端到端可学习速度与精度较前两代进一步提升成为两阶段检测器的代表作。R-FCNRegion-Based Fully Convolutional NetworkR-FCN 比 Faster R-CNN 更快其主要思想是使用 ResNet-101 提取特征特征经位置敏感得分图Position-Sensitive Score Map处理每个类别 $C$ 的物体被划分为 $k\times k$ 个区域网络分别训练预测物体的各个部位对于 $k\times k$ 各区域所有网络对物体类别进行投票获得票数最多的类别胜出。通过位置敏感设计R-FCN 在保持精度的同时把共享计算做到了极致避免了 Faster R-CNN 中逐 ROI 的重计算。YOLOYou Only Look OnceYOLO 是实时单次算法的代表其核心思想非常直观将图像划分为 $S\times S$ 个区域grid对每个区域CNN 同时预测 $n$ 个可能的物体、边界框坐标以及置信度confidence概率× IoU。只看一次意味着整张图只需一次前向传播即可输出全部检测结果因此能达到实时推理速度非常适合视频监控、自动驾驶等对延迟敏感的场景。其他算法RetinaNet引入 Focal Loss 解决单阶段检测中前景/背景类别极度不平衡的问题在精度上逼近两阶段方法的同时保持单阶段的速度SSDSingle Shot Detector在多个不同尺度的特征图上直接回归类别与边界框是单阶段方法的重要代表。动手实验与实战作业实验 Notebook跟随 ObjectDetection.ipynb 可以亲手复现本节全部内容VGG-16 朴素切块检测、合成矩形数据的回归定位、IoU 计算与平均 IoU 评测。Notebook 的真实世界目标检测部分还推荐了两条进阶路线阅读 Keras 官方的 RetinaNet 目标检测教程以理解实现细节或直接使用 Keras RetinaNet 库快速训练真实检测模型。挑战作业Hollywood Heads 人头检测lab/README.md 给出了一个贴近工业应用的任务统计监控视频流中的人数例如估算商场访客数、餐厅高峰时段这需要从不同角度检测人头部。训练数据使用Hollywood Heads 数据集包含来自好莱坞电影的 224,740 帧画面中的 369,846 个人头标注以 PASCAL VOC 格式提供——每个图像对应一个 XML 描述文件annotation folderHollywoodHeads/folder filenamemov_021_149390.jpeg/filename size width608/width height320/height depth3/depth /size object namehead/name bndbox xmin201/xmin ymin1/ymin xmax480/xmax ymax263/ymax /bndbox difficult0/difficult /object /annotation该数据集只有head一个类别每个目标给出边界框坐标。你可以用 Python 解析 XML或使用pascal-voc库直接处理 VOC 格式。训练检测模型有三条可选路线使用 Azure Custom Vision 及其 Python API 在云端训练注意它通常只能利用数百张图片可能需要缩减数据集参照 Keras 官方 RetinaNet 教程训练 RetinaNet 模型直接使用torchvision.models.detection.RetinaNet内置模块。该作业的核心结论是目标检测是工业界高频需求虽然已有现成云服务可用但理解其工作原理、具备自行训练检测模型的能力依然至关重要。小结本课带你快速走完了目标检测的完整知识地图从切块 分类的朴素方案到用回归精确预测边界框坐标从 IoU、AP 到 mAP 的指标体系从 R-CNN → Fast R-CNN → Faster R-CNN → R-FCN 的两阶段演进到 YOLO、SSD、RetinaNet 的单次检测流派。配合 实验 Notebook 与 Hollywood Heads 实战作业你既可以从零跑通回归定位边界框的最小实现也能面向真实视频场景训练自己的检测模型。赞分享教程人工智能机器学习深度学习【免费下载链接】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 目标检测实战指南从分类到定位、从 IoU 到 YOLOAI For Beginners 目标检测实战指南从分类到定位、从 IoU 到 YOLO 导读本文以 AI For Beginners https://li教程人工智能机器学习深度学习AI-For-Beginners 目标检测实战全解从朴素滑窗到 R-CNN/YOLO 与 mAP 评估体系AI For Beginners 目标检测实战全解从朴素滑窗到 R CNN/YOLO 与 mAP 评估体系 本指南基于 AI For Beginners 课程教程人工智能机器学习深度学习上一篇用Devicon打造个人网站技术栈展示栏的10个实用技巧下一篇API Blueprint资源命名规范提升API一致性的核心原则创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表