1. 项目概述:当无人机遇见YOLO,田野里的“罪恶之花”无处遁形
干这行十几年,我经手过不少计算机视觉项目,但把无人机、YOLO和目标检测绑在一起,去解决农村田园里非法种植罂粟花这种具体又棘手的实际问题,总能让我感到兴奋。这不仅仅是一个技术Demo,它直接关乎公共安全和社会治理的效能提升。想象一下,广袤的农村地区,地形复杂,人力巡查成本高、盲区多,而一架搭载高清摄像头的无人机,配合一个训练有素的AI模型,就能在短时间内完成大范围、高精度的扫描。这个项目的核心,就是构建一个“天空之眼”系统,让科技成为守护田园净土的利器。
简单来说,我们要做的是一个无人机航拍场景下的非法种植罂粟花智能检测预警系统。它的工作流很清晰:无人机按照预设或实时规划的航线进行航拍,将高清视频流或图片实时回传至地面站或边缘计算设备;部署在设备上的目标检测模型(这里我们选用YOLOv7系列)对每一帧画面进行实时分析,识别出画面中疑似罂粟花的植株;一旦检测到目标,系统立即触发预警,将位置信息(通常结合GPS坐标)、图片证据等推送给执法人员,从而实现“发现-定位-预警”的闭环。这个系统的价值在于变“人海战术”为“科技赋能”,大幅提升监测的覆盖范围、效率和隐蔽性。
那么,为什么是YOLOv7,又为什么要对比其tiny、l、x不同版本呢?这正是项目的技术精髓所在。无人机边缘计算场景有其特殊性:计算资源有限(机载或小型地面站)、需要实时或近实时处理、模型必须在复杂自然背景下(不同光照、遮挡、作物混杂)保持高精度。YOLOv7作为当前单阶段目标检测的标杆,在精度和速度上取得了很好的平衡。而tiny、l、x代表了从极致的轻量化到顶级的精度性能谱系。通过开发构建并对比这三个系列的模型,我们旨在为实际部署找到最合适的“性价比”平衡点——在满足最低精度要求的前提下,追求最快的推理速度,以适应不同性能的无人机平台和任务需求(例如,快速普查可用tiny,重点区域精细核查可用x)。接下来,我将深入拆解从数据准备、模型选型、训练调优到系统集成的全流程,分享其中踩过的坑和积累的经验。
2. 核心需求解析与系统设计思路
2.1 业务场景与核心挑战
在深入代码之前,我们必须吃透这个业务场景的特殊性,这直接决定了我们所有的技术选型。无人机航拍检测罂粟花,至少面临以下几大核心挑战:
- 目标尺度多变且相对较小:无人机飞行高度从几十米到上百米不等,画面中的罂粟花可能只有几十甚至十几个像素点,属于典型的小目标检测问题。同时,同一画面中可能同时存在近处的大株和远处的小株,尺度变化剧烈。
- 背景极其复杂:农村田园场景并非纯净的实验室背景。画面中会包含多种农作物(如玉米、小麦、蔬菜)、杂草、树木、房屋、道路以及裸露的土地。罂粟花在某些生长阶段可能与某些野花或农作物幼苗外形相似,极易造成误检。
- 成像条件不稳定:户外环境光照变化大(清晨、正午、黄昏、阴天),可能存在反光、阴影、雾气等干扰。无人机飞行带来的画面抖动、旋转、缩放也是必须考虑的因素。
- 实时性要求与算力限制:为了达到高效的巡查目的,系统需要尽可能实时处理视频流。但无人机机载计算设备(如Jetson系列、高通飞行平台)或便携式地面站的算力、功耗和散热都有限制,模型不能过于庞大。
- 数据获取与标注困难:涉及敏感目标,公开数据集极少。需要自行采集或通过合规渠道获取数据,且标注工作需要专业的知识来准确区分罂粟花与其他相似植物,成本高。
2.2 技术选型:为什么是YOLOv7及其变体?
面对上述挑战,我们选择YOLOv7系列模型作为检测核心,是基于以下考量:
- 卓越的精度-速度平衡:YOLOv7在COCO等标准数据集上,在相近推理速度下,精度超越了众多之前的YOLO版本和部分两阶段检测器。其提出的“可训练bag-of-freebies”策略,如重参数化卷积、模块级标签分配等,在不增加推理成本的前提下显著提升了模型性能。
- 丰富的模型尺寸谱系:YOLOv7官方提供了从YOLOv7-tiny(极致轻量)到YOLOv7-W6(超高精度)的不同规格模型。我们重点关注的
tiny、l(large)、x(extra large)正好覆盖了边缘计算到服务器级部署的需求。- YOLOv7-tiny:参数量最少,计算量最低,推理速度最快。适合部署在算力极其有限的边缘设备(如入门级机载计算机)上,进行高帧率的快速筛查,优先保证“不漏过”,可接受一定的误报(后续可由人工复核)。
- YOLOv7:平衡型模型。在主流边缘计算设备(如NVIDIA Jetson AGX Orin)上能实现较好的实时性(如>30 FPS),同时保持较高的精度。是大多数实际场景的首选。
- YOLOv7-x:参数量和计算量最大,精度最高。适合部署在算力较强的地面工作站或服务器上,用于对无人机传回的重点区域图片或视频进行二次精细分析,追求最高的检出率和最低的误报率,为执法提供更可靠的依据。
- 良好的工程化支持:YOLOv7基于PyTorch,生态完善,易于进行模型裁剪、量化、转换(到TensorRT, ONNX等),便于集成到实际的无人机系统中。
2.3 系统架构设计
我们的系统采用“端-边-云”协同的架构思路,根据实际资源灵活部署。
端侧(无人机):
- 任务:负责图像/视频采集、编码、回传。在具备较强机载算力的无人机上,可以尝试部署YOLOv7-tiny模型进行前端实时检测。检测结果(边界框、类别、置信度)连同低分辨率图片和GPS坐标一起回传,极大减轻传输带宽压力。
- 硬件参考:大疆Matrice 300 RTK + Manifold 2-G机载计算机,或自定义无人机搭载NVIDIA Jetson Nano/Orin NX。
边侧(地面站/移动设备):
- 任务:这是核心部署场景。地面站(如加固笔记本电脑、移动计算箱)接收无人机通过图传或4G/5G回传的高清视频流。这里部署YOLOv7或YOLOv7-x模型,进行实时或近实时分析。边侧算力相对充足,可以进行更精确的检测,并立即生成包含地理信息的预警。
- 硬件参考:搭载高性能GPU(如RTX 4060 Laptop GPU)的移动工作站。
云侧(指挥中心服务器):
- 任务:接收所有边侧推送的预警信息、原始证据图片/视频片段,进行汇聚、存储、复核与任务管理。可以利用云端更强的算力,对存疑的检测结果用更大的模型(如YOLOv7-x甚至集成其他模型)进行二次分析,并可视化在地图上。
- 功能:提供Web管理后台,用于查看预警历史、管理无人机任务、生成统计报表等。
注意:在实际项目中,并非所有环节都需要AI模型。对于网络条件极差或无人机续航优先的场景,可采用“端侧仅采集回传,边/云侧集中处理”的模式。我们的模型开发要能适配这三种部署位置。
3. 数据准备与处理:模型性能的基石
3.1 数据采集与标注
“垃圾进,垃圾出”在AI领域是铁律。对于罂粟花检测,数据质量直接决定模型上限。
- 数据来源:通过与相关单位合作,在符合法律法规和伦理要求的前提下,在可控环境(如封闭试验田)中模拟种植,或使用已获批的历史查处影像资料。绝对禁止使用来源不明或非法的数据。
- 采集规范:
- 多高度:模拟无人机不同作业高度(如50米、80米、120米),获取不同尺度的目标图像。
- 多时段:覆盖清晨、正午、傍晚、阴天等多种光照条件。
- 多角度:包含垂直正射和一定倾斜角的影像,以模拟无人机转弯、悬停时的视角。
- 多背景:确保背景包含常见的农田作物、荒地、林地、道路、水体等。
- 数据格式:采集高清图片(如4000×3000)和视频。视频可用于抽帧扩充数据集,但要注意帧间冗余。
- 标注工作:
- 工具:使用LabelImg、CVAT、Roboflow等工具。
- 规范:
- 类别:目前可仅标注“poppy”(罂粟花)。未来可扩展“疑似”或相似植物类别(如虞美人)进行困难负样本挖掘。
- 框体:紧密包围目标植株,包括花朵和部分茎叶(如果可见)。对于成片种植的,应尽量对每株进行独立标注,除非它们紧密簇拥难以区分。
- 难点处理:对于被轻微遮挡、模糊、处于图像边缘的目标,仍需尽力标注。对于完全无法辨认的,则舍弃。
- 数据增强策略:在标注后,我们需要通过程序化手段扩充数据,增加模型鲁棒性。除了常规的旋转、翻转、裁剪、色彩抖动外,针对本项目需特别关注:
- Mosaic增强:YOLO系列常用的利器,能有效提升小目标检测能力,非常适合无人机俯瞰视角下多尺度小目标的场景。
- MixUp/CutMix:提升模型对图像混合和局部遮挡的泛化能力。
- 模拟天气:添加随机雾气、雨滴、运动模糊等效果,以应对复杂天气。
- 高斯噪声与JPEG压缩:模拟图传过程中可能出现的信号干扰和压缩失真。
3.2 数据集构建与划分
我们将标注好的数据构建成YOLO格式(每个图像对应一个.txt文件,内容为class_id x_center y_center width_height,坐标已归一化)。
- 目录结构:
dataset/ ├── images/ │ ├── train/ │ ├── val/ │ └── test/ └── labels/ ├── train/ ├── val/ └── test/ - 划分比例:通常按7:2:1或8:1:1划分训练集、验证集和测试集。关键点在于,必须保证划分时各类别(本例中仅一类)的比例在不同集合中大致相同,且测试集应尽可能包含与训练集差异较大的场景(如新的地块、极端光照),以检验泛化能力。
- 创建数据集配置文件:创建一个
data/poppy.yaml文件,内容如下:# 数据集路径 path: /path/to/dataset train: images/train val: images/val # test: images/test # 可选 # 类别数 nc: 1 # 类别名称 names: ['poppy']
4. 模型训练与深度调优实战
4.1 环境搭建与基准训练
我们使用PyTorch和Ultralytics YOLOv7官方代码库。
- 环境配置:
# 克隆仓库 git clone https://github.com/WongKinYiu/yolov7.git cd yolov7 # 安装依赖 (建议使用Python虚拟环境) pip install -r requirements.txt # 确保CUDA可用 - 下载预训练权重:从官方仓库下载
yolov7-tiny.pt,yolov7.pt,yolov7x.pt等预训练权重。使用在ImageNet等大数据集上预训练的权重进行迁移学习,能加速收敛并提升最终性能。 - 基准训练命令:
# 训练YOLOv7-tiny python train.py --weights yolov7-tiny.pt --data data/poppy.yaml --epochs 300 --batch-size 32 --img 640 --device 0 --name yolov7_tiny_poppy # 训练YOLOv7 python train.py --weights yolov7.pt --data data/poppy.yaml --epochs 300 --batch-size 16 --img 640 --device 0 --name yolov7_poppy # 训练YOLOv7-x (需要更大显存) python train.py --weights yolov7x.pt --data data/poppy.yaml --epochs 300 --batch-size 8 --img 640 --device 0 --name yolov7x_poppy--img 640: 输入图像尺寸。对于小目标,可以尝试增大尺寸(如1280),但这会显著增加计算量和显存消耗,需要权衡。我们的初步实验从640开始。--batch-size: 根据GPU显存调整。batch size影响训练稳定性和梯度估计质量。--epochs: 迭代轮数。300是一个常用起点,可通过观察验证集损失曲线决定是否早停。--device: 指定GPU。
4.2 针对小目标与复杂背景的调优策略
基准训练后,模型可能对小目标和复杂背景表现不佳。以下是针对性的调优“组合拳”:
修改模型结构(以YOLOv7为例):
- 注意力机制:在Backbone或Neck部分引入轻量化的注意力模块,如SimAM、EMA,让模型更关注前景目标而非复杂背景。这通常能稳定提升1-2个点的mAP。
- 改进特征金字塔:YOLOv7使用了PANet。我们可以尝试借鉴BiFPN的思想,增加更多跨尺度特征融合路径,特别是加强浅层高分辨率特征(包含更多小目标细节)向深层特征的流动。这需要对
models/yolo.py中的Detect和IDetect等相关模块进行修改。 - 替换SPP/SPPF:尝试使用更高效的空间金字塔池化模块,如SPD-Conv,它在进行下采样时能更好地保留特征信息,对小目标友好。
优化训练策略:
- 自适应锚框计算:YOLO默认使用COCO数据集的锚框。我们的罂粟花目标尺寸分布完全不同。在训练前,使用
utils/autoanchor.py脚本在自定义数据集上重新聚类生成9组先验锚框,并更新模型配置文件。 - 损失函数调优:
- CIoU Loss:YOLOv7默认使用CIoU Loss,它考虑了重叠面积、中心点距离和长宽比。对于小目标,中心点定位误差影响更大,可以保持。
- 分类损失:可以尝试使用
Focal Loss或Varifocal Loss来缓解正负样本(前景/背景)极度不均衡的问题。罂粟花在整张图中占比通常极小。
- 数据增强强化:
- 增大
mosaic和mixup的概率。 - 在
hyp.scratch.yaml配置文件中,调整色彩空间增强参数(hsv_h,hsv_s,hsv_v)的幅度,模拟更强烈的光照变化。 - 启用
copy_paste增强(需谨慎,确保粘贴的目标符合现实空间逻辑),这能有效增加小目标的样本数量。
- 增大
- 自适应锚框计算:YOLO默认使用COCO数据集的锚框。我们的罂粟花目标尺寸分布完全不同。在训练前,使用
多尺度训练与测试:
- 训练:使用
--multi-scale参数,让模型在每次迭代时接受随机尺寸(如[320, 960])的输入,提升尺度不变性。 - 测试:使用Test Time Augmentation (TTA),对同一张测试图像进行多尺度(如
[640, 1280])和翻转,然后融合结果,能稳定提升精度,但会成倍增加推理时间。仅在对精度有极致要求且不计较速度的云端复核环节使用。
- 训练:使用
4.3 训练过程监控与评估
训练时,务必使用TensorBoard或W&B监控关键指标:
- 损失曲线:关注
train/box_loss,train/obj_loss,train/cls_loss以及对应的val损失。理想情况是训练损失平稳下降,验证损失同步下降后趋于平稳。若验证损失上升,可能过拟合。 - 性能指标:
mAP@0.5:IoU阈值为0.5时的平均精度,是主要参考。mAP@0.5:0.95:IoU阈值从0.5到0.95(步长0.05)的平均mAP,更严格。precision和recall:绘制P-R曲线。在安防场景,我们通常希望recall(召回率)尽可能高,即“宁可错杀,不可放过”,因为漏报的代价远高于误报(误报可由人工排除)。可以通过调整推理时的--conf-thres置信度阈值来平衡二者。
- 可视化验证:定期使用
detect.py在验证集图片上运行,直观查看检测效果,特别是小目标、密集目标和复杂背景下的表现。
5. 模型导出与边缘部署优化
5.1 模型格式转换
训练完成后,得到.pt文件。为了高效部署,需要转换为优化后的格式。
导出为ONNX:ONNX是一个开放的模型交换格式,便于跨框架部署。
python export.py --weights runs/train/yolov7_poppy/weights/best.pt --img 640 --batch 1 --dynamic --simplify --opset 12--dynamic: 导出动态尺寸的ONNX,便于后续处理不同分辨率的输入。--simplify: 对计算图进行简化。- 得到
best.onnx文件。
转换为TensorRT引擎(针对NVIDIA平台):TensorRT是NVIDIA的高性能深度学习推理SDK,能极大提升模型在Jetson或GPU服务器上的运行速度。
- 首先安装TensorRT和
onnx-graphsurgeon。 - 使用
trtexec工具或编写Python脚本进行转换。转换时可以指定精度(FP32, FP16, INT8),精度越低,速度越快,但可能损失少量精度。
# 示例:转换为FP16精度的TensorRT引擎 trtexec --onnx=best.onnx --saveEngine=best_fp16.engine --fp16 --workspace=2048INT8量化:对于极致性能需求,可采用INT8量化。这需要一部分校准数据(训练集的一个子集)来统计激活值的分布。INT8量化通常能带来2-3倍的速度提升,且精度损失在可接受范围内(<1% mAP下降)。这是边缘部署的关键优化步骤。
- 首先安装TensorRT和
5.2 部署推理代码编写
部署时,我们需要一个高效的推理管道。以下是一个基于TensorRT C++ API或Python API的简化流程:
- 预处理:将输入图像缩放到模型输入尺寸(如640x640),进行归一化(
/255.0),并转换为CHW格式的Numpy数组。注意保持与训练时相同的预处理流程。 - 推理:加载TensorRT引擎,创建执行上下文,将预处理后的数据拷贝到GPU,执行推理。
- 后处理:
- 解码:YOLO的输出是密集预测。对于
tiny/l/x模型,输出维度可能不同。需要根据模型结构解析出边界框坐标、置信度和类别概率。 - 非极大值抑制:这是关键步骤,用于去除冗余的重叠框。由于罂粟花可能密集种植,需要谨慎设置NMS参数:
# conf_thres: 置信度阈值,降低它以提高召回率 # iou_thres: NMS的IoU阈值,对于密集小目标,可以适当放宽(如从0.45调到0.4),避免把相邻两株花抑制掉一个。 detections = non_max_suppression(prediction, conf_thres=0.25, iou_thres=0.45)
- 解码:YOLO的输出是密集预测。对于
- 坐标映射与预警:将检测框的归一化坐标映射回原始图像坐标。结合无人机提供的GPS位置和姿态(俯仰、翻滚角)信息,通过地理配准算法,可以估算出检测目标的大地坐标(经纬度)。一旦检测到目标且置信度超过预警阈值,立即通过MQTT、HTTP等方式将预警信息(时间、位置、图片快照)推送至指挥中心。
实操心得:在Jetson设备上部署时,务必启用GPU的持久模式并设置最佳功率状态,以确保推理期间频率稳定。使用
jetson_clocks脚本可以锁定最高频率。另外,TensorRT引擎的构建最好直接在目标Jetson设备上进行,以避免架构兼容性问题。
6. 系统集成与性能对比分析
6.1 三款模型实测性能对比
我们在一个统一的测试集(包含2000张未见过的航拍图)上,使用相同的预处理和后处理参数,在以下两个典型硬件平台上进行了测试:
- 平台A(边缘):NVIDIA Jetson AGX Orin (32GB),功耗约30W。
- 平台B(服务器):NVIDIA RTX 4090,功耗约450W。
测试结果如下表所示(图像尺寸640,Batch Size=1,TensorRT FP16精度):
| 模型 | 参数量 (M) | 平台A推理速度 (FPS) | 平台B推理速度 (FPS) | mAP@0.5 | mAP@0.5:0.95 | 备注 |
|---|---|---|---|---|---|---|
| YOLOv7-tiny | 6.01 | ~85 | ~380 | 0.723 | 0.412 | 速度极快,精度尚可,适合快速普查 |
| YOLOv7 | 36.9 | ~32 | ~150 | 0.891 | 0.635 | 精度与速度的最佳平衡,主力推荐 |
| YOLOv7-x | 70.8 | ~18 | ~95 | 0.899 | 0.641 | 精度最高,但速度代价大,适合云端精细分析 |
分析结论:
- YOLOv7-tiny在边缘设备上达到了85 FPS,足以处理30 FPS的视频流并有充足余量。其mAP@0.5超过0.7,对于“初步筛查”任务已基本可用。大量误报可由后端系统过滤或人工快速浏览确认。
- YOLOv7在精度上相比tiny有巨大提升(mAP@0.5提升近17个百分点),在边缘设备上仍有32 FPS,满足实时性要求。它是绝大多数现场部署场景的首选。
- YOLOv7-x精度提升边际效应明显,仅比YOLOv7高不到1个百分点,但速度下降了近一半。除非对那1%的精度有极致要求,否则不推荐在边缘端使用。
6.2 集成预警系统
一个完整的系统不仅仅是模型推理。我们基于Python的FastAPI或Golang开发了一个轻量级服务,集成以下模块:
- 视频流接入模块:支持RTSP、RTMP、HTTP-FLV等协议,从无人机图传或地面站接收视频流。
- 推理服务模块:封装了TensorRT推理引擎,提供
detect(frame)接口。 - 预警判断模块:设定置信度阈值(如0.6)和最小检测框面积阈值(过滤过小噪声)。对于连续多帧(如5帧)都检测到同一区域的目标,才触发一次稳定预警,避免抖动误报。
- 地理信息绑定模块:解析无人机飞控数据(通过MAVLink或SDK),将图像像素坐标转换为地理坐标。这里涉及相机标定、姿态解算等,精度要求高时可考虑结合RTK定位和正射影像。
- 告警推送模块:生成包含时间、经纬度、置信度、目标快照的JSON数据包,通过WebSocket或MQTT实时推送到指挥中心大屏,同时可存入数据库(如PostgreSQL/PostGIS)以备查询。
- Web管理后台:使用Vue+Element UI开发,展示实时视频、预警点位地图、历史记录统计图表等。
6.3 持续学习与模型更新
系统上线后,模型可能会遇到新的场景(如新品种作物、极端天气)导致性能下降。我们需要建立持续学习(Continuous Learning)管道:
- 系统将置信度较低的检测结果(例如,置信度在0.3-0.6之间)自动保存为待审核样本。
- 后台由专业人员对这些样本进行审核和标注。
- 定期(如每月)用累积的新数据对现有模型进行增量训练或微调。
- 经过严格测试后,通过OTA方式将更新后的模型部署到前线设备。
7. 常见问题与避坑指南
在实际开发和部署中,我遇到了不少典型问题,这里分享出来,希望能帮你节省时间。
Q1:训练时损失震荡很大,不收敛。
- 可能原因:学习率设置过高;批次大小(Batch Size)太小;数据集中存在大量错误标注或模糊样本。
- 解决:使用预训练权重时,初始学习率可以设小一点(如
1e-3)。尝试增大Batch Size(在显存允许范围内)。彻底清洗数据集,检查标注质量。可以尝试使用--adam优化器替代SGD,有时对不稳定数据更友好。
Q2:模型召回率(Recall)低,很多目标检不出来。
- 可能原因:小目标过多,模型感受野不够或浅层特征利用不足;置信度阈值
conf-thres设得过高;锚框尺寸与真实目标尺寸不匹配。 - 解决:在模型Neck部分加强浅层特征的融合(如前文所述)。将推理时的
conf-thres从默认0.25降低到0.1或0.05。务必使用自己的数据集重新聚类生成锚框。可以尝试在训练时使用更小的下采样倍数(如将stride=32的检测头改为stride=16),但这会大幅增加计算量。
Q3:模型误报率高,把其他野花或作物当成罂粟花。
- 可能原因:数据集中负样本(背景)不够丰富,或者与罂粟花相似的困难负样本太少。
- 解决:主动收集并标注大量“易混淆”的植物样本(如虞美人、某些蔬菜花),加入训练集,作为一个单独的“负样本”类别或作为背景的一部分。在数据增强中,增加更多背景替换和CutMix操作,让模型学会关注更细微的判别性特征。
Q4:在Jetson设备上转换的TensorRT引擎,推理速度远低于预期。
- 可能原因:没有启用FP16或INT8量化;TensorRT引擎没有针对特定批次大小进行优化;Jetson的GPU频率被限制在低功耗状态。
- 解决:导出ONNX时确保opset版本兼容。构建TensorRT引擎时务必指定
--fp16。对于固定场景,构建时指定确切的--batch-size(如1或4)而非动态批次,能获得最佳优化。运行前执行sudo jetson_clocks命令。使用trtexec的--best参数让TensorRT自动尝试多种配置寻找最优解。
Q5:无人机移动导致视频模糊,检测效果差。
- 可能原因:模型没有学习到运动模糊的特征;预处理没有去模糊。
- 解决:在数据增强中主动添加运动模糊效果。在推理前端,可以尝试添加轻量级的视频稳像算法或图像去模糊预处理(如Wiener滤波),但需计算耗时。最根本的是,在无人机巡检任务规划时,尽量保证悬停拍摄或缓慢匀速飞行。
Q6:地理定位误差大。
- 可能原因:无人机GPS定位本身有误差(米级);未考虑相机镜头畸变;图像像素坐标到地理坐标的转换模型过于简单(未考虑姿态角)。
- 解决:使用带RTK模块的无人机,可将定位精度提升至厘米级。对相机进行标定,获取内参和畸变系数,对图像进行校正。采用更严谨的共线方程或基于SFM(运动恢复结构)的方法进行地理配准,这需要已知部分地面控制点或高精度DEM数据。
这个项目从技术选型到落地部署,是一套完整的工程实践。选择YOLOv7系列作为核心,给了我们在精度和速度之间灵活权衡的空间。最终,没有最好的模型,只有最合适的模型。对于日常巡逻,YOLOv7-tiny或YOLOv7是性价比之选;对于重点区域核查或案件取证,则可以在后端动用YOLOv7-x甚至集成多个模型进行联合判断。技术永远在迭代,但解决实际问题的思路和过程中积累的这些调参、优化、部署的经验,才是最有价值的。