简介本资源是面向农业AI、水产养殖智能化与计算机视觉初学者的YOLO目标检测专用数据集聚焦金鱼健康状态识别这一细分渔业场景解决传统人工巡检效率低、疾病早期发现难的问题。数据集共1657个文件含828张JPG金鱼图像覆盖健康、腹水病、白点病、败血症四类、对应828个YOLO格式TXT标注文件每图单框或多框标注以及1个结构清晰的data.yaml配置文件便于直接接入YOLOv8等主流框架训练。压缩包仅33.74MB轻量易下载适配边缘部署与教学实验。已有812人学习下载资源经专家筛选验证图像涵盖多角度、多光照及复杂背景具备良好泛化性用户可直接用于模型训练、疾病识别Demo开发、水产养殖课程案例实践或竞赛基线构建无需额外清洗与格式转换。1. 项目概述从“看鱼”到“诊鱼”的智能跨越养过金鱼的朋友都知道观察鱼的状态是日常管理中最重要也最头疼的一环。鱼不会说话一旦生病初期症状往往很隐蔽等发现时可能已经晚了。传统的观察依赖养殖者的经验费时费力还容易误判。这个名为“YOLO金鱼与金鱼疾病检测数据集”的项目正是为了解决这个痛点而生。它本质上是一个为计算机视觉模型特别是YOLO系列目标检测算法量身定制的训练“教材”。这个数据集里包含了大量标注好的金鱼图片不仅告诉模型“这是一条金鱼”更进一步告诉它“这条金鱼的哪个部位出现了什么病症”比如烂尾、白点、水霉等。通过训练模型就能学会像一位经验丰富的鱼医一样自动、快速、准确地识别出视频或图片中的病鱼及其病症类型。这个项目的价值远不止于服务家庭宠物鱼爱好者。在规模化水产养殖场动辄数万尾鱼的养殖密度下人工巡检的效率极低且夜间、恶劣天气下难以进行。一套基于此数据集训练出的自动化监测系统可以7x24小时不间断工作实时预警鱼群健康状况指导精准用药减少经济损失并降低因滥用药物带来的环境和食品安全风险。对于渔业科研人员来说一个高质量、标注精细的数据集更是无价之宝可以用于疾病流行规律研究、新药疗效评估等。因此这个项目看似小众实则切入了智慧渔业、宠物健康管理乃至生物研究等多个领域的实际需求是将前沿的AI目标检测技术落地到传统产业的一次非常有意义的尝试。2. 数据集构建的核心思路与挑战构建一个能用的数据集和构建一个“好用”的数据集中间隔着巨大的工作量和技术考量。这个金鱼疾病检测数据集其核心思路可以概括为“双重标注”和“场景还原”。2.1 “双重标注”策略目标与病症的绑定普通的目标检测数据集标注框Bounding Box只包含类别信息例如“金鱼”。但对于疾病检测这是远远不够的。本项目需要实现的是细粒度的视觉识别因此采用了“实例级”的标注策略。具体来说每一条金鱼都是一个独立的实例。对于健康的金鱼标注其整体轮廓框并赋予“健康金鱼”的类别标签。对于生病的金鱼则需要进行更精细的标注整体框首先框出整条鱼类别为“病鱼”或具体疾病名如“白点病鱼”。病灶区域框可选但推荐在整条鱼的框内再对可见的典型病灶进行二次标注。例如尾部腐烂的区域标一个框类别为“烂尾”体表白点密集的区域标一个框类别为“白点病”。这种“整体局部”的双重标注为模型提供了更丰富的学习信号。模型不仅能学会识别病鱼还能初步定位病灶这对于后续的病情严重程度评估至关重要。在数据集的标注格式上通常采用YOLO格式的.txt文件每一行代表一个标注对象包含class_id x_center y_center width height。对于一条同时有整体框和病灶框的病鱼其对应的标注文件里就会有多个这样的行。2.2 “场景还原”的数据采集数据的质量决定了模型的天花板。金鱼疾病检测面临几个独特的挑战环境复杂鱼缸背景多样水草、砂石、造景、光线多变反光、折射、水体可能浑浊。目标多变金鱼品种繁多龙睛、狮头、琉金等形态、颜色、大小差异巨大。病症相似性有些疾病初期症状相似如轻微充血与细菌感染需要极高分辨率的图像才能区分。姿态多样鱼是游动的图像可能存在各种角度、遮挡被水草或其它鱼遮挡。因此在数据采集阶段就必须考虑这些因素尽可能覆盖真实场景。一个鲁棒的数据集应该包含多环境样本透明缸、生态缸、裸缸、室外池塘等不同背景。多光照条件自然光、室内灯光、夜间补光、避免强光直射导致过曝。多疾病阶段同一种疾病如烂尾的初期、中期、末期样本这对于构建疾病预警系统尤为重要。多角度与姿态正面、侧面、俯视、倾斜角度以及部分遮挡的样本。注意数据平衡是关键。切忌“健康金鱼”的图片数量远远多于“病鱼”图片这会导致模型严重偏向于将任何鱼都预测为健康。对于每种疾病都应保证有最低限度的样本数量通常建议每种疾病不少于200-300个有效实例并可以通过图像增强技术如旋转、裁剪、调整亮度对比度、添加模拟水波纹噪声等来适度扩充少数类别。3. 数据标注的实操要点与工具选择有了原始图片下一步就是繁重但至关重要的标注工作。标注的准确性直接关系到模型性能。3.1 标注工具选型对于目标检测任务有几款成熟的开源工具可供选择LabelImg老牌经典界面简单直接支持输出YOLO格式。适合初学者和小规模项目。CVAT (Computer Vision Annotation Tool)功能强大的在线标注系统由Intel开源。支持视频标注、自动插值、团队协作、多种导出格式。对于金鱼这种动态目标用CVAT标注视频再抽取关键帧效率远高于逐张图片标注。Roboflow不仅是一个标注工具更是一个完整的数据集管理平台。它提供在线标注、版本控制、一键增强、自动预处理和格式转换功能能极大提升数据准备流程的效率。对于个人或小团队项目其免费版通常足够使用。在本项目中考虑到金鱼疾病的细粒度标注需求我推荐使用CVAT或Roboflow。CVAT的视频标注功能对于捕捉游动中金鱼的不同姿态非常有用而Roboflow的自动化工作流可以轻松实现数据增强和格式统一。3.2 标注规范与一致性制定并严格遵守标注规范是保证数据集质量的生命线。在开始标注前团队必须明确以下细节类别定义精确定义每一种疾病。例如“白点病”是指鱼体表覆盖的明显白色颗粒状囊肿“水霉病”是指棉絮状的菌丝附着。最好能提供标准示例图片。框体范围整体框应紧贴鱼的身体最外侧轮廓包括所有鱼鳍。对于严重变形的鱼如蛋种金鱼需根据其品种特点调整。病灶框仅框出肉眼清晰可见的异常区域。对于弥散性症状如全身充血如果无法界定清晰边界则只标注整体框类别定义为该疾病。遮挡与模糊处理对于被水草严重遮挡超过50%的鱼或画面极度模糊无法辨认的鱼应舍弃不予标注。部分遮挡的按可见部分标注。多病症处理一条鱼可能同时患多种病。应分别标注各个病灶区域并赋予相应类别。其整体框的类别可以选择最主要的一种疾病或统一设为“复合病症”。实操心得标注过程最好由至少两人完成一人标注另一人进行交叉审核。定期召开校准会议讨论疑难样本统一标注尺度。可以使用标注工具中的“审阅”功能。这个过程很枯燥但前期多花一小时统一标准后期训练就能省下几十小时调参的功夫。4. 数据集的组织与预处理标注完成后得到的是图片文件和对应的标注文件。接下来需要将其组织成模型训练所需的格式。4.1 标准目录结构一个清晰的目录结构有利于管理和后续的脚本处理。推荐如下结构Goldfish_Disease_Detection_Dataset/ ├── images/ │ ├── train/ # 训练集图片 │ ├── val/ # 验证集图片 │ └── test/ # 测试集图片可选也可从val划分 └── labels/ ├── train/ # 训练集标注文件与images/train一一对应 ├── val/ # 验证集标注文件 └── test/ # 测试集标注文件数据集划分的比例通常为训练集:验证集:测试集 70%:15%:15% 或 80%:10%:10%。必须确保划分是随机的且保持类别分布大致一致即每个集合中各类疾病的比例与整体数据集相似。4.2 数据增强策略针对水下检测的难点有针对性的数据增强能显著提升模型鲁棒性。除了通用的旋转、平移、缩放、裁剪外应重点考虑色彩抖动与模糊模拟水体浑浊、光线变化。可以随机调整图像的亮度、对比度、饱和度和色调。模拟光学效应添加轻微的高斯模糊或运动模糊模拟鱼快速游动或相机对焦不准的情况。添加噪声模拟水中的悬浮颗粒或传感器噪声。混合与镶嵌MixUp/Mosaic这是YOLO系列训练中常用的强力增强技术。Mosaic将四张图片拼成一张让模型学习在不同尺度、不同上下文中识别目标对于小目标如鱼身上的白点检测特别有效。注意事项数据增强应在训练时**在线on-the-fly**进行而不是预先处理好存下来。这样每个epoch模型看到的都是略有不同的增强图像能更好地学习泛化特征。大多数现代深度学习框架如PyTorch的Torchvision Ultralytics YOLO的dataset.yaml配置都支持方便地配置在线增强。4.3 创建数据集配置文件对于YOLOv5/v8等项目需要一个描述数据集的.yaml文件。这个文件是连接数据和训练代码的桥梁。# goldfish.yaml path: /path/to/Goldfish_Disease_Detection_Dataset # 数据集根目录 train: images/train # 训练集图片路径相对path val: images/val # 验证集图片路径 # 类别列表 names: 0: healthy_goldfish 1: sick_goldfish_ich # 白点病 2: sick_goldfish_fin_rot # 烂尾病 3: sick_goldfish_fungus # 水霉病 # ... 其他疾病类别这个文件会告诉训练脚本去哪里找数据以及每个数字类别ID对应的具体名称。5. 基于YOLO模型的训练与调优实战数据集准备就绪后就可以开始训练模型了。这里以目前生态最完善、应用最广泛的Ultralytics YOLOv8为例展示核心步骤。5.1 环境搭建与模型选择首先安装Ultralytics库它封装了训练、验证、预测的全流程。pip install ultralyticsYOLOv8提供了不同尺寸的预训练模型从轻量化的YOLOv8nnano到高精度的YOLOv8x。对于金鱼疾病检测需要在速度和精度间权衡如果部署在算力有限的边缘设备如养殖场巡检机器人、嵌入式相机优先考虑YOLOv8s或YOLOv8m。如果用于后端服务器分析高清视频流可以使用YOLOv8l或YOLOv8x以获得更高精度。对于初始尝试建议从YOLOv8m开始它是一个不错的平衡点。5.2 关键训练参数解析启动训练的核心命令很简单但背后的参数配置大有学问。yolo taskdetect modetrain modelyolov8m.pt datagoldfish.yaml epochs100 imgsz640 batch16epochs100: 迭代轮数。对于中等规模数据集数千张图片100-150个epoch通常足够。可以通过观察验证集损失曲线来判断是否早停。imgsz640: 输入图像尺寸。YOLO会将所有图片统一缩放到此尺寸。更大的尺寸如1280能保留更多细节可能提升小病灶如白点的检测能力但会显著增加显存消耗和训练时间。640是一个通用且高效的起点。batch16: 批大小。取决于你的GPU显存。在显存允许的情况下使用更大的batch size可以使训练更稳定。如果出现CUDA out of memory错误就减小batch或imgsz。更重要的配置在于args或配置文件中的高级参数optimizer: 优化器。默认是SGD对于小数据集AdamW有时收敛更快。lr0(初始学习率): 这是最重要的超参数之一。对于使用预训练权重的情况学习率不宜太大通常设置在1e-3到1e-4之间。可以从1e-3开始如果训练不稳定损失NaN就降低到5e-4或1e-4。cos_lr: 启用余弦退火学习率调度。这非常有用它让学习率随着训练过程平滑下降有助于模型在后期收敛到更好的局部最优点。强烈建议开启。label_smoothing: 标签平滑。一种正则化技术可以防止模型对训练数据过度自信提升泛化能力。通常设置为0.1。mixup: 混合增强。对于防止过拟合、提升鲁棒性效果显著建议设置为0.2左右。5.3 训练过程监控与评估训练开始后Ultralytics会启动一个本地Web服务器默认http://localhost:3000提供实时可视化仪表板。你需要重点关注以下几个指标损失曲线loss curvestrain/box_loss,train/cls_loss: 训练集边界框和分类损失。它们应该稳步下降。val/box_loss,val/cls_loss: 验证集损失。这是关键理想情况下它应随训练集损失同步下降。如果验证集损失在多个epoch后不再下降甚至上升说明模型开始过拟合了。性能指标mAP50(Mean Average Precision at IoU0.5): 最常用的目标检测评估指标。它衡量模型在不同置信度阈值下的平均精度。这个值越高越好达到0.8以上通常说明模型性能优秀。mAP50-95: 在IoU阈值从0.5到0.95步长0.05区间内的平均mAP是更严格的指标尤其考验边界框的定位精度。precision(精确率) 和recall(召回率): 需要平衡。高精确率意味着模型预测为病鱼的框里真的病鱼比例高误报少。高召回率意味着实际所有的病鱼被模型找出来的比例高漏报少。在实际养殖场景中高召回率可能比高精确率更重要因为漏检一条病鱼假阴性的代价可能比误报一条健康鱼假阳性的代价大得多。调优策略如果验证集mAP在后期停滞不前可以尝试增加数据增强的强度如提高mosaic概率。轻微降低学习率lr0并增加训练轮数epochs。检查数据集中是否存在标注错误或模糊样本进行清洗。对于小目标病灶检测不佳可以尝试将imgsz提高到800或960需相应调整batch。6. 模型部署与应用场景构建训练出一个满意的模型.pt文件只是第一步让模型在真实场景中跑起来并产生价值才是最终目的。6.1 模型导出与优化YOLOv8训练出的PyTorch模型.pt需要根据部署环境进行转换。TensorRT部署NVIDIA GPU服务器/边缘设备这是追求极致性能的选择。使用export.py将模型导出为TensorRT的.engine格式。yolo export modelbest.pt formatengine device0这个过程会进行图优化、层融合、精度校准FP16/INT8能获得数倍于原生PyTorch的推理速度。对于需要实时处理多路视频流的养殖场监控中心TensorRT几乎是必选项。ONNX Runtime部署跨平台如果需要部署在Intel CPU、ARM设备如树莓派或其它AI加速卡上可以导出为ONNX格式。yolo export modelbest.pt formatonnxONNX模型可以被多种推理引擎支持灵活性最高。OpenVINO部署Intel CPU/集成显卡针对Intel硬件进一步优化能获得很好的CPU推理性能。CoreML或TFLite部署移动端/嵌入式用于iOS或Android手机APP或TensorFlow Lite支持的边缘设备。6.2 构建端到端应用流水线一个完整的金鱼疾病检测系统不仅仅是运行模型。它通常包含以下模块图像/视频采集模块连接网络摄像头、RTSP视频流或处理上传的图片。预处理模块对输入帧进行缩放、归一化、颜色空间转换BGR2RGB使其符合模型输入要求。推理模块加载优化后的模型执行前向传播得到预测框、类别和置信度。后处理模块非极大值抑制NMS过滤掉重叠的、低置信度的冗余预测框。YOLO输出通常已包含此步骤但可能需要根据场景调整conf置信度阈值和iouNMS的IoU阈值。对于疾病检测为了高召回率可以适当降低conf如从0.25降到0.15。结果解析将预测框坐标映射回原始图像尺寸并关联类别名称。业务逻辑与告警模块计数与统计统计当前画面中健康鱼和各类病鱼的数量。持续跟踪对同一尾鱼进行跨帧跟踪可以使用简单的IOU跟踪或DeepSORT等算法避免重复报警。只有当某条鱼被持续多帧判定为患病才触发告警。告警触发通过声音、灯光、手机推送、管理后台弹窗等方式通知养殖人员。告警信息应包含时间、位置摄像头编号、鱼ID可选、疾病类型、置信度。可视化与存储模块将检测结果带框和标签的图像实时显示在监控大屏上同时将告警记录、统计报表存入数据库如MySQL、PostgreSQL或时序数据库如InfluxDB用于历史查询和数据分析。6.3 应用场景示例家庭智能鱼缸监控在鱼缸上方安装一个树莓派摄像头模组运行轻量化模型如YOLOv8n-int8。当检测到病鱼时通过家庭Wi-Fi向主人的手机APP发送推送通知并可能联动自动喂食器暂停喂食。规模化养殖场中央监控系统在每个鱼池安装防水摄像头视频流通过有线网络汇聚到场部的边缘服务器或云端服务器。服务器运行高性能模型进行7x24小时分析。系统大屏展示全场鱼池的健康热力图并自动生成每日健康报告指导巡检和用药。渔业科研与检疫站辅助工具科研人员或检疫员拍摄样本照片或短视频上传至电脑端软件软件快速给出初步诊断建议和病灶定位辅助人工判断提高工作效率和一致性。7. 常见问题与排查技巧实录在实际开发和部署过程中你会遇到各种各样的问题。下面是我踩过的一些坑和总结的排查思路。7.1 训练阶段问题问题1训练损失loss居高不下或者剧烈震荡。可能原因与排查学习率过高这是最常见的原因。立即检查lr0参数。尝试将其降低一个数量级例如从1e-3降到1e-4。数据标注错误检查数据集中是否存在大量错误的标注例如框错目标、类别标错。可以可视化一部分训练数据看看。数据预处理问题检查图像和标注文件是否一一对应路径是否正确。确认dataset.yaml文件中的路径是绝对路径还是相对路径确保训练脚本能正确读取。模型与任务不匹配确认你使用的是目标检测模型yolov8n.pt而不是分割或分类模型。问题2验证集mAP很低但训练集损失正常下降过拟合。可能原因与排查数据量太少这是根本原因。金鱼疾病数据本身难以获取如果每类疾病只有几十张图片模型很容易记住训练集而无法泛化。解决方案尽可能收集更多数据充分利用数据增强Mosaic, MixUp, 随机裁剪等尝试使用迁移学习在更大的通用数据集如COCO上预训练的模型上微调。模型复杂度太高对于小数据集使用了过大的模型如YOLOv8x。尝试换用更小的模型YOLOv8n/s。正则化不足增加label_smoothing参数如设为0.1启用更多的数据增强或在优化器中加入权重衰减weight_decay。问题3某一类疾病如“烂尾”的AP值特别低。可能原因与排查类别不平衡该类疾病的样本数量远少于其他类别。检查数据分布。解决方案对该类图片进行过采样重复使用在数据增强时对该类图片应用更强的增强在损失函数中使用类别权重Focal Loss或修改class_weights参数。特征难以学习该疾病症状可能不明显或与背景/其他疾病相似。尝试增加该类样本的采集确保标注更精确病灶框更准。可以考虑将该类与症状相似的类合并先做粗粒度检测。7.2 推理部署阶段问题问题4模型在训练集上表现很好但部署到真实鱼缸画面中检测效果很差。可能原因与排查领域差异Domain Gap训练数据的环境光照、背景、水质、相机型号与真实部署环境差异太大。解决方案进行“领域适应”。在真实环境中采集少量未标注或简单标注的数据加入到训练集中进行微调fine-tuning。这是提升模型在实际场景中表现的最有效方法之一。推理时预处理不一致确保部署代码中的图像预处理缩放、归一化均值标准差与训练时完全一致。YOLOv8通常使用imgsz640和固定的归一化参数。后处理参数不当调整conf置信度阈值和iouNMS阈值。真实场景中背景更复杂可以适当降低conf以提高召回率但可能会增加误报。问题5部署在边缘设备如Jetson Nano上推理速度太慢。可能原因与排查模型未优化确保使用了针对该硬件优化的格式如Jetson上用TensorRT树莓派上用TFLite。FP16或INT8量化能大幅提升速度且精度损失可控。模型过大换用更小的模型变体如YOLOv8n。输入尺寸过大降低imgsz如从640降到320速度会成平方倍提升但精度会下降需要权衡。代码效率低检查推理循环中是否有不必要的内存拷贝、重复初始化。使用异步处理和多线程让数据加载、推理、后处理流水线化。问题6出现大量重复检测框同一尾鱼被检出多次。可能原因与排查NMS的IoU阈值过低NMS用于合并重叠框。如果iou阈值设得太高如0.7可能无法合并相近的框。尝试降低iou阈值如0.45。但注意降得太低可能会误删并排的两条鱼。模型本身的问题如果训练数据中同一目标的标注框就不一致有的框得大有的框得小模型可能学出多个检测模式。这需要从数据标注源头解决。构建和运用“YOLO金鱼与金鱼疾病检测数据集”的过程是一个典型的AI落地闭环从定义问题、收集数据、标注、训练、调优到最终部署应用。每一个环节都充满了细节和挑战但也正是这些细节决定了项目的成败。这个数据集的价值不仅在于其本身更在于它提供了一套方法论可以复用到其他水产养殖物种如对虾、石斑鱼的疾病监测上为智慧渔业的发展铺就了一块坚实的技术基石。在实际操作中保持耐心严谨对待数据持续迭代模型并根据真实反馈不断优化才能让这项技术真正为产业创造价值。本文还有配套的精品资源点击获取