☰
基于YOLO26的水下生物检测系统:从算法设计到边缘部署
2026/10/22 9:19:08 网站建设 项目流程

水下生物检测系统听着挺垂直,其实拆开来看就三件事:把水下图像拍清楚、把目标从背景里抠出来、把模型塞进实际设备里跑起来。YOLO系列框架从早期的端到端目标检测方案一路迭代到YOLO26这个阶段,已经成了水下视觉这类任务绕不开的底座。我前后做过两版水下生物检测的原型系统,从V5切到新版本框架,踩了不少坑,也攒了一些能直接拿去用的经验。这篇文章就围绕“基于YOLO26的水下生物检测系统”这个方向,把算法研究的思路和实现方法完整捋一遍,适合正在做水下视觉课题、或者打算把目标检测落地到边缘设备的人参考。

水下环境跟常规监控场景完全不是一回事。光在水里衰减得厉害,红色波段很快被吸收,画面整体偏蓝绿色;悬浮颗粒和散射导致对比度掉得厉害;生物本身又有保护色,跟背景融为一体。这些问题叠加在一起,靠普通的目标检测流程直接硬上,效果一定不理想。所以整个算法研究的核心不是“跑通一个模型”,而是围绕水下图像特性做一系列针对性的设计和适配。

1. 水下生物检测的场景特点与YOLO26框架的选型逻辑

1.1 水下环境对视觉算法的基本挑战

水下成像的特殊性我只能用三个关键词来概括:色偏、低对比度、遮挡稠密。

先说色偏。水的物理特性决定了对不同波长的光吸收率不一样,波长较长的红光在几米内就基本消失了,剩下的主要是蓝绿光,所以拍出来的画面天然蒙着一层蓝色或绿色的滤镜。这对检测算法来说是个很棘手的问题,因为模型学到的颜色特征跟真实环境下差别很大。比如有些海鱼是红色或橙色的,在水下图像里这些颜色信息几乎丢失,只剩下暗淡的灰度轮廓。

再说低对比度。悬浮颗粒、浮游生物、水本身的散射,都让图像的边缘信息变得模糊,目标的轮廓跟背景的梯度差异被大幅削弱。普通的目标检测模型在清晰场景下提取边缘特征很容易,但在水下图像上往往提取不到足够强的梯度响应,导致漏检。

最后是遮挡稠密。水下生物经常聚集在一起,鱼群、虾群、蟹群相互遮挡的情况非常普遍。而且很多生物本身就适应了伪装,身体的纹理图案跟周围珊瑚、海藻、沙地非常接近。这两个因素叠加,让检测任务从“识别一个目标”变成了“在复杂纹理背景中分离多个高度相似的目标”。

1.2 为什么选择YOLO系列而不是其他检测框架

目标检测的主流框架无非两大流派:两阶段检测器(以早期Faster R-CNN系列为代表)和单阶段检测器(YOLO系列、SSD系列为代表)。两阶段检测器先产生候选区域,再对每个候选区域做分类和回归,精度高但速度慢;单阶段检测器直接在特征图上做密集预测,速度快但早期版本精度一般。

水下生物检测这个场景有一个天然矛盾:既要求较高的检测精度,又要求能实时运行。水下机器人、潜水员手持设备、养殖监测站都需要实时反馈,两阶段检测器在这个场景下很难满足帧率要求。YOLO系列把目标检测做成端到端的回归问题,从骨干网络提取特征到输出检测结果一气呵成,速度优势非常明显。

到了YOLO26这个版本,这个系列在精度和速度的平衡上又往前推了一步。新版本在骨干网络、特征融合和检测头设计上做了不少迭代,对小目标检测和密集场景检测的支撑更好了。这两个能力恰恰是水下生物检测最需要的。再加上YOLO系列的工程生态非常完善,训练、导出、部署的工具链齐全,从研究到落地的链路短,这也是很多团队选它的现实原因。

2. 数据建设:水下生物检测的真正隐形工作量

2.1 数据来源与初始数据集构建

很多刚接触这个方向的人会低估数据的难度,总觉得找个开源数据集跑起来就完事了。实际上水下生物检测的数据获取是整个项目里最费时费力的一环,甚至决定了算法效果的上限。

