チュートリアル:Neural Network Console用プラグインの開発方法

Friday, September 17, 2021

App

Posted by Yoshiyuki Kobayashi

本チュートリアルでは、Neural Network Console Windows版に任意の機能追加を可能にするプラグインの開発方法についてご紹介します。

Neural Network ConsoleはGUIベースでありながら自由度の高いDeep Learningの開発を可能にするツールですが、実際の開発現場ではNeural Network Consoleにデータを入力するまでの前処理、学習したモデルを用いた推論の結果の後処理が必要になるケースも少なくありません。

Neural Network Console Windows版 Version 2.10以降では任意の前処理機能をプラグインとして実装し、Neural Network ConsoleのGUI上から呼び出して使うことが可能になっています。

 

1         Neural Network Consoleにおけるプラグインの構造

Neural Network Consoleにおけるプラグインは、CLI(コマンドラインインターフェイス)で動作するPythonアプリケーションです。このためPythonのプログラムを書くことができる方であればNeural Network Console向けのプラグインの開発はとても簡単です。

Neural Network Consoleには予め、Cross Tabulation(クロス集計)、Grad-CAM、Tile Images(画像を並べて表示)、各種XAI(Explainable AI、説明可能なAI)関連プラグインなどの各種プラグインが用意されており、新たにプラグインを開発する際にもこれらのプラグインの実装を参考にすることができます。

プリインストールされたプラグインは、Neural Network Consoleのインストールされたフォルダに作成されるlibs\pluginsフォルダ内に格納されています。ここではlibs\plugins_PostProcess_Utils\に格納されており、最もシンプルなプラグインの1つであるParameter Statsプラグイン(parameter_stats.py)を見ながらその構造について解説していきます。このファイルはPythonのプログラムコードになっており、テキストエディタなどで開くことでその中身を参照することができます。

 

ご覧のように、プラグインは一般的なPythonのコマンドラインアプリケーションとして記述されています。このプラグインアプリケーションは、Pythonのインストールされている環境であれば、コマンドプロンプトから

python parameter_stats.py

と入力することで実際に実行することができます。

簡単にコードの全体像について解説します。まず56~57行目により、33行目からのmain関数が実行されます。main関数の34~49行目は、このコマンドラインアプリケーションの解説と引数を定義しています。Parameter Statsプラグインは指定されたモデルに含まれるパラメータについての統計値を求めるプラグインになっており、-mまたは–modelオプションで統計値を求める対象のモデルファイルを、-oもしくは–outputオプションで求めた統計値を出力するCSVファイル名を指定するよう実装されています。

コマンドプロンプトからさきほどのコマンドに-h(help)オプションを付けた以下のコマンドを実行することで、上記のような引数を持つPythonアプリケーションであることを確認することができます。

python parameter_stats.py -h

上記コマンド実行時のコマンドライン出力

実際にこのPythonプログラムに引数を与えて実行してみることもできます。必須オプションである-m、-oが指定された状態でParameter Statsプラグインを実行すると、10~28行のfunc関数が呼ばれ、実際にパラメータの統計値が計算されます。モデルと出力ファイルの引数を指定した以下のコマンドを実行することで、実際にパラメータの計算値を計算させてみます。

python parameter_stats.py -m (nnpファイル) -o ./output.csv

01_logistic_regressionサンプルで学習したnnpファイルを-mオプションで指定しparameter_stats.pyを実行したところ、output.csvに以下のような結果を出力することができました。

name shape size max min max_abs min_abs mean stdev
Affine/affine/W 784 x 1 784 1.04725 -0.69033 1.04725 0.00027 0.001217 0.230446
Affine/affine/b 1 1 -0.16637 -0.16637 0.166372 0.166372 -0.16637 0

このように、Neural Network Consoleにおけるプラグインの実態は比較的純粋なPythonのコマンドラインアプリケーションになっています。

作成したコマンドラインアプリケーションをNeural Network Consoleから呼び出し可能にするには、libs\pluginsフォルダ内の以下の配置先のパスにコピーして配置します。

プラグインの種類 配置先 呼び出し方法
データの前処理 libs\plugins\_PreProcess

