Faster rcnn损失函数部分:为什么采用L1而不用L2?
smoothed L1 Loss is a robust L1 loss that is less sensitive to outliers than the L2 loss used in R-CNN and SPPnet.
上述是Fast RCNN解释为什么采用smoothed L1, 因为它对噪音点不那么敏感,即对离目标太远的点不敏感。因为L2loss求导后 0.5*(t-v)^2 求导-> (t-v) 会有一个(t-v) 的系数在,如果v离t太远梯度很容易爆炸(需要精致地调节学习率),而smoothed L1中当|t-v|>1, |t-v|-0.5 求导-> 系数是±1, 这样就避免了梯度爆炸, 也就是它更加鲁棒。(t是target,v是需要预测出来的中心xy和尺寸wh)
(而yolo系列用是的L2损失,如何理解呢?)
smooth L1 Loss:为了处理不可导的惩罚,Faster RCNN提出来的计算距离loss的smooth_L1_Loss。
smooth L1近似理解见:http://pages.cs.wisc.edu/~gfung/GeneralL1/L1_approx_bounds.pdf
为什么可以迁移学习?迁移学习的本质是什么?
迁移学习(Transfer learning) 顾名思义就是就是把已学训练好的模型参数迁移到新的模型来帮助新模型训练。考虑到大部分数据或任务是存在相关性的,所以通过迁移学习我们可以将已经学到的模型参数(也可理解为模型学到的知识)通过某种方式来分享给新模型从而加快并优化模型的学习效率不用像大多数网络那样从零学习(starting from scratch,tabula rasa)。简单来讲我们首先利用大量相关数据进行训练,再用当前数据空间中的少量数据进行微调。从本质上讲,迁移学习是一种表示学习。
集成学习,例如AdaBoost其背后的机制,也可以看成是另一种形式的迁移学习,通过多次使用训练样本,并给不同的样本赋予不同的权重,集成学习也可以做到站在巨人的肩上。而Dropout机制,也是让网络训练中随机的丢失节点,从而使得网络不得不依据之前的模型进行迁移学习,从而提高泛化能力。迁移学习本质上利用的是不同任务间的相关性,用冗余对抗复杂。
迁移学习的目标是将从一个环境中学到的知识用来帮助新环境中的学习任务。因此,迁移学习不会像传统机器学习那样作同分布假设。
本质:采用一个已经学会如何很好地完成一项任务的模型,并将部分知识迁移到相关任务。
迁移学习让深度学习更容易 (❤️)
Faster RCNN训练过程
Faster RCNN损失函数
RPN loss
ROI pooling
ROI pooling layer实际上是SPP-NET的一个精简版,SPP-NET对每个proposal使用了不同大小的金字塔映射,而ROI pooling layer只需要下采样到一个7x7的特征图。对于VGG16网络conv5_3有512个特征图,这样所有region proposal对应了一个7*7*512维度的特征向量作为全连接层的输入。作用是固定大小。
参考: