我不仅想利用特征提取器预训练权重,还想利用特征映射层的分类器/定位预训练权重,使用张量流对象检测 API 来微调张量流对象检测模型 (SSD)。当我的新模型的类数量与我用于微调检查点的预训练模型不同时,TensorFlow 对象检测 API 将如何处理分类权重张量?
当在 SSD 等 ML 对象检测模型中微调预训练模型时,我不仅可以使用预训练权重初始化特征提取器权重,还可以初始化特征图的定位层权重和分类层权重,仅使用后者选择预训练的类别权重,以便我可以减少模型最初可以识别的类别数量(例如,从 90 个 MSCOCO 类别到这 90 个类别中的任意类别,例如仅限汽车和行人等)
https://github.com/pierluigiferrari/ssd_keras/blob/master/weight_sampling_tutorial.ipynb https://github.com/pierluigiferrari/ssd_keras/blob/master/weight_sampling_tutorial.ipynb
这就是它在 keras 模型(即 h5 文件)中的完成方式,我也想在 Tensorflow 对象检测 API 中执行相同的操作。似乎在训练时我可以在配置 protobuf 文件中指定新模型将具有的类数量,但由于我是 API(和张量流)的新手,所以我无法遵循源结构并了解微调时如何处理该数字。我知道的大多数 SSD 模型只是忽略并初始化分类权重张量,以防预训练模型的类权重形状与新模型的分类权重形状不同,但我想保留必要的分类权重并对其进行训练。另外,我该如何在 API 结构中做到这一点?
Thanks!
当我通读代码时,我发现了负责的代码,如果新定义的模型和预训练模型之间的层的形状匹配,则该代码仅保留预训练模型的权重。因此,如果我改变类的数量,分类器层的形状就会改变,并且预训练的权重不会保留。
https://github.com/tensorflow/models/blob/master/research/object_detection/utils/variables_helper.py#L133 https://github.com/tensorflow/models/blob/master/research/object_detection/utils/variables_helper.py#L133
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)