本项目基于Pytorch和ultralytics YOLOv8,针对海洋场景下的小目标检测任务进行了多方面改进,包括数据、模型结构和训练策略。我们使用Sea数据集进行训练和评估,该数据集包含海参(holothurian)、海胆(echinus)、扇贝(scallop)和海星(starfish)等几类海洋生物。项目支持在本地系统和昇腾(Ascend)平台上部署,适用于学术研究和工程应用。
YOLOv8_Ascend/
├── YOLO_Improve/ # YOLO改进模块及相关脚本
│ ├── core/
│ │ ├── biFPN.py # BiFPN结构实现
│ │ ├── checkpoints/ # 预训练权重
│ │ └── configs/ # 配置文件(模型/数据集)
│ └── data/ # 数据集
│ ├── coco128/
│ ├── coco8/
│ └── sea/ # 海洋生物数据集
├── YOLOv8_Sea/ # 训练、测试、评估脚本
│ ├── train_yolov8n_BiFPN.py
│ ├── train_yolov8s.py
│ ├── eval.py
│ └── data_processing/ # 数据处理
├── runs/ # 训练输出
├── Yolov8-p2-BiFPN1_Device/ # 设备端推理相关
│ └── Ascend_YoloTest/
├── ultralytics-main/ # Ultralytics YOLOv8源码
└── README.md # 项目说明
- Python >= 3.8
- torch >= 1.8
- ultralytics >= 8.0
- 其他依赖见 requirements.txt 或 pyproject.toml
- P2小目标检测层:在YOLOv8原有P3、P4、P5输出层基础上,增加P2层,提升小目标检测能力。
- BiFPN特征金字塔融合:引入BiFPN结构,采用可学习加权融合和本层跳跃连接,提升多尺度特征融合效果。
YOLO_Improve/core/biFPN.py 中实现了 BiConcat2 和 BiConcat3 两个模块,支持可学习权重的特征融合。
在 ultralytics/nn/task.py 中注册 BiConcat2、BiConcat3 组件,实现 BiFPN 结构的集成。
- 本项目主要使用
sea海洋生物数据集,包含海参(holothurian)、海胆(echinus)、扇贝(scallop)和海星(starfish)四类目标。同时支持COCO等标准数据集。 - 数据集需采用YOLO格式,标签为
id x y w h,坐标归一化到0-1。 - 数据集结构:
- images/ - train/ - val/ - labels/ - train/ - val/ - 数据集配置信息存储于yaml文件,格式参考coco.yaml。
- 通过yaml文件(如 yolov8s-p2-BiFPN.yaml)描述模型结构,直接调用ultralytics YOLO模块加载:
from ultralytics import YOLO model = YOLO('yolov8s-p2-BiFPN.yaml')
- 训练脚本位于
YOLOv8_Sea/,如train_yolov8s.py、train_yolov8n_BiFPN.py。 - 测试与评估脚本如
test.py、eval.py。 - 训练与推理命令参考官方Ultralytics文档。
- AscendCL为昇腾平台C语言API,pyACL为其Python封装。
- 支持模型推理、资源管理、算子加速等。
- MindX SDK为昇腾AI高层开发工具,简化推理流程。
- 初始化:
from mindx.sdk import base base.mx_init()
- 推理示例:
import numpy as np from mindx.sdk import base from mindx.sdk.base import Tensor, Model input_array = np.load("preprocess_array.npy") input_tensor = Tensor(input_array) input_tensor.to_device(device_id) input_tensors = [input_tensor] model_path = "resnet50_batchsize_1.om" model = Model(modelPath=model_path, deviceId=device_id) outputs = model.infer(input_tensors)
如有问题请联系项目维护者。