def test_multisource(Res_model, A_model, featurenet, main=False): Res_model.eval() test_record = [] # testset = FAB_DataSet(TEST_DIR, ['people_to_people.json']) # use this for multispeaker testset = FMA_DataSet(TEST_DIR, ['captaincook_white.json'], TEST_DIR, ['captaincook_clean.json']) if main: testloader = torch.utils.data.DataLoader(dataset = testset, \ batch_size = BS, \ shuffle = False) else: testloader = torch.utils.data.DataLoader(dataset = testset, \ batch_size = BS, \ shuffle = False) for i, data in enumerate(testloader, 0): # get mix spec & label feat_data, mix_specs, a_specs = data # use this for denoise test print("mix_specs = ", np.sum(np.array(mix_specs))) mix_specs = mel_norm(mix_specs) / 10 # use this for denoise test # feat_data, a_specs, b_specs = data # use this for multispeaker test # mix_specs = mel_norm(mix(a_specs, b_specs)) # use this for multispeaker test print("mix_specs = ", np.sum(np.array(mix_specs))) target_specs = mel_norm(a_specs) / 10 # b_specs = mel_norm(b_specs) # use this for multispeaker test # target_specs = a_specs # use this for multispeaker test if ATTEND: # get feature feats = featurenet.feature(feat_data) # feed in feature to ANet a7, a6, a5, a4, a3, a2 = A_model(feats) # Res_model tops = Res_model.upward(mix_specs, a7, a6, a5, a4, a3, a2) else: tops = Res_model.upward(mix_specs) #top_record.append(tops.detach().numpy().tolist()) outputs = Res_model.downward(tops, shortcut=True) loss_test = criterion(outputs, target_specs) if (not main) or (main and i % 1 == 0): # print images: mix, target, attention, separated tarr = (target_specs[0]).view(256, 128).detach().numpy() #mask = (b_specs[0]).view(256, 128).detach().numpy() mixx = (mix_specs[0]).view(256, 128).detach().numpy() outt = (outputs[0]).view(256, 128).detach().numpy() cv2.imwrite( os.path.join(ROOT_DIR, 'results/people_to_people/' + str(i) + "_tar.png"), tarr) # cv2.imwrite(os.path.join(ROOT_DIR, 'results/people_to_people/' + str(i) + "_mask.png"), mask) cv2.imwrite( os.path.join(ROOT_DIR, 'results/people_to_people/' + str(i) + "_mix.png"), mixx) cv2.imwrite( os.path.join(ROOT_DIR, 'results/people_to_people/' + str(i) + "_sep.png"), outt) print(np.mean(inv_mel(tarr[-10:])), np.mean(inv_mel(mixx[-10:]))) return np.average(test_record)
# ============================================ from mel import mel_norm, mel zeros = torch.zeros(bs, 256, 128) Res_model.eval() for epo in range(1): # train for i, data in enumerate(testloader, 0): # get mix spec & label feat_data, _, a_specs = data feat_data = feat_data.squeeze() a_specs = a_specs.squeeze() a_specs = mel_norm(a_specs) target_specs = a_specs # get feature feats = featurenet.feature(feat_data) # feed in feature to ANet a7, a6, a5, a4, a3, a2 = A_model(feats) # Res_model tops = Res_model.upward(a_specs, a7, a6, a5, a4, a3, a2) outputs = Res_model.downward(tops, shortcut = True).squeeze() loss_train = criterion(outputs, target_specs)
zeros = torch.zeros(BS, 256, 128) for epo in range(epoch): # train for i, data in enumerate(mixloader, 0): Res_model.train() # get mix spec & label feat_data, a_specs, b_specs = data feat_data = feat_data.squeeze() #a_specs = norm(a_specs.squeeze()) #b_specs = norm(b_specs.squeeze()) mix_specs = mel_norm(mix(a_specs, b_specs)) target_specs = mel_norm(a_specs) #feat_optimizer.zero_grad() anet_optimizer.zero_grad() res_optimizer.zero_grad() # get feature feats = featurenet.feature(feat_data) # feed in feature to ANet a7, a6, a5, a4, a3, a2 = A_model(feats) # Res_model tops = Res_model.upward(mix_specs, a7, a6, a5, a4, a3, a2)
except: print("model not available") #============================================= # Loss #============================================= criterion = nn.MSELoss() loss_record = [] from mel import mel_norm model.eval() for i, data in enumerate(testloader, 0): data = mel_norm(data) top = model.upward(data) outputs = model.downward(top, shortcut=True) targets = data.view(bs, 1, 256, 128) outputs = outputs.view(bs, 1, 256, 128) loss = criterion(outputs, targets) loss_record.append(loss.item()) print('[%d] loss: %.3f' % (i, loss.item())) if i % 1 == 0: inn = data[0].view(256, 128).detach().numpy() * 255 cv2.imwrite(
# Train #============================================= from mel import mel, norm, mel_norm zeros = torch.zeros(BS, 256, 128) Res_model.train() for epo in range(epoch): # train for i, data in enumerate(mixloader, 0): # get mix spec & label feat_data, a_specs, _ = data feat_data = feat_data.squeeze() target_specs = mel_norm(a_specs.squeeze()) # a_specs = a_specs.squeeze() # a_specs = norm(a_specs) # target_specs = a_specs # feat_optimizer.zero_grad() anet_optimizer.zero_grad() res_optimizer.zero_grad() # get feature feats = featurenet.feature(feat_data) # feed in feature to ANet a7, a6, a5, a4, a3, a2 = A_model(feats)