Tensorflow 对象检测 API:从导出的模型检查点进行训练
Tensorflow Object Detection API: Train from exported model checkpoint
我之前导出了一个 RetinaNet 模型(最初来自对象检测动物园),该模型已使用 Tensorflow 对象检测 API(Tensorflow 版本 2.4.1)在自定义数据集上进行了微调。下面是导出的模型文件夹的外观。
当运行对模型进行评估(如下所示)时,它的 mAP@0.5IOU 为 0.5。
python model_main_tf2.py --model_dir=exported-models/retinanet --pipeline_config_path=exported-models/retinanet/pipeline.config --checkpoint_dir=exported-models/retinanet/checkpoint
问题
由于不幸的情况,我没有训练模型时的训练文件夹。由于我最近获得了更多数据,我想使用导出的模型作为进一步训练的起点,并在 pipeline.config
中设置 fine_tune_checkpoint: "exported-models/retinanet/checkpoint/ckpt-0"
用于新训练:
fine_tune_checkpoint: "exported-models/retinanet/checkpoint/ckpt-0"
num_steps: 25000
startup_delay_steps: 0.0
replicas_to_aggregate: 8
max_number_of_boxes: 100
unpad_groundtruth_tensors: false
fine_tune_checkpoint_type: "detection"
use_bfloat16: false
fine_tune_checkpoint_version: V2
然而,当使用 model_main_tf2.py
脚本开始训练时,第一个检查点(在第 0 步)的分数很糟糕 - 即使在评估 运行 的同一数据集上对于导出的模型。
我希望第一个检查点与导出模型的分数具有相同的分数(至少对于相同的测试集)。这是错误的假设吗?在那种情况下,为什么?
我终于找到了下面的here:
// Whether to load all checkpoint vars that match model variable names and
// sizes. This option is only available if `from_detection_checkpoint` is
// True. This option is *not* supported for TF2 --- setting it to true
// will raise an error. **Instead, set fine_tune_checkpoint_type: 'full'.**
optional bool load_all_detection_checkpoint_vars = 19 [default = false];
通过将 fine_tune_checkpoint_type
设置为“完整”,我得到了第一个检查点的正确地图(在 0 步)。
我之前导出了一个 RetinaNet 模型(最初来自对象检测动物园),该模型已使用 Tensorflow 对象检测 API(Tensorflow 版本 2.4.1)在自定义数据集上进行了微调。下面是导出的模型文件夹的外观。
当运行对模型进行评估(如下所示)时,它的 mAP@0.5IOU 为 0.5。
python model_main_tf2.py --model_dir=exported-models/retinanet --pipeline_config_path=exported-models/retinanet/pipeline.config --checkpoint_dir=exported-models/retinanet/checkpoint
问题
由于不幸的情况,我没有训练模型时的训练文件夹。由于我最近获得了更多数据,我想使用导出的模型作为进一步训练的起点,并在 pipeline.config
中设置 fine_tune_checkpoint: "exported-models/retinanet/checkpoint/ckpt-0"
用于新训练:
fine_tune_checkpoint: "exported-models/retinanet/checkpoint/ckpt-0"
num_steps: 25000
startup_delay_steps: 0.0
replicas_to_aggregate: 8
max_number_of_boxes: 100
unpad_groundtruth_tensors: false
fine_tune_checkpoint_type: "detection"
use_bfloat16: false
fine_tune_checkpoint_version: V2
然而,当使用 model_main_tf2.py
脚本开始训练时,第一个检查点(在第 0 步)的分数很糟糕 - 即使在评估 运行 的同一数据集上对于导出的模型。
我希望第一个检查点与导出模型的分数具有相同的分数(至少对于相同的测试集)。这是错误的假设吗?在那种情况下,为什么?
我终于找到了下面的here:
// Whether to load all checkpoint vars that match model variable names and
// sizes. This option is only available if `from_detection_checkpoint` is
// True. This option is *not* supported for TF2 --- setting it to true
// will raise an error. **Instead, set fine_tune_checkpoint_type: 'full'.**
optional bool load_all_detection_checkpoint_vars = 19 [default = false];
通过将 fine_tune_checkpoint_type
设置为“完整”,我得到了第一个检查点的正确地图(在 0 步)。