无人机助力电力设备螺母缺销智能检测识别,python基于YOLOv7开发构建电力设备螺母缺销高分辨率图像小目标检测系统

news2024/12/23 9:32:49

传统作业场景下电力设备的运维和维护都是人工来完成的,随着现代技术科技手段的不断发展,基于无人机航拍飞行的自动智能化电力设备问题检测成为了一种可行的手段,本文的核心内容就是基于YOLOv7来开发构建电力设备螺母缺销检测识别系统,首先看下实例效果:

简单看下数据集:

数据集均由无人机航拍进行采集。

这里有两个比较突出的问题,一方面是数据本身都是高分辨率的图像,另一方面是由于这里的检测对象都是非常小的目标,相较于整个图像的面积来说占比极小,对于模型的来说检测识别的难度是很高的。这里我尝试了基于原始的图像来直接开发构建检测模型,发现效果非常不理想,结合高分辨率和小目标这两个关键点,考虑对原始高分辨率图像进行切分处理,切分后数据如下:

简单的实现如下所示:

from PIL import Image

def split_image(image_path, tile_width, tile_height):
    image = Image.open(image_path)
    image_width, image_height = image.size

    tiles = []
    for y in range(0, image_height, tile_height):
        for x in range(0, image_width, tile_width):
            box = (x, y, x + tile_width, y + tile_height)
            tile = image.crop(box)
            tiles.append(tile)

    return tiles

# 示例用法
image_path = "path/to/your/image.jpg"
tile_width = 100
tile_height = 100

sub_images = split_image(image_path, tile_width, tile_height)
for i, sub_image in enumerate(sub_images):
    sub_image.save(f"sub_image_{i}.jpg")

当然了也可以借助于一些其他工具模块,总之实现自己的目的即可,这里就不再赘述了。

下面以具体的实例来进行说明,实例测试图像如下所示:

切分结果如下所示:

接下来为了确认切分逻辑的正确性,我们依次读取切分得到的子图数据,来整体显示在一张图像上,如下所示:

可以看到是没有问题的,数据处理就到这里,接下来开始构建模型训练阶段。

训练数据配置文件如下所示:

# txt path 
train: ./dataset/images/train
val: ./dataset/images/test
test: ./dataset/images/test



# number of classes
nc: 3

# class names
names: ['DefectPin', 'Nut', 'NormalPin']

这里一共开发构建了两款不同参数量级的模型,分别是yolov7-tiny和yolov7,接下来我们来整体对比分析模型的性能差异:
【Precision曲线】
精确率曲线(Precision-Recall Curve)是一种用于评估二分类模型在不同阈值下的精确率性能的可视化工具。它通过绘制不同阈值下的精确率和召回率之间的关系图来帮助我们了解模型在不同阈值下的表现。
精确率(Precision)是指被正确预测为正例的样本数占所有预测为正例的样本数的比例。召回率(Recall)是指被正确预测为正例的样本数占所有实际为正例的样本数的比例。
绘制精确率曲线的步骤如下:
使用不同的阈值将预测概率转换为二进制类别标签。通常,当预测概率大于阈值时,样本被分类为正例,否则分类为负例。
对于每个阈值,计算相应的精确率和召回率。
将每个阈值下的精确率和召回率绘制在同一个图表上,形成精确率曲线。
根据精确率曲线的形状和变化趋势,可以选择适当的阈值以达到所需的性能要求。
通过观察精确率曲线,我们可以根据需求确定最佳的阈值,以平衡精确率和召回率。较高的精确率意味着较少的误报,而较高的召回率则表示较少的漏报。根据具体的业务需求和成本权衡,可以在曲线上选择合适的操作点或阈值。
精确率曲线通常与召回率曲线(Recall Curve)一起使用,以提供更全面的分类器性能分析,并帮助评估和比较不同模型的性能。

【Recall曲线】
召回率曲线(Recall Curve)是一种用于评估二分类模型在不同阈值下的召回率性能的可视化工具。它通过绘制不同阈值下的召回率和对应的精确率之间的关系图来帮助我们了解模型在不同阈值下的表现。
召回率(Recall)是指被正确预测为正例的样本数占所有实际为正例的样本数的比例。召回率也被称为灵敏度(Sensitivity)或真正例率(True Positive Rate)。
绘制召回率曲线的步骤如下:
使用不同的阈值将预测概率转换为二进制类别标签。通常,当预测概率大于阈值时,样本被分类为正例,否则分类为负例。
对于每个阈值,计算相应的召回率和对应的精确率。
将每个阈值下的召回率和精确率绘制在同一个图表上,形成召回率曲线。
根据召回率曲线的形状和变化趋势,可以选择适当的阈值以达到所需的性能要求。
通过观察召回率曲线,我们可以根据需求确定最佳的阈值,以平衡召回率和精确率。较高的召回率表示较少的漏报,而较高的精确率意味着较少的误报。根据具体的业务需求和成本权衡,可以在曲线上选择合适的操作点或阈值。
召回率曲线通常与精确率曲线(Precision Curve)一起使用,以提供更全面的分类器性能分析,并帮助评估和比较不同模型的性能。

