k2kobayashi / sprocket Goto Github PK
View Code? Open in Web Editor NEWVoice Conversion Tool Kit
License: MIT License
Voice Conversion Tool Kit
License: MIT License
自分のローカルでは動くけど別の人の環境では動かない、みたいな問題が起きないように、travisなどを利用して継続的にテストを行うのがよいと思います
解説論文を執筆に際して,実態とは異なる記述のコード構成の説明記述しました.(主にexample内)
https://www.dropbox.com/s/qppv0d9muhizk36/%E7%AC%AC1%E7%A8%BF.pdf?dl=0
py3のmerge後に,解説論文に倣って変更を行う予定です.
入力メルケプのパワーを考慮して,変換メルケプにコピーしたメルケプの0次項を修正するコードを実装する.
feature_extractor.py
のFeatureExtractor
のbandap
メソッドの引数dim
がない.
説明欄にはdim
が存在していることになっている.
def bandap(self):
"""Return encoded aperiodicity sequence
Parameters
------
dim: int, optional
Dimension of the band-aperiodiciy
Returns
-------
bandap: array, shape (`T`, `dim`)
Encoded aperiodicity sequence of the waveform
"""
self._analyzed_check()
return pyworld.code_aperiodicity(self._ap, self.fs)
まだ未実装なだけでしたらすみません・・・
コードに徐々にドキュメント用?のコメントを記載していっている.ドキュメント作成について何か経験的な知見があれば(例えばフレームワークの良し悪しや記載方法)教えてください.
本日中に,ownershipをk2kobayashiに移行して,publicする予定です.
機能の実装に比べて重要ではないけど、パフォーマンスを上げるためにやっておいたほうがよいことの一つ。
参考:
werckerの方では,minicondaにより,numpyをインストールしているため,pysptkのインストールでこけない様ですが,pythonのクリーン環境にインストールする場合,pysptkでnumpyのインストールが必要なため,依存エラーによってpip install -rが落ちる様です.対応を考える必要があります.
exampleをsprocketを用いるユーザ編集スペースと捉えるとそこにymlファイルを読み出すクラスを用意して,example内で利用すれば良いと考えた.それを実装する.また,下記の様なディレクトリ構造を検討
変換時に話者間の音高を補正するF0変換を実装する
入力自然音声から分析された音響特徴量を用いて波形合成し,分析再合成が正しく動いている事を確認する.
表題のとおりです.
緊急ではないが,リリースまでに必要なToDoに関して,列挙・共有するための場を用意する.
次のURLからVCC2016のデータベースをダウンロードし,example/data/wav以下にスピーカー毎(e.g., example/data/wav/SF1/*.wav)に設置する.Pythonスクリプトでの実装.
http://datashare.is.ed.ac.uk/download/10283/2042/SUPERSEDED_-_The_Voice_Conversion_Challenge_2016.zip
exampleに対するテストコードがあると良いですね.
ARCTICの話者データ全てを使って学習 (1132発話 / 話者) を回すと,下記のエラーが出力されます.
IOError: Unable to open file (Unable to open file: name = './data/pair/slt-jmk/h5/slt/arctic_b0428.h5', errno = 24, error message = 'too many open files', flags = 0, o_flags = 0)
ulimit -n 3000
でこのエラーを回避する事が出来ましたが,この回避方法で問題ないでしょうか?
もしくは,hdfファイルを開きすぎない様に,実装を変更した方がよろしいでしょうか?
(恐らく,メモリーにmcepファイルを逐次読み込みクローズする処理に変更する)
Python3のみをサポートする仕様に変更する.
wavファイルは example/data/wav_1.09 (1.09は一例) に生成されるようですが、 .gitignore に追加されていないようです。
rebaseを用いて,コミットのコメントを一つのコミットにまとめて,masterにmergeする流れとして確認したいのですが,
git rebase -i HEAD~N
We now can use Travis and Appveyor because this project turned to be public.
SOURCE TARGET inwav outwav を引数として,outwavに学習済みのモデルを用いてinwavを変換し出力するスクリプトの実装.
なお波形のF0変換,特徴量抽出は,スクリプト内で実行する.(つまり,評価リストに記述されていない入力話者の音声を変換する.)
いまはpython3で動かないので、両方で動くようにしたいですね。私こういうの得意です
Please implement DNN-based VC system
If you need joint feature vector, you can get by using scripts in /sprocket/example.
Before implementing, let us know the method or paper and library.
Currently, no deadline.
https://github.com/k2kobayashi/Shifter の機能を取り込む.F0差分VCに必要.
リファクタリングを実施して行く前に,現在使われていないコードを整理して,一度stageから下ろそうと考えています.
sprocketのライブラリとしての目的として,VCシステムを再現できる事,パラレルデータを作成できる事がありましたが,新たな機能の実装時(例えば,DNNでの変換)に,音声波形から音響特徴量の抽出や,客観評価用にMel-CDをサクッと計算できる様なライブラリであると嬉しいと考えています.
現状関数が煩雑であるため,APIの計算資料を修正していく必要があると考えている.以下の様にライブラリを修正しようと考えていますがいかがでしょうか?
現状では,下記の様にsprocketのAPIを呼んでいる.importするためにpythonのファイル名まで記述する必要があり,若干冗長な記述になっている気がする.(あと,覚えにくい)
from sprocket.util.hdf5 import HDF5
現状は,sprocket以下に(feature, model, stats, util)のディレクトリが存在しており,これらの内部のpythonスクリプトに各関数が記述されている,各ディレクトリ以下の__init__.pyに存在するpythonをimportする事で,下記の様にAPIを呼び出せると考えられる.また,副産物として,ドキュメントを読みやすくなると考えられる.
from sprocket.util import HDF5
更に,sprocketの構成を次の様に変更しようと考えている.
feature
->
speech
(音声データを介在するクラスとして扱う)
util内のshifter.py, wsola.pyをこのクラスに移動する予定
stats/f0statistics.py, gv.py
->
modelに移動
GV補償の変換係数を制御する機能の実装をする.
sprocketは既に取られています
https://pypi.python.org/pypi?%3Aaction=search&term=sprocket&submit=search
example内のbashのスクリプトに対して,コマンドラインパーザーを入れておいた方が良いかと考えています.
Transform frame (STFT)-based feature into segment-based feature using PCA.
少し気になる点があって,このPRをマージする前の0-th iteration のMel-CDはおおよそ8くらいで妥当だと思ってたのですが,このPRをマージすると0-th iterationのMel-CDが4くらいになってて,mel-cepstrumのスケールがおかしいような気がしています.
入力音声波形(raw)に対して,入力メルケプストラム[T, 24] を差分GMMで変換した差分メルケプストラム[T, 24] を用いて,パワーを保持したまま包絡情報を補正するコード.
ap->bndapへの変換を実装する.
mcepでのtwfを用いてbndapの結合特徴量(jnt)を得る
jntを用いてGMMの学習
convert.pyでbndapの変換を実施
深く調べていないですが、ふと試してみたところ、hdf5のデータがwavファイルに比べて70倍以上容量を取っていたのに気づきましたので、報告しておきます。正常でしたら、closeしてください
試したコマンド:
python initialize.py -1 -2 -3 SF1 TF1 16000
python run_sprocket.py -1 -2 -3 -4 -5 SF1 TF1
結果:
> find wav/SF1/ -type f | wc -l
216
> du -hs wav/SF1/
24M wav/SF1/
> find pair/SF1-TF1/h5/SF1/ -type f | wc -l
216
> du -hs pair/SF1-TF1/h5/SF1/
1.8G pair/SF1-TF1/h5/SF1/
いままで:
https://github.com/jimsotelo/world.py
これから:
https://github.com/JeremyCCHsu/Python-Wrapper-for-World-Vocoder
理由:
pip install git+https://github.com/JeremyCCHsu/Python-Wrapper-for-World-Vocoder
X->Yでモデル化したGMMに対して,パラメータの変換を行いX->Dの差分GMMのモデルパラメータを得る.
どうすればいいでしょうか
./run_sprocket.sh master
##############################################################
### Conversion based on the trained models ###
##############################################################
Traceback (most recent call last):
File "./src/convert.py", line 110, in <module>
main()
File "./src/convert.py", line 48, in main
pconf = PairYML(args.pair_ymlf)
File "/home/ryuichi/Dropbox/vc/sprocket/sprocket/util/yml.py", line 47, in __init__
with open(ymlf) as yf:
IOError: [Errno 2] No such file or directory: './data/pair/clb-slt/clb-slt.yml'
いま結合特徴量の作成に用いているdtwパッケージは、読んでみたらpure-python実装で、距離行列の計算がforループで書かれているため、つまりとても遅いです。cythonで実装された https://github.com/slaypni/fastdtw を使うと、非常に高速化されることを確認しました。結果がどの程度変わるのかまでは調査していませんが、価値があるのではと思っています。簡単にreplaceできるのですが、今やるとconflictが発生して大変そうなので、とりあえずissueをあげておきます。
#14をmergeした際,差分VCが動作していると思ってましたが,どうやら通常VCの変換音声を差分VCのものと勘違いしていた様です.先程差分VCサンプルを確認してみた所,上手く変換されてない感じです.通常VCが正常に変換されてることより以下の点での問題が考えられます.
変換mcepの分散を補償するGVポストフィルタを実装する.
機能的には,公開する要件を満たしてきましたので,公開までのステップを議論したいと思います.
何か懸念点等あれば書き込んでいってください.
下記のファイルベースの処理に対して,並列処理を実行するオプションをexampleに追加します.
バイナリファイルは、gitで差分を上手く管理できないので、何か変更がある度にwavファイルのサイズ分だけリポジトリが肥大化していきます。
例として、https://github.com/openframeworks/openFrameworks というツール(以前良く使ってました、音声とは全然関係ないですが)は、スタティックライブラリをgitに含めていて、かつバージョンをアップの度にアップデートされるので、結果リポジトリをクローンするだけで数GBの容量をとるまでになっています。
wavファイルが十分小さくて、今後変更はないと考えれば、よいとする考えもありますが、個人的には削除した方がよいと思います。
Mel-cepstrum analysis from lifteringed spectral envelope.
python setup.py sdist
このリポジトリのコードが提供する目的を、明確にしませんか?という話です。僕は主に、研究者がコードを公開する上で、以下の2つの意義があると思っています。
Code to reproduce XX paperといったように、論文の実験結果を再現するためのコード、という位置付けです。例えば深層学習の分野では、xxxNet
などという名前で、日々アップロードされています。ベースラインとして他の研究の役に立つので、とても価値があると思います。
他の研究の役に立つ汎用的なツールとして、 の位置づけです。音声分野では、SPTK, HTSなどが相当します。例えばSPTKは、小さな音声処理のプログラムを(シェルのパイプによって)組み合わせることによって、音声処理における多くの問題に汎用的に使用できるように設計されています。他の研究の役に立つので、これもとても価値があると思います。
で、何が言いたいかと言いますと、今後コードを改善していく上で、まず、どちらにどの程度着目するのか、という点について明確にしませんか、ということです(その他の目的があれば、補足お願いします)。それによって、今度どうすべきかが変わってくると思います。
もし前者全振りならば、考えることはそんなに多くないと思うのですが、もし後者も目的に設定する場合(できればそうしたいとは思いますが)、メンテも必要になってきますし、やることも多くなってくると思うので、大きな実装を始める前に、設計について議論すべきだと思います。考えるべき点について、いくつか挙げると、
import hoge
のような使い方)?それともコマンドラインツールとしての使用? or 両方?などです。あまり汎用性を意識しすぎても、何も手を付けられれないので、どこかにポイントを絞るべきかなと思ったりしますが、まずは明確にしないと、特に複数人での開発が難しいように思います。
上記を踏まえて、僕から言いたいことをまとめると、
run_sprocket.sh
を実行すると、xxの実験結果を再現することができます、という形にする(それがゴール)。現実的ですご意見よろしくお願いします。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.