/RoadDamageDetection-DeepLearning

It is intended to detect damage to road images taken by a camera. For this, deep learning technology, a subspace of machine learning, and Convolutional Neural Networks (CNN), one of the most popular types of deep neural networks, are used. The TensorFlow library is trained through the Ssd Inception V2 Coco pre-trained model to detect damage to images. As a result of the tests and trainings, the closest determinations are 86%. In order to increase the accuracy of the training, the use of GPU, the magnification of the data set and the number of iterations were considered.

Primary LanguagePython

RoadDamageDetection-DeepLearning

It is intended to detect damage to road images taken by a camera. For this, deep learning technology, a subspace of machine learning, and Convolutional Neural Networks (CNN), one of the most popular types of deep neural networks, are used. The TensorFlow library is trained through the Ssd Inception V2 Coco pre-trained model to detect damage to images. As a result of the tests and trainings, the closest determinations are 86%. In order to increase the accuracy of the training, the use of GPU, the magnification of the data set and the number of iterations were considered.

Stages Of The Project

  • Project Architect
  • Creating a DataSet
  • Creating LabelMap
  • Creating a TensorFlow Records File
  • Training Pipeline Configuration
  • Software and Features Required for Training
  • Training Process
  • Using TensorBoard for Visualization
  • Comparison of Different Models

Project Architect

Project-Architect

Creating a DataSet

Please pay attention to the disk capacity when downloading.

Creating LabelMap

LabelMap

Xml Output of Tagged Image:

Xml

Creating a TensorFlow Records File

TFRecords

After the tagging of the images to be used for the Train and Test stages, TFRecords, which serve as input data to the TensorFlow training model, are created. The TFRecord format is a simple format for storing a series of binary records. Protocol buffers are a cross-platform, interlingual library for efficient serialization of structured data.

Training Pipeline Configuration

The Following Config file must edit root path.

# SSD with Inception v2 configuration for MSCOCO Dataset.
# Users should configure the fine_tune_checkpoint field in the train config as
# well as the label_map_path and input_path fields in the train_input_reader and
# eval_input_reader. Search for "PATH_TO_BE_CONFIGURED" to find the fields that
# should be configured.

model {
   ssd {
       num_classes: 8 # Set this to the number of different label classes
       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
           }
       }
       similarity_calculator {
           iou_similarity {
           }
       }
       anchor_generator {
           ssd_anchor_generator {
               num_layers: 6
               min_scale: 0.2
               max_scale: 0.95
               aspect_ratios: 1.0
               aspect_ratios: 2.0
               aspect_ratios: 0.5
               aspect_ratios: 3.0
               aspect_ratios: 0.3333
               reduce_boxes_in_lowest_layer: true
           }
       }
       image_resizer {
           fixed_shape_resizer {
               height: 300
               width: 300
           }
       }
       box_predictor {
           convolutional_box_predictor {
               min_depth: 0
               max_depth: 0
               num_layers_before_predictor: 0
               use_dropout: false
               dropout_keep_probability: 0.8
               kernel_size: 3
               box_code_size: 4
               apply_sigmoid_to_scores: false
               conv_hyperparams {
               activation: RELU_6,
               regularizer {
                   l2_regularizer {
                       weight: 0.00004
                   }
               }
               initializer {
                       truncated_normal_initializer {
                           stddev: 0.03
                           mean: 0.0
                       }
                   }
               }
           }
       }
       feature_extractor {
           type: 'ssd_inception_v2' # Set to the name of your chosen pre-trained model
           min_depth: 16
           depth_multiplier: 1.0
           conv_hyperparams {
               activation: RELU_6,
               regularizer {
                   l2_regularizer {
                       weight: 0.00004
                   }
               }
               initializer {
                   truncated_normal_initializer {
                       stddev: 0.03
                       mean: 0.0
                   }
               }
               batch_norm {
                   train: true,
                   scale: true,
                   center: true,
                   decay: 0.9997,
                   epsilon: 0.001,
               }
           }
           override_base_feature_extractor_hyperparams: true
       }
       loss {
           classification_loss {
               weighted_sigmoid {
               }
           }
           localization_loss {
               weighted_smooth_l1 {
               }
           }
           hard_example_miner {
               num_hard_examples: 3000
               iou_threshold: 0.99
               loss_type: CLASSIFICATION
               max_negatives_per_positive: 3
               min_negatives_per_image: 0
           }
           classification_weight: 1.0
           localization_weight: 1.0
       }
       normalize_loss_by_num_matches: true
       post_processing {
           batch_non_max_suppression {
               score_threshold: 1e-8
               iou_threshold: 0.6
               max_detections_per_class: 100
               max_total_detections: 100
           }
           score_converter: SIGMOID
       }
   }
}

train_config: {
   batch_size: 12 # Increase/Decrease this value depending on the available memory (Higher values require more memory and vice-versa)
   optimizer {
       rms_prop_optimizer: {
           learning_rate: {
               exponential_decay_learning_rate {
                   initial_learning_rate: 0.004
                   decay_steps: 800720
                   decay_factor: 0.95
               }
           }
           momentum_optimizer_value: 0.9
           decay: 0.9
           epsilon: 1.0
       }
   }
   fine_tune_checkpoint: "|Enter the root path|/Tensorflow/workspace/training_demo/pre-trained-model/model.ckpt" # Path to extracted files of pre-trained model
   from_detection_checkpoint: true
   # Note: The below line limits the training process to 200K steps, which we
   # empirically found to be sufficient enough to train the pets dataset. This
   # effectively bypasses the learning rate schedule (the learning rate will
   # never decay). Remove the below line to train indefinitely.
   num_steps: 200000
   data_augmentation_options {
       random_horizontal_flip {
       }
   }
   data_augmentation_options {
       ssd_random_crop {
       }
   }
}

train_input_reader: {
   tf_record_input_reader {
       input_path: "|Enter the root path|/Tensorflow/workspace/training_demo/annotations/train.record" # Path to training TFRecord file
   }
   label_map_path: "|Enter the root path|/Tensorflow/workspace/training_demo/annotations/label_map.pbtxt" # Path to label map file
}

eval_config: {
   num_examples: 8000
   # Note: The below line limits the evaluation process to 10 evaluations.
   # Remove the below line to evaluate indefinitely.
   max_evals: 10
}

eval_input_reader: {
   tf_record_input_reader {
       input_path: "|Enter the root path|/Tensorflow/workspace/training_demo/annotations/test.record" # Path to testing TFRecord
   }
   label_map_path: "|Enter the root path|/Tensorflow/workspace/training_demo/annotations/label_map.pbtxt" # Path to label map file
   shuffle: false
   num_readers: 1
}

Software and Features Required for Training

Required

Training Process

Execute on Python Command Line the following code.

Training1

The result will look like this:

Training2

Using TensorBoard for Visualization

TensorBoard

Test Result

Test1

Test2

Test3

PROJECT END

If you have any problems, please contact me via the links LinkedIn (Ertuğrul Kuran)

Email Address: ertkrn@hotmail.com