anchor_anchors - CSDN
anchor 订阅
安佳,全球知名乳制品品牌。1886年诞生于新西兰,产品热销全球70多个国家和地区,深受万千消费者的青睐。 展开全文
安佳,全球知名乳制品品牌。1886年诞生于新西兰,产品热销全球70多个国家和地区,深受万千消费者的青睐。
信息
所属公司
新西兰恒天然集团
所属行业
乳品
中文名称
安佳
创立时间
1886年
创立地点
新西兰
英文名称
Anchor
安佳品牌介绍
安佳 [1-2]  隶属于恒天然集团,拥有130多年的悠久历史,是恒天然旗下的旗舰品牌。 恒天然牧场和工厂都建在纯净天然的新西兰,通过严格掌控“从牧场到餐桌”供应链的每一步,确保进口到中国的产品质量符合中国食品安全国家标准,让源于牛奶的营养菁华滋养每个家庭的健康生活。在上百年的发展历程中,安佳一直致力产品革新与开发,现在已经成长为一个全球性品牌。通过遍布世界的销售网络,如今安佳在全球生产和销售500多种不同的产品。多年以来,安佳始终致力于研发及生产各种高品质的乳制品以满足大众和专业市场的需求,其业务覆盖消费品牌以及餐饮服务等多个领域。在消费品牌方面,安佳纯牛奶、儿童牛奶、奶粉,以及黄油、淡奶油、芝士等产品帮助满足全家人对于每日营养的需要;在餐饮服务方面,安佳品牌为烘焙店、餐厅、酒店和快餐店提供黄油、淡奶油、芝士等高品质乳制品和餐饮解决方案。 [2] 
收起全文
精华内容
参与话题
  • 目标检测之anchor

    千次阅读 2019-06-13 19:54:53
    目标检测中长出现的anchor,表示固定的参考框。 anchor技术: 将问题转换为“这个参考框中有没有认识的目标,目标偏离参考框多远” 首先预设一组不同尺度,不同位置的固定参考框,覆盖几乎所有位置和尺度 每个参考框...

    目标检测中长出现的anchor,表示固定的参考框。

    anchor技术:
    将问题转换为“这个参考框中有没有认识的目标,目标偏离参考框多远”
    首先预设一组不同尺度,不同位置的固定参考框,覆盖几乎所有位置和尺度
    每个参考框负责检测,与其交并比大于阈值(训练预设值,常用0.5或0.7)的目标

    计算每个像素256-d的9个尺度下的值,得到9个anchor,
    我们给每个anchor分配一个二进制的标签(前景背景)。
    我们分配正标签前景给两类anchor:
    1)与某个ground truth(GT)包围盒有最高的IoU重叠的anchor(也许不到0.7)
    2)与任意GT包围盒有大于0.7的IoU交叠的anchor。注意到一个GT包围盒可能分配正标签给多个anchor。
    我们**分配负标签(背景)**给与所有GT包围盒的IoU比率都低于0.3的anchor。
    非正非负的anchor对训练目标没有任何作用,由此输出维度为(2*9)18,一共18维。

    假设在conv5 feature map中每个点上有k个anchor(默认k=9),而每个anhcor要分foreground和background,
    所以每个点由256-d feature转化为cls=2k scores;而每个anchor都有[x, y, w, h]对应4个偏移量,所以reg=4k coordinates

    补充,全部anchors拿去训练太多了,训练程序会在合适的anchors中随机选取128个postive anchors+128个negative anchors进行训练。

    Anchor设计总结
    设计目标检测算法时,anchor设置应该考虑一下几个方面 (以RetinaNet为例):

    (1)anchor的密度:由检测所用feature map的stride决定,这个值与前景阈值密切相关,如同样检测{32}尺度,FPN阈值0.7用P2,RetinaNet前景阈值0.5用P3。

    (2)anchor的范围:RetinaNet中是anchor范围是32~512,这里应根据任务检测目标的范围确定,按需调整anchor范围,或目标变化范围太大如MS COCO,这时候应采用多尺度测试,当然,实际应用中需考虑多尺度测试的复杂度问题。

    (3)anchor的形状数量:RetinaNet每个位置预测三尺度三比例共9个形状的anchor,这样可以增加anchor的密度,但stride决定这些形状都是同样的滑窗步进,需考虑步进会不会太大,如RetinaNet框架前景阈值是0.5时,一般anchor大小是stride的4倍左右。

    (4)检测层Pn的数量:RetinaNet中是P3~P7共5个检测层,如需检测更小的目标,可以考虑加入P2检测层。

    (5)检测层Pn的感受野:前面计算了RetinaNet中是ResNet+FPN的感受野在检测中、大目标时都是够用的,检测小目标时略显疲乏,kaiming最新论文《Rethinking ImageNet Pre-training》既然告诉我们预训练模型没那么重要时,那检测任务就可以着重考虑按照感受野的需求设计ConvNet。
    总之,要做到anchor以足够密度实现全覆盖。

    参考:https://blog.csdn.net/qq_36269513/article/details/80421990
    https://zhuanlan.zhihu.com/p/55824651

    展开全文
  • 怎么理解anchor

    万次阅读 多人点赞 2018-07-26 21:29:14
    首先我们需要知道anchor的本质是什么,本质是SPP(spatial pyramid pooling)思想的逆向。而SPP本身是做什么的呢,就是将不同尺寸的输入resize成为相同尺寸的输出。所以SPP的逆向就是,将相同尺寸的输出,倒推得到不同...

    首先我们需要知道anchor的本质是什么,本质是SPP(spatial pyramid pooling)思想的逆向。而SPP本身是做什么的呢,就是将不同尺寸的输入resize成为相同尺寸的输出。所以SPP的逆向就是,将相同尺寸的输出,倒推得到不同尺寸的输入。

    接下来是anchor的窗口尺寸,这个不难理解,三个面积尺寸(128^2,256^2,512^2),然后在每个面积尺寸下,取三种不同的长宽比例(1:1,1:2,2:1).这样一来,我们得到了一共9种面积尺寸各异的anchor。示意图如下:

    至于这个anchor到底是怎么用的,这个是理解整个问题的关键。

    下面是整个faster RCNN结构的示意图:

     

    利用anchor是从第二列这个位置开始进行处理,这个时候,原始图片已经经过一系列卷积层和池化层以及relu,得到了这里的 feature:51x39x256(256是层数)

    在这个特征参数的基础上,通过一个3x3的滑动窗口,在这个51x39的区域上进行滑动,stride=1,padding=2,这样一来,滑动得到的就是51x39个3x3的窗口。

    对于每个3x3的窗口,作者就计算这个滑动窗口的中心点所对应的原始图片的中心点。然后作者假定,这个3x3窗口,是从原始图片上通过SPP池化得到的,而这个池化的区域的面积以及比例,就是一个个的anchor。换句话说,对于每个3x3窗口,作者假定它来自9种不同原始区域的池化,但是这些池化在原始图片中的中心点,都完全一样。这个中心点,就是刚才提到的,3x3窗口中心点所对应的原始图片中的中心点。如此一来,在每个窗口位置,我们都可以根据9个不同长宽比例、不同面积的anchor,逆向推导出它所对应的原始图片中的一个区域,这个区域的尺寸以及坐标,都是已知的。而这个区域,就是我们想要的 proposal。所以我们通过滑动窗口和anchor,成功得到了 51x39x9 个原始图片的proposal。接下来,每个proposal我们只输出6个参数:每个 proposal 和 ground truth 进行比较得到的前景概率和背景概率(2个参数)(对应图上的 cls_score);由于每个 proposal 和 ground truth 位置及尺寸上的差异,从 proposal 通过平移放缩得到 ground truth 需要的4个平移放缩参数(对应图上的 bbox_pred)。

    所以根据我们刚才的计算,我们一共得到了多少个anchor box呢?

    51 x 39 x 9 = 17900

    约等于 20 k

    bingo!

    https://www.zhihu.com/question/42205480/answer/155759667

     

     

     

     

    作者:冯建兴
    链接:https://www.zhihu.com/question/42205480/answer/206500260
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
     

    这篇文章的核心就是通过网络计算region proposal,也就是要通过feature map去拟合每个对象的bounding box的4个参数。

    1. 最直接的办法是:对于feature map上的每个window,如果里面有某个真实的对象,那么就用这个window的feature作为特征拟合这个对象的bounding box的4个参数。这样做至少有两个问题:
      1. 第一个问题:如果window里面有多个不同大小的对象怎么办?这个问题貌似不好解决。
      2. 第二个问题:如何调整scale?假设用L2(文章不是用的L2,但是基本意思一样),如果是一个大的对象,我们可以允许L2比较大,如果是小对象L2应该比较小才可以。这个问题其实比较好解决,用对象的大小作为分母对L2做归一化处理即可。
    2. 对上述两个问题(特别是第一个问题)作者的解决办法就是Anchor。
      1. 预先定义好不同大小,不同长宽比例的一些box(Anchor)。文中一共定义了9种。每个feature map上的window都对应9个这样的anchor。
      2. 可以想象,原始图像上的任意一个对象的bounding box都能在Feature map上找到某个window的某个anchor,使得二者在位置和大小上都能比较好的匹配。
      3. 如果一个window里面有多个大小不同的对象,那么就对应于这个window的不同的anchor。这就解决了第一个问题。
      4. 拟合的时候,欧式误差都用anchor的大小做scaling,从而解决了第二个问题。注意文章中方程(2),里面在计算box的中心位置的误差的时候实际上只有w_a和h_a起作用(Anchor的长宽被用来做了scaling),x_a和y_a(Anchor的中心)会被cancel掉,是没有作用的。在计算box的大小的时候,Anchor的参数没有任何作用,全都被cancel掉了。

    首先我们先确定一点就是proposals是候选框的意思,就是RPN的输出;然后这张图是整个RPN的流程,其中sliding window,虽然叫sliding window,但是其实真实的操作却是一次3x3的卷积操作,得到一个256xHxW的特征图,也就是HxW个256维向量;而Anchor并不存在于这张图中,Anchor是在原图上的,HxW个256维向量,映射回原图就有HxW个Anchor,然后以每个Anchor为中心“瞎编”一堆框,论文中是9个框;

    论文:《Faster R-CNN: Towards Real-Time ObjectDetection with Region Proposal Networks》

    摘要:算法主要解决两个问题:

    1、提出区域建议网络RPN,快速生成候选区域;

    2、通过交替训练,使RPN和Fast-RCNN网络共享参数。

     

    一、 RPN网络结构

    RPN网络的作用是输入一张图像,输出一批矩形候选区域,类似于以往目标检测中的Selective Search一步。网络结构是基于卷积神经网络,但输出包含二类softmax和bbox回归的多任务模型。网络结果如下(以ZF网络为参考模型):

     

    其中,虚线以上是ZF网络最后一层卷积层前的结构,虚线以下是RPN网络特有的结构。首先是3*3的卷积,然后通过1*1卷积输出分为两路,其中一路输出是目标和非目标的概率,另一路输出box相关的四个参数,包括box的中心坐标x和y,box宽w和长h。

    (至于之前为什么要用3*3的卷积核,我觉得是和感受野大小相对应的。在原来的ZF模型中,3*3卷积核对应map比例是3/13,相当于在型如1000*600的图片中采用180左右的感受野。对于1000*600的图片中大部分目标而言,这个大小的感受野是比较合适的吧。)

    从卷积运算本身而言,卷积相当于滑窗。假如输入图像是1000*600,则经过了几次stride后,map大小缩小了16倍,最后一层卷积层输出大约为60*40大小,那么相当于用3*3的窗口滑窗(注意有padding),对于左边一支路而言,输出18个通道,每个通道map大小仍为60*40,代表每个滑窗中心对应感受野内存在目标与否的概率。右支路同理。

    二、 anchor机制

    anchor是rpn网络的核心。刚刚说到,需要确定每个滑窗中心对应感受野内存在目标与否。由于目标大小和长宽比例不一,需要多个尺度的窗。Anchor即给出一个基准窗大小,按照倍数和长宽比例得到不同大小的窗。例如论文中基准窗大小为16,给了(8、16、32)三种倍数和(0.5、1、2)三种比例,这样能够得到一共9种尺度的anchor,如图(摘自http://blog.csdn.net/shenxiaolu1984/article/details/51152614)。

     

    因此,在对60*40的map进行滑窗时,以中心像素为基点构造9种anchor映射到原来的1000*600图像中,映射比例为16倍。那么总共可以得到60*40*9大约2万个anchor。

    三、 训练

    RPN网络训练,那么就涉及ground truth和loss function的问题。对于左支路,ground truth为anchor是否为目标,用0/1表示。那么怎么判定一个anchor内是否有目标呢?论文中采用了这样的规则:1)假如某anchor与任一目标区域的IoU最大,则该anchor判定为有目标;2)假如某anchor与任一目标区域的IoU>0.7,则判定为有目标;3)假如某anchor与任一目标区域的IoU<0.3,则判定为背景。所谓IoU,就是预测box和真实box的覆盖率,其值等于两个box的交集除以两个box的并集。其它的anchor不参与训练。

    于是,代价函数定义为:

     

    代价函数分为两部分,对应着RPN两条支路,即目标与否的分类误差和bbox的回归误差,其中Leg(ti,ti*) = R(ti-ti*)采用在Fast-RCNN中提出的平滑L1函数,作者认为其比L2形式的误差更容易调节学习率。注意到回归误差中Leg与pi相乘,因此bbox回归只对包含目标的anchor计算误差。也就是说,如果anchor不包含目标,box输出位置无所谓。所以对于bbox的groundtruth,只考虑判定为有目标的anchor,并将其标注的坐标作为ground truth。此外,计算bbox误差时,不是比较四个角的坐标,而是tx,ty,tw,th,具体计算如下:

     

    四、 联合训练

    作者采用四步训练法:

    1) 单独训练RPN网络,网络参数由预训练模型载入;

    2) 单独训练Fast-RCNN网络,将第一步RPN的输出候选区域作为检测网络的输入。具体而言,RPN输出一个候选框,通过候选框截取原图像,并将截取后的图像通过几次conv-pool,然后再通过roi-pooling和fc再输出两条支路,一条是目标分类softmax,另一条是bbox回归。截止到现在,两个网络并没有共享参数,只是分开训练了;

    3) 再次训练RPN,此时固定网络公共部分的参数,只更新RPN独有部分的参数;

    4) 那RPN的结果再次微调Fast-RCNN网络,固定网络公共部分的参数,只更新Fast-RCNN独有部分的参数。

    至此,网络训练结束,网络集检测-识别于一体,测试阶段流程图如下:

     

     

     

    有一些实现细节,比如RPN网络得到的大约2万个anchor不是都直接给Fast-RCNN,因为有很多重叠的框。文章通过非极大值抑制的方法,设定IoU为0.7的阈值,即仅保留覆盖率不超过0.7的局部最大分数的box(粗筛)。最后留下大约2000个anchor,然后再取前N个box(比如300个)给Fast-RCNN。Fast-RCNN将输出300个判定类别及其box,对类别分数采用阈值为0.3的非极大值抑制(精筛),并仅取分数大于某个分数的目标结果(比如,只取分数60分以上的结果)。

     

    展开全文
  • 近期好多同学都在纠结Anchor的设置,而且部分同学私信,可不可以把这个基础知识详细说一次,今天就单独开一次小课,一起来学习Faster R-CNN中的RPN及Ancho...
        

    640?wx_fmt=jpeg

    近期好多同学都在纠结Anchor的设置,而且部分同学私信,可不可以把这个基础知识详细说一次,今天就单独开一次小课,一起来学习Faster R-CNN中的RPN及Anchor。

    640?wx_fmt=png

    说到RPN和Anchor,应该立马就能想到Faster R-CNN网络框架,这个我平台在之前就有详细的介绍过。

    往期回顾


    ● 深度学习近期总结分析






    有兴趣的可以点击进入看看,当作复习一下。首先我先将几类经典的目标检测网络做一个对比,然后开始说说今天要讲的知识。

    最开始出现的是R-CNN,如下图:

    640?wx_fmt=png

    从上图可以看出其框架做了很多重复的计算,在第二步之后,如果有2k个proposals,那后面就要执行2k边,太低效。于是,出现了改进的SSP-Net,如下图:

    640?wx_fmt=png

    SSP-Ne框架组合了Classification和Regression,做成单个网络,并且可以Een-to-End进行训练,速度上提高许多。但是,SSP-Net还是基于Selective Search产生proposal,之后就出现了Fast R-CNN,其是融合了R-CNN和SPP-Net的创新,并且引入多任务损失函数,使整个网络的训练和测试变得十分方便。

    但是Region proposal的提取还是使用了Selective Search,目标检测时间大多消耗在这上面(大约region proposal需2~3s,而提特征分类只需0.32s),这种是无法满足实时应用,而且并没有实现真正意义上的端到端训练测试(因为region proposal使用了Selective Search先提取处来)。

    于是就有了直接使用CNN产生region proposal并对其分类,这就是Faster R-CNN框架,如下图:

    640?wx_fmt=png

    Faster R-CNN将proposals交给了CNN去生成,这样Region Proposal Network(RPN)应运而生。

    Faster R-CNN

    仔细看看Faster R-CNN框架,其实还保留了Fast R-CNN的框架,其主要就是CNN+RPN。其中RPN主要就是负责生成proposals,然后与最后一层的feature map一起使用,用ROI Pooling生成固定长度的feature vector。具体如下:

    640?wx_fmt=png

    那接下来开始好好的说一下RPN和Anchor!下图是我从网络copy过来的,应该更加能理解整体的流程及内容。

    640?wx_fmt=jpeg

    在上图中,红色的3x3红框是其中一个滑窗的操作过程,注意这里的Anchor是原图像像素空间中的,而不是feature map上的。这样的话,就可以很好去知道Anchor的意思,而且Anchor对于RPN非常重要。

    现在,我们假设现在的feature map尺寸为W x H x C(13x13x256就是feature map的Width=13,Height=13和Channel=256),在feature map使用滑动窗口的操作方式,当前滑窗的中心在原像素空间的映射点就称为Anchor,并且以Anchor为中心去生成K(paper中default K=9,3个尺寸和3个缩放比例)个proposals。

    640?wx_fmt=png

    在feature map上滑动一次,得到一个小网络,该网络输入是3x3x256,经过3x3x256x256的卷积,就可以得到1x1x256的低维特征向量。

    然后就得到上图的两个分支。

    • Classification:经过1x1x256x18的卷积核,得到1x1x18的特征向量,分别代表9个proposals的Object的概率(是或不是);

    • Regression:经过1x1x256x36的卷积核,得到1x1x36的特征向量,分别代表9个proposals的(长宽及中心点坐标)。

    注意,上面只是一个小网络,也就是一个3x3滑窗的过程及结果,在网络整体运行的过程中,要将整个feature map都要滑动一遍,最终就会得到两个损失函数:

    640?wx_fmt=jpeg

    其中就是Classification(Lcls)和Regression(Lreg)两个损失。对于边界框的回归,其是采用以下4个坐标的参数化:

    640?wx_fmt=jpeg

    综上,通过滑窗和Anchor机制就可以找到固定比例、一定大小的proposals,这样RPN就可以完美替代低效的Selective Search去产生proposals。

    640?wx_fmt=png

    最终,在目标检测领域中,这个框架算是一个里程碑,值得大家学习与深入探索。最后的检测结果也是不错的。

    640?wx_fmt=gif

    如果想加入我们“计算机视觉战队”,请扫二维码加入学习群。计算机视觉战队主要涉及机器学习、深度学习等领域,由来自于各校的硕博研究生组成的团队,主要致力于人脸检测、人脸识别,多目标检测、目标跟踪、图像分割等研究方向。

    640?wx_fmt=jpeg

    如果觉得不错,请帮忙点一个好看,感谢对我工作的认可,谢谢!
    展开全文
  • 深入理解anchor

    千次阅读 2020-01-22 10:00:31
    主要研究了anchor大小的设置以及提出了MTCNN中的anchor机制

    在博客SSD原理解读-从入门到精通中提到了anchor作用:通过anchor设置每一层实际响应的区域,使得某一层对特定大小的目标响应。很多人肯定有这么一个疑问:那anchor到底可以设置到多大呢?,本文尝试对anchor的大小进行了一系列的探索,同时借鉴了SSD的anchor机制,提出了MTCNN中的anchor机制,能够显著提高MTCNN的精度。



    理论感受野大小的计算

    由于本文在讨论anchor大小的时候,都是与理论感受野大小相关的,这里有必要说一下理论感受野大小的计算。关于理论感受野大小的计算,有一篇很好的文章:A guide to receptive field arithmetic for Convolutional Neural Networks,国内也有这篇文章的翻译,在网上都可以找到。关于这篇文章就不展开说了。这里直接给出我用的计算感受野大小的python代码,直接修改网络参数就可以计算理论感受野大小,非常方便。

    def outFromIn(isz, net, layernum):
        totstride = 1
        insize = isz
        for layer in range(layernum):
            fsize, stride, pad = net[layer]
            outsize = (insize - fsize + 2*pad) / stride + 1
            insize = outsize
            totstride = totstride * stride
        return outsize, totstride
    
    def inFromOut(net, layernum):
        RF = 1
        for layer in reversed(range(layernum)):
            fsize, stride, pad = net[layer]
            RF = ((RF -1)* stride) + fsize
        return RF
    
    # 计算感受野和步长,[11,4,0]:[卷积核大小,步长,pad]
    def ComputeReceptiveFieldAndStride():
        net_struct = {'PNet': {'net':[[3,2,0],[2,2,0],[3,1,0],[3,2,0],[1,1,0]],'name':['conv1','pool1','conv2','conv3','conv4-3']}}
        imsize = 512
        print ("layer output sizes given image = %dx%d" % (imsize, imsize))
        for net in net_struct.keys():
                print ('************net structrue name is %s**************'% net)
                for i in range(len(net_struct[net]['net'])):
                    p = outFromIn(imsize,net_struct[net]['net'], i+1)
                    rf = inFromOut(net_struct[net]['net'], i+1)
                    print ("Layer Name = %s, Output size = %3d, Stride = %3d, RF size = %3d" % (net_struct[net]['name'][i], p[0], p[1], rf))
    

    运行结果如下
    在这里插入图片描述
    除了通过公式计算,还有一种更加方便的可以用于手工计算的方式。这里给出几条规则:

    1. 初始featuremap层的感受野是1
    2. 每经过一个convkxk s1(卷积核大小为k,步长为1)的卷积层,感受野 r = r+ (k - 1),常用k=3感受野 r = r + 2,k=5感受野r= r + 4
    3. 每经过一个convkxk s2的卷积层或max/avg pooling层,感受野 r = (r x 2) + (k -2),常用卷积核k=3, s=2,感受野 r = r x 2 + 1,卷积核k=7, s=2, 感受野r = r x 2 + 5
    4. 每经过一个maxpool2x2 s2的max/avg pooling下采样层,感受野 r = r x 2
    5. 经过conv1x1 s1,ReLU,BN,dropout等元素级操作不会改变感受野
    6. 经过FC层和GAP层,感受野就是整个输入图像
    7. 全局步长等于经过所有层的步长累乘

    具体在计算的时候,采用bottom-up的方式。
    要计算哪一层的感受野,就将该层的输出设置为1,然后依次向前计算,比如下图中的网络结构中,要计算pool3的感受野,将pool3的输出设置为1,就可以得到conv1的输入大小为30x30,也就是P3的感受野大小为30。
    在这里插入图片描述
    按照这个算法,我们可以算出SSD300中conv4-3的理论感受野:
    r =(((1 +2 +2+2+2 )x2 +2+2+2 )x2 +2+2 )x2 +2+2 = 108
    注意:由于conv4-3后面接了3x3的卷积核做分类和回归,所以在计算感受野大小的时候,需要将用于分类和回归的3x3的卷积核也考虑进去。


    经典SSD网络anchor的设置

    下面我们来看一下经典网络中anchor大小是如何设置的

    在这里插入图片描述
    其中( )中的数字表示:anchor/理论感受野,下文中使用该数值表示anchor的大小。
    在这里插入图片描述
    注:SFD:Single Shot Scale-invariant Face Detector

    于老师开源的检测器:ShiqiYu/libfacedetection中anchor的设置
    在这里插入图片描述

    在这里插入图片描述

    观察SSD,SFD,YuFace,RPN中的anchor设计,我们可以看出anchor的大小基本在[0.1,0.7]之间。RPN网络比较特别,anchor的大小超出了感受野大小。


    anchor大小的探索

    下面我做了一系列实验探索anchor大小的范围,分别在数据集A和数据集B上,使用SFD_VGG16和SSD_YuFaceNet两个模型,所有层的anchor大小分别设计为0.1~0.9,观察模型的AP和loss大小。
    注:SFD_VGG16和SSD_YuFaceNet分别使用的是SFD开源的网络和ShiqiYu/libfacedetection开源的网络

    AP

    数据集A:
    在这里插入图片描述
    数据集B:
    在这里插入图片描述

    loss

    数据集A:
    在这里插入图片描述

    数据集B:
    在这里插入图片描述

    实验分析

    通过对经典网络的分析,以及实验的结果,可以观察到以下现象:

    1. anchor可以设置的范围较大,从实验结果来看,0.05~1.0基本都可以收敛,这也解释了为什么FasterRCNN中的RPN网络anchor大小可以超过感受野。从loss来看,anchor太大或者大小收敛效果都不好,甚至会出现不收敛的情况。这一点也很好理解,如果anchor太大,导致目标上下文信息较少,而如果anchor太小,又会导致没有足够多的信息。
    2. 综合AP的值以及loss的大小,我们可以看出,anchor在0.2~0.7之间收敛效果较好,这个结论与SSD经典网络的设置基本一致。这个范围既可以保证目标有足够多的上下文信息,也不会因为目标太小没有足够多的信息。

    注:由于目前实验数据还不够充分,这个范围可能并不准确,欢迎大家留言讨论。


    滑动窗口,感受野与anchor的关系

    首先区分一下这几个比较容易混淆的概念:

    1. 滑动窗口:使得某一层输出大小为1的输入大小就是该层的滑动窗口大小。比如MTCNN中PNet,滑动窗口大小为12x12
    2. 理论感受野:影响某个神经元输出的输入区域,也就是该层能够感知到的区域
    3. 有效感受野:理论感受野中间对输出有重要影响的区域
    4. anchor:预先设置的每一层实际响应的区域

    滑动窗口大小和理论感受野是一个网络的固有属性,一旦网络结构确定了,这两个参数就确定了,有效感受野是可以通过训练改变的,anchor是通过人工手动设置的。理论感受野,有效感受野,滑动窗口是对齐的, anchor设置过程中也要与感受野对齐,否则会影响检测效果。检测层上每个像素点都会对应一个理论感受野,滑动窗口以及anchor。


    MTCNN中的anchor机制

    MTCNN训练机制的问题

    熟悉MTCNN的朋友应该都知道,训练MTCNN的时候需要事先生成三类样本:positive,part,negative.这三类样本是根据groundtruth的IOU来区分的,原论文中的设置是IOU<0.3的为negative,IOU>0.65的为positve,0.4<IOU<0.65的为part。
    在这里插入图片描述
    上图中生成的positive样本为,图中红色框为groundtruth,蓝色框为候选框
    在这里插入图片描述
    其中回归任务回归的就是两者之间的offset
    在这里插入图片描述

    回归的4个偏移量(公式不唯一):

    (x1x1)/w(x1-x1’)/w

    (y1y1)/h(y1-y1’)/h

    (x2x2)/w(x2-x2’)/w

    (y2y2)/h(y2-y2’)/h
    对于小目标或者类似头肩这种目标,会出现一些问题
    在这里插入图片描述
    生成的positive样本如下:
    在这里插入图片描述
    基本上是一块黑色区域,没有太多有效信息。
    对于小目标:
    在这里插入图片描述
    生成的positive是
    在这里插入图片描述
    这样的图像,这些图像是非常不利于训练的,而且MTCNN在训练的时候输入分辨率都比较小(比如12,24,48),将这些生成的图像resize到12,24或者48之后会导致有效信息更少,为了解决这个问题,我们需要包含目标更多的上下文信息,会更加容易识别。
    在这里插入图片描述

    MTCNN中的anchor机制

    借鉴SSD中anchor的思想,提出了MTCNN中的anchor

    SSD在训练过程中通过anchor与groundtruth的匹配来确定每一个anchor的类别,具体匹配过程:计算与每个anchor的IOU最大(>阈值)的那个groundtruth,如果找到了,那么该anchor就匹配到了这个groundtruth,该anchor就是positive样本,anchor的类别就是该groundtruth的类别,回归的offset就是anchor与groundtruth之间的偏移量。由于SSD的anchor通常都比理论感受野小,所以SSD会包含较多的上下文信息,如下图所示。
    在这里插入图片描述
    联想到MTCNN,在生成训练样本的时候,我们可以将候选框当成anchor,生成positive的过程就是SSD中的匹配过程,由于需要包含更多上下文信息,最后会对anchor进行扩边生成最后的训练样本 。
    在这里插入图片描述
    红色区域就是anchor也就是生成的positive样本,整个黑色区域就是对anchor做扩边后生成的训练样本,可以看到包含了更多的上下文信息。

    实验结果与分析

    在多种数据集上对anchor机制进行了实验。
    数据集1:
    在这里插入图片描述
    数据集2:在这里插入图片描述
    从实验结果我们可以看出,anchor机制可以显著提高检测器的精度。


    结束语

    关于anchor其实还有很多地方值得探索,本文只是总结了一下最近工作中对anchor的一些最新的认识,就当抛砖引玉,大家如果有关于anchor更好的解读欢迎一起讨论。


    非常感谢您的阅读,如果您觉得这篇文章对您有帮助,欢迎扫码进行赞赏。

    这里写图片描述

    展开全文
  • anchor的理解

    千次阅读 2019-08-09 18:01:31
    首先我们需要知道anchor的本质是什么,本质是SPP(spatial pyramid pooling,空间金字塔池化)思想的逆向。 而SPP本身是做什么的呢? 就是将不同尺寸的输入resize成为相同尺寸的输出,使得任意大小的特征图都能够转换...
  • anchor

    2019-09-20 19:34:35
    首先我们需要知道anchor的本质是什么,本质是SPP(spatial pyramid pooling)思想的逆向。而SPP本身是做什么的呢,就是将不同尺寸的输入resize成为相同尺寸的输出。所以SPP的逆向就是,将相同尺寸的输出,倒推得到不同...
  • anchor理解

    千次阅读 2018-10-31 16:19:53
    faster rcnn中rpn的anchor,sliding windows,proposals? 作者:马塔 链接:https://www.zhihu.com/question/42205480/answer/155759667 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请...
  • Anchor是什么?

    2020-03-28 12:16:07
    1、选择性搜索(Selective Search) 先介绍一下传统的人脸识别算法,是怎么检测出图片中的人脸的? 以下图为例,如果我们要检测图中小女孩的人脸位置,一个比较简单暴力的方法就是滑窗,我们使用不同大小、不同...
  • HTML <a>标签中锚点(anchor)的使用

    万次阅读 2013-03-05 16:30:32
    destination destination is here!!!
  • anchor_scales=[8] anchor_ratios=[0.5, 1.0, 2.0] anchor_strides=[4, 8, 16, 32, 64] 可以看看这两个代码: mmdetection/mmdet/models/anchor_heads/anchor_head.py mmdetection/mmdet/core/anchor/anchor_...
  • C# 控件Anchor和Dock的区别

    万次阅读 2011-09-02 15:05:20
    Anchor的英文意思是锚定。表示在窗体重置时控件与窗体(或者父控件)的相对位置保持不变。控件变化要等到窗体重置的时候才能呈现。 窗体重置前 窗体重置后
  • 本文用到的是caffe下,rbg大神写的py-faster-rcnn。针对不同的数据集,不同大小的目标,修改anchor的...在lib文件夹下generate_anchor.py中设计的anchor为128*128,256*256,512*512(不考虑ratios的话),而这样的...
  • EXTJS 中 anchor 的用法

    万次阅读 2012-07-09 15:21:36
    { columnWidth:0.33, layout:'form', items:[{ id:'missiontype', name:"mission.missiontype",
  • faster r-cnn 的 anchor 到底是啥...

    千次阅读 2018-04-07 14:10:09
    最近看检测相关的东西,anchor、proposal之类的概念需要好好理解下的...关于anchor,参考了知乎的知友们的见解:知乎:anchor、proposal...关于anchor我觉得比较“清晰”的说法:一般是在最末层的 feature map 上再...
  • HTTP FAILED: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. 原因:未找到证书路径的信任锚。证书问题以下两位Lz给了...
  • 彻底理解position与anchorPoint

    万次阅读 2014-07-18 13:03:55
    原文 ... ...相信初接触到CALayer的人都会遇到以下几个问题...为什么修改anchorPoint会移动layer的位置?  CALayer的position点是哪一点呢?  anchorPoint与position有什么关系? 我也迷惑过,找过网上的教程,
  • Anchor Presets属性的使用示例
  • 张士峰大佬近期发了一篇论文解读Anchor-base和Anchor-free方法间的差别,其本质在于正负样本的选取方式不同。 论文:《Bridging the Gap Between Anchor-based and Anchor-free Detection via Adaptive Training ...
  • 经常会遇到需求,要求手势的缩放或者旋转操作,要求动作变化围绕某一个特定点,或者是两指的中心点,或者是某一个点。 这个问题首先要清晰的知道,iOS各个view的层次关系。...图层的anchorPoint属性是一个CGPoi
  • 缘起:仿写决策树代码时 遇到plt.legend(bbox_to_anchor=(1,0.2)) 此参数用来确定图例在轴的位置 区别如下两图 完全出于强迫症 ,一般情况这个参数其实可以不用设置,但如果出现图例遮盖了图像便需要调整… ...
1 2 3 4 5 ... 20
收藏数 81,145
精华内容 32,458
关键字:

anchor