Ejemplo n.º 1
0
def testRRN_Pretrain(sample,pre):
    RRN_net = MyRRN()
    RRN_net.to(cfg.DEVICE)
    RRN_net.load_state_dict(torch.load(pre))

    sam = sample['image']
    bbb = sample['bb']
    tm = sample['tm']
    gt = sample['gt']
    bz = bbb.size(0)
    num = bbb.size(1)
    bbb = bbb.view(-1, 5)

    ind = torch.arange(bz,requires_grad=False).view(-1,1)
    ind = ind.repeat(1,num).view(-1,1)
    bbb[:,0] = ind[:,0]

    labels_output = resizeThermal(tm, bbb)
    # labels_output = labels_output.to(cfg.DEVICE)

    sam,bbb,tm = sam.to(cfg.DEVICE), bbb.to(cfg.DEVICE), tm.to(cfg.DEVICE)

    out_RRN = RRN_net(sam,bbb)
    # out_RRN = out_RRN.cpu().detach().numpy()

    bbb = bbb.cpu().detach().numpy()

    ther = convertTensor2Img(tm,norm=False)
    imgg = visualizeRP(ther, bbb)
    # print(imgg.dtype)
    cv2.imshow('aa',imgg)

    for ind,labels in enumerate(out_RRN[:4]):
        # print('output')
        p = convertTensor2Img(labels,norm=False)
        cv2.imshow('rrn{}'.format(ind), p)

    for ind,labels in enumerate(labels_output[:4]):
        p = convertTensor2Img(labels,norm=False)
        cv2.imshow('bbs{}'.format(ind), p)

    cv2.waitKey(0)
    cv2.destroyAllWindows()
Ejemplo n.º 2
0
def testResizeThermal(sample):
    sam = sample['image']
    bbb = sample['bb']
    tm = sample['tm']
    print(sample['img_info'])
    gt = sample['gt']

    bbb = bbb.cpu()
    bz = bbb.size(0)
    num = bbb.size(1)
    bbb = bbb.view(-1,5)


    gt = gt.cpu()
    gt = gt.view(-1,5)
    gt = gt.detach().numpy()


    ind = torch.arange(bz).view(-1,1)
    ind = ind.repeat(1,num).view(-1,1)
    bbb[:,0] = ind[:,0]

    labels_output = resizeThermal(tm, bbb)
    print(labels_output.shape)
    # labels_output = labels_output.type('torch.ByteTensor')
    exit()
    ther = convertTensor2Img(tm,norm=False)
    bbb = bbb.detach().numpy()
    imgg = visualizeRP(ther, bbb[:9])

    cv2.imshow('winname', imgg)
    for ind,labels in enumerate(labels_output[:9]):
        p = convertTensor2Img(labels,norm=False)
        cv2.imshow('bbs{}'.format(ind), p)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
