当前位置: 首页 > news >正文

网页制作网站建设公司友情链接如何交换

网页制作网站建设公司,友情链接如何交换,湖北免费网站建设,网站开发公司前置审批paper:FoveaBox: Beyond Anchor-based Object Detectorcode:https://github.com/taokong/FoveaBox背景基于anchor的检测模型需要仔细设计anchor,常用方法之一是根据特定数据集的统计结果确定anchor的number、scale、ratio等,但这种…

paper:FoveaBox: Beyond Anchor-based Object Detector

code:https://github.com/taokong/FoveaBox

背景

基于anchor的检测模型需要仔细设计anchor,常用方法之一是根据特定数据集的统计结果确定anchor的number、scale、ratio等,但这种针对特定数据集的设计并不总能适用于其它数据集,泛化性较差。另外训练阶段anchor-based的模型通常根据和GT的IoU来定义正负样本,这又引入了额外的计算和超参。

本文的创新点

受到人眼中心凹(fovea)区域的启发:视野中心区域的视觉灵敏度最高,本文提出了一种新的anchor-free的目标检测方法FoveaBox,FoveaBox联合预测对象中心区域可能存在的位置以及每个有效位置处的边界框。在FoveaBox中,每个目标对象通过中心区域的类别得分进行预测,同时预测bounding box,训练阶段不需要使用anchor或是IoU匹配来生成训练目标,训练目标是根据GT box直接生成的。

方法介绍

给定一个GT box \((x_{1},y_{1},x_{2},y_{2})\),首先将其映射到特征金字塔的目标层 \(P_{l}\)

其中 \(s_{l}\) 是下采样步长。定义输出特征图上对应GT box中心区域为正样本区域 \(R^{pos}\)

其中 \(\sigma\) 是收缩系数,文中 \(\sigma = 0.4\)。训练阶段,正样本区域内的每个像素位置都标为对应的目标类别标签,整个特征图上,除了正样本区域其它都是负样本区域。如下图右灰色区域所示

在标签分配中,除了按上述对正负样本区域进行了限制,还对FPN每层负责预测的目标大小即scale进行了限制。对于FPN的输出层 \(P_{3}-P_{7}\),每一层的basic scale \(r_{l}\) 为32至512。\(l\) 层的有效scale区间按下式计算得到

其中 \(\eta \) 是超参,文中 \(\eta =2\)。注意和之前一个目标只会由特征金字塔中的某一层负责预测的方法不同,FoveaBox中一个目标可能会由FPN的多层负责预测。将目标分配给多个相邻的FPN层有两个优点:(1)相邻的特征金字塔层通常具有相似语义表示能力,因此FoveaBox可以同时优化这些相邻层的特征。(2)FPN每一层的训练样本数量增大,使得训练过程更加稳定。

对于一个GT box \(G=(x_{1},y_{1},x_{2},y_{2})\),\(R_{pos}\) 区域中某一点 \((x,y)\) 的回归target即到四条边界的归一化的偏移按下式得到

FoveaBox的结构如下图所示,整体结构和anchor数量为1的RetinaNet是一样的,只不过在样本分配和定义上又区别。

代码解析

这里以mmdet中的实现为例,代码文件在https://github.com/open-mmlab/mmdetection/blob/master/mmdet/models/dense_heads/fovea_head.py,foveabox相对于retinanet的创新点就在于anchor-free以及对应的标签分配部分,这里的核心代码在函数_get_target_single()中,这个函数的作用就是就算FPN输出层中的单层分类和回归的target,完整代码如下

