2026-01-01から1年間の記事一覧
PyTorchで画像分類モデルを学習するとき、学習ループやチェックポイント管理、TensorBoard対応などを毎回自前で実装するのはやや煩雑である。 Hugging Face Transformers の Trainer を使うことで、NLP用途だけでなくCNNのような画像モデルでも、シンプルか…
torch.compile は、PyTorch 2.0 以降で導入された高速化機能で、既存の PyTorch コードをほとんど変更せずに JIT コンパイルして最適化できる仕組みである。 主に GPU 実行時のオーバーヘッド削減やカーネル融合によって性能を向上できる。dlshogiの train.p…
先日の世界コンピュータ将棋選手権の会場で「あすとら将棋」さんから、GPUへのデータ転送を推論と並列化すると1割くらい速くなるという話を伺って、さっそく実験してみた。 データ転送の並列化 これまでは、一つのGPUを複数スレッドで共有して、1つのスレッ…
将棋AIの大会で、DL系の開発者が減少傾向にあるため、dlshogiの成果物を少し共有したいと思います。 TransformerのPython実装 第5回電竜戦と第35回世界コンピュータ将棋選手権で使用したResNet+TransformerモデルのPython実装をGitHubのmasterブランチに追加…
5/3~5/5に開催された第36回世界コンピュータ将棋選手権に「dlshogi」というプログラム名で参加しました。 大会の概要 今回は、55チームが参加しました。 第1予選、第2予選を通過した上位8チームで総当たりのリーグ戦で決勝戦が行われました。参加チーム数は…
前回、制約ベースのWave Function Collapse (WFC)アルゴリズムでマップの自動生成を試したが、戦略的なマップは生成できなかった。 今回は、グラフベースの手法を試す。 戦略グラフ グラフベースの手法は、本拠地、争奪エリアのようなノードと、ノードをつな…
以前に、GPS将棋(OpenShogiLib)のdf-pnをdlshogiのAperyベースに移植することを試みたが、変更が多すぎて途中で挫折した。Aperyベースにするのは一旦保留して、単体のUSI mateエンジンとして移植することにした。 Windows向けの移植 元のOpenShogiLibは、古…
前回は、バイブコーディングでAIをルールベースで実装して、SPSAでパラメータチューニングすることで遊びごたえのあるAIを実装した。今回は、マップの自動生成を試す。 マップの自動生成 まず、ChatGPTで、ゲームのマップ自動生成の手法について調査した。 …
前回、マップの保存/読み込みに対応して、ゲームボーイウォーズのマップを変換して取り込めるようにした。 しかし、AIが弱すぎてゲームとして楽しめなった。今回は、AIを強化する。 ターン制戦略ゲームのAI ゲームボーイウォーズのようなターン制戦略ゲーム…
昨年の世界コンピュータ将棋選手権、電竜戦では、モデルサイズを大きくすることで強くすることを試みたが、精度は上がるものの探索速度が落ちることで強くできなかった。そこで、現在一番強い40ブロック512フィルタのモデルサイズで、モデルアーキテクチャを…
前回、レトロターン制戦略ゲームにマップエディタを実装した。今回は、マップの保存と読み込みを実装する。 また、テスト用にゲームボーイウォーズのマップを再現して、プレイできることを確認する。 マップの保存と読み込み マップエディタで、右クリックの…
前回、レトロ戦略ゲームの画像素材を生成AIで制作したものに置き換えたことで、地形やユニットの識別ができるようになった。今回は、マップを編集する機能を実装する。 マップエディタ 実装方針 マップをどのように実装するのがよいかCodexに相談したところ…
前回、レトロ戦略ゲームの基本部分を生成した。前回は、サイズなどの形式だけ合った素材をコードインタープリタで生成したので、何のユニットかわからなかった。 今回は、画像素材を生成AIで生成し、既存の素材を置き換えることを試した。 ドット絵 画像素材…
ゲームボーイウォーズというターン制戦略ゲームがある。1991年に発売されたゲームボーイ向けのゲームだが、当時結構遊んでいた。 続編で、ゲームボーイウォーズターボや、ゲームボーイウォーズ2といったシリーズが発売されている。あらかじめ用意されている…
先日、Microsoft Storeでリリースした、Pitch Tunerを、Androidに移植して、Google Playで公開した。play.google.com「Pitch Tuner」は使われていたので、「Audio Pitch Tuner」とした。 バイブコーディング C++/WinUI3からKotlin/Jetpack Composeへの移植を…
以前にVectorで公開していた「WAVファイル変換・抽出ツールwavext」を、Microsoft Storeで公開した。apps.microsoft.com wavext mp3やflacなどの圧縮音声ファイルや、動画から、音声をWAVとして抽出するツールである。 サンプリングレート変換やステレオ/モ…
先日改善したチューナーアプリのピッチ解析をベースに、AndroidとiOSでリリースしているVocal Pitch MonitorのWindows版を作成して、Microsoft Storeでリリースした。apps.microsoft.comWindows版では、スマホ版の機能に加えて、録音時間を最大10分まで拡張…
前回、Kontakt5で生成した音色×音階のデータを使うと精度が下がったことを記載した。その後、データクリーニングを行ったところ、精度が下がらないことがわかった。 自動データクリーニング ACFベースのピッチ解析とSwiftF0のどちらも正解のMIDIと異なるデー…
前回、PythonでVSTiを読み込んで音を鳴らす方法について調べた。今回は、Kontakt5のライブラリから音色を連続的に切り替えて自動的にWAVファイルを作ることを試す。 Kontakt5の音色切り替え 前回も記載したが、音色は、VSTiのインターフェースで切り替える方…
前回、録音した音声にSwiftF0で疑似ラベルを付けて、決定木を学習することを試した。学習したモデルを使うことで、アコースティックギター、エレキギター、エレキベースで、安定してピッチ推定が行えるようになった。ギター、ベース以外にも様々な楽器のピッ…
前回、SwiftF0の推論処理をC++で実装してチューナーアプリに組み込んでみたが、誤差が20cent近くあることが分かった。チューナー用途では、20centの誤差は許容できないため、ピッチ推定のアルゴリズムは既存のものを使い、決定木の機械学習モデルの訓練デー…
前回、Pythonで試したSwiftF0の推論を、WindowsのC++プログラムでリアルタイムに行う方法を検討した。 SwiftF0のモデル SwiftF0のモデルは、ONNXで公開されているので、それをそのまま使うことを検討する。Netronで、ONNXモデルを確認すると、STFTもONNXで処…
先日、Windowsのチューナーアプリを開発してMicrosoft Storeで公開した。ピッチ検出のアルゴリズムは、ボーカル音程モニターと同じアルゴリズムを使用したが、特定の弦でオクターブエラーが発生することが分かった。精度改善のため、ギターとベースで様々な…
作成中の本物のギターを使う音ゲーで、弦がチューニングされていないと誤判定が増えるため、チューナー機能を搭載したい。チューナーの処理は独立しているので、先に単独のチューナーアプリを作ることにした。 実装 チューナーのピッチ推定アルゴリズムは、…
前回は、音声入力とリアルタイム音程/和音解析を実装した。今回は、メトロノームを実装する。 メトロノーム 録音時と、再生時にメトロノームを鳴らす。録音の開始時は、1小節分メトロノームを鳴らしてから開始するカウントインオプションを設ける。 メトロ…
前回、タブ譜からギター奏法に対応したピアノロールを描画するところまで実装した。今回は、音声入力とリアルタイムに和音を解析する処理を実装する。 検討事項 音声入力 WASAPI共有モードのイベント駆動で入力する。 サンプリングレートは録音再生時にリサ…
前回、ギターの音ゲーのタブ譜の描画まで実装した。今回は、ピアノロールを実装する。 ピアノロール ピアノロールは、音符(ノート)を、縦軸を音階(12音階)、横軸を時間として表したものである。 縦軸はラベルの代わりに、ピアノ鍵盤を縦に表示することで、音…
先日、タブ譜(.gp5)を読み込んで、MIDIを再生するプログラムができたので、今回はタブ譜の描画を行う処理を作る。ゴールは、本物のギターから音を入力して、採点をする音ゲーを目指している。採点部分に関しては、以前にCQT+NNLSでリアルタイムに和音解析す…
ロックスミス2014というギターの音ゲーがあり、発売当初、結構遊んでいた。 本物のギターを使い、ギターフレットの抑える場所を示して、流れてくる目印に合わせて演奏するというゲームである。 音ゲーとしては、それで楽しめるのだが、曲を練習しようと思う…
Codex + GPT-5.2-Codexの組み合わせは、コーディング能力が以前より飛躍的に向上したという手応えがある。 GPT-5.2-Codexはコンテキスト圧縮が強化されており、比較的規模の大きなプロジェクトでも1回の指示でほぼ修正なく作成できるようになっている。そこ…