【问题标题】: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.metaXXXX = 1970

    following image 中检查我的文件夹结构。

    【讨论】:

      【解决方案2】:

      据我所知,Vinod 的回答与提出的问题无关。 如果要冻结模型以导出它,则可以使用 export_inference_graph。 但我知道您希望在训练期间冻结变量

      正如您自己提到的,您可以在 update_trainable_variablesfreeze_variables 中指定变量,以便选择哪些变量将被训练,哪些不会。 本质上,这些被馈送到图表上的filter_variables 函数,以便选择要在训练中包含和排除的变量。从描述中可以看出,它期望使用正则表达式的模式。为了了解变量的名称,包括或排除它们 - 您可以检查您的图表。一种方法是使用 TensorBoard,Graph 选项卡。

      另一方面,我想说这可能不是您的解决方案。在培训课程开始时,很自然地会期望高损失或损失增加。但是,如果在完整的培训课程之后,损失发生波动 - 那么您应该检查波动的幅度。如果是轻微的波动,那是自然的,如果幅度很大——那么可能是训练配置出了问题。只能通过更多信息来进一步分析出了什么问题,例如配置文件、损失图、数据示例等

      【讨论】:

        猜你喜欢
        • 2018-02-07
        • 2018-05-31
        • 2021-03-03
        • 2019-12-08
        • 1970-01-01
        • 1970-01-01
        • 2021-11-02
        • 2020-12-24
        • 2018-06-14
        相关资源
        最近更新 更多