GithubHelp home page GithubHelp logo

Comments (14)

kyakuno avatar kyakuno commented on June 11, 2024

評価対象。

ailia

python3 whisper.py -m base -i input.wav

whisper official

beam_size = 1

import numpy as np
import librosa
import soundfile as sf
import time

import whisper
whisper_small = whisper.load_model("base")

start = int(round(time.time() * 1000))
result = whisper_small.transcribe("sample.mp3", language="ja", beam_size = beam_size, verbose=True)
print("Whisper Small", result["text"])
end = int(round(time.time() * 1000))
estimation_time = (end - start)
print(f'\ttotal processing time {estimation_time} ms')

from ailia-models.

kyakuno avatar kyakuno commented on June 11, 2024

まずは公式のwhisperの各バージョンの変更と性能を把握する。

from ailia-models.

kyakuno avatar kyakuno commented on June 11, 2024

2023/03/08 -> 2023/03/14で劇的にbaseの性能が上がっている。

from ailia-models.

kyakuno avatar kyakuno commented on June 11, 2024

更新内容。

openai/whisper#1044
TokenizerをHuggingFaceからtiktokenに移行することでtensorflowへの依存を削除

openai/whisper#1087
word timestampの改善

openai/whisper#1076
githubのlanguage statsの表示改善

openai/whisper#1089
不正なunicodeが出現することへの対策

openai/whisper#1090
空入力でエラーが起きる問題を修正

from ailia-models.

kyakuno avatar kyakuno commented on June 11, 2024

性能差はtiktokenへの移行によって発生している。
tiktokenとtransformersは等価な論理かと思ったが、何か別の変更も入っている?
openai/whisper#1044

from ailia-models.

kyakuno avatar kyakuno commented on June 11, 2024

2023/03/08だと2セグメント目でtempratureが上がっていく。
原因は、古いtokenizerがsot_prev APIが50361を返さず、50324を返す。
2023/03/14のtiktoken版だと、正しく50361を返す。
ここを50361を返すように修正すると、2023/03/08でも変な出力が出ない。
この問題は下記でも報告されている。
zhuzilin/whisper-openvino#3

from ailia-models.

kyakuno avatar kyakuno commented on June 11, 2024

kv_cacheをnormalとdynamicで比較すると結果は一致する。

python3 whisper.py -m base -i sample.mp3 --normal
python3 whisper.py -m base -i sample.mp3 --dynamic_kv_cache

normalとoptは結果は一致しない。

python3 whisper.py -m base -i sample.mp3 --normal
python3 whisper.py -m base -i sample.mp3

これは、MeanVarianceNormalizationがepsilonを持てないため、OptimizerでMeanVarianceNormalizationに変換した結果、torchとonnxで誤差が出ているためである。

from ailia-models.

kyakuno avatar kyakuno commented on June 11, 2024

本来、epsilonの影響は小さいが、baseはそもそもモデルが小さくて不安定なので、揺らぎが発生しやすい。

from ailia-models.

kyakuno avatar kyakuno commented on June 11, 2024

順当に最新のtimestampの扱いをマージする。

from ailia-models.

kyakuno avatar kyakuno commented on June 11, 2024

v3対応の際に、transcribe.pyの変更は取り込まれている。
#1313 (comment)
decoding.pyの変更はまだ取り込まれていない。

from ailia-models.

kyakuno avatar kyakuno commented on June 11, 2024

MeanVarianceNormalizationのepsilonが問題のようなので、LayerNormalizationになるようにwhisperをopset=17で再エクスポートした。opset=17であれば、epsilonの誤差は発生しない。
axinc-ai/whisper-export#2

from ailia-models.

kyakuno avatar kyakuno commented on June 11, 2024

whisperでは、デコードしたテキストをgzipで圧縮し、圧縮率によって繰り返し判定し、decode_fallbackを発生させ、繰り返しを抑制している。decode_fallbackでは、tempretureが上がり、サンプリングになるので、結果が推論のたびに変化する。

ただし、whisper-exportのリポジトリでbaseだと、torchでもdecode_fallbackが発生し、繰り返しが発生するが、最新のwhisper-officialだとdecode_fallbackが発生しない。

これは、timestampルールが影響しているようで、timestampルールを最新にすると、whisper-exportでもdecode_fallbackが発生せず、tempretureは上がらない。

from ailia-models.

kyakuno avatar kyakuno commented on June 11, 2024

下記を無効にすると、decode_fallbackが発生するので、timestampの、まきもどり検知は重要そう。

            if timestamps.numel() > 0:
                # timestamps shouldn't decrease; forbid timestamp tokens smaller than the last
                # also force each segment to have a nonzero length, to prevent infinite looping
                if last_was_timestamp and not penultimate_was_timestamp:
                    timestamp_last = timestamps[-1]
                else:
                    timestamp_last = timestamps[-1] + 1
                logits[k, self.tokenizer.timestamp_begin : timestamp_last] = -np.inf

openai/whisper#914

from ailia-models.

kyakuno avatar kyakuno commented on June 11, 2024

baseモデルはかなりセンシティブなようで、flg_ffmpegの有効・無効で結果が大きく異なる。
また、mp3を一度、wavに事前変換してもfallbackが発生する。

from ailia-models.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.