Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cannot validate results on new dataset. #2

Open
Ravi-Agrawal-Bose opened this issue Jul 16, 2020 · 7 comments
Open

Cannot validate results on new dataset. #2

Ravi-Agrawal-Bose opened this issue Jul 16, 2020 · 7 comments

Comments

@Ravi-Agrawal-Bose
Copy link

Hey, I tried to validate the results on two other datasets, the StructVIO dataset, and the ADVIO dataset. Have you guys tried to validate the results on any other datasets?

Attaching code of the Struct VIO data preparation.

`
class CustomDataset(BaseDataset):
def init(self, data_dir, predata_dir, train_seqs, val_seqs,
test_seqs, mode, N, min_train_freq, max_train_freq, dt=0.005):
super().init(predata_dir, train_seqs, val_seqs, test_seqs, mode, N, min_train_freq, max_train_freq, dt)
# convert raw data to pre loaded data
self.read_data(data_dir)

def read_data(self, data_dir):
    r"""Read the data from the dataset"""

    f = os.path.join(self.predata_dir, 'Mech-01.p') # if processed data exist
    if True and os.path.exists(f):
        print("Processed data found")
        return

    print("Start read_data, be patient please")

    # change this to support advio dataset
    def set_path(seq):
        path_imu = os.path.join(data_dir, seq, seq, "imu0", "data.csv")
        path_gt = os.path.join(data_dir, seq,  seq+"-ArUco-a.txt")
        path_gt1 = os.path.join(data_dir, seq, "vicon.txt")
        return path_imu, path_gt, path_gt1

    sequences = os.listdir(data_dir)
    # read each sequence
    for sequence in sequences:
        print("\nSequence name: " + sequence)
        path_imu, path_gt, path_gt1 = set_path(sequence)
        imu = np.genfromtxt(path_imu, delimiter=",", skip_header=1)
        try:
            gt = np.genfromtxt(path_gt, delimiter="", skip_header=0)
            print("Ground Truth File: %s" %path_gt)
        except:
            gt = np.genfromtxt(path_gt1, delimiter="", skip_header=0)
            print("Ground Truth File: %s" % path_gt1)
        # import ipdb; ipdb.set_trace()
        imu[:, 0] = imu[:, 0]/1e9 # converting to second

        # time synchronization between IMU and ground truth
        t0 = np.max([gt[0, 0], imu[0, 0]])
        t_end = np.min([gt[-1, 0], imu[-1, 0]])

        # start index
        idx0_imu = np.searchsorted(imu[:, 0], t0)
        idx0_gt = np.searchsorted(gt[:, 0], t0)

        # end index
        idx_end_imu = np.searchsorted(imu[:, 0], t_end, 'right')
        idx_end_gt = np.searchsorted(gt[:, 0], t_end, 'right')

        # subsample
        imu = imu[idx0_imu: idx_end_imu]
        gt = gt[idx0_gt: idx_end_gt]

        # printing the shape of the data

        ts = np.array(imu[:, 0], dtype="float64")

        # # interpolate
        t_gt = gt[:, 0]
        gt = self.interpolate(np.array(gt, dtype="float64"), np.array(gt[:, 0], dtype="float64"), ts)

        imu[:, 1:4] = imu[:, 1:4] - imu[0, 1:4]
        print(imu.shape)
        print(gt.shape)
        # import ipdb; ipdb.set_trace()
        # take ground truth position
        p_gt = gt[:, 1:4] #p_gt = gt[:, 1:4]
        p_gt = p_gt - p_gt[0]

        # take ground true quaternion pose
        # q_gt = torch.Tensor(gt[:, 4:8]).double()
        q_gt = SO3.qnorm(torch.Tensor(gt[:, 4:8]).double())
        # q_gt = q_gt / q_gt.norm(dim=1, keepdim=True)
        Rot_gt = SO3.from_quaternion(q_gt.cuda(), ordering='wxyz').cpu()

        # convert from numpy
        p_gt = torch.Tensor(p_gt).double()
        v_gt = torch.zeros_like(p_gt).double()
        v_gt[1:] = (p_gt[1:] - p_gt[:-1]) / self.dt
        imu = torch.Tensor(imu[:, 1:]).double()

        # compute pre-integration factors for all training
        mtf = self.min_train_freq
        dRot_ij = bmtm(Rot_gt[:-mtf], Rot_gt[mtf:])
        dRot_ij = SO3.dnormalize(dRot_ij.cuda())
        dxi_ij = SO3.log(dRot_ij).cpu()

        # masks with 1 when ground truth is available, 0 otherwise
        masks = dxi_ij.new_ones(dxi_ij.shape[0])
        tmp = np.searchsorted(t_gt, ts[:-mtf])
        diff_t = ts[:-mtf] - t_gt[tmp]
        masks[np.abs(diff_t) > 0.01] = 0


        # save for all training
        mondict = {
            'xs': torch.cat((dxi_ij, masks.unsqueeze(1)), 1).float(),
            'us': imu.float(),
        }
        # print(mondict["xs"].shape)
        # print(mondict["us"].shape)
        pdump(mondict, self.predata_dir, sequence + ".p")
        # save ground truth
        mondict = {
            'ts': ts,
            'qs': q_gt.float(),
            'vs': v_gt.float(),
            'ps': p_gt.float(),
        }
        pdump(mondict, self.predata_dir, sequence + "_gt.p")

`

