yolov8训练野火烟雾识别检测模型

news2024/9/29 23:26:12

1.数据集下载

数据集下载链接:https://hyper.ai/datasets/33096

2. 数据集格式转换

需要将json中的标注信息转换为yolo格式的标注文件数据

import json
import os
import shutil
import cv2
import matplotlib.pyplot as plt

target = "./data/val"
def convert(size, box):
    dw = size[1]
    dh = size[0]
    # box x1 y1 x2 y2
    x = (box[0] + box[2]) / 2.0
    y = (box[1] + box[3]) / 2.0
    w = box[2] - box[0]
    h = box[3] - box[1]
    x = x / dw
    w = w / dw
    y = y / dh
    h = h / dh
    if w >= 1:
        w = 0.99
    if h >= 1:
        h = 0.99
    return (x, y, w, h)
# 将标注数据转换为yolo格式
with open(target+"/_annotations.coco.json") as f:
    anno = json.load(f)
    images = {}
    labels = {}
    for img in anno['images']:
        images[img["id"]] = img["file_name"]
    for an in anno['annotations']:
        labels[an["image_id"]] = an
    print(anno)

    img_dir = target+"/images/"
    anno_dir = target+"/labels/"
    if (not  os.path.exists(img_dir)):
        os.mkdir(img_dir)
        os.mkdir(anno_dir)
    for i in images:
        # 将图片复制到images文件夹
        shutil.copyfile(target+"/"+ images[i], img_dir+"/"+ images[i])
        img = cv2.imread(img_dir + "/" + images[i])

        # 生成标注文件
        label = labels[i]
        filename,_ = os.path.splitext(images[i])
        with open(anno_dir+"/"+ filename+ ".txt","w") as f:
            box = label["bbox"]
            # img = cv2.rectangle(img,(box[0],box[1]),(box[0]+box[2],box[1] + box[3]),(50,50,50),2)
            # plt.imshow(img,)
            # plt.show()
            box = convert(img.shape, (box[0],box[1],box[0]+box[2],box[1] + box[3]))
            f.write(str(label["category_id"])+" " + " ".join([str(a) for a in box]))

将test、train和val都 转换一下

3. 模型训练

数据配置文件

# 数据集所在路径
path: C:\Users\lhq\Desktop\Wildfire-Smoke\data

train: "./train/"
val: "./val/"
test: "./test/"

nc: 2

names:
  0: 烟雾
  1: 烟雾

训练代码

from ultralytics import YOLO
from ultralytics.utils import DEFAULT_CFG
from datetime import datetime

current_time = datetime.now()
time_str = current_time.strftime("%Y-%m-%d_%H-%M-%S")  
# 训练结果保存路径
DEFAULT_CFG.save_dir = f"./models/{time_str}"

if __name__ == "__main__":
    model = YOLO("yolov8n.pt") 

    # Train the model
    results = model.train(data="smoke.yaml", epochs=100, imgsz=640, device=0, save=True)

4. 模型测试

预测代码:

from ultralytics import YOLO

# Load a model
model = YOLO('best.pt')
# Run batched inference on a list of images
model.predict("./demo/", imgsz=640, save=True, device=0,plots=True)

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

如何在没有密码的情况下解锁 Oppo 手机?5 种简单的方法

保护智能手机隐私的一种很好的方法是设置复杂的锁屏密码或图案。一些 OPPO 手机的所有者在更改后一夜之间经历了图案或密码的内存丢失。事实上,OPPO 用户遇到的众多问题包括忘记密码或锁定屏幕。遗憾的是,没有多少人知道无需密码即可解锁 OPPO 手机的简单…

JAVA毕业设计166—基于Java+Springboot+vue3的流浪宠物救助管理小程序(源代码+数据库)

毕设所有选题: https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue3的流浪宠物救助管理小程序(源代码数据库)166 一、系统介绍 本项目前后端分离带小程序(可以改为ssm版本),分为用户、救助站、管理员三种角色 1、…

chapter09-OOP高级部分——(类变量和类方法)——day12

