mbrossar / denoise-imu-gyro

Convolutional Neural Networks for Denoising Gyroscopes of Low-Cost IMUs
MIT License
326 stars 67 forks source link

Cannot validate results on new dataset. #2

Open Ravi-Agrawal-Bose opened 4 years ago

Ravi-Agrawal-Bose commented 4 years ago

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 commented 4 years ago

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

jay80253504 commented 3 years ago

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 commented 1 year ago

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 commented 1 year ago

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: yanfshen@163.com

alun9258 commented 5 months ago

你好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: wyilun@pku.edu.cn

alun9258 commented 5 months ago

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: yanfshen@163.com

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: wyilun@pku.edu.cn

chi-chien commented 5 months ago

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?