yolo-nas无人机高空红外热数据小目标检测(教程+代码)

前言

  • YOLO-NAS是目前最新的YOLO目标检测模型。
  • 从一开始,它就在准确性方面击败了所有其他 YOLO 模型。
  • 与之前的 YOLO 模型相比,预训练的 YOLO-NAS 模型能够以更高的准确度检测更多目标。
  • 但是我们如何在自定义数据集上训练 YOLO NAS?

这将是我们本文的目标——在自定义数据集上训练不同的 YOLO NAS 模型。
在这里插入图片描述

YOLO-NAS训练

YOLO-NAS 的主要主张是它可以比以前的模型更好地检测更小的物体。尽管我们可以运行多个推理实验来分析结果,但在具有挑战性的数据集上对其进行训练将使我们有更好的理解。为此,我们将使用三个可用的预训练 YOLO-NAS 模型运行四个训练实验。为此,我们选择无人机热成像检测数据集。

在实验过程中,我们将遍历 YOLO-NAS 的完整训练流程。

  1. 用于训练 YOLO NAS 的物体检测数据集
  2. 在自定义数据集上训练 YOLO NAS
  3. 微调 YOLO NAS 模型
  4. 使用经过训练的 YOLO NAS 模型对测试图像进​​行推理
  5. YOLO NAS 训练模型视频推理结果
  6. 结论

训练 YOLO NAS 的物体检测数据集

用于训练 YOLO NAS 的物体检测数据集
我们先来熟悉一下无人机高空红外热数据集。

它包含夜间无人机热图像。鉴于无人机的高空记录,大多数物体看起来都很小。这使得该数据集对于大多数目标检测模型来说都难以解决。然而,它是完美的自定义数据集来训练 YOLO-NAS 以检查其在小物体上的准确性。

该数据集包含 5 个对象类别的 2898 张热图像:

  • 自行车
  • 其他车辆
  • 不在乎

数据集已包含训练、验证和测试分割。有 2008 个训练样本、287 个验证样本和 571 个测试样本。该数据集已经以 YOLO 注释格式存在。

以下是数据集中的一些未注释的地面实况图像。
在这里插入图片描述
很明显,除了汽车之外,如果没有适当的注释,人眼无法看到地面上的其他物体。

要了解每个对象的位置,请查看一些带注释的图像
在这里插入图片描述

接下来,我们将深入研究本文的编码部分。下载本文的代码后,您将发现三个笔记本。

YOLO_NAS_Fine_Tuning.ipynb
YOLO_NAS_Large_Fine_Tuning.ipynb
inference.ipynb
YOLO_NAS_Fine_Tuning.ipynb我们将非常详细地浏览这些笔记本。这两个包含在自定义数据集上训练 YOLO NAS 以及稍后使用经过训练的模型运行推理所需的所有步骤。培训笔记本包含下载数据集的代码。

以下代码将训练三个 YOLO NAS 模型:

YOLO NAS (小)
YOLO NAS m(中型)
YOLO NAS l (大)
在开始之前,您可以安装super-gradients我们在整个训练和推理过程中需要的软件包。尽管笔记本包含执行此操作的命令,您也可以使用以下命令安装它:

pip install

数据集下载和目录结构
接下来的几个代码块下载数据集并将其解压到当前目录,我们将在此处跳过。所有笔记本和数据集都存在于父数据集目录中,其结构如下

hit-uav
├── dataset.yaml
├── images
│   ├── test
│   ├── train
│   └── val
└── labels
    ├── test
    ├── train
    └── val

YOLO NAS模型训练

由于我们正在训练三个不同的模型,因此我们需要稍微自动化该过程。我们可以定义一个包含三个模型名称的列表,并根据该列表设置检查点目录。这还将加载适当的模型,因为列表中的模型名称与 API 中的模型名称相匹配super-gradients。

models_to_train = [
    'yolo_nas_s',
    'yolo_nas_m',
    'yolo_nas_l'
]
 
CHECKPOINT_DIR = 'checkpoints'
 
for model_to_train in models_to_train:
    trainer = Trainer(
        experiment_name=model_to_train, 
        ckpt_root_dir=CHECKPOINT_DIR
    )
 
    model = models.get(
        model_to_train, 
        num_classes=len(dataset_params['classes']), 
        pretrained_weights="coco"
    )
 
    trainer.train(
        model=model, 
        training_params=train_params, 
        train_loader=train_data, 
        valid_loader=val_data
    )

