YOLOv8改进 | 自定义数据集训练 | AirNet助力YOLOv8检测

目录

一、本文介绍

二、AirNet原理介绍

2.1 对比基降解编码器(CBDE)

2.2 降解引导修复网络(DGRN)

三、yolov8与AirNet结合修改教程

3.1 核心代码文件的创建与添加

3.1.1 AirNet.py文件添加

3.1.2  __init__.py文件添加

3.2 yolov8 的tasks.py 文件修改

3.2.1 导入AirNet模块

3.2.2 添加AirNet模块

3.3  模型配置文件添加

3.3.1 构建模型配置文件yolov8-airnet.yaml

3.3.2 配置网络结构

四、自定义数据集

4.1数据标注

4.2 数据格式转换

4.4 训练数据集配置文件添加

五、模型训练

5.1 训练文件的创建与配置

5.2 训练过程展示

六、半自动标注

七、总结


一、本文介绍

本文将为读者带来一种适用多种复杂场景的全能图像修复网络AIrNet网络,其由对比基降解编码器(CBDE)和降解引导修复网络(DGRN)两个网络组成,能够在未知损坏类型和程度的情况下恢复受损图像。此外、还提供将其与YOLOv8等目标检测模型有效结合改进的方法,使其能显著提升模型在处理受损图像时的性能,并对自定义数据集的训练以及半自动化标注的方法进行简单介绍,帮助力读者快速在自己的数据集上进行实验与应用。

二、AirNet原理介绍

官方论文地址:All-in-One Image Restoration for Unknown Corruption (thecvf.com)

官方代码地址:https://github. com/XLearning-SCU/2022-CVPR-AirNet

摘要:在本文中,我们研究了一个图像恢复领域的挑战性问题,即如何开发一种全能方法,能够从各种未知类型和程度的损坏中恢复图像。为此,我们提出了一种全能图像恢复网络(AirNet),该网络由两个神经模块组成,分别是对比基降解编码器(CBDE)和降解引导修复网络(DGRN)。AirNet的主要优势体现在两个方面。首先,它是一个全能解决方案,能够在一个网络中恢复各种受损图像。其次,AirNet不依赖于损坏类型和程度的先验知识,仅使用观察到的受损图像进行推理。这两个优势使得AirNet在现实世界场景中更加灵活和经济,因为在这些场景中,损坏的先验知识很难得知,且损坏情况会随空间和时间而变化。广泛的实验结果表明,所提出的方法在四个具有挑战性的数据集上优于17种图像恢复基线方法。

 

AIrNet是一种创新的图像修复网络,专为处理多种未知和复杂的图像损坏场景设计。它结合了对比基降解编码器(CBDE)和降解引导修复网络(DGRN)两个核心组件,能够在不依赖具体损坏类型或程度先验知识的情况下,有效恢复受损图像的质量。这种网络结构不仅提升了图像修复的泛化能力,还显著增强了修复效果的自然度和准确性。

2.1 对比基降解编码器(CBDE)

CBDE是AIrNet的第一阶段,负责从受损图像中提取关键特征,并识别出图像中的降解模式(如模糊、噪声、压缩失真等)。该编码器通过对比学习机制,将受损图像与一系列预设的“干净-降解”图像对进行对比,从而学习如何准确表征图像中的降解特性。这一过程为后续的修复工作提供了重要的先验信息。

2.2 降解引导修复网络(DGRN)

DGRN利用CBDE提取的特征和降解信息,指导图像修复过程。该网络设计有强大的生成能力,能够基于降解特征生成对应的修复策略,并应用于受损图像,以恢复其原始质量。DGRN通过多层卷积、残差连接和注意力机制等先进技术,确保修复结果既符合图像的自然规律,又能有效去除各种形式的损坏。

三、yolov8与AirNet结合修改教程

3.1 核心代码文件的创建与添加

3.1.1 AirNet.py文件添加

找到ultralytics/nn文件夹,建立Addmoudules文件夹,并在该文件夹下建立AirNet.py文件,如下图。

AirNet.py添加核心代码,如下

import math
import torch
import torch.nn as nn
from torch.nn.modules.utils import _pair
from mmcv.ops import modulated_deform_conv2d__all__ = ['AirNet']class DCN_layer(nn.Module):def __init__(self, in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1,groups=1, deformable_groups=1, bias=True, extra_offset_mask=True):super(DCN_layer, self).__init__()self.in_channels = in_channelsself.out_channels = out_channelsself.kernel_size = _pair(kernel_size)self.stride = strideself.padding = paddingself.dilation = dilationself.groups = groupsself.deformable_groups = deformable_groupsself.with_bias = bias.........

注:全部代码私信博主获取

3.1.2  __init__.py文件添加

在Addmoudules文件夹建立__init__.py文件,如下图

__init__.py文件 添加代码,如下

from .AirNet import *

3.2 yolov8 的tasks.py 文件修改

找到ultralytics/nn文件夹下的task.py 文件并打开

3.2.1 导入AirNet模块

3.2.2 添加AirNet模块

注:其中红色框为添加部分

3.3  模型配置文件添加

3.3.1 构建模型配置文件yolov8-airnet.yaml

找到ultralytics/cfg/models/v8文件夹,并在该文件夹下建立yolov8-airnet.yaml文件,如下图

3.3.2 配置网络结构

打开 yolov8-airnet.yaml 文件,在其中配置网络结构,如下

# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect# Parameters
nc: 80  # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'# [depth, width, max_channels]n: [0.33, 0.25, 1024]  # YOLOv8n summary: 225 layers,  3157200 parameters,  3157184 gradients,   8.9 GFLOPss: [0.33, 0.50, 1024]  # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients,  28.8 GFLOPsm: [0.67, 0.75, 768]   # YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients,  79.3 GFLOPsl: [1.00, 1.00, 512]   # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPsx: [1.00, 1.25, 512]   # YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs# YOLOv8.0n backbone
backbone:# [from, repeats, module, args]- [-1, 1, AirNet, []]  # 0-P1/2- [-1, 1, Conv, [64, 3, 2]]  # 1-P1/2- [-1, 1, Conv, [128, 3, 2]]  # 2-P2/4- [-1, 3, C2f, [128, True]]- [-1, 1, Conv, [256, 3, 2]]  # 4-P3/8- [-1, 6, C2f, [256, True]]- [-1, 1, Conv, [512, 3, 2]]  # 6-P4/16- [-1, 6, C2f, [512, True]]- [-1, 1, Conv, [1024, 3, 2]]  # 8-P5/32- [-1, 3, C2f, [1024, True]]- [-1, 1, SPPF, [1024, 5]]  # 10# YOLOv8.0n head...

注:全部代码私信博主获取

四、自定义数据集

4.1数据标注

新建两个文件夹如下,其中images用于保存待标注的图片数据,Annotations用于保存标注过后xml格式的标签文件

打开 labelimg 标注工具(标注工具自行检索下载),如下图,配置images,Annotations文件夹所在路径,然后进行标注

标注后将在Annotations文件夹下生成如下文件

4.2 数据格式转换

如下图新建label文件夹,用于保存由Annotations文件夹下的xml标签文件转换后,适合yolov8训练的txt格式的标签文件

定位至Yolov8_Dataset_Processing/xmls2yolo.py文件并打开,再定位如下图到红色框处,需配置检测的标签列表,以及xml标签路径(Annotations),转换后txt格式的标签路径(label)。

配置完成后运行xmls2yolo.py,即可在label文件夹下生成所需txt格式的标签文件,如下图

注:全部代码联系博主获得

4.3 数据集划分

定位至Yolov8_Dataset_Processing/dataset_split.py文件,打开并定位至红色框处,需配置

classes、source_file_path 、images_file_path ,如下图所示

配置完成后运行dataset_split.py,即可在lmages同级文件夹下生成划分后的训练集、验证集、测试集,如下图

4.4 训练数据集配置文件添加

定位至ultralytics/cfg/datasets文件夹下,新建训练数据集的配置文件a_sleep.yaml如下图

在a_sleep.yaml 文件中进行训练、验证、测试数据的配置,如下图

注:若有多个训练、验证、测试数据,只需在对应位置继续添加即可,参考注释掉的部分

五、模型训练

5.1 训练文件的创建与配置

在ultralytics的同级目录处创建train.py 文件

点击打开train.py文件,如下图需配置 1,与 2处,其中1配置的是本文3.3构建模型配置文件yolov8-airnet.yaml。2处配置的是本文4.4 新建训练数据集的配置文件a_sleep.yaml。

5.2 训练过程展示

六、半自动标注

七、总结

本文介绍了一种适用于多种复杂场景的全能图像修复网络AIrNet,AIrNet通过对比基降解编码器和降解引导修复网络两个核心组件,能够在未知损坏类型和程度的情况下有效恢复受损图像的质量。同时,本文还提供了将AIrNet与YOLOv8结合进行目标检测的方法,并介绍了自定义数据集的训练和半自动标注的流程。这些方法和流程可以帮助读者在自己的数据集上进行实验与应用,提高图像修复和目标检测的准确性和效率。

注:上述构建自定义的数据的方法,针对所有yolo系列模型检测数据构建与方法均有效。全部代码私信博主获取。结合全部代码阅读本博客更为清晰明了

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

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

相关文章

【qt】一个WPS项目了解qt界面设计的基本套路

项目功能演示: 放心食用!最后有完整代码. 超级详细,期待您的一个点赞❥(^_-) 一览全局: WPS项目目录 一.创建项目二.导入资源三.ui设计四.字号选择框初始化五.滚动条初始化六.添加自定义文本类七.初始化action状态八.新建文档九.打开文件十.保存与另存为十一.打印/打印预览十…

vue 入门一

参考&#xff1a;丁丁的哔哩哔哩 1.使用vue 1.1 使用CDN的方式使用Vue mount和<div id"counter">关联起来 1.2 vue中的createApp import { createApp } from "vue"; import App from "./App.vue"; createApp(App).mount("#app&qu…

PyTorch使用------自动微分模块

目录 &#x1f354; 梯度基本计算 1.1 单标量梯度的计算 1.2 单向量梯度的计算 1.3 多标量梯度计算 1.4 多向量梯度计算 1.5 运行结果&#x1f4af; &#x1f354; 控制梯度计算 2.1 控制不计算梯度 2.2 注意: 累计梯度 2.3 梯度下降优化最优解 2.4 运行结果&#x1…

数字工厂管理系统与MES系统在实际应用中有哪些区别

随着制造业的数字化转型步伐加快&#xff0c;数字工厂管理系统与制造执行MES系统作为两大关键工具&#xff0c;在实际应用中展现出了明显的差异。本文将从实际应用的角度&#xff0c;详细探讨这两种系统之间的主要区别。 数字工厂管理系统的实际应用 数字工厂管理系统侧重于对…

掌握Spring Boot数据库集成:用JPA和Hibernate构建高效数据交互与版本控制

在现代应用开发中&#xff0c;数据库操作是核心环节之一。Spring Boot提供了简化数据库集成的强大工具&#xff0c;而JPA&#xff08;Java Persistence API&#xff09;和Hibernate是两种非常流行的ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;可以帮助我们将对象…

如何删除EXCELL文件中的空行?

1&#xff0c;选择某一列 2&#xff0c;点击《开始》《查找和选择》>《定位条件》&#xff0c;调出《定位条件》的选择框&#xff1b; 3&#xff0c;在定位条件选项框&#xff0c;选择《空值》&#xff1b; 4&#xff0c;找到变灰被选中的某一行&#xff0c;右击《删除》 5&…

GitLab权限及设置

之前很少关注这些&#xff0c;项目的权限&#xff0c;一般由专门的管理人员设置。 但自己创建的项目自己可以设置权限。下面是一些笔记。 GitLab中用户权限_gitlab 权限-CSDN博客 开发中遇到要将自己这块的代码上传到Git&#xff0c;由其他组的同事拉取后继续开发。上传代码后…

JavaScript 笔记汇总

JavaScript 笔记汇总 引入方式 内部方式 通过 script 标签包裹 JavaScript 代码。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>JavaScript 基础 - 引入方式</title> </head> <…

SpringBoot Kafka发送消息与接收消息实例

前言 Kafka的基本工作原理 我们将消息的发布&#xff08;publish&#xff09;称作 producer(生产者)&#xff0c;将消息的订阅&#xff08;subscribe&#xff09;表述为 consumer&#xff08;消费者&#xff09;&#xff0c;将中间的存储阵列称作 broker(代理)&#xff0c;这…

