美文网首页
BBN: Bilateral-Branch Network wi

BBN: Bilateral-Branch Network wi

作者: Cat丹 | 来源:发表于2020-04-07 17:29 被阅读0次

概述

旷视研究院新出的paper,主要用来解决识别分类中的长尾问题。通过试验表明均匀采样可以获取更好的通用特征,而重采样可以更好地解决尾部识别问题,提升识别正确率。因此,paper提出用一个两分支网络来学习特征的方法,两个分支共享大部分权重。分支1的样本为均匀分布的,分支2的样本为重采样的,两个分支学到的特征通过alpha加权后送入各自的分类器,最后结果在相加得到最终的输出。loss为加权交叉熵。其中alpha在训练早期值较大,后期较小,早期偏重学习通用特征,后期偏重处理尾部数据。结果当然也是很惊艳的。

Extensive experi- ments on four benchmark datasets, including the large-scale iNaturalist ones, justify that the proposed BBN can signif- icantly outperform state-of-the-art methods.


network.png

概念

不平衡因子

用来衡量数据集的长尾分布问题的严重程度。\beta=\frac{N_{max}}{N_{min}}

细节

损失函数

L=\alpha E(\hat{p},y_{c})+(1-\alpha)E(\hat{p},y_{r})
其中,E表示交叉熵损失,y_{c}表示均匀采样的样本的gt,{y_{r}}表示重采样的样本的gt。

alpha值

\alpha=1-(\frac{T}{T_{max}})^2

如何实现重采样

1.计算每个类别的P_{i}值。P{i}=\frac{w_{i}}{\sum_{j=1}^{C}w_{j}},其中,w_{j}=\frac{N_{max}}{N_{j}}
2.根据P_{i}值随机选择一个类别。
3.从i类中均匀地选取一个样本。

如何实现两个分支

用不同的模块区分

self.cb_block = block(self.in_planes, self.in_planes, stride=1)
self.rb_block = block(self.in_planes, self.in_planes, stride=1)

如何同时获取两组数据

将重采样数据存储在meta中

meta['sample_image'] = sample_img
meta['sample_label'] = sample_label

相关文章

网友评论

      本文标题:BBN: Bilateral-Branch Network wi

      本文链接:https://www.haomeiwen.com/subject/psbnphtx.html