TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

C#

WhisperのモデルをONNXにする その2

前回、WhisperのモデルをONNXにする方法について記述した。Whisperのモデルは、単体では音声認識はできず、音声をメルスペクトログラムにする前処理と、トークンをデコードして文字列にする後処理が必要になる。 今回は、前処理と後処理をC#で実装する方法に…

PythonからC#へポインタ渡しする

C#からPythonへポインタ渡しするとは逆に、Python for .NETを使ってPythonからC#へポインタ渡しする方法について紹介する。 Python for .NET Python for .NETを使用すると、PythonからC#のコードを呼び出すことができる。 Pythonと同じプロセスで、.NETのラ…

C#からPythonへポインタ渡しする

以前に、Python for .NETを使用することで、C#とPythonを同一プロセスで動かせることを紹介した。C#からPythonへの呼び出し時に、引数と戻り値は、自動的にマーシャリングが行われる。 ここで、C#の型からPythonのネイティブな型に変換されるのは、スカラ型…

C#のオブジェクトをダンプする

C#

C#のオブジェクトに格納されている値を調べたいときに、VS Codeなどのデバッガを使えば確認することができるが、オブジェクトの階層が深い場合は、テキストファイルにダンプして確認したくなる。 ObjectDumper.NET 方法がないか調べたところ、「ObjectDumper…

C#からPythonを呼び出す

以前にC#からPythonのディープラーニングフレームワークを呼び出すいくつかの方法を記事にした。 gRPCでC#とPythonを連携する - TadaoYamaokaの開発日記 SocketでC#とPythonを連携する - TadaoYamaokaの開発日記 TensorFlowのC#バインディング - TadaoYamaok…

C#からLibTorchを使ってMNISTデータセットを学習する

C#からディープラーニングフレームワークを使用する方法について、以前にいくつかの方法を検討した。 gRPCでC#とPythonを連携する - TadaoYamaokaの開発日記 SocketでC#とPythonを連携する - TadaoYamaokaの開発日記 TensorFlowのC#バインディング - TadaoYa…

ML.NETからTensorFlowを使う

前回、C#からTensorFlowが使えるTensorFlow.NETというライブラリを試したが、まだ実装されていない機能があるので、他にTensorFlowをフルで使えるライブラリを探すことにした。TensorFlowSharpが十分な機能が実装されているので、.NET Coreへポーティングす…

TensorFlowのC#バインディング

TensorFlowのC#バインディングとして、検索するとTensorFlowSharpが見つかるが、更新が止まっているようで.NET Coreには対応していない(ビルドすれば可能そう)。 TensorFlow.NET 他のライブラリを探したところ、TensorFlow.NETというライブラリを見つけた…

ref localでC#のコードを高速化する

C#

.NET Frameworkと.NET CoreでDictionaryの性能が異なる。ランダムな整数をキーとして、AddとTryGetValueを5000000回行った結果10回の平均時間(ms)は以下の通りである。 バージョン Add TryGetValue .NET Framework 4.6 681.8 268.5 .NET Core 2.1 585.9 266.…

.NET Coreでログ出力する方法

「C# ログ出力」で検索するとlog4netの情報が見つかるが、.NET Coreのアプリの場合、設定ファイルのlog4net.configを読み込むことができなかった。 NLogを使うと、あっさり解決できたのでメモを残しておく。内容はほぼチュートリアル通り。 NLogをパッケージ…

SocketでC#とPythonを連携する

先日、gRPCでC#とPythonを連携する方法について書いたが、Pythonで受信したProtobufのデータを処理すると実行速度に問題があることがわかった。 速度が必要なケースでは、Protobufの使用はあきらめた方がよさそうだ。今回は、シンプルにSocket通信でデータを…

LinuxでC#からC++で作成した共有ライブラリを呼び出す

cmakeでC++の共有ライブラリプロジェクトを作成する CMakeLists.txt cmake_minimum_required(VERSION 3.8) project(SampleDll) enable_language(CXX) add_library(SampleDll SHARED sample_dll.cpp ) sample_dll.cppに、C++で処理を記述する。 Windowsでも使…

gRPCでC#とPythonを連携する

C#のプログラムから機械学習などの処理をPythonで実装したい場合がある。 C#とPythonの連携方法について調べたところいくつか方法があったが、gRPCが良さそうだったので試してみた。 調べた方法 Python for .NET C#とPythonを直接連携させるには、「Python f…

コンパイラによるFFTの速度比較(再測定)

以前の日記で、コンパイラごとのFFTの実行速度を比較した結果を記載しましたが、この記事を見て、gccがVisual C++に比べて速いという内容が以前の私の測定と違っていたので再測定を行いました。この記事で使用しているgccは、MSYS2のものを使用しているよう…