水下图像的数据来源通常有几个渠道:真实水下拍摄、专业潜水员或水下机器人采集的视频拆帧、公开数据集、实验室水箱拍摄。每个渠道都有各自的优劣。真实水下拍摄最贴近实际部署环境,但采集成本高,而且受水域透明度、季节、光照等条件影响,样本覆盖不一定全面。公开数据集的优势是标注比较规范,拿来即用,但类别分布偏科的问题比较常见,有些类别样本量大,有些类别的样本少到可以忽略。

我过往实操的做法是混合策略:以公开水下图数据集为基础,叠加自采水下视频拆帧,再补充一部分合成数据。合成数据这块很多团队会忽略,其实用渲染引擎对三维生物模型做批量渲染,再叠加不同水色、浑浊度、光照条件的模拟,能快速扩充训练样本。合成的图像跟真实图像在纹理细节上肯定有差异,但用来训练模型的鲁棒性特征非常有效。

2.2 水下图像增强与预处理策略

拿到原始图像后,不能直接往模型里塞,需要先做增强和预处理。这一步质量的好坏直接决定了模型能不能学到有效特征。

基础处理流程通常是这样的:先做颜色校正,把偏蓝或偏绿的图像恢复到接近自然色温的状态。最常用的方法是灰度世界算法和基于直方图匹配的颜色校正方法。灰度世界算法假设场景中所有颜色的平均反射率是灰色的,以此为依据调整各通道增益,实现白平衡效果。在水下这种强色偏场景下,灰度世界算法效果还行,但有时候会把颜色校正过度,所以实际应用中我更推荐限制对比度自适应直方图均衡化(CLAHE)结合颜色校正一起用,先校色再增强对比度,效果比单独使用任何一种都好。

低光增强也是水下场景的刚需。很多水下图像的整体亮度偏低,直接用原图训练会导致模型对暗光场景的学习不充分。我试过几种低光增强网络做预处理,发现增强幅度太大会引入伪纹理,反而干扰检测。后来走了更务实的路线:在训练阶段用随机亮度扰动、随机伽马变换做数据增强,让模型自己去适应亮度差异,而不是在预处理阶段强行把每张图都提亮。

还有一个容易被忽略的点是图像去模糊和去雾化处理。水下图像经常出现雾状效果,本质是悬浮颗粒对光的散射。暗通道先验去雾算法在水下场景效果比较好,我现在用它做关键样本的预处理,而不是全量处理,因为去雾对计算资源的消耗比较大,全量处理会拖慢训练数据的加载速度。

2.3 标注规范与类别平衡处理

标注是另一个决定模型上限的环节。水下生物图像的标注比普通目标检测的标注更费事,原因在于目标边界不清晰、遮挡严重、同类生物形态差异大。

我踩过的一个大坑是标注标准不一致。同一个目标,有的标注员把整个身体都框进去,有的只框了核心躯干,有的连触手都算进去。模型在训练时面对同一个类别的标注框尺度差异很大,损失函数的收敛自然会出问题。后来我定了一套标注规范:只标注生物的核心主体,不标注触手、须、尾鳍这些形变较大的延伸部位;多个目标紧密重叠时,至少保证每个目标都有一半以上的可见区域被标注,完全不可见的目标不标注。

类别平衡问题在水下数据集里非常突出。常见的海参、海胆、扇贝样本量很大,但是稀有贝类、水母、海星这类目标样本量严重不足。样本不足的类别很容易被模型忽略,导致漏检率居高不下。我处理这个问题用的是两板斧:第一板斧是过采样和类别加权,对样本量少的类别适当提高损失权重;第二板斧是对少量样本类别做更强的数据增强,尤其是几何变换和颜色扰动,制造更多形态变体。实测下来,这两招能把尾部类别的召回率拉起来不少,但也不能指望完全解决,毕竟原始样本的多样性就那么点。

3. 基于YOLO26的检测算法核心设计与训练优化

3.1 网络结构选型与改进思路

YOLO26作为较新的版本,整体架构延续了YOLO系列“骨干网络提取特征、颈部网络做特征融合、检测头输出结果”的标准设计,但在几个关键位置做了结构性调整。从算法研究的角度看,我们不需要重新发明轮子,但应该理解每个模块的定位,再结合水下生物检测的具体需求做适配。

针对水下生物检测,我认为有三个可切入的改进方向。