@mbrossar
Copy link
Owner

I have not tried to validate on the StructVIO or ADVIO datasets.

@jay80253504
Copy link

Hello Ravi-Agrawal-Bose,have you solved the problem?
I tried to validate the results on myself collected dataset and face the same problem as you. The raw IMU and net IMU are almostly same such as following:
捕获
I fine-tuned the parameter 'gyro_std‘ but it doesn't work.
So could you please give me some advice?
Thanks!

@yafeiliu666
Copy link

Hello Ravi-Agrawal-Bose,have you solved the problem? I tried to validate the results on myself collected dataset and face the same problem as you. The raw IMU and net IMU are almostly same such as following: 捕获 I fine-tuned the parameter 'gyro_std‘ but it doesn't work. So could you please give me some advice? Thanks!

Hello, the author's data set link in this code has expired, can you resend me a copy of the data set used in it? Thank you so much!

@dreamer1031
Copy link

Hello Ravi-Agrawal-Bose,have you solved the problem? I tried to validate the results on myself collected dataset and face the same problem as you. The raw IMU and net IMU are almostly same such as following: 捕获 I fine-tuned the parameter 'gyro_std‘ but it doesn't work. So could you please give me some advice? Thanks!

hello! the author's dataset link and parameters link is not avaliable,could you send the downloaded file to me ? thank you ver much!!!
My email address: [email protected]

@alun9258
Copy link

你好Ravi-Agrawal-Bose,你解决了问题吗?我试图在自己收集的数据集上验证结果,并面临与您相同的问题。原始 IMU 和网络 IMU 基本相同,如下所示: 捕获 我微调了参数“gyro_std”,但它不起作用。那么你能给我一些建议吗?谢谢!

您好,此代码中作者的数据集链接已过期,您能给我重新发送其中使用的数据集的副本吗?非常感谢!

hello! the author's dataset link and parameters link is not avaliable,could you send the downloaded file to me ? thank you
My email address: [email protected]

@alun9258
Copy link

Hello Ravi-Agrawal-Bose,have you solved the problem? I tried to validate the results on myself collected dataset and face the same problem as you. The raw IMU and net IMU are almostly same such as following: 捕获 I fine-tuned the parameter 'gyro_std‘ but it doesn't work. So could you please give me some advice? Thanks!

hello! the author's dataset link and parameters link is not avaliable,could you send the downloaded file to me ? thank you ver much!!! My email address: [email protected]

hello! the author's dataset link and parameters link is not avaliable,could you send the downloaded file to me ? thank you
My email address: [email protected]

@chi-chien
Copy link

Hello Ravi-Agrawal-Bose,have you solved the problem? I tried to validate the results on myself collected dataset and face the same problem as you. The raw IMU and net IMU are almostly same such as following: 捕获 I fine-tuned the parameter 'gyro_std‘ but it doesn't work. So could you please give me some advice? Thanks!

Hello jay80253504!, did you ever solve this problem?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants