TadaoYamaokaの開発日記

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

pocketfftを使ってみる

FFT

先日、Whisperで音声認識する処理を実装した際に、FFTの処理でフレームサイズが2のべき乗でない場合にどうやって処理するか戸惑った。Whisperではフレームサイズが400となっており、NAudioのFFTでは、フレームサイズが2のべき乗という制約があり使用できなか…

Whisperでリアルタイムに文字起こしするアプリ

前回の記事で、WhisperのモデルをONNXにして文字起こしができるようになったので、Windowsでスタンドアロンで実行できるアプリを作成した。C#でWPFを使用して開発したので、実行できるのはWindowsのみである。GitHubのReleaseからダウンロードできるようにし…

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

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

WhisperのモデルをONNXにする

WhisperのモデルをONNXに変換する方法について記述する。 Whisperのモデル WhisperのモデルはPyTorchを使ってPythonで実装されている。 そのため、実行にはPyTorchをインストールしたPython環境が必要になる。 環境構築なしでスタンドアロンで利用できると用…

続:どの駒が評価値に寄与しているかを可視化する

先日記事にした駒の働きを可視化するツール(feature_importance.py)に、SVGを出力する機能を追加した。前回は数値で出力して、Excelの条件付き書式のカラースケールで、色に変換してから、ShogiGUIに画像として重ね合わせるということを行っていたが、手間が…

floodgateで任意のソフト同士で対局する方法

floodgateは、30分置きに自動で対局が始まるコンピュータ将棋の対局サイトだが、任意のタイミングで2つのソフトを対局させることができる。 CSAサーバプロトコル CSAサーバプロトコルでは、%%GAMEでgamenameを指定することで、対局条件が同じソフト同士の対…

【論文】Adversarial Policies Beat Superhuman Go AIs

[2211.00241] Adversarial Policies Beat Superhuman Go AIs最先端のコンピュータ囲碁ソフトのKataGoの脆弱性を攻撃することで、高い勝率を上げるエージェントを訓練する方法について書かれた論文。囲碁のルールの設定が公平でないとRedditで批判されている…

棋力計測の戦型分類

floodgateの戦型分類の記事にコメントをいただいたので、棋力測定時の戦型について分類してみた。 棋力測定の方法 dlshogiの棋力測定は、平手開始局面から序盤ランダムありで測定を行っている。 また、基準ソフトとして水匠5を互角になる条件に調整して、リ…

水匠の定跡作成プログラム

第3回電竜戦の水匠の定跡作成プログラムと同様のプログラムを作成した。 DeepLearningShogi/make_book_minmax.py at master · TadaoYamaoka/DeepLearningShogi · GitHub 方式 水匠の定跡作成プログラムと同様に、末端局面(一定の対局数以上の局面)の勝率をMi…

中盤互角局面集

先日、dlshogiと水匠が互角になる探索ノード数を調べたが、初手開始局面からdlshogiはランダムありで測定していた。 初手開始局面からだと、dlshogiは序盤で優勢を築いてそのまま勝つ場合が多いため、中終盤の精度が測定できていない可能性がある。 そこで、…

将棋AI実験ノート:dlshogiと水匠で評価値の割れる局面の精度改善

第3回世界将棋AI電竜戦では、先手の角換わり定跡で、dlshogiが後手番で後手優勢と評価している局面から、定跡を抜けてから反省して負けることがあった。 dlshogiと水匠で評価が分かれる場合、dlshogiが正しくてそのまま勝ち切ることも多いが、特に中盤以降で…

拡散モデルの実装を理解できるノートブック

拡散モデルの実装を理解するために、こちらのノートブックがとても分かりやすかったので紹介する。 diffusion-models-class/unit1 at main · huggingface/diffusion-models-class · GitHub拡散モデル(DDPM)を、以下のように段階的に実装して確認できるように…

floodgateの戦型別先手勝率の変化

先日の第3回世界将棋AI電竜戦では、水匠の先手角換わり定跡の勝率の高さが注目された。 そこで、最近の将棋AI同士の対局で、戦型別の勝率に変化があるか調査した。以下の調査では、戦型の分類にMizarさんが公開されているjsonの定義ファイルを使用している。…

どの駒が評価値に寄与しているかを可視化する

dlshogiのモデルに盤面を入力すると、その盤面の評価値(勝率)を出力できる。 その際、どの駒が評価値に寄与しているか可視化できると、AIがどこに注目しているのかがわかる。 以前に、Attention Branch Networkを使って可視化を試したが、今回は、駒を除くと…

将棋AIの進捗 その60(固定プレイアウトで水匠5と互角になる条件)

dlshogiの棋力測定する際に、dlshogiの過去のバージョンとの対局だとレーティング差が実際よりも大きくなる傾向がある。 そこで、棋力測定では水匠5を加えてリーグ戦で連続対局している。普段の棋力測定では、対局条件をフィッシャールールの持ち時間で対局…

将棋AIの進捗 その59(第3回電竜戦で見つかった課題と対策検討)

