目标检测中的非最大值抑制算法-600学习网

600学习网终身会员188,所有资源无秘无压缩-购买会员

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

计算机视觉是人工智能的一个重要领域,它可以识别和理解图像和场景。

它包括图像识别.目标检测.图像分割.图像生成.图像超分辨率等许多子领域。由于大量的实际用例,目标检测可能是最广泛使用的。

目标检测

目标检测是指计算机系统在图像中定位目标并识别每个目标的能力。目标检测已广泛应用于人脸检测.车辆检测.行人计数.安全系统和自主车辆。

目标检测模型从端到端学习范式的发展中受益匪浅:建议.特征和分类器成为一个神经网络,将一般目标检测的结果提高了两倍[1]一般来说,所有现代目标检测模型都遵循三个步骤:

1.建议窗口的搜索空间(通过滑动窗口或使用建议的稀疏窗口)。

2.使用分类器/回归对窗口进行评分。

3.合并可能属于同一对象的窗口。

最后一步称为”非最大抑制”

边界框

在对象检测中,我们通常使用边界框来描述对象在图像中的空间位置。

边界框是使用左上角和右下角坐标绘制的矩形。另一个常见的边界框表示由矩形的中心和矩形的高度和宽度组成。

非最大算法(NMS)

可以使用以下步骤解释该算法

输入:检测到的每个对象的边界框列表.类名和输出概率。

1.删除输出概率分数小于指定阈值的边界框。

2.按输出概率的降序排列剩余边界框的列表。

3.遍历排序的边界框列表,直到至少剩下一个元素。

4.从列表中删除第一个边界框,并将其标记为”当前元素”。此外,检查借据。如果IOU高于指定的阈值,则从列表中删除元素,并将当前元素附加到最终列表中

5.重复步骤3和4。

6.返回”最终列表”

NMS算法试运行

假设下图(图1)包含两只狗(Maya在左侧,Zoro在右侧)。我们有一个对象检测模型,可以在图像中区分Maya和Zoro。

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

当使用上图来推断我们的目标检测模型(没有NMS)时,我们将得到图2所示的输出。在这里,我们可以看到,我们在单个对象上得到了多个具有自己概率分数的边界框。

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

我们的目标是为对象选择最合适的边界框。换句话说,我们必须从概率为0.94.0.68和0.47的三个框中选择Maya边界框。同样,我们必须在概率为0.9和0.58的两个边界框中找到最佳Zoro边界框。

根据该算法,我们将首先丢弃概率分数低于指定阈值的所有边界框。例如,如果将阈值设置为0.5,我们将丢弃Maya概率为0.47的边界框。

此外,我们将找到概率得分最高的边界框,并用同一类的所有其他边界框检查其IOU。如果IOU高于阈值(表示同一对象),则丢弃概率分数较低的边界框。

同样,我们将对图像中所有检测到的对象执行以下步骤。最终输出如图3所示。

慕课、黑马、极客时间、小码哥、拉钩、尚硅谷、开课吧等千套课程打包VIP套餐,IT课程一网打尽

密码

首先,我们将初始化概率置信阈值和IOU阈值。例如,如果边界框的概率低于概率置信阈值,我们将丢弃该边界框。同样,如果IOU分数高于定义的阈值,我们将不考虑输出概率低的边界框。

导入cv2类NMS:def__init_(self)->无:self.conf=0.5 self.iou_阈值=0.4

下面截取的代码中的IOU函数计算

bboxes _ list=〔class,X(左上),Y(左上角),X(右下角),Y,右下角,输出_概率〕样本值:0 187 90 586 607 0.94 0 120 116 600 370 0.68 1 511 185 961 418 0.58 0 340 145 568 478 0.47 1 524 70 920 565 0.92

def draw_overlay(self,image,bboxes_list):overlay_color={’0’:(0,255,0),’1’:(坐标〔2〕))终点=(int(坐标〔3〕),int(坐标〕4〕))prob=float(坐标〔5〕)text_start_point=(int)坐标〔1〕,int(coord〔2〕〕-10)image=cv2.矩形(图像,起点,终点,覆盖层颜涩〔class_名称〕,覆盖层厚度)image=cv2.putText(image,str(prob),text_start_point,font,0.8,overlay_color〔class_name〕,overlay_thickness-1,cv2.LINE_AA)cv2.imshow(“im”,image)cv2.waitKey(0)cv2。destroyAllWindows()

以下功能是上述NMS算法的实现。此函数用于在应用非最大抑制算法后返回所需的边界框。

def nms(self,image,bboxes_list):req_bboxes,final_boxes=〔〕,〔〕表示bboxes中的坐标:prob=float(coord〔5〕)如果prob>self.conf:req_bboxes.append(coord)#根据概率得分对边界框进行排序(req_bboxes,reverse=True,key=lambda x:x〔5〕)而len(bboxes_sorted)>0:#移除最佳概率边界框=bboxes sorted.pop(0)对于bboxes中的b排序:#如果框〔0〕==b〔0〕:iou=self.iou(框〔1:-1〕,b〔1:-1〕)如果iou>=self.iou_阈值:#如果iou很大,则丢弃概率最低的盒子bbox_排序。移除(b)打印(len(bboxes_排序))最后的_盒子。追加(box)返回最后的__盒子

下面是NMS类的驱动程序代码。首先,我们读取坐标。txt获取边界框的坐标和其他细节;然后,我们应用NMS算法来获得所需的边界框。

如果__name_==”__main_”:image=cv2.imread(“zoraya.jpg”),打开(“coordinates.txt”,”r”)作为f:data=f.readlines()data=〔i〔:-1〕.split(”)for i in data〕obj=NMS()obj。draw_overlay(image,data)final_boxes=obj.NMS(image.data)对象绘制_覆盖(图像,最终_框)

coordinates.txt 0 187 90 586 607 0.94 0 120 116 600 370 0.68 1 511 185 961 418 0.58 0 340 145 568 478 0.47 1 524 70 920 565 0.92

结论

本文概述了非最大抑制算法和python实现的要求。此外,我们使用一个图像示例来解释该算法

免责声明: 1、本站信息来自网络,版权争议与本站无关 2、本站所有主题由该帖子作者发表,该帖子作者与本站享有帖子相关版权 3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和本站的同意 4、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责 5、用户所发布的一切软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。 6、您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。 7、请支持正版软件、得到更好的正版服务。 8、如有侵权请立即告知本站,本站将及时予与删除 9、本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章和视频仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。
600学习网 » 目标检测中的非最大值抑制算法-600学习网