20210603のTensorFlowに関する記事は3件です。

Ubuntu、tensorflow、pipenvでの深層学習環境構築方法

はじめに Ubuntuでtenosrflowとpipenvによる環境構築をしたのでまとめておきます。 自分は初心者なので、LINUXのコマンドを叩ける人ならわかる解説になっていると思います。 わかっている人からしたら少しくどいと思いますが、自分用なので。 また仮想環境の構築とpython関係のパッケージのインストールはpipenvで行います。 virtualenvとpipなどでもいいですが、便利なのでおすすめです。 OSはUbuntuを想定していますが、それ以外のディストリビューションでも可能だと思います。 環境 環境(構築前) Ubuntu20.04LTS GPU Geforce RTX 2070 super GPUドライバー  450.119.03 環境(構築後) Ubuntu20.04LTS GPU Geforce RTX 2070 super GPUドライバー  450.119.03 CUDA 11.0 cuDNN 8.0 python3.8.10 tensorflow 2.4.0 pipenv 目標環境はtensorflow公式ホームページを参照に決めました。[1] 使用するGPUによってドライバが異なります。 ドライバによって対応しているCUDAが違うので、まずは対応を確認して自分の目指す環境を確認してください。 こちらの記事[2]も対応を確認するには役に立つので目を通しておくといいです。 CUDAのインストール 公式サイト[3]でダウンロードしたいものをクリックしていくとダウンロードするためのコマンドが出てくるのでそれを実行。 CUDA Toolkit 11.0 → LINUX → x86_64 → Ubuntu → deb と選択していくとコマンドが表示されます。アーキテクチャはほとんどの人がx86_64だと思いますが、確認したいという人はarchコマンドで確認できます。 最後のはネットワークでも問題ないと思いますが、以前ダウンロードした時に失敗したことがあるのでlocalにしています。 runfileでもダウンロードしてshコマンドでrunfileを実行後、欲しいものを選択すればダウンロードできます。 今回はわかりやすくdebファイルで行っていきます。 一応下に載せておきますが、公式サイトの方を参考にしてください。 wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600 wget http://developer.download.nvidia.com/compute/cuda/11.0.2/local_installers/cuda-repo-ubuntu2004-11-0-local_11.0.2-450.51.05-1_amd64.deb sudo dpkg -i cuda-repo-ubuntu2004-11-0-local_11.0.2-450.51.05-1_amd64.deb sudo apt-key add /var/cuda-repo-ubuntu2004-11-0-local/7fa2af80.pub sudo apt-get update sudo apt-get -y install cuda インストールしたらパスを通します。 パスを通すに関してはこの記事[4]を 僕は.bashrcにパスを書いてsorceで更新しました。 先頭に.がつくファイルは隠しファイルなのでls -aで表示しましょう。 またsourceコマンドは厳密ではコマンドではなかったような気がします。 なのでインストールしようとしても出てきません。 Ubuntuだと sudo apt install build-essential chekinstall で使用できるようになります。 ちなみにcentOSでは yum groupinstall "Development Tools" とディストリビューションによって異なるので、Ubuntu以外でやってる人は注意してください。 .bashrcの末尾に export PATH="/usr/local/cuda/bin:$PATH" export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH" を追加したあとにsourceコマンドで更新 source .bashrc which nvcc でパスが出てきたらパスが通っています。 ちなみにたまに.bash_profileに書いてる記事などもありますが、特にこだわりがなければ.bashrcでいいと思います。 一応違いが書いてある記事[5]を載せておきます。 cuDNNのインストール cuDNNの公式サイト[6]からダウンロード。 メンバー登録が必要ですが、Googleアカウントと連携できます。 2021年6月3日現在の最新バージョンはcuDNN v8.2.0ですが、インストールしたいのは古いものなのでそちらをインストールします。 ここは各自のGPUやドライバー、ディストリビューションに応じて各自変えてください。 アーカイブのところをクリックすると過去のものが出てくるのでインストール。 例えばCUDA11.0でcuDNN v8.0がインストールしたければcuDNN v8.0.5 for CUDA 11.0 が確認できる中で最新なのでこれをインストールします。 対応するディストリビューションのX86_64アーキテクチャのパッケージを下記の3つインストールしましょう。 ・Runtime Library ・Developer Library ・Code Samples and User Guide 対応するアーキテクチャ、ディストリビューションのやつをダウンロードしましょう。 クリックしたらダウンロードされます。 ダウンロードしたら解凍しましょう sudo dpkg -i debファイル で解凍できます。 解凍したあとになんかしたような気がするんですが忘れちゃいました。 なんかエラー出たら頑張って解決してください。 cuDNNが使えているかの確認のためにcuDNNのサンプルを実行します。 僕の場合はcuDNNのサンプルは /usr/src/cudnn_samples_v8 にあります。 最後の数字はバージョンに合わせて変えてください。 mnistCUDNNディレクトリに移動して sudo make を行ってください。 パーミッション的に管理者権限じゃないとアクセスできないようでsudoつけました。 結構かかると思いますが終わったら生成されるmnistCUDNNを./mnistCUDNNで実行してください。 ログが流れてTest Pssed!と表示されたらcuDNNを使用できています。 出来てなかったらcuDNNが使えていない可能性が高いです。 なんとか対応してみてください。 Pythonのインストール これは公式サイト[7]にわかりやすく載っています。 ただインストールする際はホームディレクトリにインストールすることをおすすめします。(環境によるとは思いますが) 個人的にシステム標準でついてくるPythonと混ぜたくないのでそうしています。 システムのPythonと混ぜるのは公式でも推奨されていないですし、面倒なことになるのでおすすめしません。 具体的に言うと sudo apt install python-numpy などはしないほうがいいです。 僕が今回ダウンロードするのはPython3-8-10です。 対応している中で最新のものを選びました。 あとは[7]通りにやればOKですが、ローカルにダウンロードする場合はオプションが必要なので注意です。 余談 コマンドでインストールしたい人はPPA(個人が公開するパッケージ的なの)を使ってインストールできますがおすすめしません。 このブログ[8]の方法だとシステムにPythonがインストールされますし、公式ではないので。 おとなしく公式のやり方にしておいたほうがあとあと楽です。 pipenvのインストール pipenvと他のコマンドとの比較についてはこの3つ[9][10][11]を見てください。 そんなのどうでもいいという人でも、pipenvはvitualenvとpip(pip3)の組み合わせみたいなものなので、もとの原理を知っておかないと応用が効きません。 Pythonを上記の手順でインストールしている人は標準でpip3がついているはずです。 間違ってもsudo apt install python3-pipはしないほうがいいです。 わかっている人はいいですが、初心者が手をだすとどこになんのパッケージが入っているのかわからなくなるのでやめたほうがいいです。 詳しいことはこちら[12]。 pipenvのインストールはpip3から行います。 pip3 install pipenv pipenvのインストール先は/home/tumutubo/.local//bin/pipenv になっています which pipenv で確認できます。 もし表示されなかったらパスを通しましょう。 多分いらないですが一応pipenvの更新。 pip3 install -U pipenv 作りたい仮想環境名のディレクトリを作成し、そこで pipenv install で作成(事前にPythonのバージョン指定も出来ます) pipenv shell で仮想環境を有効化。 exit で抜けられます。 which python3などとするとパスが変わっているのがわかります。 その他詳しいことはこちらの記事で[13][14] 余談 pipは環境によって動作が少し変わります。 python2系が入っている場合はそちらにダウンロード、python3系のみの場合はpython3にダウンロードされます。 python2系が入っていない場合はpip=pip3として扱えます。 ただ最新のLinuxシステム標準についてくるPythonもいまは3系ですし、Pythonパッケージをダウンロードしてついてくるのもpip3なのでどちらでもいいと思います。 ぼくは3うつのめんどくさいのでpipとpythonコマンドでやってます。 コマンドの場所を確認したい場合は which pip which pip3 と打てば確認できます。 パッケージのインストール Pipfileが存在するディレクトリでpipenv shellで仮想環境に入ります。 あとはパッケージをインストールするだけです。 使いそうなものを適当にダウンロードしておきます。 pipenv install numpy pandas matplotlib keras requests tensorflow==2.4.0 バージョン指定のやり方は上の通りです。 自分の環境にあったものをダウンロードしてください。 動作確認 tensorflow/kerasを使用したMNISTプログラムを動かします。 ほんとは公式をみてやったほうがいいんでしょうが、公式ドキュメントはあまりまとまって無くて苦手です。 たぶん自分の読解力が足りないんだと思うんですけどね。 ここらへんの記事[15][16]を参考にしてMNISTのサンプルを作成します。 [15]の方はコピペだけで動いたのですが、[16]の方は関数などが古くaccをaccuracyに書き換えないと動きません。 また古い関数を使っているせいか最後の部分が表示されなかったりします。 まあとりあえずtensorflow/kerasが動いているのが確認できたのでとりあえずOKです。 おわりに 研究で機械学習をする必要があったので、自宅環境にtensorflowの動く環境を作ってみました。 かなり大変だったのでLGTMしてくれると喜びます。 ちなみに研究室はアーキテクチャ系なので最終的にはCUDAなどの下層のコーディングをすることになると思います。 大変ですがやはりやっていて楽しいですね。 この記事がみなさんの役に立てたらうれしいです。 それではまた! 参考文献 [1]:ソースからのビルド(TensorFlow) [2]:TensorFlowでGPU学習させるためにCUDA周りではまったときの対処法 [3]:CUDA Toolkit Archive [4]:PATHを通すの意味と通し方 .bash_profile [5]:本当に正しい .bashrc と .bash_profile の使ひ分け [6]:cuDNN Download [7]:Ubuntu環境のPython [8]:Ubuntu16.04にpython3.7を apt install する方法(というか,apt レポジトリに登録されていないpythonのバージョンを導入する方法) [9]:pyenv、pyenv-virtualenv、venv、Anaconda、Pipenv。私はPipenvを使う [10]:Pythonの環境管理ツール良し悪し [11]:Pythonの仮想環境構築についてまとめ【社内向け】 [12]:pip [13]:Pipenvことはじめ [14]:Pipenvを使ったPython開発まとめ [15]:Keras で MNIST データの学習を試してみよう [16]:Keras/TensorflowでMNISTデータセットの画像分類
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【python】画像から犬種・猫種を特定する方法

【python】画像から犬種・猫種を特定する方法(読み物) 動機 正直に言うと動物病院に来る犬で、たまに犬種が分からないのがいる。もちろん問診票に犬種を書いてもらうから心配する必要はないが、自分の力で犬種を特定したい。いくら犬種を勉強しても、「ああ、この子は珍しい犬種で日本で5頭しかいないんですよ~」とか言われることもある。 こうなったら機械学習を使おうと思う。備え付けカメラで犬を撮影し、機械学習で犬種を特定する。自分の力で犬種を特定したと言えるのかは甚だ疑問だが、仕方ない。 方法 画像分類タスクは、Convolutional Neural Network(CNN)が得意。CNNを使う事を決めた。さてどう学習させるか。作戦は3つ。 作戦1 犬種ごとに写真を用意 + CNNを0から学習させる 作戦2 犬種ごとに写真を用意 + 学習済みCNNの最終層を再学習させる(fine tuning) 作戦3 犬種ごとに写真を用意 + 重みを固定した学習済みCNNの後に層を追加して学習させる(transfer learning) 作戦1は犬種ごとの写真が大量に必要だ。珍しい犬種なんてどうしよう。作戦2・作戦3は既に画像の特徴を捉える能力を持ったCNNを使うために、少ない画像で済むそうだ。作戦2・作戦3を使うしかない。作戦2・作戦3のどちらにするかは、精度を見て決めればいいのでまずは作業を開始する。 どの学習済みモデルを使うべきか。tensorflowの中に複数の学習済みモデルがあるけど、どれにしよう。以下のgithubレポジトリを見ると他のモデルよりもefficientnetの方がパラメータも少なくて精度が出ている。 https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet efficientnetを使う事にした。さて、efficientnetはどういった画像を学習させているのだろうか、1400万枚以上の画像を学習させて(imagenet)1000クラスも分類できるらしい、すごいな!! とりあえず、適当にうちの犬の写真を分類させてみた。これは、犬ですとか出るのかな。 dog_breed.py from tensorflow.keras.applications import EfficientNetB0 from tensorflow.keras.preprocessing.image import load_img, img_to_array import numpy as np import tensorflow as tf # 写真の前処理を行う※ pic = load_img("/content/dog.jpg", target_size= (224,224,3)) pic = img_to_array(pic).astype('float32') pic = np.expand_dims(pic,axis=0) processedpic = tf.keras.applications.efficientnet.preprocess_input(pic) # efficientnetのモデルを読み込む model = EfficientNetB0(weights='imagenet') # modelを使って犬種・猫種を予想する prediction = model.predict(processedpic) tf.keras.applications.efficientnet.decode_predictions(prediction) [[(‘n02099712’, ‘Labrador_retriever’, 0.42502728), (‘n02093428’, ‘American_Staffordshire_terrier’, 0.04134651), (‘n02109961’, ‘Eskimo_dog’, 0.032269508), (‘n02110185’, ‘Siberian_husky’, 0.031741217), (‘n02093256’, ‘Staffordshire_bullterrier’, 0.024241285)]] Downloading data from https://storage.googleapis.com/download.tensorflow.org/data/imagenet_class_index.json 犬どころか、かなり具体的な犬種を区別できているぞ。まさか、すでに犬種の分類タスクをできるのではないか。あと、結果のところにjsonのURLがでてきた。見てみると、分類できる1000クラスが載っている! 犬はコードn02085620からn02116738の125犬種、猫はn02123045~n02124075の5種類を区別できることがわかった。 急に、終わりが訪れた。もう私のすることはないのだ。こうなったら、意地悪をして遊んでみよう。このミックス犬はどの犬種と判断しますか。 PxHere [[('n02087046', 'toy_terrier', 0.2920945), ('n02110806', 'basenji', 0.14723742), ('n02085620', 'Chihuahua', 0.101308264), ('n02113023', 'Pembroke', 0.03310363), ('n02113186', 'Cardigan', 0.024589175)]] ...いいところでしょう。 google colab すぐに犬種・猫種の特定ができるように、google colabのサンプルを作りました。 https://colab.research.google.com/github/yuta-vet/Dog-Cat-breed-indentify/blob/main/DogCatbreed_identify.ipynb 参考
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【python】画像から犬種・猫種を特定する方法(読み物)

動機 正直に言うと動物病院に来る犬で、たまに犬種が分からないのがいる。もちろん問診票に犬種を書いてもらうから心配する必要はないが、獣医として自分の力で犬種を特定したい。いくら犬種を勉強しても、「ああ、この子は珍しい犬種で日本で5頭しかいないんですよ~」とか言われることもある。 こうなったら機械学習を使おうと思う。備え付けカメラで犬を撮影し、機械学習で犬種を特定する。自分の力で犬種を特定したと言えるのかは甚だ疑問だが、仕方ない。 方法 画像分類タスクは、Convolutional Neural Network(CNN)が得意。CNNを使う事を決めた。さてどう学習させるか。作戦は3つ。 作戦1 犬種ごとに写真を用意 + CNNを0から学習させる 作戦2 犬種ごとに写真を用意 + 学習済みCNNの最終層を再学習させる(fine tuning) 作戦3 犬種ごとに写真を用意 + 重みを固定した学習済みCNNの後に層を追加して学習させる(transfer learning) 作戦1は犬種ごとの写真が大量に必要だ。珍しい犬種なんてどうしよう。作戦2・作戦3は既に画像の特徴を捉える能力を持ったCNNを使うために、少ない画像で済むそうだ。作戦2・作戦3を使うしかない。作戦2・作戦3のどちらにするかは、精度を見て決めればいいのでまずは作業を開始する。 どの学習済みモデルを使うべきか。tensorflowの中に複数の学習済みモデルがあるけど、どれにしよう。以下のgithubレポジトリを見ると他のモデルよりもefficientnetの方がパラメータも少なくて精度が出ている。 https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet efficientnetを使う事にした。さて、efficientnetはどういった画像を学習させているのだろうか、1400万枚以上の画像を学習させて(imagenet)1000クラスも分類できるらしい、すごいな!! とりあえず、適当にうちの犬の写真を分類させてみた。これは、犬ですとか出るのかな。 dog_breed.py from tensorflow.keras.applications import EfficientNetB0 from tensorflow.keras.preprocessing.image import load_img, img_to_array import numpy as np import tensorflow as tf # 写真の前処理を行う※ pic = load_img("/content/dog.jpg", target_size= (224,224,3)) pic = img_to_array(pic).astype('float32') pic = np.expand_dims(pic,axis=0) processedpic = tf.keras.applications.efficientnet.preprocess_input(pic) # efficientnetのモデルを読み込む model = EfficientNetB0(weights='imagenet') # modelを使って犬種・猫種を予想する prediction = model.predict(processedpic) tf.keras.applications.efficientnet.decode_predictions(prediction) [[(‘n02099712’, ‘Labrador_retriever’, 0.42502728), (‘n02093428’, ‘American_Staffordshire_terrier’, 0.04134651), (‘n02109961’, ‘Eskimo_dog’, 0.032269508), (‘n02110185’, ‘Siberian_husky’, 0.031741217), (‘n02093256’, ‘Staffordshire_bullterrier’, 0.024241285)]] Downloading data from https://storage.googleapis.com/download.tensorflow.org/data/imagenet_class_index.json 犬どころか、かなり具体的な犬種を区別できているぞ。まさか、すでに犬種の分類タスクをできるのではないか。あと、結果のところにjsonのURLがでてきた。見てみると、分類できる1000クラスが載っている! 犬はコードn02085620からn02116738の125犬種、猫はn02123045~n02124075の5種類を区別できることがわかった。 急に、終わりが訪れた。もう私のすることはないのだ。こうなったら、意地悪をして遊んでみよう。このミックス犬はどの犬種と判断しますか。 PxHere [[('n02087046', 'toy_terrier', 0.2920945), ('n02110806', 'basenji', 0.14723742), ('n02085620', 'Chihuahua', 0.101308264), ('n02113023', 'Pembroke', 0.03310363), ('n02113186', 'Cardigan', 0.024589175)]] ...いいところでしょう。 google colab すぐに犬種・猫種の特定ができるように、google colabのサンプルを作りました。 https://colab.research.google.com/github/yuta-vet/Dog-Cat-breed-indentify/blob/main/DogCatbreed_identify.ipynb 参考
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む