第一个方向是骨干网络的感受野调整。水下生物有很多目标尺寸偏小,比如小鱼苗、小型虾类,在图像里只有十几个像素大小。YOLO26的骨干网络能不能有效提取这些小目标的特征,关键不完全在于网络的深度,而在于多尺度特征融合的方式。常规做法是依赖特征金字塔的多尺度融合机制,把浅层的细节特征和深层的语义特征融合起来。但如果目标实在太小,浅层特征的细节信息也不够用,这时候可以考虑在骨干网络浅层增加一个额外的检测层,专门针对小目标做预测。这个思路是我在实际实验里验证过的,小目标的召回率确实有提升,但代价是推理速度下降,需要根据实际设备算力做取舍。

第二个方向是注意力机制的引入。水下图像背景杂乱,目标与背景的对比度低,模型很容易被背景干扰。在YOLO26的颈部网络里嵌入注意力模块,让模型更关注包含目标的区域,抑制背景干扰,能有效降低误检率。实现上不用写很复杂的新模块,轻量级的通道注意力或空间注意力模块就够了。要注意的是注意力模块不能加得太重,否则推理延时涨得很快,我试验过一口气加了三个注意力模块,精度涨了不到1%,帧率掉了将近15%,完全得不偿失。

第三个方向是损失函数的调整。水下生物检测里的正负样本比例失衡问题很严重,背景区域远大于目标区域。YOLO26默认的损失函数配置可以在常规场景下工作得不错,但水下场景更容易出现样本不平衡问题。我的做法是用Focal Loss的思路调整分类损失,让模型更关注那些难分类的样本,对容易分类的背景样本降低权重。这个调整在对比度低的水下图像上尤其有效,能明显压低背景误检。

3.2 训练配置与关键参数解析

训练超参数的配置是很多新手容易“套模板”的地方,其实每个参数都应该结合自己的数据特点去调。

输入分辨率这块,我建议直接从640x640起步,不要用更小的输入。水下生物普遍偏小,输入分辨率越低,小目标的像素信息损失越严重。我做过一组对照实验,从512提高到640,小目标类别的mAP提升了差不多4个百分点,代价只是训练时间增加,推理速度影响很小。如果设备算力允许,甚至可以用1280分辨率做训练,再导出小分辨率模型做推理,训练时让模型看到更丰富的细节,推理时保持速度。

Batch Size的选择跟显存大小直接相关,但有一个经验值可以参考:在单卡24G显存的情况下,batch size设为16左右比较合适。设太小了,梯度噪声比较大,收敛不稳定;设太大了,显存不够或容易过拟合。

学习率策略我习惯用warm-up加余弦衰减的组合。训练初期用较低的学习率让模型稳定起步,“预热”几百步后再升到正常学习率,避免前期梯度爆炸。之后用余弦退火的方式让学习率平滑下降,能帮助模型在后期找到更优的收敛点。初始学习率一般设在0.001到0.01之间,具体值要看batch size和优化器的设置。这里有几个经验参数可以参考,但实际效果跟数据和设备有关:

参数推荐配置备注
输入尺寸640x640小目标场景可尝试1280
初始学习率0.001 到 0.01配合warm-up使用
动量0.937YOLO系列常用默认值
权重衰减0.0005防止过拟合
训练轮数300 epoch左右小数据集可配合早停
数据增强mosaic、随机仿射、颜色扰动水下场景建议适度增强

最后一个关键点是迁移学习。直接从零开始在自建数据集上训练是浪费时间,应该使用在大规模数据集上预训练的权重作为初始参数。这批预训练权重已经学到了大量的通用视觉特征,比如边缘、纹理、形状等,我们只需要在自建的水下数据集上做微调。我的实际操作是先冻结骨干网络的前一部分层,只训练后部和检测头,跑几十个epoch后再解冻全部层微调,收敛速度快,最终精度也更好。

3.3 评估指标体系与调优策略

评估指标上,水下生物检测一般看mAP50和mAP50-95这两个指标。mAP50是IoU阈值设为0.5时的平均精度,主要衡量模型的粗定位能力;mAP50-95是跨IoU阈值的平均精度,对定位精度要求更高。对于水下生物检测来说,mAP50是基本盘,mAP50-95则体现了模型的精细定位能力,两者都要看。

实际调优过程中我发现最值得关注的其实是PR曲线和各个类别的单独AP值。整体mAP看着还行,但具体到某个稀有类别可能是灾难性的。比如整体mAP50到了87%,看起来很漂亮,但拆开来一看,水母类别的AP只有35%,扇贝类别AP只有42%,这种偏科非常常见。调试时要先把每个类别的AP都打印出来,重点补短板。

