YOLTV8 — 大尺度图像目标检测框架(欢迎star)

YOLTV8 — 大尺度图像目标检测框架【ABCnutter/YOLTV8: 🚀】

针对大尺度图像(如遥感影像、大尺度工业检测图像等),由于设备的限制,无法利用图像直接进行模型训练。将图像裁剪至小尺度进行训练,再将训练结果进行还原拼接是解决该问题的普遍思路。YOLT项目([1805.09512] You Only Look Twice: Rapid Multi-Scale Object Detection In Satellite Imagery (arxiv.org))是该思路具体实现,其以改进的YOLOV2作为检测框架,通过重叠裁剪预测处理以及对目标检测框拼接还原结果进行NMS过滤实现大尺度遥感影像的小型目标检测。但在具体方案操作时,本项目作者发现该方法存在以下几点问题:

  1. 无法较好地同时性地解决拼接结果中不同类别物体重叠检测框的精确过滤,尤其是位于图像边缘的不完整物体的检测框,会牺牲一定的检测精度。

  2. 由于裁剪造成图像中的大型物体被分割于数块图像中,存在无法在单张影像中完整捕获物体的缺陷

  3. 所使用的YOLOV2检测框架已经较为落后,已无法满足现在任务场景对检测精度的需求。

因此,本项目以最新的YOLOV8为检测框架,增设多尺度,多信息的预处理模块,捕获大尺度图像的多尺度上下文信息,能够有效识别出大尺度图像的大小型识别物体以及密集型检测目标。另外,此次我们还对对原始NMS算法进行改进,以满足不同类型物体以及重叠框(尤其是位于边缘的检测框)的过滤,实现大尺度影像的精确检测。

项目实战展示

  • 煤渣传送带异常物体检测

在这里插入图片描述

  • 基于InSAR影像的地表沉陷变化监测

在这里插入图片描述

Install

window

1、CPU推理环境配置:

1.1、Pip (recommended)

pip install ultralytics

1.2、conda

conda create -n yoltv8 python=3.9
conda activate yoltv8
conda install ultralytics

2、GPU推理环境配置:

Note:默认已安装配置gpu环境下的pytorch深度学习环境,如未配置,请先进行配置

2.1、Pip(recommended)

pip install ultralytics

2.2、conda

conda create -n yoltv8 python=3.9
conda activate yoltv8
conda install ultralytics

Usage

本项目支持命令行参数,可通过设置命令行参数进行模型推理,请在yoltv8\predict.py下运行,相关命令行参数如下:

