赞
踩
出自:Proceedings of the AAAI Conference on Arti ficial Intelligence,2018
很可惜没有pytorch版本的代码,源码是基于c++和caffe的
文章的算法框架LSTD组合了SSD(box regression)和 Faster RCNN(box classification)。
SSD阶段,利用mutiple level特征图(区别于FPN的融合),直接在不同尺寸的特征图上进行每个grid的box regression,并用smooth L1正则项进行loss惩罚。
Faster RCNN阶段,进行一个coarse to fine的改进,首先判断每个box是否有object,初步筛选之后再进行RPN以及ROI pooling的操作,最后再用卷积层对box进行object classification。
整个训练过程分为两步,第一步在样本量充足但同源的数据集上预训练一个LSTD模型(称为source domain),然后共享除了最后一层classification的参数之外的所有参数给新的LSTD模型(target domain),在样本量较小的数据集上进行微调。
微调的时候的特别之处:loss函数加上了设计的两个正则项。
L
B
D
\boldsymbol{L_{BD}}
LBD和
L
T
K
\boldsymbol{L_{TK}}
LTK
L
B
D
\boldsymbol{L_{BD}}
LBD目的是平衡正负样本(前景背景信息不均,背景像素多),利用小样本标注数据中背景像素进行惩罚,惩罚方式就是L2正则,使得中间层的特征图中的背景像素的权重降低,注意力放在object区域上。
L
B
D
=
∣
∣
F
B
D
∣
∣
2
\boldsymbol{L_{BD}=||F_{BD}||_2}
LBD=∣∣FBD∣∣2
L
T
K
\boldsymbol{L_{TK}}
LTK出发点是发现直接在source domain模型上对novel class进行分类,得到的分数高的分类结果,和真值存在相类似(颜色、形状、出现背景)的特征,因此考虑“借用”已经预训练好的模型对target domain训练过程进行“指导”。
也有人理解为防止catastrophic forgetting,使得base class在微调的时候的输出接近预训练的结果。
具体就是把target domain LSTD变成多任务并行学习,在原本的classification平行地加一个分支进行novel class的source domain class软标签预测,使得该分支的预测结果接近source domain的同一张novel class image的预测结果。
L
T
K
=
C
r
o
s
s
E
n
t
r
o
p
y
(
P
S
,
P
p
r
e
)
\boldsymbol{L_{TK}=CrossEntropy(P_S,P_{pre})}
LTK=CrossEntropy(PS,Ppre)
1,小样本学习的三种思路,感觉这个算法利用了两个:fine-tuning(base预训练后再在novel上微调)和一点点meta learning(用student的loss对meta learner的训练从而提高student的水平)
2,小样本要巧妙利用负样本(背景区域),因为正负样本本身就不均衡,在正样本数量有限的情况下,利用好负样本
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。