Skip to content

Jafekin/Ascend_YOLOv8Lite

Repository files navigation

Ascend YOLOv8Lite:海洋小目标检测与昇腾部署

项目简介

本项目基于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

YOLO算法改进

1. 小目标检测改进

  • P2小目标检测层:在YOLOv8原有P3、P4、P5输出层基础上,增加P2层,提升小目标检测能力。
  • BiFPN特征金字塔融合:引入BiFPN结构,采用可学习加权融合和本层跳跃连接,提升多尺度特征融合效果。

BiFPN结构实现

YOLO_Improve/core/biFPN.py 中实现了 BiConcat2 和 BiConcat3 两个模块,支持可学习权重的特征融合。

Ultralytics集成

ultralytics/nn/task.py 中注册 BiConcat2、BiConcat3 组件,实现 BiFPN 结构的集成。

2. 数据集与格式

  • 本项目主要使用sea海洋生物数据集,包含海参(holothurian)、海胆(echinus)、扇贝(scallop)和海星(starfish)四类目标。同时支持COCO等标准数据集。
  • 数据集需采用YOLO格式,标签为 id x y w h,坐标归一化到0-1。
  • 数据集结构:
    - images/
      - train/
      - val/
    - labels/
      - train/
      - val/
    
  • 数据集配置信息存储于yaml文件,格式参考coco.yaml。

3. 模型结构配置

  • 通过yaml文件(如 yolov8s-p2-BiFPN.yaml)描述模型结构,直接调用ultralytics YOLO模块加载:
    from ultralytics import YOLO
    model = YOLO('yolov8s-p2-BiFPN.yaml')

4. 训练与测试

  • 训练脚本位于 YOLOv8_Sea/,如 train_yolov8s.pytrain_yolov8n_BiFPN.py
  • 测试与评估脚本如 test.pyeval.py
  • 训练与推理命令参考官方Ultralytics文档。

昇腾Ascend平台部署

1. AscendCL (pyACL)

  • AscendCL为昇腾平台C语言API,pyACL为其Python封装。
  • 支持模型推理、资源管理、算子加速等。

2. MindX SDK

  • 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)

参考


如有问题请联系项目维护者。

About

基于YOLOv8针对海洋场景下的小目标检测任务进行了多方面改进

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors