TensorFlowとCaffeを比較

    「TensorFlow」と「Caffe」の比較

    「TensorFlow」と「​Caffe」は、人気がある機械学習ライブラリです。

    「TensorFlow」とは

    概要

    TensorFlowは、Googleがオープンソースとして提供している機械学習ライブラリです。

    多くの研究者も利用している注目のライブラリです。

    メリット

    Googleがサービス開発に利用しているライブラリということで、圧倒的な利用者数を集めています。利用者数が多く、コミュニティが大きいため、情報を入手しやすいメリットがあります。

    主なメリット
    ・ニューラルネットだけでなく、機械学習や数値計算すべてをカバー
    ・低レベルの処理も可能
    ・GPUの利用が簡単
    ・複数デバイスによる並列処理が容易(大規模処理を高速に実行しやすい)
    ・高レベルAPIではかなり直感的にニューラルネットワークを構築できる

    デメリット

    ・すべての計算を計算グラフで表現するため、初心者にとっては難易度が高い
    ・計算グラフ構築後の変更が不可能

    「Caffe」とは

    概要

    Caffeは、代表的なPython向けの機械学習ライブラリです。

    Berkeley Vision and Learning Center(BVLC)を中心とした開発コミュニティがGitHub上で開発/改良を重ねています。

    メリット

    ・高速動作(C++実装、GPU対応)
    ・「フィードフォワード(順伝播型)ネットワーク」と「画像認識処理」に適している
    ・既存ネットワークの微調整に適している
    ・ドキュメント/サンプルコードが充実(初心者向け)
    ・学習済みモデル配布フレームワーク「Caffe Model Zoo」を利用できる
    ・Pythonインターフェースが非常に有益

    デメリット

    ・環境セットアップに手間がかかる
    ・再帰型ニューラルネットワークには適していない
    ・大規模ネットワークには適用しにくい
    ・新しいGPU層にC++/CUDAを記述する必要がある
    ・ユーザー減少の可能性がある

    処理スピード比較

    Caffe

    Caffeは、TensorFlowと同等の処理スピードが出るというベンチマーク結果が出ています。

    参考元サイト

    「TensorFlow」基本情報

    ■概要

    TensorFlow(テンソルフロー)とは、Googleのディープラーニングライブラリです。データフローグラフを使用したライブラリで、複雑なネットワークを分かりやすく記述できます。

    ■「ディープラーニング」とは

    機械学習とは、人間が学習するのと同じように機械が学習することを目指した人工知能研究の1分野です。ディープラーニングは機械学習の中の1つです。

    ディープラーニングとは、ニューロン(神経細胞)が信号の受け渡しをすることにより情報処理をしているという脳の仕組みを、ニューラルネットワークとしてコンピュータ内に実現し、それを多層化したものです。

    ニューラルネットワークは、入力層と出力層の間にある中間層(情報識別層)が多いほど、より正確な認識ができるようになります。

    ディープラーニングは、音声認識、自然言語処理(翻訳)、Google検索エンジン(画像検索/ウェブ検索最適化)、Googleフォト(顔認識/被写体認識)、Gmail(メール分別)、Inbox(メール自動返信文作成)、YouTube、広告事業など、Googleのほとんどのサービスを支えるコア技術となっています。

    →OSS×CloudNews →ざっくりわかる「機械学習」---第2回 「機械学習」「ディープラーニング」の違い

    ■基本説明

    「TensorFlow」の読み方は、日本では「テンソルフロー」が多く、英語圏では「テンソーフロー」が多いようです。

    「Tensor(テンソル)」とは、線形の量を表す概念で、多次元データ構造を表すものです。「TensorFlow」は、多次元データ構造を流れるように処理し、ディープラーニングを行います。

    TensorFlowの特徴として、データフローグラフによる柔軟性、ローレベルオペレータも手書きできる汎用性、高いパフォーマンス、スケーラビリティ、研究レベルから実プロダクトまで扱える効率性などがあります。

    利用方法例として、画像に写っているものを認識して文章化するアルゴリズム、各種数値計算、自然言語処理(翻訳)、など多岐におよび、新しい応用分野が広がり続けています。

    コア部分はC++で実装されていて、ユーザ向けにPythonのインターフェースが用意されています。

    ■経緯

    2011年、Googleは「DistBelief」というディープラーニング基盤を開発し、音声認識/イメージ検索などのサービスの性能向上に大きく貢献しました。しかし、各プロダクトとの結合が強く汎用性が低かったため、公開できませんでした。

    そのような問題を解決し、依存性を排除し、汎用性を高め、性能を高めて開発されたのが「TensorFlow」です。「TensorFlow」の性能は、「DistBelief」の2倍とされています。

    2015年11月、「TensorFlow」がオープンソース公開されました。

    ■ユースケース

    利用方法例として、次のようなものが想定されています。
    ・顔認識
    ・音声認識
    ・被写体認識
    ・画像検索
    ・画像を認識して文章化するアルゴリズム
    ・各種数値計算
    ・自然言語処理(翻訳)
    ・リアルタイム翻訳
    ・Web検索最適化
    ・メール分別
    ・メール自動返信文作成
    ・自動運転車 など

    主な特徴

    ■データフローグラフ

    TensorFlowの処理は、データフローグラフの「構築」+「実行」の2フェーズで行われます。

    データの流れ(フロー)を定義する「グラフ」を基本としてデータの処理を行います。

    ■「Deep Flexibility」(深い柔軟性)

    柔軟にニューラルネットワークを構築できます。C++で低レベル処理を書くこともできます。

    ■「True Portability」(真の携帯性)

    TensorFlowではCPU用/GPU用でコードを分ける必要はありません。移植性にも優れています。

    ■「Connect Research and Production」(研究と製品の接続)

    Googleでは、研究者もエンジニアも同じくTensorFlowを用いているようです。このような使い方をすることで、プロダクト転用が容易になります。

    ■スケーラビリティ

    モバイル端末、PC、ハイエンドサーバなど各マシンのリソースに応じてスケールします。

    ■チュートリアル

    各種チュートリアル用データセットが用意されていて、すぐに試せます。
    ・MNIST:手書きの数字を判別
    ・CNN:画像認識
    ・Word2Vec:各単語の関係を学習
    ・RNN:文章から次の単語予測
    ・Seq2Seq Model:フランス語を英語に翻訳 など

    ■簡易/柔軟な記述方式

    シンプルかつ分かりやすいコーディングで記述できます。自動微分の機能が内蔵されており、計算処理と目的関数を定義するだけで学習できます。

    ■Webインターフェイス「TensorBoard」

    Webインターフェイスで、学習状況確認、ニューラルネットワーク可視化ができます。コードだけでは分かりづらいモデルをグラフ化できます。

    補足情報

    ■同様製品

    同様な機能を提供する製品として、次のようなものがあります。

    商用製品:IBM「Watson」など。

    オープンソース製品:「​Chainer」「Caffe」「Microsoft Cognitive Toolkit」など。

    ■オフィシャルサイト

    オフィシャルサイト

    →TensorFlow

    ライセンス情報

    TensorFlowのライセンスは「Apache License 2.0」です。

    詳細について、こちらを参照ください。
    →GitHub →tensorflow →LICENSE

    ダウンロード

    →TensorFlow →Install TensorFlow

    ※定期的にメンテナンスを実施しておりますが、一部情報が古い場合がございます。ご了承ください。


    「Caffe」基本情報

    ■概要

    Caffe(カフェ)とは、オープンソースのディープラーニングライブラリです。画像認識に特化しており、高速処理が可能です。

    ■基本説明

    C++で実装されています。C++/Python/MATLABで使用できます。

    「高速動作」「GPU対応」「洗練されたアーキテクチャ/ソースコード」「開発コミュニティが活発」などの特徴があります。

    ■経緯

    Yangqing Jia氏が、カリフォルニア大学バークレー校博士課程在籍中に開発がスタートしました。

    その後、カリフォルニア大学バークレー校の「コンピュータビジョンおよび機械学習に関する研究センター(Berkeley Vision and Learning Center)」が中心となって開発しています。

    ヤフージャパンは、2014年6月から同センターのスポンサーとなり、Caffe開発の支援を行っています。

    ■オフィシャルサイト情報

    オフィシャルサイト

    →Caffe(Caffe | Deep Learning Framework)

    ライセンス情報

    Caffeのライセンスは「BSDライセンス」です。

    詳細について、こちらを参照ください。
    →GitHub →BVLC/caffe →caffe/LICENSE

    ダウンロード

    →Caffe →Installation

    ■同様製品

    同様な機能を提供する製品として、次のようなものがあります。

    オープンソース製品:「TensorFlow」「​Chainer」「Keras」など。

    「Caffe」の主な特徴

    ■畳み込みニューラルネットワーク「CNN」

    Caffeは、畳み込みニューラルネットワーク「CNN(Convolution Neural Network)」を利用しています。

    CNNとは、ディープラーニング技術の1つです。全結合していない順伝播型ニューラルネットワークで、畳み込み層を通常の活性化関数でつないでいく手法です。

    全結合しているニューラルネットワークに比べて高速に学習を行えるメリットがあります。

    ■GPU対応

    CaffeはGPUを利用できます。GPUを利用して高速で動作させるためにNVIDIAのCUDA(Compute Unified Device Architecture)が必要です。

    CUDAとは、NVIDIAが提供する並列コンピューティングアーキテクチャです。GPU向けC言語統合開発環境で、コンパイラ/ライブラリなどで構成されています。CUDAは、NVIDIA製ハードウェア(GPU)性能を最大限引き出せるように設計されており、計算処理能力を劇的に向上できます。

    CaffeはCPUのみでの使用も可能です。

    ■高速処理

    Python用数値計算ライブラリ「Theano」と「Caffe」のスピード比較において、「Theano」で約56分かかる処理を「Caffe」では約4分で完了できたというテスト結果も報告されています。

    ■高精度画像識別

    画像識別に関する論文において、高精度を出した論文にCaffeを利用した研究が数多く報告されています。

    ■学習済モデル配布フレームワーク「Caffe Model Zoo」

    Caffeには、学習済モデル配布フレームワーク「Caffe Model Zoo」があります。ネットワーク定義を1から作成しなくても、リファレンスモデルを使用して処理を実行できます。

    大規模画像認識コンテスト「ILSVRC 2012」でトップとなった、畳込みニューラルネットワーク画像分類モデルをすぐに利用できます。

    →Caffe →Caffe Model Zoo

    ■ドキュメントが充実

    Caffeを紹介する記事は多く、公式ドキュメントも充実しています。

    「Caffe」の主な機能

    ■Caffeがサポートしている主な機能

    ・CNNを利用した画像の多クラス分類
    ・CNNによる特徴ベクトルの抽出
    ・CNNの転移学習
    ・Stacked Auto Encoder など

    ■言語インターフェース

    Caffeは、コア言語として「C++」で実装されています。

    インターフェースとして「C++」「Python」「MATLAB」などを利用できます。

    ■数値解析ソフトウェア「MATLAB」

    「MATLAB」とは、数値解析ソフトウェア(プログラミング言語)です。

    「行列計算機能」「関数とデータの可視化機能」「アルゴリズム開発機能」「グラフィカルインターフェース」「他言語(C/C++/Java/Python)とのインターフェース」などの機能を有しています。

    「Caffe」の基本的な使い方

    ■①ネットワーク定義

    設定ファイル(lenet_train_test.prototxt)に、処理順番(Convolution層/Pooling層など)とパラメータ設定を定義します。

    JSONのような形式で、レイヤーごとに分けて記載します。

    ■②solver定義

    重みの学習方法を設定するための「solver定義ファイル」を作成します。

    ■③コマンドで学習を開始

    コマンドで学習を開始します。