三个训练实验将依次运行,所有模型检查点将保存在各自的目录中。

YOLO NAS 训练参数

在我们开始微调过程之前,训练参数是最重要的组成部分。这是我们定义要训练的纪元数、要监控的验证指标以及学习率等的地方。、

models_to_train = [
    'yolo_nas_s',
    'yolo_nas_m',
    'yolo_nas_l'
]
 
CHECKPOINT_DIR = 'checkpoints'
 
for model_to_train in models_to_train:
    trainer = Trainer(
        experiment_name=model_to_train, 
        ckpt_root_dir=CHECKPOINT_DIR
    )
 
    model = models.get(
        model_to_train, 
        num_classes=len(dataset_params['classes']), 
        pretrained_weights="coco"
    )
 
    trainer.train(
        model=model, 
        training_params=train_params, 
        train_loader=train_data, 
        valid_loader=val_data
    )

微调结果

在这里插入图片描述

YOLO NAS 模型对测试图像进​​行推理

该数据集包含一个测试分割,我们保留该测试分割用于推理目的。您可以执行笔记本中的代码单元inference.ipynb来运行推理实验。它促成了一些事情:

首先,它从检查点目录加载经过最佳训练的 YOLO NAS 权重。
然后它对测试图像运行推理。执行此操作时,代码会将推理结果保存在inference_results/images具有原始图像名称的目录中。
获得结果后,笔记本通过在预测图像上重叠地面实况注释来显示一组图像。
最后一步将告诉我们训练模型错过了哪些对象以及模型是否做出了错误的预测。

让我们通过可视化一些推理预测来开始我们的分析。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

多媒体信息化建设,动态数据中心,深入理解分布式系统

目录 一、前言二、双活数据中心三、数据备份方式四、设计双活数据中心需要考虑的问题1、延迟和稳定性2、Quorum/ Tie-Breaker3、工作负载 五、动态数据中心六、深入理解分布式系统1、内容介绍2、作者简介 大家好,我是哪吒。 文末送5本《深入理解分布式系统》 一、…

CentOS:Docker容器中安装vim

在使用docker容器时,里边没有安装vim时,敲vim命令时提示说:vim: command not found 这个时候就须要安装vim,安装命令: apt-get install vim 出现以下错误: 解决方法: apt-get update 这个命令的…

LabVIEW的六轴工业机器人运动控制系统

LabVIEW开发六轴工业机器人运动控制系统 本项目开发了一个高效的工业机器人控制系统,重点关注于运动学算法和轨迹规划算法的实现和测试。LabVIEW作为一个关键技术,在项目中扮演了核心角色。 系统研究与算法开发:首先,项目围绕机…

棱镜七彩获工业和信息化部电子第五研究所感谢信

近日,工业和信息化部电子第五研究所(以下简称“工信部电子五所”)发来一封感谢信,对棱镜七彩在系统研发及运维保障工作中做出的贡献表示感谢。 图 工业和信息化部电子第五研究所感谢信 服务保障平台和赛宝优选平台应用解决方案征…

计算机网络-网络协议

一、TCP/IP协议 作为一个小萌新,当然我无法将tcp/ip协议的大部分江山和盘托出,但是其中很多面试可能问到的知识,我觉得有必要总结一下! 首先,在学习tcp/ip协议之前,我们必须搞明白什么是tcp/ip协议。 1、…

合伙企业对外投资收益怎么纳税?

根据合伙企业的税收政策,合伙企业对外投资收益的纳税问题需要根据投资所得的性质进行分类处理。 首先,如果合伙企业对外投资获得的收益属于股息、红利、利息等被动收入,那么这些收入需要按照个人所得税法中的“利息、股息、红利所得”进行纳税…

【蓝桥杯】树的重心

树的重心 图的dfs模板 int dfs(int u) {st[u]true;for(int ih[u];i!-1;ine[i]){int je[i];if(!st[j]){dfs(j);}} }树是这样的。 邻接表: 1: 4->7->2->-1 2: 5->8->1->-1 3: 9->4->-1 4: 6->3->1->-1 5: 2->-1 6: 4->-1 7…

【数据库】函数依赖

什么是函数依赖 就是在具体的表中/问题中,哪个属性决定另外几个属性。 A属性值相同的时候,能否决定唯一的B U {学号,姓名,年龄,班号,班长,课号,成绩} 就有: ‘学号’ 决…

