i am pretty new to this all so bare with me here.
I've made myself a program to recognise tools, issue is, while running it will see the object, but the name will be N/A, note that this doesn't happen to every label (doesn't recognise screwdrivers yet but when it thinks it sees one, it does label it Screwdriver instead of N/A)
Now, I've checked countless forums from people with this issue and i cannot find why this is happening. I have 16 classes for the 16 objects, labelmap is in order and exactly as shown on multiple other sites.
All out of idea's here ..
:pipeline:
model { ssd { num_classes: 16 image_resizer { keep_aspect_ratio_resizer { min_dimension: 512 max_dimension: 512 pad_to_max_dimension: false } } feature_extractor { type: "ssd_efficientnet-b0_bifpn_keras" conv_hyperparams { regularizer { l2_regularizer { weight: 4e-05 } } initializer { truncated_normal_initializer { mean: 0.0 stddev: 0.03 } } activation: SWISH batch_norm { decay: 0.99 scale: true epsilon: 0.001 } 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: 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: SWISH batch_norm { decay: 0.99 scale: true epsilon: 0.001 } force_use_bias: true } depth: 64 num_layers_before_predictor: 3 kernel_size: 3 class_prediction_bias_init: -4.6 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: 3 } } post_processing { batch_non_max_suppression { score_threshold: 1e-08 iou_threshold: 0.5 max_detections_per_class: 100 max_total_detections: 100 } 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: 1 data_augmentation_options { random_horizontal_flip { } } data_augmentation_options { random_scale_crop_and_pad_to_square { output_size: 512 scale_min: 0.1 scale_max: 2.0 } } sync_replicas: true optimizer { momentum_optimizer { learning_rate { cosine_decay_learning_rate { learning_rate_base: 0.08 total_steps: 300000 warmup_learning_rate: 0.001 warmup_steps: 2500 } } momentum_optimizer_value: 0.9 } use_moving_average: false } fine_tune_checkpoint: "C:/Users/djust/Desktop/Object_detection/models/research/object_detection/efficientdet_d0_coco17_tpu-32/checkpoint/ckpt-0"
num_steps: 300000 startup_delay_steps: 0.0 replicas_to_aggregate: 8 max_number_of_boxes: 100 unpad_groundtruth_tensors: false
fine_tune_checkpoint_type: "detection" use_bfloat16: false
fine_tune_checkpoint_version: V2 } train_input_reader {
label_map_path: "C:/Users/djust/Desktop/Object_detection/models/research/object_detection/training/labelmap.pbtxt" tf_record_input_reader { input_path: "C:/Users/djust/Desktop/Object_detection/models/research/object_detection/train.record" } } eval_config { metrics_set: "coco_detection_metrics"
use_moving_averages: false batch_size: 1 } eval_input_reader {
label_map_path: "C:/Users/djust/Desktop/Object_detection/models/research/object_detection/training/labelmap.pbtxt" shuffle: false num_epochs: 1 tf_record_input_reader { input_path: "C:/Users/djust/Desktop/Object_detection/models/research/object_detection/test.record" } }
:Labelmap:
item { display_name: 'person' name: 'person' id: 1 } item { display_name: 'crimping_tool' name: 'crimping_tool' id: 2 } item { display_name: 'drill_set' name: 'drill_set' id: 3 } item { display_name: 'utility_knife' name: 'utility_knife' id: 4 } item { display_name: 'screwdriver' name: 'screwdriver' id: 5 } item { display_name: 'stripping_pliers' name: 'stripping_pliers' id: 6 } item { display_name: 'cutting_pliers' name: 'cutting_pliers' id: 7 } item { display_name: 'stripping_tool' name: 'stripping_tool' id: 8 } item { display_name: 'pliers' name: 'pliers' id: 9 } item { display_name: 'pipewrench' name: 'pipewrench' id: 10 } item { display_name: 'measuring_tool' name: 'measuring_tool' id: 11 } item { display_name: 'cable_cutter_angled' name: 'cable_cutter_angled' id: 12 } item { display_name: 'stripping_tool_2' name: 'stripping_tool_2' id: 13 } item { display_name: 'wrench' name: 'wrench' id: 14 } item { display_name: 'hexkey_set' name: 'hexkey_set' id: 15 } item { display_name: 'drill_set_2' name: 'drill_set_2' id: 16 }
A possible cause could be that in the TFrecords that you use the "label ID" is not correct. Can you validate that when converting your images and annotations to those TF records that the 'image/object/class/label' is set correctly?
I also noticed there is a "display_name" in your labelmap file, I've never used the display_name and I'm not sure if that could also be a cause of your N/A labels.
If the labels are correctly set in the tfrecord, then I would advise to try a labelmap file with the following structure: item { id: 1 name: 'person' }
item { id: 2 name: 'crimping_tool' }
item { id: 3 name: 'drill_set' }
...