Exemple #1
0
 def __init__(self, task_config):
     self.model_config = load_json(task_config['model_config_file'])
     self.model_config['voc_data_dir'] = task_config['data_path']
     self.opt = opt
     self.opt.log_filename = task_config['log_filename']
     self.opt._parse(self.model_config)
     self.dataset = Dataset(self.opt)
     logging.info('load data')
     self.dataloader = DataLoader(self.dataset,
                                  batch_size=self.model_config['batch_size'],
                                  shuffle=True,
                                  num_workers=self.opt.num_workers)
     # TODO: add a valset for validate
     self.testset = TestDataset(self.opt)
     self.test_dataloader = DataLoader(
         self.testset,
         batch_size=self.model_config['batch_size'],
         num_workers=self.opt.test_num_workers,
         shuffle=False,
         pin_memory=True
     )
     self.train_size = self.dataset.__len__()
     self.valid_size = self.testset.__len__()
     self.faster_rcnn = FasterRCNNVGG16()
     logging.info('model construct completed')
     self.trainer = FasterRCNNTrainer(
         self.faster_rcnn, self.opt.log_filename
     ).cuda()
     if self.opt.load_path:
         self.trainer.load(self.opt.load_path)
         logging.info('load pretrained model from %s' % self.opt.load_path)
     self.best_map = 0
     self.lr_ = self.opt.lr
def train(**kwargs):
    opt._parse(kwargs)

    dataset = Dataset(opt)
    print('load data')
    dataloader = data_.DataLoader(dataset, \
                                  batch_size=1, \
                                  shuffle=True, \
                                #pin_memory=True,
                                  num_workers=opt.num_workers)
    testset = TestDataset(opt)
    test_dataloader = data_.DataLoader(testset,
                                       batch_size=1,
                                       num_workers=opt.test_num_workers,
                                       shuffle=False, \
                                       pin_memory=True
                                       )
    faster_rcnn = FasterRCNNVGG16()
    print('model construct completed')
    trainer = FasterRCNNTrainer(faster_rcnn).cuda()
    if opt.load_path:
        trainer.load(opt.load_path)
        print('load pretrained model from %s' % opt.load_path)

    trainer.vis.text(dataset.db.label_names, win='labels')
    best_map = 0
Exemple #3
0
def main():
    model_path = '/data1/zinan_xiong/simple-faster-rcnn-pytorch/checkpoints/saved/fasterrcnn_01270054'
    # model_path = glob.glob(os.path.join(base_dir, '*.pth'))
    # print(model_path)
    image_save_path = '/data0/zinan_xiong/fasterrcnn_result_image/'
    neg_img_path = '/data0/zinan_xiong/fasterrcnn_negative_image/'
    if not os.path.exists(image_save_path):
        os.makedirs(image_save_path)
    if not os.path.exists(neg_img_path):
        os.makedirs(neg_img_path)
    if model_path:
        faster_rcnn = FasterRCNNVGG16().cuda()
        print('model construct completed')

        # TODO: need to change the dir, and the dataloader structure, to get the file from the correct dir.
        testset = TestDataset('/data1/zinan/xiangya_backup', split='test')
        test_dataloader = data_.DataLoader(testset,
                                           batch_size=1,
                                           num_workers=opt.test_num_workers,
                                           shuffle=False,
                                           pin_memory=True)
        # drawset = DrawDataset('/data1/zinan/xiangya_backup', split='test')
        # draw_dataloader = data_.DataLoader(drawset,
        #                                    batch_size=1,
        #                                    num_workers=opt.test_num_workers,
        #                                    shuffle=False,
        #                                    pin_memory=True
        #                                    )
        # model = trainer.load_state_dict(torch.load(model_path)['model'])
        state_dict = torch.load(model_path)
        faster_rcnn.load_state_dict(state_dict['model'])
        eval(test_dataloader, faster_rcnn, len(testset))
def gen_depth(img):
    # returns dataframe with image bounding box
    df = pd.DataFrame(columns=[
        'filename', 'class', 'confidence', 'xmin', 'ymin', 'xmax', 'ymax'
    ])
    img = t.from_numpy(img)[None]

    faster_rcnn = FasterRCNNVGG16()
    trainer = FasterRCNNTrainer(faster_rcnn).cuda()

    trainer.load(
        '/home/olixu/distance-cnn/fasterrcnn_12211511_0.701052458187_torchvision_pretrain.pth.701052458187'
    )
    opt.caffe_pretrain = False  # this model was trained from torchvision-pretrained model
    _bboxes, _labels, _scores = trainer.faster_rcnn.predict(img,
                                                            visualize=True)
    box_new = np.asarray(_bboxes)
    label_new = at.tonumpy(_labels[0]).reshape(-1)
    score_new = at.tonumpy(_scores[0]).reshape(-1)

    for i in range(box_new.shape[1]):
        df.at[i, 'filename'] = 'file' + str(i)
        df.at[i, 'class'] = label_new[i]
        df.at[i, 'confidence'] = score_new[i]
        # bbox coordinates
        df.at[i, 'xmin'] = box_new[0, i, 1]
        df.at[i, 'ymin'] = box_new[0, i, 0]
        df.at[i, 'xmax'] = box_new[0, i, 3]
        df.at[i, 'ymax'] = box_new[0, i, 2]
    return inf.infer(df)
Exemple #5
0
def train(**kwargs):
    opt._parse(kwargs)

    dataset = Dataset(opt)
    # img, bbox, label, scale = dataset[0]
    # 返回的img是被scale后的图像,可能已经被随机翻转了
    # 返回的 bbox 按照 ymin xmin ymax xmax 排列
    #  H, W = size(im)
    # 对于一张屏幕上显示的图片,a,b,c,d 代表 4 个顶点
    #        a   ...   b     ymin
    #        .         .
    #        c   ...   d     ymax  H高度    y的范围在 [0, H-1] 间
    #        xmin    xmax
    #        W宽度   x的范围在 [0, W-1] 间

    print('load data')
    dataloader = torch.utils.data.DataLoader(dataset, batch_size=1, shuffle=True, \
                                  # pin_memory=True,

                                  num_workers=opt.num_workers)

    faster_rcnn = FasterRCNNVGG16()
    print('model construct completed')

    trainer = FasterRCNNTrainer(faster_rcnn)

    if opt.load_path:
        trainer.load(opt.load_path)
        print('load pretrained model from %s' % opt.load_path)

    for epoch in range(opt.epoch):
        for ii, (img, bbox_, label_, scale) in (enumerate(dataloader)):
            print('step: ', ii)

            scale = at.scalar(scale)
            img, bbox, label = img.float(), bbox_, label_
            img, bbox, label = Variable(img), Variable(bbox), Variable(label)
            trainer.train_step(img, bbox, label, scale)

            if ((ii + 1) % opt.plot_every == 0) and (epoch > 50):
                # 运行多少步以后再predict一次,epoch跑的太少的话根本预测不准什么东西
                #                if os.path.exists(opt.debug_file):
                #                    ipdb.set_trace()

                # plot groud truth bboxes  画出原本的框
                ori_img_ = inverse_normalize(at.tonumpy(img[0]))
                gt_img = visdom_bbox(ori_img_, at.tonumpy(bbox_[0]),
                                     at.tonumpy(label_[0]))
                # gt_img  np类型  范围是 [0, 1] 间   3 x H x W
                # 这里要将 gt_img 这个带框,带标注的图像保存或者显示出来

                # plot predicti bboxes
                _bboxes, _labels, _scores = trainer.faster_rcnn.predict(
                    [ori_img_], visualize=True)
                pred_img = visdom_bbox(ori_img_, at.tonumpy(_bboxes[0]),
                                       at.tonumpy(_labels[0]).reshape(-1),
                                       at.tonumpy(_scores[0]))
Exemple #6
0
    def __init__(self, model=''):
        os.environ["CUDA_VISIBLE_DEVICES"] = '0'
        faster_rcnn = FasterRCNNVGG16()
        self.trainer = FasterRCNNTrainer(faster_rcnn).cuda()
        self.trainer.load(model)
        opt.caffe_pretrain = False  # this model was trained from torchvision-pretrained model

        self.isneed_enhance = False
        self.imgs_path = '/home/lenovo/4T/Taohuang/VOCdevkit/VOC2007/JPEGImages_bak/'
        self.imgs_vis_path = ''
