位置: IT常识 - 正文

YOLOv5图像分割中的NMS处理(yolov3图像识别)

编辑:rootadmin
YOLOv5图像分割中的NMS处理

推荐整理分享YOLOv5图像分割中的NMS处理(yolov3图像识别),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:yolo 图像分割,yolov5语义分割,yolov5 图像大小,yolov5 图像大小,yolov4图像分割,yolov3图像分割,yolov4图像分割,yolo 图像分割,内容如对您有帮助,希望把文章链接给更多的朋友!

在上一篇文章YOLOv5图像分割--SegmentationModel类代码详解有讲到图像经过YOLOv5网络后得到的输出形式,主要是调用了BaseModel类下的forward得到的输出,输出的shape为【batch,25200,117】,这里的25200相当于总的anchors数量【以640*640的输入为例,共有anchors=80*80*3+40*40*3+20*20*3】,117为5[x,y,w,h,conf]+80个类+32【mask的数量】。

那么得到上面这张图的输出后又需要哪些处理呢?又是怎么处理的呢?本篇文章就是来刨析这个问题。

可以从下面的代码看到在进行model后会得到pred和proto。前者就是上面得到图的形式,后者的shape为【batch,32,160,160】,这里的32是mask的数量,160*160是针对80*80这个特征层的上采样得到的。然后是送入NMS进行处理得到新的pred输出。

pred, proto = model(im, augment=augment, visualize=visualize)[:2] # im[batch, 3, 640, 640] # pred:[batch,25200,117], proto:[batch,32,160,160] # NMS with dt[2]: pred = non_max_suppression(pred, conf_thres, iou_thres, classes, agnostic_nms, max_det=max_det, nm=32)

目录

NMS中发生了什么?

通过conf_thres进行筛选

xywh2xyxy

取得对应anchor中conf最大的类

NMS处理 


NMS中发生了什么?

那么来看一下NMS中发生了什么 

 可以看到代码中传入的参数为:pred:model的输出,conf_thres:置信度阈值,iou_thres:iou阈值,classes:需要过滤的类,nm为mask的数量。

然后进入内部,prediction的shepe为【batch,25200,117】,因此通过下面的代码得到:

bs:batch size 这里得到是1

nc:117-32-5=80【coco类的数量】

xc:由于prediction在117这个维度的第5维度【这里的4维度】是指conf,所以可以通过conf_thres得到大于阈值的目标mask  xc,那么此时xc的shape为【1,25200】。通过这个步骤就可以将所有anchors中大于conf的目标筛选出来【形式为False or True】。

通过conf_thres进行筛选 bs = prediction.shape[0] # batch size nc = prediction.shape[2] - nm - 5 # number of classes 85-5 xc = prediction[..., 4] > conf_thres # candidates 85=5+80=(x,y,w,h,conf) 第4维度为conf

然后新建一个output全零的张量,最后一个通道的shape为6+32=38。6指的【x1,y1,x2,y1,conf,class】。 

output = [torch.zeros((0, 6 + nm), device=prediction.device)] * bsYOLOv5图像分割中的NMS处理(yolov3图像识别)

下面的xi是图像的index,对应该index的图像。

x = x[xc[xi]]:由于prediction当前batch为1 ,所以对应xi此时为0,xc是上面通过conf_thres得到shape为【1,25200】的mask,所以xc[xi]就是取出该batch中所有的anchors【这些anchors内已经内是经过conf筛选的目标】;x的shape为【25200,117】[忘记这个shape的含义可以看我最前面的图],那么x[xc[ix]]就可以表示为通过xc中的25200个含有False or True 的anchors,筛选出conf大于阈值的目标【这个目标维度为117,含有box信息,conf,80个类,32个mask】

在我这里得到新的x的shape为:【52,117】。这就表示了在25200个anchors中有52个anchors内有目标,每个anchor又有117个维度来记录该anchor内目标的boxes信息,conf以及类信息等。

for xi, x in enumerate(prediction): # image index, image inference # Apply constraints # x[((x[..., 2:4] < min_wh) | (x[..., 2:4] > max_wh)).any(1), 4] = 0 # width-height x = x[xc[xi]] # confidence xc是所有anchor内的置信度,shape[1,25200]。表示为:获取当前图像中所有anchor中有预测结果的[这个是通过conf筛选过的]

 下面的这一行代码表示为计算conf,x[:,5:]

# Compute conf x[:, 5:] *= x[:, 4:5] # conf = obj_conf * cls_confxywh2xyxy

下面的代码中box是将上面x中的box信息由center_x,center_y,wh转为x1,y1,x2,y2的形式【为后面计算iou做准备】,这里的mi=85【表示mask start index】,因为此时的xshape为【52,117=5+85+32】所以从85开始提取所有的mask。 

# Box/Mask box = xywh2xyxy(x[:, :4]) # center_x, center_y, width, height) to (x1, y1, x2, y2) mask = x[:, mi:] # zero columns if no masks取得对应anchor中conf最大的类

