레이블이 ai인 게시물을 표시합니다. 모든 게시물 표시
레이블이 ai인 게시물을 표시합니다. 모든 게시물 표시

2024년 7월 29일 월요일

PyTorch vs Tensorflow 코드 비교

목표는 파이토치로 모델을 구현하고 안드로이드용 모바일 버전 포팅 시에만 TFLite로 변환
공부하다 보니 근본적인 구조는 비슷한 것 같다.

간단한 모델 비교: PyTorch 버전

import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, TensorDataset

# 데이터셋 생성
x_data = torch.randn(100, 10)
y_data = torch.randint(0, 2, (100, 1)).float()
dataset = TensorDataset(x_data, y_data)
dataloader = DataLoader(dataset, batch_size=10, shuffle=True)

# 모델 정의
class SimpleNN(nn.Module):
    def __init__(self):
        super(SimpleNN, self).__init__()
        self.layer = nn.Linear(10, 1)
    
    def forward(self, x):
        return torch.sigmoid(self.layer(x))

model = SimpleNN()

# 손실 함수 및 최적화
criterion = nn.BCELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)

# 학습 루프
for epoch in range(100):
    for batch_x, batch_y in dataloader:
        # 순전파
        outputs = model(batch_x)
        loss = criterion(outputs, batch_y)
        
        # 역전파 및 최적화
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
    
    if (epoch + 1) % 10 == 0:
        print(f'Epoch [{epoch+1}/100], Loss: {loss.item():.4f}')

# 추론
with torch.no_grad():
    new_data = torch.randn(5, 10)
    predictions = model(new_data)
    print(predictions)


같은 모델의 Tensorflow 구현버전

import tensorflow as tf

# 데이터셋 생성
x_data = tf.random.normal([100, 10])
y_data = tf.random.uniform([100, 1], minval=0, maxval=2, dtype=tf.int32)

dataset = tf.data.Dataset.from_tensor_slices((x_data, y_data))
dataset = dataset.batch(10).shuffle(100)

# 모델 정의
class SimpleNN(tf.keras.Model):
    def __init__(self):
        super(SimpleNN, self).__init__()
        self.layer = tf.keras.layers.Dense(1, activation='sigmoid')
    
    def call(self, x):
        return self.layer(x)

model = SimpleNN()

# 손실 함수 및 최적화
criterion = tf.keras.losses.BinaryCrossentropy()
optimizer = tf.keras.optimizers.SGD(learning_rate=0.01)

# 학습 루프
for epoch in range(100):
    for batch_x, batch_y in dataset:
        with tf.GradientTape() as tape:
            outputs = model(batch_x)
            loss = criterion(batch_y, outputs)
        
        grads = tape.gradient(loss, model.trainable_variables)
        optimizer.apply_gradients(zip(grads, model.trainable_variables))
    
    if (epoch + 1) % 10 == 0:
        print(f'Epoch [{epoch+1}/100], Loss: {loss.numpy():.4f}')

# 추론
new_data = tf.random.normal([5, 10])
predictions = model(new_data)
print(predictions)

2024년 7월 23일 화요일

Transformer Model 직접 구현해보기 튜토리얼

Build your own Transformer from scratch using Pytorch


Building a Transformer model step by step in Pytorch


Pytorch를 이용해서 트랜스포머 모델을 밑바닥부터 구현해보는 예제

medium 블로그에 해외 저자가 쓴 튜토리얼인데 번역기 돌려도 읽을만 하고 천천히 공부하기에 좋아 보인다.

“Attention is All You Need” 논문이 나온지 오래 지났지만 어쨌든 아직도 많이 사용되고 언어모델 외에도 광범위하게 활용되고 있기 때문에 코드까지 공부하고 지나가면 도움이 많이 될 것 같다.


2024년 5월 29일 수요일

P-Flow TTS 논문 번역(3장)

논문 링크

코드: https://github.com/p0p4k/pflowtts_pytorch (비공식)


3. METHOD