还有一个评估维度是帧率FPS。模型不能只停留在笔记本上调参,最终要跑到部署设备上。Jetson平台、树莓派或者手机上跑同一个模型,帧率差异非常大。我的评估习惯是同时记录精度和帧率,然后把两者放在一起对比。如果精度掉了不到1%,但帧率涨了20%,这个取舍就是划算的。

4. 完整实操流程与关键代码实现

4.1 环境搭建与项目结构

实操部分我从环境搭建开始说。基于YOLO26训练水下生物检测模型,最简单的路径是直接用Ultralytics提供的统一框架,它在YOLO系列模型的支持上比较全,训练、验证、导出一条链。

环境准备方面,Python版本建议3.10或更高,深度学习框架用PyTorch,版本我建议选稳定的2.x版本。CUDA版本跟显卡驱动匹配就行,实际装环境时最先遇到的坑往往是版本不匹配,这里给一个参考组合:CUDA 11.8或12.1搭配PyTorch 2.1及以上版本,实测兼容性较好。

项目结构建议这样组织:

project/ ├── data/ │ ├── images/ │ │ ├── train/ │ │ └── val/ │ └── labels/ │ ├── train/ │ └── val/ ├── configs/ │ └── underwater.yaml ├── scripts/ │ ├── preprocess.py │ ├── train.py │ └── export.py ├── models/ ├── runs/ └── weights/

4.2 数据配置与训练脚本

数据配置是所有训练的基础,需要先写好自己的数据集配置文件。Ultralytics框架的数据配置文件是一个YAML文件,核心内容是指定数据路径和类别列表。水下生物检测的类别数量从几个到几十个不等,关键是要跟标注文件的类别编号严格对应。

配置文件的内容大致是这样的:

# underwater.yaml path: ./data train: images/train val: images/val names: 0: sea_cucumber 1: sea_urchin 2: scallop 3: starfish 4: jellyfish 5: crab

注意类别名称一旦定下来就不要随意改动,训练脚本、标注文件、评估代码全都依赖这个映射关系,改一处而不改全部地方就会出现类别错乱,这是很多新手踩过的坑。

训练命令本身并不复杂,核心参数通过命令行传入。一个标准的水下生物检测训练命令是这样:

python train.py --model yolov26m.pt --data underwater.yaml \ --epochs 300 --batch 16 --imgsz 640 \ --device 0 --optimizer AdamW --lr0 0.001 \ --mosaic 1.0 --cos_lr True

这里有几个参数值得展开说明。--model指定的是预训练权重的路径,框架会从这个权重基础上做微调,而不是从零开始。--mosaic是Mosaic数据增强的开关概率,这个增强方式把四张图拼成一张再训练,对丰富目标上下文和提升鲁棒性非常有效,水下场景可以保持开启。--cos_lr开启余弦学习率衰减,对应前面说的学习率策略。

4.3 数据预处理脚本实现

数据预处理是很多准入门槛不高但非常影响效果的部分。前面提到的颜色校正和对比度增强,我一般写成独立的预处理脚本,在训练之前批量处理一遍。

一个简单但有效的颜色校正和对比度增强脚本大致的逻辑是这样的:

import cv2 import numpy as np import os from tqdm import tqdm def underwater_preprocess(image_path, output_path): image = cv2.imread(image_path) if image is None: return False # 通道分离与均衡,提升水下图像的对比度 lab = cv2.cvtColor(image, cv2.COLOR_BGR2LAB) l, a, b = cv2.split(lab) clahe = cv2.createCLAHE(clipLimit=3.0, tileGridSize=(8, 8)) l_eq = clahe.apply(l) lab_eq = cv2.merge((l_eq, a, b)) image_eq = cv2.cvtColor(lab_eq, cv2.COLOR_LAB2BGR) # 灰度世界白色平衡,矫正色偏 result = gray_world_white_balance(image_eq) cv2.imwrite(output_path, result) return True def gray_world_white_balance(image): result = image.copy() avg_b = np.average(result[:, :, 0]) avg_g = np.average(result[:, :, 1]) avg_r = np.average(result[:, :, 2]) avg_gray = (avg_b + avg_g + avg_r) / 3.0 result[:, :, 0] = np.minimum(result[:, :, 0] * (avg_gray / (avg_b + 1e-6)), 255) result[:, :, 1] = np.minimum(result[:, :, 1] * (avg_gray / (avg_g + 1e-6)), 255) result[:, :, 2] = np.minimum(result[:, :, 2] * (avg_gray / (avg_r + 1e-6)), 255) return result.astype(np.uint8)

