TensorFlow目标检测训练出现-1 mAP、检测结果为N/A问题求助
自定义SSD MobileNet V2目标检测模型评估异常问题
在Colab上遵循目标检测API教程训练自定义目标检测模型,采用SSD MobileNet V2架构,使用2083张训练样本、263张测试样本。训练完成后通过TensorBoard查看,模型似乎能检测到部分物体,但评估时仅得到**-1 mAP**,且检测结果全为"N/A"、置信度100%(见下图)。


以下是模型配置文件(完整相关文件见我的GitHub仓库):
model { ssd { num_classes: 8 image_resizer { fixed_shape_resizer { height: 300 width: 300 } } feature_extractor { type: "ssd_mobilenet_v2_keras" depth_multiplier: 1.0 min_depth: 16 conv_hyperparams { regularizer { l2_regularizer { weight: 3.9999998989515007e-05 } } initializer { truncated_normal_initializer { mean: 0.0 stddev: 0.029999999329447746 } } activation: RELU_6 batch_norm { decay: 0.9700000286102295 center: true scale: true epsilon: 0.0010000000474974513 train: true } } override_base_feature_extractor_hyperparams: true } box_coder { faster_rcnn_box_coder { y_scale: 10.0 x_scale: 10.0 height_scale: 5.0 width_scale: 5.0 } } matcher { argmax_matcher { matched_threshold: 0.5 unmatched_threshold: 0.5 ignore_thresholds: false negatives_lower_than_unmatched: true force_match_for_each_row: true use_matmul_gather: true } } similarity_calculator { iou_similarity { } } box_predictor { convolutional_box_predictor { conv_hyperparams { regularizer { l2_regularizer { weight: 3.9999998989515007e-05 } } initializer { random_normal_initializer { mean: 0.0 stddev: 0.009999999776482582 } } activation: RELU_6 batch_norm { decay: 0.9700000286102295 center: true scale: true epsilon: 0.0010000000474974513 train: true } } min_depth: 0 max_depth: 0 num_layers_before_predictor: 0 use_dropout: false dropout_keep_probability: 0.800000011920929 kernel_size: 1 box_code_size: 4 apply_sigmoid_to_scores: false class_prediction_bias_init: -4.599999904632568 } } anchor_generator { ssd_anchor_generator { num_layers: 6 min_scale: 0.20000000298023224 max_scale: 0.949999988079071 aspect_ratios: 1.0 aspect_ratios: 2.0 aspect_ratios: 0.5 aspect_ratios: 3.0 aspect_ratios: 0.33329999446868896 } } post_processing { batch_non_max_suppression { score_threshold: 9.99999993922529e-09 iou_threshold: 0.6000000238418579 max_detections_per_class: 100 max_total_detections: 100 use_static_shapes: false } score_converter: SIGMOID } normalize_loss_by_num_matches: true loss { localization_loss { weighted_smooth_l1 { delta: 1.0 } } classification_loss { weighted_sigmoid_focal { gamma: 2.0 alpha: 0.75 } } classification_weight: 1.0 localization_weight: 1.0 } encode_background_as_zeros: true normalize_loc_loss_by_codesize: true inplace_batchnorm_update: true freeze_batchnorm: false } } train_config { batch_size: 4 data_augmentation_options { random_horizontal_flip { } } data_augmentation_options { ssd_random_crop { } } sync_replicas: true optimizer { momentum_optimizer { learning_rate { cosine_decay_learning_rate { learning_rate_base: 0.001 total_steps: 25000 warmup_learning_rate: 0.0001 warmup_steps: 2500 } } momentum_optimizer_value: 0.8999999761581421 } use_moving_average: false } fine_tune_checkpoint: "pre-trained-models/ssd_mobilenet_v2_320x320_coco17_tpu-8/checkpoint/ckpt-0" num_steps: 25000 startup_delay_steps: 0.0 replicas_to_aggregate: 8 max_number_of_boxes: 10 unpad_groundtruth_tensors: false fine_tune_checkpoint_type: "detection" fine_tune_checkpoint_version: V2 } train_input_reader { label_map_path: "annotations/label_map.pbtxt" tf_record_input_reader { input_path: "annotations/train_*.record" } } eval_config: { metrics_set: "coco_detection_metrics" use_moving_averages: false batch_size: 1 eval_interval_secs: 30 num_examples: 236 # no of test images num_visualizations: 10 # no of visualizations for tensorboard max_num_boxes_to_visualize: 5 visualize_groundtruth_boxes: true } eval_input_reader { label_map_path: "annotations/label_map.pbtxt" shuffle: true num_epochs: 1 tf_record_input_reader { input_path: "annotations/test_*.record" } }
已尝试的排查方法:
- 修改TFRecord文件生成代码
- 调整batch size和训练步数
- 将label_map.pbtxt内容改为全拉丁字符
- 检查TFRecord文件是否正常生成
问题未解决,且训练至100~200步时,评估就出现-1 mAP、检测结果为"N/A"的情况。
内容的提问来源于stack exchange,提问作者muheonkom
相关产品推荐
相关产品推荐

