TensorFlow对象检测API:使用预训练模型在训练中更改班级数量时的分类权重初始化

八田和也

我不仅要利用特征提取器预训练的权重,还要利用特征图图层的分类器/本地化预训练的权重来使用Tensorflow对象检测API微调Tensorflow对象检测模型(SSD)。当我的新模型与用于微调检查点的预训练模型具有不同数量的类时,TensorFlow对象检测API将如何处理分类权重张量?

当在ML对象检测模型(例如SSD)中微调预训练的模型时,我不仅可以使用预训练的权重来初始化特征提取器权重,还可以使用仅训练后的权重来初始化特征图的本地化层权重和分类层权重。选择选择的预先训练的班级权重,这样我就可以减少模型最初可以识别的班级数量(例如,从90个MSCOCO班级减少到这90个班级中选择的任何一个班级,例如仅汽车和行人等)
https ://github.com/pierluigiferrari/ssd_keras/blob/master/weight_sampling_tutorial.ipynb
这是在keras模型中(即在h5文件中)完成的方式,我也想在Tensorflow对象检测API中执行相同的操作。似乎在训练时我可以在config protobuf文件中指定新模型将要拥有的类数,但是由于我是API(和tensorflow)的新手,所以我无法遵循源代码结构并了解如何微调该数字。我知道的大多数SSD模型只是忽略并初始化分类权重张量,以防预训练模型的类权重形状与新模型的分类权重形状不同,但是我想保留必要的分类权重并对其进行训练。另外,我将如何在API结构中执行此操作?
谢谢!

八田和也

当我通读代码时,我发现了负责的代码,只有在新定义的模型和预训练的模型之间的层的形状匹配时,该代码才保留预训练的模型的权重。因此,如果更改班级数量,则分类器层的形状会更改,并且不会保留预训练的权重。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用模型的预训练权重在下一次迭代中初始化权重?

在TensorFlow模型中重用训练后的权重而无需重新初始化

每次使用 nntool 在 matlab 中重新训练相同模型时是否都需要初始化权重?

Mask RCNN的权重初始化,无需使用Imagenet / COCO的预训练权重

pytorch 修改预训练模型,旧权重会重新初始化吗?

在 Tensorflow 对象检测中评估预训练模型时出错 (tensorflow.python.framework.errors_impl.NotFoundError:)

如何在预训练的TensorFlow 2模型中访问和可视化权重?

如何恢复预训练模型以初始化参数

如何使用Tensorflow Keras API从预训练的模型复制特定的图层权重?

当训练对象检测分类器时 --> ImportError: No module named tensorflow

Tensorflow:重新训练期间的预训练嵌入初始化问题

如何在 tensorflow 中使用预训练的对象检测?

在训练时更改模型中 2 层的附加权重

在Keras中更改预训练的AlexNet分类

keras中的预训练目标检测模型

重新训练时,如何初始化tensorflow.contrib.slim full_connected层的权重和偏差?

如何通过随机初始化权重从头开始训练keras.applications中给出的模型?

更改预训练模型的输入形状及其权重

keras模型训练的初始化

Tensorflow在离线中使用预训练模型

如何在不初始化权重的情况下导入经过训练的模型

在AWS上训练Tensorflow对象检测模型

使用Numpy权重矩阵初始化TensorFlow CNN模型

Tensorflow:如何在新图中使用预训练权重?

Tensorflow - 在经过训练的 softmax 分类模型上检测多个对象

从预训练的模型加载单层权重

TensorFlow的对象检测API中缺少训练的模块和属性

使用 Python 在 Pandas 中初始化训练集

Tensorflow Estimator API:如何使用Tensorflow的Estimator API获得训练模型的每个节点的权重