首页 > 其他分享 >计算机视觉库supervision学习-day(2)-Detections类

计算机视觉库supervision学习-day(2)-Detections类

时间:2024-10-24 15:01:18浏览次数:1  
标签:nms ultralytics cv2 detections supervision class Detections day

对于day-1,算是一个简要的supervision的使用方法,但对于大部分内容本人还是一知半解,因此我查看官方文档,对照着官方文档来进行supervision的详细学习,并对其中一些重要的方法和属性进行解释

Detections and Segmentation-检测与分割

一、Detections 类

supervision是这样描述Detections类的:

Supervision 库中的 sv.Detections 类将来自各种目标检测和分割模型的结果标准化为一致的格式。这个类简化了数据的操作和过滤,提供了一个统一的 API,以便与 Supervision 的跟踪器(tracker)、注释器(annotator)和工具集成。

1.属性

  1. xyxy:检测框的左上角坐标和右下角坐标
  2. confidence:置信度
  3. class_id:检测的物体对应的索引
  4. data:对应的类名
  5. tracker_id:跟踪器的id
  6. mask:图像分割产生的掩膜,如果不是图像分割,则会是None
  7. box_area:返回每个检测框的面积
  8. area:如果Detections类定义了掩膜,则返回掩膜的面积值,否则返回检测框的面积值

2.重要方法

  1. from_ultralytics(ultralytics_results)

    • ultralytics_results:yolo的推理结果

    通过这个方法能够将YOLO的推理结果ultralytics_results转换为sv.Detections的实例
    还有很多其他的from_xxx的方法,将其他的推理结果转换为Detections的实例,这里就不一一列举了

  2. with_nms(threshold=0.5, class_agnostic=False)

    • threshold:设定的IoU的阈值,默认为0.5
    • class_agnostic:执行的非极大值抑制是否与类无关,默认为False表示有关

    对于一个图片,可能会出现一个物体同时被识别成两种类型,如下图

如图,虽然画面上只显示了三个框,但实际上,后方的车即被识别成了car类,又被识别成了truck类,可见下方的detections内容

image-20241024140736610

with_nms采用了nms,即非极大值抑制的方法,用以解决多个框重叠的问题,该方法会计算某个框与其他框的IoU(相当于相交比),对于IoU大于阈值的两个框,会舍弃掉其中置信度较小的框,保留置信度更大的从而达到减少框重叠的功能

import cv2
import supervision as sv
from ultralytics import YOLO

cv2.namedWindow('img1',cv2.WINDOW_NORMAL)
model=YOLO('yolo11n.pt')
image=cv2.imread('images/dog_bike.jpeg')
result=model(image)[0]
detections=sv.Detections.from_ultralytics(result)
#detections调用with_nms方法,设定阈值为0.5,类无关的非极大值抑制
detections=detections.with_nms(0.5,True)

box_annotator=sv.BoxAnnotator()
box_annotator.annotate(scene=image,detections=detections)

labels=[
    f'{class_name} {confidence:.2f}'
    for class_name,confidence
    in zip(detections['class_name'], detections.confidence)
]
label_annotator=sv.LabelAnnotator()
label_annotator.annotate(scene=image,detections=detections,labels=labels)

cv2.imshow('img1',image)
cv2.waitKey(0)

image-20241024143118660

可见,后方的车辆最终被识别成了car类型,truck类被去除了

  1. with_nmm(threshold=0.5,class-agnostic=False)

    与with_nms功能基本一致,只不过nmm采用的是非极大值合并的方法

标签:nms,ultralytics,cv2,detections,supervision,class,Detections,day
From: https://www.cnblogs.com/WineMarks-Garden/p/18499586

相关文章

  • Java基础day03---循环,数组,杨辉三角
    Java基础day03接day02----流程控制---3、循环一、循环循环语法结构执行逻辑通用for循环for(初始化;条件判断;步长设置){//循环体}第一次循环:初始化,条件判断,循环体,步长设置;第2-n次循环:条件判断,循环体,while循环while(判断条件){//循环体}先条件判断再执行循环体do.............
  • DAY42 ||完全背包理论 | 518. 零钱兑换 II | 377. 组合总和 Ⅳ|70. 爬楼梯 (进阶)
    完全背包理论什么是完全背包:有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品都有无限个(也就是可以放入背包多次),求解将哪些物品装入背包里物品价值总和最大。完全背包和01背包问题唯一不同的地方就是,每种物品有无限件。不......
  • 代码随想录算法训练营第二十四天|Day24 回溯算法
    93.复原IP地址题目链接/文章讲解:https://programmercarl.com/0093.%E5%A4%8D%E5%8E%9FIP%E5%9C%B0%E5%9D%80.html视频讲解:https://www.bilibili.com/video/BV1XP4y1U73i/思路char**result;intresultTop;intsegments[3];intisValid(char*s,intstart,intend){......
  • LeetCode|3185. 构成整天的下标对数目 II(day21)
    作者:MJ昊博客:掘金、CSDN等公众号:程序猿的编程之路今天是昊的算法之路第21天,今天分享的是LeetCode第3185题构成整天的下标对数目II的解题思路。这是一道中等难度的题目,主要考察如何高效地统计两个元素之和为24的倍数的下标对,通过优化的算法减少时间复杂度。题目描......
  • LeetCode|3184. 构成整天的下标对数目 I(day20)
    作者:MJ昊博客:掘金、CSDN等公众号:程序猿的编程之路今天是昊的算法之路第20天,今天分享的是LeetCode第3184题构成整天的下标对数目I的解题思路。这是一道简单难度的题目,考察的是数组元素之间的组合与模运算。题目描述简要回顾给定一个整数数组hours,求满足(hours[i]+......
  • 【代码随想录Day50】图论Part02
    岛屿数量深搜题目链接/文章讲解:代码随想录classSolution{//计算网格中岛屿的数量publicintnumIslands(char[][]grid){intsum=0;//初始化岛屿数量为0//遍历整个网格for(inti=0;i<grid.length;i++){......
  • 0基础学java之Day13
    static理解:静态的作用:1.修饰属性类加载到方法区时,JVM会扫描该类的所有属性并把静态属性加载到静态区中,静态属性属于类属性,该类所有的对象都共享该属性静态属性直到项目结束时才会被回收2.修饰方法属于类方法,直接用类名调用应用场景:工具类3.修饰代码块静态代......
  • 计算机视觉库supervision学习-day(1)-图像检测和标记
    supervision库是一款由roboflow开发的计算机视觉库提供了一系列方便的工具和功能,用于可视化和处理各种计算机视觉任务。它的目标是简化深度学习模型的可视化和后处理步骤,尤其适用于对象检测、图像分割、关键点检测等任务。一、下载supervision库1.在3.8版本及以上的python,使用pi......
  • 黑马JavaWeb-day03
    目录Ajax前后端分离开发前端工程化环境准备Vue项目Vue项目开发流程Vue组件库ElementVue路由打包部署AjaxAjax:AsynchronousJavaScriptAndXML,异步的JavaScript和XML作用:数据交换:通过Ajax可以给服务器发送请求,并获取服务器相应的数据异步交互:可以在不重新加载整个页......
  • Day12 备战CCF-CSP练习
    Day12题目描述西西艾弗岛上共有\(n\)个仓库,依次编号为\(1∼n\)。每个仓库均有一个\(m\)维向量的位置编码,用来表示仓库间的物流运转关系。具体来说,每个仓库\(i\)均可能有一个上级仓库\(j\),满足:仓库\(j\)位置编码的每一维均大于仓库\(i\)位置编码的对应元素。比如......