- 投稿日:2020-06-21T18:57:06+09:00
Scikit-LearnとTensorFlowによる実践機械学習~TensorFlow編~
Scikit-LearnとTensorFlowによる実践機械学習~Scikit-Learn編~ の続きです。
前半(8章まで)は、ほぼScikit-Learnに関する話でした。
後半(9章以降)は、TensorFlowの話に移っていきます。※書籍がTensorFlow1の内容で書かれているのに対し、どうやら現在はTensorFlow2みたいだということで、TensorFlow2ではどうなってるのかよくわからない部分が多いです。
内容に入る前に、メモ程度に参考になるサイトをまとめておきます。
・サンプルコード(GitHub)
・TensorFlow公式サイト
・PFN社のChainer Tutorial
・書籍情報■ 結論
結論から言うと、TensorFlow2が現状ということを考え、TensorFlow1で学習するのはあまり効率的ではないなと感じました。
TensorFlow1と2では、まるで別物のように感じますし、TensorFlow2の方が遥かに優れているようです。初っ端に「TensorFlowは、Sessionを開始して閉じるということをするのが特徴だ。」的な雰囲気なのですが、TensorFlow2では、このSessionが廃止されているという...
TensorFlow編の初っ端からこんな感じなので、実践しようとすると、どこが変わっていてどこが変わっていないのかよく分かりませんし、もう大変です。調べていてもちょっと調べるだけで時間がみるみるうちに溶けていきます。
TensorFlow1でとりあえず勉強すればいいじゃんという意見もあると思いますが、今回の自分の目的的には、実践で使えるようにしたいのであってTensorFlowの勉強がしたいわけではないので、それはちょっと違うんですよね。書籍をTensorFlow2に対応しているものに変えるかな...(この本安くなかったんだけどなぁ)
とはいえ、バージョンが違うだけで勉強になることは多いです。実践というのを一旦置いておく段階に達したら再び読み直そうと思います。現在はまだとりあえず動いてほしいフェーズなので、しばらくは本棚を温めてもらう役割になりそうではありますが。
一応、9章(TensorFlow編の最初の章)の途中までQiitaにメモしていたので記事は下に続きますが、ぶっちゃけ内容は陳腐で読む価値があるのかは微妙です。
さてさて、Scikit-LearnとTensorFlowによる実践機械学習の全16章のうち、13章まで読んでやる気がぷつんと切れてしまったので、とりあえずDeepLearningの勉強はまたの機会に。よさげな本も増えてきましたしね、飽和するのを一旦待ちます。
※陳腐なメモは以下に続きます。
■ 9章:TensorFlowを立ち上げる。
勉強日:2020/6/21
「そもそもTensorFlowってなんだろう?Deep Learning用のライブラリ??」というところから私の知識は始まりまります。ぶっちゃけた話、このぐらいの知識から読み始めると大分つらいです。
書籍には、
① 数値計算のための強力なオープンソースソフトウェアであること
② 特に大規模な機械学習のためにチューニングされていること
③ 基本原則は、実行する計算グラフをPythonで定義すると、TensorFlowがそのグラフを読み取り、最適化されたC++コードで効率よく実行すること
④ 何より重要なのは、グラフをCPUやGPUで並列処理できること
⑤ 分散コンピューティングをサポートしていることというようなことが書かれています。
正直、ぱっと読んだ時は「なんのこっちゃ」という感じで、そもそもTensorFlowと計算グラフって何の関係があるの?という疑問を持ちました。じっくり先まで読んでみると、どうやらTensorFlowは基本的に「計算グラフの作成 → 計算の実行」という順序を踏むようです。なるほどね。
・9.1 インストール
隔離された環境というのが出てくるのですが、今まで仮想環境が必要になったことはなかったので作ったことがありませんでした。今回はいい機会だと思ったので、あれこれ調べて仮想環境も作ってみました。
書籍には、virtualenvで作ると書いてあったのですが、私はAnacondaを使って作りたかったので、以下のようなサイトを参考にしました。
・【Python】Anacondaを使った仮想環境の構築
・【Anaconda】condaコマンドで仮想環境を構築する方法TensorFlowをインストールするところで気が付いたのですが、書籍内でのTensorFlowのバージョンが1なのに対し、現在のバージョンは2になっているようです。しかも大分使い勝手が違う様子。。。
うーん、うーん、ぅ-…
まぁ、とりあえず、サンプルコードぺたぺたして分かった気になる戦法でいって、細かいところは後で調べたり別の書籍買って勉強するかな。
・9.2 最初のグラフの作成とセッション内での実行
「計算グラフは作っても何も起こらない」というのを理解できなくて何回も読み返しました。書いてあるまんまなんですけど、「なんで」がループした感じですね。
初めてTensorFlowを使った身からすると、まず変数の箱を作るというのがすごく斬新でした。
グラフを作った後は、Session()コマンドで計算実行のセッションを開始し、計算が終わったらSession.close()で終わりを明示的に宣言する。しかもセッション内は全てSession.run()で実行されるというね。
これだとセッションが閉じられていないのに、他のことをしてしまう危険性があるということで、withを使う方法が紹介されています。個人的にはこちらの方が好きですね。
※TensorFlow2では...
Sessionという概念がなくなったようです。
【参考】
・tensorflow 2.0 の紹介(日本語訳)
・Design Documentから見たTensorFlow 2.0の変更点例えば、$f = x^2y + y +2$ を $x=3\,,\,y=4$ として、こんな計算グラフを使って計算したいとします。
TensorFlow1では、
import tensorflow as tf # ★計算グラフの構築 x = tf.Variable(3, name = "x") y = tf.Variable(4, name = "y") f = x*x*y + y +2 # ★計算の実行 sess = tf.Session() # TensorFlowセッションを開く # 計算グラフを用いた計算をするには必ず必要 sess.run(x.initializer) # 変数の初期化 sess.run(y.initializer) result = sess.run(f) # fの評価 print(result) # 計算結果の表示 sess.close # TensorFlowを閉じる出力はもちろん
42
です。TensorFlow2ではSessionの概念がなくなったのでこれが使えないのですが、基本的な概念がよくわかっていないためどうしたらいいのやら。。。
とりあえずあれこれ調べて公式にtf.functionがいいよって書いてあったのでこれを使います。import tensorflow as tf # 変数のセット x = tf.Variable(3) y = tf.Variable(4) # tf.functionで関数を作る @tf.function def f(x, y): return x*x*y + y + 2 result = f(x, y) print(result)出力はこんな感じ。たしかに分かりやすい。っていうかTensorFlow2の方がPytonぽさがありますね。
tf.Tensor(42, shape=(), dtype=int32)・9.3 グラフの管理
何言っているのかよくわからなかった。
あとで調べる。・9.4 ノードの値のライフサイクル
ほぇーという感じでした。まず、第一にTensorFlowが自動的にノード間の依存関係を拾ってくれる点に感動し、次に計算結果が再利用されない点にほぇーとなりました。
再利用されないというのは、例えば、
w = tf.constant(3) x = w + 2 y = x + 5 z = x * 3という計算があった時に、$y$ と $z$ を評価するのに
1⃣
1. $w = 3$
2. $x = w + 2$
3. $y = x + 5$2⃣
1. $w = 3$
2. $x = w + 2$
3. $z = x * 3$という処理が行われるみたいです。何かというと、$w = 3$ と $x = w + 2$ は、$y$ を求める時にも $z$ を求める時にも共通して必要なものなのに、わざわざ再計算されるということみたいです。つまり、赤字部分は同じだから人間なら1回しか計算しませんが、TensorFlowでは2回計算するということですね。
一回で処理させたい場合には、やはりwithを使います。
with tf.Session() as sess: y_val, z_val = sess.run([y, z])でもこれTensorFlow2でもあるのかな・・・
・9.5 TensorFlowによる線形回帰
なんか突然TensorFlowで、カリフォルニアの住宅価格データセットを使った線形回帰をしています。DeepLearning用のためだけのライブラリじゃないよってことかな。
・9.6 勾配降下法の実装
3種類の勾配の計算を説明してくれています。すなわち、
・マニュアルによる勾配計算
・自動微分を使う
・オプティマイザを使う
です。
マニュアルは愚直にコードを書いて計算する方法で、自動微分はTensorFlowが自動的に効率の良い方法で勾配を計算してくれるという優れもののようです。オプティマイザは、書籍の説明だと「自動微分よりも優れている」的なことしか書いていないのですが、最適化のための関数といういうことなのでしょうか?・9.7 訓練アルゴリズムへのデータの供給
プレースホルダ-の使い方が書いてあるが、TensorFlow2ではプレースホルダーは廃止になっているらしい。
TensorFlow1と2でものすごく違うものになっている気がするけど、本当にこの本で勉強を進めることが最適なのだろうかという気がしてきました。・9.8 モデルの保存と復元
モデルを使いまわしたり、他のプログラムで使ったり、他のモデルと比較したりするために、モデルを復元したいということがあります。他にも訓練を最初からやり直すのではなく、途中からやり直したい場合などにも復元する必要があります。TensorFlowでは、この復元が非常に容易らしいです。
書籍では restore() を使う方法が書いてありますが、公式では keras による方法が紹介されていました。これは確かに便利ですね。
★参考★
[1] TensorFlow 2.0 主な変更点(S-Analysis)
[2] tensorflow 2.0 の紹介(日本語訳)
[3] Design Documentから見たTensorFlow 2.0の変更点
[4] TensorFlow2.0ついにリリース!
- 投稿日:2020-06-21T18:57:06+09:00
Scikit-LearnとTensorFlowによる実践機械学習~TensorFlow諦めた編~
Scikit-LearnとTensorFlowによる実践機械学習~Scikit-Learn編~ の続きです。
前半(8章まで)は、ほぼScikit-Learnに関する話でした。
後半(9章以降)は、TensorFlowの話に移っていきます。※書籍がTensorFlow1の内容で書かれているのに対し、どうやら現在はTensorFlow2みたいだということで、TensorFlow2ではどうなってるのかよくわからない部分が多いです。
内容に入る前に、メモ程度に参考になるサイトをまとめておきます。
・サンプルコード(GitHub)
・TensorFlow公式サイト
・PFN社のChainer Tutorial
・書籍情報■ 結論
結論から言うと、TensorFlow2が現状ということを考え、TensorFlow1で学習するのはあまり効率的ではないなと感じました。
TensorFlow1と2では、まるで別物のように感じますし、TensorFlow2の方が遥かに優れているようです。初っ端に「TensorFlowは、Sessionを開始して閉じるということをするのが特徴だ。」的な雰囲気なのですが、TensorFlow2では、このSessionが廃止されているという...
TensorFlow編の初っ端からこんな感じなので、実践しようとすると、どこが変わっていてどこが変わっていないのかよく分かりませんし、もう大変です。調べていてもちょっと調べるだけで時間がみるみるうちに溶けていきます。
TensorFlow1でとりあえず勉強すればいいじゃんという意見もあると思いますが、今回の自分の目的的には、実践で使えるようにしたいのであってTensorFlowの勉強がしたいわけではないので、それはちょっと違うんですよね。書籍をTensorFlow2に対応しているものに変えるかな...(この本安くなかったんだけどなぁ)
とはいえ、バージョンが違うだけで勉強になることは多いです。実践というのを一旦置いておく段階に達したら再び読み直そうと思います。現在はまだとりあえず動いてほしいフェーズなので、しばらくは本棚を温めてもらう役割になりそうではありますが。
一応、9章(TensorFlow編の最初の章)の途中までQiitaにメモしていたので記事は下に続きますが、ぶっちゃけ内容は陳腐で読む価値があるのかは微妙です。
さてさて、Scikit-LearnとTensorFlowによる実践機械学習の全16章のうち、13章まで読んでやる気がぷつんと切れてしまったので、とりあえずDeepLearningの勉強はまたの機会に。よさげな本も増えてきましたしね、飽和するのを一旦待ちます。
※陳腐なメモは以下に続きます。
■ 9章:TensorFlowを立ち上げる。
勉強日:2020/6/21
「そもそもTensorFlowってなんだろう?Deep Learning用のライブラリ??」というところから私の知識は始まりまります。ぶっちゃけた話、このぐらいの知識から読み始めると大分つらいです。
書籍には、
① 数値計算のための強力なオープンソースソフトウェアであること
② 特に大規模な機械学習のためにチューニングされていること
③ 基本原則は、実行する計算グラフをPythonで定義すると、TensorFlowがそのグラフを読み取り、最適化されたC++コードで効率よく実行すること
④ 何より重要なのは、グラフをCPUやGPUで並列処理できること
⑤ 分散コンピューティングをサポートしていることというようなことが書かれています。
正直、ぱっと読んだ時は「なんのこっちゃ」という感じで、そもそもTensorFlowと計算グラフって何の関係があるの?という疑問を持ちました。じっくり先まで読んでみると、どうやらTensorFlowは基本的に「計算グラフの作成 → 計算の実行」という順序を踏むようです。なるほどね。
・9.1 インストール
隔離された環境というのが出てくるのですが、今まで仮想環境が必要になったことはなかったので作ったことがありませんでした。今回はいい機会だと思ったので、あれこれ調べて仮想環境も作ってみました。
書籍には、virtualenvで作ると書いてあったのですが、私はAnacondaを使って作りたかったので、以下のようなサイトを参考にしました。
・【Python】Anacondaを使った仮想環境の構築
・【Anaconda】condaコマンドで仮想環境を構築する方法TensorFlowをインストールするところで気が付いたのですが、書籍内でのTensorFlowのバージョンが1なのに対し、現在のバージョンは2になっているようです。しかも大分使い勝手が違う様子。。。
うーん、うーん、ぅ-…
まぁ、とりあえず、サンプルコードぺたぺたして分かった気になる戦法でいって、細かいところは後で調べたり別の書籍買って勉強するかな。
・9.2 最初のグラフの作成とセッション内での実行
「計算グラフは作っても何も起こらない」というのを理解できなくて何回も読み返しました。書いてあるまんまなんですけど、「なんで」がループした感じですね。
初めてTensorFlowを使った身からすると、まず変数の箱を作るというのがすごく斬新でした。
グラフを作った後は、Session()コマンドで計算実行のセッションを開始し、計算が終わったらSession.close()で終わりを明示的に宣言する。しかもセッション内は全てSession.run()で実行されるというね。
これだとセッションが閉じられていないのに、他のことをしてしまう危険性があるということで、withを使う方法が紹介されています。個人的にはこちらの方が好きですね。
※TensorFlow2では...
Sessionという概念がなくなったようです。
【参考】
・tensorflow 2.0 の紹介(日本語訳)
・Design Documentから見たTensorFlow 2.0の変更点例えば、$f = x^2y + y +2$ を $x=3\,,\,y=4$ として、こんな計算グラフを使って計算したいとします。
TensorFlow1では、
import tensorflow as tf # ★計算グラフの構築 x = tf.Variable(3, name = "x") y = tf.Variable(4, name = "y") f = x*x*y + y +2 # ★計算の実行 sess = tf.Session() # TensorFlowセッションを開く # 計算グラフを用いた計算をするには必ず必要 sess.run(x.initializer) # 変数の初期化 sess.run(y.initializer) result = sess.run(f) # fの評価 print(result) # 計算結果の表示 sess.close # TensorFlowを閉じる出力はもちろん
42
です。TensorFlow2ではSessionの概念がなくなったのでこれが使えないのですが、基本的な概念がよくわかっていないためどうしたらいいのやら。。。
とりあえずあれこれ調べて公式にtf.functionがいいよって書いてあったのでこれを使います。import tensorflow as tf # 変数のセット x = tf.Variable(3) y = tf.Variable(4) # tf.functionで関数を作る @tf.function def f(x, y): return x*x*y + y + 2 result = f(x, y) print(result)出力はこんな感じ。たしかに分かりやすい。っていうかTensorFlow2の方がPytonぽさがありますね。
tf.Tensor(42, shape=(), dtype=int32)・9.3 グラフの管理
何言っているのかよくわからなかった。
あとで調べる。・9.4 ノードの値のライフサイクル
ほぇーという感じでした。まず、第一にTensorFlowが自動的にノード間の依存関係を拾ってくれる点に感動し、次に計算結果が再利用されない点にほぇーとなりました。
再利用されないというのは、例えば、
w = tf.constant(3) x = w + 2 y = x + 5 z = x * 3という計算があった時に、$y$ と $z$ を評価するのに
1⃣
1. $w = 3$
2. $x = w + 2$
3. $y = x + 5$2⃣
1. $w = 3$
2. $x = w + 2$
3. $z = x * 3$という処理が行われるみたいです。何かというと、$w = 3$ と $x = w + 2$ は、$y$ を求める時にも $z$ を求める時にも共通して必要なものなのに、わざわざ再計算されるということみたいです。つまり、赤字部分は同じだから人間なら1回しか計算しませんが、TensorFlowでは2回計算するということですね。
一回で処理させたい場合には、やはりwithを使います。
with tf.Session() as sess: y_val, z_val = sess.run([y, z])でもこれTensorFlow2でもあるのかな・・・
・9.5 TensorFlowによる線形回帰
なんか突然TensorFlowで、カリフォルニアの住宅価格データセットを使った線形回帰をしています。DeepLearning用のためだけのライブラリじゃないよってことかな。
・9.6 勾配降下法の実装
3種類の勾配の計算を説明してくれています。すなわち、
・マニュアルによる勾配計算
・自動微分を使う
・オプティマイザを使う
です。
マニュアルは愚直にコードを書いて計算する方法で、自動微分はTensorFlowが自動的に効率の良い方法で勾配を計算してくれるという優れもののようです。オプティマイザは、書籍の説明だと「自動微分よりも優れている」的なことしか書いていないのですが、最適化のための関数といういうことなのでしょうか?・9.7 訓練アルゴリズムへのデータの供給
プレースホルダ-の使い方が書いてあるが、TensorFlow2ではプレースホルダーは廃止になっているらしい。
TensorFlow1と2でものすごく違うものになっている気がするけど、本当にこの本で勉強を進めることが最適なのだろうかという気がしてきました。・9.8 モデルの保存と復元
モデルを使いまわしたり、他のプログラムで使ったり、他のモデルと比較したりするために、モデルを復元したいということがあります。他にも訓練を最初からやり直すのではなく、途中からやり直したい場合などにも復元する必要があります。TensorFlowでは、この復元が非常に容易らしいです。
書籍では restore() を使う方法が書いてありますが、公式では keras による方法が紹介されていました。これは確かに便利ですね。
★参考★
[1] TensorFlow 2.0 主な変更点(S-Analysis)
[2] tensorflow 2.0 の紹介(日本語訳)
[3] Design Documentから見たTensorFlow 2.0の変更点
[4] TensorFlow2.0ついにリリース!
- 投稿日:2020-06-21T07:18:20+09:00
Unity × TensorFlow でDL
お疲れ様です。
色々試しています。
他人のブログ見ながら、
Unity × TensorFlow で深層学習。
これは、
12枚の板の上に、
黄色いボールが斜面に流れて落ちそうになり
始めは落ちたりもするんですが、
深層学習で、勉強していって、
落とさなくなる、
というのを試して見ました。
私のMacだとかなりつらい模様ですが、
GPUかなり乗せたPCなら、
スムーズにいけそうです。
色々試すと面白そうです。
2018.2.3追記
なんのことはありませんでした。
私が、見ていた映像は、
学習している動画でした。
正常に動作しました。
ちょっとUnityにも興味が出てきました。
- 投稿日:2020-06-21T00:32:29+09:00
WindowsでTensorFlow Object Detection API の環境構築(備忘録)
Abstract
某大学院でDeep Learningによる物体検出をしています。
その際、TensorFlow Object Detection APIの環境構築で
ハマってしまったので備忘録として記しておきたいと思います。
【TensorFlow Object Detection APIとは】
Deep Learning、物体検出...というと、ハードルが高く感じるかもしれませんが、
その実装をサポートしてくれるフレームワークがあります。(TensorFlow,Pytorch,Chainer,Kerasなどが王道)
Tensorflow Object Detection APIでは学習済みのモデルが用意されており、気軽に物体検出を試すことができます。質問、コメント、不備などがありましたらコメントにて受け付けています。
環境
- Windows10
- Visual Studio 2017
- CUDA 10.1
- cuDNN 7.6.5
- TensorFlow 1.15.0
- TensorFlow-gpu 1.15.0
- Anaconda3
- Python 3.6.10
環境構築
Windows10でTensorFlow Object Detection APIを試すのに必要な環境構築を行なっていきます。
Ⅰ.CUDA,cuDNNのインストール
TensorFlowの公式サイトにCUDA、cuDNNのバージョン関係の早見表があるのでそちらを参考にしたほうがいいと思います。
今回私は上記(環境に記載)のバージョンをインストールしています。
1.CUDAのインストール
・下記サイトからCUDA Toolkit 10.1をインストール
https://developer.nvidia.com/cuda-toolkit-archive・PATHの追加
Windowsのコントロールパネルから環境変数の設定を開き、先ほどインストールしたCUDA Toolkit 10.1のPATHを通す。
・コマンドプロンプトにてCUDAがインストールされPATHが通っているか確認
C:\> where nvccちゃんとPATHの変数が問題なく表示されたら大丈夫だと思います。
2.cuDNNのインストール
・下記サイトからcuDNNをインストール
https://developer.nvidia.com/rdp/cudnn-download
※インストールにはNVIDIA Developerへの登録が必要になります。・登録が完了したら、CUDAのバージョンに合わせてcuDNNをインストールします。
今回はCUDA==10.1をインストールしているので、cuDNN==7.6.5をインストールします。・環境変数にCUDA_PATHとCUDA_PATH_V10.1が設定されているはずです。(自動的に追加されている)
・展開してできたディレクトリcuda の下にあるすべてのファイルとディレクトリを,
CUDA ToolkitをインストールしたディレクトリにコピーC:\> Where cudnn64_7.dll問題なければ次に行きましょう。
Ⅱ.TensorFlowのインストール
・Anaconda3にTensorflowの仮想環境を作成します。
【初心者向け】Anacondaで仮想環境を作ってみるC:\> pip install Tensorflow==1.15.0 C:\> pip install Tensorflow-gpu==1.15.0・TensorFlowがしっかりインストールされているか確認
Pythonで下記のように入力し、Python> import tensorflow as tf; print(tf.__version__)>>> "1.15.0""1.15.0"とインストールしたバージョンの数字が返ってきたらOKです。
TensorFlow Object detection APIの環境構築
基本的には公式【TensorFlow Object Detection - Installation】通りにやれば大丈夫でした。
ライブラリのインストール
pip install --user Cython pip install --user contextlib2 pip install --user pillow pip install --user lxml pip install --user jupyter pip install --user matplotlib pip install --user tf_slim自分の場合numpyが最新のバージョンだと後々うまくいかなかったのでnumpy==1.16にダウングレードしました。
TensorFlow / modelsリポジトリをダウンロード
C:\> git clone https://github.com/tensorflow/models.gitCOCO APIのインストール
C:\> git clone https://github.com/cocodataset/cocoapi.git C:\>cd cocoapi/PythonAPI C:\>make C:\>cp -r pycocotools <path_to_tensorflow>/models/research/※または、pipを使用してインストール(こちらのほうがWindowsではうまくいく)
C:\>pip install git+https://github.com/philferriere/cocoapi.git#egg=pycocotools^&subdirectory=PythonAPI・tensorflow/models/researchで下記コマンドを実行
C:/models/research/>protoc object_detection/protos/*.proto --python_out=.・PYTHONPATHの設定
Windowsでは下記のようにコマンドを実行してPATHを通すC:\>set PYTHONPATH= C:\~\models\research;C:\~\models\research\slimⅢ.テスト
これまでやってきた環境構築がうまくいったかどうかテストします。
・tensorflow/models/researchで下記コマンドを実行
C:/models/research>python object_detection/builders/model_builder_tf1_test.py実行結果
[ RUN ] ModelBuilderTF1Test.test_create_context_rcnn_from_config_with_params(True) [ OK ] ModelBuilderTF1Test.test_create_context_rcnn_from_config_with_params(True) . . . . . [ RUN ] ModelBuilderTF1Test.test_unknown_ssd_feature_extractor [ OK ] ModelBuilderTF1Test.test_unknown_ssd_feature_extractor ---------------------------------------------------------------------- Ran 21 tests in 0.209s OK (skipped=1)上記のような結果が出力されれば問題ありません。
(skipped=1)となっているのはよくわかりませんが問題なく学習できているので大丈夫??エラー
・ModuleNotFoundError: No module named 'pycocotools._mask'
となってしまったらPATHの設定がうまくいってない可能性があります。もう一度、下記コマンドを実行してみる
C:\>set PYTHONPATH= C:\models\research;C:\models\research\slimⅣ.参考
- 投稿日:2020-06-21T00:32:29+09:00
WindowsでTensorFlow Object Detection API の環境構築(備忘録)
Abstract
某大学院でDeep Learningによる物体検出をしています。
その際、TensorFlow Object Detection APIの環境構築で
ハマってしまったので備忘録として記しておきたいと思います。
【TensorFlow Object Detection APIとは】
Deep Learning、物体検出...というと、ハードルが高く感じるかもしれませんが、
その実装をサポートしてくれるフレームワークがあります。(TensorFlow,Pytorch,Chainer,Kerasなどが王道)
Tensorflow Object Detection APIでは学習済みのモデルが用意されており、
気軽に物体検出を試すことができます。質問、コメント、不備などがありましたらコメントにて受け付けています。
環境
- Windows10
- Visual Studio 2017
- NVIDIA GeForce RTX 2080 Ti
- CUDA 10.1
- cuDNN 7.6.5
- TensorFlow 1.15.0
- TensorFlow-gpu 1.15.0
- Anaconda3
- Python 3.6.10
環境構築
Windows10でTensorFlow Object Detection APIを試すのに必要な環境構築を行なっていきます。
Ⅰ.CUDA,cuDNNのインストール
TensorFlowの公式サイトに
CUDA、cuDNNのバージョン関係の早見表があるのでそちらを参考にしたほうがいいと思います。
今回私は上記(環境に記載)のバージョンをインストールしています。
1.CUDAのインストール
・下記サイトからCUDA Toolkit 10.1をインストール
https://developer.nvidia.com/cuda-toolkit-archive・PATHの追加
Windowsのコントロールパネルから環境変数の設定を開き、
先ほどインストールしたCUDA Toolkit 10.1のPATHを通す。
・コマンドプロンプトにてCUDAがインストールされPATHが通っているか確認
C:\> where nvccちゃんとPATHの変数が問題なく表示されたら大丈夫だと思います。
2.cuDNNのインストール
・下記サイトからcuDNNをインストール
https://developer.nvidia.com/rdp/cudnn-download
※インストールにはNVIDIA Developerへの登録が必要になります。・登録が完了したら、CUDAのバージョンに合わせてcuDNNをインストールします。
今回はCUDA==10.1をインストールしているので、cuDNN==7.6.5をインストールします。・環境変数にCUDA_PATHとCUDA_PATH_V10.1が設定されているはずです。(自動的に追加されている)
・展開してできたディレクトリcuda の下にあるすべてのファイルとディレクトリを,
CUDA ToolkitをインストールしたディレクトリにコピーC:\> Where cudnn64_7.dll問題なければ次に行きましょう。
Ⅱ.TensorFlowのインストール
・Anaconda3にTensorflowの仮想環境を作成します。
【初心者向け】Anacondaで仮想環境を作ってみるC:\> pip install Tensorflow==1.15.0 C:\> pip install Tensorflow-gpu==1.15.0・TensorFlowがしっかりインストールされているか確認
Pythonで下記のように入力し、Python> import tensorflow as tf; print(tf.__version__)>>> "1.15.0""1.15.0"とインストールしたバージョンの数字が返ってきたらOKです。
TensorFlow Object detection APIの環境構築
基本的には公式【TensorFlow Object Detection - Installation】通りにやれば大丈夫でした。
ライブラリのインストール
pip install --user Cython pip install --user contextlib2 pip install --user pillow pip install --user lxml pip install --user jupyter pip install --user matplotlib pip install --user tf_slim自分の場合numpyが最新のバージョンだと後々うまくいかなかったので
numpy==1.16にダウングレードしました。TensorFlow / modelsリポジトリをダウンロード
C:\> git clone https://github.com/tensorflow/models.gitCOCO APIのインストール
C:\> git clone https://github.com/cocodataset/cocoapi.git C:\>cd cocoapi/PythonAPI C:\cocoapi/PythonAPI>make C:\cocoapi/PythonAPI>cp -r pycocotools <path_to_tensorflow>/models/research/※または、pipを使用してインストール(こちらのほうがWindowsではうまくいく)
C:\>pip install git+https://github.com/philferriere/cocoapi.git#egg=pycocotools^&subdirectory=PythonAPI・tensorflow/models/researchで下記コマンドを実行
C:~/models/research/>protoc object_detection/protos/*.proto --python_out=.・PYTHONPATHの設定
Windowsでは下記のようにコマンドを実行してPATHを通すC:\>set PYTHONPATH= <C:\~\models\research>;<C:\~\models\research\slim>Ⅲ.テスト
これまでやってきた環境構築がうまくいったかどうかテストします。
・tensorflow/models/researchで下記コマンドを実行
C:~/models/research>python object_detection/builders/model_builder_tf1_test.py実行結果
[ RUN ] ModelBuilderTF1Test.test_create_context_rcnn_from_config_with_params(True) [ OK ] ModelBuilderTF1Test.test_create_context_rcnn_from_config_with_params(True) . . . . . [ RUN ] ModelBuilderTF1Test.test_unknown_ssd_feature_extractor [ OK ] ModelBuilderTF1Test.test_unknown_ssd_feature_extractor ---------------------------------------------------------------------- Ran 21 tests in 0.209s OK (skipped=1)上記のような結果が出力されれば問題ありません。
(skipped=1)となっているのはよくわかりませんが問題なく学習できているので大丈夫??私の場合はこれで問題なく学習できています。
Ⅳ.参考