yolov5检测(前向)输入视频输出(不在图上画标签形式的原)图片的方法,及设置每隔几帧保存的方式(不每帧保存减少重复)

这些天我忽然有个需求,要更新迭代一个场景的检测模型,甲方爸爸提供的新数据集是监控视频形式的(因为拍视频确实更加的方便),而我训练模型确实要标注好的图片形式。
根据这些条件的话,思路应该是要这样的:首先使用现有的最新一个模型输入视频进行检测,检测结果以每帧图片的形式进行保存,以及每帧图片对应的label。将图片和label用标注工具打开如labelme等进行可视化调整模型标注好的数据(这样比每张图片直接从0开始标注要快),再将这些标注好的数据加入之前的数据中进行训练。

保存图片形式

这个流程可能会有几处有些障碍,一个是模型检测生成的label的yolo格式数据转化成labelme格式的数据以及调整好之后labelme格式的数据再转回yolo训练格式的数据,这个问题的解决及对应的代码写在我之前的文章中;另一个就是yolov5输入的是视频时输出的也同样是个视频,且是带有检测结果的视频(带有实时检测框的视频),如图:
在这里插入图片描述
在这里插入图片描述

而我们想要的是原图进行训练,保存的是原图及对应的label。解决方法如下:
在detect.py代码里的Process predictions中添加如下两行的代码:

e_save = os.path.splitext(save_path)[0] + f'_{frame}' + '.jpg'
cv2.imwrite(e_save, im0)

在这里插入图片描述
运行结果如图:
在这里插入图片描述
在这里插入图片描述
图片命名格式输入视频的名称后面加上帧数。

设置帧率

看了一下保存的图片,会发现一个问题,基本上每张图片会重复几十次。所以如果不是高速移动的目标的话每帧都保存会有大量几乎重复的图片,每张都拿来训练是没必要的且浪费修改label的时间,所以下面设置每隔几帧保存一次。

在这里插入图片描述
detect.py中前向推理部分的代码结构大概是这样的:

for path, img, im0s, vid_cap in dataset:
    # ... 一些前期的代码 ...

    # 运行检测
    img = torch.from_numpy(img).to(device)
    img = img.float()  # uint8 to fp16/32
    img /= 255.0  # 0 - 255 to 0.0 - 1.0
    if img.ndimension() == 3:
        img = img.unsqueeze(0)

    # ... 一些中间的代码,可能有模型推理的部分 ...

    # 后处理
    # ...

    # 在这里添加代码,确保只在每25帧执行检测
    if vid_path:
        current_frame += 1
        if current_frame % 25 == 0:
            # 执行你的检测代码
            # ...

# ... 一些后期的代码 ...

在这里插入图片描述
运行结果如图:
在这里插入图片描述
这样就减少了很多重复图片。

写在最后:
我觉得csdn是一个能学到技术的地方,那是因为很多大佬的无私奉献。我的每一条博文都是粉丝才可见,若是你们看了觉得我不值得你们关注,取关无可厚非。但是为什么就是有很多人收藏了我的博文然而又取消关注呢,我觉得让我很不舒服,我希望各位看管都是高素质人群,尊重一下创作者辣!不然越来越多这样的行为会打击分享技术的积极性,谢谢!

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

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

相关文章

【Android知识笔记】性能优化专题(四)

App 线程优化 线程调度原理 任意时刻,只有一个线程占用CPU,处于运行状态多线程并发:轮流获取CPU使用权JVM负责线程调度:按照特定机制分配CPU使用权线程调度模型 分时调度模型:轮流获取、均分CPU时间抢占式调度模型:优先级高的获取,JVM采用Android线程调度 nice值:Proc…

解密Python内置类属性__getitem__的神奇魔力:深入探索索引访问的奥秘

概要 在Python编程语言中,__getitem__是一种内置的类属性,它允许我们以索引的方式访问对象的元素。这个魔法方法在Python中被广泛使用,它不仅让我们能够使用索引来访问对象的元素,还能让我们自定义对象的索引访问方式&#xff0c…

STM32 ADC转换器、串口输出

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、ADC是什么?二、STM32的ADC2.1 认识STM32 ADC2.2转换方式2.3 为什么要校准?2.4 采样时间计算2.5 触发方式2.6 多通道采集解决方案2.7…

Hutool是一个小而全的Java工具类库

Hutool是一个小而全的Java工具类库,它包含了众多实用的静态方法,可以提高Java开发效率。以下是Hutool的安装和使用教程: 安装 Hutool可以通过Maven或Gradle进行安装。 ① Maven安装: 在您的Maven项目的pom.xml文件中添加以下依赖…

linux 安装 mvn

mvn 下载地址:https://maven.apache.org/download.cgi 选择一个合适的版本 cd /opt && curl -o apache-maven-3.8.6-bin.tar.gz https://dlcdn.apache.org/maven/maven-3/3.8.6/binaries/apache-maven-3.8.6-bin.tar.gz tar -xzf apache-maven-3.8.6-bin.…

Windows平台下的oracle 11G-11.2.0.4补丁升级操作指南

