目标检测sahi:切片辅助推理和微调小目标检测(代码片段)

zstar-_ zstar-_     2022-12-01     463

关键词:

前言

在我之前的文章中,写过一种对于微小目标的检测策略,即将大图裁成多个小图,每个小图分别进行检测,最后将所有的检测结果进行叠加,统一使用NMS进行滤除。但是经过实验,该方法的效果并不是非常明显。

SAHI也采用了类似切片检测的思路,不同的是其采用了更多策略,并将其封装成了一个检测框架,支持 Detectron2,MMDetection和YOLOv5。

论文标题:Slicing Aided Hyper Inference and Fine-tuning for Small Object Detection
论文地址:https://arxiv.org/abs/2202.06934
仓库地址:https://github.com/obss/sahi

效果概览

首先看论文里给出的这张图片,左图是原始预测效果,中间是经过SAHI预测效果,右图是经过SAHI再微调的检测效果。

可以看到,对小目标检测增强的效果还是比较明显的。

再来看数据

如表所示,经过SAHI之后,整体AP均有所提升。不过同样需要注意的是对于大目标(AP50l),经过SAHI之后,AP反而有所下降。个人猜测可能是因为切片太小导致大目标被分割。
注:这里小目标的定义是宽度小于图像宽度的1%。

原理简析

论文很短,原理也并不复杂,整体原理可以由这幅图来囊括。


上图表示切片辅助微调的过程,在原始图片提取出一些补丁块,然后将里面的部分进行放大(如图中红框所示),相当于一种数据增强。

下图表示切片辅助推断的过程,将图片裁成一块块,分别进行预测,然后用NMS统一进行过滤。

隐藏标签

由于小目标密集时,标签会发生重叠和遮挡。因此最佳方式是不显示标签,仅显示检测框。
Sahi没有像YOLOv5-6.x版本那样,预留了两个接口hide-labelhide-conf隐藏标签和置信度。看到有人在官方仓库提了这个issue,但作者直接回复不支持。。

其实改起来也很简单,无非是需要修改库源码。
首先如果是采用setup.py安装的方式,会发现安装的库文件是一个不可修改的egg文件,首先需要将其解压,提取出其中的sahi文件夹,放置在相应site-packages中。


通过阅读源码可以发现,绘图函数放在了utils/cv.py文件中。


因此,只需要将cv.py中的add bunding box text下面的内容注释掉即可。

测试效果

下面就来实际测试一下,测试代码根据官方的示例进行修改,加载本地模型。

from sahi.model import Yolov5DetectionModel
from sahi.predict import get_sliced_prediction

model_path = 'dota_best.pt'

# 使用的YOLOv5检测模型,使用gpu加速,置信度0.25
detection_model = Yolov5DetectionModel(
    model_path=model_path,
    confidence_threshold=0.25,
    device="cuda:0"
)

# slice_height/slice_width 切片高宽
# overlap_height_ratio/overlap_width_ratio 切片间重合度
result = get_sliced_prediction(
    "data/dota_img/P2826.png",
    detection_model,
    slice_height=256,
    slice_width=256,
    overlap_height_ratio=0.2,
    overlap_width_ratio=0.2
)

# 保存检测图片
result.export_visuals(export_dir="result/")

测试图片我选择了Dota-test数据集中的一张,模型选择训练好的YOLOv5l6.pt.

直接预测结果:

经过SAHI的效果:

乍一看区别并不大,原始的模型就已经取得了可观的结果。

那么再放大来看看细节对比,这里选取右上角的一块局部区域,如下图所示,左侧为直接检测结果,右侧为经SAHI之后的结果。


可以看到,原始检测结果中,处于房子阴影部分的车辆,以及被树枝遮挡的车辆并无法被检测出来;而经过SAHI处理之后,这部分也能够被检测出来,说明SAHI确实是有效的算法。

目标检测——深度学习下的小目标检测(检测难的原因和tricks)

小目标难检测原因主要原因(1)小目标在原图中尺寸比较小,通用目标检测模型中,一般的基础骨干神经网络(VGG系列和Resnet系列)都有几次下采样处理,导致小目标在特征图的尺寸基本上只有个位数的像素大小,导致设计的... 查看详情

目标检测英雄联盟能用yolov5实时目标检测了支持onnx推理(代码片段)

目录一、项目介绍二、项目结构三、准备数据1.数据标注2.数据转换格式四、执行训练1.anchors文件2.标签文件3.预训练模型4.训练数据5.修改配置6.执行训练五、执行预测1.检测图片2.检测视频3.heatmap五、转换onnx1.导出onnx文件2.检测图... 查看详情

yolov7(目标检测)入门教程详解---检测,推理,训练(代码片段)

...理效果:五.总结一.前言  上篇文章:YOLOv7(目标检测)入门教程详解---环境 查看详情

《工业机器视觉检测123》(1.3)目标检测问题记录