【F1值曲线】
F1值曲线是一种用于评估二分类模型在不同阈值下的性能的可视化工具。它通过绘制不同阈值下的精确率(Precision)、召回率(Recall)和F1分数的关系图来帮助我们理解模型的整体性能。
F1分数是精确率和召回率的调和平均值,它综合考虑了两者的性能指标。F1值曲线可以帮助我们确定在不同精确率和召回率之间找到一个平衡点,以选择最佳的阈值。
绘制F1值曲线的步骤如下:
使用不同的阈值将预测概率转换为二进制类别标签。通常,当预测概率大于阈值时,样本被分类为正例,否则分类为负例。
对于每个阈值,计算相应的精确率、召回率和F1分数。
将每个阈值下的精确率、召回率和F1分数绘制在同一个图表上,形成F1值曲线。
根据F1值曲线的形状和变化趋势,可以选择适当的阈值以达到所需的性能要求。
F1值曲线通常与接收者操作特征曲线(ROC曲线)一起使用,以帮助评估和比较不同模型的性能。它们提供了更全面的分类器性能分析,可以根据具体应用场景来选择合适的模型和阈值设置。

【loss对比】

可以看到:在各个指标对比上yolov7全面碾压的态势超越yolov7-tiny。

接下来详细看下yolov7的结果详情:
【混淆矩阵】

【训练可视化】

【Batch计算实例】

实例推理效果如下所示:

可以看到:目标对象区域非常非常的小,如果不仔细观察可能都会漏掉了。

感兴趣也都可以参照本文的建模处理思路来进行构建自己的模型,相信会有一定的收获。

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

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

相关文章

gromacs学习及使用(2)