\_CreateDataset

起動後のデータセット画面のデータセットを作成ボタン
後処理 libs\plugins\_PostProcess 評価タブの表の右クリックメニュー

pluginsフォルダに配置されたPythonプログラムは、例えば後処理プラグインであればNeural Network Consoleの評価タブの右クリックメニューから呼び出すことが可能になります。

Parameter Statsプラグインを呼び出した例

 

Neural Network Console上からプラグインを呼び出すと、先ほど-hオプションを付けて表示していたアプリケーションに関する説明と、オプションの一覧が表示されていることが分かります。

Neural Network ConsoleのGUI上で各オプションの値を入力しOKボタンを押すと、Neural Network Consoleはプラグインを実行し、その結果をUI上に表示します。

 

このように極めて気軽に開発できるNeural Network Console向けのプラグインですが、Neural Network Consoleに正しく認識させ、またスムーズな連携を実現させるためには、プラグイン実装の際に気を付けるべきいくつかの決まりごとがあります。以後、Neural Network Consoleのプラグインに求められる仕様について解説します。

 

2         プラグインの名前と解説文

プラグインの名前は、argparse.ArgumentParserの引数descriptionの1行目で指定します。プラグインの解説を加える場合は、上記Parameter Statsプラグイン、34~36行のように、プラグイン名の後に改行コード(\n)を加え、これに続いて解説文を記述します。

 

3         プラグインの引数の定義方法

プラグインの引数は、先ほどのParameter Statsプラグイン、33~49行にあったように、Pythonのargparseモジュールを用いて定義することができます。add_argument関数では、引数の変数名、help(引数の解説)、type(引数の型)、default(初期値)などを指定することができますが、Neural Network Consoleでは、このうち変数名やhelpの文字列の書き方を工夫することによって、よりNeural Network Consoleのプラグインとして使いやすくすることができます。

 

4         予約された変数名

次の変数名は予約されており、指定することでNeural Network ConsoleのGUIと連携し、ユーザの使い勝手を向上することができます。

変数名  解説
image あるいは input-data 後処理プラグインにおいて、評価タブの表で選択中の画像などのデータファイルがプラグイン起動時のデフォルト値として入力される

ユーザはファイル名を手動で入力する手間を削減できる

outputを含む変数名 後処理プラグインにおいて、プラグイン実行後、outputで指定したファイルが存在する場合、そのファイルが評価タブに表示される

ユーザはプラグインの実行結果を即座にNeural Network ConsoleのUI上で確認することができる

output-dirを含む変数名 前処理プラグインにおいて、output-fileで指定したファイル名の拡張子がcsvである場合、プラグイン実行後output-dirで指定したフォルダ内のoutput-fileで指定したファイルがデータセット一覧に追加される
output-fileを含む変数名

 

5         helpの書式

次のhelpの文字列は予約されており、指定することでNeural Network ConsoleのGUIと連携し、ユーザの使い勝手を向上することができます。

helpの文字列
path to training dataset csv file (csv) データセットタブ、Trainingで指定されたデータセットのファイル名がプラグイン起動時のデフォルト値として入力される。ユーザはファイル名を手動で入力する手間を削減できる
path to validation dataset csv file (csv) データセットタブ、Validationで指定されたデータセットのファイル名がプラグイン起動時のデフォルト値として入力される。ユーザはファイル名を手動で入力する手間を削減できる

 

プラグインの引数は通常テキストで入力することになりますが、ヘルプ分の後ろに 半角のカッコで囲まれた詳細な型を指定することにより、Neural Network Console上での入力を容易にすることができます。

型名
text, int 通常の引数

ユーザは文字列として入力

image, csv, file ファイル名

ユーザは文字列として入力、もしくはファイルを開く、保存ダイアログを使ってファイルを選択

helpに文字列”output”が含まれている場合は保存ダイアログ、含まれていない場合は開くダイアログが表示される

dir フォルダ名

ユーザは文字列として入力、もしくはファイルを開く、保存ダイアログを使ってフォルダを選択

