Exemple #1
0
 def train(self,
           img_folder,
           ann_folder,
           nb_epoch,
           project_folder,
           batch_size=8,
           do_augment=False,
           learning_rate=1e-4, 
           train_times=1,
           valid_times=1,
           valid_img_folder="",
           valid_ann_folder="",
           first_trainable_layer=None,
           ignore_zero_class=False):
     
     if ignore_zero_class:
         loss_k = masked_categorical_crossentropy
     else:
         loss_k = 'categorical_crossentropy'
     train_generator = create_batch_generator(img_folder, ann_folder, self._input_size, self._output_size, self._n_classes,
                                                  batch_size,train_times,do_augment)
     if valid_img_folder:
         validation_generator = create_batch_generator(valid_img_folder, valid_ann_folder, self._input_size,self._output_size, self._n_classes,batch_size,valid_times)
     
     return train(self._network,loss_k,train_generator,validation_generator,learning_rate, nb_epoch, project_folder, first_trainable_layer)
Exemple #2
0
    def train(self,
              img_folder,
              ann_folder,
              nb_epoch,
              project_folder,
              batch_size=8,
              do_augment=False,
              learning_rate=1e-4, 
              train_times=1,
              valid_times=1,
              valid_img_folder="",
              valid_ann_folder="",
              first_trainable_layer=None,
              ignore_zero_class=False,
              metrics='val_loss'):
        
        if metrics != "val_accuracy" and metrics != "val_loss":
            print("Unknown metric for SegNet, valid options are: val_loss or val_accuracy. Defaulting ot val_loss")
            metrics = "val_loss"

        if ignore_zero_class:
            loss_k = masked_categorical_crossentropy
        else:
            loss_k = 'categorical_crossentropy'
        train_generator = create_batch_generator(img_folder, ann_folder, self._input_size, self._output_size, self._n_classes,
                                                 batch_size,train_times,do_augment)
        if valid_img_folder:
            validation_generator = create_batch_generator(valid_img_folder, valid_ann_folder, self._input_size,self._output_size, self._n_classes,batch_size,valid_times,False)
        
        return train(self._network,loss_k,train_generator,validation_generator,learning_rate, nb_epoch, project_folder, first_trainable_layer, self, metrics)
Exemple #3
0
    def train(self,
              img_folder,
              nb_epoch,
              project_folder,
              batch_size=8,
              augumentation=False,
              learning_rate=1e-4,
              train_times=1,
              valid_times=1,
              valid_img_folder="",
              first_trainable_layer=None,
              metrics="val_loss"):

        if metrics != "val_accuracy" and metrics != "val_loss":
            print(
                "Unknown metric for Classifier, valid options are: val_loss or val_accuracy. Defaulting ot val_loss"
            )
            metrics = "val_loss"

        train_generator, validation_generator = create_datagen(
            img_folder, valid_img_folder, batch_size, self._input_size,
            project_folder, augumentation)
        model_layers, model_path = train(self._network,
                                         'categorical_crossentropy',
                                         train_generator, validation_generator,
                                         learning_rate, nb_epoch,
                                         project_folder, first_trainable_layer,
                                         self, metrics)
        if self._bottleneck_layer:
            self.save_bottleneck(model_path, self._bottleneck_layer)
        return model_layers, model_path
Exemple #4
0
    def train(self,
              img_folder,
              ann_folder,
              nb_epoch,
              project_folder,
              batch_size=8,
              jitter=True,
              learning_rate=1e-4,
              train_times=1,
              valid_times=1,
              valid_img_folder="",
              valid_ann_folder="",
              first_trainable_layer=None,
              metrics="mAP",
              validation_freq=1):

        # 1. get annotations
        train_annotations, valid_annotations = get_train_annotations(
            self._labels,
            img_folder,
            ann_folder,
            valid_img_folder,
            valid_ann_folder,
            is_only_detect=False)
        # 1. get batch generator
        valid_batch_size = len(valid_annotations) * valid_times
        if valid_batch_size < batch_size:
            raise ValueError(
                "Not enough validation images: batch size {} is larger than {} validation images. Add more validation images or decrease batch size!"
                .format(batch_size, valid_batch_size))

        train_batch_generator = self._get_batch_generator(train_annotations,
                                                          batch_size,
                                                          train_times,
                                                          jitter=jitter)
        valid_batch_generator = self._get_batch_generator(valid_annotations,
                                                          batch_size,
                                                          valid_times,
                                                          jitter=False)

        # 2. To train model get keras model instance & loss fucntion
        model = self._yolo_network.get_model(first_trainable_layer)
        loss = self._get_loss_func(batch_size)

        # 3. Run training loop
        return train(model,
                     loss,
                     train_batch_generator,
                     valid_batch_generator,
                     learning_rate=learning_rate,
                     nb_epoch=nb_epoch,
                     project_folder=project_folder,
                     first_trainable_layer=first_trainable_layer,
                     network=self,
                     metrics="mAP",
                     validation_freq=validation_freq)
Exemple #5
0
    def train(self,
              img_folder,
              ann_folder,
              nb_epoch,
              project_folder,
              batch_size=8,
              jitter=True,
              learning_rate=1e-4,
              train_times=1,
              valid_times=1,
              valid_img_folder="",
              valid_ann_folder="",
              first_trainable_layer=None,
              metrics="mAP"):

        # 1. get annotations
        train_annotations, valid_annotations = get_train_annotations(
            self._labels,
            img_folder,
            ann_folder,
            valid_img_folder,
            valid_ann_folder,
            is_only_detect=False)
        # 1. get batch generator
        train_batch_generator = self._get_batch_generator(train_annotations,
                                                          batch_size,
                                                          train_times,
                                                          jitter=jitter)
        valid_batch_generator = self._get_batch_generator(valid_annotations,
                                                          batch_size,
                                                          valid_times,
                                                          jitter=False)

        # 2. To train model get keras model instance & loss fucntion
        model = self._yolo_network.get_model(first_trainable_layer)
        loss = self._get_loss_func(batch_size)

        # 3. Run training loop
        return train(model,
                     loss,
                     train_batch_generator,
                     valid_batch_generator,
                     learning_rate=learning_rate,
                     nb_epoch=nb_epoch,
                     project_folder=project_folder,
                     first_trainable_layer=first_trainable_layer,
                     network=self,
                     metrics="mAP")
Exemple #6
0
    def train(self,
              img_folder,
              nb_epoch,
              project_folder,
              batch_size=8,
              augumentation=False,
              learning_rate=1e-4,
              train_times=1,
              valid_times=1,
              valid_img_folder="",
              first_trainable_layer=None):

        train_generator, validation_generator = create_datagen(
            img_folder, valid_img_folder, batch_size, self._input_size,
            project_folder, augumentation)
        return train(self._network, 'categorical_crossentropy',
                     train_generator, validation_generator, learning_rate,
                     nb_epoch, project_folder, first_trainable_layer)