are you me?    id passwd

status  

 choosing the third option

picture

 

 for a binary question.

links

git
https://github.com/sephiroce/

keras 사용 노트 - 컴퓨터

1. 기존 keras 쓰는 방식과 Tensroflow 2.0 간 차이라는 것은 import keras.... 과 tf.keras 가 다른 다는 것이고 호환이 잘 안됨. tensorflow 2.0 예시는 모두 후자.

2. keras.Model 을 만들어서 컴파일 해서 가거나 Model 자체를 inheritance 해서 사용하는 경우가 있는데 tensorflow 2.0 예시에는 후자가 더 많음

3. TFRecord 1.0 쓸때는 iterator 도 설정해줬는데, keras 를 써서인지 2.0 이어서 인지 그냥 model.fit 에 dataset을 넣어주면 되고 뭔가 적용하고 싶다면 map 함수에 python 함수를 넣어주면 됨;; 내 경우는 feature 가 time, frequency 라서 2D 인데 tfrecord 넣을때는 1d 로 넣어야 하니까 padding 다하고 나서 그뒤에 reshape 용도로 사용함.

4. custom layer 는 lambda 로 만들기만 하면 문제없음.

5. 데이터는 TF Record 형태로 kaldi 의 ark 처럼 저장 해뒀다가 쓰고 cmvn 만 별도로 numpy to constant tensor 로 바꿔서 넣어주고 빼고 나누면 됨.
원래는 VAD 로 음성구간을 추려서 CMVN 을 한다고도 하는데 지금까지는 쿨하게 음원 전체의 feature mean, std 로 함. from_generator 인가 하는 걸로 만드는 것 보다 이게 훨씬 빠를 줄 알았으나.. GPU 사용률이 40 대 맴돌던게 60대까지 올라온 정도고 중간에 lack 걸리듯 느려질때가 더러 있음.. TF Record 만의 문제는 아닐듯. 모델은 Transformer.

written time : 2019-12-03 23:13:00.0