第3回電竜戦では、水匠が準備した先手番角換わりの長手数の定跡が、dlshogiの盲点を突いていて定跡を抜けた時点で大差になっていた。具体的には、以下の局面の85手目の8三角打が先手優勢であることをdlshogiが見つけらず、盲点となっていた。 8三角打から…

将棋AIの進捗 その58(訓練の省メモリ化と高速化)

現状のdlshogiのモデルの訓練の実装では、訓練データが多い場合にメモリを大量に消費する課題があった。dlshogiのモデルの訓練は、訓練データをすべてメモリに読み込んで処理を行っている。 そのため、一度に学習できるデータはメモリに読み込める分に制限さ…

第3回世界将棋AI電竜戦 結果報告

週末(12/3,4)に開催された第3回世界将棋AI電竜戦に参加しました。HEROZチームとして、「dlshogi with HEROZ 30b」と「dlshogi with HEROZ 20b」という2つのソフトでエントリしました。 大会の概要 世界将棋AI電竜戦は、コンピュータ将棋開発者の有志により立…

DeepNash(R-NaD)でクーン・ポーカーを学習する

DeepMindがArxivで発表したDeepNash(R-NaD)がOpenSpielに実装されたので試してみた。 ※2022年12月にScienceにも掲載されました。 DeepNash(R-NaD) DeepNash(R-NaD)は、不完全情報ゲームで探索なしでナッシュ均衡に収束するモデルフリーの深層強化学習アルゴ…

将棋AI実験ノート:30ブロックの学習

dlshogiのモデルサイズは、10ブロック192フィルタから初めて、精度が飽和するたびに、15ブロック224フィルタ、20ブロック256フィルタと段階的に大きくしている。参考: 将棋でディープラーニングする その48(ResNet) - TadaoYamaokaの開発日記 第2回 電竜戦T…

アニメデータセットでリコメンドを試す(NMF編)

少し古いがWEB+DB PRESS Vol.129のレコメンドエンジンの記事を読んでいて、勉強のために記事とは異なるデータセットで試したいと思った。記事ではMovieLensのデータセットで使っているが、アニメレビューのデータセットを使って試してみた。 モチベーション …

PCで再生中の音声をWhisperでリアルタイムに文字起こしする

PCで再生中の音声をリアルタイムで文字起こしできると、字幕機能がない動画の再生や、外国とのオンライン会議で便利である。先日、OpenAIが公開したWhisperは、音声ファイルから文字起こしするするツールが提供されているが、リアルタイムで処理するツールは…

いらすとやでDreamboothを試す

先日、いらすとやの画像でTextual Inversionを試したが、今回は同じく数枚の画像でスタイルを学習するDreamboothを試してみる。Dreamboothは、元は、GoogleのImagenに対して適用された手法だが、Stable Diffusionに適用できるようにした実装が公開されたので…

【TIPS】 Stable Diffusion web UIの起動を速くする

AUTOMATIC1111版Stable Diffusion web UIは、起動時にCLIPの学習済みモデルを取得するために、HuggingFaceにアクセスを行う。 初回は、実際に学習済みモデルのダウンロードが必要だが、2回目以降はキャッシュされるために、ローカルストレージのキャッシュが…

Whisperとゲームバーで会議議事録作成を自動化する

先日、OpenAIが公開したオープンソースの音声認識ソフトウェアのWhisperを使って、会議議事録を自動作成する方法について記載する。昨今、オンライン会議が主流になっているため、会議を録画/録音することが容易になっている。 Windows 10/11には、Xbox Game…

WindowsにWhisperをインストールする

先日、OpenAIが公開したオープンソースの音声認識ソフトウェアであるWhisperをWindowsにインストールする方法について記載する。 Anaconda(Miniconda)のインストール Anacondaもしくは、Minicondaをダウンロードして、インストールする。 必要に応じて仮想環…

いらすとやでTextual Inversionを試す

Stable Diffusionの追加画像によるスタイル学習の方法として、「Textual Inversion」という方法がある。これは、3~5枚の画像を用いて、スタイルを表す新規の単語の埋め込みベクトルを学習する方法である。 既存のパラメータは一切更新しないで、既存モデルに…

Stable Diffusionを「いらすとや」で追加学習する

前回、Stable Diffusionをdanbooruデータセットを使用して追加学習することを試した。今回は、自分でデータセットを作成して追加学習することを試す。 データセットには、画像とキャプションが揃っている必要があり、キャプションがない場合はCLIPで疑似ラベ…

Stable Diffusionにdanbooruデータセットを追加学習する その2

前回、danbooruデータセットを使用してStable Diffusionに追加学習を行う手順について記載した。今回は、追加学習したモデルで、生成する画像がどう変わるか確認する。 追加学習の結果 98エポックまで学習を行った。 エポック数とステップ数 エポック数とス…

Stable Diffusionにdanbooruデータセットを追加学習する

Stable Diffusionに独自データセットで追加学習できるようになるために、まずは既存のデータセットを使用した学習方法を試した。追加学習の方法には、画像3~5枚を用いてスタイルを学習させるTextual Inversionという方法があるが、ここでは追加学習にデータ…