我不仅要利用特征提取器预训练的权重,还要使用特征图层的分类器/定位预训练权重,以使用张量流对象检测API来微调张量流对象检测模型(SSD) . 当我的新模型与我用于微调检查点的预训练模型具有不同数量的类时,TensorFlow对象检测API将如何处理分类权重张量?
当在像SSD这样的ML物体检测模型中微调预训练模型时,我不仅可以使用预先训练的权重初始化特征提取器权重,还可以初始化特征图的定位层权重和分类层权重,仅使用后者选择预先训练好的类权重,这样我就可以减少模型最初识别的类数(例如,从90个MSCOCO类到90个类中的任何选择类,如汽车和行人等) .
https://github.com/pierluigiferrari/ssd_keras/blob/master/weight_sampling_tutorial.ipynb
这就是API(和tensorflow)的新方法我没有't been able to follow the source structure and understand how that number is going to be handled at fine-tuning. Most SSD models I know just ignore and initialize the classification weight tensor in case the pre-trained model'类的重量形状与新模型的分类权重形状不同,但我想保留必要的分类权重并对其进行训练 . 另外,我如何在API结构中做到这一点?
谢谢!
1 回答
当我阅读代码时,我找到了负责的代码,如果新定义的模型和预先训练的模型之间的层的形状匹配,则只保留预训练模型的权重 . 因此,如果我更改类的数量,分类器层的形状会发生变化,并且不会保留预先训练的权重 .
https://github.com/tensorflow/models/blob/master/research/object_detection/utils/variables_helper.py#L133