十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

无人机航拍行人检测数据集构建与YOLOv8实战训练指南

无人机航拍行人检测数据集构建与YOLOv8实战训练指南 简介目标检测是计算机视觉的核心任务旨在识别并定位图像中的特定对象。其原理通常基于深度学习模型通过卷积神经网络提取特征并预测目标的类别与边界框。这项技术在安防监控、自动驾驶和智能交通等领域具有重要价值。在无人机应用场景中航拍视角带来了独特的挑战如小目标检测和尺度剧烈变化。针对这些挑战专门构建场景化的数据集至关重要。本文围绕无人机航拍行人检测提供了一个包含1000张图像、涵盖多种场景和光照条件的数据集包。该资源包直接提供了VOC、COCO和YOLO三种主流格式的标签并附带了数据集划分脚本。文中以YOLOv8为例详细阐述了从环境配置、数据准备到模型训练、参数调优及部署考量的完整实战流程特别针对无人机视角下的小目标检测和模型轻量化部署提供了优化技巧为相关工程实践提供了即用性强的解决方案。1. 项目背景与数据集价值解析最近在做一个无人机视觉感知相关的项目核心需求是从航拍视角实时检测行人。市面上公开的通用行人检测数据集比如COCO、VOC里的行人部分绝大多数都是地面视角拍摄的背景、光照、行人姿态和尺度与无人机俯拍场景差异巨大。直接拿这些数据集训练的模型部署到无人机上效果往往惨不忍睹——要么把路灯影子当成人要么对远处的小目标行人完全“视而不见”。这种“水土不服”让我意识到必须得有一个专门针对无人机航拍场景的行人检测数据集。这就是我整理和分享这个“YOLO无人机航拍行人检测数据集”包的初衷。它不是简单地从网上下载的图片拼凑而是我为了一个实际项目用大疆的无人机在多个典型场景公园广场、校园道路、十字路口、建筑工地外围采集、清洗、标注后形成的。包里包含了1000张精心筛选的航拍图片涵盖了不同高度50米到120米、不同光照晴天、多云、傍晚、不同密度的人群分布。更重要的是它直接提供了VOC、COCO和YOLO三种格式的标签文件并且附带了数据集划分脚本和一份详细的YOLOv8训练教程。对于想快速切入无人机目标检测或者想验证自己算法在航拍场景下鲁棒性的朋友来说这个资源包可以帮你省下至少两周的数据准备时间。这个数据集的核心价值在于它的“场景特异性”和“即用性”。无人机视角下的行人通常呈现为顶部视角身体轮廓特征与地面视角截然不同且目标尺度变化范围极大近处目标大远处目标极小。同时航拍图像背景复杂常包含屋顶、道路、车辆、树木阴影等干扰。专门针对此场景标注的数据能极大地提升模型在该场景下的泛化能力和检测精度。而预置的多种格式标签和训练脚本则让你拿到手后几乎可以“开箱即用”快速跑通训练流程看到初步效果。2. 数据集内容详解与格式对比这个数据包解压后你会看到一个结构清晰的目录。理解每个部分的作用是高效使用它的第一步。2.1 文件目录结构无人机航拍行人检测数据集/ ├── images/ # 存放所有1000张原始图片 │ ├── 000001.jpg │ ├── 000002.jpg │ └── ... ├── annotations_voc/ # Pascal VOC格式的XML标签文件 │ ├── 000001.xml │ ├── 000002.xml │ └── ... ├── annotations_coco/ # COCO格式的JSON标签文件 │ └── instances_trainval.json # 通常将所有图片的标注合并到一个文件 ├── labels_yolo/ # YOLO格式的TXT标签文件 │ ├── 000001.txt │ ├── 000002.txt │ └── ... ├── train_val_test_split.py # 数据集划分脚本 └── README.md # 简要说明和训练教程指引images/文件夹里的1000张图片分辨率统一为1920x1080这是目前消费级无人机最常用的视频和拍照分辨率之一兼顾了细节和计算效率。图片命名从000001到001000方便程序按顺序读取。2.2 三种标签格式深度解析为什么一份数据要提供三种标签因为不同的训练框架或项目历史遗留代码可能要求不同的输入格式。了解它们的区别能让你在需要时自由转换。2.2.1 Pascal VOC格式VOC格式是早期目标检测数据集的标杆使用独立的XML文件为每张图片存储标注。打开一个000001.xml文件你会看到类似这样的结构annotation folderimages/folder filename000001.jpg/filename size width1920/width height1080/height depth3/depth /size object nameperson/name poseUnspecified/pose truncated0/truncated difficult0/difficult bndbox xmin562/xmin ymin308/ymin xmax598/xmax ymax380/ymax /bndbox /object !-- 可能有更多object标签 -- /annotation它的优点是结构清晰、人类可读性好并且包含了truncated目标是否被截断和difficult是否难以检测等辅助信息在模型评估时可以考虑这些因素。缺点是文件数量多一张图一个XML占用空间稍大且读取效率相对较低。许多传统的目标检测代码库如基于Caffe或早期TensorFlow Object Detection API的都支持或默认使用VOC格式。2.2.2 COCO格式COCO格式是目前学术界和工业界最流行的格式之一。它将所有图片的标注信息整合到一个巨大的JSON文件中。instances_trainval.json的结构主要包括几个部分images: 数组记录所有图片的信息id, file_name, width, height。categories: 数组记录类别信息本数据集中只有id: 0, name: ‘person‘。annotations: 数组记录所有标注框的信息。每个标注项包含id: 标注IDimage_id: 对应的图片IDcategory_id: 类别IDbbox: 边界框格式为[x_top_left, y_top_left, width, height]注意这是绝对像素坐标。area: 框的面积iscrowd: 通常是0表示单个对象。COCO格式的优点是紧凑一个文件管理所有标注便于分布式读取和索引并且其评估标准mAP.5:.95已成为衡量目标检测模型性能的黄金标准。MMDetection、Detectron2等主流框架都原生支持COCO格式。缺点是JSON文件一旦损坏所有标注都受影响且文件较大时加载到内存可能较慢。2.2.3 YOLO格式YOLO格式是专为YOLO系列算法设计的极其简洁。每个图片对应一个同名的.txt文件。文件里每一行代表一个目标格式为class_id x_center y_center width height这里的坐标是归一化后的相对坐标即相对于图片宽度和高度的比例值范围在0到1之间。例如一个000001.txt文件内容可能是0 0.302083 0.318519 0.018750 0.066667 0 0.713542 0.500000 0.025000 0.0925930: 类别ID对应“person”。0.302083: 边界框中心点的x坐标 580 / 1920 ≈ 0.302083。0.318519: 边界框中心点的y坐标 344 / 1080 ≈ 0.318519。0.018750: 边界框宽度 36 / 1920 ≈ 0.018750。0.066667: 边界框高度 72 / 1080 ≈ 0.066667。YOLO格式的优点是极其轻量读写速度快占用存储小完全匹配YOLO训练时数据加载的预期。Ultralytics YOLOv5/v8/v9、Darknet等框架都直接使用此格式。缺点是可读性差且丢失了VOC/COCO格式中的一些元信息如truncated。实操心得在大多数情况下如果你使用最新的Ultralytics YOLOv8进行训练强烈建议直接使用labels_yolo/下的标签这是最原生的格式避免任何转换可能带来的精度损失或错误。VOC和COCO格式更多是为你集成到其他训练管线或使用其他评估工具时提供便利。3. 数据集划分脚本使用与策略拿到1000张数据怎么划分训练集、验证集和测试集手动分太麻烦而且不科学。包里提供的train_val_test_split.py脚本就是干这个的。3.1 脚本核心逻辑与使用这个Python脚本的核心逻辑很简单获取images文件夹下所有图片的路径。随机打乱顺序确保划分的随机性。按照预设的比例默认是 训练集:验证集:测试集 70%:20%:10%进行划分。生成三个文本文件train.txt,val.txt,test.txt每个文件里包含对应集合的图片路径相对路径或绝对路径。使用方式非常简单。在终端中进入数据集根目录运行python train_val_test_split.py运行后你会在根目录下看到生成的train.txt,val.txt,test.txt。同时脚本通常也会在labels_yolo/目录下创建train/,val/,test/子文件夹并将对应的标签文件移动进去形成YOLO训练所需的标准目录结构。3.2 划分策略的考量默认的7:2:1划分是一个不错的起点但并非金科玉律。你需要根据自己项目的实际情况调整数据量极大时10万张验证集和测试集的比例可以更小比如95%:2.5%:2.5%因为即使很小的比例其绝对数量也足够用于评估。数据类别极度不均衡时需要采用分层抽样。确保每个集合中各个类别虽然本数据集只有“行人”一类但可以引申到多类别场景的比例与整体数据集的比例大致相同。简单的随机划分可能导致某个集合中缺少某个稀有类别的样本。原脚本可能没有这个功能如果需要可以修改脚本使用sklearn.model_selection中的StratifiedShuffleSplit。特定场景验证需求如果你的数据来自多个不同场景如本数据集中可能包含公园、街道、工地你可能希望确保验证集和测试集能覆盖所有场景以检验模型的泛化能力。这时可以采用按场景划分而不是完全随机。例如确保每个场景的图片都按比例进入三个集合。踩坑提醒务必确保划分时图片和标签的对应关系不被破坏这是最容易出错的地方。脚本在移动或复制标签文件时必须严格保持文件名的一致性除了扩展名。一个简单的检查方法是随机从train.txt中挑几个图片名去labels_yolo/train/文件夹下找同名的.txt文件看是否存在。如果使用COCO格式则无需移动文件但需要在JSON文件中根据划分好的图片ID列表生成对应的train.json和val.json。3.3 划分后的数据结构对于YOLO训练最终你希望的数据结构是这样的无人机航拍行人检测数据集/ ├── images/ │ ├── train/ # 存放训练集图片 (脚本可能自动创建并移动) │ │ ├── 000001.jpg │ │ └── ... │ ├── val/ # 存放验证集图片 │ └── test/ # 存放测试集图片 (可选训练时不用) └── labels/ ├── train/ # 存放训练集标签 │ ├── 000001.txt │ └── ... ├── val/ # 存放验证集标签 └── test/ # 存放测试集标签train.txt等文件里记录的就是images/train/000001.jpg这样的路径。你需要根据你使用的训练框架如YOLOv8准备一个数据集配置文件如dataset.yaml来指向这些路径和类别。4. 基于YOLOv8的训练教程实战这里以目前最流行、最易用的Ultralytics YOLOv8为例给出从零开始的训练教程。假设你已经划分好数据并整理成了上面所述的标准结构。4.1 环境搭建与安装首先创建一个干净的Python虚拟环境是个好习惯可以避免包依赖冲突。conda create -n yolo-drone python3.8 conda activate yolo-drone然后安装Ultralytics包它包含了YOLOv8的所有依赖。pip install ultralytics此外建议安装一些辅助工具包用于可视化pip install opencv-python matplotlib seaborn pandas验证安装是否成功python -c “from ultralytics import YOLO; print(YOLO(‘yolov8n.pt’))”如果没有报错说明环境OK。4.2 准备数据集配置文件在数据集根目录下创建一个dataset.yaml文件。这个文件是YOLOv8读取数据的入口。# dataset.yaml path: /home/your_username/datasets/无人机航拍行人检测数据集 # 数据集的绝对路径 train: images/train # 训练集图片路径相对于 path val: images/val # 验证集图片路径相对于 path # test: images/test # 测试集路径可选 # 类别数 nc: 1 # 类别名称列表 names: [‘person’]关键点解析path: 必须使用绝对路径相对路径在训练过程中容易出错。train/val: 这里指向的是图片目录。YOLOv8会自动在同级目录的labels文件夹下寻找同名的标签文件。例如图片在{path}/images/train/000001.jpg它会去{path}/labels/train/000001.txt找标签。这种结构是YOLO系列的标准约定。nc和names: 明确类别数量和名称这里只有“行人”一类。4.3 模型选择与训练启动YOLOv8提供了不同大小的预训练模型从轻量到高精度yolov8n.pt(nano) - 最快精度最低yolov8s.pt(small)yolov8m.pt(medium)yolov8l.pt(large)yolov8x.pt(extra large) - 最慢精度通常最高对于无人机嵌入式平台计算资源有限yolov8n或yolov8s是首选。对于在服务器上追求精度的研究可以从yolov8m或yolov8l开始。启动训练的命令非常简单yolo taskdetect modetrain modelyolov8s.pt datadataset.yaml epochs100 imgsz640 batch16 workers4让我们拆解这个命令taskdetect: 指定任务为目标检测。modetrain: 训练模式。modelyolov8s.pt: 使用小模型并加载其预训练权重在COCO等大数据集上训练过的这是迁移学习的关键能极大加速收敛并提升最终精度。datadataset.yaml: 指定我们刚创建的数据集配置文件。epochs100: 训练轮数。对于1000张图的小数据集100轮通常足够可以观察损失曲线是否已平稳。imgsz640: 输入图片缩放到的尺寸。YOLO系列通常使用正方形输入。640是一个平衡速度和精度的常用值。如果你的原始图片是1920x1080训练时会统一缩放到640x640。注意这会改变长宽比可能引入形变但对于行人这类非刚性目标影响通常可接受。你也可以尝试imgsz832以获得更好精度尤其对小目标但会显著增加显存消耗和训练时间。batch16: 批次大小。根据你的GPU显存调整。显存不足时可以减小batch同时可以适当增加workers来维持数据加载速度。workers4: 数据加载的进程数。可以加快数据从硬盘到GPU的流水线速度。通常设置为CPU核心数的2-4倍。训练开始后终端会输出日志并且会在runs/detect/train/目录下生成一系列结果包括weights/: 保存的最佳模型(best.pt)和最后一轮模型(last.pt)。args.yaml: 本次训练的所有参数备份。results.csv和results.png: 训练过程中的指标曲线损失、mAP等。confusion_matrix.png: 混淆矩阵。val_batchX_labels.jpg和val_batchX_pred.jpg: 验证批次的可视化结果可以直观看到模型预测效果。4.4 关键训练参数调优与监控训练不是设好参数就放任不管需要根据反馈进行监控和调整。1. 学习率lr0 学习率是训练中最重要的超参数之一。YOLOv8有自动调整学习率的功能但如果你发现训练初期损失下降很慢或者震荡剧烈可以尝试手动调整。默认基础学习率是0.01。yolo train ... lr00.001 # 使用更小的学习率训练更稳定但可能更慢对于小数据集较小的学习率如0.001有时能防止过拟合。2. 数据增强 YOLOv8默认开启了丰富的数据增强如Mosaic、MixUp、随机翻转、色彩抖动等这对于防止过拟合、提升模型鲁棒性至关重要。对于无人机小目标检测有两个增强参数特别值得关注mosaic1.0: Mosaic增强的概率。它将四张图拼成一张能极大地增加小目标的上下文信息对小目标检测非常有益。默认是1.0100%概率使用可以保持。copy_paste0.0: 复制粘贴增强。对于行人检测复制粘贴可能产生不合理的场景如人出现在空中建议保持为0或非常小的值。3. 早停patience 如果验证集指标在连续若干轮内没有提升则自动停止训练节省时间。默认patience50。对于100轮的总轮数可以设置为20或30。yolo train ... patience304. 监控指标 训练过程中最需要关注的几个指标是train/box_loss,train/cls_loss: 训练集边界框和分类损失应稳步下降。val/box_loss,val/cls_loss: 验证集损失也应下降但最终会趋于平稳或轻微上升过拟合迹象。metrics/mAP50(B):这是核心评估指标。表示在IoU阈值为0.5时的平均精度mAP。对于行人检测这个值通常是我们最关心的。训练后期这个值会逐渐上升并趋于稳定。metrics/mAP50-95(B): 在IoU阈值从0.5到0.95步长0.05的平均mAP是更严格的指标。如果发现训练集损失持续下降但验证集mAP很久不升甚至下降很可能出现了过拟合。对策包括增加数据增强强度、使用更小的模型、添加权重衰减(weight_decay)、减少训练轮数、收集更多数据。4.5 模型验证与测试训练完成后使用最佳模型在验证集上进行评估yolo taskdetect modeval modelruns/detect/train/weights/best.pt datadataset.yaml这会输出详细的评估指标包括精确率Precision、召回率Recall、mAP50、mAP50-95等。重点关注召回率它反映了模型找出所有行人的能力。在安防等场景下高召回率不漏检比高精确率减少误检更重要。如果你想在测试集images/test/上看看最终效果可以使用预测模式yolo taskdetect modepredict modelruns/detect/train/weights/best.pt sourceimages/test save_txtTrue save_confTruesave_txtTrue: 会保存预测的边界框为YOLO格式的txt文件便于后续分析。save_confTrue: 在txt文件中同时保存每个检测框的置信度。预测结果会保存在runs/detect/predict/目录下包含带预测框的图片和标签文件。5. 无人机场景下的特殊挑战与优化技巧用通用数据集训练YOLO是一回事在无人机航拍场景下获得好效果是另一回事。这里分享几个针对性的优化经验。5.1 小目标检测的专项优化无人机高空拍摄行人目标可能只占几十个像素是典型的小目标检测问题。YOLO默认的Anchor锚框和特征金字塔可能对小目标不够友好。1. 修改模型结构以YOLOv8为例 YOLOv8是Anchor-Free的但它的特征金字塔层P3, P4, P5对应不同尺度的检测。小目标主要在浅层特征图P3上检测。你可以尝试修改模型配置文件需要自定义模型增加一个更浅的检测层比如来自Backbone中更早的层专门用于检测极小目标。不过这需要一定的模型架构知识。一个更简单的方法是直接使用更高分辨率的输入imgsz832或imgsz1024这能直接为小目标提供更多像素信息但会大幅增加计算量。2. 数据增强侧重小目标 除了默认的Mosaic可以尝试专门针对小目标的增强随机裁剪后放大随机裁剪图片的一部分然后缩放到原尺寸这相当于放大了小目标。过采样小目标丰富的图片在数据加载时如果某张图片里小目标比如面积小于32x32像素数量多就让它有更高概率被采样到。这需要自定义数据加载逻辑。3. 损失函数调整 YOLOv8使用的损失函数已经做了很多优化。但对于小目标可以关注分类损失和回归损失的平衡。有时小目标分类错误比定位不准更严重。不过直接调整损失函数权重如cls_pw,obj_pw需要谨慎通常建议先使用默认值。5.2 处理尺度剧烈变化与密集场景无人机在升降过程中目标尺度变化极大。同一张图片中近处行人和远处行人大小可能相差十倍以上。1. 多尺度训练 YOLOv8支持多尺度训练可以在一定范围内随机缩放输入图片尺寸。这能提升模型对不同尺度目标的鲁棒性。通过参数scale0.5可以启用默认范围是0.5到1.5倍。对于无人机数据可以考虑将范围设得更大一些例如scale0.3到1.7。yolo train ... scale0.52. 针对密集场景的后处理 当人群非常密集时检测框容易重叠非极大值抑制NMS的参数iou和conf就很重要。iou用于NMS的IoU阈值。默认0.7。对于密集目标可以适当降低如0.5或0.45让更重叠的框也能被保留下来但可能会增加误检。conf置信度阈值。预测时低于此阈值的框会被过滤。默认0.25。在密集场景下如果有很多重叠的、低置信度的真目标可以适当降低如0.2或0.15以提高召回率但同样会增加计算量和误检。在推理时可以通过参数调整yolo predict ... iou0.5 conf0.25.3 实际部署中的性能权衡训练出的模型最终要部署到无人机或地面站。这时需要在精度、速度和模型大小之间做权衡。1. 模型压缩与量化导出为ONNX或TensorRT使用yolo export命令将PyTorch模型导出为ONNX格式然后可以利用TensorRT进行FP16甚至INT8量化在NVIDIA Jetson等边缘设备上获得数倍的加速。yolo export modelruns/detect/train/weights/best.pt formatonnx imgsz640使用更小的模型如果yolov8s在目标设备上仍然太慢可以尝试yolov8n或者寻找为边缘设备优化的模型变体。2. 输入分辨率与推理速度 推理时使用的imgsz直接影响速度。训练时用640部署时如果对速度要求极高可以尝试用480甚至320但精度会显著下降。一个折中的办法是动态分辨率根据无人机飞行高度可通过其他传感器获得动态调整输入分辨率高空时用低分辨率低空时用高分辨率。3. 利用无人机先验信息 无人机不是盲目的摄像头。它的GPS位置、高度、姿态俯仰、横滚角等信息都可以作为先验知识来优化检测。例如知道高度后可以大致推算出地面采样距离GSD从而估算出行人的大概像素大小用来过滤掉明显过大或过小的错误检测框。这需要在后处理逻辑中融入这些传感器数据。6. 从训练到部署的完整链路与常见问题排查走通训练只是第一步让模型在实际飞控系统中稳定运行才是终点。6.1 完整链路梳理数据准备与标注使用本数据集或在此基础上增量标注自己的数据。环境配置与训练如前所述在服务器或高性能PC上完成模型训练与验证。模型导出与优化将最佳模型best.pt导出为部署友好的格式如ONNX、TensorRT Engine或OpenVINO IR。嵌入式环境部署硬件选型根据算力需求选择Jetson系列、瑞芯微RK3588、华为昇腾Atlas等。推理框架集成在目标平台上使用对应的推理引擎TensorRT, OpenVINO, TNN等加载优化后的模型。前后处理集成将图像预处理缩放、归一化和后处理NMS、坐标转换代码用C等高效语言实现并与推理引擎对接。飞控系统对接将检测模块的输出行人边界框、置信度、位置通过串口、ROS话题或SDK接口发送给飞控系统用于后续的避障、跟踪或航点规划。实地测试与迭代在真实飞行环境中测试收集bad case漏检、误检分析原因针对性补充数据或调整模型/参数进行迭代优化。6.2 训练过程中的常见问题与排查问题1Loss损失为NaN或突然变得巨大。可能原因学习率设置过高数据中有损坏的图片或标签如坐标超出0-1范围批次内图片尺寸差异过大如果未统一缩放。排查检查数据运行一个简单的脚本遍历所有标签文件确保坐标值在[0,1]区间内。检查图片用OpenCV尝试读取每一张图片看是否有损坏。降低学习率lr0例如从0.01降到0.001。确保训练命令中imgsz参数已设置所有图片会被统一缩放。问题2mAP指标一直很低且不上升。可能原因数据标注质量差框不准、漏标类别定义错误dataset.yaml中的names与标签文件里的class_id不对应模型容量太小对于复杂场景yolov8n可能不够预训练权重不匹配用分类预训练权重初始化检测模型但这种情况在YOLOv8中较少因为它提供的是检测预训练权重。排查可视化标注使用YOLOv8自带的工具或写个脚本把训练集中的图片和标注框画出来肉眼检查标注质量。命令yolo taskdetect modetrain modelyolov8s.pt datadataset.yaml epochs1只跑1个epoch然后查看runs/detect/train/val_batch*_labels.jpg看标注框是否准确。检查dataset.yaml中的nc和names是否与标签文件一致。本数据集中class_id应为0对应names: [‘person’]。换一个更大的模型试试比如从yolov8s换成yolov8m。问题3验证集Loss开始上升mAP开始下降过拟合。可能原因训练数据太少模型太复杂训练轮数太多数据增强不够。排查与解决使用早停patience自动停止。增加数据增强的强度和多样性。YOLOv8默认增强很强但如果你的场景非常特殊可以考虑自定义增强。如果可能收集更多数据特别是覆盖不同天气、光照、场景的数据。尝试模型正则化技术如增加权重衰减weight_decay默认是0.0005可以尝试0.001。使用更小的模型。问题4训练速度非常慢。可能原因batch_size设置太小workers设置太小导致数据加载成为瓶颈使用了过大的imgsz如1280CPU或磁盘IO性能不足。排查在GPU显存允许的情况下尽量增大batch_size。大的batch通常还能使训练更稳定。将workers设置为CPU逻辑核心数的2-4倍。但注意设置过高可能导致内存占用过大。监控GPU利用率nvidia-smi如果长期低于80%很可能是数据加载CPU/磁盘或代码其他部分成了瓶颈。检查磁盘是否是SSD数据加载代码是否高效。6.3 部署时的常见坑点坑点1训练和推理时的预处理不一致。这是导致“模型训练很好部署后效果差”的最常见原因。训练时YOLOv8的预处理包括从RGB到BGR如果需要、缩放、归一化除以255、通道顺序变换HWC to CHW。在部署时你必须用完全相同的顺序和参数对输入图像进行预处理。最稳妥的方式是直接使用Ultralytics提供的导出模型和配套的预处理代码或者仔细查看训练时生成的结果文件夹里的args.yaml里面有详细的预处理参数。坑点2坐标转换错误。模型预测出的边界框坐标是相对于网络输入尺寸如640x640的归一化坐标。而你的原始图像可能是1920x1080。你需要将预测框坐标反算回原始图像尺寸。同时如果预处理时进行了填充Letterbox以保持长宽比那么反算时还需要考虑填充的像素。YOLOv8的预测结果默认已经处理了Letterbox并尝试将坐标映射回原始图像但自己写后处理代码时务必小心验证。坑点3边缘设备上的性能不达预期。原因没有充分利用硬件加速推理框架版本或配置不对内存带宽瓶颈。解决对于NVIDIA Jetson务必使用TensorRT并进行FP16或INT8量化。确保使用的推理引擎版本与CUDA、cuDNN等驱动版本兼容。优化前后处理代码避免在Python循环中进行大量计算尽量使用向量化操作或移至C。使用性能分析工具如Nsight Systems for Jetson定位瓶颈。最后记住一点无人机视觉感知是一个系统工程数据集是基石但模型训练、优化和部署中的每一个细节都影响着最终效果。这个数据集包为你提供了一个高质量的起点和一套完整的工具链希望能帮助你更快地将想法落地让无人机真正“看得懂”地面上的行人。在实际项目中持续收集真实场景下的困难样本如阴影下的行人、密集人群、骑自行车的人等来丰富你的数据集是提升模型鲁棒性的不二法门。本文还有配套的精品资源点击获取
返回列表