[--images_dir IMAGES_DIR] # 所存放照片的文件夹路径, 默认为:yoltv8\dataset\predict\init_images\项目名称
[--outdir_slice_ims OUTDIR_SLICE_IMS] # 图像分割结果路径,无需设置,会自动生成,默认为:yoltv8\dataset\predict\slice_images\项目名称
[--project_name PROJECT_NAME]
# 一次推理任务的项目名称,推理结果的ID,不同任务请不用重复,否则会覆盖结果。
# yolov8原始模型预测结果路径:yoltv8\results\yolov8_detect\项目名称, 自动生成,无需修改
[--im_ext IM_EXT] # 推理文件的后缀名称,如.jpg
[--sliceHeight SLICEHEIGHT] # 图像裁剪高度, 默认1088, 根据具体情况更改
[--sliceWidth SLICEWIDTH] # 图像裁剪宽度. 默认1088
[--overlap OVERLAP] # 图像裁剪重复率,默认0.5,太小会出现无法捕获大型目标的完整检测框
[--slice_sep SLICE_SEP] # 分割结果名称的分隔符号,默认'_'
[--overwrite OVERWRITE]  # 图像裁剪结果已存在时是否重写, 默认Flase
[--out_ext OUT_EXT] # 裁剪结果的后缀名称,默认.png
[--model MODEL] # 模型训练结果文件
[--conf CONF] # 检测对象置信度阈值
[--iou IOU] # NMS的交集联合(IoU)阈值
[--half HALF] # 是否使用半精度(FP16)
[--device DEVICE] # 要运行的设备,即cuda设备=0/1/2/3或设备=cpu
[--show SHOW] # 如果可能,显示结果
[--save SAVE] # 保存带有结果的图像
[--save_txt SAVE_TXT] # 将结果保存为. txt文件
[--save_conf SAVE_CONF] # 使用置信度分数保存结果
[--save_crop SAVE_CROP] # 保存带有结果的裁剪图像
[--hide_labels HIDE_LABELS] # 是否隐藏标签
[--hide_conf HIDE_CONF] # 是否隐藏置信度
[--max_det MAX_DET] # 每张图像的最大检测次数
[--vid_stride VID_STRIDE] # 视频帧率步幅
[--line_width LINE_WIDTH] # 边界框的线宽。如果无,则按图像大小缩放。
[--visualize VISUALIZE] # 可视化模型特征
[--augment AUGMENT] # 将图像增强应用于预测源
[--agnostic_nms AGNOSTIC_NMS] # 与类无关的NMS
[--retina_masks RETINA_MASKS] # 使用高分辨率分割掩码
[--classes CLASSES [CLASSES ...]] # 按类过滤结果,即class=0,或class=[0,2,3]
[--boxes BOXES] # 在分割预测中显示框
[--output_file_dir OUTPUT_FILE_DIR] #  模型预测最后txt结果文件的路径,无需修改,默认为:yoltv8\results\completed_txt\项目名称, txt结果会自动成在此路径下
[--iou_threshold IOU_THRESHOLD] # 回归大图时进行perclassnms的iou阈值,默认为0.01,即,默认同类物体其检测框不应该出现重叠,符合当前任务需求,可根据实际情况修改
[--confidence_threshold CONFIDENCE_THRESHOLD] # 回归大图时进行perclassnms的置信度阈值,默认为0.5
[--area_weight AREA_WEIGHT] # 回归大图时进行perclassnms的置信度与面积的比例权重,默认为5
[--class_labels CLASS_LABELS [CLASS_LABELS ...]] # 类别的标签结果,默认[0, 1, 2, 3, 4, 5]
[--class_names CLASS_NAMES [CLASS_NAMES ...]] # 类别标签对应的名称,默认怕["head", "boxholder", "greendevice", "baseholer", "circledevice", "alldrop"]
[--completed_output_path COMPLETED_OUTPUT_PATH] # 模型预测最后txt结果文件的路径,无需修改,默认为:yoltv8\results\completed_predict\项目名称, 图像结果会自动成在此路径下

本次任务一般仅需要修改以下参数(其他参数可保持默认,请根据实际情况进行设置):

  1. images_dir参数,指定你所存放照片的文件夹路径(注意照片路径,而是存在照片的上级文件夹路径,路径及照片名称中不可出现中文汉字),

    如:–image_dir E:\yoltv8\dataset\predict\init_images, 可将推理照片存放在默认dataset\predict\init_images路径下。

  2. im_ext参数,你所需要进行推理的照片格式,如.jpg、.png等(无需区分大小写,但要注意不要遗忘了 . )。推理时,只会对images_dir下的以im_ext为后缀名的文件进行推理。

  3. model参数,指定模型结果文件的路径,如 --model E:\yoltv8\checkpoint\best.pt,除pt文件外,也支持onnx文件、engine文件等yolov8等官方支持的模型结果文件格式。

命令行启动示例:

   python predict.py --images_dir E:\yoltv8\dataset\predict\init_images --im_ext .jpg --model E:\yoltv8\checkpoint\best.pt

本项目还可直接修改predict.py文件中的命令函参数设置部分,这样就无需再命令行中进行修改,,修改参数信息后直接启动predict.py即可。各参数信息和前文一样。

parser = argparse.ArgumentParser()
parser.add_argument("--images_dir", type=str, default=os.path.join(PROJECT_ROOT, 'dataset', 'predict', 'init_images'))
parser.add_argument("--outdir_slice_ims", type=str, default=os.path.join(PROJECT_ROOT, 'dataset', 'predict', 'slice_images'))
parser.add_argument("--project_name", type=str, default="sensor_detect")
parser.add_argument("--im_ext", type=str, default=".jpg")
parser.add_argument("--sliceHeight", type=int, default=1088)
parser.add_argument("--sliceWidth", type=int, default=1088)
parser.add_argument("--overlap", type=float, default=0.5)
parser.add_argument("--slice_sep", type=str, default="_")
parser.add_argument("--overwrite", type=bool, default=False)
parser.add_argument("--out_ext", type=str, default=".png")
parser.add_argument("--model", type=str, default=r"E:\yoltv8\checkpoint\best.pt")
parser.add_argument("--conf", type=float, default=0.25)  # object confidence threshold for detection
parser.add_argument("--iou", type=float, default=0.7)  # intersection over union (IoU) threshold for NMS
parser.add_argument("--half", type=bool, default=False)  # use FP16 half-precision inference
parser.add_argument("--device", type=str, default=None)  # cuda device, i.e. 0 or 0,1,2,3 or
parser.add_argument("--show", type=bool, default=False)  # show results
parser.add_argument("--save", type=bool, default=True)  # save images with results
parser.add_argument("--save_txt", type=bool, default=True)  # save results"
parser.add_argument("--save_conf", type=bool, default=True)
parser.add_argument("--save_crop", type=bool, default=False)  # save cropped prediction boxes
parser.add_argument("--hide_labels", type=bool, default=False)  # hide labels
parser.add_argument("--hide_conf", type=bool, default=False)
parser.add_argument("--max_det", type=int, default=300)  # maximum detections per image
parser.add_argument("--vid_stride", type=bool, default=False)  # video frame-rate stride
parser.add_argument("--line_width", type=float, default=None)
parser.add_argument("--visualize", type=bool, default=False)
parser.add_argument("--augment", type=bool, default=False)
parser.add_argument("--agnostic_nms", type=bool, default=False)
parser.add_argument("--retina_masks", type=bool, default=False)
parser.add_argument("--classes", type=int, nargs="+", default=None)
parser.add_argument("--boxes", type=bool, default=True)
parser.add_argument("--output_file_dir", type=str, default=os.path.join(PROJECT_ROOT, 'results', 'completed_txt'))
parser.add_argument("--iou_threshold", type=float, default=0.01)
parser.add_argument("--confidence_threshold", type=float, default=0.5)
parser.add_argument("--area_weight", type=float, default=5)
parser.add_argument("--class_labels", type=int, nargs="+", default=[0, 1, 2, 3, 4, 5])
parser.add_argument("--class_names", type=str, nargs="+", default=["head","boxholder","greendevice","baseholer","circledevice","alldrop",])
parser.add_argument("--completed_output_path", type=str, default=os.path.join(PROJECT_ROOT, 'results', 'completed_predict')))

结果路径示例展示(sensor_detect为本次推理的项目名称):

在这里插入图片描述
:多尺度,多信息的预处理模块还未上传,但不影响正常使用,可先增大裁剪尺寸以及重叠率来避免超大物体(无法在单幅影像块中完整给出的物体)的识别不完整。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

未来课堂革命:OpenAI 发布 ChatGPT 使用指南,探索生成式 AI 如何重塑教育景观

随着新学期的来临,众多初登教师舞台的 00 后们,也完成了他们的第一个教师身份下的暑期生活。 对于开学的抵触情绪,不仅学生们普遍存在,许多 00 后的新晋教师们也同样感同身受。某种程度上,这些抗拒上班的年轻教师群体…