命令解释参考GROMACS基本教程 整个流程参考分子动力学模拟Gromacs一般使用步骤(空蛋白) 从gromacs 5.0版本开始,所有的工具都是“gmx”的子模块。可以通过下面的命令获得任何一个模块的帮助信息: gmx help (module) 或者 gmx (mo…

人主机辅与机主人辅

人主机辅和机主人辅的时机和地点一般取决于具体的应用场景和技术发展,具体而言: 人主机辅: 在较为复杂和需要专业知识的工作中,人类主持机器辅助的需求较为常见。例如,在医疗领域中,人类专家可能会利用机器…

【2023CANN训练营第二季】——Ascend C算子调用及实验演示

自定义算子调用方式 完成自定义算子的开发部署后,可以通过单算子调用的方式来验证单算子的功能。单算子调用有API执行和模型执行两种方式: 单算子API执行:基于C语言的API执行算子,无需提供单算子描述文件进行离线模型的转换&…

docker buildx跨架构构建笔记(x86_64构建下构建aarch64镜像)

docker buildx跨架构构建(x86_64构建aarch64镜像) 文章目录 docker buildx跨架构构建(x86_64构建aarch64镜像)简介第一步 先交叉编译一个aarch64的HelloWorld程序。准备一个用于跨架构的Dockerfile文件使用docker buildx命令构建aarch64架构的镜像。查看镜像具体详细信息&#…

LeetCode Hot100 438.找到字符串中所有字母异位词

题目: 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。 代码: class Solution …

【shell】shell脚本编程作业

1 编写bash脚本,要求用户输入源目录和目标目录(绝对路径),然后列出源目录下所有的文件,并将这些文件拷贝到目标目录,并在文件名后面加上时间戳。(提交源代码和运行截图) if [ -d $1 ] || [ -d…

类和对象——(3)再识对象

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 你说那里有你的梦想,…

国产linux单用户模式破解无密码登陆 (麒麟系统用户登录密码遗忘解决办法)

笔者手里有一批国产linu系统,目前开始用在日常的工作生产环境中,我这个老程序猿勉为其难的充当运维的或网管的角色。 国产linux系统常见的为麒麟Linux,统信UOS等,基本都是基于debian再开发的linux。 问题描述: 因为…

centos7下执行yum命令报错

前言 在Linux系统中,安装nginx时候,需要先安装环境。 Nginx是使用C语言开发,安装nginx需要先从官网上将源码下载,然后编译,编译需要gcc环境,但是在安装gcc环境的时候,执行命令报错。 yum install –y gcc-…

【稳定检索|投稿优惠】2024年生物神经工程与健康大数据国际会议(ICBNHBD 2024)

2024年生物神经工程与健康大数据国际会议(ICBNHBD 2024) 2024 International Conference on Biological Neuroengineering and Health Big Data(ICBNHBD) 一、【会议简介】 2024年生物神经工程与健康大数据国际会议(ICBNHBD 2024),这场科学盛宴,会议在中…

训练自己的个性化Stable diffusion模型,LORA

一、背景 需要训练自己的LORA模型 二、分析 1、有sd-webui有训练插件功能 2、有单独的LORA训练开源web界面 两个开源训练界面 1、秋叶写的SD-Trainer https://github.com/Akegarasu/lora-scripts/ 没成功,主要也是cudnn和nvidia-smi中的CUDA版本不一致退出 2…

操作系统背景知识

一、程序分类 程序按其运行环境分为: 裸机程序:直接运行在对应硬件上的程序 应用程序:只能运行在对应操作系统上的程序 二、计算机系统的层次结构 计算机系统两种层次结构: 2.1 无操作系统的简单的两层结构 2.2 有操作系统的…

SpringBoot中的部分注解

1.SpringBoot/spring SpringBootApplication: 包含Configuration、EnableAutoConfiguration、ComponentScan通常用在主类上; Repository: 用于标注数据访问组件,即DAO组件; Service: 用于标注业务层组件; RestController: 用…

使用ApexSQLLog工具恢复数据库

目录 前言 一、ApexSQLLog是什么? 二、使用步骤 1.连接你要恢复的数据库 2.选择你要恢复的时间点的数据 3.恢复指定操作的数据 4.恢复指定的表 5.输出结果方式 6.输出结果方式 7.生成还原的sql语句 总结 前言 我们在操作数据库的时候可能误操作把数据修…

Ps:用好钢笔工具

使用钢笔工具时,应随时注意鼠标指针的形状。 ◆ ◆ ◆ 基本操作方法 1、绘制闭合路径 路径绘制结束时回到起点即可创建闭合路径。 2、绘制开放路径 想结束绘制时,按住 Ctrl 键点击画布空白处,或者,直接按 Esc 键,即可…

qt-C++笔记之点击按钮弹出文件资源管理器选择文件后把文件路径赋值给一个QString

qt-C笔记之点击按钮弹出文件资源管理器选择文件后把文件路径赋值给一个QString code review! 文章目录 qt-C笔记之点击按钮弹出文件资源管理器选择文件后把文件路径赋值给一个QString1.运行2.main.cpp3.qt_FileDialog.pro4.QFileDialog类详解 1.运行 2.main.cpp 代码 #inclu…

达索系统SOLIDWORKS 2024工程图新功能

工程图概述 设计模型不仅能比绘制直线更快;SOLIDWORKS 从模型中生成工程图,模型的参数和几何关系在工程图中被保留,这样工程图可反映模型的设计意图;模型或工程图中的更改反映在其相关文件中,这样更改起来更容易&…

基于AT89C51单片机的电子闹钟设计

1.设计任务 利用AT89C51单片机为核心控制元件,设计一个电子闹钟,设计的系统实用性强、操作简单,实现了智能化、数字化。 (1)按开始键自动进入时间显示,开始为0,按K1键进入更改时间&#xff0c…

AMEYA360:思瑞浦TPS32 MCU两大全新产品系列介绍

TPS32混合信号微控制器依托思瑞浦出色的数模混合信号处理技术能力,围绕垂直应用开发产品,优化产品设计,助力客户实现终端产品的差异化。思瑞浦提供完整的开发生态系统支持,包含简单易用的配套嵌入式软件包、硬件和软件开发工具&am…

时序预测 | Python实现TCN时间卷积神经网络价格预测

时序预测 | Python实现TCN时间卷积神经网络时间序列预测 目录 时序预测 | Python实现TCN时间卷积神经网络时间序列预测预测效果基本介绍模型描述程序设计参考资料预测效果 基本介绍 时间卷积网络,TCN。 利用CNN技术处理时间序列数据。 卷基础层有三种,第一种是一维CNN,用于输…