深度学习的新手,但是似乎找不到/弄清楚后端权重是什么,例如
full_yolo_backend.h5
squeezenet_backend.h5
根据我的发现和试验,这些后端权重具有根本不同的模型架构,例如
我希望出于学习目的,对后端权重与实际模型进行一些解释。非常感谢!
后端的选择取决于您在精度和计算复杂度之间权衡方面的特定限制。后端的经典但耗时的选择的示例是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
。在这种情况下,由于头部期望具有不同的功能,因此自然会看到性能下降。