【数组Array】力扣-1094 拼车

目录 题目描述 解题过程 题目描述 车上最初有 capacity 个空座位。车 只能 向一个方向行驶(也就是说,不允许掉头或改变方向) 给定整数 capacity 和一个数组 trips , trip[i] [numPassengersi, fromi, toi] 表示第 i 次旅行有 numPassen…

【Netty】NIO与Netty核心概念

目录 NIO编程NIO介绍NIO和BIO的比较缓冲区(Buffer)基本介绍常用API缓冲区对象创建添加数据读取数据 通道(Channel)基本介绍Channel常用类ServerSocketChannelSocketChannel Selector (选择器)基本介绍常用API介绍示例代码 NIO 三大核心原理 Netty核心概念Netty 介绍原生 NIO 存…

机器视觉运动控制一体机在喇叭跟随点胶上的应用

市场应用背景 点胶是通过使用多种粘合剂,实现产品密封、绝缘、导热和耐腐蚀等作用,可应用于多类产品的生产制造场景,例如3C消费电子、汽车新能源、光伏和半导体等领域。 点胶是喇叭生产过程中必不可少一道工艺,音圈是扬声器的重…

铸就安全可信的数字化「信息枢纽」—华为云ROMA Connect荣膺软件产品可信【卓越级】认证

近日,在工业和信息化部电子第五研究所组织的软件产品可信评估中,华为云ROMA Connect在基线合规、渗透测试、产品可靠性、软件工程化、隐私合规、代码自研率检测、产品质量、开源治理8大方面通过严格评测,获得代表软件产品可信最高水平的「卓越…

亲测有效:导入下载starter-canal 依赖

第一步: 前往 https://github.com/chenqian56131/spring-boot-starter-canal 下载zip文件,解压到自己的maven仓库 第二步:下载完成进入项目根目录starter-canal 中 ,在文件管理器地址栏输入cmd,进入到cmd窗口&#x…

22 Vue3中使用v-for遍历对象

概述 使用v-for遍历对象在真实的开发中比较少见,了解即可。 对象我更喜欢统一称之为字典,假如你哪天发现我在某个前端的教程中把对象叫做字典,请你知道这两个是同一个玩意儿。 所谓字典,就是一种key-value类型的结构的统称。 …

年终收官!华为云开发者日·2023年度创享峰会成功举办

12月20日,华为云开发者日2023年度创享峰会成功举办,众多开发者与技术爱好者齐聚一堂,在现场,有600余名开发者与华为云技术专家共同就大模型应用、CodeArts软件开发等技术话题进行深入探讨,分享实战技巧与解决方案。此外…

潍柴动力从产业技术品牌出发存在全球商用车竞争机会

如今,有着潍柴标记的“心脏”,从道路用走向非道路用,从海洋内河航运走向高速高端大缸径,成功构筑起动力系统、商用车、农业装备、工程机械、智慧物流、海洋交通装备等产业板块协同发展的格局。 正如潍柴集团董事长谭旭光所说&…

linux c编程之动态库搜索路径和动态库的调试

动态库的搜索路径: 方法一:(1) 把xxx.so 放到/usr/lib或lib中 方法二:(2) 通过设置环境变量方法 绝对路径export LD_LIBRARY_PATH xxx : $LD_LIBRARY_PATHexport LD_LIBRARY_PATH$LD_LIBRARY_PATH:xxxx 方法三:(3)在/etc/ld.so.conf文件中加入我们生成库的目录vim 打开/etc…

使用Windows10的OneDrive应用程序,让文件管理上一个台阶

这篇文章解释了如何通过在文件资源管理器和OneDrive应用程序之间轮换,将OneDrive与Windows 10一起使用。 使用文件资源管理器进行组织 你不必将所有OneDrive文件都保存在硬盘上,事实上,你可以将任意数量的文件留在云中(也就是微…

26--字符流与字节流

1、IO流概述 1.1 什么是IO流 Java中I/O操作主要是指使用java.io包下的内容,进行输入、输出操作。输入也叫做读取数据,输出也叫做作写出数据。我们把这种数据的传输,可以看做是一种数据的流动,按照流动的方向,以内存为…

3DES加解密

public static void main(String[] args) throws Exception {String content "";String plainText "";String key "";//加密byte[] encryptedBytes encrypt(plainText, key);String encryptedText Base64.getEncoder().encodeToString(encr…