完整指南:切片推理、批量推理与结果导出`)
计算机视觉人工智能【免费下载链接】sahiFramework agnostic sliced/tiled inference interactive ui error analysis plots项目地址https://gitcode.com/gh_mirrors/sa/sahi点击查看免费下载SAHISlicing Aided Hyper Inference是一套与检测框架无关的切片推理与预测工具库本指南基于官方文档 docs/tr/predict.md 展开系统讲解其四大核心预测能力get_sliced_prediction切片推理、get_prediction标准推理、高层/低层两套批量推理 API以及预测结果的进度监控、类别过滤与多格式导出。读完本文你将掌握 SAHI 预测流水线的全部公开参数、底层调用链与实战用法能够针对小目标密集场景直接编写可运行的推理代码。统一模型入口AutoDetectionModel.from_pretrained所有预测 API 的第一步都是通过AutoDetectionModel初始化一个检测模型。该工厂方法位于 sahi/auto_model.py核心逻辑是根据model_type字符串查表MODEL_TYPE_TO_MODEL_CLASS_NAME再动态导入对应的模型类sahi/utils/file.py中的import_model_classfrom sahi import AutoDetectionModel detection_model AutoDetectionModel.from_pretrained( model_typemmdet, # MMDetection 模型 model_path..., # 权重文件路径 config_path..., # MMDetection 等框架需要的配置文件 confidence_threshold0.3, # 低于该置信度的预测会被丢弃 devicecpu, # 或 cuda:0 load_at_initTrue, # 是否在初始化时加载模型权重 image_sizeNone, # 推理输入尺寸按比例缩放 )从源码看当前仓库支持的model_type完整列表如下映射关系见 sahi/auto_model.pymodel_type对应模型类说明ultralyticsUltralyticsDetectionModelYOLOv8 / YOLO11 / YOLO26 等yolov8、yolov11、yolo11、yolo26会自动归一化为ultralyticsrtdetrRTDetrDetectionModelRT-DETR 系列libreyoloLibreYoloDetectionModelLibreYOLOmmdetMmdetDetectionModelMMDetection300 检测模型yolov5Yolov5DetectionModelYOLOv5detectron2Detectron2DetectionModelDetectron2huggingfaceHuggingfaceDetectionModelHuggingFace 检测模型DETR、Deformable DETR、DETA、GroundingDINO 等huggingface_segmentationHuggingfaceSegmentationModelHuggingFace 分割模型torchvisionTorchVisionDetectionModelTorchVision 的 Faster R-CNN、RetinaNet、FCOS、SSDroboflowRoboflowDetectionModelRoboflow RFDETR 检测/分割模型yolo-worldYOLOWORLDDetectionModelYOLOWorldyoloeYOLOEDetectionModelYOLOEhugging_face_universal_segmentationHuggingFaceUniversalSegmentationModelHuggingFace 通用分割其余可选参数还包括mask_threshold分割掩膜像素阈值默认 0.5、category_mapping类别 id → 类别名的映射如{1: pedestrian}、category_remapping推理后按类别名重映射 id如{car: 3}以及model直接传入一个已初始化的模型实例。切片推理Sliced Inferenceget_sliced_prediction切片推理是 SAHI 的核心能力专门用于解决小目标漏检问题将大图切成带重叠区域的切片逐块推理再把各切片的预测合并回原图坐标。最小调用示例如下from sahi.predict import get_sliced_prediction from sahi import AutoDetectionModel # 初始化任意框架的模型 detection_model AutoDetectionModel.from_pretrained(model_typemmdet, ...) # MMDetection detection_model AutoDetectionModel.from_pretrained(model_typeultralytics, ...) # YOLOv8/YOLO11/YOLO26 detection_model AutoDetectionModel.from_pretrained(model_typehuggingface, ...) # HuggingFace 检测模型 detection_model AutoDetectionModel.from_pretrained(model_typetorchvision, ...) # TorchVision detection_model AutoDetectionModel.from_pretrained(model_typertdetr, ...) # RT-DETR detection_model AutoDetectionModel.from_pretrained(model_typelibreyolo, ...) # LibreYOLO detection_model AutoDetectionModel.from_pretrained(model_typeyoloe, ...) # YOLOE detection_model AutoDetectionModel.from_pretrained(model_typeyolov5, ...) # YOLOv5 detection_model AutoDetectionModel.from_pretrained(model_typeyolo-world, ...) # YOLOWorld detection_model AutoDetectionModel.from_pretrained(model_typeroboflow, ...) # Roboflow RFDETR # 获取切片预测结果 result get_sliced_prediction( image, # 图像路径、numpy 数组或 PIL Image detection_model, slice_height256, # 切片高度 slice_width256, # 切片宽度 overlap_height_ratio0.2, # 垂直方向重叠比例 overlap_width_ratio0.2, # 水平方向重叠比例 )完整参数说明源码级get_sliced_prediction定义于 sahi/predict.py签名与默认值如下均可在调用时覆盖参数默认值作用image必填图像路径 /np.ndarray/PIL.Imagedetection_model必填任意框架的DetectionModel实例slice_height/slice_widthNone每个切片的像素尺寸与auto_slice_resolutionTrue搭配时可不传由图像分辨率自动计算overlap_height_ratio/overlap_width_ratio0.2相邻切片在高度/宽度方向的重叠比例。例如切片 512 时重叠 0.2 即重叠 102 像素约 102px重叠保证跨切片的物体至少完整出现在某一切片中perform_standard_predTrue在切片预测之外再对整图做一次标准预测提升大目标召回切片数 1 时生效postprocess_typeGREEDYNMM切片合并后处理算法可选NMM、GREEDYNMM、NMS、LSNMS映射见 sahi/predict.pypostprocess_match_metricIOS预测匹配度量IOU交并比或IOS交集占较小面积之比对小目标更友好postprocess_match_threshold0.5超过该重叠阈值的跨切片重复预测会被合并/消除postprocess_class_agnosticFalse为 True 时后处理忽略类别 id跨类合并verbose10 静默1 打印切片数2 额外打印切片/预测/后处理耗时merge_buffer_lengthNone低内存模式下的切片缓冲长度边推理边后处理值越大结果越接近非缓冲模式auto_slice_resolutionTrue未显式传slice_height/slice_width时按图像分辨率与方向自动推算切片尺寸slice_export_prefix/slice_dirNone将切片保存到磁盘时的文件名前缀与目录exclude_classes_by_name/exclude_classes_by_idNone推理阶段排除的类别名列表 / 类别 id 列表progress_barFalse是否显示 tqdm 进度条progress_callbackNone每个切片组处理完后的回调函数batch_size1单次批量推理的切片数增大可提升 GPU 利用率与吞吐必须 ≥ 1否则抛ValueErrorforce_postprocess_typeFalse为 True 时禁用后处理类型自动切换见下文confidence_thresholdNone仅本次调用临时覆盖模型置信度阈值调用结束后自动恢复模型原阈值底层调用链从 sahi/predict.py 的源码实现可以看到完整的切片推理流水线切片调用sahi/slicing.py的slice_image()得到切片图集与每个切片的starting_pixels左上角在原图中的偏移。批量推理按batch_size分组每组调用detection_model.perform_batch_inference(images)再以每个切片对应的shift_amount偏移与full_shape原图尺寸调用convert_original_predictions()把坐标映射回原图。过滤与移位对每张切片的预测应用filter_predictions()排除指定类别再通过ObjectPrediction.get_shifted_object_prediction()将 bbox 平移回原图坐标实现见 sahi/prediction.py。标准预测补充若perform_standard_predTrue且切片数大于 1对整图再跑一次get_prediction()把大目标的预测也并入结果同时复用已解码的原图以省去二次解码。合并后处理对汇总后的预测列表执行postprocess_type对应的合并算法去重、消歧。值得注意的两个自动行为低置信度自动切换后处理当模型置信度阈值低于LOW_MODEL_CONFIDENCE0.1定义于 sahi/predict.py且未设置force_postprocess_type时会打日志警告并自动把postprocess_type切换为NMS、postprocess_match_metric切换为IOU以避免合并操作把 bbox 放大。OBB 模型的约束当检测模型是UltralyticsDetectionModel且is_obbTrue旋转框输出时后处理类型被强制为NMS因为 OBB 输出只支持 NMS 合并。结果对象get_sliced_prediction与get_prediction均返回PredictionResult定义于 sahi/prediction.py包含object_prediction_listObjectPrediction列表每个元素持有bbox可调用to_xyxy()得到[x1, y1, x2, y2]、category.name、category.id、score.value以及可选的mask分割掩膜durations_in_secondsslice/prediction/postprocess各阶段耗时字典用于性能剖析image/image_width/image_height原图惰性解码与尺寸。标准推理Standard Inferenceget_prediction当图像中物体尺寸较大、无需切片时可直接对整图做一次标准推理from sahi.predict import get_prediction from sahi import AutoDetectionModel # 初始化模型 detection_model AutoDetectionModel.from_pretrained(...) # 获取标准预测结果 result get_prediction( image, # 图像路径 / np.ndarray / PIL.Image detection_model, )get_predictionsahi/predict.py还支持以下可选参数shift_amount[shift_x, shift_y]把预测框/掩膜从切片坐标平移到原图坐标默认[0, 0]full_shape[height, width]形式的原图尺寸未传时自动从图像读取postprocess传入一个PostprocessPredictions实例对结果做后处理exclude_classes_by_name/exclude_classes_by_id排除指定类别confidence_threshold仅本次调用覆盖模型阈值调用结束自动恢复try/finally保证verbose1打印单次预测耗时。批量推理Batch Inference高层 API对整个文件夹或文件列表执行预测predict是面向批量的高层入口sahi/predict.py它自动完成遍历输入源 → 加载模型 → 逐图推理 → 导出可视化 / pickle / 裁剪图 / COCO 结果。from sahi.predict import predict from sahi import AutoDetectionModel # 初始化模型也可以不传 detection_model由 predict 内部创建 detection_model AutoDetectionModel.from_pretrained(...) result predict( model_type..., # 可选ultralytics, mmdet, huggingface 等 model_path..., # 模型权重路径 model_config_path..., # 仅 mmdet 等框架需要 model_confidence_threshold0.5, model_devicecpu, # 或 cuda:0 source..., # 单张图片路径或文件夹路径也支持视频 no_standard_predictionTrue, # True 时跳过整图标准预测 no_sliced_predictionFalse, # True 时跳过切片推理 slice_height512, slice_width512, overlap_height_ratio0.2, overlap_width_ratio0.2, export_pickleFalse, # 是否导出 .pickle 预测结果 export_cropFalse, # 是否导出预测目标的裁剪图 progress_barFalse, # 是否显示处理进度条 )该函数在 sahi/predict.py 中的关键行为输入源判断source可以是单个图片、目录通过list_files按IMAGE_EXTENSIONS过滤或视频自动进入get_video_reader逐帧处理支持frame_skip_interval跳帧、view_video实时预览互斥校验no_standard_prediction与no_sliced_prediction不能同时为 True否则抛出ValueError导出目录结果写入project/name默认runs/predict/exp自动递增避免覆盖子目录为visuals、visuals_with_gt、crops、picklesCOCO 输出传入dataset_json_pathCOCO 格式 json后预测结果会以 COCO prediction 格式累积并导出到result.json同时生成叠加绿色 GT、红色预测的可视化图return_dictTrue时返回{export_dir: save_dir}其余高级参数源码均支持image_size、postprocess_type、postprocess_match_metric、postprocess_match_threshold、postprocess_class_agnostic、novisual、visual_bbox_thickness、visual_text_size、visual_text_thickness、visual_hide_labels、visual_hide_conf、visual_export_formatpng或jpg、batch_size、force_postprocess_type、exclude_classes_by_name/id等。低层 APIperform_batch_inference与按图结果perform_batch_inference允许你在一次调用中对多张图像推理并逐图取回预测列表。Ultralytics YOLO 模型使用原生 GPU batching把整批图像一次性交给 YOLO 推理其余所有框架通过同一 API 回退到顺序单图推理无需改写调用代码。import cv2 from sahi import AutoDetectionModel detection_model AutoDetectionModel.from_pretrained( model_typeultralytics, model_pathyolo26n.pt, confidence_threshold0.25, devicecuda:0, ) # 将一批图像加载为 RGB 的 numpy 数组H, W, C images [cv2.cvtColor(cv2.imread(p), cv2.COLOR_BGR2RGB) for p in image_paths] # 执行批量推理Ultralytics 为原生 GPU batching detection_model.perform_batch_inference(images) # 提供每张图的偏移量与整图尺寸 # 当图像不是切片时使用默认的 [[0, 0]] 偏移 shift_amount_list [[0, 0]] * len(images) full_shape_list [[img.shape[0], img.shape[1]] for img in images] detection_model.convert_original_predictions( shift_amountshift_amount_list, full_shapefull_shape_list, ) # 逐图访问预测结果 for i, preds in enumerate(detection_model.object_prediction_list_per_image): print(fImage {i}: {len(preds)} detections) for pred in preds: print(pred.category.name, pred.score.value, pred.bbox.to_xyxy())从 sahi/models/base.py 的实现看基类DetectionModel.perform_batch_inference的默认行为是不立即推理而是把图像暂存在_batch_images随后convert_original_predictions()sahi/models/base.py会逐张调用perform_inference并转换结果从而保持每个子类_original_predictions的原始格式UltralyticsDetectionModel、HuggingfaceDetectionModel等子类则覆写该方法以获得真正的批量推理。关于批量推理文档与源码共同确认两条兼容性保证object_prediction_list_per_imagesahi/models/base.py返回按图像分组的list[list[ObjectPrediction]]索引与输入图像顺序一致原有的object_prediction_list属性保持不变仍然返回第一张图的预测列表因此使用perform_inferenceconvert_original_predictionsobject_prediction_list的旧代码无需任何修改即可继续工作。切片推理进度监控progress_bar与progress_callback在大量切片上运行切片推理时SAHI 提供了两种进度控制方式progress_barbool默认 False为 True 时在切片处理期间显示 tqdm 进度条适合终端与 notebook 的视觉反馈progress_callbackcallable每个切片或切片组处理完成后被调用的回调函数接收两个整数参数(current_slice_index, total_slices)可用于集成自定义进度上报例如更新 GUI 控件、把进度写入日志文件。回调用法示例from sahi.predict import get_sliced_prediction from sahi import AutoDetectionModel # 初始化模型 detection_model AutoDetectionModel.from_pretrained(...) def my_progress_callback(current, total): print(fProcessed {current}/{total} slices) result get_sliced_prediction( image, detection_model, slice_height512, slice_width512, overlap_height_ratio0.2, overlap_width_ratio0.2, progress_barFalse, # 关闭 tqdm 进度条 progress_callbackmy_progress_callback, # 使用回调接收进度 )几点实现细节依据 sahi/predict.py 与官方文档说明progress_bar与progress_callback可以同时使用两者都提供时tqdm 条照常显示且每个切片组处理完后回调仍会被调用progress_callback使用1 基索引调用即第一次调用为(1, total)进度计数按切片数推进slices_processed回调参数为已处理切片数与总切片数而非批次数测试用例中已有该能力的验证例如 tests/test_torchvision.py 中定义progress_callback(progress, total)并在progress_barTrue下断言回调被触发tests/test_predict.py 也在 mmdet 切片测试中启用了progress_barTrue。推理时排除自定义类别切片推理与标准推理都支持在推理阶段按类别名或类别 id 过滤结果from sahi.predict import get_sliced_prediction from sahi import AutoDetectionModel # 初始化模型 detection_model AutoDetectionModel.from_pretrained(...) # 按类别名排除 exclude_classes_by_name [car] # 或按自定义类别 id 排除 exclude_classes_by_id [0] result get_sliced_prediction( image, detection_model, slice_height256, slice_width256, overlap_height_ratio0.2, overlap_width_ratio0.2, exclude_classes_by_nameexclude_classes_by_name, # exclude_classes_by_idexclude_classes_by_id )其底层实现是filter_predictions()sahi/predict.py对每条ObjectPrediction若category.name命中exclude_classes_by_name或category.id命中exclude_classes_by_id则从结果列表中剔除。两个参数都支持同时传入且在整个流水线中会被应用到每个切片预测与标准预测保证排除逻辑一致。tests/test_predict.py 中的 mmdet 切片测试tests/test_predict.py展示了在仅检测car类person/truck 数量为 0时的断言验证方式。可视化参数与多格式导出PredictionResult提供了丰富的可视化与导出方法可用于制作结果图、评估数据与下游工具对接from sahi.predict import get_prediction from sahi import AutoDetectionModel from PIL import Image # 初始化模型 detection_model AutoDetectionModel.from_pretrained(...) # 获取预测结果 result get_prediction( image, detection_model, ) # 1) 自定义可视化参数导出 result.export_visuals( export_diroutputs/, text_size1.0, # 类别标签文字大小 rect_th2, # 边界框线宽像素 hide_labelsFalse, # True 时隐藏类别标签 hide_confFalse, # True 时隐藏置信度分数 file_namecustom_visualization, ) # 2) 导出为 COCO 格式标注不含分数适合作为 GT/标注 coco_annotations result.to_coco_annotations() # 示例输出[{image_id: None, bbox: [x, y, width, height], category_id: 0, area: width*height, ...}] # 3) 导出为 COCO 格式预测含置信度分数 coco_predictions result.to_coco_predictions(image_id1) # 示例输出[{image_id: 1, bbox: [x, y, width, height], score: 0.98, category_id: 0, ...}] # 4) 导出为 imantics 格式供 imantics 标注库使用 imantics_annotations result.to_imantics_annotations() # 5) 导出为 FiftyOne 检测格式供 FiftyOne 可视化/数据集平台使用 fiftyone_detections result.to_fiftyone_detections()这些方法的实现细节见 sahi/prediction.pyexport_visuals默认文件名prediction_visual导出格式固定为png自动创建export_dir目录内部调用sahi/utils/cv.py的visualize_object_predictionsto_coco_annotations逐条调用ObjectPrediction.to_coco_prediction()并取其.jsonbbox 统一转为 COCO 的[x, y, width, height]xywh见 sahi/prediction.pyimage_id为 Noneto_coco_predictions与前者唯一区别是传入image_id同时 bbox 与score、category_id一并输出适合直接作为模型预测提交predictionto_fiftyone_detections将 bbox 归一化为 FiftyOne 的相对坐标[x/w, y/h, w/w, h/h]并构造fo.Detection使用前需确保已安装 fiftyone未安装时会抛出ImportError提示安装命令同理 imantics 导出依赖 imantics 库若模型输出包含分割掩膜to_coco_prediction会自动走CocoPrediction.from_coco_segmentation路径导出的 COCO 结果将携带segmentation字段。进一步探索全部支持框架的交互式演练示例见 notebooks 文档仓库demo/目录下的inference_for_ultralytics.ipynb、inference_for_mmdetection.ipynb、inference_for_huggingface.ipynb、inference_for_rtdetr.ipynb、inference_with_batch_slicing.ipynb等均可直接运行切片推理的原理与调参策略可参考 sliced-inference 指南各框架模型接入细节见 models 文档 及各 model 专页预测结果与可视化相关的后处理、合并算法详见 postprocess 文档。赞分享计算机视觉人工智能【免费下载链接】sahiFramework agnostic sliced/tiled inference interactive ui error analysis plots项目地址https://gitcode.com/gh_mirrors/sa/sahi点击查看免费下载相关推荐SAHI 预测工具指南切片推理、批量推理、类别过滤与结果导出的完整实战SAHI 预测工具指南切片推理、批量推理、类别过滤与结果导出的完整实战 本文以 SAHISlicing Aid for Hierarchical Infer计算机视觉人工智能SAHI切片推理完整指南从入门到精通掌握预测结果导出SAHI切片推理完整指南从入门到精通掌握预测结果导出 SAHISlicing Aided Hyper Inference是一个框架无关的切片推理工具专门计算机视觉人工智能SAHI项目预测功能详解切片推理与批量预测实战指南SAHI项目预测功能详解切片推理与批量预测实战指南 一、SAHI预测功能概述 SAHISlicing Aided Hyper Inference是一个专注计算机视觉人工智能创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。