示例#1
0
文件: config.py 项目: aag147/rcnn
 def set_class_weights(self, labels, imagesMeta):
     if self.wp != -1:
         return
     print('  Using class-specific weights!')
     stats, counts = utils.getLabelStats(imagesMeta, labels)
     p = counts / sum(counts)
     p = np.array(p)
     #       print(p)
     #       self.wp = p
     wp = 1 / (p)
     self.wp = wp
示例#2
0
    def load_data(self):
        cfg = basic_config(self.newDir)

        if self.method == 'faster':
            cfg.faster_rcnn_config()
        elif self.method == 'fast':
            cfg.fast_rcnn_config()
        elif self.method == 'normal':
            cfg.rcnn_config()
        cfg = mcfg.rcnn_hoi_classes(cfg)
        cfg = set_config(cfg)
        cfg.get_args()
        cfg.dataset = 'HICO'
        cfg.update_paths()

        trainMeta = utils.load_dict(cfg.data_path + 'train')
        testMeta = utils.load_dict(cfg.data_path + 'test')

        trainGTMeta = utils.load_dict(cfg.data_path + 'train_GT')
        testGTMeta = utils.load_dict(cfg.data_path + 'test_GT')
        labels = utils.load_dict(cfg.data_path + 'labels')
        class_mapping = utils.load_dict(cfg.data_path + 'class_mapping')

        if cfg.max_classes is not None:
            # Reduce data to include only max_classes number of different classes
            _, counts = utils.getLabelStats(trainGTMeta, labels)
            reduced_idxs = utils.getReducedIdxs(counts, cfg.max_classes,
                                                labels)
            trainGTMeta = utils.reduceData(trainGTMeta, reduced_idxs)
            testGTMeta = utils.reduceData(testGTMeta, reduced_idxs)
            trainMeta = utils.reduceData(trainMeta, reduced_idxs)
            testMeta = utils.reduceData(testMeta, reduced_idxs)
            labels = utils.idxs2labels(reduced_idxs, labels)

        cfg.nb_classes = len(labels)
        cfg.set_class_weights(labels, trainGTMeta)
        _, valMeta = utils.splitData(list(trainMeta.keys()), trainMeta)
        self.cfg = cfg

        if cfg.move:
            self.move_data()

        print('Data:', cfg.data_path)
        print('Path:', cfg.my_results_path)

        self.labels = labels
        self.class_mapping = class_mapping
        self.trainMeta = trainMeta
        self.valMeta = valMeta
        self.testMeta = testMeta
        self.trainGTMeta = trainGTMeta
        self.testGTMeta = testGTMeta
示例#3
0
    def __init__(self, imagesMeta, GTMeta, labels, cfg, data_type='train'):
        'Initialization'
        self.data_type = data_type
        if data_type == 'train':
            g_cfg = cfg.train_cfg
        elif data_type == 'val':
            g_cfg = cfg.val_cfg
        else:
            g_cfg = cfg.test_cfg

        self.gen_type = g_cfg.type
        self.batch_size = g_cfg.batch_size
        self.nb_batches = g_cfg.nb_batches
        self.images_per_batch = g_cfg.images_per_batch
        self.nb_samples_per_image = int(self.batch_size /
                                        self.images_per_batch)

        self.shuffle = g_cfg.shuffle
        self.inputs = cfg.inputs

        cfg.img_out_reduction = (16, 16)

        self.data_path = cfg.data_path
        self.images_path = self.data_path + 'images/'
        self.images_path = self.images_path + 'test/' if self.data_type == 'test' else self.images_path + 'train/'
        self.nb_classes = cfg.nb_classes
        self.cfg = cfg

        self.dataID = list(imagesMeta.keys())
        self.dataID.sort()
        if self.shuffle:
            r.shuffle(self.dataID)
        else:
            self.dataID.sort()

        self.imagesMeta = imagesMeta
        self.GTMeta = GTMeta
        #      self.gt_label, _, _ = image.getYData(self.dataID, self.imagesMeta, self.GTMeta, self.cfg)
        self.nb_images = len(self.dataID)
        #      self.nb_samples = len(self.gt_label)
        stats, _ = utils.getLabelStats(imagesMeta, labels)
        self.nb_samples = stats['totalx']
        if self.nb_batches is None:
            self.nb_batches = self.nb_images
