Speech AI/음성 인식

[KALDI] allocate_egs.py 무한루프 현상

1code 2021. 12. 3. 20:16
728x90

allocate_egs.py 무한루프 현상

KALDI Recipe 중 voxceleb 을 진행하다가 stage 6 ~ 8 x-vector training 부분에서 무한루프 에러가 발생했다.

이 화면에서 몇시간이 지나고도 멈춰있다면 아래 방식으로 해결이 가능하다.

 

sid/nnet3/xvector/allocate_egs.py 에서 일부 코드 수정

... (생략) line 178
def get_random_utt(spkr, spk2utt):
    this_utts = spk2utt[spkr]
    this_num_utts = len(this_utts)
    i = random.randint(0, this_num_utts-1)
    utt = this_utts[i]
    return utt

...(생략) line 255
        for n in range(this_num_egs):
            if len(spkrs) == 0:
                print("Ran out of speakers for archive {0}".format(archive_index + 1))
                break
            spkr = spkrs.pop()
            utt_len = 0
            while utt_len < length:
                utt = get_random_utt(spkr, spk2utt)
                utt_len = utt2len[utt]
            offset = get_random_offset(utt_len, length)
            this_egs.append( (utt, offset) )
        all_egs.append(this_egs)
    info_f.close()

이 부분을 아래처럼 변경해 준다.

def get_random_utt(spkr, spk2utt, min_length):
    this_utts = spk2utt[spkr]
    this_num_utts = len(this_utts)
    i = random.randint(0, this_num_utts-1)
    utt = this_utts[i]
    return utt


for n in range(this_num_egs):
            if len(spkrs) == 0:
                print("Ran out of speakers for archive {0}".format(archive_index + 1))
                break
            spkr = spkrs.pop()
            utt_len = 0
            nutt_spkr = len(spk2utt[spkr])
            break_loop = 0
            while utt_len < length and break_loop < nutt_spkr:
                utt = get_random_utt(spkr, spk2utt, length)
                utt_len = utt2len[utt]
                break_loop += 1
            if break_loop < nutt_spkr:
                offset = get_random_offset(utt_len, length)
                this_egs.append( (utt, offset) )
        all_egs.append(this_egs)
    info_f.close()
[출처] https://github.com/kaldi-asr/kaldi/issues/4319

 

728x90