在下面的代码中x[:,5:mi]=x[:,5:85]表示为取所有anchors中所有类的conf。【0~4是box,5:85是class】,然后取出所有anchors中预测的类中conf最大的conf以及索引j【x[:,5:85]的shape为[52,80],利用max(1,keepdim=True)在80所在的这个维度上取max】,而这里得到最大index j就是每个anchors预测得到的类的index[这样不就知道预测的种类了嘛]。

可视化看一下,这里只展示一部分。前面的一个列是所有anchor得到的最大conf值,后面的一列是对应的类别,比如第行中0.24885表示当前这个anchor预测为类别0【也就是persion类,置信度为0.24885】:

最后再用cat函数进行拼接,即将box【xyxy】,conf[所有anchor得到最大的conf], j[最大conf对应的类,mask]

conf, j = x[:, 5:mi].max(1, keepdim=True) x = torch.cat((box, conf, j.float(), mask), 1)[conf.view(-1) > conf_thres]

 得到新的x如下图:

下面这行代码是对上面得到x在conf这个维度上进行排序 

x = x[x[:, 4].argsort(descending=True)] # sort by confidenceNMS处理 

agnostic参数 True表示多个类一起计算nms,False表示按照不同的类分别进行计算nms。

这里的nms是调用的torchvision下的nms。需要传入boxes,这里的boxes是加了c的偏移量【为什么加这个偏移量这里我没明白,有知道的可以留言说一下】。这里的boxes为【x1,y1,x2,y2】形式。score是已经排序好的,iou_thres是iou阈值。

# Batched NMS c = x[:, 5:6] * (0 if agnostic else max_wh) # classes boxes, scores = x[:, :4] + c, x[:, 4] # boxes (offset by class), scores i = torchvision.ops.nms(boxes, scores, iou_thres) # NMS

此时得到的i为:tensor([ 0,  2,  6, 16, 30], device='cuda:0')

这里的x是shape为【49,38】,49表示为有目标的49个anchors,38就是前面含有boxes,conf,index,mask的信息。i就是筛选得到的anchors索引。索引得到最终5个anchors以及信息,shape为【5,38】.

output[xi] = x[i]

这个就是我们得到的经过NMS后的输出啦 

本文链接地址:https://www.jiuchutong.com/zhishi/299590.html 转载请保留说明!

上一篇:轻量级网络MobileNeXt--改进MobileNet v2的逆残差结构(轻量级网络设计)

