Faster RCNN Inception v2模型中的BoxClassifier能否被冻结?
Can the BoxClassifier in the Faster RCNN Inception v2 Model Be Frozen?
我正在使用 TensorFlow 对象检测 API 在我的自定义数据集上重新训练 COCO 预训练的 Faster RCNN Inception v2 模型,最近注意到我的几个模型 BoxClassifierLoss 在训练期间变得更糟(例如,损失从 0.17 上升到 0.38,在 100 个时期后下降到 0.24(此后再次变得更糟或在没有改善的情况下波动)。
因此我有兴趣冻结 BoxClassifier 以保留显然效果更好的初始权重。
我读到 train.proto 中有一个 'freeze_variables' 参数,但我不确定要冻结哪些变量。
您可以冻结存储在以下位置的 model.ckpt
元(检查点文件)文件:
C:\tensorflow1\models\research\object_detection\training
这些检查点文件在训练期间经常存储,因此您可以在错误减少时检查此文件的详细信息,然后将相同的检查点冻结到您的最终模型。
要冻结模型,您可以使用以下命令:
python export_inference_graph.py --input_type image_tensor --pipeline_config_path training/faster_rcnn_inception_v2_pets.config --trained_checkpoint_prefix training/model.ckpt-XXXX --output_directory inference_graph
其中,XXXX
是文件名model.ckpt-XXXX.meta
中的数字。
在我的例子中是 model.ckpt-1970.meta
, XXXX = 1970
.
检查我在 following image 中的文件夹结构。
据我所知,Vinod 的回答与所提问题无关。
如果你想冻结你的模型来导出它,那么你可以使用 export_inference_graph。
但我知道你想要的是在 training.
期间冻结 variables
正如您自己提到的,您可以在 update_trainable_variables
或 freeze_variables
中指定变量,以便选择哪些变量将被训练,哪些不会。
本质上,这些被馈送到图表上的 filter_variables 函数,以便选择要包含和排除在训练之外的变量。从描述中可以看出,它需要一个使用正则表达式的模式。为了了解您的变量名称,包括或排除它们 - 您可以检查您的图表。一种方法是使用 TensorBoard 的图形选项卡。
另一方面,我想说这可能不是您的解决方案。在培训课程开始时,自然会期望高损失或损失增加。但是,如果在完整的训练课程之后,损失发生波动 - 那么您应该检查波动的幅度。如果波动很小,那是很自然的,如果幅度很大——那么训练配置可能有问题。只能通过更多信息来进一步分析出了什么问题,例如配置文件、损失图、数据示例等
我正在使用 TensorFlow 对象检测 API 在我的自定义数据集上重新训练 COCO 预训练的 Faster RCNN Inception v2 模型,最近注意到我的几个模型 BoxClassifierLoss 在训练期间变得更糟(例如,损失从 0.17 上升到 0.38,在 100 个时期后下降到 0.24(此后再次变得更糟或在没有改善的情况下波动)。
因此我有兴趣冻结 BoxClassifier 以保留显然效果更好的初始权重。
我读到 train.proto 中有一个 'freeze_variables' 参数,但我不确定要冻结哪些变量。
您可以冻结存储在以下位置的 model.ckpt
元(检查点文件)文件:
C:\tensorflow1\models\research\object_detection\training
这些检查点文件在训练期间经常存储,因此您可以在错误减少时检查此文件的详细信息,然后将相同的检查点冻结到您的最终模型。
要冻结模型,您可以使用以下命令:
python export_inference_graph.py --input_type image_tensor --pipeline_config_path training/faster_rcnn_inception_v2_pets.config --trained_checkpoint_prefix training/model.ckpt-XXXX --output_directory inference_graph
其中,XXXX
是文件名model.ckpt-XXXX.meta
中的数字。
在我的例子中是 model.ckpt-1970.meta
, XXXX = 1970
.
检查我在 following image 中的文件夹结构。
据我所知,Vinod 的回答与所提问题无关。 如果你想冻结你的模型来导出它,那么你可以使用 export_inference_graph。 但我知道你想要的是在 training.
期间冻结 variables正如您自己提到的,您可以在 update_trainable_variables
或 freeze_variables
中指定变量,以便选择哪些变量将被训练,哪些不会。
本质上,这些被馈送到图表上的 filter_variables 函数,以便选择要包含和排除在训练之外的变量。从描述中可以看出,它需要一个使用正则表达式的模式。为了了解您的变量名称,包括或排除它们 - 您可以检查您的图表。一种方法是使用 TensorBoard 的图形选项卡。
另一方面,我想说这可能不是您的解决方案。在培训课程开始时,自然会期望高损失或损失增加。但是,如果在完整的训练课程之后,损失发生波动 - 那么您应该检查波动的幅度。如果波动很小,那是很自然的,如果幅度很大——那么训练配置可能有问题。只能通过更多信息来进一步分析出了什么问题,例如配置文件、损失图、数据示例等