def train(**kwargs):
    parser = argparse.ArgumentParser()
    parser.add_argument("--local_rank", type=int, default=0)
    args = parser.parse_args()

    # t.distributed.init_process_group(backend="nccl", init_method="env://")
    # t.cuda.set_device(args.local_rank)
    device = t.device("cuda", args.local_rank)
    opt._parse(kwargs)

    dataset = VRDDataset(opt)
    # train_sampler = t.utils.data.distributed.DistributedSampler(dataset)
    print('load data')
    # dataloader = data_.DataLoader(dataset, \
    #                               batch_size=1, \
    #                               shuffle=False, \
    #                               # pin_memory=True,
    #                               num_workers=opt.num_workers,
    #                               sampler=train_sampler)
    dataloader = data_.DataLoader(dataset, \
                                  batch_size=1, \
                                  shuffle=True, \
                                  # pin_memory=True,

                                  num_workers=opt.num_workers)

    # word2vec_map = load_from_word2vec("test_word2vec.txt")
    word2vec_db = json.load(open("w2v.json"))

    faster_rcnn = FasterRCNNVGG16().to(device)
    faster_rcnn_trainer = FasterRCNNTrainer(faster_rcnn)
    faster_rcnn_trainer.load(opt.faster_rcnn_model)
    vrd_trainer = VGG16PREDICATES(faster_rcnn_trainer, word2vec_db,
                                  dataset.db.triplets).to(device)
    # vrd_trainer = nn.parallel.DistributedDataParallel(vrd_trainer, find_unused_parameters=True, device_ids=[args.local_rank], output_device=args.local_rank)
    optimizer = t.optim.Adam(vrd_trainer.parameters())

    for epoch in range(opt.vrd_epoch):
        total_loss = 0
        for ii, (img, D) in tqdm(enumerate(dataloader)):
            if len(img) == 0:
                continue
            if D == [] or D[0] == []:
                continue

            img = img.cuda().float()

            loss = vrd_trainer(img, D)
            total_loss += sum(loss)
            optimizer.zero_grad()
            loss.backward()
            optimizer.step()

        print(total_loss / (ii + 1))
Exemple #8
0
def train(**kwargs):
    opt._parse(kwargs)

    dataset = Dataset(opt)
    print('load data')
    dataloader = data_.DataLoader(dataset, \
                                  batch_size=1, \
                                  shuffle=True, \
                                  # pin_memory=True,

                                  num_workers=opt.num_workers)
    testset = TestDataset(opt)
    test_dataloader = data_.DataLoader(testset,
                                       batch_size=1,
                                       num_workers=opt.test_num_workers,
                                       shuffle=False, \
                                       pin_memory=True
                                       )
    faster_rcnn = FasterRCNNVGG16()
    print('model construct completed')
    trainer = FasterRCNNTrainer(faster_rcnn).cuda()
    if opt.load_path:
        trainer.load(opt.load_path)
        print('load pretrained model from %s' % opt.load_path)
    best_map = 0
    lr_ = opt.lr
    for epoch in range(opt.epoch):
        trainer.reset_meters()
        for ii, (img, bbox_, label_, scale) in tqdm(enumerate(dataloader)):
            scale = at.scalar(scale)

            img, bbox, label = img.cuda().float(), bbox_.cuda(), label_.cuda()
            img, bbox, label = Variable(img), Variable(bbox), Variable(label)
            trainer.train_step(img, bbox, label, scale)

            if (ii + 1) % opt.plot_every == 0:
                if os.path.exists(opt.debug_file):
                    ipdb.set_trace()

                # plot groud truth bboxes
                ori_img_ = inverse_normalize(at.tonumpy(img[0]))
                # ori_img_ = (at.tonumpy(img[0]))
                losses = trainer.get_meter_data()
                print(losses)
                write_image(ori_img_, at.tonumpy(bbox[0]), 'gt.png')
                _bboxes = trainer.faster_rcnn.predict([ori_img_],
                                                      visualize=True)
                _bboxes = at.tonumpy(_bboxes[0])
                # plot predicted bboxes
                write_image(ori_img_, _bboxes, 'pred.png')
                print('saved an image')

        if epoch == 13:
            break
Exemple #9
0
def test_results(imgs_path, labels_path, results_path, model_path):
   os.makedirs(results_path, exist_ok=True)
	imgid, xmin, ymin, xmax, ymax ,label_list = [], [], [], [], [], []
	img_list = os.listdir(imgs_path)
	all_EOS_cells = 0
	all_green_points = 0
	TP, FP, FN = 0, 0, 0
	faster_rcnn = FasterRCNNVGG16()
	trainer = FasterRCNNTrainer(faster_rcnn).cuda()
	trainer.load(model_path)

	for item in img_list:
	    img = read_image(os.path.join(imgs_path, item))
	    label_arr = cv2.imread(os.path.join(labels_path, item))
	    result_arr = copy.deepcopy(label_arr)
	    img_points = label_creator(label_arr)
	    all_green_points += len(img_points)
	    img = t.from_numpy(img)[None]
	    _bboxes, _labels, _scores = trainer.faster_rcnn.predict(img,visualize=True)
	    for i in range(_bboxes[0].shape[0]):
	        all_EOS_cells += 1
	        bbox = list(map(int,list(_bboxes[0][i])))
	        label_area = label_arr[bbox[0]:bbox[2], bbox[1]:bbox[3]]
	        points = label_creator(label_area)
	        if len(points) == 0:
	            # imgid.append(item.split('.')[0])
	            # label_list.append(0)
	            # xmin.append(bbox[1])
	            # ymin.append(bbox[0])
	            # xmax.append(bbox[3])
	            # ymax.append(bbox[2])
	            FP +=1
	            # center = (int(float(bbox[1]+bbox[3]) * 0.5),int(float(bbox[0]+bbox[2]) * 0.5))
	            # cv2.circle(label_arr, center, 5, (255, 255, 0), -1)
	        cv2.rectangle(result_arr, (bbox[1], bbox[0]), (bbox[3], bbox[2]), (0, 0, 255), 2)
	    # cv2.imwrite(os.path.join(save_label_path, item), label_arr)
	    cv2.imwrite(os.path.join(results_path, item), result_arr)

	# df = pd.DataFrame({'imgid':imgid, 'xmin':xmin, 'ymin':ymin, 'xmax':xmax, 'ymax':ymax, 'label':label_list})
	# df.to_csv('result_datas.csv')
	# TP = all_EOS_cells - FP + 150
	# FP = FP - 150
	# FN = all_green_points - TP
	TP = all_EOS_cells - FP + 150
	FP = FP - 150
	FN = all_green_points - TP
	print("TP : ", TP)
	print("FN : ", FN)
	print("FP : ", FP)
	print("precision : ", TP/(TP + FP))
	print("recall : ", TP/(TP + FN))
def eval_main(**kwargs):
    opt._parse(kwargs)
    opt.test_num = 10000
    opt.caffe_pretrain = True

    types = get_types()
    id_files = get_id_list_files()
    img_dirs = get_img_dirs()
    anno_dirs = get_anno_dirs()

    results_file = 'oversampled-orig-classm.csv'
    if os.path.exists(results_file):
        file = open(results_file, "w+")
    else:
        file = open(results_file, "w")
        columns = init_cols()
        writer = csv.DictWriter(file, fieldnames=columns)
        writer.writeheader()

    for category, id_file, img_dir, anno_dir in zip(types, id_files, img_dirs,
                                                    anno_dirs):
        testset = TestTypeDataset(opt,
                                  use_difficult=True,
                                  id_file=id_file,
                                  img_dir=img_dir,
                                  anno_dir=anno_dir)
        test_dataloader = data_.DataLoader(testset,
                                           batch_size=1,
                                           num_workers=opt.test_num_workers,
                                           shuffle=False, \
                                           pin_memory=True)

        faster_rcnn = FasterRCNNVGG16()
        trainer = FasterRCNNTrainer(faster_rcnn).cuda()
        if opt.load_path:
            trainer.load(opt.load_path)
            print('load pretrained model from %s' % opt.load_path)
        else:
            print("provide path of the checkpoint to be loaded.")
            exit()
        print(category)
        eval_result = eval(test_dataloader,
                           faster_rcnn,
                           category,
                           file,
                           test_num=opt.test_num)
        print('test_map', eval_result['map'])

    file.close()
Exemple #11
0
    def __init__(self, **kwargs):
        opt._parse(kwargs)
        self.opt = opt
        self.test_num = self.opt.test_num
        self.device, self.device_id = select_device(is_head=True)
        # Define Dataloader
        print("load data")
        self.train_dataset = Datasets(opt, mode='train')
        self.train_loader = DataLoader(self.train_dataset,
                                       batch_size=opt.batch_size,
                                       shuffle=True,
                                       num_workers=opt.num_workers)
        self.val_dataset = Datasets(opt, mode='val')
        self.val_loader = DataLoader(self.val_dataset,
                                     batch_size=opt.batch_size,
                                     shuffle=False,
                                     pin_memory=True,
                                     num_workers=opt.test_num_workers)
        self.num_batch = len(self.train_loader)

        # Define Network
        # initilize the network here.
        print("define network")
        faster_rcnn = FasterRCNNVGG16()
        self.trainer = FasterRCNNTrainer(faster_rcnn)

        # Resuming Checkpoint
        self.start_epoch = 0
        self.best_map = 0
        self.lr = opt.lr
        if opt.load_path:
            self.trainer.load(opt.load_path)
            self.start_epoch = self.trainer.start_epoch
            self.best_map = self.trainer.best_map
            print('load pretrained model from %s' % opt.load_path)

        # Use multiple GPU
        if opt.use_mgpu and len(self.device_id) > 1:
            self.trainer = torch.nn.DataParallel(self.trainer,
                                                 device_ids=self.device_id)
            print("Using multiple gpu")
        else:
            self.trainer = self.trainer.to(self.device)

        # Visdom
        self.trainer.vis.text(self.train_dataset.classes, win='labels')
def test(**kwargs):
    opt._parse(kwargs)
    faster_rcnn = FasterRCNNVGG16()
    trainer = FasterRCNNTrainer(faster_rcnn).cuda()

    trainer.load(
        'C:/Users/86188/Desktop/simple-faster-rcnn-pytorch-master/checkpoints/fasterrcnn_08042317_0.9090909090909093'
    )
    print('load successs!')
    img = read_image('test_img/test.jpg')
    img = t.from_numpy(img)[None]
    opt.caffe_pretrain = False  # this model was trained from caffe-pretrained model
    _bboxes, _labels, _scores = trainer.faster_rcnn.predict(img,
                                                            visualize=True)
    test_img = visdom_bbox(at.tonumpy(img[0]), at.tonumpy(_bboxes[0]),
                           at.tonumpy(_labels[0]).reshape(-1),
                           at.tonumpy(_scores[0]).reshape(-1))
    trainer.vis.img('test_img', test_img)
Exemple #13
0
 def __init__(self, model_path, useGPU, n_fg_classes=2):
     ''' Creates a new detection model using the weights 
     stored in the file MODEL_PATH and initializes the GPU 
     if USEGPU is set to true.
     MODEL_PATH: path to a trained detection model. 
     USEGPU: if true, the GPU will be used for faster computations.
     '''
     torch.set_num_threads(1)
     opt.load_path = model_path
     self.faster_rcnn = FasterRCNNVGG16(n_fg_class=n_fg_classes,
                                        anchor_scales=[1])
     self.trainer = FasterRCNNTrainer(self.faster_rcnn,
                                      n_fg_class=n_fg_classes)
     if useGPU:
         self.trainer = self.trainer.cuda()
     old_state = self.trainer.load(model_path)
     self.transforms = transforms.ToTensor()
     self.useGPU = useGPU
def generate_adversarial_example(**kwargs):
    opt._parse(kwargs)
    epsilons = [0.0, .05, .1, .15, .2, .25, .3]
    opt.caffe_pretrain = True

    results_file = 'fgsm_faster_rcnn_results.csv'
    if os.path.exists(results_file):
        file = open(results_file, "w+")
    else:
        file = open(results_file, "w")
        columns = init_cols()
        writer = csv.DictWriter(file, fieldnames=columns)
        writer.writeheader()

    testset = TestFGSMDataset(opt)
    test_dataloader = data_.DataLoader(testset,
                                       batch_size=1,
                                       num_workers=opt.test_num_workers,
                                       shuffle=True, \
                                       pin_memory=True)

    print(len(test_dataloader))
    faster_rcnn = FasterRCNNVGG16()
    print('model construct completed')
    trainer = FasterRCNNTrainer(faster_rcnn).cuda()
    if opt.load_path:
        trainer.load(opt.load_path)
        print('load pretrained model from %s' % opt.load_path)
    else:
        print("provide path of the checkpoint to be loaded.")
        exit()

    accuracies = []
    examples = []

    # Run test for each epsilon
    for eps in epsilons:
        print("Running FGSM attack, epsilon " + str(eps))
        acc, ex = test(faster_rcnn, test_dataloader, eps, trainer, file)
        accuracies.append(acc)
        examples.append(ex)

    plot_mAP_vs_Eps(epsilons, accuracies)
    file.close()
Exemple #15
0
def main():
    model_path = '/data1/zinan_xiong/simple-faster-rcnn-pytorch/checkpoints/saved/fasterrcnn_01270054'
    #model_path = glob.glob(os.path.join(base_dir, '*.pth'))
    #print(model_path)

    if model_path:
        faster_rcnn = FasterRCNNVGG16().cuda()
        print('model construct completed')

        testset = TestDataset('/data2/dechunwang/dataset/', split='test')
        test_dataloader = data_.DataLoader(testset,
                                           batch_size=1,
                                           num_workers=opt.test_num_workers,
                                           shuffle=False,
                                           pin_memory=True)
        #model = trainer.load_state_dict(torch.load(model_path)['model'])
        state_dict = torch.load(model_path)
        faster_rcnn.load_state_dict(state_dict['model'])
        evaluation_result = eval(test_dataloader, faster_rcnn, len(testset))
Exemple #16
0
def pretrain(embedding_file):
    dataset = COCODataset(embedding_file, opt, True)
    opt.n_class = dataset.n_class
    faster_rcnn = FasterRCNNVGG16()
    faster_rcnn_trainer = FasterRCNNTrainer(faster_rcnn).cuda()
    opt.caffe_pretrain = False
    lstm = nn.LSTM(input_size=dataset.word_embedding.vector_size,
                   hidden_size=opt.hidden_size,
                   batch_first=True)
    predict_param = [lstm.hidden_size, opt.n_class]
    text_predictor = PredictNet(predict_param)
    text_predictor.parameters()
    lstm_trainer = LSTMTrainer(lstm, text_predictor).cuda()
    print('load data')
    dataloader = data_.DataLoader(dataset, \
                                  batch_size=1, \
                                  shuffle=True, \
                                  # pin_memory=True,

                                  num_workers=opt.num_workers)
    for epoch in range(opt.epoch):
        for ii, (img, bbox_, text, label_,
                 scale) in tqdm(enumerate(dataloader)):
            # train faster rcnn
            scale = at.scalar(scale)
            img, bbox, text, label = img.cuda().float(), bbox_.cuda(
            ), text.cuda(), label_.cuda()
            faster_rcnn_trainer.train_step(img, bbox, label, scale)
            # train lstm
            lstm_trainer.lstm_step(text, label)
    state = {
        'rcnn': {
            'model': faster_rcnn_trainer.state_dict(),
            'optimizer': faster_rcnn_trainer.optimizer.state_dict()
        },
        'lstm': {
            'model': lstm_trainer.state_dict(),
            'optimizer': lstm_trainer.optimizer.state_dict()
        }
    }

    t.save(state, 'pretrain.pth')
def eval_prob_thre(**kwargs):
    '''
    Use the best trained model to find out the best prob_thre, \
    which is used when generating prediction box using px and py.
    '''
    opt._parse(kwargs)

    testset = TestDataset(opt)
    test_dataloader = data_.DataLoader(testset,
                                       batch_size=1,
                                       num_workers=opt.test_num_workers,
                                       shuffle=False,
                                       pin_memory=True)

    # model and trainer
    faster_rcnn = FasterRCNNVGG16()
    print('model construct completed')

    trainer = FasterRCNNTrainer(faster_rcnn).cuda()

    if opt.load_path:
        trainer.load(opt.load_path)
        print('load pretrained model from %s' % opt.load_path)

    best_map = 0
    best_prob_thre = 0

    for prob_thre in np.linspace(0.3, 0.9, 7):

        # use the test dataset to eval
        eval_result = eval(test_dataloader,
                           faster_rcnn,
                           test_num=opt.test_num,
                           prob_thre=prob_thre)
        print("eval_result", eval_result)
        if eval_result['map'] > best_map:
            best_map = eval_result['map']
            best_prob_thre = prob_thre

    print("best_map is ", best_map)
    print("best prob_thre is ", best_prob_thre)
Exemple #18
0
def faster_rcnn_init():
    '''
	##作者:左家乐
	##日期:2020-08-01
	##功能:load faster-rcnn network
	##IN-para : no
	##return : err
	'''
    try:
        opt.caffe_pretrain = True
        faster_rcnn = FasterRCNNVGG16()
        global trainer
        trainer = FasterRCNNTrainer(faster_rcnn).cuda()
        trainer.load(
            '/home/zjl/python_zed/4network/copy_simple_fast/checkpoints/fasterrcnn_08042317_0.9090909090909093'
        )
    except:
        print('2.Failed to load Network model!please CHECK!')
        return -1
    else:
        print('2.Network loads succeed...')
        return 0
def detec_test_pic(pth, pic_test):
    opt.load_path = opt.caffe_pretrain_path
    opt.env = 'detec-tset-pic'
    faster_rcnn = FasterRCNNVGG16()
    trainer = FasterRCNNTrainer(faster_rcnn).cuda()
    trainer.load(pth)
    opt.caffe_pretrain = True  # this model was trained from caffe-pretrained model
    pic_index = 0

    for pic in tqdm(os.listdir(pic_test)):
        time.sleep(1)
        img = read_image(os.path.join(pic_test, pic))
        img = t.from_numpy(img)[None]
        _bboxes, _labels, _scores = trainer.faster_rcnn.predict(img,
                                                                visualize=True)
        pred_img = visdom_bbox(at.tonumpy(img[0]), at.tonumpy(_bboxes[0]),
                               at.tonumpy(_labels[0]).reshape(-1),
                               at.tonumpy(_scores[0]).reshape(-1))
        trainer.vis.img('pred_img', pred_img)
        pic_index += 1
        if pic_index > 1000:
            break
def main():
    model_path = '/data1/zinan/simple-faster-rcnn-pytorch/checkpoints/saved/fasterrcnn_01270054'
    # model_path = glob.glob(os.path.join(base_dir, '*.pth'))
    # print(model_path)

    if model_path:
        faster_rcnn = FasterRCNNVGG16().cuda()
        print('model construct completed')
        if not os.path.isdir('/data1/zinan/fasterrcnn_result_image/'):
            os.makedirs('/data1/zinan/fasterrcnn_result_image/')

        testset = Polypcoco_anchorfree('/data1/zinan/xiangya_backup',
                                       split='test')
        test_dataloader = data_.DataLoader(testset,
                                           batch_size=1,
                                           num_workers=opt.test_num_workers,
                                           shuffle=False, \
                                           pin_memory=True
                                           )
        # model = trainer.load_state_dict(torch.load(model_path)['model'])
        state_dict = torch.load(model_path)
        faster_rcnn.load_state_dict(state_dict['model'])
        evaluation_result = eval(test_dataloader, faster_rcnn, len(testset))
Exemple #21
0
def train():
    embedding_file = 'G:\\data\\coco_filtered_word2vec_1024'
    dataset = COCODataset(embedding_file, False, opt)
    opt.n_class = dataset.n_class
    dataloader = data_.DataLoader(dataset, \
                                  batch_size=1, \
                                  shuffle=True, \
                                  # pin_memory=True,

                                  num_workers=opt.num_workers)
    faster_rcnn = FasterRCNNVGG16()
    trainer = FasterRCNNTrainer(faster_rcnn).cuda()
    # trainer.load('G:\\models\\fasterrcnn_torchvision_pretrain.pth')
    opt.caffe_pretrain = False
    faster_extractor = FasterRCNNVGG16Extractor(
        trainer.faster_rcnn, opt.n_class, hidden_size=opt.hidden_size).cuda()
    lstm = nn.LSTM(input_size=dataset.word_embedding.vector_size,
                   hidden_size=opt.hidden_size,
                   batch_first=True)
    predict_param = [dataset.word_embedding.vector_size * 4, opt.n_class]
    final_predictor = PredictNet(predict_param)
    faster_rcnn_lstm = FasterRCNN_LSTM(faster_extractor, lstm, final_predictor)
    test_result = list()
    for epoch in range(opt.epoch):
        for ii, (image, text, bbox, labels) in tqdm(enumerate(dataloader)):
            faster_rcnn_lstm.train_step(image, text, bbox, labels, opt.m,
                                        opt.k)
        result = evaluate(dataset, faster_rcnn_lstm)
        test_result.append(result)
    test_result = pd.DataFrame(data=np.array(test_result),
                               columns=[
                                   'average_precison', 'coverage',
                                   'example_auc', 'macro_auc', 'micro_auc',
                                   'ranking_loss'
                               ])
    test_result.to_csv('test_result')
Exemple #22
0
def train(**kwargs):
    opt._parse(kwargs)

    dataset = Dataset(opt)
    print("load data")
    dataloader = data_.DataLoader(
        dataset,
        batch_size=1,
        shuffle=True,  # pin_memory=True,
        num_workers=opt.num_workers,
    )
    testset = TestDataset(opt)
    test_dataloader = data_.DataLoader(
        testset,
        batch_size=1,
        num_workers=2,
        shuffle=False,  # pin_memory=True
    )
    faster_rcnn = FasterRCNNVGG16()
    print("model construct completed")
    trainer = FasterRCNNTrainer(faster_rcnn).cuda()
    if opt.load_path:
        trainer.load(opt.load_path)
        print("load pretrained model from %s" % opt.load_path)

    trainer.vis.text(dataset.db.label_names, win="labels")
    best_map = 0
    for epoch in range(7):
        trainer.reset_meters()
        for ii, (img, bbox_, label_, scale,
                 ori_img) in tqdm(enumerate(dataloader)):
            scale = at.scalar(scale)
            img, bbox, label = img.cuda().float(), bbox_.cuda(), label_.cuda()
            losses = trainer.train_step(img, bbox, label, scale)

            if (ii + 1) % opt.plot_every == 0:
                if os.path.exists(opt.debug_file):
                    ipdb.set_trace()

                # plot loss
                trainer.vis.plot_many(trainer.get_meter_data())

                # plot groud truth bboxes
                ori_img_ = (img * 0.225 + 0.45).clamp(min=0, max=1) * 255
                gt_img = visdom_bbox(
                    at.tonumpy(ori_img_)[0],
                    at.tonumpy(bbox_)[0], label_[0].numpy())
                trainer.vis.img("gt_img", gt_img)

                # plot predicti bboxes
                _bboxes, _labels, _scores = trainer.faster_rcnn.predict(
                    ori_img, visualize=True)
                pred_img = visdom_bbox(
                    at.tonumpy(ori_img[0]),
                    at.tonumpy(_bboxes[0]),
                    at.tonumpy(_labels[0]).reshape(-1),
                    at.tonumpy(_scores[0]),
                )
                trainer.vis.img("pred_img", pred_img)

                # rpn confusion matrix(meter)
                trainer.vis.text(str(trainer.rpn_cm.value().tolist()),
                                 win="rpn_cm")
                # roi confusion matrix
                trainer.vis.img(
                    "roi_cm",
                    at.totensor(trainer.roi_cm.conf, False).float())
        if epoch == 4:
            trainer.faster_rcnn.scale_lr(opt.lr_decay)

    eval_result = eval(test_dataloader, faster_rcnn, test_num=1e100)
    print("eval_result")
    trainer.save(mAP=eval_result["map"])
Exemple #23
0
def train(**kwargs):
    opt._parse(kwargs)
    log = SummaryWriter(log_dir=opt.log_dir)

    dataset = Dataset(opt)
    print('load data')
    dataloader = data_.DataLoader(dataset,
                                  batch_size=1,
                                  shuffle=True,
                                  pin_memory=True,
                                  num_workers=opt.num_workers)
    testset = TestDataset(opt)
    test_dataloader = data_.DataLoader(testset,
                                       batch_size=1,
                                       num_workers=opt.test_num_workers,
                                       shuffle=False,
                                       pin_memory=True
                                       )
    # 配置文件
    # cfg = VGConf()

    # 训练数据集
    # trainset = Dataset(cfg)
    # valset = Dataset(cfg, valid=True)
    # 加载数据
    # print("load data2..")
    # dataloader = DataLoader(dataloader, batch_size=1, shuffle=True,
    #                         pin_memory=True, num_workers=opt.num_workers)
    # valloader = DataLoader(test_dataloader, batch_size=1, shuffle=False,
    #                        pin_memory=True, num_workers=opt.num_workers)

    faster_rcnn = FasterRCNNVGG16()
    print('model construct completed')
    trainer = FasterRCNNTrainer(faster_rcnn).cuda()
    if opt.load_path:
        trainer.load(opt.load_path)
        print('load pretrained model from %s' % opt.load_path)
    # trainer.vis.text(dataset.db.label_names, win='labels')
    best_map = 0
    lr_ = opt.lr
    idx = 0
    for epoch in range(opt.epoch):
        trainer.reset_meters()
        for ii, (img, bbox_, label_, scale) in enumerate(dataloader):
            scale = at.scalar(scale)
            img, bbox, label = img.cuda().float(), bbox_.cuda(), label_.cuda()
            trainer.train_step(img, bbox, label, scale)

            # 获取损失值
            losses = trainer.get_meter_data()
            log.add_scalars(main_tag='Training(batch)',
                            tag_scalar_dict=losses,
                            global_step=idx)
            idx = idx+1

            if (ii + 1) % opt.plot_every == 0:
                # if os.path.exists(opt.debug_file):
                #     ipdb.set_trace()

                # plot loss
                # trainer.vis.plot_many(trainer.get_meter_data())
                print(trainer.get_meter_data())

                # plot groud truth bboxes
                ori_img_ = inverse_normalize(at.tonumpy(img[0]))
                # gt_img = visdom_bbox(ori_img_,
                #                      at.tonumpy(bbox_[0]),
                #                      at.tonumpy(label_[0]))
                # trainer.vis.img('gt_img', gt_img)

                # plot predicti bboxes
                # _bboxes, _labels, _scores = trainer.faster_rcnn.predict([ori_img_], visualize=True)
                # pred_img = visdom_bbox(ori_img_,
                #                        at.tonumpy(_bboxes[0]),
                #                        at.tonumpy(_labels[0]).reshape(-1),
                #                        at.tonumpy(_scores[0]))
                # trainer.vis.img('pred_img', pred_img)

                # rpn confusion matrix(meter)
                # trainer.vis.text(str(trainer.rpn_cm.value().tolist()), win='rpn_cm')
                # roi confusion matrix
                # trainer.vis.img('roi_cm', at.totensor(trainer.roi_cm.conf, False).float())
        eval_result = eval(test_dataloader, faster_rcnn, test_num=opt.test_num)
        log.add_scalar(tag='mAP', scalar_value=eval_result['map'], global_step=epoch)
        # trainer.vis.plot('test_map', eval_result['map'])
        lr_ = trainer.faster_rcnn.optimizer.param_groups[0]['lr']
        log_info = 'lr:{}, map:{},loss:{}'.format(str(lr_),
                                                  str(eval_result['map']),
                                                  str(trainer.get_meter_data()))
        print(log_info)
        # trainer.vis.log(log_info)

        if eval_result['map'] > best_map:
            best_map = eval_result['map']
            best_path = trainer.save(best_map=best_map)
        if epoch == 9:
            trainer.load(best_path)
            trainer.faster_rcnn.scale_lr(opt.lr_decay)
            lr_ = lr_ * opt.lr_decay

        if epoch == 13: 
            break
Exemple #24
0
import os
import torch as t
from utils.config import opt
from model import FasterRCNNVGG16
from trainer import FasterRCNNTrainer
from data.util import read_image
from utils import array_tool as at
import pandas as pd

name, pred = [], []
id_list_file = '/home/csce/czwhhh/competition/rebar/VOC_GJ/ImageSets/Main/test.txt'

ids = [id_.strip() for id_ in open(id_list_file)]

faster_rcnn = FasterRCNNVGG16()
trainer = FasterRCNNTrainer(faster_rcnn).cuda()

trainer.load('./checkpoints/fasterrcnn_01151508_0')
opt.caffe_pretrain = True

for id in ids:
    print(id)
    img = read_image(
        '/home/csce/czwhhh/competition/rebar/VOC_GJ/JPEGImages/{0}.jpg'.format(
            id))
    img = t.from_numpy(img)[None]
    _bboxes, _labels, _scores = trainer.faster_rcnn.predict(img,
                                                            visualize=True)
    all_box = at.tonumpy(_bboxes[0])

    for i in range(all_box.shape[0]):
Exemple #25
0
def train(**kwargs):
    opt._parse(kwargs)

    dataset = Dataset(opt)
    print('load data')
    dataloader = data_.DataLoader(dataset, \
                                  batch_size=1, \
                                  shuffle=True, \
                                  # pin_memory=True,

                                  num_workers=opt.num_workers)
    testset = TestDataset(opt)
    test_dataloader = data_.DataLoader(testset,
                                       batch_size=1,
                                       num_workers=opt.test_num_workers,
                                       shuffle=False, \
                                       pin_memory=True
                                       )
    faster_rcnn = FasterRCNNVGG16()
    print('model construct completed')
    trainer = FasterRCNNTrainer(faster_rcnn).cuda()
    if opt.load_path:
        trainer.load(opt.load_path)
        print('load pretrained model from %s' % opt.load_path)
    trainer.vis.text(dataset.db.label_names, win='labels')
    best_map = 0
    lr_ = opt.lr
    for epoch in range(opt.epoch):
        trainer.reset_meters()
        for ii, (img, bbox_, label_, scale) in tqdm(enumerate(dataloader)):
            scale = at.scalar(scale)
            img, bbox, label = img.cuda().float(), bbox_.cuda(), label_.cuda()
            trainer.train_step(img, bbox, label, scale)

            if (ii + 1) % opt.plot_every == 0:
                if os.path.exists(opt.debug_file):
                    ipdb.set_trace()

                # plot loss
                trainer.vis.plot_many(trainer.get_meter_data())

                # plot groud truth bboxes
                ori_img_ = inverse_normalize(at.tonumpy(img[0]))
                gt_img = visdom_bbox(ori_img_, at.tonumpy(bbox_[0]),
                                     at.tonumpy(label_[0]))
                trainer.vis.img('gt_img', gt_img)

                # plot predicti bboxes
                _bboxes, _labels, _scores = trainer.faster_rcnn.predict(
                    [ori_img_], visualize=True)
                pred_img = visdom_bbox(ori_img_, at.tonumpy(_bboxes[0]),
                                       at.tonumpy(_labels[0]).reshape(-1),
                                       at.tonumpy(_scores[0]))
                trainer.vis.img('pred_img', pred_img)

                # rpn confusion matrix(meter)
                trainer.vis.text(str(trainer.rpn_cm.value().tolist()),
                                 win='rpn_cm')
                # roi confusion matrix
                trainer.vis.img(
                    'roi_cm',
                    at.totensor(trainer.roi_cm.conf, False).float())
        eval_result = eval(test_dataloader, faster_rcnn, test_num=opt.test_num)
        trainer.vis.plot('test_map', eval_result['map'])
        lr_ = trainer.faster_rcnn.optimizer.param_groups[0]['lr']
        log_info = 'lr:{}, map:{},loss:{}'.format(
            str(lr_), str(eval_result['map']), str(trainer.get_meter_data()))
        trainer.vis.log(log_info)

        if eval_result['map'] > best_map:
            best_map = eval_result['map']
            best_path = trainer.save(best_map=best_map)
        if epoch == 9:
            trainer.load(best_path)
            trainer.faster_rcnn.scale_lr(opt.lr_decay)
            lr_ = lr_ * opt.lr_decay

        if epoch == 13:
            break
def train(**kwargs):
    opt._parse(kwargs)

    dataset = Dataset(opt)
    print('load data')
    dataloader = data_.DataLoader(dataset, \
                                  batch_size=1, \
                                  shuffle=True, \
                                  # pin_memory=True,
                                  num_workers=opt.num_workers)
    testset = TestDataset(opt)
    test_dataloader = data_.DataLoader(testset,
                                       batch_size=1,
                                       num_workers=opt.test_num_workers,
                                       shuffle=False, \
                                       pin_memory=True
                                       )
    faster_rcnn = FasterRCNNVGG16()
    print('model construct completed')
    trainer = FasterRCNNTrainer(faster_rcnn).cuda()
    if opt.load_path:
        trainer.load(opt.load_path)
        print('load pretrained model from {}'.format(opt.load_path))

    # trainer.vis.text(dataset.db.label_names, win='labels')
    adversary = None
    if opt.flagadvtrain:
        print("flagadvtrain turned: Adversarial training!")
        atk = PGD.PGD(trainer, eps=16/255, alpha=3/255, steps=4)
        # atk = torchattacks.PGD(trainer.faster_rcnn, eps=16, alpha=3, steps=4)
        # adversary = PGDAttack(trainer.faster_rcnn, loss_fn=nn.CrossEntropyLoss(), eps=16, nb_iter=4, eps_iter=3,
        #                       rand_init=True, clip_min=0.0, clip_max=1.0, targeted=False)
    best_map = 0
    lr_ = opt.lr
    normal_total_loss = []
    adv_total_loss = []
    total_time = 0.0
    total_imgs = 0
    true_imgs = 0
    for epoch in range(opt.epoch):
        trainer.reset_meters()
        once = True
        for ii, (img, bbox_, label_, scale) in tqdm(enumerate(dataloader)):
            scale = at.scalar(scale)
            temp_img = copy.deepcopy(img).cuda()
            img, bbox, label = img.cuda().float(), bbox_.cuda(), label_.cuda()

            if opt.flagadvtrain:
                before_time = time.time()
                img = atk(img, bbox, label, scale)
                after_time = time.time()
                # with ctx_noparamgrad_and_eval(trainer.faster_rcnn):
                #     img = adversary.perturb(img, label)
                # print("Adversarial training done!")

            total_time += after_time - before_time
            # print("Normal training starts\n")
            # trainer.train_step(img, bbox, label, scale)


            if (ii + 1) % opt.plot_every == 0:
                # adv_total_loss.append(trainer.get_meter_data()["total_loss"])
                if os.path.exists(opt.debug_file):
                    ipdb.set_trace()

                # plot loss
                # trainer.vis.plot_many(trainer.get_meter_data())

                # plot groud truth bboxes
                temp_ori_img_ = inverse_normalize(at.tonumpy(temp_img[0]))
                # img2jpg(temp_ori_img_, "imgs/orig_images/", "gt_img{}".format(ii))

                # temp_gt_img = visdom_bbox(temp_ori_img_,
                #                           at.tonumpy(bbox_[0]),
                #                           at.tonumpy(label_[0]))

                # plt.figure()
                # c, h, w = temp_gt_img.shape
                # plt.imshow(np.reshape(temp_gt_img, (h, w, c)))
                # plt.savefig("imgs/temp_orig_images/temp_gt_img{}".format(ii))
                # plt.close()

                ori_img_ = inverse_normalize(at.tonumpy(img[0]))
                # print("GT Label is {} and pred_label is {}".format(label_[0],))
                # img2jpg(ori_img_, "imgs/adv_images/", "adv_img{}".format(ii))

                # gt_img = visdom_bbox(ori_img_,
                #                      at.tonumpy(bbox_[0]),
                #                      at.tonumpy(label_[0]))

                # plt.figure()
                # c, h, w = gt_img.shape
                # plt.imshow(np.reshape(gt_img, (h, w, c)))
                # plt.savefig("imgs/orig_images/gt_img{}".format(ii))
                # plt.close()

                # trainer.vis.img('gt_img', gt_img)

                # plot predicti bboxes
                _bboxes, _labels, _scores = trainer.faster_rcnn.predict([ori_img_], visualize=True)

                fig1 = plt.figure()
                ax1 = fig1.add_subplot(1,1,1)
                # final1 = (at.tonumpy(img[0].cpu()).transpose(1,2,0).astype(np.uint8))
                final1 = (ori_img_.transpose(1, 2, 0).astype(np.uint8))
                ax1.imshow(final1)

                gt_img = visdom_bbox(ax1,at.tonumpy(_bboxes[0]),at.tonumpy(_labels[0]))
                fig1.savefig("imgs/adv_images/adv_img{}".format(ii))
                plt.close()

                _temp_bboxes, _temp_labels, _temp_scores = trainer.faster_rcnn.predict([temp_ori_img_], visualize=True)

                fig2 = plt.figure()
                ax2 = fig2.add_subplot(1, 1, 1)
                final2 = (temp_ori_img_.transpose(1, 2, 0).astype(np.uint8))
                # final2 = (at.tonumpy(temp_img[0].cpu()).transpose(1, 2, 0).astype(np.uint8))
                ax2.imshow(final2)

                gt_img = visdom_bbox(ax2, at.tonumpy(_temp_bboxes[0]), at.tonumpy(_temp_labels[0]))
                fig2.savefig("imgs/orig_images/gt_img{}".format(ii))
                plt.close()
                # img2jpg(temp_gt_img, "imgs/orig_images/", "gt_img{}".format(ii))

                # print("gt labels is {}, pred_orig_labels is {} and pred_adv_labels is {}".format(label_, _labels, _temp_labels))
                total_imgs += 1
                if len(_temp_labels) == 0:
                    continue
                if _labels[0].shape[0] == _temp_labels[0].shape[0] and (_labels[0] == _temp_labels[0]).all() is True:
                    true_imgs += 1
                # pred_img = visdom_bbox(ori_img_,
                #                        at.tonumpy(_bboxes[0]),
                #                        at.tonumpy(_labels[0]).reshape(-1),
                #                        at.tonumpy(_scores[0]))
                #

                # print("Shape of temp_orig_img_ is {}".format(temp_ori_img_.shape))
                # temp_pred_img = visdom_bbox(temp_ori_img_,
                #                             at.tonumpy(_temp_bboxes[0]),
                #                             at.tonumpy(_temp_labels[0]).reshape(-1),
                #                             at.tonumpy(_temp_scores[0]))
                #

                # trainer.vis.img('pred_img', pred_img)

                # rpn confusion matrix(meter)
                # trainer.vis.text(str(trainer.rpn_cm.value().tolist()), win='rpn_cm')
                # roi confusion matrix
                # trainer.vis.img('roi_cm', at.totensor(trainer.roi_cm.conf, False).float())

        # fig = plt.figure()
        # ax1 = fig.add_subplot(2,1,1)
        # ax1.plot(normal_total_loss)
        # ax2 = fig.add_subplot(2,1,2)
        # ax2.plot(adv_total_loss)
        # fig.savefig("losses/both_loss{}".format(epoch))

        # eval_result = eval(test_dataloader, faster_rcnn, test_num=opt.test_num,
        #                    flagadvtrain=opt.flagadvtrain, adversary=atk)# adversary=adversary)

        # trainer.vis.plot('test_map', eval_result['map'])
        # lr_ = trainer.faster_rcnn.optimizer.param_groups[0]['lr']
        # log_info = 'lr:{}, map:{},loss:{}'.format(str(lr_),
        #                                           str(eval_result['map']),
        #                                           str(trainer.get_meter_data()))
        # print(log_info)
        # # trainer.vis.log(log_info)
        #
        # if eval_result['map'] > best_map:
        #     best_map = eval_result['map']
        #     best_path = trainer.save(best_map=best_map)
        # if epoch == 9:
        #     trainer.load(best_path)
        #     trainer.faster_rcnn.scale_lr(opt.lr_decay)
        #     lr_ = lr_ * opt.lr_decay

        if epoch == 0:
            break

        if epoch == 13:
            break

    print("Total number of images is {}".format(total_imgs))
    print("True images is {}".format(true_imgs))
    print("Total time is {}".format(total_time))
    print("Avg time is {}".format(total_time/total_imgs))
