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.xdnf.cn/news/1541490.html

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

相关文章

Android Studio 开发快速获取开发版和发布版SHA1和MD5

本文讲解Android Studio 开发中如何快速获取开发版和发布版SHA1和MD5。 一、获取开发版: 点击Android Studio右上角Gradle按钮,打开Gradle视图 找到项目-Tasks-signingReport 双击即可AndroidStudio底部 Run面板获取开发版SHA1和MD5 二、获取发布版:

【Python深度学习系列】基于Flask将深度学习模型部署到web应用上(完整案例)

这是我的第356篇原创文章。 一、引言 使用 Flask 在 10 分钟内将您自己训练的模型或预训练的模型(VGG、ResNet、Densenet)部署到网络应用程序中。以图像分类模型为例,本地直接部署和本地使用docker部署两种方式实现。 二、实现过程 2.1 准备…

go webapi上传文件

一、导入依赖 import "net/http" 我这里用到了Guid所以安装依赖 go get github.com/google/uuid 二、main.go package mainimport ("fmt""github.com/jmoiron/sqlx""github.com/tealeg/xlsx""log""path/filepath&q…

深度学习的新突破:Difformer模型

人工智能咨询培训老师叶梓 转载标明出处 在现实世界中,数据之间的复杂相互依赖性是一个普遍存在的现象。这种错综复杂的依赖关系,对于传统的机器学习算法来说,是一个巨大的挑战。因为它们通常假设数据是独立同分布的,这使得算法难…

JS在线加密解密工具

快捷工具网得JS加密解密工具为您提供JS加密解密,js加解密工具,JS在线加解密,JS代码在线加解密,该工具基于eval方法的加密与解密功能,用户可将js代码加密成eval方法执行形式的代码,也可将eval方法加密过的代码进行解密操作。是一款非常简便实用的在线Java…

AC自动机详解,原理、优化分析,代码实现

零、前言 对于模式串匹配问题,在很多基础的数据结构课程中都有涉及到,如 KMP 算法,BM算法,Trie。 但是给定文本串,我们有多个模式串要去查询。难道要多次调用KMP / BM,或者在Trie上多次查询吗&#xff1f…

2024 研究生数学建模竞赛(F题)建模秘籍|X射线脉冲星光子到达时间建模|文章代码思路大全

铛铛!小秘籍来咯! 小秘籍团队独辟蹊径,运用轨道动力学模型,脉冲轮廓折叠,几何传播时延模型,相对论修正计算,泊松分布模拟等强大工具,构建了这一题的详细解答哦! 为大家量…

数据预处理方法—数据标准化和数据归一化

1.数据标准化 1.1 概念: 标准化是将数据转化为均值为0,标准差为1的分布。通过标准化处理,所有特征在同一个尺度上,使得模型更加稳定和高效,尤其适用于正态(高斯)分布的数据。 1.2 原理 标准化…

【HTTP】构造HTTP请求和状态码

状态码 用于响应中,表示响应的结果如何 正确?错误?什么原因? HTTP 中的状态码都是标准约定好的 200 OK 成功了,一切顺利 在抓包到的响应中 404 Not Found 访问的资源(URL 中的路径)没找…

【已解决】编译报错:fatal error: Eigen/Core: 没有那个文件或目录 #include <Eigen/Core>

1、如果没有安装过Eigen,可以使用以下git指令进行下载,或者也可以通过以下网址下载 git clone https://gitlab.com/libeigen/eigen.git网址1:https://eigen.tuxfamily.org/index.php?titleMain_Page 网址2: https://gitlab.com/libeigen/ei…

BeautifulSoup与lxml解析网页:技术详解与实战案例

目录 一、引言 1.1 网页解析的重要性 1.2 BeautifulSoup与lxml简介 二、安装BeautifulSoup和lxml 三、BeautifulSoup基础 3.1 创建BeautifulSoup对象 3.2 基本元素 3.3 遍历和搜索文档树 3.4 CSS选择器 四、lxml基础 4.1 解析HTML 4.2 XPath选择器 4.3 CSS选择器 …

简单多状态dp第二弹 leetcode -删除并获得点数 -粉刷房子

740. 删除并获得点数 删除并获得点数 分析: 使用动态规划解决 这道题依旧是 打家劫舍I 问题的变型。 我们注意到题目描述,选择 x 数字的时候, x - 1 与 x 1 是不能被选择的。像不像 打家劫舍 问题中,选择 i 位置的金额之后,就不…

C++速通LeetCode中等第20题-随机链表的复制(三步简单图解)

方法图解: class Solution { public:Node* copyRandomList(Node* head) {if ( !head ) {return nullptr;}Node *cur head;// 1. 在原节点的每个节点后创建一个节点while ( cur ) {Node *newNode new Node(cur -> val);newNode -> next cur -> next;cur …

大小端字节序 和 内存高低地址顺序

目录 1. 大小端字节序 1.1 什么是大小端字节序? 1.2 为什么有大小端字节序? 1.3 习题:用程序结果判断大端小端 2. 各种易混淆的高低地址顺序 2.1 监视窗口的地址表示【计算机标准展示方式】 2.2 横向地址表示 2.3 一个字节 与 多个字节 的地址…

g1:基于 Llama,用提示工程实现类似 o1 的深度推理

开源项目 g1 利用巧妙的提示策略,在 Groq 硬件上使用 Llama-3.1 70b 模型实现了类似 OpenAI o1 的推理链能力。g1 将推理过程可视化,并结合多种技巧引导 LLM 进行深度思考,显著提升了其在逻辑问题上的准确率,为 LLM 推理能力的提升…

Win10 安装Node.js 以及 Vue项目的创建

一、Node.js和Vue介绍 1. Node.js Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。它允许你在服务器端运行 JavaScript,使得你能够使用 JavaScript 来编写后端代码。以下是 Node.js 的一些关键特点: 事件驱动和非阻塞 I/O:Node…

【24华为杯数模研赛赛题思路已出】国赛F题第二套思路丨附参考代码丨免费分享

2024年数模研赛E题解题思路 X 射线脉冲星光子到达时间建模思路分析 该题目是天文学背景的数学建模题目,其涉及到物理学中关于光线传播过程受多种因素的共同干扰的复合模型,以及天体和卫星的坐标变换和运动模型,首先我们要,建立卫…

JavaScript使用leaflet库显示信息窗口

前言 我们可千万不能忘记我们之前花的流程图哦,我们所有的计划都按照我们的流程图来去构建; 我们已经完成了,页面的加载,也已经完成获取用户当前的位置坐标,并且我们通过地图的API将当前的位置在地图中渲染出来&…

基于协同过滤推荐算法的影视推荐系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 精品专栏:Java精选实战项目源码、Python精…

缓存数据和数据库数据一致性问题

根据以上的流程没有问题,但是当数据变更的时候,如何把缓存变到最新,使我们下面要讨论的问题 1. 更新数据库再更新缓存 场景:数据库更新成功,但缓存更新失败。 问题: 当缓存失效或过期时,读取…