loftr 0.1.1

Native Rust/tch implementation of LoFTR feature matching
Documentation
use super::*;

#[test]
fn outdoor_config_matches_kornia_defaults() {
    let config = LoftrConfig::outdoor();
    assert_eq!(config.backbone_type, BackboneType::ResNetFpn);
    assert_eq!(config.resolution, (8, 2));
    assert_eq!(config.fine_window_size, 5);
    assert!(config.fine_concat_coarse_feat);
    assert_eq!(config.resnetfpn.block_dims, [128, 196, 256]);
    assert_eq!(config.coarse.layers.len(), 8);
    assert_eq!(config.coarse.attention, AttentionType::Linear);
    assert_eq!(config.match_coarse.match_type, MatchType::DualSoftmax);
    assert_eq!(
        config.fine.layers,
        vec![
            TransformerLayer::SelfAttention,
            TransformerLayer::CrossAttention
        ]
    );
    assert!(!config.coarse.temp_bug_fix);
}

#[test]
fn indoor_matches_outdoor_defaults() {
    let outdoor = LoftrConfig::outdoor();
    let indoor = LoftrConfig::indoor();
    assert_eq!(indoor, outdoor);
}

#[test]
fn indoor_new_only_flips_temp_bug_fix() {
    let indoor = LoftrConfig::indoor();
    let indoor_new = LoftrConfig::indoor_new();
    assert!(indoor_new.coarse.temp_bug_fix);
    assert_eq!(indoor_new.backbone_type, indoor.backbone_type);
    assert!((indoor_new.match_coarse.thr - indoor.match_coarse.thr).abs() < f64::EPSILON);
    assert_eq!(indoor_new.fine, indoor.fine);
}