helpに文字列”output”が含まれている場合は保存ダイアログ、含まれていない場合は開くダイアログが表示される

bool True or False

ユーザはチェックボックスによりTrue/Falseを切り替えることができる

コマンドライン実行時はTrueの場合のみ該当の引数が設定される(プラグインのadd_argumentの引数にaction=’store_true’を指定しておく)

(option:option1, option2, option3…) 選択肢

ユーザはラジオボックスによりあらかじめ用意された選択肢からオプションを指定

複数のオプションは:の後ろにカンマ区切りで指定

プラグイン実行時に選択されたオプションは文字列として渡される

 

さらに、helpの最後にdefault=から始まる文字列を追加することで、GUI上に表示される初期値を指定することができます。これはadd_argument引数で指定するdefault引数(引数が指定されなかった場合に用いられる値)とは異なる点にご注意ください。

 

6         プラグイン実行のログ表示と実行成功の通知

プラグインの動作状況については、Parameter Statsのコード7行でインポートしているnnablaのloggerを用いてユーザに通知します。

プラグインの実行が成功した際には、Parameter Statsのコード30行のように”successfully”を含むログを出力するようにします。

    logger.log(99, ‘Parameter stats completed successfully.’)

Neural Network Consoleはログ出力にsuccessfullyの文字列が含まれることを検知すると、プラグインの実行後、ログ表示を自動的に閉じます。Successfullyの文字が含まれない場合、ユーザがプラグインのログ表示右上のxボタンを押しログ表示を閉じるまでログの表示を続けます。

 

7         複数のPythonコードを含むプラグインの作成

pluginsフォルダに配置されたpythonファイルは、全てプラグインとして扱われるようになります。複数のPythonファイルで構成されるプラグインを作成するには、それらのファイルをサブフォルダに格納します。サブフォルダ内の.pyファイルはNeural Network Consoleからプラグインとして認識されなくなります。

Version 2.1以降では、pluginsフォルダ内に_から始まるフォルダ名を指定することで、プラグインを階層化して整理することが可能です。

 

8         プラグイン実行時のカレントフォルダについて

後処理プラグインの実行時のフォルダは、Neural Network Consoleの評価タブにて選択中の学習結果の保存されているフォルダになります。

学習結果フォルダには学習済みモデルであるresults.nnp、モデルの評価結果であるoutput_result.csvなどが含まれており、プラグイン内のコードからカレントフォルダに存在するこれらのファイルを読み込むことで、学習結果に対する各種後処理を行わせることができます。

また、カレントフォルダに対して処理結果を出力することで、Neural Network Consoleの学習結果毎にプラグインの実行結果を保存することができます。

 

9         プラグインの実行のために利用されるPython環境とライブラリ

コンピュータにどのようなPython環境がインストールされているかに関わらず、プラグインの実行はNeural Network Console Windows版同梱のPython環境上で行われます。

プラグインがNeural Network ConsoleのPython環境にあらかじめインストールされている以外のライブラリを必要とする場合、起動後のプロジェクトリスト一覧の右クリックメニューなどから呼び出すことができるその他のツール、コマンドプロンプトを開き、

python -m pip install (インストールするパッケージ名)

を実行します。

pipコマンドを用いたライブラリのインストールを行うには、まず

python -m pip install pip

としてpipのインストールを行います。

 

10      まとめ

ここまでご紹介してきた通り、プラグインを実装することによりNeural Network Consoleの機能はどなたにでも簡単に拡張することができます。プラグインの引数の指定方法、実装方法などは、Neural Network Consoleにプリインストールされているプラグインや、以下のGitHub上で公開中のコードをサンプルとして参考にすることができます。

 

Plugins of Neural Network Console

https://github.com/sony/nnc-plugin

 

よく行う前処理や後処理をプラグインとして実装しておくことで、Deep Learningを用いた技術開発のワークフローの効率を飛躍的に改善できる可能性があります。特に頻繁に行うような作業がある場合は、それをプラグイン化しておくことの意義が大きくなります。

より効率的なDeep Learning開発のために、Neural Network Consoleプラグインの仕組みをお役立ていただければと思います。