Esempio n. 1
0
    def validation(self):

        valid_data = parse_annotation(YoloParams.VALIDATION_ANN_PATH,
                                      YoloParams.VALIDATION_IMG_PATH)

        generator = YoloDataGenerator(valid_data, shuffle=True)

        yolo_eval = YoloEvaluate(generator=generator, model=self.inf_model)
        AP = yolo_eval.comp_map()

        _AP_items = [[class_label, ap] for class_label, ap in AP.items()]
        AP_items = sorted(_AP_items, key=lambda x: x[1], reverse=True)

        for class_label, ap in AP_items:
            print("AP( %s ): %.3f" % (class_label, ap))

        # Store AP results as csv
        #df_ap = pd.DataFrame.from_dict(AP, orient='index')
        #df_ap.loc['mAP'] = df_ap.mean()
        #df_ap.to_csv('validation_maP.csv', header=False)

        print('-------------------------------')
        print("mAP: %.3f" % (np.mean(list(AP.values()))))

        return AP
Esempio n. 2
0
def gen_anchors(fname):

    imgs = parse_annotation(YoloParams.TRAIN_ANN_PATH,
                            YoloParams.TRAIN_IMG_PATH)

    data_wh = []
    for img in imgs:
        data_wh += exrtract_wh(img)

    clustering = KMeans(NUM_CENTROIDS)

    centroids, _ = clustering.fit(np.array(data_wh))
    anchors = list(centroids.flatten())

    anchors_text = "".join(["%.5f, "%a \
    if i < len(anchors)-1 else "%.5f"%a for i,a in enumerate(anchors)])

    fname = fname if fname != 'custom_' else 'custom_anchors.txt'

    with open(fname, 'w') as f:
        f.write("%s" % anchors_text)

    print("\nAnchors: \n")
    print(anchors_text)
    print("\n\tSored at: %s\n" % (fname))

    return anchors
Esempio n. 3
0
    def training(self):

        train_data = parse_annotation(YoloParams.TRAIN_ANN_PATH,
                                      YoloParams.TRAIN_IMG_PATH)
        valid_data = parse_annotation(YoloParams.VALIDATION_ANN_PATH,
                                      YoloParams.VALIDATION_IMG_PATH)

        train_gen = YoloDataGenerator(train_data, shuffle=True, augment=True)
        valid_gen = YoloDataGenerator(valid_data, shuffle=True)

        early_stop = EarlyStopping(monitor='val_loss',
                                   min_delta=0.001,
                                   patience=3,
                                   mode='min',
                                   verbose=1)

        log_path = setup_logging()

        checkpoint_path = os.path.join(log_path, self.trained_model_name)
        checkpoint = ModelCheckpoint(
            checkpoint_path,
            #monitor='val_loss',
            monitor='loss',
            verbose=1,
            save_best_only=True,
            mode='min',
            period=1)

        #tb_path = os.path.join(log_path, )
        tensorboard = YoloTensorBoard(log_dir=log_path,
                                      histogram_freq=0,
                                      write_graph=True,
                                      write_images=False)
        """
        optimizer = SGD(
                        lr=YoloParams.L_RATE,
                        momentum=0.9,
                        decay=0.0005
            )
        """

        optimizer = Adam(lr=YoloParams.L_RATE,
                         beta_1=0.9,
                         beta_2=0.999,
                         decay=0.0)

        map_cbck = Callback_MAP(generator=valid_gen,
                                model=self.inf_model,
                                tensorboard=tensorboard)

        yolo_recall.__name__ = 'recall'

        metrics = [
            self.yolo_loss.l_coord, self.yolo_loss.l_obj,
            self.yolo_loss.l_class, yolo_recall
        ]

        self.model.compile(loss=self.yolo_loss,
                           optimizer=optimizer,
                           metrics=metrics)

        self.model.fit_generator(
            generator=train_gen,
            steps_per_epoch=len(train_gen),
            verbose=YoloParams.TRAIN_VERBOSE,
            validation_data=valid_gen,
            validation_steps=len(valid_gen),
            callbacks=[early_stop, checkpoint, tensorboard, map_cbck],
            #callbacks=[tensorboard, map_cbck],
            epochs=YoloParams.NUM_EPOCHS,
            max_queue_size=20)