使用TensorFlow Object Detection API检测大量目标时存在遗漏问题求助
问题:TensorFlow Object Detection API检测大量目标时遗漏最后标注的目标
我使用TensorFlow Object Detection API搭配EfficientDet D0模型检测单张图片中的大量目标(超过100个)时,大部分目标能被正常检测,但训练数据集中部分目标被完全忽略。经观察发现,被忽略的均为使用LabelImg最后标注的目标:
- 第一张图:先标注左框,再标注中框,最后标注右框,右框被模型忽略
- 第二张图:先标注左框,再标注右框,最后标注中框,中框被模型忽略
(注:截图中模型整体表现较差是因为我专注于解决当前问题,尚未完成完整训练)
我曾怀疑是pipeline.config中的参数问题,尤其是max_detections_per_class、max_total_detections和max_number_of_boxes,于是将这些参数调至很高值(max_detections_per_class:3000,max_total_detections:60000,max_number_of_boxes:60000),但结果并未改变,因此我怀疑在配置文件或Object Detection API中存在隐藏的目标数量限制。
以下是我的pipeline.config配置:
model { ssd { num_classes: 90 image_resizer { keep_aspect_ratio_resizer { min_dimension: 512 max_dimension: 512 pad_to_max_dimension: true } } feature_extractor { type: "ssd_efficientnet-b0_bifpn_keras" conv_hyperparams { regularizer { l2_regularizer { weight: 3.9999998989515007e-05 } } initializer { truncated_normal_initializer { mean: 0.0 stddev: 0.029999999329447746 } } activation: SWISH batch_norm { decay: 0.9900000095367432 scale: true epsilon: 0.0010000000474974513 } force_use_bias: true } bifpn { min_level: 3 max_level: 7 num_iterations: 3 num_filters: 64 } } box_coder { faster_rcnn_box_coder { y_scale: 1.0 x_scale: 1.0 height_scale: 1.0 width_scale: 1.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 { weight_shared_convolutional_box_predictor { use_dropout: True dropout_keep_probability: 0.7 conv_hyperparams { regularizer { l2_regularizer { weight: 3.9999998989515007e-05 } } initializer { random_normal_initializer { mean: 0.0 stddev: 0.009999999776482582 } } activation: SWISH batch_norm { decay: 0.9900000095367432 scale: true epsilon: 0.0010000000474974513 } force_use_bias: true } depth: 64 num_layers_before_predictor: 3 kernel_size: 3 class_prediction_bias_init: -4.599999904632568 use_depthwise: true } } anchor_generator { multiscale_anchor_generator { min_level: 3 max_level: 7 anchor_scale: 4.0 aspect_ratios: 1.0 aspect_ratios: 2.0 aspect_ratios: 5.0 aspect_ratios: 0.4 scales_per_octave: 3 } } post_processing { batch_non_max_suppression { score_threshold: 0.2 iou_threshold: 0.5 max_detections_per_class: 3000 max_total_detections: 60000 } score_converter: SIGMOID } normalize_loss_by_num_matches: true loss { localization_loss { weighted_smooth_l1 { } } classification_loss { weighted_sigmoid_focal { gamma: 1.5 alpha: 0.25 } } 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 add_background_class: false } } train_config { batch_size: 4 data_augmentation_options { random_horizontal_flip { } random_patch_gaussian{ } random_adjust_brightness{ } random_adjust_contrast{ } random_rgb_to_gray{ probability: 0.2 } random_scale_crop_and_pad_to_square { output_size: 512 scale_min: 0.8 scale_max: 1.2 } } sync_replicas: true optimizer { momentum_optimizer { learning_rate { cosine_decay_learning_rate { learning_rate_base: 0.07999999821186066 total_steps: 300000 warmup_learning_rate: 0.0010000000474974513 warmup_steps: 2500 } } momentum_optimizer_value: 0.8999999761581421 } use_moving_average: false } fine_tune_checkpoint: "C:\Tensorflow\workspace\pre_trained_models\efficientdet_d0_coco17_tpu-32\checkpoint\ckpt-0" num_steps: 300000 startup_delay_steps: 0.0 replicas_to_aggregate: 8 max_number_of_boxes: 60000 unpad_groundtruth_tensors: false fine_tune_checkpoint_type: "detection" use_bfloat16: false fine_tune_checkpoint_version: V2 } train_input_reader: { label_map_path: "C:\Tensorflow\Dataset\label_map.pbtxt" tf_record_input_reader { input_path: "C:\Tensorflow\Dataset\train4.record" } } eval_config: { metrics_set: "coco_detection_metrics" use_moving_averages: false batch_size: 1; } eval_input_reader: { label_map_path: "C:\Tensorflow\Dataset\label_map.pbtxt" shuffle: false num_epochs: 1 tf_record_input_reader { input_path: "C:\Tensorflow\workspace\data\val.record" } }
内容的提问来源于stack exchange,提问作者haghehog
相关产品推荐
相关产品推荐

