【问题标题】:What are backend weights in deep learning models (yolo)?深度学习模型 (yolo) 中的后端权重是什么?
【发布时间】:2020-04-23 15:33:17
【问题描述】:
对深度学习很陌生,但似乎无法找到/弄清楚后端权重是什么,例如
full_yolo_backend.h5
squeezenet_backend.h5
根据我的发现和实验,这些后端权重具有根本不同的模型架构,例如
- yolov2 模型有 40+ 层,但后端只有 20+ 层 (?)
- 您可以使用自己的网络在后端模型之上构建 (?)
- 使用后端模型往往会产生较差的结果 (?)
出于学习目的,我希望寻求一些关于后端权重与实际模型的解释。非常感谢!
【问题讨论】:
标签:
deep-learning
object-detection
yolo
pre-trained-model
【解决方案1】:
我注意到您正在使用哪种实现,但在许多应用程序中,您可以将深度模型视为特征提取器,其输出或多或少与任务无关,然后是一些特定于任务的头。
后端的选择取决于您在准确性和计算复杂性之间的权衡方面的具体限制。经典但耗时的后端选择示例是 resnet-101、resnet-50 或 VGG,它们可以与 FPN(特征金字塔网络)相结合以产生多尺度特征。但是,如果速度是您主要关心的问题,那么您可以使用较小的后端,例如不同的 MobileNet 架构,甚至可以使用原始网络(例如原始 Yolov1/v2 论文中使用的那些)(tinyYolo 是一个极端情况)。
一旦你选择了你的后端(你可以使用一个预训练的),你就可以加载它的权重(这就是你的 *h5 文件)。最重要的是,您将添加一个小头来承载您需要的任务:这可以是分类、bbox 回归,或者类似于 MaskRCNN 中的背景/背景分割。对于 Yolov2,你可以只添加非常少的,例如 3 个卷积层(当然是非线性的),它们将输出一个大小为
BxC1xC2xAxP
#B==batch size
#C1==number vertical of cells
#C2==number of horizontal cells
#C3==number of anchors
#C4==number of parameters (i.e. bbx parameters, class prediction, confidence)
然后,您可以单独保存/加载此头部的权重。但是,当您对结果感到满意时,联合训练(端到端)通常会稍微提高准确性。
最后,回到你的最后一个问题,我假设你在后端得到的结果很差,因为你只加载后端权重,而不是头部的权重。另一种可能性是您使用的是经过后端训练的头部X,但您正在将后端切换到Y。在这种情况下,由于头部期望不同的特征,性能下降是很自然的。