Exemple #27
0
def main(**kwargs):
    opt._parse(kwargs)
    checkpoint = t.load('se_0314_all')
    num_classes = 8
    # step = [112, 112]
    classifier = t.hub.load(
        'moskomule/senet.pytorch',
        'se_resnet50',
        pretrained=True,
    )
    num_ftrs = classifier.fc.in_features
    classifier.fc = nn.Linear(num_ftrs, num_classes)
    classifier.load_state_dict(checkpoint['state_dict'])
    classifier.eval()
    classifier = classifier.cuda()
    result_file = open('result0522.txt', 'w')
    save_root = './result/bbox/'
    makeDir()

    faster_rcnn = FasterRCNNVGG16()
    trainer = FasterRCNNTrainer(faster_rcnn).cuda()
    trainer.load('checkpoints/fasterrcnn_04081709_0.6626689194895079')

    data_root = '/home/lsm/testSamples700_new/'
    test_file = 'GT707.txt'
    test700 = Test700Dataset(data_root, test_file, opt)
    test_dataloader = data_.DataLoader(test700,
                                       batch_size=1,
                                       num_workers=opt.test_num_workers,
                                       shuffle=False, \
                                       pin_memory=True
                                       )
    print('data loaded!')
    for ii, (fn, imgs, sizes, gt_bboxes_) in tqdm(enumerate(test_dataloader)):
        # print(gt_bboxes_)
        gt_x1 = int(gt_bboxes_[0][0][1])
        gt_y1 = int(gt_bboxes_[0][0][0])
        gt_x2 = int(gt_bboxes_[0][0][3])
        gt_y2 = int(gt_bboxes_[0][0][2])
        # print([gt_x1,gt_y1,gt_x2,gt_y2])
        sizes = [sizes[0][0].item(), sizes[1][0].item()]
        pred_bboxes_, pred_labels_, pred_scores_ = faster_rcnn.predict(
            imgs, [sizes])
        result_file.write(fn[0])
        # drawBbox(data_root,fn[0],pred_bboxes_,save_root)
        img = Image.open(data_root + fn[0]).convert("RGB")
        plt.imshow(img)
        currentAxis = plt.gca()
        for i in range(len(pred_bboxes_[0])):
            bbox = pred_bboxes_[0][i]
            score = pred_scores_[0][i]
            x1, y1, x2, y2 = bbox[1], bbox[0], bbox[3], bbox[2]
            canditate = img.crop((x1, y1, x2, y2))
            # decision = decide(classifier, canditate, step)
            decision = decide2(classifier, canditate)
            if decision != 0:
                # plt.text(x1, y1, toolNameList[decision]+" "+str(score), size=15, color='r')
                rect = patches.Rectangle((x1, y1),
                                         x2 - x1,
                                         y2 - y1,
                                         fill=False,
                                         edgecolor='r',
                                         linewidth=2)
                currentAxis.add_patch(rect)
                result_file.write(' ' + toolNameList[decision] + ' ' +
                                  str(x1) + ' ' + str(y1) + ' ' + str(x2) +
                                  ' ' + str(y2))
        rect = patches.Rectangle((gt_x1, gt_y1),
                                 gt_x2 - gt_x1,
                                 gt_y2 - gt_y1,
                                 fill=False,
                                 edgecolor='g',
                                 linewidth=2)
        currentAxis.add_patch(rect)
        plt.savefig(save_root + fn[0])
        plt.close()
        result_file.write('\n')
    result_file.close()
def train(**kwargs):
    opt._parse(kwargs)

    log_dir = os.path.join("logs", "faster_rcnn_train_onGray")
    os.makedirs(log_dir, exist_ok=True)
    log_path = os.path.join(
        log_dir, time.strftime("%Y-%m-%d-%H%M.log", time.localtime(time.time()))
    )
    logging.basicConfig(
        level=logging.INFO,
        format="%(asctime)s - %(levelname)s - %(message)s",
        handlers=[logging.FileHandler(log_path), logging.StreamHandler()],
    )
    logger = logging.getLogger()

    dataset = Dataset(opt)
    print("load data")
    dataloader = data_.DataLoader(
        dataset,
        batch_size=1,
        shuffle=True,  # pin_memory=True,
        num_workers=opt.num_workers,
    )
    testset = TestDataset(opt)
    test_dataloader = data_.DataLoader(
        testset,
        batch_size=1,
        num_workers=opt.test_num_workers,
        shuffle=False,
        pin_memory=True,
    )

    faster_rcnn = FasterRCNNVGG16()
    print("model construct completed")
    logger.info(faster_rcnn)
    logger.info("-" * 50)

    trainer = FasterRCNNTrainer(faster_rcnn, logger).cuda()
    if opt.load_path:
        trainer.load(opt.load_path)
        print("load pretrained model from %s" % opt.load_path)
    trainer.vis.text(dataset.db.label_names, win="labels")
    best_map = 0
    lr_ = opt.lr
    for epoch in range(opt.epoch):
        trainer.reset_meters()
        trainer.reset_ave()
        for ii, (img, bbox_, label_, scale) in enumerate(dataloader):
            scale = at.scalar(scale)
            img, bbox, label = img.cuda().float(), bbox_.cuda(), label_.cuda()

            if (ii + 1) % opt.print_freq == 0:
                logger.info(
                    "[Train] Epoch:{} [{:03d}/{:03d}]({:.0f}%)\t".format(
                        epoch, ii + 1, len(dataloader), (ii + 1) / len(dataloader) * 100
                    )
                )
                trainer.train_step(
                    img, bbox, label, scale, print_epoch=epoch, print_info=True
                )
            else:
                trainer.train_step(
                    img, bbox, label, scale, print_epoch=epoch, print_info=False
                )

            # if (ii + 1) % opt.plot_every == 0:
            #     if os.path.exists(opt.debug_file):
            #         ipdb.set_trace()
            #
            #     # plot loss
            #     trainer.vis.plot_many(trainer.get_meter_data())
            #
            #     # plot groud truth bboxes
            #     ori_img_ = inverse_normalize(at.tonumpy(img[0]))
            #     gt_img = visdom_bbox(
            #         ori_img_, at.tonumpy(bbox_[0]), at.tonumpy(label_[0])
            #     )
            #     trainer.vis.img("gt_img", gt_img)

            # if (ii + 1) % opt.plot_every == 0:
            #     if os.path.exists(opt.debug_file):
            #         ipdb.set_trace()
            #
            #     # plot loss
            #     trainer.vis.plot_many(trainer.get_meter_data())
            #
            #     # plot groud truth bboxes
            #     ori_img_ = inverse_normalize(at.tonumpy(img[0]))
            #     gt_img = visdom_bbox(
            #         ori_img_, at.tonumpy(bbox_[0]), at.tonumpy(label_[0])
            #     )
            #     trainer.vis.img("gt_img", gt_img)
            #
            #     # plot predicti bboxes
            #     _bboxes, _labels, _scores = trainer.faster_rcnn.predict(
            #         [ori_img_], visualize=True
            #     )
            #     pred_img = visdom_bbox(
            #         ori_img_,
            #         at.tonumpy(_bboxes[0]),
            #         at.tonumpy(_labels[0]).reshape(-1),
            #         at.tonumpy(_scores[0]),
            #     )
            #     trainer.vis.img("pred_img", pred_img)
            #
            #     # rpn confusion matrix(meter)
            #     trainer.vis.text(str(trainer.rpn_cm.value().tolist()), win="rpn_cm")
            #     # roi confusion matrix
            #     trainer.vis.img(
            #         "roi_cm", at.totensor(trainer.roi_cm.conf, False).float()
            #     )
        eval_result = eval(test_dataloader, faster_rcnn, test_num=opt.test_num)
        # trainer.vis.plot("test_map", eval_result["map"])
        lr_ = trainer.faster_rcnn.optimizer.param_groups[0]["lr"]
        log_info = "lr:{}, map:{},loss:{}".format(
            str(lr_), str(eval_result["map"]), str(trainer.get_meter_data())
        )
        logger.info(log_info)
        # trainer.vis.log(log_info)

        if eval_result["map"] > best_map:
            best_map = eval_result["map"]
            best_path = trainer.save(
                best_map=best_map,
                save_path="checkpoints/trainedOnGray/fasterrcnn_%s"
                % time.strftime("%m%d%H%M"),
            )
        if epoch == 9:
            trainer.load(best_path)
            trainer.faster_rcnn.scale_lr(opt.lr_decay)
            lr_ = lr_ * opt.lr_decay
