新闻详情

新闻详情

首页 / 资讯中心 / 详情

AI for Beginners 实战指南:对象检测(Object Detection)从朴素切图到 YOLO 的完整算法图谱与动手实践

发布时间:2026/10/2 2:12:41来源:尧图网络
AI for Beginners 实战指南:对象检测(Object Detection)从朴素切图到 YOLO 的完整算法图谱与动手实践
教程人工智能机器学习深度学习【免费下载链接】AI-For-Beginners12 Weeks, 24 Lessons, AI for All!项目地址https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners点击查看免费下载本文基于 AI for Beginners 课程第 11 课对象检测展开。课程原文位于 lessons/4-ComputerVision/11-ObjectDetection/README.md仓库另提供配套练习 Notebook 与实战作业。全文将回答三个问题对象检测与图像分类的本质区别是什么、如何用 IoU/AP/mAP 度量检测质量、主流检测算法R-CNN 家族与 YOLO 等单次前传方法分别如何工作并给出可复现的回归式边界框检测代码示例。1. 从图像分类到对象检测任务本质的转变此前课程如 MNIST 手写数字识别处理的是图像分类输入一张图输出一个类别标签。但很多真实场景不仅关心图里有没有猫还要回答猫在哪里。对象检测Object Detection正是解决这一问题的任务——它不仅要判断图片中出现了哪些物体还要给出每个物体的精确位置通常用边界框 Bounding Box表示。本课位于计算机视觉模块lessons/4-ComputerVision/README.md的第 6 讲前承卷积神经网络07-ConvNets与迁移学习后接语义分割12-Segmentation。与只输出类别的分类任务相比检测模型必须同时输出类别 位置这带来了评估指标与网络架构两方面的全新挑战。1.1 最朴素的检测方法切图 分类假设我们要在图中找猫课程给出的最直观方案是把图片切成若干小块tiles对每一块运行图像分类器凡是分类器输出激活值足够高的块就认为该块含有目标物体。这种方法的问题显而易见目标物体往往横跨多个块导致边界框定位非常粗糙。正如课程原文所说该方法离理想状态相去甚远因为它只能非常不精确地确定物体的边界框。 要获得精确位置必须引入**回归regression**来预测边界框的坐标——而这又要求有带标注的专用数据集。仓库配套练习 ObjectDetection.ipynb 完整实现了这一朴素思路使用预训练 VGG-16 卷积网络ImageNet 权重作为猫分类器把 ImageNet 中 281~294 号类各猫品种的概率求和作为整图的猫概率再通过滑动分块生成概率热力图import cv2 from tensorflow import keras import numpy as np vgg keras.applications.vgg16.VGG16(weightsimagenet) 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]) # ImageNet 中猫类索引为 281~294 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这段代码直观展示了朴素方法的两个缺陷一是要对每个小块重复执行昂贵的 CNN 前向计算二是最终只能得到一个哪里像猫的粗略热力图无法输出精确的矩形框。1.2 用回归预测边界框更精确的做法是把检测建模为回归问题让网络直接输出边界框的坐标 $(x, y, w, h)$中心/左上角坐标 宽高。这类任务需要带边界框标注的数据集来提供监督信号。关于用神经网络识别形状并回归边界框的温和入门课程引用了相关博客文章与练习 Notebook我们在第 4 节会结合仓库代码完整演示。2. 对象检测常用数据集训练检测模型需要同时提供类别标签与边界框坐标课程推荐了以下两个最经典的基准数据集数据集类别数标注内容特点PASCAL VOC20 类边界框经典基准通常约定 IoU 阈值为 0.5COCOCommon Objects in Context80 类边界框 分割掩码segmentation masks更贴近真实场景AP 按多种 IoU 阈值评测此外课程作业还使用了Hollywood Heads 数据集详见第 5 节它包含 224,740 帧好莱坞电影画面中的 369,846 个人头标注格式与 PASCAL VOC 一致适合训练单类别head检测模型。3. 检测质量怎么度量IoU、AP 与 mAP图像分类只需比较预测类别与真实类别即可评估而对象检测必须同时衡量类别是否正确与边界框位置是否精确因此需要专门的指标。3.1 交并比Intersection over Union, IoUIoU 度量两个框或任意两个区域的重叠程度交集面积除以并集面积。两个完全相同的区域IoU 1两个完全不相交的区域IoU 0其余情况 IoU 落在 (0, 1) 之间。实践中通常只把 IoU 超过某个阈值的检测结果视为有效阈值如 0.5这也成为后面 mAP 计算的前提。练习 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 / U3.2 平均精度Average Precision, AP要评估某个类别 $C$ 的检测效果课程给出了标准流程绘制Precision-Recall 曲线随着检测阈值0~1变化precision查准率与 recall召回率相应变化阈值越低检出的物体越多precision 与 recall 取不同的折中值得到形如下图的曲线图中横轴为 Recall、纵轴为 Precision。类别 $C$ 的AP 该曲线下的面积。更精确的工程做法是把 Recall 轴等分为 10 段对这 11 个采样点上的 Precision 求平均$$ AP {1\over11}\sum_{i0}^{10}\mbox{Precision}\left(\mbox{Recall}{i\over10}\right) $$3.3 AP 与 IoU 阈值计算 AP 时只统计 IoU 超过某一阈值的检测结果。不同数据集约定不同PASCAL VOC通常取 $\mbox{IoU Threshold} 0.5$即只统计 IoU 0.5 的框COCOAP 会按多个 IoU 阈值如 0.5、0.75 直至 0.95分别评测再综合标准更严格。3.4 平均平均精度mAP对象检测的核心指标是mAPMean Average Precision把所有物体类别的 AP 取平均有时还会再对多个 IoU 阈值取平均。它是论文与竞赛中最常报告的检测性能数字。课程指出 mAP 的完整计算过程在相关博客与带代码样本的 Gist 中有详细描述仓库练习 Notebook 则给出了最简版本——对全部测试样本的 IoU 取平均即可得到一个近似的整体质量分数np.array([IOU(a, b) for a, b in zip(test_bboxes, bb_res)]).mean()4. 两大算法流派Region Proposal 与 One-Pass检测算法大致分为两类课程原文给出了清晰的二分法区域建议网络Region Proposal Networks先产生感兴趣区域Regions of Interest, ROI再在其上运行 CNN 寻找最大激活。与朴素切图思路相似但 ROI 的生成更聪明。主要缺点是慢——CNN 分类器需要在图上多次前传。代表R-CNN、Fast R-CNN、Faster R-CNN。单次前传One-pass方法设计网络一次前传同时预测类别与 ROI。速度快适合实时应用。代表YOLO、SSD、RetinaNet。4.1 R-CNN基于区域的卷积网络R-CNN 用Selective Search算法生成 ROI 区域的层次化结构将候选区域送入 CNN 特征提取器再交给 SVM 分类器判定物体类别并用线性回归确定边界框坐标。4.2 Fast R-CNN与 R-CNN 类似但关键区别在于先对整图应用卷积层再在卷积特征图上定义区域。这样共享了卷积计算避免了每个候选区域重复跑卷积速度显著提升。4.3 Faster R-CNNFaster R-CNN 的核心思想是用神经网络预测 ROI——即引入一个专门训练的Region Proposal Network区域建议网络把候选区域生成这一步也端到端地学出来从而替代手工的 Selective Search速度与精度进一步提升。4.4 R-FCN基于区域的全卷积网络R-FCN 声称比 Faster R-CNN 更快其思路为使用ResNet-101提取特征特征经过**位置敏感得分图Position-Sensitive Score Map**处理把每个属于 $C$ 类的物体划分为 $k\times k$ 个区域训练网络分别预测物体的各个部分对 $k\times k$ 区域中的每一部分网络对各类别投票得票最多的类别胜出。4.5 YOLOYou Only Look OnceYOLO 是实时单次前传算法的典型代表核心思想把图片划分为 $S\times S$ 个网格区域对每个区域CNN 一次性预测$n$ 个可能的物体、边界框坐标以及置信度其中置信度 物体概率 × IoU。由于全程只需一次前传YOLO 能以视频实时帧率运行这正是其名字的由来——你只需看一次。4.6 其他算法RetinaNet以 Focal Loss 解决正负样本极度不平衡问题官方论文中报告其在一阶段检测器中精度领先PyTorch 的 torchvision 内置实现与 Keras 官方示例均可直接用于训练。SSDSingle Shot Detector单次检测器在不同尺度的特征图上进行多尺度预测。5. 动手实践从合成数据训练边界框回归模型练习 Notebook ObjectDetection.ipynb 在朴素方法之后给出了一个完整可运行的回归式检测最小示例在 $8\times 8$ 的合成图像中放置黑色矩形值为 1背景为 0让网络学习预测矩形的位置与尺寸。第一步是生成 100,000 个训练样本每个样本输出 4 个值 $[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]$ 区间并做均值-标准差标准化。因为任务是回归模型采用稠密全连接网络优化器为随机梯度下降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) # 输出 [x, y, w, h] ]) model.compile(sgd, mse) model.fit(imgs_norm, bb, epochs30)Notebook 中记录的训练日志显示loss 从第 1 轮的 0.0562 稳定下降到第 30 轮的 0.0021。随后用 500 张测试图验证打印每张图的预测框、真实框与 IoU最终所有样本的平均 IoU 约为0.715。需要说明的是示例中物体形状简单故全连接网络足够如原文所述真实场景物体形状复杂应使用 CNN 结构训练思路不变。6. 实战作业Hollywood Heads 人头检测课程作业 lab/README.md 给出了一个贴近工业界的任务统计视频监控画面中的人数——可用于商场客流、餐厅高峰时段等场景。要完成它需要检测从不同角度出现的人头训练数据采用 Hollywood Heads 数据集。数据集以 PASCAL VOC 格式提供每张图片对应一个 XML 描述文件内含size图像尺寸与多个object目标节点每个object给出类别名head和边界框坐标bndbox示例如下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 !-- 每张图可有多个 object 节点 -- /annotation解析 XML 可使用 Python 标准库或直接借助pascal-voc这类现成库。训练检测模型有三种可选路径Azure Custom Vision通过其 Python API 在云端编程式训练模型适合快速上线注意该服务通常只支持数百张训练图需限制数据集规模Keras 官方 RetinaNet 教程按教程训练 RetunaNet 模型torchvision 内置模块使用torchvision.models.detection.RetinaNet开箱即用的实现。作业结语强调了这项能力的工业价值虽然已有商业化检测服务可用但理解检测原理并具备训练自有模型的能力仍然非常重要。7. 总结与延伸学习本课以旋风式的节奏带你走完了对象检测的主流路线从切图分类的朴素方法到基于回归的边界框预测从 PASCAL VOC / COCO 数据集到 IoU、AP、mAP 指标再到 R-CNN 家族R-CNN → Fast R-CNN → Faster R-CNN → R-FCN与单次前传的 YOLO、SSD、RetinaNet。你可以通过 ObjectDetection.ipynb 亲手跑通朴素方法与回归检测两个实验再通过 Hollywood Heads 作业 体验真实工业场景。挑战建议阅读课程列出的 YOLO 相关文章与官方资料尝试用 Keras 实现或逐步 Notebook 复现 YOLO/YOLO v2 在自己的图片上做实时检测。若想继续深入建议依次学习本模块的后续课程 语义分割把检测从边界框推进到像素级并回顾 卷积神经网络 中关于特征提取金字塔与 VGG-16 架构的内容——检测模型的骨干网络正是建立在这些 CNN 基础之上。赞分享教程人工智能机器学习深度学习【免费下载链接】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教程人工智能机器学习深度学习猫抓浏览器网页视频下载完整指南从安装到 M3U8 分片下载猫抓浏览器网页视频下载完整指南从安装到 M3U8 分片下载 猫抓cat catch是一款开源的浏览器资源嗅探扩展能够检测并列出当前网页中的视频、音频等音视频上一篇Blender3mfFormat免费开源插件在Blender中完整处理3MF格式的终极指南下一篇Blender 3MF插件3D打印工作流的终极桥梁创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Redis实战:门店营业状态设置的高频读方案与坑点解析 2026/10/2 3:03:41