下一篇:vue3中使用ref语法糖(vue的ref怎么用)

  • php网页设计制作前两个环节解决的是内容问题,这个环节解决的是流量问题

    php网页设计制作前两个环节解决的是内容问题,这个环节解决的是流量问题

  • 惠普笔记本质量好(惠普笔记本质量如何)(惠普笔记本质量怎么样)

    惠普笔记本质量好(惠普笔记本质量如何)(惠普笔记本质量怎么样)

  • vivox70pro+怎么设置锁屏图案(vivox70pro怎么设置锁屏)

    vivox70pro+怎么设置锁屏图案(vivox70pro怎么设置锁屏)

  • 新浪邮箱怎么换绑手机(新浪邮箱怎么换密码登录)

    新浪邮箱怎么换绑手机(新浪邮箱怎么换密码登录)

  • 苹果如何设置自定义铃声(苹果如何设置自动关机)

    苹果如何设置自定义铃声(苹果如何设置自动关机)

  • 华为手机字体变小怎么调(华为手机字体变小了怎么回事)

    华为手机字体变小怎么调(华为手机字体变小了怎么回事)

  • xs与11的区别(xs和11哪个更值得入手)

    xs与11的区别(xs和11哪个更值得入手)

  • 三星手机的OTG设置在哪

    三星手机的OTG设置在哪

  • hpi是什么(HPI是什么车)

    hpi是什么(HPI是什么车)

  • 抖音怎么批量删除视频(抖音怎么批量删除自己的评论)

    抖音怎么批量删除视频(抖音怎么批量删除自己的评论)

  • cpu水冷两个插头插哪里(cpu水冷头接哪个供电)

    cpu水冷两个插头插哪里(cpu水冷头接哪个供电)

  • 苹果x换过屏幕人脸识别还能用吗(苹果x换过屏幕能卖多少钱)

    苹果x换过屏幕人脸识别还能用吗(苹果x换过屏幕能卖多少钱)

  • 华为p30pro自带的膜要撕掉吗(华为p30pro自带的耳机是什么型号)

    华为p30pro自带的膜要撕掉吗(华为p30pro自带的耳机是什么型号)

  • 电脑强制关机快捷键(电脑强制关机快捷键对电脑有损害吗)

    电脑强制关机快捷键(电脑强制关机快捷键对电脑有损害吗)

  • designed by oppo什么型号(designedbyoppo什么型号价格图片)

    designed by oppo什么型号(designedbyoppo什么型号价格图片)

  • 电脑上下载的软件怎么安装到桌面(电脑上下载的软件如何安装到桌面)

    电脑上下载的软件怎么安装到桌面(电脑上下载的软件如何安装到桌面)

  • 手机密码忘记了(手机密码忘记了不清除数据怎么解)

    手机密码忘记了(手机密码忘记了不清除数据怎么解)

  • 微信朋友圈双击头像抖动(微信朋友圈双击无法回到顶部)

    微信朋友圈双击头像抖动(微信朋友圈双击无法回到顶部)

  • 关于抖音企业号如何运营(抖音企业号的功能与作用)

    关于抖音企业号如何运营(抖音企业号的功能与作用)

  • 滴滴热力图不显示热区(滴滴热力图不显示热点)

    滴滴热力图不显示热区(滴滴热力图不显示热点)

  • gpplte卡贴怎么用(gpplte卡贴教程)

    gpplte卡贴怎么用(gpplte卡贴教程)

  • 一级上网题怎么做(一级上网题怎么做发邮件)

    一级上网题怎么做(一级上网题怎么做发邮件)

  • 华为p系列和nova系列区别(华为nova 7 pro)

    华为p系列和nova系列区别(华为nova 7 pro)

  • 美团津贴余额什么意思(美团上的津贴余额20元是什么意思)

    美团津贴余额什么意思(美团上的津贴余额20元是什么意思)

  • 快手颜值pk在哪里打开(快手颜值pk在哪看)

    快手颜值pk在哪里打开(快手颜值pk在哪看)

  • 美国宇航局新视野星际探测器拍摄的冥王星新月 (© NASA/JHUAPL/SWRI/Science Photo Library)(美国宇航局视频)

    美国宇航局新视野星际探测器拍摄的冥王星新月 (© NASA/JHUAPL/SWRI/Science Photo Library)(美国宇航局视频)

  • 利润表的调整
  • 出口货物不能退税的原因
  • 在建工程明细账采用什么账簿
  • 多余的实收资本可以转到其他应付款吗
  • 企业统计报表怎么写
  • 购车税叫什么
  • 事业单位之间调动需要多久
  • 红冲暂估原材料如何做会计分录
  • 月末在产品和产成品计算
  • 外聘人员需要扣个人所得税吗
  • 个体户到税务局开专票
  • 货运发票和提供建筑服务的专票备注怎么写?
  • 单位会计需要去税务局实名认证吗?
  • 小微企业免征增值税报表填写
  • 没给顾客发票需要罚款吗
  • 接受政府无偿划拨固定资产税务处理
  • 金融机构计提减值准备
  • 赔偿给客户的钱抵扣货款的会计分录
  • 应收账款坏账有什么措施改善
  • mac怎么访问路径
  • 为什么我的windows10
  • 小商业企业应交所得税
  • 往公户存钱怎么存最划算
  • PHP:mb_convert_case()的用法_mbstring函数
  • 经销商授权书是啥意思
  • php文件扩展名是什么
  • h5跳转h5
  • php floor()
  • 城市基础设施配套费计入什么科目
  • 增值税的类型主要有哪些
  • 利用的拼音
  • 在暴风雪中翻译
  • php生成csv文件
  • 开发成本结转开发产品条件
  • 个人咨询服务费怎么交税
  • custom用法
  • 购进商品的运费怎么算
  • 模型的内容
  • phpcms api
  • 怎么计算多个表格的某一数据
  • mysql优化总结
  • 织梦一直显示上一页和下一页
  • sql server2005使用方法
  • Mysql LONGTEXT 类型存储大文件(二进制也可以) (修改+调试+整理)
  • sqlserver修改数据库密码
  • 残疾人就业保证金上年工资总额是说上一年度么
  • 成本法和权益法的相同点
  • 公司法人往公司账户打钱怎么能换回来
  • 什么是保函保证金
  • 海关被税没有发票
  • 航天金税服务费280元每年都交吗
  • 高新技术企业取消资格的程序
  • 经营租赁的房屋计提折旧吗
  • 差旅费政策
  • 在计划管理中根据事实思考这一步的内容是
  • 职工体检费如何报销
  • 商品库存明细账
  • sql怎么遍历
  • mysql 非聚集索引
  • 简述Mysql Explain 命令
  • win7鼠标自己移动
  • centos怎么看硬盘
  • Usrshuta.exe - Usrshuta是什么进程
  • 苹果mac系统如何升级最新版本
  • explorer.exe进程出错
  • linux命令telnet
  • xp创建VPN连接图文教程
  • media.codec是什么软件
  • 在windows下搭建snort和base
  • 严格模式的作用
  • jquery的实现原理
  • 安卓开发 内存
  • js实现省份和市级联动
  • 江西税务局官网登录
  • 单位自有住房免增值税吗
  • 公司年会抽奖发言
  • 娱乐圈的收入高得离谱
  • 税务局风险防控工作总结
  • 电子发票查询官方
  • 内蒙古包头东河机场
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设