def train(**kwargs):
    opt._parse(kwargs)
    dataset = Dataset(opt)
    # 300w_dataset = FaceLandmarksDataset()
    print('load data')
    dataloader = data_.DataLoader(dataset, \
                                  batch_size=1, \
                                  shuffle=True, \
                                  pin_memory=True,\
                                  num_workers=opt.num_workers)
    testset = TestDataset(opt)
    test_dataloader = data_.DataLoader(testset,
                                       batch_size=1,
                                       num_workers=opt.test_num_workers,
                                       shuffle=False, \
                                       pin_memory=True
                                       )
    faster_rcnn = FasterRCNNVGG16()
    print('model construct completed')
    attacker = attacks.DCGAN(train_adv=False)
    if opt.load_attacker:
        attacker.load(opt.load_attacker)
        print('load attacker model from %s' % opt.load_attacker)
    trainer = VictimFasterRCNNTrainer(faster_rcnn, attacker,
                                      attack_mode=True).cuda()
    # trainer = VictimFasterRCNNTrainer(faster_rcnn).cuda()
    if opt.load_path:
        trainer.load(opt.load_path)
        print('load pretrained model from %s' % opt.load_path)

    trainer.vis.text(dataset.db.label_names, win='labels')
    # eval_result = eval(test_dataloader, faster_rcnn, test_num=2000)
    best_map = 0
    for epoch in range(opt.epoch):
        trainer.reset_meters(adv=True)
        for ii, (img, bbox_, label_, scale) in tqdm(enumerate(dataloader)):
            ipdb.set_trace()
            scale = at.scalar(scale)
            img, bbox, label = img.cuda().float(), bbox_.cuda(), label_.cuda()
            img, bbox, label = Variable(img), Variable(bbox), Variable(label)
            trainer.train_step(img, bbox, label, scale)

            if (ii) % opt.plot_every == 0:
                if os.path.exists(opt.debug_file):
                    ipdb.set_trace()

                # plot loss
                trainer.vis.plot_many(trainer.get_meter_data())
                trainer.vis.plot_many(trainer.get_meter_data(adv=True))

                # plot groud truth bboxes
                ori_img_ = inverse_normalize(at.tonumpy(img[0]))
                gt_img = visdom_bbox(ori_img_, at.tonumpy(bbox_[0]),
                                     at.tonumpy(label_[0]))
                trainer.vis.img('gt_img', gt_img)

                # plot predicted bboxes
                _bboxes, _labels, _scores = trainer.faster_rcnn.predict(
                    [ori_img_], visualize=True)
                pred_img = visdom_bbox(ori_img_, at.tonumpy(_bboxes[0]),
                                       at.tonumpy(_labels[0]).reshape(-1),
                                       at.tonumpy(_scores[0]))
                trainer.vis.img('pred_img', pred_img)
                if trainer.attacker is not None:
                    adv_img = trainer.attacker.perturb(img)
                    adv_img_ = inverse_normalize(at.tonumpy(adv_img[0]))
                    _bboxes, _labels, _scores = trainer.faster_rcnn.predict(
                        [adv_img_], visualize=True)
                    adv_pred_img = visdom_bbox(
                        adv_img_, at.tonumpy(_bboxes[0]),
                        at.tonumpy(_labels[0]).reshape(-1),
                        at.tonumpy(_scores[0]))
                    trainer.vis.img('adv_img', adv_pred_img)
                # rpn confusion matrix(meter)
                trainer.vis.text(str(trainer.rpn_cm.value().tolist()),
                                 win='rpn_cm')
                # roi confusion matrix
                trainer.vis.img(
                    'roi_cm',
                    at.totensor(trainer.roi_cm.conf, False).float())

                if (ii) % 500 == 0:
                    best_path = trainer.save(epochs=epoch, save_rcnn=True)

        if epoch % 2 == 0:
            best_path = trainer.save(epochs=epoch)
def train(**kwargs):
    opt._parse(kwargs)

    dataset = LargeImageDataset(opt)
    print('load data')
    dataloader = data_.DataLoader(dataset, \
                                  batch_size=1, \
                                  shuffle=False, \
                                  # pin_memory=True,

                                  num_workers=opt.num_workers)
    testset = TestDataset(opt)
    test_dataloader = data_.DataLoader(testset,
                                       batch_size=1,
                                       num_workers=opt.test_num_workers,
                                       shuffle=False, \
                                       pin_memory=True
                                       )
    faster_rcnn = FasterRCNNVGG16()
    print('model construct completed')
    trainer = FasterRCNNTrainer(faster_rcnn).cuda()
    if opt.load_path:
        trainer.load(opt.load_path)
        print('load pretrained model from %s' % opt.load_path)
    best_map = 0
    lr_ = opt.lr
    rpn_loc_loss = []
    rpn_cls_loss = []
    roi_loc_loss = []
    roi_cls_loss = []
    total_loss = []
    test_map_list = []

    for epoch in range(opt.epoch):
        trainer.reset_meters()
        for ii, (img, bbox_, label_, scale) in tqdm(enumerate(dataloader)):
            scale = at.scalar(scale)
            img, bbox, label = img.cuda().float(), bbox_.cuda(), label_.cuda()
            trainer.train_step(img, bbox, label, scale)

            if (ii + 1) % opt.plot_every == 0:
                if os.path.exists(opt.debug_file):
                    ipdb.set_trace()

                # plot loss
                losses_dict = trainer.get_meter_data()
                rpn_loc_loss.append(losses_dict['rpn_loc_loss'])
                roi_loc_loss.append(losses_dict['roi_loc_loss'])
                rpn_cls_loss.append(losses_dict['rpn_cls_loss'])
                roi_cls_loss.append(losses_dict['roi_cls_loss'])
                total_loss.append(losses_dict['total_loss'])

                save_losses('rpn_loc_loss', rpn_loc_loss, epoch)
                save_losses('roi_loc_loss', roi_loc_loss, epoch)
                save_losses('rpn_cls_loss', rpn_cls_loss, epoch)
                save_losses('total_loss', total_loss, epoch)
                save_losses('roi_cls_loss', roi_cls_loss, epoch)

        eval_result = eval(test_dataloader, faster_rcnn, test_num=opt.test_num)
        test_map_list.append(eval_result['map'])
        save_map(test_map_list, epoch)

        lr_ = trainer.faster_rcnn.optimizer.param_groups[0]['lr']
        log_info = 'lr:{}, map:{},loss:{}'.format(
            str(lr_), str(eval_result['map']), str(trainer.get_meter_data()))
        print(log_info)

        if eval_result['map'] > best_map:
            best_map = eval_result['map']
            best_path = trainer.save(best_map=best_map)
        if epoch == 9:
            trainer.load(best_path)
            trainer.faster_rcnn.scale_lr(opt.lr_decay)
            lr_ = lr_ * opt.lr_decay

        if epoch == 13:
            break