Redis实战:门店营业状态设置的高频读方案与坑点解析

这段时间正好在整理Redis学习笔记,又赶上门店营业状态设置这个需求落地,两件事撞到了一块儿。很多做业务开发的同事一提到Redis,第一反应就是“缓存”,再深入一点能说出String、Hash这些数据类型,但真到了营业状态这种…

阅读更多 →
基于Redis的门店营业状态缓存设计与实现 2026/10/2 3:03:41

基于Redis的门店营业状态缓存设计与实现

1. 从“营业状态”这个需求说起1.1 营业状态到底要解决什么问题很多做门店类系统的同学都会遇到这样一个需求:商家后台要有一个开关,让老板随时把门店设置为“营业中”或“已打烊”,同时C端用户在下单页要能立刻看到这个状态,甚至…

阅读更多 →
维普AIGC检测超标怎么办?比话AI降AI实测全流程记录 2026/10/2 3:03:41

维普AIGC检测超标怎么办?比话AI降AI实测全流程记录

每年到了论文送审和软著提交通道开放的那几周,我的私信就会准时热闹起来。问题高度一致:“维普AIGC检测显示我的论文AI疑似度40%,怎么办?”“软著文档AIGC检出率高,补正通知已经下了,还能救吗?”…

阅读更多 →
SAP QM质量管理核心流程:从主数据到检验批的完整事务码指南 2026/10/2 3:03:40

