YOLOv8最新改进系列:SAHI -专门针对小目标检测的推理-切片辅助超推理!小目标检测实战有效!上大分、遥遥领先了家人们!!!

YOLOv8最新改进系列

SAHI提出的论文戳这

详细的改进教程以及源码,戳这!戳这!!戳这!!!B站:AI学术叫叫兽 源码在相簿的链接中,动态中也有链接,感谢支持!祝科研遥遥领先!

截止到发稿时,B站YOLOv8最新改进系列的源码包,已更新了35种+损失函数的改进!自己排列组合2-4种后,不考虑位置已达8万种以上改进方法!考虑位置不同后可排列上百万种!!专注AI学术,关注B站博主:AI学术叫叫兽!

另外:新建了数据集推荐汇总栏目,一并放入系列改进的资料之中,已获取资料的朋友自行提取即可!遥遥领先!!

YOLOv8最新改进系列:YOLOv8最新改进系列:SAHI -专门针对小目标检测的推理-切片辅助超推理!小目标检测实战有效!上大分、遥遥领先了家人们!!!


一、SAHI概述

对象检测是迄今为止计算机视觉中最重要的应用领域。然而,小物体的检测和大图像的推理仍然是实际使用中的主要问题,这是因为小目标物体有效特征少,覆盖范围少。小目标物体的定义通常有两种方式。一种是绝对尺度定义,即以物体的像素尺寸来判断是否为小目标,如在COCO数据集中,尺寸小于32×32像素的目标被判定为小目标。另外一种是相对尺度定义,即以物体在图像中的占比面积比例来判断是否为小目标,例如国际光学工程学会SPIE定义,若目标尺寸小于原图的0.12%则可以判定成小目标。
SAHI: Slicing Aided Hyper Inference(切片辅助超推理)通过图像切片的方式来检测小目标。SAHI检测过程可以描述为:通过滑动窗口将图像切分成若干区域,各个区域分别进行预测,同时也对整张图片进行推理。然后将各个区域的预测结果和整张图片的预测结果合并,最后用NMS(非极大值抑制)进行过滤。用动图表示该识别过程如下:
在这里插入图片描述

理论相关知识,点击论文链接自行详细阅读即可,在此不再赘述!

二、实验

2.1 找到系列改进资料中的报错解决文件

2.2 按照要求安装相关库即可

2.3 执行命令

`python SAHI-detect.py`

三、参数调优

在这里插入图片描述

这里决定着切片的大小和数量,根据自己的数据来调整。

以VisDrone2019数据集为例,在不同的参数下测试,如下所示:

请添加图片描述
3.1 长宽400

slice_height = 400,
slice_width = 400,
overlap_height_ratio = 0.05,
overlap_width_ratio = 0.05

请添加图片描述

3.2 长宽800

slice_height = 800,
slice_width = 800,
overlap_height_ratio = 0.05,
overlap_width_ratio = 0.05

请添加图片描述

3.3 长宽100

请添加图片描述
实际上参数的数值具有无限多,因此,在此篇博文仅举以上三种作为展示。

快点动手自己DIY吧!!!

干完收工!
关注B站:AI学术叫叫兽
从此走上科研快速路
遥遥领先同行!!!!

详细的改进教程以及源码,戳这!戳这!!戳这!!!B站:AI学术叫叫兽 源码在相簿的链接中,动态中也有链接,感谢支持!祝科研遥遥领先!

  • 11
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SAHI是一种切片辅助推理框架,旨在帮助开发人员解决现实世界中的目标检测问题。它通过将图像分成多个切片来提高检测性能,从而克服了现实世界中的一些问题,例如目标尺寸变化,目标遮挡和目标密度变化等。SAHI的核心思想是将图像分成多个切片,然后对每个切片进行单独的检测,最后将检测结果合并起来得到最终的检测结果。这种方法可以提高检测性能,特别是对于小目标的检测效果更好。 下面是一个使用SAHI进行目标检测的Python代码示例: ```python import cv2 import numpy as np # 加载图像 img = cv2.imread('test.jpg') # 定义切片大小 slice_size = 512 # 获取图像大小 height, width, _ = img.shape # 计算切片数量 num_slices_h = int(np.ceil(height / slice_size)) num_slices_w = int(np.ceil(width / slice_size)) # 定义检测器 detector = cv2.dnn.readNetFromCaffe('deploy.prototxt', 'model.caffemodel') # 定义类别标签 class_labels = ['person', 'car', 'truck', 'bus'] # 定义检测结果列表 results = [] # 循环遍历每个切片 for i in range(num_slices_h): for j in range(num_slices_w): # 计算切片的坐标 x1 = j * slice_size y1 = i * slice_size x2 = min(x1 + slice_size, width) y2 = min(y1 + slice_size, height) # 提取切片 slice_img = img[y1:y2, x1:x2] # 构建输入blob blob = cv2.dnn.blobFromImage(slice_img, 1.0, (300, 300), (104.0, 177.0, 123.0)) # 进行检测 detector.setInput(blob) detections = detector.forward() # 解析检测结果 for k in range(detections.shape[2]): confidence = detections[0, 0, k, 2] class_id = int(detections[0, 0, k, 1]) # 如果置信度大于0.5,则将检测结果添加到列表中 if confidence > 0.5 and class_labels[class_id] == 'person': x = int(detections[0, 0, k, 3] * slice_size) + x1 y = int(detections[0, 0, k, 4] * slice_size) + y1 w = int(detections[0, 0, k, 5] * slice_size) - x h = int(detections[0, 0, k, 6] * slice_size) - y results.append((x, y, w, h)) # 在原始图像上绘制检测结果 for (x, y, w, h) in results: cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2) # 显示结果 cv2.imshow('result', img) cv2.waitKey(0) cv2.destroyAllWindows() ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值