Exemplo n.º 1
0
def save_cate(cate_list, image_dir, res_dir):
    """
    保存裁剪的图像
    """
    # 保存image_dir下所有图像,以便后续查询
    image_dict = dict()
    image_name_list = os.listdir(image_dir)
    for name in image_name_list:
        image_path = os.path.join(image_dir, name)
        img = cv2.imread(image_path)

        image_dict[name.split('.')[0]] = img

    # 遍历所有类别,保存标注的图像
    for i in range(20):
        cate_name = alphabets[i]
        cate_dir = os.path.join(res_dir, cate_name)
        util.check_dir(cate_dir)

        for item in cate_list[i]:
            img_name = item['img_name']
            xmin, ymin, xmax, ymax = item['rect']

            rect_img = image_dict[img_name][ymin:ymax, xmin:xmax]
            img_path = os.path.join(
                cate_dir,
                '%s-%d-%d-%d-%d.png' % (img_name, xmin, ymin, xmax, ymax))
            cv2.imwrite(img_path, rect_img)
Exemplo n.º 2
0
    def _resume_checkpoint(self, path):
        check_dir(path)
        self.logger.debug('Loading checkpoint: {}...'.format(path))
        checkpoint = torch.load(path)
        self.start_epoch = checkpoint['epoch'] + 1
        self.best_score = checkpoint['best_score']
        self.model.load_state_dict(checkpoint['state_dict'])
        if checkpoint['config']['optimizer'] != self.cfg['optimizer']:
            self.logger.debug("Optimizer type given in config file is different from that of checkpoint."
                              "Optimizer parameters not being resumed.")
        else:
            self.optimizer.load_state_dict(checkpoint['optimizer'])

        self.logger.debug("Checkpoint loaded. Resume training from epoch {}".format(self.start_epoch))
Exemplo n.º 3
0
def record_voice(files, base_path):
    for file_path in files:
        play_audio(file_path)
        audio = pyaudio.PyAudio()
        stream = audio.open(format=pyaudio.paInt16,
                            channels=1,
                            rate=16000,
                            input=True,
                            frames_per_buffer=SIZE)
        names = file_path.split('/')
        print("--- ", end="")
        print(os.path.join(base_path, names[1], names[2]))
        frames = []
        for i in range(
                0, int(16000 / SIZE * get_duration('dataset/' + file_path))):
            data = stream.read(SIZE)
            frames.append(data)
        stream.stop_stream()
        stream.close()
        audio.terminate()
        util.check_dir(path=base_path + names[1])
        util.save_wav(frames,
                      file_path=os.path.join(base_path, names[1], names[2]))
Exemplo n.º 4
0
        criterion = SmoothLabelCritierion(label_smoothing=0.1)
        # criterion = nn.CrossEntropyLoss()
        optimizer = optim.Adam(model.parameters(), lr=1e-3, weight_decay=1e-4)
        scheduler = optim.lr_scheduler.CosineAnnealingLR(optimizer,
                                                         num_epochs - 5,
                                                         eta_min=1e-4)
        lr_scheduler = GradualWarmupScheduler(optimizer,
                                              multiplier=1,
                                              total_epoch=5,
                                              after_scheduler=scheduler)
        optimizer.zero_grad()
        optimizer.step()
        lr_scheduler.step()

        util.check_dir('../data/models/')
        best_model, loss_dict, top1_acc_dict, top5_acc_dict = train_model(
            data_loaders,
            data_sizes,
            name,
            model,
            criterion,
            optimizer,
            lr_scheduler,
            num_epochs=num_epochs,
            device=device)
        # 保存最好的模型参数
        # util.save_model(best_model.cpu(), '../data/models/best_%s.pth' % name)

        res_loss[name] = loss_dict
        res_top1_acc[name] = top1_acc_dict
Exemplo n.º 5
0
        if 0.1 <= iou_score < 0.5:
            # 负样本
            negative_list.append(rects[i])
        else:
            pass

    # 添加标注边界框到正样本列表
    positive_list.extend(bndboxs)

    return positive_list, negative_list