...应用场景搭建无监督模型。(4)数据增强和极小目标检测研究。 检测极小目标检测( COCO 数据集定义小于32x32pix的为小目标,我们这里把小于10*10pix的 目标定义为极小目标) (1)训练和推理时将... 查看详情

机器学习1(高清重制版)

人工智能领域的前沿技术介绍、展望、应用(关于目标检测)目标检测介绍目标检测的主要任务是检测输入图像是否存在给定目标。如存在则返回目标的类别和位置信息。根据检测任务的不同可分为目标实例检测和通用目标检测... 查看详情

目标检测框架阅读步骤

总结一下最近一年来阅读目标检测框架的一些经验,主要是基于facebook的maskrcnn_benchmark和Detectron2。组件目标检测的框架需要包含:组件功能config所有参数设置structures数据容器,image,box,label,mask,keypointdata数据整理,dataset,da... 查看详情

小目标检测的增强算法

小目标检测的增强算法Augmentationforsmallobjectdetection摘要近年来,目标检测取得了令人瞩目的进展。尽管有了这些改进,但在检测小目标和大目标之间的性能仍有很大的差距。本文在一个具有挑战性的数据集上分析了当前最先进的... 查看详情

sylph|一种用于增量小样本目标检测的超网络框架(代码片段)

...,我是极智视界,本文解读一下一种用于小样本目标检测的超网络框架Sylph。 作者研究了具有挑战性的增量小样本目标检测任务(iFSD)。近年来,基于超网络的方法在连续的、无微调的iFSD背景下进行了研究,但取... 查看详情

推荐研究方向小样本开集目标检测(few-shotopen-setobjectdetection)

...rxiv.org/abs/2210.15996    1、任务:小样本开集目标检测,使用少量已知类样本训练模型,使得模型既能够检测小样本已知类又能够检测未知类。2、动机:解决FSOSOD问题有三个重要原因。1)可以识别小样本类别的开集... 查看详情

深度学习和目标检测系列教程23-300:fasterrcnn和yolov5训练飞机目标识别的小项目(代码片段)

@Author:RunsenFasterRCNN和yolov5训练飞机目标识别的项目目标检测算法主要包括:两类two-stage和one-stage一类是two-stage,two-stage检测算法将检测问题划分为两个阶段,首先产生候选区域(regionproposals),然... 查看详情

小目标检测

小目标检测论文地址:https://arxiv.org/pdf/2004.12432.pdf 一.Stitcher:Feedback-drivenDataProviderforObjectDetection目标检测通常根据尺度变化质量,其中对小目标的性能最不令人满意。本文研究了这种现象,发现:在大多数训练迭代中,小目... 查看详情

yolov6:又快又准的目标检测框架开源啦

近日,美团视觉智能部研发了一款致力于工业应用的目标检测框架YOLOv6,能够同时专注于检测的精度和推理效率。在研发过程中,视觉智能部不断进行了探索和优化,同时吸取借鉴了学术界和工业界的一些前沿进... 查看详情

目标检测雷达目标cfar检测算法(代码片段)

目录一、概述1、基本概念2、基础知识二、CFAR检测算法1、基本原理2、几种典型的CFAR检测算法(1)CA(CellAveraging)-CFAR检测算法(2)GO-CFAR、SO-CFAR检测算法(3)OS-CFAR检测算法(4)补充说明三、不同CFAR检测算法... 查看详情

目标检测超分重建对小目标检测有效性探究

前言前段时间在看一些小目标检测的文献综述,看到一种思路是将图片超分重建之后再送到检测网络中进行检测。优点是检测效果提升,缺点是可能会造成伪影。实践出真知,本篇就用DOTA-test数据集中的一张图像来做... 查看详情

yolo目标检测

文章大纲简介原理入门网络模型与可视化目标检测的评测mAP代码部分解读使用Demo数据集最佳实践模型大小计数模型部署与框架选择图片或视频推理可调用的封装模型训练模型转换多路摄像头可能出现的问题参考文献简介github:ht... 查看详情

目标识别yolov5针对小目标检测的改进模型/添加帧率检测(代码片段)

...下采样。对于一些分辨率很高的遥感/无人机图片,小目标难以被训练识别。本篇博文就来尝试这篇博文YOLOV5模型和代码修改——针对小目标识别所提到的一种改进方案。我所使用的是YOLOv5-5.0版本,数据集采用VisDrone数据... 查看详情

改进yolov7系列:首发最新结合多种x-transformer结构新增小目标检测层,让yolo目标检测任务中的小目标无处遁形

查看详情

Tesseract 微调错误 - 计算 CTC 目标失败

】Tesseract微调错误-计算CTC目标失败【英文标题】:Tesseractfinetuningerror-ComputeCTCtargetsfailed【发布时间】:2021-06-1804:05:11【问题描述】:我正在尝试根据this指南根据我自己的特定数据微调tesseract4.1.1。我希望它能够检测和识别这样... 查看详情