-
Notifications
You must be signed in to change notification settings - Fork 14
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
Unable to reproduce the results mentioned in your paper. #15
Comments
@Vincentqyw The iteration boost loss should not be 0. The plot of iteration boost loss should look like this fig: And for the matching loss of ORB-based boosted descriptor in MegaDepth dataset, the training loss won't be so small. Maybe there is something wrong in your GT. Could you please show me your whole entire training process? And which training set was used MegaDepth or COCO? Which training way did you choose? To be clear: the models in this repo were trained by using MegaDepth dataset and the way training while running feature extraction. |
Here are the training settings:
ORB+Boost-B:
keypoint_dim: 4
keypoint_encoder: [32, 64, 128, 256]
descriptor_dim: 256
descriptor_encoder: [512, 256]
Attentional_layers: 4
last_activation: 'tanh'
l2_normalization: false
output_dim: 256
|
Another question about def generate_read_function(method, extension='ppm', type='float'):
def read_function(seq_name, im_idx):
aux = np.load(os.path.join(dataset_path, seq_name, '%d.%s.%s' % (im_idx, extension, method)))
if type == 'float':
return aux['keypoints'], aux['descriptors']
else:
descriptors = np.unpackbits(aux['descriptors'], axis=1, bitorder='little')
descriptors = descriptors * 2.0 - 1.0 # <---- THIS LINE
return aux['keypoints'], descriptors
return read_function If the descriptor type is binary, the loaded descriptors are mapped to {-1,1} instead of {0,1} according to the function above. However, I believe it should not be classified as a typical binary descriptor. My question is, why did you add this operation? |
Binary descriptors are typically matched using Hamming distance. Hamming distance usually refers to the number of differing bits between two binary sequences which can be easily obtained by an XOR operation. Both ORB and the binary descriptors in our paper are stored using 32 bytes, which is equivalent to 256 bits. To better utilize the GPU for parallel computation of Hamming distance (and to make it differentiable for training), we unpack these 256 bits and store them using float type during training and evaluation, mapping them from {0,1} to {-1,1}. At this point, Hamming distance can be simply calculated by the formula To be clear, the operation you mentioned is only used for training and evaluation with GPU and PyTorch, for other tests like the SLAM application, we still use the packed 32 bytes and match them using the XOR operation. |
I got it! Indeed you are correct. I tried to proof Given two binary numbers The Hamming distance
|
Hi, thank you for open-sourcing this fantastic algorithm. I have been using your open-source code to train
ORB+Boost-B
and then evaluate this algorithm using the hpatches dataset. However, I found that theMMA
andmatch inliers
are much lower than those of your publicly availableORB+Boost-B
model.Here are some results when benchmarking HPatches:
and here are some logs when training
ORB+Boost-B
:I confirmed that the experimental configuration has been kept the same as the parameters you provided in the open-source code. Could you please explain the reason for this? Thank you for your response!
The text was updated successfully, but these errors were encountered: