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
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