精华内容
参与话题
问答
  • SEIR传染病模型Netlogo仿真程序

    千次阅读 多人点赞 2020-02-19 18:27:53
    2019年年底,一场突如其来的传染病席卷中国湖北武汉,新型冠状病毒感染的肺炎疫情悄然蔓延,从武汉波及全国,牵动人心。受到B站某UP主仿真程序的启发, 想通过计算机仿真实现一个更加真实的病毒传播仿真模型,下面是...

    在这里插入图片描述
    2019年年底,一场突如其来的传染病席卷中国湖北武汉,新型冠状病毒感染的肺炎疫情悄然蔓延,从武汉波及全国,牵动人心。受到B站某UP主仿真程序的启发,想通过计算机仿真实现一个更加真实的病毒传播仿真模型,下面是我的仿真模型的基本介绍和模型演示。

    1、SEIR模型

    在这里插入图片描述
    图片来源:知乎-信号处理工程师的日常

    SEIR模型在SIR模型的基础之上新增加了一个潜伏者(Exposed),这和新冠病毒实际情况更加符合,易感染人群在一开始会经历潜伏期,一段时间之后才出现症状,李兰娟院士认为:潜伏期患者也有可能具有传染性。潜伏者按照一定概率转化为感染者,因此,SEIR微分方程为:

    在这里插入图片描述
    SEIR微分方程

    上式中α对应的感染概率,β对应的是潜伏者转换为感染者的概率,γ对应的治愈概率,r是接触的人数。该方程实质上反映的是易感染者S(t)、潜伏者E(t)、感染者I(t)、康复者R(t)单位时间变化数量的随时间t的变化情况,它们之间会相互影响,下面为迭代形式:

    在这里插入图片描述
    SEIR迭代方程

    2、模型假设

    • 新型冠状病毒主要的传播途径还是呼吸道飞沫传播和接触传播,气溶胶和粪—口等传播途径尚待进一步明确。通过流行病学调查显示,病例多可以追踪到与确诊的病例有过近距离密切接触的情况,因此,模型假设只有接触传播一种传播途径。
    • 为了简化模型,模型假设感染者不会死亡,只会传染其他易感染者或者被隔离并治愈。
    • 模型假设康复者体内含有抗体,不会再感染病毒。
    • 模型假设潜伏者没有被收治,感染者会被收治,被收治的感染者会一直占用医院隔离区域
    • 模型假设被隔离的感染者无法再感染其他人
    • 模型假设患者只能通过医院收治再被治愈

    3、模型参数

    参数 说明 类型
    population 总人数 整数
    hospital-patient-segregation-area 医院隔离区域 整数
    human-flow-range 人们的活动最大范围 整数
    infection-rate 感染概率 浮点数
    transform-rate 潜伏者转换为感染者的概率 浮点数
    recovery-rate 康复概率 浮点数
    initial-infectious-num 初始感染人数 整数
    latent-time 潜伏期 整数
    receive-cure-response-time 开始收治病人的延迟时间 整数
    receive-rate 收治效率 浮点数

    4、模型运行

    我以“为什么要进行自我隔离”问题为例来演示模型的运行,也可以通过web版模型在浏览器中自行尝试其他实验。
    假设有以下三种情形:a、人们都满世界乱跑、b、人们每天只见街坊邻居、c、人们宅在家只和家人呆在一起

    这三种情形通过human-flow-range参数来模拟,human-flow-range是相对每个人家庭位置的活动范围,abc分别对应human-flow-range的值为50、10、2。下面为各主体人数变化情况

    在这里插入图片描述
    a:human-flow-range = 50

    在这里插入图片描述
    b:human-flow-range = 10

    在这里插入图片描述
    c:human-flow-range = 2

    通过对比仿真绘图发现,人们如果不进行隔离而去接触许多人的话,被感染的人数峰值会大很多而且会提前,如果大家都减少活动范围,自己宅在家中,潜伏者和感染者那两条线就几乎消失了,这就是为什么说,在病毒蔓延之际,采用自我隔离的方法是控制疫情最有效的措施之一。

    5、模型优化

    该仿真模型基本符合SEIR模型的运行结果,并且设置一些基本参数,实际上还可以对模型进行优化,实现一些更加复杂的仿真,比如:

    • 已经发现,各个年龄段的人都可能被感染新冠病毒,被感染的主要是成年人,其中老年人和体弱多病的人似乎更容易被感染。儿童和孕产妇是新型冠状病毒感染的肺炎的易感人群。模型需要提现出不同的人群之间的差异,比如这里所说的“年龄”
    • 本模型人口分布采用的是随机分布,还可以构建更加复杂的人口分布,比如不同密集程度的人口分布,人口越密集的地方,像城市,病毒蔓延的速度会比人烟稀少的地方更快一些

    6、参考链接

    计算机仿真程序告诉你为什么现在还没到出门的时候!!!
    简单算算,你宅在家里究竟能为抗击肺炎疫情做出多大贡献?
    在家宅着也能抵抗肺炎!玩一玩SEIR传染病模型


    源代码(提供nlogo版和web版):https://github.com/dpoqb/netlogo_SEIR_2019

    展开全文
  • DenseNet算法详解

    万次阅读 多人点赞 2017-07-15 08:24:15
    论文:Densely Connected Convolutional Networks ...代码的github链接:https://github.com/liuzhuang13/DenseNet文章详解: 这篇文章是CVPR2017的oral,非常厉害。文章提出的DenseNet(Dense Convolution

    论文:Densely Connected Convolutional Networks
    论文链接:https://arxiv.org/pdf/1608.06993.pdf
    代码的github链接:https://github.com/liuzhuang13/DenseNet
    MXNet版本代码(有ImageNet预训练模型): https://github.com/miraclewkf/DenseNet

    文章详解:
    这篇文章是CVPR2017的oral,非常厉害。文章提出的DenseNet(Dense Convolutional Network)主要还是和ResNet及Inception网络做对比,思想上有借鉴,但却是全新的结构,网络结构并不复杂,却非常有效!众所周知,最近一两年卷积神经网络提高效果的方向,要么深(比如ResNet,解决了网络深时候的梯度消失问题)要么宽(比如GoogleNet的Inception),而作者则是从feature入手,通过对feature的极致利用达到更好的效果和更少的参数。博主虽然看过的文章不算很多,但是看完这篇感觉心潮澎湃,就像当年看完ResNet那篇文章一样!

    先列下DenseNet的几个优点,感受下它的强大:
    1、减轻了vanishing-gradient(梯度消失)
    2、加强了feature的传递
    3、更有效地利用了feature
    4、一定程度上较少了参数数量

    在深度学习网络中,随着网络深度的加深,梯度消失问题会愈加明显,目前很多论文都针对这个问题提出了解决方案,比如ResNet,Highway Networks,Stochastic depth,FractalNets等,尽管这些算法的网络结构有差别,但是核心都在于:create short paths from early layers to later layers。那么作者是怎么做呢?延续这个思路,那就是在保证网络中层与层之间最大程度的信息传输的前提下,直接将所有层连接起来!

    先放一个dense block的结构图。在传统的卷积神经网络中,如果你有L层,那么就会有L个连接,但是在DenseNet中,会有L(L+1)/2个连接。简单讲,就是每一层的输入来自前面所有层的输出。如下图:x0是input,H1的输入是x0(input),H2的输入是x0和x1(x1是H1的输出)……

    这里写图片描述

    DenseNet的一个优点是网络更窄,参数更少,很大一部分原因得益于这种dense block的设计,后面有提到在dense block中每个卷积层的输出feature map的数量都很小(小于100),而不是像其他网络一样动不动就几百上千的宽度。同时这种连接方式使得特征和梯度的传递更加有效,网络也就更加容易训练。原文的一句话非常喜欢:Each layer has direct access to the gradients from the loss function and the original input signal, leading to an implicit deep supervision.直接解释了为什么这个网络的效果会很好。前面提到过梯度消失问题在网络深度越深的时候越容易出现,原因就是输入信息和梯度信息在很多层之间传递导致的,而现在这种dense connection相当于每一层都直接连接input和loss,因此就可以减轻梯度消失现象,这样更深网络不是问题。另外作者还观察到这种dense connection有正则化的效果,因此对于过拟合有一定的抑制作用,博主认为是因为参数减少了(后面会介绍为什么参数会减少),所以过拟合现象减轻。

    这篇文章的一个优点就是基本上没有公式,不像灌水文章一样堆复杂公式把人看得一愣一愣的。文章中只有两个公式,是用来阐述DenseNet和ResNet的关系,对于从原理上理解这两个网络还是非常重要的。

    第一个公式是ResNet的。这里的l表示层,xl表示l层的输出,Hl表示一个非线性变换。所以对于ResNet而言,l层的输出是l-1层的输出加上对l-1层输出的非线性变换。

    这里写图片描述

    第二个公式是DenseNet的。[x0,x1,…,xl-1]表示将0到l-1层的输出feature map做concatenation。concatenation是做通道的合并,就像Inception那样。而前面resnet是做值的相加,通道数是不变的。Hl包括BN,ReLU和3*3的卷积。

    这里写图片描述

    所以从这两个公式就能看出DenseNet和ResNet在本质上的区别,太精辟。

    前面的Figure 1表示的是dense block,而下面的Figure 2表示的则是一个DenseNet的结构图,在这个结构图中包含了3个dense block。作者将DenseNet分成多个dense block,原因是希望各个dense block内的feature map的size统一,这样在做concatenation就不会有size的问题。

    这里写图片描述

    这个Table1就是整个网络的结构图。这个表中的k=32,k=48中的k是growth rate,表示每个dense block中每层输出的feature map个数。为了避免网络变得很宽,作者都是采用较小的k,比如32这样,作者的实验也表明小的k可以有更好的效果。根据dense block的设计,后面几层可以得到前面所有层的输入,因此concat后的输入channel还是比较大的。另外这里每个dense block的3*3卷积前面都包含了一个1*1的卷积操作,就是所谓的bottleneck layer,目的是减少输入的feature map数量,既能降维减少计算量,又能融合各个通道的特征,何乐而不为。另外作者为了进一步压缩参数,在每两个dense block之间又增加了1*1的卷积操作。因此在后面的实验对比中,如果你看到DenseNet-C这个网络,表示增加了这个Translation layer,该层的1*1卷积的输出channel默认是输入channel到一半。如果你看到DenseNet-BC这个网络,表示既有bottleneck layer,又有Translation layer。

    这里写图片描述

    再详细说下bottleneck和transition layer操作。在每个Dense Block中都包含很多个子结构,以DenseNet-169的Dense Block(3)为例,包含32个1*1和3*3的卷积操作,也就是第32个子结构的输入是前面31层的输出结果,每层输出的channel是32(growth rate),那么如果不做bottleneck操作,第32层的3*3卷积操作的输入就是31*32+(上一个Dense Block的输出channel),近1000了。而加上1*1的卷积,代码中的1*1卷积的channel是growth rate*4,也就是128,然后再作为3*3卷积的输入。这就大大减少了计算量,这就是bottleneck。至于transition layer,放在两个Dense Block中间,是因为每个Dense Block结束后的输出channel个数很多,需要用1*1的卷积核来降维。还是以DenseNet-169的Dense Block(3)为例,虽然第32层的3*3卷积输出channel只有32个(growth rate),但是紧接着还会像前面几层一样有通道的concat操作,即将第32层的输出和第32层的输入做concat,前面说过第32层的输入是1000左右的channel,所以最后每个Dense Block的输出也是1000多的channel。因此这个transition layer有个参数reduction(范围是0到1),表示将这些输出缩小到原来的多少倍,默认是0.5,这样传给下一个Dense Block的时候channel数量就会减少一半,这就是transition layer的作用。文中还用到dropout操作来随机减少分支,避免过拟合,毕竟这篇文章的连接确实多。

    实验结果:
    作者在不同数据集上采用的DenseNet网络会有一点不一样,比如在Imagenet数据集上,DenseNet-BC有4个dense block,但是在别的数据集上只用3个dense block。其他更多细节可以看论文3部分的Implementation Details。训练的细节和超参数的设置可以看论文4.2部分,在ImageNet数据集上测试的时候有做224*224的center crop。

    Table2是在三个数据集(C10,C100,SVHN)上和其他算法的对比结果。ResNet[11]就是kaiming He的论文,对比结果一目了然。DenseNet-BC的网络参数和相同深度的DenseNet相比确实减少了很多!参数减少除了可以节省内存,还能减少过拟合。这里对于SVHN数据集,DenseNet-BC的结果并没有DenseNet(k=24)的效果好,作者认为原因主要是SVHN这个数据集相对简单,更深的模型容易过拟合。在表格的倒数第二个区域的三个不同深度L和k的DenseNet的对比可以看出随着L和k的增加,模型的效果是更好的。

    这里写图片描述

    Figure3是DenseNet-BC和ResNet在Imagenet数据集上的对比,左边那个图是参数复杂度和错误率的对比,你可以在相同错误率下看参数复杂度,也可以在相同参数复杂度下看错误率,提升还是很明显的!右边是flops(可以理解为计算复杂度)和错误率的对比,同样有效果。

    这里写图片描述

    Figure4也很重要。左边的图表示不同类型DenseNet的参数和error对比。中间的图表示DenseNet-BC和ResNet在参数和error的对比,相同error下,DenseNet-BC的参数复杂度要小很多。右边的图也是表达DenseNet-BC-100只需要很少的参数就能达到和ResNet-1001相同的结果。

    这里写图片描述

    另外提一下DenseNet和stochastic depth的关系,在stochastic depth中,residual中的layers在训练过程中会被随机drop掉,其实这就会使得相邻层之间直接连接,这和DenseNet是很像的。

    总结:
    博主读完这篇文章真的有点相见恨晚的感觉,半年前就在arxiv上挂出来了,听说当时就引起了轰动,后来又被选为CVPR2017的oral,感觉要撼动ResNet的地位了,再加上现在很多分类检测的网络都是在ResNet上做的,这岂不是大地震了。惊讶之余来总结下这篇文章,该文章提出的DenseNet核心思想在于建立了不同层之间的连接关系,充分利用了feature,进一步减轻了梯度消失问题,加深网络不是问题,而且训练效果非常好。另外,利用bottleneck layer,Translation layer以及较小的growth rate使得网络变窄,参数减少,有效抑制了过拟合,同时计算量也减少了。DenseNet优点很多,而且在和ResNet的对比中优势还是非常明显的。

    展开全文
  • DenseNet 简介

    万次阅读 多人点赞 2017-08-17 19:00:11
    2.介绍DenseNet 1.1 DNN回顾 如下图所示是一个基本DNN结构,通过forward传播和backword传播来训练一个模型 包含input层,L个隐藏层和一个output 隐层使用的sigmoid激活函数 一般的优化方法有如下几种 GD:对所有...

    1.首先对深度学习做一个简单的回顾

    2.介绍DenseNet

    3.参考文献


    1.1 DNN回顾

    如下图所示是一个基本DNN结构,通过forward传播和backword传播来训练一个模型。包含input层,L个隐藏层和一个output,隐层使用的sigmoid激活函数,一般的优化方法有如下几种:

    GD:对所有样本计算完一次梯度然后更新权重

    SGD:每个样本计算一次梯度就更新权重

    mini-batch-GD:对小部分样本计算梯度,然后更新权重

    Momentum:加速度和速度在相同方向的时候,参数的更新得到加速,可以加快收敛速度


    1.2 发展

    在2012年AlexNet的出现让深度学习重新成为研究热点,在AlexNet中,使用了一些新的优化方法:dropout,relu,gpu+bigdata。之后的发展主要有增加网络深度,增强卷积模块功能,检测任务,新的功能单元等

    在ImageNet上,随着误差的降低,网络的深度呈现加深的趋势,在ResNet之前,很少超过20层的网络




    1.3 卷积层 convolution

    通过使用卷积核对图片提取特征,操作非常简单,对应位置相乘然后求和,然后卷积核根据步长滑动提取整个图片特征。不同的卷积核能提取不同的特征。




    1.4 ReLU激活函数

    sigmoid有一个非常致命的缺点,当输入非常大或者非常小的时候,这些神经元的梯度是接近于0的.

    如果你的初始值很大的话,大部分神经元可能都会处在饱和的状态而把gradientkill掉,这会导致网络变的很难学习。

    Sigmoid的output不是0均值. 这是不可取的,因为这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。产生的一个结果就是:如果数据进入神经元的时候是正的,那么w计算出的梯度也会始终都是正的。

    使用 ReLU得到的SGD的收敛速度会比sigmoid/tanh快很多,相比于sigmoid/tanhReLU只需要一个阈值就可以得到激活值,而不用去算一大堆复杂的运算。Relu能加速训练,导数好求,在反向传播时速度快,激活部分梯度是1,梯度不容易消失,而Sigmoidtanh在两端梯度消失严重。




    1.5 pooling





    1.6 dropout

    具体过程是,在某个mini-batch的训练中,随机隐藏部分神经元,这样就只能更新其他节点的参数,隐藏的这些没有更新,在下次迭代的时候再随机隐藏部分神经元,只更新剩下的节点参数。训练完成之后,在预测的时候还是使用所有节点来预测。

    ensemble的作用: 先回到正常的模型(没有dropout),我们用相同的训练数据去训练5个不同的神经网络,一般会得到5个不同的结果,此时我们可以采用 “5个结果取均值”或者“多数取胜的投票策略”去决定最终结果。(例如 3个网络判断结果为数字9,那么很有可能真正的结果就是数字9,其它两个网络给出了错误结果)。这种“综合起来取平均”的策略通常可以有效防止过拟合问题。因为不同的网络可能产生不同的过拟合,取平均则有可能让一些“相反的”拟合互相抵消。dropout掉不同的隐藏神经元就类似在训练不同的网络(随机删掉一半隐藏神经元导致网络结构已经不同),整个dropout过程就相当于 对很多个不同的神经网络取平均。而不同的网络产生不同的过拟合,一些互为“反向”的拟合相互抵消就可以达到整体上减少过拟合。
    因为dropout程序导致两个神经元不一定每次都在一个dropout网络中出现。(这样权值的更新不再依赖于有固定关系的隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况)。 迫使网络去学习更加鲁棒的特征 (这些特征在其它的神经元的随机子集中也存在)。换句话说假如我们的神经网络是在做出某种预测,它不应该对一些特定的线索片段太过敏感,即使丢失特定的线索,它也应该可以从众多其它线索中学习一些共同的模式(鲁棒性)。这个角度看 dropout就有点像L1,L2正则,减少权重使得网络对丢失特定神经元连接的鲁棒性提高,隐藏部分节点之后,强迫剩下的节点学习更重要的特征。




    1.7 Batch Normalization

    大家都知道在统计机器学习中的一个经典假设是“源空间(source domain)和目标空间(target domain)的数据分布(distribution)是一致的”。如果不一致,那么就出现了新的机器学习问题,如,transfer learning/domain adaptation(迁移学习,领域适应)等。

    如果分布改变,网络越深,分布变化越明显,不能学习到很好的参数。在其他资料上有指出Batch Normalization的本质是防止梯度弥散。





    1.8 Gradient Vanish

    我们知道在反向传播的时候,根据链式求导来计算梯度,并更新参数。反向传播时经过该层的梯度是要乘以该层的参数的,从l层传到k层的连乘就是问题所在,同样BN也是为了解决这个问题。



    2.1 ResNet

    ResNet的出现很好的解决了梯度弥散的问题,使得更深的网络得以更好的训练。第L层的网络是由L-1层的网络经过H(包括conv,BN,ReLU,Pooling)变换得到,在此基础上直接连接到上一层的网络。使得梯度能够得到更好的传播。



    举个例子,后面的网络需要排队来领取梯度信息,但是排到越后面的网络领到的梯度很少甚至没有,这个时候直接开辟一条新的道路(skip connection),将梯度信息传递到后面的网络。

    其实最先超过100层的网络是Highway Networks,非常形象的把这种结构比喻成高速公路。后来通过随机删掉一些层可以训练到1202层的ResNet。



    2.2 DenseNet

    DenseNet和ResNet的一个明显区别是,ResNet是求和,而DenseNet是做一个拼接,每一层网络的输入包括前面所有层网络的输出。第L层的输入等于K x (L-1) + k0,其中k是生长率,表示每一层的通道数,比如下图网络的通道数为4。

    DenseNet提升了信息和梯度在网络中的传输效率,每层都能直接从损失函数拿到梯度,并且直接得到输入信号,这样就能训练更深的网络,这种网络结构还有正则化的效果。其他网络致力于从深度和宽度来提升网络性能,
    DenseNet致力于从特征重用的角度来提升网络性能



    上面图中的结构是一个dense block,下图的结构是一个完整的dense net,包括3个dense block。可以发现在block之间没有dense连接,因为在pooling操作之后,改变了feature maps的大小,这时候就没法做dense 连接了。在两个block之间的是transition layer ,包括了conv ,pool,在实验中使用的是BN,(1x1 conv),(2x2 avg pool)。

    这种结构的好处是可以缓解梯度消失,省参数省计算,特征重用可以起到抗过拟合的作用。达到相同的精度,dense net只需要res net一半的参数和一半的计算量。




    2.3 冗余

    在使用密集连接时候的网络显得比较冗余,这样会不会增大参数量呢,DenseNet很好的处理了这个问题。它将每一层都设计的特别窄,在Dense Block中的每一个单元实际上都是一个 bottleneck layer,其中包括一个 1x1 conv和一个3x3 conv。在block之间还有个transition layer,包括一个BN,一个1x1的conv和一个pooling,同样起到了降低冗余的作用,一个block中有m个feature maps,通过一个0-1之间的参数来限制输出的feature maps数量。




    这种设计可以很好的降低参数量,GoogleNet也是用这种方式来降低参数的,下图是GoogleNet的一个功能模块,由1x1 64通道(通道可以理解为就是卷积核的数量),3x3 128通道,5x5 32通道的convolution和一个3x3 max pooling构成,输入的是28x28的图片192通道。那么可以分别计算出这3个卷积层的参数数量,为上一个通道数乘上当前卷积核的大小和通道数。可以算出来一个功能模块有38w个参数。




    功能模块使用1x1的卷积核来实现降低参数量,方式为在3x3,5x5的卷积核之前分别添加1x1x96,1x1x16的卷积核,在pooling之后添加1x1x32的卷积核。用同样的方式来计算参数量,上一个通道数乘上当前卷积核的大小和通道数。得到当前功能模块的参数量为16w,所以可以使用1x1的卷积核,通过改变通道大小来进行参数降低。




    下面的图表示3个block中特征的热力图,颜色越深表示特征越重要,可以看到浅层特征同样会被利用到



    下面是DenseNet的主要代码,就不作过多介绍了



    2.4内存优化

    DenseNet的内存主要耗费在拼接过程,每次拼接都会开辟新的内存空间。那么可以使用共享内存来解决这个问题,另一个是forward和backward的内存依赖,粉红色是forward,深红色是backward。Forward的时候内存不能释放,backward的时候可以,计算完一块红色的就能直接释放,深红依赖粉红,粉红的也可以释放,在计算深红的时候重新计算粉红,这样会多耗费15%的时间,但是能节省70%的空间。


    2.5 DPN

     DPN获得了最后一届ImageNet的冠军,主要思想是融合了ResNet和DenseNet,这里就不作过多介绍了。


    3 参考文献

    DPN

    展开全文
  • U-Net是一种基于深度学习的图像语义分割方法,尤其在医学图像分割中表现优异。 本课程将手把手地教大家使用labelme图像标注工具制作自己的数据集,生成Mask图像,并使用U-Net训练自己的数据集,从而能开展自己的...
  • 论文精读——CenterNet :Objects as Points

    万次阅读 多人点赞 2019-04-18 13:09:34
    论文题目:Objects as Points ... 发布时间:2019.4.16 机构:UT Austin,UC Berkeley ...代码:https://github.com/xingyizhou/CenterNet Abstract 目标检测识别往往在图像上将目标以轴对称的框形式框出。大...

    论文题目:Objects as Points

    论文地址:https://arxiv.org/pdf/1904.07850.pdf

    发布时间:2019.4.16

    机构:UT Austin,UC Berkeley

    代码:https://github.com/xingyizhou/CenterNet

     


    Abstract

           目标检测识别往往在图像上将目标用矩形框形式框出,该框的水平和垂直轴与图像的水平和垂直向平行。大多成功的目标检测器都先穷举出潜在目标位置,然后对该位置进行分类,这种做法浪费时间,低效,还需要额外的后处理。本文中,我们采用不同的方法,构建模型时将目标作为一个点——即目标BBox的中心点。我们的检测器采用关键点估计来找到中心点,并回归到其他目标属性,例如尺寸,3D位置,方向,甚至姿态。我们基于中心点的方法,称为:CenterNet,相比较于基于BBox的检测器,我们的模型是端到端可微的,更简单,更快,更精确。我们的模型实现了速度和精确的最好权衡,以下是其性能:

    MS COCO dataset, with 28:1% AP at 142 FPS, 37:4% AP at 52 FPS, and 45:1% AP with multi-scale testing at 1.4 FPS.

    用同个模型在KITTI benchmark 做3D bbox,在COCO keypoint dataset做人体姿态检测。同复杂的多阶段方法比较,我们的取得了有竞争力的结果,而且做到了实时的。


    Introduction

           目标检测 驱动了 很多基于视觉的任务,如 实例分割,姿态估计,跟踪,动作识别。且应用在下游业务中,如 监控,自动驾驶,视觉问答。当前检测器都以bbox轴对称框的形式紧紧贴合着目标。对于每个目标框,分类器来确定每个框中是否是特定类别目标还是背景。

    One stage detectors 在图像上滑动复杂排列的可能bbox(即锚点),然后直接对框进行分类,而不会指定框中内容。

    Two-stage detectors 对每个潜在框重新计算图像特征,然后将那些特征进行分类。

    后处理,即 NMS(非极大值抑制),通过计算Bbox间的IOU来删除同个目标的重复检测框。这种后处理很难区分和训练,因此现有大多检测器都不是端到端可训练的。

     

           本文通过目标中心点来呈现目标(见图2),然后在中心点位置回归出目标的一些属性,例如:size, dimension, 3D extent, orientation, pose。 而目标检测问题变成了一个标准的关键点估计问题。我们仅仅将图像传入全卷积网络,得到一个热力图,热力图峰值点即中心点,每个特征图的峰值点位置预测了目标的宽高信息

    模型训练采用标准的监督学习,推理仅仅是单个前向传播网络,不存在NMS这类后处理

     对我们的模型做一些拓展(见图4),可在每个中心点输出3D目标框,多人姿态估计所需的结果。

    对于3D BBox检测,我们直接回归得到目标的深度信息,3D框的尺寸,目标朝向;

    对于人姿态估计,我们将关节点(2D joint)位置作为中心点的偏移量,直接在中心点位置回归出这些偏移量的值。

     由于模型设计简化,因此运行速度较高(见图1)


    Related work

            我们的方法与基于锚点的one-stage方法相近。中心点可看成形状未知的锚点(见图3)。但存在几个重要差别(本文创新点):

    第一,我们分配的锚点仅仅是放在位置上,没有尺寸框。没有手动设置的阈值做前后景分类。(像Faster RCNN会将与GT IOU >0.7的作为前景,<0.3的作为背景,其他不管);

    第二,每个目标仅仅有一个正的锚点,因此不会用到NMS,我们提取关键点特征图上局部峰值点(local peaks);

    第三,CenterNet 相比较传统目标检测而言(缩放16倍尺度),使用更大分辨率的输出特征图(缩放了4倍),因此无需用到多重特征图锚点;

    通过关键点估计做目标检测:

           我们并非第一个通过关键点估计做目标检测的。CornerNet将bbox的两个角作为关键点;ExtremeNet 检测所有目标的 最上,最下,最左,最右,中心点;所有这些网络和我们的一样都建立在鲁棒的关键点估计网络之上。但是它们都需要经过一个关键点grouping阶段,这会降低算法整体速度;而我们的算法仅仅提取每个目标的中心点,无需对关键点进行grouping 或者是后处理

    单目3D 目标检测:

    3D BBox检测为自动驾驶赋能。Deep3Dbox使用一个 slow-RCNN 风格的框架,该网络先检测2D目标,然后将目标送到3D 估计网络;3D RCNN在Faster-RCNN上添加了额外的head来做3D projection;Deep Manta 使用一个 coarse-to-fine的Faster-RCNN ,在多任务中训练。而我们的模型同one-stage版本的Deep3Dbox 或3D RCNN相似,同样,CenterNet比它们都更简洁,更快


    Preliminary

            令I\epsilon R^{W\times H\times 3} 为输入图像,其宽W,高H。我们目标是生成关键点热力图\hat{Y}\epsilon [0,1]^{\frac{W}{R}\times \frac{H}{R}\times C},其中R 是输出stride(即尺寸缩放比例),C是关键点类型数(即输出特征图通道数);关键点类型有: C = 17 的人关节点,用于人姿态估计; C = 80 的目标类别,用于目标检测。我们默认采用下采用数为R=4 ;\hat{Y}_{x,y,c}=1 表示检测到的关键点;\hat{Y}_{x,y,c}=0 表示背景;我们采用了几个不同的全卷积编码-解码网络来预测图像 得到的\hat{Y}:stacked hourglass network , upconvolutional residual networks (ResNet), deep layer aggregation (DLA) 。

           我们训练关键点预测网络时参照了Law和Deng (H. Law and J. Deng. Cornernet: Detecting objects as
    paired keypoints. In ECCV, 2018.)  对于 Ground Truth(即GT)的关键点 c ,其位置为 p \epsilon R^{2} ,计算得到低分辨率(经过下采样)上对应的关键点 \tilde{p}=\left \lfloor \frac{p}{R} \right \rfloor . 我们将 GT 关键点 通过高斯核  分散到热力图 上,其中 是目标尺度-自适应 的标准方差。如果对于同个类 c (同个关键点或是目标类别)有两个高斯函数发生重叠,我们选择元素级最大的。训练目标函数如下,像素级逻辑回归的focal loss:

     其中  和 是focal loss的超参数,实验中两个数分别设置为2和4, N是图像 I 中的关键点个数,除以N主要为了将所有focal loss归一化。

            由于图像下采样时,GT的关键点会因数据是离散的而产生偏差,我们对每个中心点附加预测了个局部偏移  所有类别 c 共享同个偏移预测,这个偏移同个 L1 loss来训练:

     只会在关键点位置 做监督操作,其他位置无视。下面章节介绍如何将关键点估计用于目标检测。


    Objects as Points

            令 是目标 k (其类别为   )的bbox. 其中心位置为  ,我们用 关键点估计 来得到所有的中心点,此外,为每个目标 k 回归出目标的尺寸  。为了减少计算负担,我们为每个目标种类使用单一的尺寸预测   ,我们在中心点位置添加了 L1 loss:

     我们不将scale进行归一化,直接使用原始像素坐标。为了调节该loss的影响,将其乘了个系数,整个训练的目标loss函数为:

     实验中, ,,整个网络预测会在每个位置输出 C+4个值(即关键点类别C, 偏移量的x,y,尺寸的w,h),所有输出共享一个全卷积的backbone;

     

    从点到Bbox 

           在推理的时候,我们分别提取热力图上每个类别的峰值点。如何得到这些峰值点呢?做法是将热力图上的所有响应点与其连接的8个临近点进行比较,如果该点响应值大于或等于其八个临近点值则保留,最后我们保留所有满足之前要求的前100个峰值点。令  是检测到的 c 类别的 n 个中心点的集合。 每个关键点以整型坐标 的形式给出。作为测量得到的检测置信度, 产生如下的bbox:

    其中是偏移预测结果;是尺度预测结果;所有的输出都直接从关键点估计得到,无需基于IOU的NMS或者其他后处理。

     

    3D 检测

           3D检测是对每个目标进行3维bbox估计,每个中心点需要3个附加信息:depth, 3D dimension, orientation。我们为每个信息分别添加head.

            对于每个中心点,深度值depth是一个维度的。然后depth很难直接回归!我们参考【D. Eigen, C. Puhrsch, and R. Fergus. Depth map prediction from a single image using a multi-scale deep network. In NIPS, 2014.】对输出做了变换。 其中 是sigmoid函数,在特征点估计网络上添加了一个深度计算通道 , 该通道使用了两个卷积层,然后做ReLU 。我们用L1 loss来训练深度估计器。

           目标的3D维度是三个标量值。我们直接回归出它们(长宽高)的绝对值,单位为米,用的是一个独立的head :   和L1 loss;

           方向默认是单标量的值,然而其也很难回归。我们参考【A. Mousavian, D. Anguelov, J. Flynn, and J. Kosecka.
    3d bounding box estimation using deep learning and geometry. In CVPR, 2017.】, 用两个bins来呈现方向,且i做n-bin回归。特别地,方向用8个标量值来编码的形式,每个bin有4个值。对于一个bin,两个值用作softmax分类,其余两个值回归到在每个bin中的角度。

     

    人姿态估计

           人的姿态估计旨在估计 图像中每个人的k 个2D人的关节点位置(在COCO中,k是17,即每个人有17个关节点)。因此,我们令中心点的姿态是 kx2维的,然后将每个关键点(关节点对应的点)参数化为相对于中心点的偏移。 我们直接回归出关节点的偏移(像素单位) ,用到了L1 loss;我们通过给loss添加mask方式来无视那些不可见的关键点(关节点)。此处参照了slow-RCNN。

            为了refine关键点(关节点),我们进一步估计k 个人体关节点热力图  ,使用的是标准的bottom-up 多人体姿态估计【4,39,41】,我们训练人的关节点热力图使用focal loss和像素偏移量,这块的思路和中心点的训练雷同。我们找到热力图上训练得到的最近的初始预测值,然后将中心偏移作为一个grouping的线索,来为每个关键点(关节点)分配其最近的人。具体来说,令是检测到的中心点。第一次回归得到的关节点为:

    我们提取到的所有关键点(关节点,此处是类似中心点检测用热力图回归得到的,对于热力图上值小于0.1的直接略去): for each joint type j from the corresponding heatmap 

    然后将每个回归(第一次回归,通过偏移方式)位置  与最近的检测关键点(关节点)进行分配 ,考虑到只对检测到的目标框中的关节点进行关联。


    Implementation details

           我们实验了4个结构:ResNet-18, ResNet-101, DLA-34, Hourglass-104. 我们用deformable卷积层来更改ResNets和DLA-34,按照原样使用Hourglass 网络。

    Hourglass

    堆叠的Hourglass网络【30,40】通过两个连续的hourglass 模块对输入进行了4倍的下采样,每个hourglass 模块是个对称的5层 下和上卷积网络,且带有skip连接。该网络较大,但通常会生成最好的关键点估计。

    ResNet

    Xiao et al. [55]等人对标准的ResNet做了3个up-convolutional网络来dedao更高的分辨率输出(最终stride为4)。为了节省计算量,我们改变这3个up-convolutional的输出通道数分别为256,128,64。up-convolutional核初始为双线性插值。

    DLA

    即Deep Layer Aggregation (DLA),是带多级跳跃连接的图像分类网络,我们采用全卷积上采样版的DLA,用deformable卷积来跳跃连接低层和输出层;将原来上采样层的卷积都替换成3x3的deformable卷积。在每个输出head前加了一个3x3x256的卷积,然后做1x1卷积得到期望输出。

    Training

    训练输入图像尺寸:512x512; 输出分辨率:128x128  (即4倍stride);采用数据增强方式:随机flip, 随机scaling (比例在0.6到1.3),裁剪,颜色jittering;采用Adam优化器;

    在3D估计分支任务中未采用数据增强(scaling和crop会影响尺寸);

    更详细的训练参数设置(学习率,GPU数量,初始化策略等)见论文~~

    Inference

    采用3个层次的测试增强:没增强,flip增强,flip和multi-scale(0.5,0.75,1.25,1.5)增强;For flip, we average the network
    outputs before decoding bounding boxes. For multi-scale,we use NMS to merge results.




    Experiments

     

     

     

     

    文章网络结构细节信息见下图:

    展开全文
  • 我在尝试实现Github上开源的代码[Relation-Shape-CNN](https://github.com/Yochengliu/Relation-Shape-CNN ""),运行报错ModuleNotFoundError: No module named '_ext.pointnet2._pointnet2'。 Traceback (most ...
  • 使用 net start mysql 命令时报错, mysql 服务正在启动 .. mysql 服务无法启动。 服务没有报告任何错误。 请键入 NET HELPMSG 3534 以获得更多的帮助。 说明:这是我在重新安装mysql5.7.28时出现的问题,(题外...
  • 论文阅读: RetinaNet

    万次阅读 多人点赞 2018-04-22 14:59:05
    Introduction 此篇论文获得了ICCV最佳学生论文奖,指导人是FBAI的He Kainming大神: 众所周知,detector主要分为以下两大门派: - one stage系 two stage系 代表性算法 YOLOv1、SSD、YOLOv2、... ...
  • 如何彻底卸载 MySQL Connector Net

    千次阅读 2019-04-30 18:55:18
    关于MySQL Connector Net 的卸载问题 前几天专业课做实验需要用到MySQL Connector,没有注意到给的实验文件夹里的安装包,于是跑去官网下载了一个最新的版本,在做实验过程中就出现了版本不一致的问题,这时候需要...
  • DenseNet详解

    万次阅读 多人点赞 2018-08-27 16:47:24
    其它机器学习、深度学习算法的全面系统讲解可以...作为CVPR2017年的Best Paper, DenseNet脱离了加深网络层数(ResNet)和加宽网络结构(Inception)来提升网络性能的定式思维,从特征的角度考虑,通过特征重用和旁路(Byp...
  • PointNet网络结构详细解析

    千次阅读 2019-04-02 12:58:00
    PointNet网络结构详细解析 一、重要知识点 Transforming point clouds data to regular 3D voxel grids or collections of images, however, renders(cause to be) data unnecessarily voluminous(length, vast)...
  • CornerNet 算法笔记

    万次阅读 多人点赞 2018-10-12 20:22:08
    论文:CornerNet: Detecting Objects as Paired Keypoints 论文链接:https://arxiv.org/abs/1808.01244 代码链接:https://github.com/umich-vl/CornerNet 这篇发表在ECCV2018上的目标检测文章给人一种眼前一亮...
  • 全卷积神经网络图像分割(U-net)-keras实现

    万次阅读 多人点赞 2017-04-17 20:36:34
    最近在研究全卷积神经网络在图像分割方面的应用,因为自己是做医学图像处理方面的工作,所以就把一个基于FCN(全卷积神经网络)的神经网络用 keras 实现了,并且用了一个医学图像的数据集进行了图像分割。...
  • GhostNet

    千次阅读 2020-03-08 21:00:41
    本篇论文是发表于CVPR2020的一篇轻量级网络的论文,作者是华为诺亚方舟实验室,文章的总体思路比较清晰,为了减少网络计算量,作者将传统的卷积分成两步进行,首先利用较少的计算量通过传统的卷积生成channel较小的...
  • EfficientNet算法笔记

    万次阅读 2019-06-04 19:57:19
    论文:EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks 论文链接:https://arxiv.org/abs/1905.11946 代码链接:...
  • 在DOS窗口、gitbush以及一些可以使用的命令行工具的界面上,输入:net stop mysql、net start mysql时,总是提示:服务名无效。 出现提示如下: 原因是:因为net start +服务名,启动的是win下注册的服务。...
  • CenterNet算法笔记

    千次阅读 2019-06-18 22:38:11
    论文:Objects as Points ...这篇CenterNet算法也是anchor-free类型的目标检测算法,基于点的思想和CornerNet是相似的,方法上做了较大的调整,整体上给人一种非常清爽的感觉,算法思想很朴素、直接,而且...
  • U-net:运行你的第一个U-net进行图像分割

    万次阅读 多人点赞 2018-02-08 16:00:01
    Unet进行图像分割 注意:本文运行环境为:python3.5、tensorflow 1.4.0 Unet进行图像分割 数据准备 程序准备 运行网络 测试结果如下 ...原始数据:首先准备数据,参考数据来自于 ISBI 挑战的数据集。...
  • net view

    千次阅读 2019-11-27 17:21:10
    net view 根据主名机查 MAC 地址 nbtstat -a hostname 查看 IP 与 MAC 地址映射表 来获取 IP arp -a 根据 IP 查主机名 nbtstat -A IP net view 提示 6118错误 解决方法 1、win+R ,输入services.msc ...
  • DenseNet

    千次阅读 2017-09-22 19:44:22
    2017CVPR Best Paper: 《Densely Connected Convolutional Networks》Github项目主页: https://github.com/liuzhuang13/DenseNet知乎上的一些讨论: 如何评价Densely Connected Convolutional Networks?DenseNet...
  • 深度学习入门----EfficientNet解读

    万次阅读 热门讨论 2019-06-07 19:13:08
    EfficientNet是谷歌最新的论文:EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks ICML 2019 这篇论文主要讲述了如何利用复合系数统一缩放模型的所有维度,达到精度最高效率最高,符合...
  • ElasticNet算法解析

    千次阅读 2019-05-26 21:41:09
    ElasticNet又叫弹性网络回归,要理解ElasticNet回归,首先要理解岭回归和Lasso回归。 线性回归 ElasticNet Sklearn中的ElasticNet回归 Sklearn库中有sklearn.linear_model.ElasticNetCV和sklearn.linear_model....
  • CenterNet

    千次阅读 2019-04-21 15:55:55
    我们介绍一篇很好的 one-stage 目标检测论文:CenterNet: Keypoint Triplets for Object Detection,该论文是由 中科院,牛津大学以及华为诺亚方舟实验室联合提出。截至目前,据我们所知,CenterNet 应该是 one-...
  • EfficientNet

    千次阅读 2019-07-13 16:49:35
    论文:EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks Github:https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet 论文基于深度(depth),宽度(width...
  • 【深度学习】U-Net简介

    万次阅读 2019-06-13 08:16:14
    论文题目:U-Net: Convolutional Networks for Biomedical Image Segmentation 论文地址:https://arxiv.org/pdf/1505.04597v1.pdf 医学图像处理方向,U-Net可以说是一个更加炙手可热的网络,基本上所有的分割问题,...
  • RFB Net算法笔记

    万次阅读 热门讨论 2018-08-10 08:33:35
    论文:Receptive Field Block Net for Accurate and Fast Object Detection 论文链接:https://arxiv.org/abs/1711.07767 代码链接:https://github.com/ruinmessi/RFBNet 这篇是ECCV2018关于目标检测的文章,...
  • Pytorch实现GoogLeNet

    千次阅读 2019-01-29 20:26:53
    GoogLeNet也叫InceptionNet,在2014年被提出,如今已到V4版本。GoogleNet比VGGNet具有更深的网络结构,一共有22层,但是参数比AlexNet要少12倍,但是计算量是AlexNet的4倍,原因就是它采用很有效的Inception模块,...
  • 千万不要用efficientnet做bone net

    千次阅读 2019-08-14 08:41:41
    前面有写过一篇文章convolution backbone network——EfficientNet解读,说efficientnet很好,然而最近用他做bonenet的时候,发现太消耗GPU显存了,efficient_b4在1080ti测试都out of memorey 了,所以不推荐用,还是...
  • Pytorch复现U-Net, R2U-Net, Attention U-Net, Attention R2U-Net

    千次阅读 热门讨论 2019-01-19 13:52:06
    Pytorch复现U-Net, R2U-Net, Attention U-Net, Attention R2U-Net 项目地址:pytorch Implementation of U-Net, R2U-Net, Attention U-Net, Attention R2U-Net U-Net, R2U-Net, Attention U-Net, Attention R2U-...

空空如也

1 2 3 4 5 ... 20
收藏数 199,283
精华内容 79,713
关键字:

net