Yolov8 目标检测蒸馏学习记录

news2025/6/14 14:07:31

yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现

在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型性能的有效手段。它通过引入一个性能更强的教师模型,指导学生模型在保持高推理速度和小模型规模的前提下提升精度。在目标检测任务中,蒸馏技术特别适用于精度要求高但部署资源受限的场景,如边缘设备、工业检测等。检测主流的包含输出蒸馏、和特征蒸馏以及现在还有两者结合的方法。

输出蒸馏也被称为logits蒸馏或head-level蒸馏
它直接作用于检测器的最终输出层,指导学生学习教师的预测结果。对于目标检测模型来说,这些输出主要包括:

  • 类别概率分布(cls)
  • 目标置信度(obj/conf)
  • 边界框位置(bbox)
    通过最小化学生输出与教师输出之间的差异,学生能够从教师的“软标签”中学习更加细致的类别区分和更准确的目标定位信息。这种方法实现简单,对结构差异容忍度高,是目标检测蒸馏中应用最广泛的形式之一。

另一种特征蒸馏(Feature-Based Distillation):
特征蒸馏的核心思想是让学生模型在中间层提取到与教师模型相似的语义表示,从而提升整体特征表达能力。常见做法包括:

  • 单层对齐:选择某一关键层(如 Backbone 的最后一层)作为对齐目标;
  • 多层对齐:对多个阶段或模块(如 FPN、Neck)同时进行蒸馏,以增强全局信息传递;
  • 注意力蒸馏:通过显式提取教师的注意力图(通道或空间注意力)作为引导,强化学生对关键区域的感知能力。
    特征蒸馏一般需要对齐教师和学生的中间特征维度,可能引入额外的投影模块(如 1×1 卷积)进行通道匹配。

实践示例:以 YOLOv8 检测为例

在 YOLOv8 中,蒸馏的实现流程通常包括以下几个步骤:

  1. 构建教师模型与学生模型,分别加载预训练权重。
  2. 前向传播中同时计算教师和学生的输出,提取检测头与特征图。
  3. 设计蒸馏损失函数
  4. 将蒸馏损失与原始检测损失加权融合,参与总 loss 回传更新学生模型。
  5. 仅保存训练好的学生模型用于部署。

蒸馏训练

  • 以yolov8s和yolov8n分别作为教师和学生模型训练代码
import os
from ultralytics import YOLO
import torch

os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'


def main():
    model_t = YOLO('runs/detect/train_v8s/weights/best.pt')  # the teacher model
    model_s = YOLO('runs/detect/train_v8n/weights/best.pt')  # the student model
    """
    Attributes:
        Distillation: the distillation model
        loss_type: mgd, cwd
        amp: Automatic Mixed Precision
    """
    model_s.train(data="ultralytics/cfg/datasets/coco128.yaml", 
    Distillation=model_t.model, 
    loss_type='mgd', 
    amp=False, 
    imgsz=640, 
    epochs=100,
    batch=32, device=0, workers=0, lr0=0.001)


if __name__ == '__main__':
    main()

  • 如果教师和学生模型并非v8s和v8n需要调试更改下面代码

在ultralytics/engine/trainer.py中FeatureLoss类下的def forward(self, y_s, y_t):处进行断点调试,分别得到y_s和y_t对应的通道数

然后将对应的通道写入Distillation_loss类

channels_s = [128, 256, 128, 64, 128, 256][-le:]
channels_t = [256, 512, 256, 128, 256, 512][-le:]

最后重新训练模型即可

结果

  • 以coco128训练,为了快速验证,教师模型和学生模型各训练50e,btach 32,蒸馏训练50e,batch 32。
  • yolov8s教师模型
    在这里插入图片描述
  • yolov8n学生模型
    在这里插入图片描述
  • 蒸馏模型
    在这里插入图片描述

实验记录,不做参考,主要目的是跑通流程,具体还要在自己数据集上实测。

参考

本实现参考开源项目:https://github.com/jasonDasuantou/yolov8_distillation
蒸馏方法:MGD

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2407319.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…

基于 TAPD 进行项目管理

起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…

JVM 内存结构 详解

内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: ​ 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) ​遍历字符串​:通过外层循环逐一检查每个字符。​遇到 ? 时处理​: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: ​与…