본 연구의 목표는 고품질 및 빠른 non-autoregressive TTS 모델에서 제로샷 화자 적응을 위한 context 내 학습 기능을 제공하는 것이다. 참조 음성에서 화자 정보를 추출하는 화자 임베딩 접근법의 잠재적 병목 현상을 피하기 위해, 신경 코덱 언어 모델과 유사하게 참조 음성을 화자 적응을 위한 프롬프트로 직접 활용하는 접근 방식을 채택한다. 음성 프롬프트 방법 외에도 효율적인 샘플링을 위해 플로우 매칭 생성 모델을 사용한다. 본 방법의 개요는 3.1절에서 제공되며, 3.2절에서 디코더에 대한 자세한 설명을 제공하고, 나머지 세부 사항은 3.3절에서 설명한다.

3.1 P-Flow

P-Flow 훈련은 마스크드 오토인코더와 유사하다. <텍스트, 음성> 쌍 데이터를 주어, 음성의 멜-스펙트로그램을 x, 텍스트를 c로 표시한다. x에서 임의로 위치한 3초 세그먼트를 마스킹하는 $m^p$를 정의한다. 우리는 $x^p = (1−m^p)·x$로 정의한다. 훈련 중 P-Flow의 목표는 c와 일부 세그먼트 $x^p$가 주어진 상태에서 x를 재구성하는 것이다. 훈련 중에는 P-Flow가 $x^p$를 포함한 x 전체를 재구성할 것으로 예상하지만, 모델은 x 내의 $x^p$의 정확한 위치를 지정하지 않는다.

P-Flow는 c와 일부 세그먼트 $x^p$가 주어진 상태에서 음성의 조건부 확률 분포 $p(x|c, x^p)$을 모델링하는 법을 학습한다. 많은 제로샷 TTS 모델이 모든 정보를 고정 크기 벡터로 압축하는 것과 달리, 우리는 텍스트 c와 음성 프롬프트 $x^p$를 받아 화자 조건 텍스트 표현을 생성하는 텍스트 인코더 $f_{enc}$를 도입한다. 우리는 이 텍스트 인코더를 음성 프롬프트 텍스트 인코더라 부른다. 이 텍스트 인코더의 출력은 플로우 매칭 생성 모델을 사용하여 멜-스펙트로그램으로 매핑되고, 마지막으로 오디오 보코더를 사용하여 waveform으로 변환된다.

음성 프롬프트 텍스트 인코더:

그림 1a와 같이, 우리는 텍스트 입력 c와 함께 음성 프롬프트로써 임의 세그먼트 $x^p$의 멜-스펙트로그램을 입력한다. 그런 다음 둘 다 동일한 차원으로 투영하여 텍스트 인코더의 입력으로 사용한다. 음성 프롬프트 텍스트 인코더의 역할은 프롬프트 $x^p$에서 추출된 화자 정보를 사용하여 화자 조건 텍스트 표현 $h_c = f_{enc}(x^p, c)$를 생성하는 것이다. 대규모 코덱 언어 모델과 유사하게, 우리는 임의의 텍스트 위치에서 음성 프롬프트에 어텐션할 수 있는 non-autoregressive 트랜스포머 구조를 사용한다.

Figure 1: The overall diagram of P-Flow. P-Flow is a model composed of a speech-prompted text encoder, which outputs a representation containing speaker information from the speech prompt, and a flow matching decoder generates high-quality speech significantly faster than real-time.

음성 프롬프트 텍스트 인코더가 음성 프롬프트에서 화자 정보를 효과적으로 추출하도록 훈련하기 위해, 텍스트 인코더 표현과 멜-스펙트로그램 사이의 거리를 최소화하는 인코더 손실을 사용한다. 이는 단일 화자 TTS 모델의 샘플링 단계를 줄이기 위한 Grad-TTS [30]에서의 원래 목적 외에도, 생성된 텍스트 표현에 화자 관련 세부 사항을 포함하도록 인코더를 장려한다.

