【问题标题】:Can the BoxClassifier in the Faster RCNN Inception v2 Model Be Frozen?Faster RCNN Inception v2模型中的BoxClassifier能否被冻结?
【发布时间】:2019-11-04 14:43:42
【问题描述】:
我正在使用 TensorFlow 对象检测 API 在我的自定义数据集上重新训练 COCO 预训练的 Faster RCNN Inception v2 模型,最近注意到我的几个模型 BoxClassifierLoss 在训练期间变得更糟(例如从 0.17 损失到0.38 并在 100 个 epoch 后降至 0.24(此后再次恶化或波动而没有改善)。
因此,我有兴趣冻结 BoxClassifier 以保留显然效果更好的初始权重。
我读到train.proto 中有一个“freeze_variables”参数,但我不确定要准确冻结哪些变量。
【问题讨论】:
标签:
python
tensorflow
object-detection-api
【解决方案1】:
您可以冻结存储在以下位置的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 中检查我的文件夹结构。
【解决方案2】:
据我所知,Vinod 的回答与提出的问题无关。
如果要冻结模型以导出它,则可以使用 export_inference_graph。
但我知道您希望在训练期间冻结变量。
正如您自己提到的,您可以在 update_trainable_variables 或 freeze_variables 中指定变量,以便选择哪些变量将被训练,哪些不会。
本质上,这些被馈送到图表上的filter_variables 函数,以便选择要在训练中包含和排除的变量。从描述中可以看出,它期望使用正则表达式的模式。为了了解变量的名称,包括或排除它们 - 您可以检查您的图表。一种方法是使用 TensorBoard,Graph 选项卡。
另一方面,我想说这可能不是您的解决方案。在培训课程开始时,很自然地会期望高损失或损失增加。但是,如果在完整的培训课程之后,损失发生波动 - 那么您应该检查波动的幅度。如果是轻微的波动,那是自然的,如果幅度很大——那么可能是训练配置出了问题。只能通过更多信息来进一步分析出了什么问题,例如配置文件、损失图、数据示例等