Ejemplo n.º 3
0
def train():
    THERMAL_PATH = '/storageStudents/K2015/duyld/dungnm/dataset/KAIST/train/images_train_tm/'
    ROOT_DIR = '/storageStudents/K2015/duyld/dungnm/dataset/KAIST/train/images_train'
    IMGS_CSV = 'mydata/imgs_train.csv'
    ROIS_CSV = 'mydata/rois_trainKaist_thr70_1.csv'

    params = {'batch_size': 6, 'shuffle': True, 'num_workers': 12}
    print(params)
    max_epoch = 10
    print('max_epoch', max_epoch)
    LR = 1e-6  #learning rate
    print('learning_rate', LR)
    MT = 0.9  #momentum

    device = torch.device("cuda:0")
    # cudnn.benchmark = True
    # transform = ToTensor()
    full_transform = transforms.Compose(
        [RandomHorizontalFlip(),
         ToTensor(), my_normalize()])
    # Normalize(rgb_mean,rgb_std)])

    my_dataset = MyDataset(imgs_csv=IMGS_CSV,
                           rois_csv=ROIS_CSV,
                           root_dir=ROOT_DIR,
                           ther_path=THERMAL_PATH,
                           transform=full_transform)

    dataloader = DataLoader(my_dataset, **params)

    RRN_net = MyRRN()
    RRN_net.to(device)

    RRN_net.load_state_dict(
        torch.load(
            'models/model24/model24_lr_1e-6_bz_6_NBS_128_norm_epoch_9.pth'))
    criterion = nn.MSELoss()
    optimizer = optim.SGD(filter(lambda p: p.requires_grad,
                                 RRN_net.parameters()),
                          lr=LR,
                          momentum=MT)

    for epoch in range(max_epoch):  # Lặp qua bộ dữ liệu huấn luyện nhiều lần
        running_loss = 0.0
        st = time.time()
        for i, data in enumerate(dataloader):
            # Lấy dữ liệu
            sample = data
            sam = sample['image']
            bbb = sample['bb']
            num = bbb.size(1)

            bbb = bbb.view(-1, 5)

            #reset id
            # bbb[:, 0] = bbb[:, 0] - bbb[0, 0]
            ind = torch.arange(params['batch_size'],
                               requires_grad=False).view(-1, 1)
            ind = ind.repeat(1, num).view(-1, 1)
            bbb[:, 0] = ind[:, 0]

            tm = sample['tm']
            # print(bbb.shape)
            # print(tm.shape)
            sam, bbb, tm = sam.to(device), bbb.to(device), tm.to(device)

            # roi_pool = ROIPool((50, 50), 1/1)

            # labels_output = roi_pool(tm,bbb)
            labels_output = resizeThermal(tm, bbb)
            labels_output = labels_output.to(device)

            # Xoá giá trị đạo hàm
            optimizer.zero_grad()

            # Tính giá trị tiên đoán, đạo hàm, và dùng bộ tối ưu hoá để cập nhật trọng số.
            out_RRN = RRN_net(sam, bbb)

            loss = criterion(out_RRN, labels_output)
            # print('loss at {}: '.format(i),loss.item())
            loss.backward()
            optimizer.step()

            # In ra số liệu trong quá trình huấn luyện
            running_loss += loss.item()
            if i % 10 == 9:  # In mỗi 2000 mini-batches.
                text = '[{}, {}] loss: {:.3f}  time: {:.3f}'.format(
                    epoch + 1, i + 1, running_loss / 10,
                    time.time() - st)
                print(text)
                with open('models/model26/log26.txt', 'a') as f:
                    f.write(text + '\n')
                running_loss = 0.0
                st = time.time()
        torch.save(
            RRN_net.state_dict(),
            'models/model26/model26_lr_1e-6_bz_6_NBS_128_norm_epoch_{}.pth'.
            format(epoch))
    print('Huấn luyện xong')
Ejemplo n.º 4
0
def test():
    TEST_THERMAL_PATH = '/storageStudents/K2015/duyld/dungnm/dataset/KAIST/test/images_test_tm/'
    TEST_ROOT_DIR = '/storageStudents/K2015/duyld/dungnm/dataset/KAIST/test/images_test'
    IMGS_CSV = 'mydata/imgs_test.csv'
    ROIS_CSV = 'mydata/rois_testKaist_thr70_0.csv'

    params = {'batch_size': 2, 'shuffle': True, 'num_workers': 24}

    device = torch.device("cuda:0")
    full_transform = transforms.Compose([
        RandomHorizontalFlip(),
        ToTensor(),
    ])
    # Normalize(rgb_mean,rgb_std)])

    my_dataset = MyDataset(imgs_csv=IMGS_CSV,
                           rois_csv=ROIS_CSV,
                           root_dir=TEST_ROOT_DIR,
                           ther_path=TEST_THERMAL_PATH,
                           transform=full_transform)
    print(my_dataset.__len__())
    dataloader = DataLoader(my_dataset, **params)

    RRN_net = MyRRN()
    RRN_net.to(device)
    RRN_net.load_state_dict(
        torch.load(
            'models/model21/model21_lr_1e-7_bz_6_NBS_128_data_True_epoch_7.ptx'
        ))

    st = time.time()
    running_loss = 0.0
    total_loss = []
    criterion = nn.MSELoss()

    for i, sample in enumerate(dataloader):
        # Lấy dữ liệu
        sam = sample['image']
        bbb = sample['bb']
        num = bbb.size(1)
        bbb = bbb.view(-1, 5)
        #reset id
        # bbb[:, 0] = bbb[:, 0] - bbb[0, 0]

        ind = torch.arange(params['batch_size'],
                           requires_grad=False).view(-1, 1)
        ind = ind.repeat(1, num).view(-1, 1)
        bbb[:, 0] = ind[:, 0]

        tm = sample['tm']
        # print(bbb.shape)
        # print(tm.shape)
        sam, bbb, tm = sam.to(device), bbb.to(device), tm.to(device)

        # roi_pool = ROIPool((50, 50), 1/1)

        # labels_output = roi_pool(tm,bbb)
        labels_output = resizeThermal(tm, bbb)
        labels_output = labels_output.to(device)
        # print('label shape',labels_output.shape)

        # Tính giá trị tiên đoán, đạo hàm, và dùng bộ tối ưu hoá để cập nhật trọng số.
        out_RRN = RRN_net(sam, bbb)

        loss = criterion(out_RRN, labels_output)

        # In ra số liệu trong quá trình huấn luyện
        running_loss += loss.item()
        if i % 10 == 9:  # In mỗi 9 mini-batches.
            text = '[{}, {}] loss: {:.3f}  time: {:.3f}'.format(
                0 + 1, i + 1, running_loss / 10,
                time.time() - st)
            print(text)
            with open('test2_model21_epoch7.txt', 'a') as f:
                f.write(text + '\n')
            total_loss.append(running_loss)
            running_loss = 0.0
            st = time.time()
    print("TOTAL: ", sum(total_loss) / len(total_loss))