음성 프롬프트된 인코더 출력 $h_c$와 멜-스펙트로그램 x의 길이가 다르기 때문에, Glow-TTS [21]에서 제안된 monotonic alignment search (MAS) 알고리즘을 사용하여 텍스트 인코더 출력을 멜-스펙트로그램과 정렬한다. MAS를 적용하여 텍스트 인코더 출력과 멜-스펙트로그램 사이의 전체 L2 거리를 최소화하는 정렬 $A = MAS(h_c, x)$을 도출한다. 정렬 A를 기반으로 각 텍스트 토큰의 지속 시간 d를 결정하고 텍스트 토큰의 지속 시간에 따라 인코더 출력을 복제하여 $h_c$를 확장한다. 이 정렬 프로세스는 멜-스펙트로그램 x와 정렬된 텍스트 인코더 출력 h를 생성한다. 비교적 간단한 재구성 손실은 $L_{enc} = MSE(h, x)$로 작성된다.

실제 훈련에서는 모델이 훈련 중 x 내에서 $x^p$의 정확한 위치를 제공받지 않더라도 여전히 $x^p$의 사소한 복사-붙여넣기(collapse to trivial copy-pasting)로 수렴한다. 이를 피하기 위해, 우리는 $x^p$에 해당하는 세그먼트의 재구성 손실을 단순히 마스킹한다. 그럼에도 불구하고 최종 모델은 여전히 연속적인 멜-스펙트로그램 시퀀스를 추론할 수 있다. 마스크된 인코더 손실 $L^p_{enc}$는 멜-스펙트로그램 x의 무작위 세그먼트 xp에 대해 $m^p$를 사용하여 다음과 같이 정의된다:

$L^p_{enc} = MSE(h · m^p, x · m^p)$

이 손실을 최소화함으로써, 인코더는 주어진 음성 x와 유사한 정렬된 출력을 생성하기 위해 음성 프롬프트에서 가능한 한 많은 화자 정보를 추출하도록 훈련된다. 이는 화자 적응을 위한 context 내 학습 기능을 향상시킨다.

플로우 매칭 디코더:

고품질 및 빠른 제로샷 TTS를 수행하기 위해, 우리는 플로우 매칭 생성 모델을 디코더로 사용하여 $p(x|h)$의 조건부 확률 분포를 모델링한다. 플로우 매칭 디코더는 연속 정규화 플로우(CNF)의 조건부 벡터 필드 $v_t(·|h)$를 모델링하여 표준 정규 분포에서 데이터 분포로의 조건부 매핑을 나타낸다. 디코더는 $L^p_{cfm}$이라는 플로우 매칭 손실을 사용하여 무작위 세그먼트에 대한 마스크를 적용하여 훈련된다. 자세한 내용은 3.2절에서 제공된다.

지속시간(duration) 예측기:

MAS가 사용되지 않는 추론 중 텍스트-토큰 지속 시간을 재현하기 위해, 우리는 [21]과 유사한 방식으로 훈련된 지속 시간 예측기를 사용한다. 지속 시간 예측기는 텍스트 인코더의 숨겨진 표현을 추가 화자 조건 없이 입력으로 사용하며, 이 표현은 이미 화자 정보를 포함하고 있다. 이는 텍스트 인코더 훈련에 영향을 미치지 않기 위해 분리된 입력을 사용하여 모델의 나머지 부분과 동시에 훈련된다. 지속 시간 예측기는 각 텍스트 토큰의 로그-스케일 지속 시간 log d̂를 추정하며, 지속 시간 예측기의 훈련 목표 $L_{dur}$는 훈련 중 MAS를 통해 얻은 로그-스케일 지속 시간 log d와의 평균 제곱 오차를 최소화하는 것이다.

P-Flow의 전체 훈련 손실은 다음과 같다:

$L = L^p_{enc} + L^p_{cfm} + L_{dur}$

제로샷 추론에서는 텍스트 인코더에 입력으로 사용할 참조 샘플에서 무작위 청크를 사용하며, 원하는 텍스트를 입력으로 사용하여 $h_c$를 얻는다. 우리는 음성 프롬프트에 해당하는 전사를 제공하지 않는다. 그런 다음, 지속 시간 예측기에서 예측된 d̂를 사용하여 $h_c$를 확장하고, 플로우 매칭 디코더를 사용하여 개인화된 음성을 생성한다.

3.2 플로우 매칭 디코더

플로우 매칭을 사용하여 멜-스펙트로그램 디코더 작업의 조건부 분포 $p(x|h)$을 모델링한다. 먼저 플로우 매칭의 개요를 제공한 후 샘플링 절차와 추가적인 질적 개선을 위한 가이드 관련 기술을 설명한다.

Figure 2: Conditional Flow Matching [23] can be supervised with linear conditional trajectories during training when mapping between the complex pdata and the sampling Gaussian, leading to simpler marginal trajectories during inference. Simpler trajectories require fewer function evaluations.


플로우 매칭 개요:

플로우 매칭 [23, 35, 24]은 데이터 밀도 $p_1(x)$와 더 간단한 샘플링 밀도 $p_0(x)$ (기본적으로 표준 정규 분포)를 연결하는 시간 종속 확률 경로에 맞추는 방법이다. 이는 연속 정규화 플로우와 밀접한 관련이 있지만, 확산 및 스코어 매칭 모델 [13, 16, 34]의 일반적인 설정과 유사한 방식으로 시뮬레이션 없는 효율적인 훈련이 가능하다. 우리는 [23]에서 명시된 조건부 플로우 매칭을 채택하여, 소스와 타겟 분포 간의 더 간단하고 종종 직선적인 궤적을 권장한다. 더 간단한 궤적은 추가 증류 없이 테스트 시 샘플링 단계를 줄이는 데 유리하다. 간단히 하기 위해, 이 개요에서는 조건부 변수 h를 무시한다.

Lipman et al. [23]을 따라, 우리는 플로우 $ϕ : [0, 1] × \mathbb{R}^d → \mathbb{R}^d$를 다음 ODE를 사용하여 두 밀도 함수 간의 매핑으로 정의한다:

$\frac{d}{dt} ϕ_t(x) = v_t(ϕ_t(x)); ϕ_0(x) = x$

여기서 $v_t(x)$는 시간 종속 벡터 필드로, 시간에 따른 확률 흐름의 궤적을 지정한다. $v_t(x)$는 또한 우리의 학습 가능한 구성 요소로, 앞으로는 $v_t(ϕ(x); θ)$로 표시한다. 분포에서 샘플링하려면, $t = 0$에서 샘플링 분포 $p_0$에서 초기 조건을 샘플링하고, Eq. (2)에서 ODE를 해결한다. 특히, [23]의 공식은 더 직선적인 궤적을 권장하여, 10개의 오일러 단계로 ODE 해를 저렴하게 근사할 수 있다.

실제로 $ϕ_t(x)$의 주변 흐름을 결정하는 것은 어렵다. 따라서 Lipman은 이를 다음과 같이 여러 조건부 흐름 $ϕ_t,x_1(x)$을 통해 주변화(marginalizing)하는 방식으로 공식화한다:

$ϕ_t,x_1(x) = σ_t(x_1)x + μ_t(x_1)$

여기서 $σ_t(x_1)$와 $μ_t(x_1)$는 시간 조건부 아핀 변환으로, 가우시안 분포 $p_1$과 $p_0$ 간의 변환을 매개변수화한다. 마지막으로, $q(x_1)$를 우리의 데이터에 대한 실제지만 아마도 비가우시안 분포로 정의한다. 우리는 $σ_{min}$(경험적으로 0.01로 설정됨)으로 약간의 백색 잡음을 추가하여 개별 샘플을 섭동하여 q의 혼합 가우시안 근사치로 $p_1$을 정의한다. 우리는 SDE 공식에서의 확률성에서 오는 복잡함 없이 궤적을 지정할 수 있다.

이를 활용하여, Lipman et al.은 간단한 선형 궤적을 권장하며, $ϕ_t$를 위한 다음 매개변수를 도출한다:

$μ_t(x) = tx_1, σ_t(x) = 1 - (1 - σ_{min})t$

벡터 필드를 훈련하는 것은 조건부 플로우 매칭 목표 함수 LCFM (θ)를 사용하여 수행된다:

$L_{CFM} (θ) = \mathbb{E}_{t∼U [0,1],x_1∼q(x_1),x_0∼p(x_0)} ∥v_t(ϕ_t,x_1 (x_0); θ) - \frac{d}{dt} ϕ_t,x_1 (x_0)∥^2$

Eq. (4)를 Eq. (3) 및 (5)에 대입하면 최종 CFM 목표가 도출된다:

$L_{CFM} (θ) = \mathbb{E}{t,q(x_1),p(x_0)} ∥v_t(ϕ_t,x_1(x_0); θ) - (x_1 - (1 - σ{min})x_0)∥^2$

 

마스크된 플로우 매칭 손실:

플로우 매칭 디코더는 텍스트 인코더의 출력 h로 제공된 하위 세그먼트 $x^p ∈ x$에 의해 제공되므로, $x^p$에 해당하는 출력 부분에 대한 손실을 다시 마스킹해야 할 필요가 있었다. 일반적인 $v_t(x_t; θ)$는 $v̂_θ(x_t, h, t)$로 매개변수화되어 조건부를 설명한다. 여기서 t는 연속적인 사인파 임베딩으로 표현된다. 이를 통해 마스크된 CFM 목표가 도출된다:

$L^p_{CFM} (θ) = \mathbb{E}{t,q(x_1),p(x_0)} ∥m^p · (v̂_θ(ϕ_t,x_1(x_0), h, t) - (x_1 - (1 - σ{min})x_0))∥^2$

 

샘플링:

조건부 플로우 매칭 손실은 조건부 벡터 필드를 주변화하여 샘플링 중에 사용되는 주변 벡터 필드를 달성한다. 선형적으로 보간된 조건부 궤적은 결과적으로 동일한 직선성을 보장하지는 않지만, 우리는 여전히 꽤 유사한 것을 얻는다. 본 연구에서는 첫 번째 오일러 방법을 사용하여 10단계로 ODE를 해결하는 것이 충분히 간단한 궤적을 제공하는 것을 발견했다. N 오일러 단계로 샘플링은 다음 재귀 관계를 사용하여 수행된다:

$x_0 ∼ N (0, I); x_{t+ \frac{1}{N}} = x_t + \frac{1}{N} v̂_θ(x_t, h, t)$

 

가이디드 샘플링:

발음 명확성을 더욱 향상시키기 위해, classifier-free guidance (CFG) 방법 [14]에서의 기술을 적용한다. 관련 연구에서, GLIDE [29]는 빈 텍스트 시퀀스에 대한 궤적을 빼는 방식으로 텍스트 조건부 샘플링 궤적을 증폭시킨다. 우리는 유사한 공식을 사용하여, 평균 특징 벡터에서 궤적을 멀리 유도한다. γ를 가이드 스케일로 한다. 우리의 가이드 증폭된 오일러 공식은 다음과 같다:

$x_{t+ \frac{1}{N}} = x_t + \frac{1}{N} (v̂_θ(x_t, h, t) + γ(v̂_θ(x_t, h, t) - v̂_θ(x_t, h̄, t))$

 

3.3 모델 세부 사항

고수준 모델 아키텍처는 그림 1에 나와 있다. 본 모델은 세 가지 주요 구성 요소로 구성된다: 프롬프트 기반 텍스트 인코더, 추론 중 음소 지속 시간을 복원하기 위한 지속 시간 예측기, 및 Wavenet 기반 플로우 매칭 디코더. 실험에서는 텍스트 인코더가 단지 3백만 개 파라미터의 소형 트랜스포머 구조를 포함하더라도 강력한 제로샷 결과를 보인다. 각 구성 요소에 대한 추가 아키텍처 세부 사항은 섹션 B에 제공된다.


주요 인용(우선순위 순으로)

[23] Lipman, Y., Chen, R. T. Q., Ben-Hamu, H., Nickel, M., & Le, M. (2022). Flow Matching for Generative Modeling. arXiv preprint arXiv:2210.02747.

[37] Wang, C., Chen, S., Wu, Y., Zhang, Z., Zhou, L., Liu, S., Chen, Z., Liu, Y., Wang, H., Li, J., et al. (2023). Neural Codec Language Models are Zero-Shot Text to Speech Synthesizers. arXiv preprint arXiv:2301.02111.

[24] Liu, X., Gong, C., & Liu, Q. (2022). Flow Straight and Fast: Learning to Generate and Transfer Data with Rectified Flow. arXiv preprint arXiv:2209.03003.


2024년 5월 28일 화요일

Google Colab에 생긴 프롬프트 기반 코드 생성

어느샌가 Colab에도 프롬프트 입력란이 생겼길래 써봤음.
프롬프트만 잘 쓰면 간단한 코드는 거의 의도된대로 만들어준다.
그냥 생각없이 써봤는데 생성 결과가 잘 나와서 놀랐음.
라이선스 체크까지 해주는 건 아니므로 업무적 사용 시 주의 필요

[원본 예제]



[AI 생성코드]




2024년 5월 7일 화요일

분류성능평가지표 - F1 Score와 정확도, 정밀도, 재현도

F1 Score: 정밀도(Precision)와 재현도(Recall)의 조화평균

                  2 * Precision * Recall
F1 Score = ----------------------------
                    Precision + Recall


정확도(Accuracy): 전체 데이터 중 모델이 올바르게 분류한(TP+TN) 비율

          TP + TN
  ----------------------
  TP + FN + FP + TN


정밀도(Precision): Positive로 분류된 예측값(TP+FP) 중 실제로 맞춘 비율(TP)

      TP
  ---------
  TP + FP


재현도(Recall): Sensitivity라고도 불린다. 실제값 Positive 중 예측값이 Positive로 분류된 비율

      TP
  ---------
  TP + FN


2024년 4월 5일 금요일

VITS2 코드 Windows에서 실행해보기

VITS2 논문 구현 코드 실행기


소스코드는 다른 분이 구현한 코드도 있지만 아래 github 링크의 코드로 실행함

https://github.com/p0p4k/vits2_pytorch

- Dataset: LJSpeech

- Windows에서 특정 디렉토리로 심볼릭 링크는 mklink /d 명령어를 이용한다. cmd에서 되고 powershell에서는 없는 명령어라 나옴.

- Monotonic Alignment 툴 빌드중 에러가 난다면 MS Visual Studio의 build tool을 설치해주면 된다.


1. Windows에서 espeak 설치

여기에서 x64용 msi파일을 다운로드받음.

https://github.com/espeak-ng/espeak-ng/releases

(espeak-ng-X64.msi)

참고로 sourceforage에 있는 espeak 설치본은 깔아봐도(SAPI5 어쩌고 있는 패키지) 해결 불가

msi 패키지를 설치했으나 이런 에러가 나온다. 설치만 하면 끝이 아니고 환경변수 설정이 필요함.


환경변수 설정(msi패키지에서 시스템에 설치해서 나도 그냥 시스템 환경변수에다 함)

시작메뉴의 찾기 입력란(돋보기 아이콘 있는 칸)에 path를 타이핑하면 설정 메뉴가 바로 뜸






x64버전으로 설치했으므로 Program Files (x86) 이 아닌 그냥 Program Files 경로로 설정

PHONEMIZER_ESPEAK_LIBRARY=”C:\Program Files\eSpeak NG\libespeak-ng.dll” (default path)


“파일 찾아보기” 버튼을 클릭해서 .dll파일명까지 포함한 전체경로를 값으로 설정

PHONEMIZER_ESPEAK_PATH=”C:\Program Files\eSpeak NG”


“디렉터리 찾아보기” 버튼을 클릭해서 폴더 경로까지만 값으로 설정

환경변수 설정 후 다시 실행했더니 넘어간다. (안되면 재부팅 후 시도)


2. NVidia CUDA 관련

그다음은 NVidia cuda 관련 에러들이다

torch.cuda.is_available() == false로 나옴

torch 패키지를 지우고 cuda 버전에 맞춰 다시 설치

아래는 pytorch 홈페이지에서 내 환경에 맞춰 만들어준 명령어

(https://pytorch.org/get-started/locally/)

Windows + pycharm pip + cuda 12.1

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121


그다음은 NCCL 관련 에러

RuntimeError: Distributed package doesn't have NCCL built in

아래 코드와 관련된 에러였음

dist.init_process_group(backend="nccl", init_method="env://", world_size=n_gpus, rank=rank)


NCCL 다운로드 페이지에 가서 로그인 후(NVIDIA 계정 가입 필요) 설문양식 제출까지 해야 다운로드 시켜줌

찾아보니 Windows에서 NCCL 분산GPU 설정은 아직 pytorch에서 지원하지 않는다고 한다. 우분투 등은 지원함. 다음번엔 Docker로 도전

일단 “nccl”을 “gloo”로 바꾸고 시작

(gloo는 분산 cpu 사용, backend설정과 CPU/GPU 사용여부 테이블은 https://pytorch.org/docs/stable/distributed.html 참조)

json파일에 "use_duration_discriminator": true, 라고 해놓고 type이 기재가 안되어있었음

바로 아래 줄에 type 추가

"duration_discriminator_type": "dur_disc_1",


다시 실행했더니 성공했다.

돌다가 메모리 부족으로 튕기면 batch size를 낮춰주면 된다.


2024년 2월 28일 수요일

Diffusion Model을 위해 필요한 공부

우선 잘 정리된 블로그: Diffusion Model 입문하기

https://velog.io/@bismute/Diffusion-Model-%EC%9E%85%EB%AC%B8%ED%95%98%EA%B8%B0


그 외

모두의 연구소 모두팝 유튜브 강의(2강~4강 정도 보면 충분할듯)

https://www.youtube.com/watch?v=jaPPALsUZo8


DDPM 논문

https://arxiv.org/pdf/2006.11239.pdf


코드 실습

MNIST Diffusion

학습 시간은 오래 안걸린다고 함(분 단위 정도)

https://github.com/bot66/MNISTDiffusion


2023년 11월 3일 금요일

KL 다이버전스(KLD)의 정의

Kullback-Leibler divergence metric is a statistical measure from information theory that quantifies the difference between one probability distribution from a reference probability distribution. KL divergence is also known as relative entropy.

쿨백-라이블러 발산(Kullback–Leibler divergence, KLD)은 두 확률분포의 차이를 계산하는 데에 사용하는 함수로, 어떤 이상적인 분포에 대해, 그 분포를 근사하는 다른 분포를 사용해 샘플링을 한다면 발생할 수 있는 정보 엔트로피 차이를 계산한다.


참고 링크:

https://arize.com/blog-course/kl-divergence/


2023년 10월 20일 금요일

구글 Colab에서 구글드라이브 내부 경로 접근하기

1. 드라이브 임포트 및 마운트

from google.colab import drive
drive.mount('/content/gdrive')


2. 내가 만든 폴더로 경로 이동하기

보통 '내 드라이브'가 구글 드라이브의 최상위 경로일 것이다.
그 아래 'data'라는 폴더를 생성했다고 가정할 경우

내 드라이브 > data


cd /content/gdrive/My Drive/data

코드창에서 위와 같이 입력하고 실행한다.
프롬프트는 아니지만 프롬프트에서 입력한 것처럼 작동함.

2023년 10월 19일 목요일

파이토치 공부중 next() 함수 에러

데이터셋에서 미니배치를 불러올 때 예제코드대로 했더니 .next()함수에서 에러가 발생

dataiter1 = iter(train_loader1)
images1, labels1 = dataiter1.next()
print(images1.size())   # 배치 사이즈 확인


---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-12-53a15405132b> in <cell line: 2>()
      1 dataiter1 = iter(train_loader1)
----> 2 images1, labels1 = dataiter1.next()
      3 print(images1.size())   # 배치 사이즈 확인

AttributeError: '_SingleProcessDataLoaderIter' object has no attribute 'next'


최신 버전에서는 객체의 next() 함수로 쓰는 게 아니라 그냥 next() 안에 인자로 넣어줘야 했음


dataiter1.next() 를 아래 코드처럼 next(dataiter1) 로 수정했더니 해결

dataiter1 = iter(train_loader1)
images1, labels1 = next(dataiter1)
print(images1.size())   # 배치 사이즈 확인

2023년 10월 7일 토요일

HiFi-GAN 논문 스터디

논문

https://arxiv.org/abs/2010.05646

인용 수 보소..

2020년 나온 기술이지만 아직도 TTS에서 많이 사용됨



공개 소스코드

https://github.com/jik876/hifi-gan



리뷰 동영상

https://www.youtube.com/watch?v=TpLj4PRI34U

TTS용 HiFi-GAN 논문 리뷰해주는 유튜브 발견

영어지만 친절한 설명으로 공부에 도움이 됨




2023년 9월 22일 금요일

1d convolution 설명 잘 된 블로그(PyTorch 기반)

https://sanghyu.tistory.com/24

꼭 PyTorch를 쓰지 않더라도 설명이 친절하게 잘 되어 있어서 참고용으로 좋음.

2023년 6월 23일 금요일

음성인식 관련기술 survey

혼동을 주는 유사단어들이 좀 있는 것 같아서 본격적으로 스터디 들어가기 우선 용어부터 정리중


1. ASR에 대해 우리말로 정의와 기본개념이 잘 정리되어있는 IBM 소개 페이지

URL: https://www.ibm.com/kr-ko/topics/speech-recognition


2. 화자 인식 기술에서 쉽게 혼동될만한 개념들: 화자식별, 화자검증, 화자분리, 화자분할 등

다 그놈이 그놈 또는 상하위 개념 포함관계인줄 알았으나 엄밀히 따지면 명확한 차이가 있었다.

출처: https://www.skelterlabs.com/blog/speechai


- 화자 식별(Speaker Identification)  

기 등록된 목소리 중 누구 목소리랑 일치하는가?


- 화자 검증(Speaker Verification)

등록된 특정인의 목소리와의 일치여부 검증 -> T/F


- 화자 분리(Speaker Seperation)

특정 화자의 목소리만 분리(예: 내 목소리만 필터링)


- 화자 분할(Speaker Diarization: SD)
발화자가 누구인가?

개념 소개: https://dos-tacos.github.io/paper%20review/speaker_diarization/

네이버 클로바노트의 회의록 기능이 괜찮아서 써봤었는데 여기서 녹음할 때 사용하는 기술이 SD 알고리즘 쪽에 속하는 것 같았다.

2023년 6월 2일 금요일

[AI] 머신러닝 공부 추천도서 - 핸즈온 머신러닝 2판

핸즈온 머신러닝 (2판) - 오렐리앙 제롱 저 / 박해선 역


https://m.hanbit.co.kr/store/books/book_view.html?p_code=B7033438574


1판을 사서 봤었는데 흑백에서 컬러인쇄로 바뀌고 페이지 수는 거의 2배가 되었다.

1판 봤을 때는 배경지식도 부족한 상태여서 그런지 몰라도 머리에 잘 들어오지 않았는데 2판은 설명이 친절하게 느껴졌다. 그 동안 배경지식이 조금 더 생겨서 그런건지 책을 새로 써서 그런건지는 모름.

책이 무거우니 부피와 무게가 부담되시는 분들은 전자책으로 보는 것도 괜찮을 것 같음.

참고로 전자책 버전은 epub 방식은 아니고 pdf포맷임.


2판이 2020년에 나왔는데 벌써 3년이 지난 시점이지만, 예제를 돌리면서 실습해 본 결과 3판이 나온다 해도 당분간 충분히 쓸만할 것 같음.


예제들은 사이킷런으로 시작하지만 케라스와 텐서플로도 다루고 있다.

사이킷런은 잘 안써서 몰랐는데 생각보다 있을 기능 다 있고 기초 공부하는 데는 충분해 보인다.


유튜브에서 역자의 강의도 제공함

https://www.youtube.com/watch?v=kpuRasV_Q9k&list=PLJN246lAkhQjX3LOdLVnfdFaCbGouEBeb