Пример #1
0
def evaluate(items, outs, config, data_type="test"):
    eval_bpm = EvaluateBpm()
    eval_beat = EvaluateBeat(estimated_type="activation",
                             target_type="activation")
    eval_downbeat = EvaluateDownbeat(estimated_type="activation",
                                     target_type="activation")

    data, bpm_label, beattheta_label, downbeattheta_label = items
    beattheta_out, downbeattheta_out, deltabeat_out, deltadownbeat_out = outs

    # beat estimation
    beattheta_out = np.argmax(beattheta_out, axis=1) / 6000
    downbeattheta_out = np.argmax(downbeattheta_out, axis=1) / 6000
    activation = beattheta_out[:, :-1] - beattheta_out[:, 1:]
    activation[activation <= 0.7] = 1e-6
    beat_metrics = eval_beat.batch(beattheta_out, beattheta_label)
    downbeat_met = eval_downbeat.batch(downbeattheta_out, downbeattheta_label)

    # global bpm estimation
    bpm_out = deltabeat_out * 3000 / np.pi
    bpm_out = medfilt(bpm_out, kernel_size=[1, 21])
    if data_type == "valid":
        m, cnt = mode(np.round(bpm_out).astype(np.int64), axis=1)
        m = m[:, 0]
    elif data_type == "test":
        m = calc_bpm_from_theta(beattheta_out * 2 * np.pi, "beat")
    bpm_label = np.mean(bpm_label, axis=-1)
    bpm_metrics = eval_bpm.global_(m, bpm_label)

    ret = {"beat": beat_metrics, "bpm": bpm_metrics, "downbeat": downbeat_met}
    return ret
def evaluate(items, outs, config, trial=None):
    data, bpm_label, beat_label = items
    bpm_out, beat_out = outs
    bpm_out = np.argmax(bpm_out, axis=1)  # (batchsize,300) -> (batchsize)
    eval_beat = EvaluateDownbeat(estimated_type="activation",
                                 target_type="activation")
    eval_bpm = EvaluateBpm()
    beat_metrics = eval_beat.batch(beat_out, beat_label)
    bpm_label = np.mean(bpm_label, axis=-1)
    bpm_metrics = eval_bpm.global_(bpm_out, bpm_label)
    ret = {"downbeat": beat_metrics, "bpm": bpm_metrics}
    return ret
Пример #3
0
def evaluate(items, outs, config, trial=None):
    # eval_beat = EvaluateBeat(estimated_type="index", target_type="activation")
    eval_downbeat = EvaluateDownbeat(estimated_type="activation",
                                     target_type="activation")

    data, downbeat_label = items
    # theta, idxs = numpy_fft(outs * 2 * np.pi, 100)
    # act = (theta[:, :-1] - theta[:, 1:]) / (2 * np.pi)
    # act[act <= 0] = 1e-5
    downbeat_metrics = eval_downbeat.batch(outs, downbeat_label)

    ret = {"downbeat": downbeat_metrics}
    return ret
def evaluate(items, outs, config, trial=None):
    eval_bpm = EvaluateBpm()
    eval_downbeat = EvaluateDownbeat(estimated_type="activation",
                                     target_type="activation")

    data, bpm_label, beat_label = items
    downbeattheta_out, delta_beattheta = outs

    # beat estimation
    downbeattheta_out = np.argmax(downbeattheta_out, axis=1) / 6000
    beat_metrics = eval_downbeat.batch(downbeattheta_out + 1e-6, beat_label)

    # # global bpm estimation
    # bpm_out = delta_beattheta * 3000 / np.pi
    # bpm_out = medfilt(bpm_out, kernel_size=[1, 21])
    # m, cnt = mode(np.round(bpm_out).astype(np.int64), axis=1)
    bpm_label = np.mean(bpm_label, axis=-1)
    m = calc_bpm_from_theta(downbeattheta_out * 2 * np.pi, "downbeat")
    bpm_metrics = eval_bpm.global_(m, bpm_label)

    ret = {"beat": beat_metrics, "bpm": bpm_metrics}
    return ret