示例#4
0
    def load_data(self):
        cfg = basic_config(self.newDir)
        cfg = set_config(cfg)
        cfg.get_args()
        cfg.update_paths()

        trainMeta = utils.load_dict(cfg.data_path + 'train')
        testMeta = utils.load_dict(cfg.data_path + 'test')

        trainGTMeta = utils.load_dict(cfg.data_path + 'train_GT')
        testGTMeta = utils.load_dict(cfg.data_path + 'test_GT')
        labels = utils.load_dict(cfg.data_path + 'labels')

        if cfg.max_classes is not None:
            # Reduce data to include only max_classes number of different classes
            _, counts = utils.getLabelStats(trainGTMeta, labels)
            trainGTMeta, reduced_idxs = utils.reduceTrainData(
                trainGTMeta, counts, cfg.max_classes)
            testGTMeta = utils.reduceTestData(testGTMeta, reduced_idxs)
            trainMeta = utils.reduceTestData(trainMeta, reduced_idxs)
            testMeta = utils.reduceTestData(testMeta, reduced_idxs)
            labels = utils.idxs2labels(reduced_idxs, labels)

        cfg.nb_classes = len(labels)
        cfg.set_class_weights(labels, trainGTMeta)
        _, valMeta = utils.splitData(list(trainMeta.keys()), trainMeta)
        self.cfg = cfg

        if cfg.move:
            self.move_data()

        print('Path:', cfg.my_results_path)

        self.labels = labels
        self.trainMeta = trainMeta
        self.valMeta = valMeta
        self.testMeta = testMeta
        self.trainGTMeta = trainGTMeta
        self.testGTMeta = testGTMeta
示例#5
0
    # Create batch generators
    genTrain = DataGenerator(imagesMeta=data.trainMeta,
                             GTMeta=data.trainGTMeta,
                             cfg=cfg,
                             data_type='train')
    genVal = DataGenerator(imagesMeta=data.valMeta,
                           GTMeta=data.trainGTMeta,
                           cfg=cfg,
                           data_type='val')
    genTest = DataGenerator(imagesMeta=data.testMeta,
                            GTMeta=data.testGTMeta,
                            cfg=cfg,
                            data_type='test')

    stats, count = utils.getLabelStats(data.trainMeta, data.labels)

if True:
    # Save config
    utils.saveConfig(cfg)
    utils.saveSplit(cfg, list(data.trainMeta.keys()),
                    list(data.valMeta.keys()))

    # Create model
    print('Creating model...')
    model = HO_RCNN(cfg)

    trainer = model_trainer(model=model,
                            genTrain=genTrain,
                            genVal=genVal,
                            genTest=genTest,
示例#6
0
文件: debug.py 项目: aag147/rcnn
if False:
    # Save labels in file
    annotations = hico.getUniqueLabels(cfg)
    labels = []
    for annot in annotations:
        obj = annot.nname
        pred = annot.vname
        pred_ing = annot.vname_ing
        label = {'obj': obj, 'pred': pred, 'pred_ing': pred_ing}
        labels.append(label)

    utils.save_dict(labels, cfg.part_data_path + 'HICO_labels')
    labels = utils.load_dict(cfg.part_data_path + 'HICO_labels')

    stats, counts = utils.getLabelStats(trainMeta, labels)
    reduced_trainMeta, reduced_idxs = utils.reduceTrainData(
        trainMeta, counts, 25)
    reduced_testMeta = utils.reduceTestData(testMeta, reduced_idxs)
    reduced_labels = utils.idxs2labels(reduced_idxs, labels)
    reduced_stats, reduced_counts = utils.getLabelStats(
        reduced_trainMeta, reduced_labels)

if False:
    # Test if all images can be loaded and cropped successfully
    i = 0
    c = 0.0
    end = len(testMeta)
    for imageID, metaData in testMeta.items():
        oldPath = cfg.part_data_path + 'HICO_images/test/' + metaData['imageID']
        image = cv.imread(oldPath)
示例#7
0
文件: posteval.py 项目: aag147/rcnn
    # Create batch generators
    genTrain = DataGenerator(imagesMeta=data.trainMeta, GTMeta = data.trainGTMeta, cfg=cfg, data_type='train', labels=data.labels)
    genVal = DataGenerator(imagesMeta=data.valMeta, GTMeta = data.trainGTMeta, cfg=cfg, data_type='val', labels=data.labels)
    genTest = DataGenerator(imagesMeta=data.testMeta, GTMeta = data.testGTMeta, cfg=cfg, data_type='test', labels=data.labels)
    
    
    y_hat = utils.load_obj(cfg.part_results_path + 'y_hat_test')
    Y = genTest.getYData()
    Y = utils.load_obj(cfg.part_results_path + 'y_test')
    
    res = metrics.computeMultiLabelLoss(Y, y_hat)
    print(res[1:4])
    
    cm = metrics.computeConfusionMatrixLabels(Y, y_hat)
    
    _, counts = utils.getLabelStats(data.trainGTMeta, data.labels)
    idxs = np.concatenate([np.array([0]), np.argsort(counts, axis=0)+1], axis=0)
    
    _, test_counts = utils.getLabelStats(data.testGTMeta, data.labels)
    test_idxs = np.concatenate([np.array([0]), np.argsort(test_counts, axis=0)+ 1], axis=0)
    cm_sorted = cm[idxs,:]
#    cm_reduced = cm_sorted[-100:-1,0:]
    plt.figure(1)
    draw.plot_confusion_matrix(cm, data.labels, normalize=True)
    
    plt.figure(2)
    plt.plot([x for x in range(cm.shape[0])], cm[:,0] / np.sum(cm, axis=1))
    plt.ylabel('ratio of no label instances')
    plt.xlabel('classes')