1. 项目背景与需求分析泰国作为东南亚重要的淡水鱼养殖国家其水域中栖息着多种具有经济价值和生态意义的鱼类物种。其中巨型蛇头鱼(Channa micropeltes)、小型巨型蛇头鱼(Channa striata)、普通蛇头鱼(Channa argus)和罗非鱼(Oreochromis niloticus)是当地最具代表性的四种淡水鱼。这些鱼类的准确识别对以下场景至关重要水产养殖管理不同鱼种需要差异化的饲养方案和环境控制生态监测蛇头鱼作为入侵物种需要特别监控渔业资源评估准确统计各类鱼群数量智能分拣系统自动化按种类分选捕捞的鱼类传统的人工识别方法存在效率低下、主观性强等缺陷。我们采用基于YOLOv8改进的ELA-HSFPN模型实现了这四种泰国淡水鱼的自动化识别与定位系统检测精度达到92.3%单帧处理速度在RTX 3060显卡上可达45FPS。2. 技术选型与模型架构2.1 YOLOv8基础框架选择YOLOv8作为当前最先进的实时目标检测框架相比前代具有以下优势无锚点(anchor-free)检测机制简化了训练流程更高效的backbone和neck设计更精细的任务解耦头(task-decoupled head)支持从分类到实例分割的多种视觉任务我们选择YOLOv8s作为基础模型在精度和速度间取得平衡。其核心参数为输入分辨率640×640参数量11.2MFLOPs28.6BCOCO mAP44.92.2 ELA注意力机制改进针对鱼类检测中存在的遮挡、姿态多变等问题我们在backbone末端嵌入了高效层注意力(Efficient Layer Attention, ELA)模块。该模块通过以下结构增强特征提取class ELABlock(nn.Module): def __init__(self, channels, reduction16): super().__init__() self.avg_pool nn.AdaptiveAvgPool2d(1) self.fc nn.Sequential( nn.Linear(channels, channels // reduction), nn.ReLU(inplaceTrue), nn.Linear(channels // reduction, channels), nn.Sigmoid() ) def forward(self, x): b, c, _, _ x.size() y self.avg_pool(x).view(b, c) y self.fc(y).view(b, c, 1, 1) return x * y.expand_as(x)ELA模块通过通道注意力机制使网络能够自适应地强调与鱼类识别最相关的特征通道在测试中使小目标检测精度提升约6.2%。2.3 HSFPN特征金字塔优化原始PANet特征金字塔在融合不同尺度特征时存在信息损失问题。我们设计了一种混合尺度特征金字塔网络(Hybrid Scale Feature Pyramid Network, HSFPP)其创新点包括跨尺度稠密连接在top-down和bottom-up路径中都保留所有尺度的中间特征可变形卷积在特征融合阶段使用可变形卷积适应不同鱼类的形状变化特征重校准通过1×1卷积动态调整各尺度特征的贡献权重HSFPN结构示意图如下文字描述P5 ──────────────┬───────[DeformConv]──► Output ↑ │ P4 ───[1x1]───────┼───────[DeformConv]──► Output ↑ │ P3 ───[1x1]───────┼───────[DeformConv]──► Output ↑ │ Backbone [Dense] Features Connections该设计使小尺寸蛇头鱼的检测AP提高了4.8%同时对计算量的增加控制在15%以内。3. 数据集构建与预处理3.1 数据采集与标注我们构建了泰国淡水鱼专属数据集ThaiFish-4包含以下组成部分鱼种训练集验证集测试集主要采集环境巨型蛇头鱼1,200300500养殖池塘小型巨型蛇头鱼950250400河流普通蛇头鱼1,050300450湖泊罗非鱼1,800450600混合环境标注采用LabelImg工具以YOLO格式保存包含鱼类边界框和类别标签。特别针对以下挑战场景增加了样本鱼群密集重叠≥15% IoU水面反光干扰部分遮挡情况不同光照条件清晨/正午/黄昏3.2 数据增强策略为提高模型鲁棒性采用了组合式数据增强transform A.Compose([ A.HorizontalFlip(p0.5), A.RandomBrightnessContrast(p0.3), A.RandomRain(p0.1), # 模拟水面雨滴 A.RandomShadow(p0.2), # 模拟水面阴影 A.MotionBlur(blur_limit5, p0.2), # 模拟游动模糊 A.Rotate(limit15, p0.4), # 鱼类姿态变化 A.Cutout(num_holes8, max_h_size20, max_w_size20, p0.5) # 模拟遮挡 ], bbox_paramsA.BboxParams(formatyolo))特别设计了针对水下场景的增强颜色抖动模拟不同水质绿水/浊水添加人工气泡噪声光线折射效果模拟4. 模型训练与优化4.1 训练配置使用PyTorch框架在2×RTX 3090上进行训练关键参数配置# hyperparameters.yaml lr0: 0.01 lrf: 0.01 momentum: 0.937 weight_decay: 0.0005 warmup_epochs: 3 warmup_momentum: 0.8 box: 7.5 # box loss gain cls: 0.5 # cls loss gain dfl: 1.5 # dfl loss gain采用余弦退火学习率调度初始学习率0.01最终降至0.001。训练过程使用以下技巧EMA模型平均decay0.9999梯度裁剪max_norm10.0自动混合精度训练AMP4.2 损失函数改进原始YOLOv8使用VarifocalLossDFL的组合我们针对鱼类检测做了以下调整形状感知IoU损失def shape_aware_iou(box1, box2): # 计算常规IoU inter (torch.min(box1[:, 2:], box2[:, 2:]) - torch.max(box1[:, :2], box2[:, :2])).clamp(0) union (box1[:, 2:] - box1[:, :2]).prod(1) (box2[:, 2:] - box2[:, :2]).prod(1) - inter iou inter / union # 添加长宽比惩罚项 aspect_ratio1 (box1[:, 2] - box1[:, 0]) / (box1[:, 3] - box1[:, 1]) aspect_ratio2 (box2[:, 2] - box2[:, 0]) / (box2[:, 3] - box2[:, 1]) ratio_penalty torch.exp(-torch.abs(aspect_ratio1 - aspect_ratio2)) return iou * ratio_penalty类别平衡焦点损失class BalancedFocalLoss(nn.Module): def __init__(self, alpha[1.0, 1.2, 1.2, 0.8]): # 对应4类鱼的权重 super().__init__() self.alpha torch.tensor(alpha) def forward(self, pred, target): BCE_loss F.binary_cross_entropy_with_logits(pred, target, reductionnone) pt torch.exp(-BCE_loss) alpha self.alpha.to(pred.device)[torch.argmax(target, dim1)] loss alpha * (1-pt)**2 * BCE_loss return loss.mean()4.3 训练过程监控使用WandB进行训练可视化关键指标变化曲线如下![训练曲线示意图]mAP0.5: 从初始0.68提升至0.923分类损失从1.2降至0.15定位损失从2.5降至0.3训练约在150epoch后收敛总耗时约18小时。观察到前50epoch主要学习基础特征50-100epoch注意力机制开始显效100epoch后HSFPN带来明显精度提升5. 模型部署与性能优化5.1 模型导出与量化将PyTorch模型导出为ONNX格式并进行优化python export.py --weights yolov8s-ela-hsfpn.pt --include onnx --opset 16 \ --dynamic --simplify --device 0应用TensorRT INT8量化# 校准过程 calibrator trt.Int8EntropyCalibrator2( calibration_data_loader, cache_filecalibration.cache) builder_config builder.create_builder_config() builder_config.set_flag(trt.BuilderFlag.INT8) builder_config.int8_calibrator calibrator量化前后性能对比指标FP32INT8变化模型大小(MB)43.711.2-74%推理延迟(ms)22.315.6-30%mAP0.50.9230.915-0.8%5.2 部署架构设计系统采用C/S架构--------------- | 客户端 | |(视频流采集) | -------┬------- | ------------------ | ------------------ | 模型服务 |◄-------------►| 数据库 | | Triton Inference| | | PostgreSQL | | Server | | | (结果存储) | ------------------ | ------------------ | -------▼------- | 管理后台 | |(可视化分析) | ---------------关键实现细节使用Triton Inference Server实现模型并行服务客户端通过gRPC发送视频帧每帧添加时间戳和位置元数据结果存入PostgreSQL并生成统计报表5.3 边缘设备适配针对Jetson AGX Orin等边缘设备的优化层融合合并ConvBNReLU序列内核自动调优/usr/src/tensorrt/bin/trtexec --onnxyolov8s-ela-hsfpn.onnx \ --saveEngineyolov8s.engine \ --workspace2048 \ --best内存优化启用CUDA统一内存功耗控制设置功率上限30W边缘端性能分辨率1280×720吞吐量28FPS功耗29.5W内存占用1.8GB6. 实际应用与效果评估6.1 测试环境搭建在泰国呵叻府的三个养殖场部署测试系统室内循环水养殖池监控罗非鱼生长密度户外混合养殖塘统计蛇头鱼数量河流监测点追踪野生种群动态硬件配置工业相机Basler ace acA2000-50gc计算单元NVIDIA Jetson AGX Orin防水外壳IP67评级网络4G LTE备用有线主链路6.2 性能指标在真实场景下的测试结果场景准确率召回率FPS显存占用清澈水体日间95.2%93.8%421.6GB浑浊水体日间89.7%87.3%391.6GB夜间红外模式83.5%80.1%351.7GB暴雨天气76.8%74.2%321.7GB典型误检情况分析水草被误认为蛇头鱼约12%误检鱼群密集时的漏检约8%强烈反光导致的识别错误约5%6.3 与传统方法对比与人工计数和传统图像处理的对比实验1000帧测试集方法平均耗时准确率人力成本人工计数6.2小时88.3%3人传统图像处理1.5小时72.6%0.5人本系统8分钟92.3%0.1人实际应用中发现的关键优势连续性监测24小时不间断记录数据可追溯每帧检测结果存档早期预警发现异常鱼群行为生长分析通过尺寸变化评估生长状况7. 优化方向与扩展应用当前系统的局限性与改进空间多目标追踪集成DeepSORT算法实现个体追踪3D姿态估计通过双目相机估算鱼类体积异常行为检测基于时序分析识别病鱼跨域适应迁移学习适配其他地区鱼种在泰国渔业局的合作项目中该系统已扩展应用于养殖密度自动调控投喂量智能计算鱼病早期预警种质资源评估实际部署中发现的经验教训水面反光问题需通过偏振镜缓解定期清理相机镜头上的藻类雨季需加强设备防水措施模型需要每季度更新以适应鱼类生长变化