为啥来自 Tensorflow 2 对象检测 API 的微调模型上的 mAP 较低?
Posted
技术标签:
【中文标题】为啥来自 Tensorflow 2 对象检测 API 的微调模型上的 mAP 较低?【英文标题】:Why low mAP on fine-tuned model from Tensorflow 2 Object Detection API?为什么来自 Tensorflow 2 对象检测 API 的微调模型上的 mAP 较低? 【发布时间】:2021-12-19 15:25:14 【问题描述】:我遵循所有步骤并在线阅读所有内容,并且我从 TF2 OD API 的 Model Zoo 成功训练了 SSD-MobileNetV1。
我使用新类“Handgun”和“Knife”微调了这个模型,并使用了包含 3500 张图像的平衡数据集。训练进行得很好,但是当我使用“pascal_voc_detection_metrics”运行评估过程(用于验证)时,我使用“Handgun”类达到了 0.005 AP@0.5(检测模型设法达到或多或少的 0.005 AP),这非常低,但 0.93 AP@0.5 与“刀”类。
我不明白为什么。我真的阅读了所有内容,但找不到解决方案。
SDD-MobileNetV1的配置:
model
ssd
num_classes: 2
image_resizer
fixed_shape_resizer
height: 640
width: 640
feature_extractor
type: "ssd_mobilenet_v1_fpn_keras"
depth_multiplier: 1.0
min_depth: 16
conv_hyperparams
regularizer
l2_regularizer
weight: 4e-05
initializer
random_normal_initializer
mean: 0.0
stddev: 0.01
activation: RELU_6
batch_norm
decay: 0.997
scale: true
epsilon: 0.001
override_base_feature_extractor_hyperparams: true
fpn
min_level: 3
max_level: 7
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: 4e-05
initializer
random_normal_initializer
mean: 0.0
stddev: 0.01
activation: RELU_6
batch_norm
decay: 0.997
scale: true
epsilon: 0.001
depth: 256
num_layers_before_predictor: 4
kernel_size: 3
class_prediction_bias_init: -4.6
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: 1e-08
iou_threshold: 0.6
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
sync_replicas: true
optimizer
momentum_optimizer
learning_rate
cosine_decay_learning_rate
learning_rate_base: 0.04
total_steps: 25000
warmup_learning_rate: 0.013333
warmup_steps: 2000
momentum_optimizer_value: 0.9
use_moving_average: false
fine_tune_checkpoint: "pre-trained-models/ssd_mobilenet_v1_fpn_640x640_coco17_tpu-8/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"
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: "pascal_voc_detection_metrics"
use_moving_averages: false
batch_size: 1
eval_input_reader
label_map_path: "/annotations/label_map.pbtxt"
shuffle: false
num_epochs: 1
tf_record_input_reader
input_path: "/annotations/validation.record"
我使用 model_main_tf2.py
进行训练和评估,并使用 roboflow 在 TFRecords 中转换我的图像。
【问题讨论】:
【参考方案1】:这是link 报告的库的错误。 COCO 指标没有这个问题,所以用它来评估你的模型。 问题还没有解决。如果您想关注对代码所做的更新(它们工作正常),请点击上一个链接以及这个link
【讨论】:
以上是关于为啥来自 Tensorflow 2 对象检测 API 的微调模型上的 mAP 较低?的主要内容,如果未能解决你的问题,请参考以下文章
TensorFlow 自定义对象检测结果令人失望 - 为啥?
Tensorflow对象检测:为啥使用ssd mobilnet v1时图像中的位置会影响检测精度?
如何使用 Tensorflow 2 对象检测 API 恢复微调模型以进行测试?