序号 文件名称 文件说明 1 p6880880_112000_MSWIN-x86-64_OPatch 11.2.0.3.33 for DB 11.2.0.0.0 (Feb 2022) 用于升级 OPatch 2 DB_PSU_11.2.0.4.220118 (Jan 2022)_p33488457_112040_MSWIN-x86-64 主要补丁文件 注意:请用管理员权限运行文件内命令&#…

【JavaSE】:接口(一)

接口 一.什么是接口二.语法规则三.接口的使用四.实现多个接口五.接口的继承 final关键字 inal修饰的变量,这个变量是不可修改的。final修饰后的方法,禁止子类继承的时候重写方法。final修饰后的类,是禁止被继承的。 super关键字 如果父类(超类…

Programming Abstractions in C阅读笔记:p197-p201

《Programming Abstractions in C》学习第64天,p196-p201总结。 一、技术总结 很难,唯有继续往下看才能让其变容易。 二、英语总结 1.psychologically是什么意思? 答: (1))psychology > psychological > psychologica…

pg truncate

命令选项 TRUNCATE [ TABLE ] [ ONLY ] name [ * ] [, ... ][ RESTART IDENTITY | CONTINUE IDENTITY ] [ CASCADE | RESTRICT ]1.ONLY:只truncate指定的表。当表有继承子表或有子分区时,默认会一起truncate;only可只truncate继承父表。分区父表不能指定only --不…

负索引和负方向

在python里有序集合的index位置信息可正可负,方向可以从左向右或从右向左。以“python”字符串通过list函数转化生成的列表为例,其正负位置信息index值如下所示: 0 1 2 3 4 5 p y t h o n -6 -5 -4 -3 -2 -1 故,切片的start、end、…

Vue框架学习笔记——绑定class样式和绑定style样式

文章目录 前文提要class样式的三种绑定方法(图片来自参考链接)style样式(内联形式)总结 前文提要 本人仅做个人学习记录,如有错误,请多包涵 主要学习链接:尚硅谷Vue2.0Vue3.0全套教程丨vuejs从…

KepServer配置OPC UA

KepServer在进行OPC UA配置时需要一个身份验证,密码是安装KepServer时输入的密码,但是这个用户名有些人可能不清楚,KepServer默认的管理员用户名为:administrator。 登录进去之后可以进行OPC UA服务配置。 如果想添加自定义的用户…

虚幻学习笔记2—点击场景3D物体的两种处理方式

一、前言 本文使用的虚幻引擎为5.3.2,两种方式分别为:点击根物体和精准点击目标物体。 二、实现 2.1、玩家控制器中勾选鼠标点击事件:这一步很重要,如图2.1.1所示:在自定义玩家控制器中勾 图2.1.1 选该项&#xff0c…

SpringBoot : ch09 整合Redis

前言 当你的应用程序需要一个快速、可扩展的内存数据库时,Redis是一个非常流行的选择。通过将Redis与Spring Boot集成,你可以轻松地利用Redis的功能,例如缓存、会话存储和消息队列等,从而提升应用程序的性能和可伸缩性。 在本教…

OpenCvSharp从入门到实践-(04)色彩空间

目录 1、GRAY色彩空间 2、从BGR色彩空间转换到GRAY色彩空间 2.1色彩空间转换码 2.2实例 BGR色彩空间转换到GRAY色彩空间 3、HSV色彩空间 4、从BGR色彩空间转换到HSV色彩空间 4.1色彩空间转换码 4.2实例 BGR色彩空间转换到HSV色彩空间 1、GRAY色彩空间 GRAY色彩空间通常…

echarts案例网站

一、ppchart 网站:https://ppchart.com/#/ 二、echarts官网示例 网站:https://echarts.apache.org/examples/zh/index.html

Linux:通过VMWare,定制化Linux系统

一、原理图 二、新增磁盘(对应上图sdb盘) 三、挂载磁盘 主要是四步:查看磁盘,分区磁盘,格式化磁盘,挂载磁盘 1、查看磁盘 2、分区磁盘 3、格式化磁盘 4、挂载磁盘 创建两个备用目录,用于磁盘…

初刷leetcode题目(8)——数据结构与算法

😶‍🌫️😶‍🌫️😶‍🌫️😶‍🌫️Take your time ! 😶‍🌫️😶‍🌫️😶‍🌫️😶‍🌫️…

12 网关实战:Spring Cloud Gateway基础理论

为什么需要网关? 传统的单体架构中只有一个服务开放给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,那么作为客户端如何去调用这些微服务呢?如果没有网关的存在,只能在本地记录每个微服务的调用地址。 无网关的微服务架构往往存在以下问题: 客户端多次请求…

没有哈希时间锁定合约的跨链原子交换

在上一篇文章中,我们介绍了使用哈希时间锁定合约(HTLC)的跨链原子交换实现。 今天,我们介绍一种无需 HTLC 即可实现的替代方法。 这将原子交换扩展到缺乏哈希锁和时间锁的区块链。 使用 SPV 证明交易已被挖掘 让我们按照商定的价…