前言
本文介绍了一个用于超大图片中对小目标检测的切片辅助超推理库SAHI。该库可直接用于现有的网络,而不需要重新设计和训练模型,使用十分方便。
Github: https://github.com/obss/sahi
目标检测和实例分割是迄今为止计算机视觉中最重要的应用领域。然而,小物体的检测和大图像的推理仍然是实际使用中的主要问题。
下面是实例分割SOTA模型Cascade Mask RCNN的推理结果:
MMDetection Cascade Mask RCNN 模型的标准推理结果。
如图所示,未检测到上侧的小型汽车。
有没有办法在不重新训练模型并且不需要更大的 GPU 内存分配的情况下检测这些较小的对象?
本文将介绍SAHI(Slicing Aided Hyper Inference),帮助开发人员克服这些现实世界的问题。
本文目录
目标检测和实例分割简介、
SAHI的安装、
使用SAHI 进行切片推理、
使用SAHI 进行图像和数据集切片、
使用SAHI添加对新检测框架的支持
A) 目标检测:目标检测是指识别和正确标记图像帧中存在的所有物体的方法。
目标检测可视化。
这大致包括两个步骤:
1:目标定位:在这里,以尽可能紧密的方式确定边界框或封闭区域,以便定位图像中目标的准确位置。
2:图像分类:然后将定位的目标送到标记目标的分类器。
B) 语义分割:它是指将给定图像中的每个像素链接到特定类标签的过程。例如,在下图中,像素被标记为汽车、树木、行人等。然后使用这些段来查找各种对象之间的交互/关系。
语义分割可视化
C ) Instance Segmentation:在这里,我们将类标签与每个像素关联起来,类似于语义分割,不同之处在于它将同一类的多个对象视为单个对象/单独的实体。
实例分割可视化
SAHI的项目地址:https://github.com/obss/sahi
1. 通过 pip 安装最新版本:
pip install sahi
2. 通过conda
conda install sahi -c obss
现在可以在 Python 中导入和使用任何SAHI函数:
from sahi import get_sliced_prediction
切片推理的概念基本上是;对原始图像的较小切片执行推理,然后合并原始图像上的切片预测。可以用下图表示:
切片推理
通过执行切片推理而不是标准推理,可以更准确地检测较小的对象
在这里,我们将使用SAHI在此示例图像上展示切片推理演示:
用于推理演示的示例图像
首先导入教程所需的函数:
from sahi .model import MmdetDetectionModel
from sahi .utils.cv import read_image,visualize_object_predictions
from sahi .predict import get_sliced_prediction
MmDetectionModel是流行的MMDetection 框架的包装类。它可用于在任何MMDetection 模型上加载和执行切片/标准推理。
read_image是一个实用函数,用于将任何图像转换为 RGB numpy 数组。
get_sliced_prediction是执行切片推理的函数。
visualize_object_predictions是用于可视化SAHI预测结果的实用函数。
然后,我们需要通过定义所需的参数来创建一个DetectionModel实例:
detection_model = MmdetDetectionModel(
model_path=mmdet_cascade_mask_rcnn_model_path,
config_path=mmdet_cascade_mask_rcnn_config_path,
prediction_score_threshold=0.4,
device="cuda"
)
需要 model_path和config_path才能成功加载任何模型。
结果中将忽略分数低于predict_score_threshold 的预测。
device参数指定推理设备,可以设置为cuda或cpu。
加载图像:
image = read_image(image_dir)
最后,我们可以执行切片预测。在本例中,我们将在重叠率为 0.2 的 256x256 切片上执行预测:
result = get_sliced_prediction(
image,
detection_model,
slice_height = 256,
slice_width = 256,
overlap_height_ratio = 0.2,
overlap_width_ratio = 0.2
)
在原始图像上可视化预测的边界框和掩码:
visualization_result = visualize_object_predictions(
image,
object_prediction_list=result["object_prediction_list"],
output_dir="",
file_name="",
)
ipython_display(visualization_result["image"])
切片预测结果
您可以独立使用SAHI的切片操作。
例如,您可以将单个图像切片为:
from sahi.slicing import slice_image
slice_image_result, num_total_invalid_segmentation = slice_image(
image=image_path,
output_file_name=output_file_name,
output_dir=output_dir,
slice_height=256,
slice_width=256,
overlap_height_ratio=0.2,
overlap_width_ratio=0.2,
)
或者,您可以从任何 coco 格式的数据集创建切片的 coco 数据集,如下所示:
from sahi.slicing import slice_coco
coco_dict, coco_path = slice_coco(
coco_annotation_file_path=coco_annotation_file_path,
image_dir=image_dir,
slice_height=256,
slice_width=256,
overlap_height_ratio=0.2,
overlap_width_ratio=0.2,
)
SAHI库目前仅支持MMDetection 模型。但是,添加新框架很容易。
您需要做的就是在继承自DetectionModel 类的model.py 中创建一个新类。您可以将MMDetection wapper作为参考。(这几个文件都在SAHI的项目中可以找到)
作者:Fatih Cagatay Akyon
编译:CV技术指南
原文链接:
https://medium.com/codable/sahi-a-vision-library-for-performing-sliced-inference-on-large-images-small-objects-c8b086af3b80
欢迎关注公众号 CV技术指南 ,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读。
在公众号中回复关键字 “技术总结”可获取公众号原创技术总结文章的汇总pdf。
CV技术指南--精华文章汇总分类
Softmax 函数和它的误解
资源分享 | SAHI:超大图片中对小目标检测的切片辅助超推理库
计算机视觉中的图像标注工具总结
Batch Size对神经网络训练的影响
PyTorch 中的 ModuleList 和 Sequential: 区别和使用场景
神经网络超参数的调参方法总结
使用 Ray 将 PyTorch 模型加载速度提高 340 倍
计算机视觉中的图像标注工具总结
轻量化模型系列--GhostNet:廉价操作生成更多特征
ICCV2021 | MicroNet:以极低的 FLOPs 改进图像识别
CVPR2021 | 重新思考BatchNorm中的Batch
ICCV2021 | 重新思考视觉transformers的空间维度
CVPR2021 | Transformer用于End-to-End视频实例分割
ICCV2021 |(腾讯优图)重新思考人群中的计数和定位:一个纯粹基于点的框架
卷积神经网络的复杂度分析
2021年小目标检测最新研究综述
计算机视觉中的自注意力
综述专栏 | 姿态估计综述
漫谈CUDA优化
为什么GEMM是深度学习的核心
使用深度神经网络为什么8位足够?
经典论文系列--胶囊网络:新的深度学习网络
经典论文系列 | 目标检测--CornerNet & 又名 anchor boxes的缺陷
如何看待人工智能的泡沫
使用Dice loss实现清晰的边界检测
PVT--无卷积密集预测的多功能backbone
CVPR2021 | 开放世界的目标检测
Siamese network总结
计算机视觉专业术语总结(一)构建计算机视觉的知识体系
欠拟合与过拟合技术总结
归一化方法总结
论文创新的常见思路总结
CV方向的高效阅读英文文献方法总结
计算机视觉中的小样本学习综述
知识蒸馏的简要概述
计算机视觉中的特征金字塔技术总结
Siamese network总结
计算机视觉中的注意力机制技术总结
文字识别OCR开源框架的对比--Tesseract vs EasyOCR
计算机视觉专业术语总结(一)构建计算机视觉的知识体系
归一化方法总结
计算机视觉的高效阅读英文文献方法总结
计算机视觉中的小样本学习综述
知识蒸馏的简要概述
损失函数技术总结
经典论文系列 | 重新思考在ImageNet上的预训练