TensorFlow 对象检测 api:在使用预训练模型训练时改变 类 数量时分类权重初始化

TensorFlow object detection api: classification weights initialization when changing number of classes at training using pre-trained models

我不仅要利用特征提取器的预训练权重,还要利用特征映射层的 classifier/localization 预训练权重,以使用张量流对象微调张量流对象检测模型 (SSD)检测API。当我的新模型与我用于微调检查点的预训练模型有不同数量的 classes 时,TensorFlow 对象检测 API 将如何处理 class化权重张量?

在 SSD 等 ML 对象检测模型中微调预训练模型时,我不仅可以使用预训练权重初始化特征提取器权重,还可以初始化特征图的定位层权重和 class化层权重,后者仅选择预训练的 class 选择权重,这样我就可以减少模型最初可以识别的 classes 的数量(例如从 90 MSCOCO classes 到那 90 classes 中选择的任何一个 classes,例如汽车和行人等)
https://github.com/pierluigiferrari/ssd_keras/blob/master/weight_sampling_tutorial.ipynb
这就是它在 keras 模型(即在 h5 文件中)中的完成方式,我也想在 Tensorflow 对象检测中做同样的事情 API。似乎在训练时我可以指定新模型将在配置 protobuf 文件中包含的 classes 的数量,但由于我是 API(和 tensorflow)的新手,我还没有能够遵循源结构并了解在微调时将如何处理该数字。我知道的大多数 SSD 模型只是忽略并初始化 classification 权重张量,以防预训练模型的 class 权重形状与新模型的 classification 权重形状不同,但我想要保留必要的 class 化权重并在这些权重上进行训练。此外,我将如何在 API 结构中执行此操作?
谢谢!

当我通读代码时,我找到了负责的代码,如果 newly-defined 模型和 pre-trained 模型之间的层形状,它只保留 pre-trained 模型的权重比赛。因此,如果我更改 class 的数量,class 层的形状会发生变化,并且不会保留 pre-trained 权重。

https://github.com/tensorflow/models/blob/master/research/object_detection/utils/variables_helper.py#L133