这里有几个注意点:CLAHE的clipLimit参数是控制对比度增强强度的,设得越大对比度增强越明显,但过头了会让图像看起来很不自然,把噪声也一起放大了。我通常建议把clipLimit控制在2.0到4.0之间,tileGridSize用8x8就行,这两个参数基本可以固定。灰度世界算法的分母上加了1e-6是防止除零,实际图像处理中不排除某个通道全黑的情况。

实际批量处理时要控制好数据量。我把整个数据集跑一遍预处理花了几个小时,好在是一次性的工作,做完后续训练就稳定用了。

4.4 模型推理与导出部署

训练完成后的模型导出是落地到实际设备的关键环节。Ultralytics框架的导出功能很完善,一条命令就能把训练好的权重转成多种格式。其中TensorRT格式在嵌入式设备上运行时性能优势明显,可以用下面的方式导出:

python export.py --weights best.pt --include engine --device 0 \ --imgsz 640 --half

TensorRT会构建一个专门为特定GPU优化过的推理引擎,这也是为什么它能比普通的PyTorch推理快好几倍。--half参数开启半精度浮点推理,推理速度会进一步提升。但要注意的是开启半精度后精度可能略微下降,如果检测结果不太理想,可以先去掉这个参数再对比一次。

推理代码在部署时可以单独写,不依赖训练框架。基本的推理流程是加载模型权重,读取图像,前向推理,后处理,画框输出。实际部署阶段我建议把推理逻辑封装成一个检测类,对外暴露一个简单的接口,输入图像路径或缓冲,返回检测结果的列表。这样后续不管接视频流、接机器人控制端还是接Web服务,都只需要调这个接口。

5. 常见问题排查与避坑指南

5.1 小目标检测性能不足的问题

水下生物检测中,小目标检测失败是最常见的问题。小鱼苗、小虾、幼贝在图像里只占几十甚至十几个像素,YOLO26默认的检测层对这种尺寸的目标敏感度有限。

排查这个问题时先别急着改网络结构,先确认数据集里小目标的分布情况。用小目标占比超过10%作为参考线,如果数据里小目标占比很高,那模型理应对小目标有足够的关注,效果不好就需要在结构上做调整。如果数据里小目标本身就少,那问题出在数据而不是模型。

解决办法有几个优先级。最简单的是训练时提高输入分辨率,分辨率上去了,小目标在特征图上的响应自然变强。其次是数据层面,把包含小目标的图像进行适当裁剪放大,或者复制到多个位置,制造更多小目标样本。如果需要调结构,就在原来检测头的基础上增加针对小目标的检测层,跟骨干网络的浅层特征做融合。

5.2 易混淆类别的误检问题

水下生物里有不少外观高度相似的类别,海参和海胆、不同种类的螃蟹、蝴蝶鱼和天使鱼,都存在不同程度的混淆。这类问题在类别间的纹理、颜色、形状高度相近时特别突出。

我碰到过一个很典型的情况:海参和某种大型海螺在水下图像里的轮廓几乎一样,颜色也很接近,模型频繁把海参认成海螺。排查时先看混淆矩阵,确认到底是哪两个类互相误判,然后针对性采取措施。数据层面,增加两个混淆类别的样本差异展示,比如专门挑选形态差异更大的样本,或者增加一个角度类别的标注,帮助模型学到区分特征。算法层面,可以用数据增强强化两者的颜色差异和纹理差异,也可以考虑增加细粒度分类的辅助损失,让模型在检测的同时学会更细致的区分。

5.3 模型过拟合与泛化能力不足

水下数据集往往规模有限,模型训练时间长了很容易过拟合,典型表现是训练集上的mAP很高,但验证集或者新场景下的表现明显下滑。

判断过拟合的简单方法是对比训练损失和验证损失曲线,训练损失持续下降而验证损失先降后升,基本可以断定过拟合了。解决办法按优先级排列:第一,增加数据增强的强度,水下数据集可以做随机旋转、缩放、颜色扭曲、混合增强,让模型看到更丰富的变体形式;第二,提高权重衰减系数,限制模型的参数空间复杂度;第三,引入早停机制,验证集指标连续几十个epoch不涨就停止训练,这是最省事也最有效的方法之一。

还有一个技巧是使用更大的预训练模型做蒸馏。用一个已经训练好的大模型在训练过程中监督小模型的学习,让小的部署模型从大模型的预测结果中学习,能显著提升泛化能力,而且部署时只部署小模型,不影响推理速度。

6. 部署落地的工程化建议

6.1 边缘设备上的性能优化实践

水下生物检测系统最终要部署到无人机、水下机器人、近岸监控设备这些算力有限的环境里。在我的经验中,模型从服务器迁到边缘设备时,最大的瓶颈往往不是精度而是帧率。

优先看模型的参数量和计算量。YOLO26有多个不同规模的版本,从轻量版到超大版都有。水下生物检测这个任务通常不需要超大模型,轻量或中等规模的版本配合充分的训练,基本就能达到理想的精度。我建议先把中等规模的模型训练好,评估精度和速度的平衡,如果帧率不达标再换更轻的版本。

另一个影响推理速度的细节是TensorRT的优化配置。模型导出引擎时选择的批处理大小、精度模式、工作空间大小都有讲究。一般建议把工作空间设置到设备可用显存的上限,让引擎拥有足够的优化空间。同时考虑把静态批处理改成动态批处理,生产环境中输入的视频流往往是单帧或小批量,动态批处理可以避免不必要的计算浪费。

6.2 视频流检测的工程细节

水下视频流检测跟单张图片检测相比,多了几个工程上的坑。

首先是视频帧处理的并发问题。实时视频流要求高帧率处理,单线程逐帧处理很容易形成性能瓶颈。建议的做法是并行架构,采集线程负责拉帧,推理线程负责模型前向计算,显示线程负责画框输出,三个线程之间用队列解耦。

其次是相邻帧的时间冗余处理。水下生物的运动速度总体偏慢,连续帧之间的内容变化不大,完全没必要每一帧都做完整的检测。我通常会做一个简单的帧间隔逻辑,每2到3帧检测一次,中间穿插追踪逻辑来维持目标的连续性,这样既能保证实时性,又能保持检测结果的稳定。

6.3 模型迭代与业务闭环

一个水下生物检测系统不是训练一次就完事的,业务方对检测的需求会不断变化。新种类要加,旧类别的判定标准可能调整,不同水域的成像条件不一样,都需要持续迭代。

我建议从项目一开始就建立数据回流机制。推理系统在运行时把检测置信度低的样本、误检样本、遗漏样本自动保存下来,定期人工审核并补充标注,形成新的训练集版本,再持续训练和发布新模型。这个闭环流程看似简单,但很多项目输在“没有数据回流”上,导致模型越跑越偏。

迭代发布时还要注意版本管理。训练数据的版本、标注文件的版本、模型权重的版本都要有清晰的记录,最好在每次训练前把数据集版本和配置文件一起归档,这样后续追溯某个模型效果变差的原因时才有据可查。

7. 项目复盘与下一步方向

回过头看我做水下生物检测项目的整个过程,最深的体会有两点。

第一点是数据质量比模型结构更重要。很多团队把大量精力花在网络结构的魔改上,改这个模块加那个注意力,实际效果提升有限。水下图像本身就难标注、难获取,把精力和成本投入到数据标注规范、图像预处理、类别平衡上,收益往往大得多。模型结构的迭代是加分项,数据质量才是基本盘。

第二点是精度和速度要从一开始就平衡考虑。不要在服务器上把模型精度刷得很高,最后才发现边缘设备跑不动这个体量的模型,被迫反复压缩,反而浪费更多时间。项目第一周就应该确定目标硬件和新设备的算力预算,所有算法设计都围绕这个约束展开。

后续扩展方向我计划做两块。一块是把检测扩展成检测加追踪一体化的系统,水下视频流中同一个生物在连续帧中出现,需要追踪算法维持ID一致性。另一块是尝试把水下图像增强网络跟检测网络放到一个统一的框架里联合训练,增强部分针对检测任务做优化,可能比先增强后检测的串行流程效果更好。当然这两块都有各自的技术难点,还得一步步试。

最后分享一个实打实的小技巧:训练过程中定期手动查看模型的检测效果,不要只盯着mAP曲线。指标好看跟实际效果好看是两回事,时不时拿几张真实拍摄的水下图跑一次推理,用肉眼看看模型检测出来的框,框的位置准不准、有没有把背景当目标、有没有漏检,这些直观感受能帮助你发现指标上看不到的问题。我就是在一次手动验证时发现了海星类别总被误检成海胆,回头查了标注数据才明白是标注标准不统一导致的。这种问题,只看数字是永远发现不了的。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询