UbuntuにCaffeのCPUバージョンをインストールします

元のブログ:[Doiテクニカルチーム](http://blog.doiduoyi.com/)
リンクアドレス:[https://blog.doiduoyi.com/authors/1584446358138](https://blog.doiduoyi.com/authors/1584446358138)
当初の意図:優れた土井技術チームの学習経験を記録する

序文#

Caffeは現在、より一般的に使用されている深層学習フレームワークです。このフレームワークのインストールは、他の主流のフレームワークほど単純ではありません。pipコマンドを使用して直接インストールできます。より一般的には、コンパイルを使用してインストールされます。したがって、この記事を書いて記録してください。

UbuntuにCaffeをインストールする#

Ubuntuのバージョンが17.04以上の場合、次の方法でCaffeをインストールできます。Python3バージョンがインストールされていることに注意してください。

apt install caffe-cpu

このバージョンよりも低い場合は、ソースコードを使用してコンパイルする必要があります。作成者のシステムは64ビットのUbuntu 16.04です。次に、Python2を使用したインストール手順について説明します。

インストールに依存する環境##

まず、依存環境をインストールする必要があります。依存環境はたくさんあり、コンパイル中のエラーを回避するために、それらがインストールされていることを確認する必要があります。以前にインストールしたことがある場合は、コマンドを繰り返しても問題ありません。

apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
apt-get install --no-install-recommends libboost-all-dev  
apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
apt-get install libatlas-base-dev
apt-get install python-numpy
apt-get install libhdf5-serial-dev
apt-get install python-dev
apt install python-pip
pip install scikit-image

コンパイルされたファイルを変更します##

ソースコードのコンパイルを使用するため、最初にソースコードのクローンを作成してから、公式のコンパイル構成例をコピーする必要があります。

# optディレクトリに切り替えます
cd /opt
# クローンカフェのソースコード
git clone git://github.com/BVLC/caffe.git
# ソースルートディレクトリに切り込みます
cd caffe/
# 公式のコンパイル構成ファイルの例をコピーします
cp Makefile.config.example Makefile.config
# 構成情報の書き込みを開始します
vim Makefile.config

この構成ファイルを次のように変更します。

CPU_ONLY :=1
# Whatever else you find you need goes here.
INCLUDE_DIRS :=$(PYTHON_INCLUDE)/usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS :=$(PYTHON_LIB)/usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial

コンパイルを開始します##

これでコンパイルを開始できます。最初の2つはソースコードのコンパイルで、後の2つはテストのコンパイルです。 -j4は、4つのスレッドを使用して並行してコンパイルし、コンパイルを高速化することを意味します。

make -j4 pycaffe
make -j4 all
make -j4 test
make -j4 runtest

環境変数を追加する##

コマンド vim / etc / profileを使用して、ファイルの最後に次のコード行を追加します。

export PYTHONPATH=/opt/caffe/python:$PYTHONPATH

インストールが成功したかどうかを簡単にテストできます。正常であれば、caffeのバージョン情報を出力できます。

# python
Python 2.7.12(default, Dec  42017,14:50:18)[GCC 5.4.020160609] on linux2
Type "help","copyright","credits" or "license"for more information.>>>import caffe
>>> caffe.__version__

次の情報が出力されます。

'1.0.0'

モデルを使用して写真を予測する#

カフェをインストールした後、モデルを使用して画像を予測できます。作者はこちら[カフェモデルをダウンロード](https://github.com/shicai/MobileNet-Caffe)。以下のコードでは、modelnetV2モデルを使用しています。

# coding=utf-8from __future__ import print_function
import numpy as np
import caffe

# 画像サイズを変更する
def get_img(img_path, nh, nw):
 im = caffe.io.load_image(img_path)
 h, w, _ = im.shape
 if h < w:
  off =(w - h)/2
  im = im[:, off:off + h]else:
  off =(h - w)/2
  im = im[off:off + h,:]
 im = caffe.io.resize_image(im,[nh, nw])return im

def eval(image_path, nh, nw):
 caffe.set_mode_cpu()
 # 荷重モデル
 net = caffe.Net("mobilenet_v2_deploy.prototxt","mobilenet_v2.caffemodel", caffe.TEST)

	#画像を前処理する方法を設定します
 transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
 transformer.set_transpose('data',(2,0,1))  # row to col
 transformer.set_channel_swap('data',(2,1,0))  # RGB to BGR
 transformer.set_raw_scale('data',255)  # [0,1] to [0,255]
 # 画像の平均を差し引く
 img_mean = np.array([103.94,116.78,123.68], dtype=np.float32)
 transformer.set_mean('data', img_mean)
 # 比率を掛けたもの
 transformer.set_input_scale('data',0.017)
 # 画像の寸法を変更する
 net.blobs['data'].reshape(1,3, nh, nw)

 im =get_img(image_path, nh, nw)
 net.blobs['data'].data[...]= transformer.preprocess('data', im)
 out = net.forward()
 # 予測結果を得る
 prob = out['prob']
 prob = np.squeeze(prob)
 idx = np.argsort(-prob)
 # 最も可能性の高いラベルを取得する
 label = idx[0]
 # ラベルファイルの内容を読む
 label_names = np.loadtxt('synset.txt', str, delimiter='\t')print('%.5f - %s'%(prob[label], label_names[label]))if __name__ =='__main__':
 image_path ="cat.jpg"
 nh, nw =224,224eval(image_path, nh, nw)

次の関数は、モデルのニーズに合わせて画像のサイズを変更することです。Python3の場合、分割では /ではなく //を使用する必要があります。これはPython3の変更です。

def get_img(img_path, nh, nw):
 im = caffe.io.load_image(img_path)
 h, w, _ = im.shape
 if h < w:
  off =(w - h)/2
  im = im[:, off:off + h]else:
  off =(h - w)/2
  im = im[off:off + h,:]
 im = caffe.io.resize_image(im,[nh, nw])return im

次のコードは、CPUとロードモデルを指定するための定義ファイルとウェイトファイルです。これら2つのファイルはGitHubからダウンロードされます。

 caffe.set_mode_cpu()
 net = caffe.Net("mobilenet_v2_deploy.prototxt","mobilenet_v2.caffemodel", caffe.TEST)

次のコードスニペットは、チャネルの順序の変更、各ピクセルからの平均値の減算、各ピクセルの比率の乗算など、画像の前処理方法を定義しています。

 transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
 transformer.set_transpose('data',(2,0,1))  # row to col
 transformer.set_channel_swap('data',(2,1,0))  # RGB to BGR
 transformer.set_raw_scale('data',255)  # [0,1] to [0,255]
 img_mean = np.array([103.94,116.78,123.68], dtype=np.float32)
 transformer.set_mean('data', img_mean)
 transformer.set_input_scale('data',0.017)
 net.blobs['data'].reshape(1,3, nh, nw)

次のコードスニペットは、画像をロードして予測結果を取得するためのものです。 out [&#39;prob&#39;]の出力は、各ラベルの確率です。使用される synset.txtは、現在GitHubにあるファイルでもあります。このファイルの内容はすべてです。各ラベルに対応する名前。最終的な出力は、確率が最も高いラベルに対応する確率と、このラベルに対応する名前です。

 im =get_img(image_path, nh, nw)
 net.blobs['data'].data[...]= transformer.preprocess('data', im)
 out = net.forward()
 prob = out['prob']
 prob = np.squeeze(prob)
 idx = np.argsort(-prob)
 label = idx[0]
 label_names = np.loadtxt('synset.txt', str, delimiter='\t')print('%.5f - %s'%(prob[label], label_names[label]))

出力は次のとおりです。

0.25784- ' n02123159 tiger cat'

参考文献#

  1. http://caffe.berkeleyvision.org/installation.html
  2. https://blog.csdn.net/qq_25737169/article/details/77773884
  3. https://github.com/shicai/MobileNet-Caffe

Recommended Posts

UbuntuにCaffeのCPUバージョンをインストールします
ubuntu16.04 caffecpuバージョンをインストールします
Ubuntuの下に古いバージョンのseuratをインストールします
UbuntuにTensorFlow(python2.7バージョン)をインストールします
Centosは最新バージョンのcmakeをインストールします
Ubuntu16.04にフラットテーマをインストールします
UbuntuにNeoVimをインストールする:最も簡単な方法
Thunderbirdの最新バージョンをインストールし、ubuntuでプラグインを交換します
ubuntu18にvscodeをインストールします
Ubuntu18.04にnvtopをインストールします
Ubuntu18.04にpostgresql-10をインストールします
Ubuntuにdockerをインストールする
Ubuntu18.04にVMwareToolsをインストールする問題を解決します
Ubuntu14.04にCaffeをインストールします
ubuntu18.04にDockerをインストールします
Ubuntu16にnodejs10をインストールします
Ubuntu14.04にmysqlをインストールします
UbuntuにDjangoをインストールします
Ubuntu16.04にPytorch + CUDAをインストールします
Ubuntu14.04にPython3をインストールします
Ubuntu18にrJavaをインストールします
UbuntuにJDK10 +をインストールする
Ubuntu16.04にPython3をインストールします
ubuntuにgooderpをインストールするための究極のガイド
Ubuntu16.04.2にKDEをインストールします
Ubuntu18にDockerをインストールする
Ubuntu16.04にMongodbをインストールする最新の方法
UbuntuにPython3.7をインストールする
Ubuntuにflashplayerをインストールする
Ubuntu19にTheanoをインストールする問題を解決します
Ubuntu18.04に最新のMySQLをインストールする方法
apt-get install of ubuntu(transfer)のデフォルトのインストールパス
EthereumクライアントMistをWindowsとubuntuにインストールします
Dockerプラクティス(1):Ubuntu16.04にDockerをインストールします
仮想マシンにubuntuをインストールします
Ubuntu Server14.04にOpenSSL1.0.2をインストールします
Ubuntu16.04にQQロボットをインストールします
Ubuntuは最新のPython3をインストールします。
Ubuntu 18.04LTSにPython3.7をインストールします
UbuntuにAndroidStudioをインストールする
ubuntuにスクレイプフレームワークをインストールする
MysqlをUbuntuにオフラインでインストールする
UbuntuにOracleJava8をインストールする
Ubuntu16.04にOdoo11スタックをインストールします
Ubuntu16にGoロケールをインストールします
Ubuntu16.04に一般的なソフトウェアをインストールする
ポータブルでないQQをubuntuにインストールする
オフラインでUbuntu18.04にDockerをインストールする
[共有] Ubuntu16.04へのVitis2019.2のインストール失敗の問題を解決します
RabbitMQ-3.8.5の最新バージョンをインストールして構成します(ビデオ付き)
新しいバージョンのubuntuをアップグレードした後、画面が空白になる
Ubuntu20.04にRubyをインストールする方法
Ubuntu20.04にMemcachedをインストールする方法
Ubuntu20.04にJavaをインストールする方法
Ubuntu20.04にMySQLをインストールする方法
Ubuntu20.04にVirtualBoxをインストールする方法
Ubuntu20.04にElasticsearchをインストールする方法
UbuntuにProtobuf3をインストールするための詳細なチュートリアル
Ubuntu20.04にNginxをインストールする方法
Ubuntu20.04にApacheをインストールする方法
Ubuntu20.04にGitをインストールする方法