Ejemplo n.º 5
0
def train():
    params = {
        'batch_size': cfg.TRAIN.BATCH_SIZE,
        'shuffle': cfg.TRAIN.SHUFFLE,
        'num_workers': cfg.TRAIN.NUM_WORKERS
    }
    print(params)
    max_epoch = cfg.TRAIN.MAX_EPOCH
    print('max_epoch', max_epoch)
    LR = cfg.TRAIN.LEARNING_RATE  #learning rate
    print('learning_rate', LR)
    MT = cfg.TRAIN.MOMENTUM

    # cudnn.benchmark = True
    # transform = ToTensor()
    full_transform = transforms.Compose([
        RandomHorizontalFlip(),
        ToTensor(),
        Normalize(cfg.BGR_MEAN, cfg.BGR_STD)
    ])

    my_dataset = MyDataset(imgs_csv=cfg.TRAIN.IMGS_CSV,
                           rois_csv=cfg.TRAIN.ROIS_CSV,
                           root_dir=cfg.TRAIN.ROOT_DIR,
                           ther_path=cfg.TRAIN.THERMAL_PATH,
                           transform=full_transform)

    dataloader = DataLoader(my_dataset, **params)

    RRN_net = MyRRN()
    RRN_net.to(cfg.DEVICE)

    RRN_net.load_state_dict(
        torch.load(
            'models/RRN/model24/model24_lr_1e-6_bz_6_NBS_128_norm_epoch_9.pth')
    )
    criterion = nn.MSELoss()
    optimizer = optim.SGD(filter(lambda p: p.requires_grad,
                                 RRN_net.parameters()),
                          lr=LR,
                          momentum=MT)

    f = open('models/RRN/model27/log27.txt', 'a')
    for epoch in range(max_epoch):  # Lặp qua bộ dữ liệu huấn luyện nhiều lần
        running_loss = 0.0
        st = time.time()
        for i, data in enumerate(dataloader):
            # Lấy dữ liệu
            sample = data
            sam = sample['image']
            bbb = sample['bb']
            num = bbb.size(1)

            bbb = bbb.view(-1, 5)

            #reset id
            # bbb[:, 0] = bbb[:, 0] - bbb[0, 0]
            ind = torch.arange(params['batch_size'],
                               requires_grad=False).view(-1, 1)
            ind = ind.repeat(1, num).view(-1, 1)
            bbb[:, 0] = ind[:, 0]

            tm = sample['tm']

            sam, bbb, tm = sam.to(cfg.DEVICE), bbb.to(cfg.DEVICE), tm.to(
                cfg.DEVICE)

            # labels_output = roi_pool(tm,bbb)
            labels_output = resizeThermal(tm, bbb)
            labels_output = labels_output.to(cfg.DEVICE)

            # Xoá giá trị đạo hàm
            optimizer.zero_grad()

            # Tính giá trị tiên đoán, đạo hàm, và dùng bộ tối ưu hoá để cập nhật trọng số.
            out_RRN = RRN_net(sam, bbb)

            loss = criterion(out_RRN, labels_output)
            # print('loss at {}: '.format(i),loss.item())
            loss.backward()
            optimizer.step()

            # In ra số liệu trong quá trình huấn luyện
            running_loss += loss.item()
            if i % 10 == 9:  # In mỗi 2000 mini-batches.
                text = '[{}, {}] loss: {:.3f}  time: {:.3f}'.format(
                    epoch + 1, i + 1, running_loss / 10,
                    time.time() - st)
                print(text)

                f.write(text + '\n')
                running_loss = 0.0
                st = time.time()
        torch.save(
            RRN_net.state_dict(),
            'models/RRN/model27/model27_lr_1e-6_bz_6_NBS_128_norm_epoch_{}.pth'
            .format(epoch))
    f.close()
    print('Huấn luyện xong')