はじめに
仕事の話がきっかけですが、顔写真に対する証明写真としての適正具合を画像分類で判定できるんじゃないか? という個人的興味がわいたため、適当にWebで顔写真を集めて VGG16 をベースに転移学習した Keras のお試しモデルを作りました。0.0 ~ 1.0 の不適切度を出力し、しきい値 0.5 で 93% くらいの精度でした。
現場のサーバーが Windows Server なので、もしそこで動かすならということで「C#で学習済みVGG16モデルを使ってアプリを作る方法」を参考に VisualStudio2017 と TensorFlowSharp を使って動くことを確認しましたが、ついでに現場の開発用IDEである VisualStudio2010 でもビルドできるようにしてみました。
作ったもの
github に TensorFlowSharpNet40 というレポジトリで公開しています。2018/10/10 時点では「net40/1.9.0」というブランチで TensorFlowSharp 1.9.0 版のみコミットしてあります。
上記は 本家レポジトリ の内、TensorFlowSharp フォルダだけ Fork した形にしてあるため存在しているファイルは本家コミットログも保持しています。むしろ部分Forkに苦戦して色々試しましたが結局「gitを使って、レポジトリの一部抽出forkしてみました」の方法になりました。
そもそもの話
無理して VisualStudio2010 を使ったところで ValueTuple 4.4.0 に依存しているため実行には .NetFramework 4.6.1 以上のランタイムが必要と思われます(未確認)。
また VisualStudio2017 を使って本家ソースコードを変更することなく VisualStudio2010 から参照設定可能な TensorFlowSharp.dll をビルドすることもできます。
わざわざソースコードを変更してまで得られるメリットは VisualStudio2010 だけでビルドできる、という1点のみです。ビルドできてもタプル構文が使えないため使いづらいでしょうし、冒頭のモデルによる判定値出力は動きましたが、どこまでちゃんと動くかは不透明です。
おわりに
修正自体は大した作業ではないので TensorFlowSharp 1.11.0 くらいまでは対応版をコミットしておきたいところですが、私自身も含めて誰かの役に立ちそうにありませんのでやる気が出るかは分かりません。