feature extraction in python (fbank, mfcc) - 컴퓨터

  @staticmethod
  def get_fbanks(path_file, frame_size=0.025, frame_stride=0.01, n_filt=40, num_ceps=-1):
    """
    I borrowed this feature extraction code from
    https://www.kaggle.com/ybonde/log-spectrogram-and-mfcc-filter-bank-example
    https://haythamfayek.com/2016/04/21/speech-processing-for-machine
    -learning.html
    :param n_filt: applying triangular n_filt filsters filters, typically 40 filters,
      nfilt = 40 on a Mel-scale to the power spectrum
      to extract frequency bands. The Mel-scale aims to mimic the non-linear human ear
      perception of sound, by being more discriminative at lower frequencies and less
      discriminative at higher frequencies. The final step to computing filter banks is
       applying triangular filters, typically 40 filters, nfilt = 40 on a Mel-scale to
       the power spectrum to extract frequency bands. The Mel-scale aims to mimic the
       non-linear human ear perception of sound, by being more discriminative at lower
        frequencies and less discriminative at higher frequencies.
    :param path_file: path for a speech file
    :param frame_size: the length for frame (default = 0.05, it means 50 ms)
    :param frame_stride: the length for striding (default = 0.03, it means 30
    ms)
    :param num_ceps: mfcc dimension, if it is bigger than 0 then it returns mfcc
    :return: fbank features
    """
    sample_rate, signal = wavfile.read(path_file)
    pre_emphasis = 0.97
    emphasized_signal = np.append(signal[0],
                                  signal[1:] - pre_emphasis * signal[:-1])

    # params
    # Convert from seconds to samples
    frame_length, frame_step = frame_size * sample_rate, frame_stride * sample_rate  # Convert from seconds to samples
    signal_length = len(emphasized_signal)
    frame_length = int(round(frame_length))
    frame_step = int(round(frame_step))
    num_frames = int(np.ceil(float(np.abs(
      signal_length - frame_length)) / frame_step))  # Make sure that we have at least 1 frame

    pad_signal_length = num_frames * frame_step + frame_length
    z = np.zeros((pad_signal_length - signal_length))
    pad_signal = np.append(emphasized_signal,
                              z)  # Pad Signal to make sure that all frames have equal number of samples without truncating any samples from the original signal

    indices = np.tile(np.arange(0, frame_length),
                         (num_frames, 1)) + np.tile(
      np.arange(0, num_frames * frame_step, frame_step), (frame_length, 1)).T
    frames = pad_signal[indices.astype(np.int32, copy=False)]

    # applying hamming window to all frames
    frames *= np.hamming(frame_length)
    # frames *= 0.54 - 0.46 * np.cos((2 * np.pi * n) / (frame_length - 1))

    n_fft = 512
    mag_frames = np.absolute(
      np.fft.rfft(frames, n_fft))  # Magnitude of the FFT
    pow_frames = ((1.0 / n_fft) * ((mag_frames) ** 2))  # Power Spectrum

    low_freq_mel = 0
    high_freq_mel = (2595 * np.log10(
      1 + (sample_rate / 2) / 700))  # Convert Hz to Mel
    mel_points = np.linspace(low_freq_mel, high_freq_mel,
                                n_filt + 2)  # Equally spaced in Mel scale
    hz_points = (700 * (10 ** (mel_points / 2595) - 1))  # Convert Mel to Hz
    bin = np.floor((n_fft + 1) * hz_points / sample_rate)

    fbank = np.zeros((n_filt, int(np.floor(n_fft / 2 + 1))))
    for m in range(1, n_filt + 1):
      f_m_minus = int(bin[m - 1])  # left
      f_m = int(bin[m])  # center
      f_m_plus = int(bin[m + 1])  # right

      for k in range(f_m_minus, f_m):
        fbank[m - 1, k] = (k - bin[m - 1]) / (bin[m] - bin[m - 1])
      for k in range(f_m, f_m_plus):
        fbank[m - 1, k] = (bin[m + 1] - k) / (bin[m + 1] - bin[m])
    filter_banks = np.dot(pow_frames, fbank.T)
    filter_banks = np.where(filter_banks == 0, np.finfo(float).eps,
                               filter_banks)  # Numerical Stability
    filter_banks = 20 * np.log10(filter_banks)  # dB

    if num_ceps < 0:
      return filter_banks

    mfcc = dct(filter_banks, type=2, axis=1, norm='ortho')[:, 1 : (num_ceps + 1)] # Keep 2-13
    cep_lifter = 22
    (nframes, ncoeff) = mfcc.shape
    n = np.arange(ncoeff)
    lift = 1 + (cep_lifter / 2) * np.sin(np.pi * n / cep_lifter)
    mfcc *= lift  # *
    return mfcc

written time : 2019-11-29 21:29:01.0

겨울왕국 시리즈 - 영화

겨울왕국 시리즈는 나에게 있어 인상적인 작품들은 아니다.
디즈니(픽사)의 다른 애니인 토이스토리 4는 실사에 가까운 텍스쳐로 눈호강을 시켜주고 이런 저런 생각도 하게 해주어서 이쪽이 훨씬 더 나의 취향이다.

다만 이렇게 글까지 남기는 이유는 겨울왕국 2는 영화관에서
1시간 이상은 영상을 보는데 익숙치 않은 큰 딸의 귀가 결정으로 중도 하차 하였기 때문이었다. 이부분이 인상적이었다.
호랑이가 나오는 영화라 일컬어지는 라이온킹은 보다가 1시간 께 주무시는 바람에 나는 홀로 무난히 영화를 끝까지 마칠수 있던 반면 이번에는 무슨일인지 말똥 말똥하게 팝콘을 빼앗아 먹었다가 팝콘이 떨어질 때쯤 한차례 나가자고 제안하고 이후 쉬가 마렵다는 말과 함께 나가고 싶다고 해서 바로 나왔다.
재미가 없는 부분에 아이들이 웃으니 따라웃는 정도라 내용을 이해하고 있지 않다는 것은 분명하고 그 웃음을 듣고 나는 직감했었다 끝까지 볼 수 없으리라는 것을.

겨울왕국 1 ☆☆★★★ 혼자서 (자취방에서)
겨울왕국 2 ☆☆★★★ 큰딸 (집 근처 메가박스에서)
토이스토리 4 ☆★★★★ 작은딸, 큰딸 (집에서)

written time : 2019-11-29 01:31:40.0
...  1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |  ...