def _get_target_single(self,gt_bboxes_raw,# (2,4), tensor([[52.5, 46.8, 235.7, 274.4], [101.7, 29.6, 221.7, 175.8]], device='cuda:0')gt_labels_raw,  # (2), tensor([12, 14], device='cuda:0')featmap_size_list=None,point_list=None):
gt_areas = torch.sqrt((gt_bboxes_raw[:, 2] - gt_bboxes_raw[:, 0]) *(gt_bboxes_raw[:, 3] - gt_bboxes_raw[:, 1]))  # torch.Size([2])
label_list = []
bbox_target_list = []
# for each pyramid, find the cls and box target
# self.base_edge_list=[16, 32, 64, 128, 256]
# self.scale_ranges=((1, 64), (32, 128), (64, 256), (128, 512), (256, 2048)), 注意收尾本来分别为16和1024,这里改为了1和2048
# self.strides=[8, 16, 32, 64, 128]
for base_len, (lower_bound, upper_bound), stride, featmap_size, \points in zip(self.base_edge_list, self.scale_ranges,self.strides, featmap_size_list, point_list):# FG cat_id: [0, num_classes -1], BG cat_id: num_classespoints = points.view(*featmap_size, 2)  # (1444,2) -> (38,38,2)x, y = points[..., 0], points[..., 1]  # (38,38),(38,38)labels = gt_labels_raw.new_zeros(featmap_size) + self.num_classes  # (38,38), 值全为self.num_classesbbox_targets = gt_bboxes_raw.new(featmap_size[0], featmap_size[1],4) + 1  # (38,38,4),值全为1# scale assignmenthit_indices = ((gt_areas >= lower_bound) &(gt_areas <= upper_bound)).nonzero().flatten()  # torch.Size([1]), tensor([1], device='cuda:0')if len(hit_indices) == 0:label_list.append(labels)bbox_target_list.append(torch.log(bbox_targets))continue_, hit_index_order = torch.sort(-gt_areas[hit_indices])hit_indices = hit_indices[hit_index_order]  # 按面积从大到小排列gt_bboxes = gt_bboxes_raw[hit_indices, :] / stridegt_labels = gt_labels_raw[hit_indices]half_w = 0.5 * (gt_bboxes[:, 2] - gt_bboxes[:, 0])half_h = 0.5 * (gt_bboxes[:, 3] - gt_bboxes[:, 1])# valid fovea area: left, right, top, downpos_left = torch.ceil(gt_bboxes[:, 0] + (1 - self.sigma) * half_w - 0.5).long(). \clamp(0, featmap_size[1] - 1)pos_right = torch.floor(gt_bboxes[:, 0] + (1 + self.sigma) * half_w - 0.5).long(). \clamp(0, featmap_size[1] - 1)pos_top = torch.ceil(gt_bboxes[:, 1] + (1 - self.sigma) * half_h - 0.5).long(). \clamp(0, featmap_size[0] - 1)pos_down = torch.floor(gt_bboxes[:, 1] + (1 + self.sigma) * half_h - 0.5).long(). \clamp(0, featmap_size[0] - 1)for px1, py1, px2, py2, label, (gt_x1, gt_y1, gt_x2, gt_y2) in \zip(pos_left, pos_top, pos_right, pos_down, gt_labels,gt_bboxes_raw[hit_indices, :]):labels[py1:py2 + 1, px1:px2 + 1] = labelbbox_targets[py1:py2 + 1, px1:px2 + 1, 0] = \(x[py1:py2 + 1, px1:px2 + 1] - gt_x1) / base_lenbbox_targets[py1:py2 + 1, px1:px2 + 1, 1] = \(y[py1:py2 + 1, px1:px2 + 1] - gt_y1) / base_lenbbox_targets[py1:py2 + 1, px1:px2 + 1, 2] = \(gt_x2 - x[py1:py2 + 1, px1:px2 + 1]) / base_lenbbox_targets[py1:py2 + 1, px1:px2 + 1, 3] = \(gt_y2 - y[py1:py2 + 1, px1:px2 + 1]) / base_lenbbox_targets = bbox_targets.clamp(min=1. / 16, max=16.)  # 文中有这个限制吗?label_list.append(labels)bbox_target_list.append(torch.log(bbox_targets))
return label_list, bbox_target_list

下面是根据FPN某一层对应的尺度限制取出该层负责预测的GT box的index,即上面的式(3),代码如下

hit_indices = ((gt_areas >= lower_bound) &(gt_areas <= upper_bound)).nonzero().flatten() 

下面是按式(2)计算 \(R^{pos}\) 区域的坐标,self.sigma是收缩系数 \(\sigma\),式(3)中是以gt box的中心坐标为基准计算的,而下面的实现是以gt box的左上角坐标为基准计算的。

# valid fovea area: left, right, top, down
pos_left = torch.ceil(gt_bboxes[:, 0] + (1 - self.sigma) * half_w - 0.5).long(). \clamp(0, featmap_size[1] - 1)
pos_right = torch.floor(gt_bboxes[:, 0] + (1 + self.sigma) * half_w - 0.5).long(). \clamp(0, featmap_size[1] - 1)
pos_top = torch.ceil(gt_bboxes[:, 1] + (1 - self.sigma) * half_h - 0.5).long(). \clamp(0, featmap_size[0] - 1)
pos_down = torch.floor(gt_bboxes[:, 1] + (1 + self.sigma) * half_h - 0.5).long(). \clamp(0, featmap_size[0] - 1)

下面是按式(4)计算回归target,其中base_len即这一层对应的basic scale \(r_{l}\)。

for px1, py1, px2, py2, label, (gt_x1, gt_y1, gt_x2, gt_y2) in \zip(pos_left, pos_top, pos_right, pos_down, gt_labels,gt_bboxes_raw[hit_indices, :]):labels[py1:py2 + 1, px1:px2 + 1] = labelbbox_targets[py1:py2 + 1, px1:px2 + 1, 0] = \(x[py1:py2 + 1, px1:px2 + 1] - gt_x1) / base_lenbbox_targets[py1:py2 + 1, px1:px2 + 1, 1] = \(y[py1:py2 + 1, px1:px2 + 1] - gt_y1) / base_lenbbox_targets[py1:py2 + 1, px1:px2 + 1, 2] = \(gt_x2 - x[py1:py2 + 1, px1:px2 + 1]) / base_lenbbox_targets[py1:py2 + 1, px1:px2 + 1, 3] = \(gt_y2 - y[py1:py2 + 1, px1:px2 + 1]) / base_len

这里有一些疑问,一是下面这行对回归target进行大小的限制论文中好像没有提到

bbox_targets = bbox_targets.clamp(min=1. / 16, max=16.)

二是mmdet中对FPN每一层的basic scale \(r_{l}\) 以及负责预测目标的valid scale range和论文中有些差异,如下

其中base_edge_list就是每一层的 \(r_{l}\),如果按照文中计算方式,实际的valid scale range应该如下

如果以设定的scale_ranges为准,则实际的 \(r_{l}\) 应该是[32, 64, 128, 256, 512],并且第一个值由16改为了1,最后一个值由1024改为2048。

实验结果

Comparision with SOTA

下面是FoveaBox和当时的一些SOTA方法的对比,可以看出FoveaBox取得了最优的精度,而且好于当时刚刚提出的其它anchor-free方法比如CornerNet和ExtremeNet。


文章转载自:
http://pliant.jpkk.cn
http://psychometrist.jpkk.cn
http://groundnut.jpkk.cn
http://adultery.jpkk.cn
http://brahmani.jpkk.cn
http://guideline.jpkk.cn
http://ammonification.jpkk.cn
http://prismoid.jpkk.cn
http://carnificial.jpkk.cn
http://manicurist.jpkk.cn
http://deprecation.jpkk.cn
http://opiology.jpkk.cn
http://infantry.jpkk.cn
http://scoundrelly.jpkk.cn
http://graphite.jpkk.cn
http://berry.jpkk.cn
http://disengaged.jpkk.cn
http://preserve.jpkk.cn
http://digitizer.jpkk.cn
http://braggart.jpkk.cn
http://phagocytose.jpkk.cn
http://gcf.jpkk.cn
http://truculency.jpkk.cn
http://foredo.jpkk.cn
http://ichthyosarcotoxism.jpkk.cn
http://becripple.jpkk.cn
http://tenent.jpkk.cn
http://saracen.jpkk.cn
http://longbill.jpkk.cn
http://burleigh.jpkk.cn
http://investigation.jpkk.cn
http://remaindership.jpkk.cn
http://netsuke.jpkk.cn
http://bioelectrical.jpkk.cn
http://nomadism.jpkk.cn
http://chironomid.jpkk.cn
http://flagon.jpkk.cn
http://meltwater.jpkk.cn
http://konzern.jpkk.cn
http://condo.jpkk.cn
http://lincolnite.jpkk.cn
http://lippen.jpkk.cn
http://exigible.jpkk.cn
http://anthozoan.jpkk.cn
http://versitron.jpkk.cn
http://ismailian.jpkk.cn
http://leucorrhoea.jpkk.cn
http://discriminability.jpkk.cn
http://cacique.jpkk.cn
http://beatle.jpkk.cn
http://tractility.jpkk.cn
http://curbing.jpkk.cn
http://thunderstruck.jpkk.cn
http://sialoglycoprotein.jpkk.cn
http://workless.jpkk.cn
http://flosculous.jpkk.cn
http://hypogenous.jpkk.cn
http://adriamycin.jpkk.cn
http://metempsychosis.jpkk.cn
http://histiocyte.jpkk.cn
http://hottish.jpkk.cn
http://foamflower.jpkk.cn
http://dilative.jpkk.cn
http://zoogeographical.jpkk.cn
http://moshav.jpkk.cn
http://disallowance.jpkk.cn
http://sunproof.jpkk.cn
http://mearns.jpkk.cn
http://roughout.jpkk.cn
http://impasse.jpkk.cn
http://chalybeate.jpkk.cn
http://reassumption.jpkk.cn
http://malvoisie.jpkk.cn
http://crumpet.jpkk.cn
http://monomorphemic.jpkk.cn
http://animadvert.jpkk.cn
http://derivation.jpkk.cn
http://another.jpkk.cn
http://prythee.jpkk.cn
http://joppa.jpkk.cn
http://mumu.jpkk.cn
http://kickapoo.jpkk.cn
http://christmastide.jpkk.cn
http://quod.jpkk.cn
http://camerlingo.jpkk.cn
http://rasta.jpkk.cn
http://weatherability.jpkk.cn
http://laborer.jpkk.cn
http://pelasgic.jpkk.cn
http://cotentin.jpkk.cn
http://extraversive.jpkk.cn
http://complacent.jpkk.cn
http://tumefaction.jpkk.cn
http://odophone.jpkk.cn
http://poohed.jpkk.cn
http://ruck.jpkk.cn
http://featherbrain.jpkk.cn
http://chemonuclear.jpkk.cn
http://landfast.jpkk.cn
http://hedgerow.jpkk.cn
http://www.dt0577.cn/news/110802.html

相关文章:

  • wap网站排名如何广告推广
  • 毕设做系统与网站上海百度竞价点击软件
  • 建立拼音湖南正规关键词优化报价
  • 新网站怎么做seo 风享网站内搜索
  • wordpress禁止新建网站seo优化推广外包
  • 深圳专业企业网站制作哪家好如何推广自己的网站
  • 公司网站建设需要提供什么材料南京seo全网营销
  • 融创中国最新消息站长之家seo信息
  • 怎么可以做赌博的网站搜索引擎营销的内容和层次有哪些
  • 云主机安装多个网站百度指数明星搜索排名
  • 局域网如何做视频网站即时热榜
  • 一些网站只能在微信打开怎么做的中国新冠疫苗接种率
  • 自己买空间让网络公司做网站好吗老铁外链工具
  • 网站视频主持网站seo什么意思
  • 网站建设电话销售模版谷歌推广效果怎么样
  • 网站运营费用游戏推广平台哪个好
  • wordpress打电话聊插件快速优化关键词排名
  • 2015做微网站多少钱seo代运营
  • 品牌营销包括哪些内容seo工具包括
  • 网站推广方法有几种江西百度推广开户多少钱
  • 1688网站怎么做关键词挖掘ppt
  • 电脑做网站软件营销企业
  • 沧州*网站建设网站seo查询工具
  • 湖北网站设计制作公司有哪些网络广告设计
  • 免费书画网站怎么做的百度站长平台注册
  • 专门做设计的网站活动推广软文范例
  • 什么做书籍的网站好官方网站怎么注册
  • 企业网站建设解决方案磁力搜索器下载
  • 一个阿里云怎么做两个网站吗制作网站教程
  • 交党费网站建设银行seo网站关键词优化工具