QT打开摄像头采集

QT打开摄像头采集 今天好不容易把opencv的环境装好&#xff0c;然后想学习一下人脸识别的功能&#xff0c;但是在图书馆坐了4个多小时了&#xff0c;屁股疼就先写个摄像头采集的功能&#xff0c;明天继续学习吧&#xff0c;废话不多&#xff0c;嚼个奶片开始发车&#xff01;&…

JVM java主流的追踪式垃圾收集器

目录 前言 分代垃圾收集理论 标记清除算法 标记复制算法 标记整理法 前言 从对象消亡的角度出发, 垃圾回收器可以分为引用计数式垃圾收集和追踪式垃圾收集两大类, 但是java主流的一般是追踪式的垃圾收集器, 因此我们重点讲解. 分代垃圾收集理论 分代收集这种理…

Linux Vim编辑器常用命令

目录 一、命令模式快捷键 二、编辑/输入模式快捷键 三、编辑模式切换到命令模式 四、搜索命令 注&#xff1a;本章内容全部基于Centos7进行操作&#xff0c;查阅本章节内容前请确保您当前所在的Linux系统版本&#xff0c;且具有足够的权限执行操作。 一、命令模式快捷键 二…

企业专用智能云盘 | 帮助企业便捷管控企业文档 | 天锐绿盘云文档安全管理系统

由于当前多数企业内部的办公文件普遍散落于各员工电脑中&#xff0c;导致存在诸多潜在的文档使用风险。为优化团队协作效率&#xff0c;天 锐 绿盘是一款集文档统一管理、高效协同于一体的企业云盘&#xff0c;帮助企业解决文档管理中的诸多难题。 【地址&#xff1a;点击了解天…

【2023工业异常检测文献】SimpleNet

SimpleNet:ASimpleNetworkforImageAnomalyDetectionandLocalization 1、Background 图像异常检测和定位主要任务是识别并定位图像中异常区域。 工业异常检测最大的难题在于异常样本少&#xff0c;一般采用无监督方法&#xff0c;在训练过程中只使用正常样本。 解决工业异常检…

TCP客户端编码和解码处理:发送和接收指定编码消息

文章目录 引言基于Netty实现TCP客户端Netty发送GBK编码指令Netty接收GBK编码基于Channel发送指令基于ChannelHandlerContext发送指令:建立连接时发送登陆指令开启日志,查看报文信息基于ChannelInboundHandlerAdapter进行业务逻辑处理原生API实现TCP客户端基于DataOutputStrea…

AI预测福彩3D采取888=3策略+和值012路或胆码测试9月19日新模型预测第92弹

经过90多期的测试&#xff0c;当然有很多彩友也一直在观察我每天发的预测结果&#xff0c;得到了一个非常有价值的信息&#xff0c;那就是9码定位的命中率非常高&#xff0c;90多期一共只错了10次&#xff0c;这给喜欢打私房菜的朋友提供了极高价值的预测结果~当然了&#xff0…

C语言中的assert断言

Assert断言 断言是程序中处理异常的一种高级形式。可以在任何时候启用和禁用断言验证&#xff0c;因此可以在测试时启用断言&#xff0c;而在部署时禁用断言。同样&#xff0c;程序投入运行后&#xff0c;最终用户在遇到问题时可以重新启用断言。 用法&#xff1a; #…

23.面试题02.07链表相交

public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {ListNode apheadA;ListNode bpheadB;int lenA0,lenB0;//求两个链表长度while(ap!null){apap.next;lenA;}while(bp!null){bpbp.next;lenB;}apheadA;bpheadB;int len0;//用来计算让…

Msf之Python分离免杀

Msf之Python分离免杀 ——XyLin. 成果展示&#xff1a; VT查杀率:8/73 (virustotal.com) 火绒和360可以过掉&#xff0c;但Windows Defender点开就寄掉了 提示&#xff1a;我用360测的时候&#xff0c;免杀过了&#xff0c;但360同时也申报了&#xff0c;估计要不了多久就寄…

【C++ Primer Plus习题】6.9

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: #include <iostream> #include <string> #include <…