if __name__ == '__main__':
    car_root_dir = '../../data/voc_car/'
    finetune_root_dir = '../../data/finetune_car/'
    check_dir(finetune_root_dir)

    gs = selectivesearch.get_selective_search()
    for name in ['train', 'val']:
        src_root_dir = os.path.join(car_root_dir, name)
        src_annotation_dir = os.path.join(src_root_dir, 'Annotations')
        src_jpeg_dir = os.path.join(src_root_dir, 'JPEGImages')

        dst_root_dir = os.path.join(finetune_root_dir, name)
        dst_annotation_dir = os.path.join(dst_root_dir, 'Annotations')
        dst_jpeg_dir = os.path.join(dst_root_dir, 'JPEGImages')
        check_dir(dst_root_dir)
        check_dir(dst_annotation_dir)
        check_dir(dst_jpeg_dir)

        total_num_positive = 0
Exemplo n.º 6
0
        model = model.to(device)

        criterion = nn.CrossEntropyLoss()
        optimizer = optim.Adam(model.parameters(), lr=1e-3)
        lr_scheduler = optim.lr_scheduler.StepLR(optimizer,
                                                 step_size=15,
                                                 gamma=0.1)

        best_model, loss_dict, acc_dict = train_model(model,
                                                      criterion,
                                                      optimizer,
                                                      lr_scheduler,
                                                      data_sizes,
                                                      data_loaders,
                                                      num_epochs=50,
                                                      device=device)

        # 保存最好的模型参数
        util.check_dir(model_dir)
        torch.save(best_model.state_dict(),
                   os.path.join(model_dir, '%s.pth' % name))

        res_loss[name] = loss_dict
        res_acc[name] = acc_dict

        print('train %s done' % name)
        print()

    util.save_png('loss', res_loss)
    util.save_png('acc', res_acc)
Exemplo n.º 7
0
        src_jpeg_path = os.path.join(voc_jpeg_dir, sample_name + suffix_jpeg)
        dst_jpeg_path = os.path.join(data_jpeg_dir, sample_name + suffix_jpeg)
        shutil.copyfile(src_jpeg_path, dst_jpeg_path)

    csv_path = os.path.join(data_root_dir, 'car.csv')
    np.savetxt(csv_path, np.array(car_samples), fmt='%s')


if __name__ == '__main__':
    samples = {
        'train': parse_train_val(car_train_path),
        'val': parse_train_val(car_val_path)
    }
    print(samples)
    # samples = sample_train_val(samples)
    # print(samples)

    check_dir(car_root_dir)
    for name in ['train', 'val']:
        data_root_dir = os.path.join(car_root_dir, name)
        data_annotation_dir = os.path.join(data_root_dir, 'Annotations')
        data_jpeg_dir = os.path.join(data_root_dir, 'JPEGImages')

        check_dir(data_root_dir)
        check_dir(data_annotation_dir)
        check_dir(data_jpeg_dir)
        save_car(samples[name], data_root_dir, data_annotation_dir,
                 data_jpeg_dir)

    print('done')
Exemplo n.º 8
0
        cate_dir = os.path.join(res_dir, cate_name)
        util.check_dir(cate_dir)

        for item in cate_list[i]:
            img_name = item['img_name']
            xmin, ymin, xmax, ymax = item['rect']

            rect_img = image_dict[img_name][ymin:ymax, xmin:xmax]
            img_path = os.path.join(
                cate_dir,
                '%s-%d-%d-%d-%d.png' % (img_name, xmin, ymin, xmax, ymax))
            cv2.imwrite(img_path, rect_img)


