TensorFlow2自定义目标检测器训练评估与TensorBoard问题咨询
TensorFlow2自定义SSD目标检测器相关问题
基础信息
我在训练TensorFlow2自定义目标检测器时遇到评估相关问题,查阅资料后可知训练和评估需要作为两个独立进程运行,因此需要新开Anaconda Prompt启动评估任务。当前训练的是ssd_mobilenetv2 640x640版本,pipeline配置如下:
model { ssd { num_classes: 6 image_resizer { fixed_shape_resizer { height: 640 width: 640 } } feature_extractor { type: "ssd_mobilenet_v2_fpn_keras" depth_multiplier: 1.0 min_depth: 16 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.996999979019165 scale: true epsilon: 0.0010000000474974513 } } use_depthwise: true override_base_feature_extractor_hyperparams: true fpn { min_level: 3 max_level: 7 additional_layer_depth: 128 } } 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 { weight_shared_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.996999979019165 scale: true epsilon: 0.0010000000474974513 } } depth: 128 num_layers_before_predictor: 4 kernel_size: 3 class_prediction_bias_init: -4.599999904632568 share_prediction_tower: true 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: 0.5 scales_per_octave: 2 } } 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 { } } classification_loss { weighted_sigmoid_focal { gamma: 2.0 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 } } train_config { batch_size: 4 data_augmentation_options { random_horizontal_flip { } } #data_augmentation_options { #random_crop_image { #min_object_covered: 0.0 #min_aspect_ratio: 0.75 #max_aspect_ratio: 3.0 #min_area: 0.75 #max_area: 1.0 #overlap_thresh: 0.0 #} #} optimizer { momentum_optimizer { learning_rate { cosine_decay_learning_rate { learning_rate_base: 0.04999999821186066 total_steps: 50000 warmup_learning_rate: 0.0026666000485420227 warmup_steps: 600 } } momentum_optimizer_value: 0.8999999761581421 } use_moving_average: false } fine_tune_checkpoint: "pre-trained-models\ssd_mobilenet_v2_fpnlite_640x640_coco17_tpu-8\checkpoint\ckpt-0" num_steps: 50000 startup_delay_steps: 0.0 replicas_to_aggregate: 8 max_number_of_boxes: 100 unpad_groundtruth_tensors: false fine_tune_checkpoint_type: "detection" fine_tune_checkpoint_version: V2 from_detection_checkpoint: true } train_input_reader { label_map_path: "annotations/label_map.pbtxt" tf_record_input_reader { input_path: "data/train.record" } } eval_config { metrics_set: "coco_detection_metrics" use_moving_averages: false } eval_input_reader { label_map_path: "annotations/label_map.pbtxt" shuffle: false num_epochs: 1 tf_record_input_reader { input_path: "data/test.record" } }
启动命令
训练启动命令
python model_main_tf2.py --model_dir=models/my_ssd2_3/ --pipeline_config_path=models/my_ssd2_3/pipeline.config --sample_1_of_n_eval_examples 1 --logtostderr
原本设置评估样本数参数是希望自动启动评估任务,但未生效,因此在另一个终端窗口启动评估,命令如下:
评估启动命令
python model_main_tf2.py --model_dir=models/my_ssd2_3 --pipeline_config_path=models/my_ssd2_3/pipeline.config --checkpoint_dir=models/my_ssd2_3/ --alsologtostderr
异常情况
评估启动后训练任务立即崩溃。
当前使用的硬件配置:
- 8GB RAM
- NVIDIA GTX960M(2GB显存)
待解决问题
- 3000x3000尺寸的输入图片是否会导致预处理阶段加载数据量过大引发崩溃?如果是该原因,有没有无需提前resize图片(避免重新标注)的解决方案?麻烦说明训练启动阶段的内存分配逻辑。
- TensorBoard监控训练时,展示的图片亮度参差不齐,修改model_lib_v2.py第627行代码为以下内容后仍未解决,请问有什么解决方案?
data= (features[fields.InputDataFields.image]-np.min(features[fields.InputDataFields.image]))/(np.max(features[fields.InputDataFields.image])-np.min(features[fields.InputDataFields.image]))
- 如何在TensorBoard中查看模型输出的预测边界框?
内容的提问来源于stack exchange,提问作者Milán Kriston
相关产品推荐
相关产品推荐

