
1. 河道巡检为什么非得用无人机加图像识别我最早接触河道垃圾巡检这个场景是跟着一个做水利信息化的朋友去现场。那天我们沿着一条城乡结合部的河道走了三公里两个工人拿着长柄网兜捞漂浮物岸上还有人拿本子记录位置。一上午下来捞了不到两百米人已经累得不行而且很多垃圾在河中央根本够不着。朋友当时就说这活儿要是能靠无人机拍一圈、后台自动标出来哪里有垃圾效率能翻好几倍。这个需求其实非常典型。河道垃圾有两个特点一是分布散今天这片有明天可能就漂到下游去了二是位置偏很多河段两岸根本没有路人走不过去船也不一定开得进去。传统的人工巡检方式受限于地形和人力覆盖范围小、周期长、成本高而且记录全靠人眼和手工数据很难沉淀下来做趋势分析。无人机加图像识别这套组合解决的正是“看得见、看得全、看得快”这三个核心问题。具体来说这套方案能做的事情包括按预设航线自动飞行拍摄河面把图像实时或离线传回来用训练好的模型自动识别出塑料瓶、编织袋、泡沫块、枯枝等常见漂浮物输出垃圾的位置、类别和大致数量最后汇总成一张“垃圾分布热力图”。适合谁来参考呢如果你是做环保信息化的开发人员、水利水务单位的技术负责人或者是一个想用无人机做点实际项目的爱好者这套东西都能直接借鉴。它不需要你从零造无人机也不需要你是深度学习专家核心是把几个成熟模块串起来调通就行。我下面会从整体架构怎么设计、关键环节怎么落地、实际跑起来会遇到什么问题这几个角度把整个项目拆开讲。里面涉及的工具选型和参数有些是我自己试过的有些是同行踩坑后总结的你按自己的场景取用就好。2. 整体架构怎么搭从飞行到出结果的完整链路2.1 先想清楚数据流再谈选型很多人一上来就问“用什么模型”“买哪款无人机”我觉得顺序反了。你应该先把数据从产生到消费的链路画出来再倒推每一环需要什么。河道垃圾识别这条链路我习惯分成四段采集端、传输端、计算端、展示端。采集端就是无人机加相机负责把河面拍清楚。传输端负责把图像从天上弄到地上可以是实时图传也可以是降落后拷贝存储卡。计算端是跑识别模型的地方可以在机载边缘设备上跑也可以在地面服务器或云端跑。展示端是把识别结果呈现给业务人员通常是一张地图加一个列表。这四段里最容易出问题的是采集端和计算端的衔接。因为河面反光、水波、阴影这些干扰拍出来的图跟你在实验室里用的数据集差别很大模型直接拿公开数据集训练落地效果往往很差。所以架构设计时必须给“数据回流”留位置——也就是把实际飞行拍到的图定期拿回来重新标注、重新训练让模型逐步适应你这条河。2.2 边缘计算还是云端计算怎么选这是架构里第一个要拍板的决策。两种方式我都跑过各有适用场景。边缘计算是把识别模型直接部署在无人机挂载的计算模块上比如机载的AI盒子或者带NPU的开发板。好处是响应快拍完立刻出结果不依赖网络适合河道偏远、信号差的场景。坏处是算力有限模型得压缩精度会打折扣而且机载设备增加重量影响续航。云端计算是把图像传回地面站或服务器再跑模型。好处是算力充足可以用大模型精度高模型更新也方便。坏处是依赖传输链路实时性差一些如果做实时图传带宽压力不小。我的建议是分阶段来。前期验证阶段用云端因为你要反复调模型、换参数云端迭代快。等模型稳定了如果业务要求实时性再考虑往边缘迁移。迁移的时候用模型量化、剪枝这些手段把模型压小精度损失控制在可接受范围内。对比维度边缘计算云端计算响应延迟低拍完即出较高依赖传输模型精度受算力限制需压缩可用大模型精度高网络依赖弱强设备重量增加影响续航无额外负担迭代便利性差需重新部署好服务端更新即可适用阶段稳定后的生产环境前期验证与调优2.3 飞行平台的选择逻辑无人机这块我不建议一上来就买最贵的。河道巡检的飞行任务有几个特点航线相对固定、飞行高度不高、速度不快、对悬停稳定性有要求。基于这些选型时重点看三件事续航、载荷、飞控开放性。续航决定了单架次能覆盖多长的河道。一般消费级四轴无人机续航在30分钟左右实际有效作业时间打个七折。如果河道很长要么多备电池轮换要么选续航更长的机型。载荷决定了你能挂什么相机和计算设备普通可见光相机够用但如果要做夜间或雾天巡检就得考虑其他传感器。飞控开放性决定了你能不能做自动航线规划和定点悬停拍摄大疆的MSDK、PX4这些生态都比较成熟二次开发资料多。我自己的经验是前期用一台成熟的消费级或行业级四轴无人机做验证就够了别急着上倾转旋翼那种复杂构型。等业务跑通了再根据实际覆盖需求决定要不要升级平台。另外起降平台这个事如果河道附近有硬化地面手抛或垂直起降都行如果全是软泥地就得考虑加装起降垫或者选垂直起降机型。3. 图像识别模型怎么选、怎么训、怎么调3.1 检测还是分割先明确输出要什么图像识别这个大类下面跟河道垃圾相关的任务主要有两种目标检测和语义分割。目标检测是给每个垃圾画个框告诉你“这里有个塑料瓶”语义分割是逐像素分类告诉你“这些像素是垃圾那些是水”。选哪个取决于你的业务需求。如果只是想知道哪里有垃圾、大概多少目标检测就够了标注成本低模型也轻。如果要精确计算垃圾覆盖面积或者垃圾和水面颜色接近、框不准那就得上分割。我做过一个对比同样一批河道图检测模型标注一张图大概两分钟分割模型要十分钟以上但分割出来的面积统计确实更准。实际项目里我倾向于先用检测跑通流程因为标注快、训练快、部署简单。等业务方提出更精细的需求再考虑加分割分支。现在很多模型支持多任务输出检测和分割可以共享主干网络这个后面讲模型选型时再说。3.2 数据集从哪来怎么标才不白干河道垃圾没有现成的大规模公开数据集这是最头疼的地方。我试过几个办法一是自己飞几趟拍个几百张图人工标二是找公开的垃圾检测数据集做预训练再用自己的数据微调三是用数据增强把少量样本扩增。自己拍图的时候要注意覆盖不同光照、不同天气、不同河段。我一开始只在一个晴天上午飞了一次标了三百张模型训出来在阴天和傍晚的图上几乎全瞎。后来补了阴天、逆光、水面有波纹的样本效果才稳下来。标注工具用LabelImg或者CVAT都行类别不用分太细先分“塑料类”“织物类”“其他”三大类后面有需要再细分。提示标注时一定要标“难例”比如半沉半浮的垃圾、被水草缠住的垃圾、远处的小目标。这些样本对模型提升最大别嫌麻烦跳过。数据增强这块常用的翻转、旋转、亮度调整、加噪声都要上。河道场景特别适合加“水面反光”和“波纹”的模拟增强能让模型对水面干扰更鲁棒。我一般把增强后的数据量做到原始的三到五倍再按8:1:1切训练、验证、测试集。3.3 模型选型轻量化和精度怎么平衡模型这块我的原则是先看部署环境再定模型大小。如果最终要上边缘设备那YOLO系列的小模型比如YOLOv8n、YOLOv5s是首选速度快、生态好、部署工具链成熟。如果只在云端跑可以用更大的模型比如YOLOv8x或者基于Transformer的检测器精度更高但推理慢。我实测过YOLOv8s在河道垃圾检测上的表现输入640×640在RTX 3060上大概15毫秒一帧mAP能到0.75左右三类垃圾平均。换成YOLOv8n速度翻倍mAP掉到0.68。这个差距在业务上能不能接受取决于你对漏检和误检的容忍度。如果垃圾漂过去没检出来后面清理就漏了那还是用大一点的模型。还有一个思路是用预训练加微调。先在COCO或者公开垃圾数据集上预训练再用自己的河道数据微调。这样收敛快小样本也能出效果。我试过只用五百张自标数据从零训mAP只有0.5出头加上预训练权重后同样数据能到0.7以上。3.4 训练过程中的参数调优经验训练参数这块我踩过的坑主要在学习率和批次大小上。河道垃圾图像背景复杂学习率太大会震荡太小收敛慢。我一般用余弦退火调度初始学习率设0.01配合warmup跑几个epoch。批次大小看显存能大就大BatchNorm对批次大小敏感太小了统计量不准。还有一个容易被忽略的是锚框尺寸。YOLO默认的锚框是基于COCO数据集的河道垃圾的尺寸分布跟COCO差别很大——远处的垃圾可能只有十几个像素近处的能占半张图。我建议用自己的数据跑一遍k-means聚类重新生成锚框这个操作对召回率提升很明显我做过对比重新聚类后小目标召回率涨了将近十个百分点。训练轮数不用太多有预训练权重的话五十到一百个epoch基本收敛。要盯着验证集的loss如果连续多个epoch不降就早停防止过拟合。过拟合的典型表现是训练集mAP很高验证集上不去这时候加数据增强或者加正则化。4. 从飞行到出结果的实操流程4.1 航线规划与拍摄参数设置航线规划的目标是用最少的飞行时间覆盖最多的河面。我一般用网格航线沿着河道走向铺“之”字形相邻航线的旁向重叠率设60%到70%航向重叠率设70%到80%。重叠率高一点后面拼接和识别都有好处但飞行时间会增加这个要权衡。飞行高度决定了地面分辨率。假设相机焦距是24毫米传感器像素尺寸是2.4微米飞行高度100米时地面分辨率大概是1厘米每像素。这个精度下一个矿泉水瓶大概占几十个像素检测模型能识别。如果飞太高垃圾变成几个像素模型就无能为力了。我一般把飞行高度控制在80到120米之间具体看河道宽度和垃圾大小。拍摄参数上快门速度要快避免运动模糊我一般设1/1000秒以上。ISO尽量低减少噪点。如果光线变化大用自动曝光也行但后期要做亮度归一化。还有一点尽量在太阳高度角适中的时候飞正午顶光水面反光严重清晨傍晚光线又太暗上午九点到十一点、下午两点到四点比较合适。4.2 图像预处理与拼接拍回来的图不能直接喂给模型得先做预处理。第一步是去畸变相机镜头有畸变尤其是边缘区域不去畸变的话垃圾位置会偏。第二步是拼接如果做的是整条河道的垃圾分布图需要把多张图拼成正射影像。拼接用OpenCV的Stitcher或者专业的摄影测量软件都行。拼接完之后图像尺寸会很大直接送模型推理不现实。我的做法是切图把大图切成有重叠的小块比如1024×1024重叠128像素逐块推理再把结果映射回大图坐标。重叠是为了避免垃圾正好在切缝上被切掉。切图推理还有个好处是可以并行多进程跑起来速度快很多。预处理里还有一个细节是水面区域掩膜。河道图像里有很多岸边的树、建筑、道路这些区域不会有漂浮垃圾但模型可能会误检。我一般先用一个轻量的分割模型或者颜色阈值把水面区域抠出来只在水面区域里做检测误检率能降不少。4.3 推理与后处理推理这块如果用PythonUltralytics的YOLO库封装得很好几行代码就能跑。加载模型、读图、推理、拿结果核心逻辑不复杂。关键是后处理**非极大值抑制NMS**的阈值要调太高了重叠的框去不掉太低了相邻的垃圾会被合并。我一般设0.45到0.5之间根据实际效果微调。还有一个后处理是按面积过滤。模型可能会检出一些特别小的框这些多半是水面波纹或者噪点。我设一个最小面积阈值比如20个像素小于这个的框直接丢掉。这个阈值不能设太大否则远处的垃圾也被滤掉了得根据你的地面分辨率来算。结果输出我一般存成JSON每条记录包含图像编号、垃圾类别、置信度、边界框坐标映射回原图坐标、以及对应的经纬度如果有POS数据。经纬度这块如果无人机有RTK定位可以直接从图像元数据里读如果没有就得靠拼接时的地理配准来推算精度会差一些。4.4 结果可视化与业务对接识别结果最终要给人看可视化做得好不好直接影响业务方愿不愿意用。我一般做两层展示一层是地图上的点把每个垃圾的经纬度打到地图上用不同颜色区分类别点的大小表示置信度另一层是原图上的框点开某个点能看到对应的图像和标注框方便人工复核。如果业务方要统计报表可以按河段、按时间段汇总垃圾数量和类别分布导出成Excel或者对接他们的业务系统。我做过一个简单的热力图把垃圾密度按网格聚合颜色越深表示垃圾越多业务方一眼就能看出哪段河道需要重点清理。注意可视化时置信度低的检测结果要用不同样式标出来提醒人工复核。模型不是万能的把不确定的结果直接当结论用容易出问题。5. 实际跑起来才会遇到的坑与排查方法5.1 水面反光导致的误检怎么破水面反光是我遇到的最大的干扰源。阳光照在水面上形成一片亮斑模型很容易把它当成白色泡沫或者塑料瓶。我试过几种办法一是在训练数据里大量加入反光样本让模型学会区分二是在预处理阶段做高光抑制用颜色空间转换把过亮的区域压下来三是后处理时结合位置信息反光通常是大片连续区域而垃圾是离散的小目标可以用连通域分析过滤掉大块检测。实测下来训练数据加反光样本是最根本的办法但需要标不少数据。高光抑制见效快但可能把真正的白色垃圾也压暗了要调参数。我一般两个一起用先抑制再检测效果比较稳。5.2 小目标漏检的排查思路远处的小垃圾漏检原因通常有三个模型输入分辨率不够、锚框尺寸不匹配、训练样本里小目标太少。排查的时候我先把输入分辨率调大比如从640调到1280看漏检有没有改善。如果有改善说明是分辨率问题可以考虑用切图推理或者换更高分辨率的模型。如果没改善检查锚框用k-means重新聚类。如果还不行那就是训练数据的问题得补小目标的标注样本。还有一个技巧是多尺度推理把同一张图缩放到不同尺寸分别推理再融合结果。这个对小目标提升明显但推理时间成倍增加适合对精度要求高、对速度不敏感的场景。5.3 模型在不同河段表现不一致怎么办这个问题很常见。你在A河段训的模型拿到B河段效果就掉。原因是两条河的水质、两岸环境、光照条件不一样数据分布有差异。解决办法有两个方向一是扩充训练数据把不同河段的图都加进去让模型见过更多变化二是域适应用少量目标河段的标注数据做微调或者用无监督域适应方法对齐特征分布。我一般先用扩充数据的办法因为简单直接。如果目标河段数据实在拿不到就用域适应。实际项目里我建议每换一条河至少飞一趟、标几十张图做微调这个投入产出比很高。5.4 常见问题速查表问题现象可能原因排查方法解决思路水面反光被误检为垃圾训练数据缺反光样本查看误检图是否有高光补反光样本加高光抑制远处小垃圾漏检分辨率不足或锚框不匹配调大输入分辨率看是否改善切图推理重聚类锚框换河段后精度下降数据分布差异对比两河段图像差异扩充数据域适应微调推理速度太慢模型太大或未优化测单帧耗时换小模型量化TensorRT加速拼接后图像有缝重叠率不够检查拼接结果提高重叠率换拼接算法检测框位置偏移相机畸变未校正对比原图和检测框做去畸变处理5.5 几个我踩过的坑第一个坑是电池管理。河道巡检往往在偏远地方我带了三块电池以为够了结果实际飞下来一块电池有效作业时间只有二十分钟出头三块电池跑不完一条三公里的河。后来我改成带五块并且规划航线时按电池续航倒推单架次覆盖范围留足返航余量。第二个坑是存储卡速度。拍高分辨率图如果存储卡写入速度不够会丢帧或者卡顿。我一开始用普通卡拍出来的图有几张是坏的。后来换成高速卡问题解决。这个细节很容易被忽略但实际影响很大。第三个坑是模型版本管理。我调模型的时候改一版训一版时间长了分不清哪个模型对应哪版数据。后来我养成习惯每次训练都记录数据版本、超参数、评估指标模型文件按日期加版本号命名。这个习惯在后期排查问题时帮了大忙。6. 后续可以怎么扩展这套东西跑通之后能扩展的方向不少。一个是多光谱或热成像可见光在夜间和雾天效果差加其他传感器能提升全天候能力。另一个是实时边缘部署把模型压到机载设备上拍完即出结果适合应急场景。还有就是垃圾溯源结合水流模型和垃圾分布反推垃圾可能的来源区域这个对治理更有价值。我个人在实际操作中的体会是河道垃圾识别这个项目技术本身不是最难的难的是数据和场景的匹配。模型再先进没见过你那条河的图照样不好使。所以别指望一次训练就一劳永逸把数据回流和迭代机制建起来比选什么模型重要得多。另外跟业务方沟通清楚精度预期也很关键模型不可能百分之百准能帮他们把巡检效率提升几倍、把漏检率降下来这个价值就已经很大了。