if __name__ == '__main__':
    util.check_dir(root_dir)
    util.check_dir(train_dir)
    util.check_dir(val_dir)

    train_name_list = np.loadtxt(train_txt_path, dtype=np.str)
    print(train_name_list)
    cate_list = find_all_cate_rects(annotation_dir, train_name_list)
    print([len(x) for x in cate_list])
    save_cate(cate_list, jpeg_image_dir, train_dir)

    val_name_list = np.loadtxt(val_txt_path, dtype=np.str)
    print(val_name_list)
    cate_list = find_all_cate_rects(annotation_dir, val_name_list)
    print([len(x) for x in cate_list])
    save_cate(cate_list, jpeg_image_dir, val_dir)
        rect_size = (ymax - ymin) * (xmax - xmin)

        iou_score = iou_list[i]
        if 0 < iou_score <= 0.3 and rect_size > maximum_bndbox_size / 5.0:
            # 负样本
            negative_list.append(rects[i])
        else:
            pass

    return bndboxs, negative_list


if __name__ == '__main__':
    car_root_dir = '../../data/voc_car/'
    classifier_root_dir = '../../data/classifier_car/'
    check_dir(classifier_root_dir)

    gs = selectivesearch.get_selective_search()
    for name in ['train', 'val']:
        src_root_dir = os.path.join(car_root_dir, name)
        src_annotation_dir = os.path.join(src_root_dir, 'Annotations')
        src_jpeg_dir = os.path.join(src_root_dir, 'JPEGImages')

        dst_root_dir = os.path.join(classifier_root_dir, name)
        dst_annotation_dir = os.path.join(dst_root_dir, 'Annotations')
        dst_jpeg_dir = os.path.join(dst_root_dir, 'JPEGImages')
        check_dir(dst_root_dir)
        check_dir(dst_annotation_dir)
        check_dir(dst_jpeg_dir)

        total_num_positive = 0
Exemplo n.º 10
0
    model.load_state_dict(best_model_weights)
    return model


if __name__ == '__main__':
    device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

    data_loaders, data_sizes = load_data('./data/finetune_car')

    model = models.alexnet(pretrained=True)
    # print(model)
    num_features = model.classifier[6].in_features
    model.classifier[6] = nn.Linear(num_features, 2)
    # print(model)
    model = model.to(device)

    criterion = nn.CrossEntropyLoss()
    optimizer = optim.SGD(model.parameters(), lr=1e-3, momentum=0.9)
    lr_scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=7, gamma=0.1)

    best_model = train_model(data_loaders,
                             model,
                             criterion,
                             optimizer,
                             lr_scheduler,
                             device=device,
                             num_epochs=25)
    # 保存最好的模型参数
    check_dir('./models')
    torch.save(best_model.state_dict(), 'models/alexnet_car.pth')
    """
    voc_car_train_dir = '../../data/voc_car/train'
    # ground truth
    gt_annotation_dir = os.path.join(voc_car_train_dir, 'Annotations')
    jpeg_dir = os.path.join(voc_car_train_dir, 'JPEGImages')

    classifier_car_train_dir = '../../data/finetune_car/train'
    # positive
    positive_annotation_dir = os.path.join(classifier_car_train_dir, 'Annotations')

    dst_root_dir = '../../data/bbox_regression/'
    dst_jpeg_dir = os.path.join(dst_root_dir, 'JPEGImages')
    dst_bndbox_dir = os.path.join(dst_root_dir, 'bndboxs')
    dst_positive_dir = os.path.join(dst_root_dir, 'positive')

    util.check_dir(dst_root_dir)
    util.check_dir(dst_jpeg_dir)
    util.check_dir(dst_bndbox_dir)
    util.check_dir(dst_positive_dir)

    samples = util.parse_car_csv(voc_car_train_dir)
    res_samples = list()
    total_positive_num = 0
    for sample_name in samples:
        # 提取正样本边界框坐标(IoU>=0.5)
        positive_annotation_path = os.path.join(positive_annotation_dir, sample_name + '_1.csv')
        positive_bndboxes = np.loadtxt(positive_annotation_path, dtype=np.int, delimiter=' ')
        # 提取标注边界框
        gt_annotation_path = os.path.join(gt_annotation_dir, sample_name + '.xml')
        bndboxs = util.parse_xml(gt_annotation_path)
        # 计算符合条件(IoU>0.6)的候选建议