def main():

    # Basic set
    patchsize = 40

    # Load networks
    DEVICE = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
    model_obj = OBJ_CNN().to(DEVICE)
    model_obj.load_state_dict(
        torch.load('./Model parameter/fire/obj_model_init.pkl'))

    # Traning path setting
    dataDir = './'
    trainingDir = dataDir + 'training/'  # If u want to do experiment on test dataset, change it
    trainingSets = util.getSubPaths(trainingDir)

    # Initialize training datasets
    trainingDataset = dataset.Dataset()
    trainingDataset.readFileNames(trainingSets[0])
    trainingDataset.SetObjID(1)

    i = 523  # If u want to do experiment on other RGB image, change it
    imgBGR = trainingDataset.getBGR(i)

    # Do every pixel sample
    sample = [[idx % 640, idx // 640] for idx in range(480 * 640)]
    sample_with_patch = [idx for idx in sample if patchsize / 2 <= idx[0] < 640 - patchsize / 2 and \
                                                  patchsize / 2 <= idx[1] < 480 - patchsize / 2]
    sample_with_patch = np.array(sample_with_patch).reshape([440, 600, 2])
    pred_coord = cnn.getCoordImg(colorData=imgBGR,
                                 sampling=sample_with_patch,
                                 patchsize=patchsize,
                                 model=model_obj) / 1000.0
    return pred_coord
    # Parameters setting
    inputSize = 42
    channels = 3
    trainingLimit = 320000
    trainingImages = 100
    trainingPatches = 512
    BATCHSIZE = 64
    lrInitPre = 0.0001
    storeIntervalPre = 1000
    lrInterval = 50000
    DEVICE = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

    # Training path setting
    dataDir = './'
    trainingDir = dataDir + 'training/'
    trainingSets = util.getSubPaths(trainingDir)

    # Test path setting
    dataDir = './'
    TestDir = dataDir + 'test/'
    TestSets = util.getSubPaths(TestDir)

    # transform for data
    transform = transforms.Compose([
        transforms.ToTensor(),
        transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
    ])

    '''
    If we wanna use fire scene, change the following:
    training.readFileNames(trainingSets[0]) -> training.readFileNames(trainingSets[1])
Beispiel #3
0
    # Parameter setting
    trainingImages = 100
    trainingHyps = 16
    trainingRounds = 80
    objTemperature = 10
    objBatchSize = 64
    lrInitPre = 0.0001
    CNN_OBJ_PATCHSIZE = 40
    CNN_RGB_PATCHSIZE = 42
    DEVICE = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

    # Training path setting
    dataDir = './'
    trainingDir = dataDir + 'training/'
    trainingSets = util.getSubPaths(trainingDir)

    # Load RGB CNN's parameters
    RGB_NET = OBJ_CNN()
    RGB_NET.load_state_dict(torch.load('./Model parameter/obj_model_init.pkl'))

    # Dataset process
    transform = transforms.Compose([
        transforms.ToTensor(),
        transforms.Normalize([0.5], [0.5]),
    ])

    # Initialize training dataset
    trainingDataset = dataset.Dataset()
    trainingDataset.readFileNames(trainingSets[0])
    trainingDataset.SetObjID(1)
Beispiel #4
0
def main():
    GlobalProp = properties.GlobalProperties()
    objHyps = GlobalProp.ransacIterations
    refSteps = GlobalProp.ransacRefinementIterations
    inlierThreshold2D = GlobalProp.ransacInlierThreshold2D
    refInlierCount = GlobalProp.ransacBatchSize
    ptCount = 4
    CNN_OBJ_PATCHSIZE = 40
    camMat = GlobalProp.getCamMat()
    CamMat = camMat.astype(np.float)
    DEVICE = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

    # Traning path setting
    dataDir = './'
    trainingDir = dataDir + 'training/'
    trainingSets = util.getSubPaths(trainingDir)
    print("Loading train set...\n")

    # Initialize training datasets
    training = dataset.Dataset()
    training.readFileNames(trainingSets[0])
    training.SetObjID(1)

    # For loss recording
    testfile = open('./Model parameter/chess/scene/ransac_test_loss.txt', 'a')

    # set for coordinate net
    model_obj = OBJ_CNN().to(DEVICE)
    model_obj.load_state_dict(
        torch.load('./Model parameter/chess/scene/obj_model_init.pkl'))

    # set for score net
    model_score = SCORE_CNN().to(DEVICE)
    model_score.load_state_dict(
        torch.load('./Model parameter/chess/scene/score_model_init.pkl'))

    model_obj.eval()
    model_score.eval()

    avgCorrect = 0
    expLosses = []
    sfEntropies = []
    rotErrs = []
    tErrs = []

    # For errors recording
    testErrfile = open('./Model parameter/chess/scene/ransac_test_errors.txt',
                       'a')

    # Training set
    TrainingRound = 5000
    round = 0

    # For recording
    # E2E_FILE = './end2end/'
    # if not os.path.exists(E2E_FILE):
    #     os.mkdir(E2E_FILE)
    # OBJ_E2E = E2E_FILE + 'model_obj_e2e.pkl'
    # SCORE_E2E = E2E_FILE + 'model_score_e2e.pkl'
    PARAMETER = list(model_obj.parameters()) + list(model_score.parameters())
    OPTIMIZER = torch.optim.SGD(PARAMETER, lr=lrInitE2E, momentum=momentumE2E)
    # OPTIMZER_OBJ = torch.optim.SGD(model_obj.parameters(), lr=lrInitE2E, momentum=momentumE2E)
    # OPTIMZER_SCORE = torch.optim.SGD(model_score.parameters(), lr=lrInitE2E, momentum=momentumE2E)

    time_start = time.time()

    argcorrect = 0
    argcorrect_score = 0
    argcorrect_ransac = 0

    dsac_errfile = open('./Model parameter/chess/scene/dsac_err.txt', 'a')
    ransac_errfile = open('./Model parameter/chess/scene/ransac_err.txt', 'a')
    inlier_errfile = open('./Model parameter/chess/scene/inlier_err.txt', 'a')

    # Beginning
    # len(testDataset)
    for i in range(0, 2000):
        print("Processing test image no.", i + 1)
        testBGR = training.getBGR(i)
        testInfo = training.getInfo(i)

        # process frame (same function used in training, hence most of the variables below are not used here), see method documentation for parameter explanation
        hyps = []
        refHyps = []
        # imgPts = []
        # objPts = []
        imgIdx = []
        estObj = np.zeros((CNN_OBJ_PATCHSIZE, CNN_OBJ_PATCHSIZE, 3))
        sampling = np.zeros((CNN_OBJ_PATCHSIZE, CNN_OBJ_PATCHSIZE, 3))
        sampledPoints = []
        inlierMaps = []
        pixelIdxs = []

        correct, correct_score, correct_ransac,\
            rotErr, tErr, \
            rotErr_score, tErr_score,\
            rotErr_ransac, tErr_ransac = cnn.processImage(
                          testBGR,
                          testInfo,
                          model_obj,
                          model_score,
                          objHyps,
                          ptCount,
                          CamMat,
                          inlierThreshold2D,
                          refInlierCount,
                          refSteps,
                          refHyps,
                          sampledPoints,
                          estObj,
                          sampling,
                          inlierMaps,
                          pixelIdxs,
                          OPTIMIZER,
                          round)
        time_end = time.time()
        print('total cost time:', time_end - time_start)
        if correct:
            argcorrect += 1
            print('argcorrect:', argcorrect)
        if correct_score:
            argcorrect_score += 1
            print('argcorrect_score:', argcorrect_score)
        if correct_ransac:
            argcorrect_ransac += 1
            print('argcorrect_ransac:', argcorrect_ransac)

        np.savetxt(dsac_errfile, np.array([rotErr_score, tErr_score]))
        np.savetxt(ransac_errfile, np.array([rotErr_ransac, tErr_ransac]))
        np.savetxt(inlier_errfile, np.array([rotErr, tErr]))

    dsac_errfile.close()
    ransac_errfile.close()
    inlier_errfile.close()