ARTICLE DETAIL

资讯详情

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

图片中的目标如何定位和计数?从数据检查到模型预测的完整实践

图片中的目标如何定位和计数?从数据检查到模型预测的完整实践 内部草稿数据尚未通过现有检查生成内部草稿等待核查。先把要解决的问题说清楚照片里的目标在哪、有多少能让电脑自动找出来吗 做课程项目或毕业设计时可以先把问题缩小到一个能验证的小任务再逐步补充复杂功能。这篇教程要完成的结果是输入图片输出标有预测框的图片和按类别汇总的目标数量。只检测已有标注所定义的目标。标签语义不清时保留编号计数是模型预测需要人工核对。为了把操作讲清楚下面用“燕麦数据集”作为演示案例。数据集是练习材料你最终要交付的是能运行的操作过程和自己核对过的结果。开始前准备好这些东西一台 Windows 电脑。本文先用 CPU不要求先配好显卡。Python 3.12 的 64 位版本第一次安装依赖和下载模型需要联网。数据压缩包v4-coco.zip以及本文配套代码压缩包。数据包和代码附件是两份文件不要混淆。一个有足够空间的工作目录。图像训练库通常还需要数 GB 空间不能只按数据压缩包大小预留空间。本文的操作都在PowerShell中执行。代码块里一行是一条命令按顺序复制执行不复制三行反引号不复制屏幕上的PS C:\...提示符。上一条命令返回提示符后再执行下一条。第 1 步建立项目目录把文件放对位置按Win E打开文件资源管理器在地址栏输入C:\。新建文件夹命名为dataset_project。如果已有同名项目可改用其他目录并统一修改本文中的路径。先解压代码附件把下面三个.py文件直接放在该文件夹中再复制数据 ZIP。数据 ZIP 暂时不手动解压后面的脚本会读取它。C:\dataset_project\├── v4-coco.zip ├── dataset_tools.py ├── run_model.py └── table_demo.py在资源管理器“查看 → 显示”中启用“文件扩展名”。确认脚本名是dataset_tools.py不是dataset_tools.py.txt。在该文件夹地址栏输入powershell并回车随后执行Set-LocationC:\dataset_projectGet-Location Get-ChildItem-Name**成功标志**当前位置是项目目录文件列表中能直接看到上面四个文件。如果看到的只有一个同名子文件夹说明附件多套了一层把脚本移到项目根目录再继续。第 2 步安装 Python建立独立环境如果尚未安装打开 Python Windows 下载页选择提供 Windows 64 位安装程序的 Python 3.12 版本。安装时启用 Python Launcher并勾选添加到 PATH 的选项。安装完成后关闭原 PowerShell 窗口再从项目目录重新打开。先检查版本py-3.12--version**成功标志**输出Python 3.12.x。若显示找不到py或对应版本先检查安装及 Launcher暂时不要继续装训练库。建立只供本项目使用的环境再安装图片读取库py-3.12-mvenv .venv .\.venv\Scripts\python.exe-mpipinstall--upgradepip .\.venv\Scripts\python.exe-mpipinstallpillow .\.venv\Scripts\python.exe-cimport sys; from PIL import Image; print(sys.executable); print(基础环境可用)**成功标志**输出路径指向dataset_project\.venv\Scripts\python.exe随后显示“基础环境可用”。.venv是项目环境后面的命令都直接调用它不需要执行激活脚本。第 3 步检查演示材料明确到底使用哪些文件本次生成教程时从压缩包读取到的信息如下项目本次文件检查数据名称燕麦数据集实测结构COCO 目标检测压缩包51.92 MiB压缩包内文件660本教程选定图片数655检测框记录数2735实际出现的类别编号数2原包划分test15train600val40执行检查命令.\.venv\Scripts\python.exe dataset_tools.py inspect--zipv4-coco.zipGet-Content-LiteralPath.\inspection.json-EncodingUTF8**成功标志**生成inspection.jsonkind为coco本次选定图片数为 655。文件中的warnings是需要核对的事项不要直接忽略结构可读取仍需核对标签或字段的真实含义。本稿完成的是文件检查除非另有实测记录以下训练步骤尚未在这套数据上完成不能把教程步骤写成已有实验成绩。第 4 步核对标签再生成训练副本本例使用矩形框标注。框告诉模型目标的位置和类别缺少类别名称映射时保留编号不凭图片猜测编号含义。执行.\.venv\Scripts\python.exe dataset_tools.py prepare--zipv4-coco.zip--outprepared Get-Content-LiteralPath.\prepared\preparation.json-EncodingUTF8 Get-Content-LiteralPath.\prepared\class_mapping.json-EncodingUTF8 Start-Process.\prepared\samples.html**成功标志**出现prepared目录浏览器打开样例页。这里的红色框来自原有标注不是模型预测。先看标签是否合理有问题就回到原文件核对。图片在 images 下框标签在 labels 下data.yaml 告诉模型到哪里找数据COCO 标注会转换成 YOLO 框格式。三个集合各有用途train用于学习val用于选择模型和观察调参效果test留到方案确定后最终评分。原包已有完整划分时沿用没有时采用可重复的约 80%/10%/10% 教学划分。具体数量看preparation.json不是所有数据都正好整除。split_manifest.json记录原文件、准备后的文件名和所属集合。像素完全相同的图片保持在同一集合相似照片、同场景和增强版本仍需单独核查。只做了随机教学划分时不宣称实验已满足严格论文评测要求。遇到“输出目录已存在”时先查看已有结果确实要重新准备可以改成--out prepared_v2并把后续命令的--data、--source、--class-map对应路径一起改掉。第 5 步安装训练库确认电脑能加载它继续在同一个 PowerShell、同一个项目目录执行.\.venv\Scripts\python.exe-mpipinstalltorch2.14.1torchvision0.29.1 --index-url https://download.pytorch.org/whl/cpu .\.venv\Scripts\python.exe-mpipinstallultralytics8.4.170 .\.venv\Scripts\python.exe-cimport torch, ultralytics; print(训练环境可用); print(CUDA:, torch.cuda.is_available()).\.venv\Scripts\python.exe-mpip freezerequirements-installed.txt**成功标志**输出“训练环境可用”。这里安装的是 CPU 版本CUDA: False正常不需要为此重新安装显卡驱动。requirements-installed.txt保存本机实际安装的版本。安装失败时先看最后一段报错磁盘空间不足就先释放空间连接超时就检查网络后重试提示某个包缺失时仍用上面这条.venv内的 Python 安装不换成另一套 Python。第 6 步只训练一轮先验证整条链路.\.venv\Scripts\python.exe run_model.py train--taskdetect--dataprepared/data.yaml--modelyolo26n.pt--epochs1--imgsz320--batch4--devicecpu--namesmoke Test-Path.\runs\smoke\weights\best.pt第一次运行会下载模型权重下载完成后才进入训练。终端中的轮次推进和损失值是运行信息不是程序报错。返回 PowerShell 提示符后第二条命令应输出True。参数含义--task detect指定目标检测--data指向准备好的数据--epochs 1只训练一轮--imgsz 320指定输入尺寸--batch 4每批处理 4 张--device cpu使用 CPU--name smoke把本次结果放进runs/smoke。**这一轮只用来确认脚本、数据和保存路径正常。**如果失败先修复不直接增加训练轮数。检测模型与分类模型不同不使用带 -cls 后缀的分类权重。第 7 步建立一份独立的入门实验一轮跑通后再执行.\.venv\Scripts\python.exe run_model.py train--taskdetect--dataprepared/data.yaml--modelyolo26n.pt--epochs30--imgsz320--batch4--devicecpu--namebaseline Test-Path.\runs\baseline\weights\best.ptStart-Process.\runs\baseline**成功标志**训练结束且权重存在输出文件夹内能找到weights/best.pt和results.csv。best.pt是按验证表现保留的权重last.pt是最后一轮权重。30 轮是入门实验设置不保证已经最优。电脑性能、图片尺寸和数量都会影响耗时。内存不足可改--batch 1每次改变实验方案时换一个--name例如baseline_batch1后面的模型路径也同步修改。第 8 步用没参与训练的图片评估先检查独立测试数据是否存在Test-Pathprepared/images/test输出True且目录内确有图片后再执行下面的命令。如果原包只有训练和验证集需要先制定独立评估方案不把验证集改个名字充当测试集。.\.venv\Scripts\python.exe run_model.pytest--taskdetect--dataprepared/data.yaml--modelruns/baseline/weights/best.pt--imgsz320--batch4--nametest_baseline Get-Content-LiteralPath.\runs\test_baseline\metrics.json-EncodingUTF8成功标志metrics.json保存了本次真实数值。主要看 mAP50 和 mAP50–95它们衡量检测框与标注的匹配表现不能写成整张图片分类准确率。不要复制别人的数值填进报告也不要根据测试分数反复挑参数调参使用验证集测试集用于最终检查。第 9 步打开预测结果看它到底认对了什么.\.venv\Scripts\python.exe run_model.py predict--taskdetect--modelruns/baseline/weights/best.pt--sourceprepared/images/test--class-map prepared/class_mapping.json--imgsz320--namepredictions Start-Process.\runs\predictions\predictions.htmlGet-Content-LiteralPath.\runs\predictions\predictions.json-EncodingUTF8**成功标志**浏览器显示预测图片和检测框、按类别汇总的数量JSON 中能找到每张图片的输出。predicted_counts 是模型预测数量不是人工标注的真实数量。置信度 0.9 不代表整个模型有 90% 的准确率。再试一张自己准备的图片在项目目录新建my_images放入一张实际 JPG 图片命名为demo.jpg。不要通过只改扩展名把其他格式冒充 JPG。然后执行.\.venv\Scripts\python.exe run_model.py predict--taskdetect--modelruns/baseline/weights/best.pt--sourcemy_images/demo.jpg --class-map prepared/class_mapping.json--imgsz320--namemy_photo Start-Process.\runs\my_photo\predictions.html新照片中若没有检测到目标先确认模型路径再检查图像场景和置信度。降低阈值可能增加误检不能把“框变多了”当成效果变好。最后把它整理成可展示的课程项目或毕设实验不要只交一张结果截图。把下面几部分串起来读者才能检查你的工作报告部分具体要写什么要解决的问题用户输入什么程序应该输出什么适用范围是什么演示材料实际使用多少文件选了哪些目录为什么不使用其他部分操作过程环境版本、关键命令、输出文件位置和检查结果实验或分析结果自己运行得到的数字和图片未运行的部分明确标注错误分析至少一个不理想的例子、可能原因和下一步验证方法局限样本数量、划分方式、标签可靠性和真实场景差异作为毕业设计时还需按照学校要求明确研究问题、对比方法和评价方式。跑通本教程属于起点不能直接等同于完成整个毕业设计。卡住时按报错现象处理现象先做的具体检查py找不到确认 Python Launcher 已安装关闭终端后从项目目录重新打开cant open file执行Get-Location和Get-ChildItem -Name确认当前目录、文件名和扩展名No module named ...用同一条.\.venv\Scripts\python.exe -m pip install ...安装提示缺少的包安装时连接超时核对网络再重试当前安装命令不因此删除数据或重做已成功步骤No space left或磁盘不足检查项目盘与系统盘空间清理后重试增加请求次数不能解决空间问题标签检查没有通过看错误指出的路径、类别或坐标核对原文件不随意删标签凑通过输出目录已存在先看已有结果重跑用新的--out或--name后续引用路径同步改掉分类结果是class_0查看prepared/class_mapping.json预测报告中的source_label会给出原目录名称内存不足将--batch 4改为--batch 1用新实验名重跑只有一个结果截图同时保存 JSON、环境版本和划分记录不能只根据图片判断模型表现技术用法可对照 Ultralytics 分类说明、分类目录格式 和 检测任务说明。这些是代码使用说明文中的数据数量以本次实际检查为准。数据与附件本文为内部教学草稿。数据尚未通过现有检查生成内部草稿等待核查。
返回列表