目录 ​编辑 374-类变量引出 375-类变量快速入门 376-类变量内存剖析 377-类变量定义访问 378-类变量使用细节 379-类方法快速入门 380-类方法最佳实践 381-类方法注意事项 静态方法只能访问静态变量 非静态方法可以访问静态成员和非静态成员(都可以访问…

OpenAI AI 聊天机器人周活跃用户超 2 亿

🦉 AI新闻 🚀 OpenAI AI 聊天机器人周活跃用户超 2 亿 摘要:科技媒体 Axios 报道,OpenAI 的 AI 聊天机器人在短短一年内实现了周活跃用户超过 2 亿的增长。该公司表示,全球财富 500 强企业中已有 92% 使用其产品&…

革新客户服务艺术:揭秘高效集成第三方平台与质检升级的前沿策略

Hi~这里是ProXiao 文章参考:晓观点 如何实现与第三方客服平台的有效对接并提高客户服务的质检水平?https://insight.xiaoduoai.com/intelligent-tools/quality-inspection/how-to-achieve-effective-integration-with-third-party-customer-service-pl…

书法图片自动扣字的批处理

本程序会根据原文字图片,自动扣字并生成黑字、红字2个透明的png图片,原图片黑字或白字均可。运行的话需要先安装好 ImageMagick-7.1.1-37 用法与生成效果举例: a.jpg 白字 转 黑、红扣字png: b.jpg 黑字 转 黑、红扣字png: 分享脚本如下: …

Kafka 到数据仓库:使用 bend-ingest-kafka 将消息加载到 Databend

将消息从 Apache Kafka 导入到像 Databend 这样的云数据仓库可能是一项艰巨的任务。bend-ingest-kafka 工具简化了这一过程,使您能够轻松地将 Kafka 消息导入到 Databend 表中。 什么是 bend-ingest-kafka? bend-ingest-kafka 工具是一个专门为从 Apac…

网上一堆教人用AI做自媒体的,真的能挣钱吗?看我真实测评~

今日主题:AI副业能做吗? 今年这情况,几乎所有人都想搞个副业。 有人问我:普通人真的能靠AI做自媒体搞钱吗? 先说结论:可以,但要找准路子! 听我慢慢道来~ 我是今年开始做AI自媒体…

同声传译用什么软件?5款优质软件评测

最近,我遇到了一个尴尬的情况。在一次国际会议中,我被分配到了一个多语言小组讨论。虽然我的英语还算流利,但面对来自世界各地的同事们,各种口音和语速让我感到有些力不从心。 那一刻,我多么希望有一个神奇的工具&…

如何解决已经安装软航文档控件但依旧提示未安装的问题

目录 前言 问题现象 问题处理步骤 前言 本文介绍在办公系统中使用重庆软航科技有限公司开发的NTKO OFFICE文档控件软件时,已经通过办公系统提供的软件安装包安装,但是在360安全浏览器、360极速浏览器的兼容模式下依旧提示:本机尚未安装跨浏…

STM32F411 标准库硬件SPI (硬件NSS/CS)驱动st7735--1.8寸TFT显示屏

TFT的spi驱动文件 完整工程网盘放在末尾 #include "lcd_driver.h"static uint16_t SPI_TIMEOUT_UserCallback(uint8_t errorCode);//液晶IO初始化配置 void LCD_Driver_Init(void) {SPI_InitTypeDef SPI_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;/* 使能…

关于武汉芯景科技有限公司的实时时钟芯片XJ8340开发指南(兼容DS1340)

一、芯片引脚介绍 1.芯片引脚 2.引脚描述 二、系统结构图 三、功能描述 1.时钟功能 2.频率输出 / 普通IO口 FT/OUT引脚输出512HZ的方波或者高低电平 3.备用电源 4.涓流充电 5.振荡停止检测 四、程序代码 XJ8340.C /** XJ8340.c** Created on: 2024年8月29日* Auth…

萤石开放平台 播放报错4012,URL过期或无效

当你在尝试打开直播地址时,如果遇到了报错提示“4012,URL过期或无效,请检查URL的有效性”。 这通常表示直播地址中的UUID(一个独特的识别码)可能存在问题,例如过期或无权限访问。以下是一些排查及解决该问题…

【ACM独立出版 | 厦大主办】第五届计算机科学与管理科技国际学术会议(ICCSMT 2024,10月18-20)

第五届计算机科学与管理科技国际学术会议(ICCSMT 2024) 定于2024年10月18-20日在中国厦门举行。 会议旨在为从事“计算机科学”与“管理科技”研究的专家学者、工程技术人员、技术研发人员提供一个共享科研成果和前沿技术,了解学术发展趋势,拓宽研究思路…

Pandas 绘图的强大之处:后端

轻松通过 Pandas 创建交互式图形。欢迎来到雲闪世界。 添加图片注释,不超过 140 字(可选) 1.背景 Python 有大量的可视化包,其中最有名的三个是:Matplotlib(和 seaborn)、Plotly和Hvplot。这三…

虚幻5|技能栏UI优化(2)——优化技能UI并实现技能栏的拖拽操作

这篇文章里,前情提要,文章里的序列变量应命名为序号,我命名错了,虽然不差,但为了后面更好的理解 一.刷新技能栏,用于刷新上一章文章的初始化技能栏 1.打开技能栏格子,打开图表,添加…

用AI工具制作高质量PPT的完整教程

其实使用AI或者ChatGPT写PPT的方式有很多种 下面主要说明两种方式,建议第二种方式 接下来我会用最简单的语言,一步一步说明,保证你能在五分钟内做完你想要的PPT 具体方法和工具,都在里面 1、手动生成 让ChatGPT帮你生成大纲和…

Leetcode面试经典150题-36.有效数独

解法都在代码里,不懂就留言或者私信,比第一题稍微难点 class Solution {public static boolean isValidSudoku(char[][] board) {/**rowExists[i][j]代表第i行是否存在数据j1*/boolean[][] rowExists new boolean[9][9];/**rowExists[i][j]代表第i列是…

纵向合并单元格——table

将list数据处理成tableDate格式&#xff0c;id重复的数据&#xff0c;只有第一项有num字段&#xff08;num是重复的个数&#xff09;渲染表格&#xff0c;纵向合并第1、2、6列&#xff0c;id相同的合并 <template><div><el-table:data"tableData":sp…

力扣刷题--137. 只出现一次的数字 II【中等】

题目描述&#x1f357; 给你一个整数数组 nums &#xff0c;除某个元素仅出现 一次 外&#xff0c;其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。 示例 1&#xff1a; 输入&am…