[MIKANTONE] 임의 음소 지정 + Colab 메모리 관리

데이터셋의 preprocessing 이야기, 그리고 최고의 메모리 관리는 메모리를 늘리는 것이라는 이야기

우선, 어느 정도 완성된 모델의 목소리를 들어 보도록 합시다.

epoch 45 정도 돌린 것이니 사실상 거의 학습이 끝났다고 보아도 됩니다.

물론 epoch 53 돌고 있는 지금도 로스는 꾸준히 내려가고 있긴 합니다만...

데이터셋 라벨링 – 임의 음소 지정

미캉톤의 데이터셋은 음절 단위가 아니라 음소 단위이기에,

음절 단위의 라벨 데이터를 음소 단위로 직접 나누어 주어야 한다... 고 생각했습니다.

하지만 아니었습니다.

각 음소의 길이까지 학습할 거라면 그게 맞지만, 미캉톤의 경우 모델 실행 코드(에디터) 에서 음소의 길이를 임의로 지정하고 있습니다.

    if len(syl) > 0:
      for j in range(len(syl)):
        if syl[j] in 'aeiouNT':
          timeV += 1
        elif syl[j] in 'wy':
          timeC += 1
      if timeV > 0:
        lenV = (time - timeC*1)/timeV
      else :
        lenV = time
      for j in range(len(syl)):
        if j > 0:
          if syl[j-1] in 'aeiouNT':
            timeArr.append(timeArr[-1]+lenV)
          elif syl[j-1] in 'wy':
            timeArr.append(timeArr[-1] + 1)
          elif syl[j-1] in 'rktp' or syl[j-1] == 'ch' or syl[j-1] == 'ts':
            timeArr[-1] = timeArr[-1] - 1
            timeArr.append(timeArr[-1] + 1)
          else:
            timeArr[-1] = timeArr[-1] - 2
            timeArr.append(timeArr[-1] + 2)
        else:
          timeArr.append(0)

이것은

코드입니다.

개인의 발성 습관을 고려하지 않고 일괄적으로 발성 시간을 통일해 주었기 때문에,

기존의 정확한 라벨링 데이터를 사용하면 오히려 부자연스러워지게 됩니다.

그런데 음절 단위로 라벨링을 한 다음, 방금 제시한 코드대로 자음과 모음을 임의로 지정해 준다면

컴퓨터는 그 임의로 지정한 음소들 사이에서 규칙을 찾아서 자연스러운 결과를 도출하게 됩니다.

입력 데이터의 길이에 상관 없이 입력 받기

이런 식이라면, 굳이 힘들게 라벨링 작업을 한 번 더 할 필요 없이,

그냥 제공받은 원본 데이터와 라벨 데이터를 그대로 입력해 주면 되는 것입니다.

대신 기존에는 모든 파일을 15초씩 수동으로 끊어서 입력했는데,

이 부분을 수정해서 일단 파일을 그대로 입력받고, 알아서 필요한 길이만큼 잘라 주는 코드를 작성해서 적용했습니다.

그러니 데이터셋의 준비가 거의 몇 분 만에 끝났습니다.

그러나.. 메모리의 역습

자, 그렇게 준비된 저의 데이터셋은 약 130분 분량으로, 5초씩 끊어 별도의 이미지로 저장하고 있기 때문에 총 1562개의 세트가 들어 있습니다.

1562장의, 512x512픽셀의 RGB 이미지, 인풋 아웃풋 2장.

그리고 이걸 하나의 텐서로서 관리합니다.

단순히 계산해 보면 13기가바이트 정도의 메모리를 잡습니다.

변수를 아무리 재활용해가며 메모리 관리를 해도 이미 텐서 하나가 13기가바이트이기에,

일반적인 컴퓨터에서 돌리긴 어렵습니다.

img

구글에서 기본적으로 제공하는 T4 GPU + 12GB CPU 메모리 + 15GB GPU 메모리 역시 사용할 수 없습니다.

img

대신 런타임 유형 변경에서 TPU v2를 선택하면, 제가 Colab Pro를 구독하고 있어서 그런지 300기가바이트 정도의 메모리를 할당해 주는데,

여기에서 작업을 하면 메모리 문제를 생각하지 않고 여유로운 작업이 가능합니다.

(대신 학습속도가 4배나 느리긴 합니다... -_–)

img

이렇게 15시간 정도 학습시킨 결과물입니다. (T4 기준이면 4시간 좀 안될 겁니다.)

위 영상은 12시간짜리 결과물이구요.... (그리고 T4 기준 3시간 ㅠ)

+

여행당일기

잡다한 블로그

카테고리

메인
전체보기
소개
공지
일기
개발
전체보기
연합우주
MIKANTONE
CabinetKey
창작
전체보기
커미션
단편
일러스트
3D
음악
한문
현재연