Springboot+Vue项目-基于Java+MySQL的高校心理教育辅导系统(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…

【面试题】MySQL 事务的四大特性说一下?

事务是一个或多个 SQL 语句组成的一个执行单元,这些 SQL 语句要么全部执行成功,要么全部不执行,不会出现部分执行的情况。事务是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。 事务的主要作用是保证数…

金蝶云星空与金蝶云星空对接集成委外超耗查询连通生产订单变更(发顺丰)

金蝶云星空与金蝶云星空对接集成委外超耗查询连通生产订单变更(发顺丰) 对接系统金蝶云星空 金蝶K/3Cloud在总结百万家客户管理最佳实践的基础上,提供了标准的管理模式;通过标准的业务架构:多会计准则、多币别、多地点、多组织、多税制应用框…

FPGA - ZYNQ 基于EMIO的PS和PL交互

前言: Xilinx ZYNQ系列的芯片,GPIO分为 MIO 、EMIO、AXI_GPIO三种方式。 MIO :固定管脚,属于PS端,也就是ARM端。 EMIO :通过PL扩展,使用时需要分配PL(FPGA)管脚,消耗PL端资源。…

【GPT-4最新研究】GPT-4与科学探索:揭秘语言模型在科学领域的无限可能

各位朋友们,你们知道吗?自然语言处理领域最近取得了巨大的突破!大型语言模型(LLM)的出现,简直就像打开了新世界的大门。它们不仅在语言理解、生成和翻译方面表现出色,还能涉足许多其他领域&…

二叉树的中序遍历 - LeetCode 热题 36

大家好!我是曾续缘😃 今天是《LeetCode 热题 100》系列 发车第 36 天 二叉树第 1 题 ❤️点赞 👍 收藏 ⭐再看,养成习惯 二叉树的中序遍历 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 1: 输…

React-路由(一)

​🌈个人主页:前端青山 🔥系列专栏:React篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来React篇专栏内容:React-路由(一) 目录 1、介绍 2、路由的使用 2.1、相关组件 2.2、声…

白话微机:10.民风淳朴的MCS-51小镇(小镇方言:汇编)

1. 基本结构与周期 MCS-51系列单片机属于8位单片机用 8051单片机构成最小应用系统时,只要将单片机接上时钟电路和复位电路即可MCS-51单片机由CPU、存储器和I/O三部分组成CPU是指:运算器和控制器 “PC CPU 3BUS RAM I/O” 在执行指令过程中&#xff…

财富池指标公式--通达信免费指标公式源码合集--第四期

久等了,今天这期通达信免费指标公式合集如约而至,依旧是三个不同功能的技术指标,看看有没有你正在找的吧! 一、通达信背离出黑马指标,背离趋势分析指标源码 ​ ​具体信号说明: 1、出现底背离为买入信号…

计算机视觉——基本矩阵的计算

最近在上研究生的课程《计算机视觉》,完成了老师布置的大作业,结合我看《计算机视觉中的多视图几何》的一些感悟和收获完成此篇博客。在学习的过程中我发现很多算法并没有开源,或者版本太落后难以执行,因此想通过这篇博客将一些算…

ELK及ELFK排错

目录 一、ELK及ELFK排错思路 1.1filebeat侧排查 1.2logstash侧排查 1.3ES、kibana侧问题 一、ELK及ELFK排错思路 1.1filebeat侧排查 第一步:排查filebeat上的配置文件有没有写错,filebeat的配置文件是yml文件,一定要注意格式。 第二步…

WebKit内核游览器

WebKit内核游览器 基础概念游览器引擎Chromium 浏览器架构Webkit 资源加载这里就不得不提到http超文本传输协议这个概念了: 游览器多线程HTML 解析总结 基础概念 百度百科介绍 WebKit 是一个开源的浏览器引擎,与之相对应的引擎有Gecko(Mozil…

初识ansible核心模块

目录 1、ansible模块 1.1 ansible常用模块 1.2 ansible-doc -l 列出当前anisble服务所支持的所有模块信息,按q退出 1.3 ansible-doc 模块名称 随机查看一个模块信息 2、运行临时命令 2.1 ansible命令常用的语法格式 3、常用模块详解与配置实例 3.1命令与…

【攻防世界】bug

垂直越权IP绕过文件上传 垂直越权 IP绕过 bp抓包,添加请求头X-Forwarded-For:127.0.0.1 文件上传 文件上传绕过: 1. mime检测(Content-Type) 2. 大小写绕过 3. 等价替换(php5,php3) 4. 利用J…

python笔记 | 哥德巴赫猜想

哥德巴赫猜想:每个不小于6的偶数都可以表示成两个素数之和。 素数:只能被1和自身整除的正整数。就是大于1且除了1和它本身之外没有其他因数的数。例如,2、3、5、7、11等都是素数,而4、6、8、9等则不是素数。 下面这段Python代码…

SRIO系列-基本概念及IP核使用

参考:串行RapidIO: 高性能嵌入式互连技术 | 德州仪器 SRIO协议技术分析 - 知乎 PG007 目录 一、SRIO介绍 1.1 概要 1.2 SRIO与传统互联方式的比较 1.3 串行SRIO标准 1.4 SRIO层次结构: 1.4.1 逻辑层 1.4.2 传输层协议 1.4.3 物理层 二、Xilinx…

动手写sql 《牛客网80道sql》

第1章:SQL编写基础逻辑和常见问题 基础逻辑 SELECT语句: 选择数据表中的列。FROM语句: 指定查询将要从哪个表中检索数据。WHERE语句: 过滤条件,用于提取满足特定条件的记录。GROUP BY语句: 对结果进行分组。HAVING语句: 对分组后的结果进行条件过滤。O…

Springboot项目的测试类书写(速通)

目录 前言1. 单元测试的测试类2. 框架测试的测试类 前言 在实际开发中,如果只是做一个简单的单元测试(不涉及端到端、数据库交互、API调用、消息队列处理等),我为了方便一般都是找块儿地方写一个main方法来跑一下就行了&#xff…

支付系统核心逻辑 — — 状态机(JavaGolang版本)

支付系统核心逻辑 — — 状态机 代码地址:https://github.com/ziyifast/ziyifast-code_instruction/tree/main/state_machine_demo 1 概念:FSM(有限状态机),模式之间转换 状态机,也叫有限状态机&#xff08…