(data_loader, func, name='')
return(score, dict(ds=ds,sames=sames))
Function computes JND score using distance function 'func' in dataset 'data_loader'
    INPUTS
        data_loader - CustomDatasetDataLoader object - contains a JNDDataset inside
        func - callable distance function - calling d=func(in0,in1) should take 2
            pytorch tensors with shape Nx3xXxY, and return pytorch array of length N
    OUTPUTS
        [0] - JND score in [0,1], mAP score (area under precision-recall curve)
        [1] - dictionary with following elements
            ds - N array containing distances between two patches shown to human evaluator
            sames - N array containing fraction of people who thought the two patches were identical
    CONSTS
        N - number of test triplets in data_loader
Function computes JND score using distance function 'func' in dataset 'data_loader'
    INPUTS
        data_loader - CustomDatasetDataLoader object - contains a JNDDataset inside
        func - callable distance function - calling d=func(in0,in1) should take 2
            pytorch tensors with shape Nx3xXxY, and return pytorch array of length N
    OUTPUTS
        [0] - JND score in [0,1], mAP score (area under precision-recall curve)
        [1] - dictionary with following elements
            ds - N array containing distances between two patches shown to human evaluator
            sames - N array containing fraction of people who thought the two patches were identical
    CONSTS
        N - number of test triplets in data_loader
Function computes JND score using distance function func in dataset data_loader INPUTS data_loader - CustomDatasetDataLoader object - contains a JNDDataset inside func - callable distance function - calling d = func ( in0 in1 ) should take 2 pytorch tensors with shape Nx3xXxY and return pytorch array of length N OUTPUTS [ 0 ] - JND score in [ 0 1 ] mAP score ( area under precision - recall curve ) [ 1 ] - dictionary with following elements ds - N array containing distances between two patches shown to human evaluator sames - N array containing fraction of people who thought the two patches were identical CONSTS N - number of test triplets in data_loader
def score_jnd_dataset(data_loader, func, name=''):
    ''' Function computes JND score using distance function 'func' in dataset 'data_loader'
    INPUTS
        data_loader - CustomDatasetDataLoader object - contains a JNDDataset inside
        func - callable distance function - calling d=func(in0,in1) should take 2
            pytorch tensors with shape Nx3xXxY, and return pytorch array of length N
    OUTPUTS
        [0] - JND score in [0,1], mAP score (area under precision-recall curve)
        [1] - dictionary with following elements
            ds - N array containing distances between two patches shown to human evaluator
            sames - N array containing fraction of people who thought the two patches were identical
    CONSTS
        N - number of test triplets in data_loader
    '''

    ds = []
    gts = []

    for data in tqdm(data_loader.load_data(), desc=name):
        ds+=func(data['p0'],data['p1']).data.cpu().numpy().tolist()
        gts+=data['same'].cpu().numpy().flatten().tolist()

    sames = np.array(gts)
    ds = np.array(ds)

    sorted_inds = np.argsort(ds)
    ds_sorted = ds[sorted_inds]
    sames_sorted = sames[sorted_inds]

    TPs = np.cumsum(sames_sorted)
    FPs = np.cumsum(1-sames_sorted)
    FNs = np.sum(sames_sorted)-TPs

    precs = TPs/(TPs+FPs)
    recs = TPs/(TPs+FNs)
    score = lpips.voc_ap(recs,precs)

    return(score, dict(ds=ds,sames=sames))
def score_jnd_dataset ( data_loader , func , name = '' ) : ds = [ ] gts = [ ] for data in tqdm ( data_loader . load_data ( ) , desc = name ) : ds += func ( data [ 'p0' ] , data [ 'p1' ] ) . data . cpu ( ) . numpy ( ) . tolist ( ) gts += data [ 'same' ] . cpu ( ) . numpy ( ) . flatten ( ) . tolist ( ) sames = np . array ( gts ) ds = np . array ( ds ) sorted_inds = np . argsort ( ds ) ds_sorted = ds [ sorted_inds ] sames_sorted = sames [ sorted_inds ] TPs = np . cumsum ( sames_sorted ) FPs = np . cumsum ( 1 - sames_sorted ) FNs = np . sum ( sames_sorted ) - TPs precs = TPs / ( TPs + FPs ) recs = TPs / ( TPs + FNs ) score = lpips . voc_ap ( recs , precs ) return ( score , dict ( ds = ds , sames = sames ) )