I try retrain TF Object Detection API model from checkpoint with already .config file for training pipeline with tf.estimator.train_and_evaluate() method like in models/research/object_detection/model_main.py. And it saves checkpoints every N steps or every N seconds.
But I want to save only one best model like in Keras.
Is there some way to do it with TF Object Detection API model? Maybe some options/callbacks for tf.Estimator.train or some way to use Detection API with Keras?
I have been using https://github.com/bluecamel/best_checkpoint_copier which works well for me.
Example:
best_copier = BestCheckpointCopier(name='best', # directory within model directory to copy checkpoints tocheckpoints_to_keep=10, # number of checkpoints to keepscore_metric='metrics/total_loss', # metric to use to determine "best"compare_fn=lambda x,y: x.score < y.score, # comparison function used to determine "best" checkpoint (x is the current checkpoint; y is the previously copied checkpoint with the highest/worst score)sort_key_fn=lambda x: x.score,sort_reverse=False) # sort order when discarding excess checkpoints
pass it to your eval_spec:
eval_spec = tf.estimator.EvalSpec(...exporters=best_copier,...)