モーグルとカバとパウダーの日記

モーグルやカバ(EXカービング)山スキー(BC)などがメインの日記でした。今は仕事のコンピュータ系のネタが主になっています。以前はスパム対策関連が多かったのですが最近はディープラーニング関連が多めです。

Windows環境でのfannExplorerのビルド手引き

最近、ニューラルネットワーク使って認識させる実験していて、お手軽にいろいろ試せる環境として、ブラウザ上からネットワーク構成作ってテストできるfannExplorerというツールを使っていました。
これはFast Artificial Neural Network Library (FANN)という、高速ニューラルネットワークライブラリを利用したシミュレータで、マルチスレッド対応してるので、マルチコアの恩恵もお手軽に得られてなかなかよいです。

(追記)
と書いたのですけど、マルチスレッド対応してるのは、複数のクライアントからの接続がマルチスレッドで走るだけで、一つのニューラルネットワークはマルチスレッドでは動いてくれないんですよね。
これはFANNライブラリ自体がそういう設計だから仕方ないんでしょうけども。
マルチコアを有効に使えるANNライブラリってどっかにころがってないのかな?
あと、コア部分はまだしも、ファイル入出力あたりのコードがすごく適当。まあ、使えりゃいいということなんだろうけど、もうちょっと汎用性あるように書いてもバチ当たらないと思う。

で、いろいろやってると、やっぱりこれだけじゃ出来ることの限界があるので、fannKernelというコア部に手を入れたいと思いました。


ということで、まず普通にビルドするのですが結構はまったので、すんごく需要が少なそうなエントリーですけども、Windows XP上でfannExplorerをビルドするための手引きを作ってみました。


ビルドする環境は、WindowsXPVC++ 2008 Express Editionです。

VC++のインストール

VC++ 2008 Express Editionを普通にインストール
Visual Studio 2008 Express Editions

fannExplorerや後述のBoostは、VC++ 2005が正式対応とのことなのですが、2008でも動く。

Boostのインストールと設定

Boost C++ Libraries
のライブラリを利用しているため、インストールしておく必要がある。


BoostPro Computing - Free Downloads
Windows用のバイナリインストーラがあるので、それを使ってお手軽インストール。
デフォルトでは「C:\Program Files\boost\boost_1_35_0」にインストールされるので、以降このディレクトリにインストールした場合として例示する。


利用されるライブラリの種類が「mt-sgd」と「mt-s」なので、マルチスレッド、スタティックの通常版とデバッグ版をインストールする。
「Complilers」で「「Visual C++ 9.0」を選択し、「Variants」では少なくとも「Multithread, static runtime」と「Multithread Debug, static runtime」を選択する必要がある。


Boostのライブラリを利用できるようにするため、VCの設定を行う。

Boostのインクルードファイルとライブラリファイルディレクトリをそれぞれ追加

  • ツール→オプション→プロジェクトおよびソリューション→VC++ディレクト
  • ディレクトリを表示するプロジェクト→インクルードファイル
  • 「C:\Program Files\boost\boost_1_35_0」
  • ディレクトリを表示するプロジェクト→ライブラリファイル
  • 「C:\Program Files\boost\boost_1_35_0\lib」

プロジェクトファイルの編集

プロジェクトファイルの変換が必要になるが、fann\fannSoap\fannKernel\fannKernel.vcprojで指定されている
UpgradeFromVC71.vsprops の場所が、d:\Microsoft...となっていて変換できない問題があるので、置き換える。
3か所あるので、エディタで置換する。C:\Program Files\Microsoft... のところはVC++をインストールしたディレクトリに合わせて修正。
「d:\Microsoft Visual Studio 8\VC\VCProjectDefaults\UpgradeFromVC71.vsprops」
→「C:\Program Files\Microsoft Visual Studio 9.0\VC\VCProjectDefaults\UpgradeFromVC71.vsprops」

(追記)
リビルドしようとすると、必要なファイルが消えてしまう問題があった。
これは、gSOAPを使っていて
「soapStub.h;soapH.h;soapC.cpp;soapServer.cpp;soapfannKernelObject.h;fannKernel.wsdl
あたりのファイルは、gSOAPのsoapcpp2により作られるようになっており、それがクリーンで消えてしまうため。
わざわざそのためだけにgSOAPをインストールするのもめんどくさいので、すでにあるファイルをそのまま使うように変更する。

<File
	RelativePath=".\fannKernel.h"
	>

以降の下記内容を削除する。

<FileConfiguration
	Name="Debug|Win32"
	>
	<Tool
		Name="VCCustomBuildTool"
		Description="Performing gSOAP Compilation"
		CommandLine="D:/gSOAP/soapcpp2 &quot;$(InputPath)&quot;&#x0D;&#x0A;"
		Outputs="soapStub.h;soapH.h;soapC.cpp;soapServer.cpp;soapfannKernelObject.h;fannKernel.wsdl"
	/>
</FileConfiguration>
<FileConfiguration
	Name="Release|Win32"
	>
	<Tool
		Name="VCCustomBuildTool"
		Description="Performing gSOAP Compilation"
		CommandLine="D:/gSOAP/soapcpp2 &quot;$(InputPath)&quot;&#x0D;&#x0A;"
						Outputs="soapStub.h;soapH.h;soapC.cpp;soapServer.cpp;soapfannKernelObject.h;fannKernel.wsdl"
	/>
</FileConfiguration>
<FileConfiguration
	Name="Debug Trace|Win32"
	>
	<Tool
		Name="VCCustomBuildTool"
		Description="Performing gSOAP Compilation"
		CommandLine="C:/gSOAP/soapcpp2 &quot;$(InputPath)&quot;&#x0D;&#x0A;"
		Outputs="soapStub.h;soapH.h;soapC.cpp;soapServer.cpp;soapfannKernelObject.h;fannKernel.wsdl"
	/>
</FileConfiguration>

プロジェクトファイルの変換

fann\fannSoap\fannKernel\fannKernel.vcproj
を開くと、変換ウィザードが走って変換をうながされるのでそのまま変換。

ビルド

ここまで下準備がされていれば、普通にビルドすればOKのはず。
実行時には、実行ファイルのあるディレクトリ中に、クライアントのflash用コンテンツが入っている「fannExplorer」と、ニューラルネットワークのデータが入っている「net」ディレクトリが必要。