SAP QM质量管理核心流程:从主数据到检验批的完整事务码指南

做了十多年SAP,QM这块我接触的项目不算少,但像标题里这种“QS41→QS51→CT04→CL02→QS31→QS21→CL24N→QP01→MM02→QA01→CO01/MIGO→QA32(QE02,QA11)”一长串事务码排出来的流程,还是经常能吓到新人。别慌,这一串看起来吓人&a…

阅读更多 →
Linux环境Redis升级全流程:从安全排查到平滑回滚 2026/10/2 3:03:39

Linux环境Redis升级全流程:从安全排查到平滑回滚

老版本Redis的实例,在Linux机器上跑得好好的,平时也没人动它。但等到线上出了故障、被迫做紧急处理的时候,才发现升级这件事拖得太久,代价比想象中大得多。这篇文章我会把在Linux环境里做Redis升级的完整经验写出来:升…

阅读更多 →
网络基础实战详解:从TCP/IP分层到IP子网与排障工具 2026/10/2 3:03:32

网络基础实战详解:从TCP/IP分层到IP子网与排障工具

1. 网络基础到底在学什么一说"网络基础",很多人第一反应就是背IP地址、记协议端口号,或者把OSI七层模型从头背到尾。但实际工作里真正有用的,是理解数据从一台设备到另一台设备之间到底经历了什么,每层干了什么活&#…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