Caffe(カフェ)は、カリフォルニア大学バークレー校のBerkeley Vision and Learning Center(BVLC)が公開した画像認識向けの深層学習フレームワークです。中心となったのは当時バークレー校の博士課程にいたYangqing Jia氏で、名称は「Convolutional Architecture for Fast Feature Embedding」の頭字語、2014年の論文(arXiv:1408.5093)で発表されました。日本語の検索では喫茶店やイタリア語の「caffè(コーヒー)」と混ざりますが、ここで扱うのは後者ではなくソフトウェアのCaffeです。結論から言えば、2026年7月時点のCaffeは新規プロジェクトで選ぶ対象ではありません。ただし過去に学習された.caffemodelは今も現場に大量に残っており、それをどう動かすかは実務の問題として残り続けています。この記事は「これから使うべきか」と「既にある資産をどう扱うか」の両方に、一次情報で答えます。
まとめ
CaffeはCNNによる画像分類を高速に回すために設計されたC++/CUDA製のフレームワークで、ネットワークをコードではなく.prototxtというテキストで宣言的に定義する点に特徴があります。ただし正式リリースはバージョン1.0(2017年4月18日)が最後で、以後9年にわたり新しいリリースはありません。GitHubリポジトリ自体はアーカイブされていないものの、デフォルトブランチへの最後の更新は2024年7月31日、未クローズのissueとプルリクエストは合わせて1,211件積み上がったままです(いずれも2026年7月12日時点のGitHub API実測値)。後継として作られたCaffe2も2018年5月にPyTorchへ統合され、独立したプロダクトとしては存在しません。
したがって新規に画像認識モデルを作るなら、選択肢はPyTorchかTensorFlowです。一方、既存の.caffemodelを推論だけで使いたい場合、Caffe本体をビルドする必要はありません。OpenCVのdnnモジュール(4系に限る)で読み込むか、ONNXへ変換してPyTorchやONNX Runtimeに載せ替えられます。
Caffeの設計思想と2026年時点の開発状況
prototxtによる宣言的なネットワーク定義
Caffe最大の特徴は、ニューラルネットワークの構造をPythonのコードで組み立てるのではなく、.prototxtというProtocol Buffers形式のテキストファイルで宣言する点にあります。学習済みの重みは.caffemodelという別のバイナリファイルに保存され、「構造」と「重み」が完全に分離されます。この分離があるおかげで、モデルを配布するときは2つのファイルを渡すだけで済み、受け取った側はPythonの実行環境を用意しなくてもC++から読み込めます。後述するOpenCVでの読み込みが成立するのも、この素直なファイル構成のためです。
本体はC++とCUDAで書かれ、Python(pycaffe)とMATLABのバインディングを備えます。層(Layer)の種類はConvolution、Pooling、ReLU、SoftmaxといったCNNの構成要素に厚く、学習済みモデルを共有するModel Zooも当時は充実していました。GoogLeNetやVGG(ともに2014年発表)、SSD、顔検出で広く使われたResNet-10ベースのモデルなど、2014年から2017年頃の画像系モデルの多くはCaffe形式で最初に配布されています。今もチュートリアルで.caffemodelを見かけるのは、この時期の遺産です。
最終リリース1.0から9年の更新停止
Caffeの現状は、伝聞ではなくGitHubの公開データで確認できます。BVLC/caffeのReleases APIが返す最新の正式リリースは1.0(2017年4月18日公開)で、それ以降タグは打たれていません。リポジトリのメタ情報ではarchivedはfalse、つまり書き込み禁止のアーカイブ状態にはされていませんが、デフォルトブランチへの最終pushは2024年7月31日で止まり、未クローズのissueとプルリクエストは1,211件(open_issues_countの値。プルリクエストを含む)、スター数は34,574件です(2026年7月12日にAPIで取得)。
「アーカイブされていない=メンテナンスされている」ではない点に注意してください。比較のために現役フレームワークの更新間隔を並べると、差は明確です。
| フレームワーク | 最新リリース | 公開日 |
|---|---|---|
| Caffe (BVLC) | 1.0 | 2017-04-18 |
| PyTorch | v2.13.0 | 2026-07-08 |
| TensorFlow | v2.21.0 | 2026-03-06 |
| Keras | v3.15.0 | 2026-06-24 |
この9年の差が実務に効いてくるのは、セキュリティ修正ではなくビルドの通らなさです。GitHubリポジトリのインストールガイド(docs/installation.md、masterブランチ・2026年7月時点)が前提として挙げているのはCUDAの「library version 7+」とcuDNN v7であり、現行のCUDA 12系・cuDNN 9系ではAPIが変わっているためそのままコンパイルが通りません。ちなみに公式サイト側のHTML版インストール手順は「The current version is cuDNN v6」の記述で止まったままで、ドキュメントの更新すら追いついていないことがここからも分かります。依存するBoostやProtocol Buffersのバージョン、OpenCVのAPI変更も同様に衝突します。ネット上の「Caffeインストール手順」の多くが途中で止まるのは、手順が間違っているからではなく、周辺のライブラリが前に進んでしまったからです。
Caffe2のPyTorch統合と、その後の位置づけ
Caffeの後継としてFacebook(当時)が開発したCaffe2は、しばしばCaffeの最新版と誤解されますが、別系統のプロダクトであり、しかも既に独立して存在していません。2018年5月2日の公式アナウンス「Caffe2 and PyTorch join forces to create a Research + Production platform PyTorch 1.0」により、Caffe2のリポジトリはPyTorchのリポジトリへ統合されました。旧リポジトリのfacebookarchive/caffe2は現在アーカイブ済み(最終push 2023年2月7日)で、READMEはPyTorchへの案内に置き換えられています。
ここで誤解しやすいのは、統合されたからといってPyTorchがCaffeのモデルを読めるわけではない点です。PyTorchのリポジトリにはcaffe2ディレクトリの一部(coreやserializeなど)が残っていますが、Caffe2は独立した製品として提供されておらず、torchから.caffemodelを直接ロードする機能もありません。既存モデルを持ち込むには後述の変換が要ります。それでも「Caffe → Caffe2 → PyTorch」という流れは歴史として正しく、Caffe系列の後継を探しているなら答えはPyTorchです。PyTorchとは?特徴・できること・TensorFlowとの違いを解説で基本的な思想と使い方を確認しておくと、この後の移行手順が理解しやすくなります。
CaffeとTensorFlow・PyTorch・Kerasの違い
CaffeとTensorFlowの違い(設計思想・記述方法・出口)
CaffeとTensorFlowを並べて検討する人が最も多いのですが、両者は競合というより世代と守備範囲が違います。Caffeは画像分類のCNNに絞り、ネットワークを.prototxtで宣言し、C++で高速に回すことに設計を寄せています。層の種類も画像系に厚い代わりに、可変長系列やアテンション、カスタム損失といった構造は苦手で、新しい層を足すにはC++を書いてビルドし直す必要があります。
TensorFlowは対照的に、演算グラフを組む汎用の数値計算基盤として設計され、現在はKerasを標準の高水準APIとして統合しています。モデル定義はPythonのコードで、条件分岐やループを含む構造も自然に書けます。加えてTensorFlow LiteによるモバイルやマイコンへのデプロイやTensorFlow.jsによるブラウザ実行など、学習後の出口が広く整備されています。この点はCaffeにはありません。TensorFlowそのものの守備範囲はTensorFlowとは?できること・使い方・GPU対応を2026年最新で解説に整理してあります。
| 観点 | Caffe | TensorFlow | PyTorch |
|---|---|---|---|
| モデル定義 | prototxt(宣言) | Python(Keras API) | Python(nn.Module) |
| 主な用途 | 画像分類・検出 | 汎用 | 汎用 |
| 層の追加 | C++で実装・再ビルド | Pythonで実装 | Pythonで実装 |
| モデル形式 | .caffemodel | SavedModel / .keras | .pt / state_dict |
| 最新版 | 1.0 (2017) | 2.21.0 (2026-03) | 2.13.0 (2026-07) |
表の最終行が結論そのものです。設計思想の優劣を論じる前に、片方は9年間更新されていません。学習を伴う新規開発でCaffeを選ぶ理由は、2026年時点では見当たりません。
Kerasとの比較で噛み合わない前提
「CaffeとKerasの違い」もよく検索されますが、この2つは同じ層で比べるものではありません。Kerasは単体の実行エンジンではなく高水準API(現在のKeras 3はTensorFlow・PyTorch・JAXをバックエンドとして選べる)であり、Caffeはエンジンそのものです。比較が成立するのは記述方法の部分だけで、その差は行数に出ます。BVLC公式が配布するGoogLeNetのdeploy.prototxtは2,157行、層数の少ないCaffeNetでも213行あります。Kerasであれば、繰り返し現れるInceptionモジュールを関数にまとめてループで生成できるため、同じ構造を数十行から百行程度のPythonで表現できます。prototxtは繰り返しをすべて展開して書き下す必要があり、この差が行数に出ます。
新規開発でのフレームワーク選定基準
迷ったときの判断は単純です。学習を伴う新規開発ならPyTorchを第一候補にしてください。研究由来の実装やモデル配布がPyTorch中心に集まっており、学習コードの定型部分を削りたければPyTorch Lightningとは何か?概要と誕生の背景を解説で紹介している薄いラッパーを重ねられます。画像分類の実装例としてはPyTorchとEfficientNetV2を使用した画像分類モデルの概要と利点が、Caffe時代のCNNをそのまま置き換える現実的な出発点になります。
モバイル・組込み・ブラウザへの配布が最初から要件に入っているならTensorFlowを選ぶ価値があります。そして既存の.caffemodelを推論するだけなら、どちらのフレームワークも導入せず、次章の方法で済ませるのが最短です。
Caffeをビルドせずに.caffemodel資産を動かす2つの方法
現場でCaffeが問題になるのは、典型的には「前任者が残した.prototxtと.caffemodelが動かない」という形です。ここでCaffe本体のビルドに挑むのは遠回りで、推論だけなら2つの回避路があります。
OpenCV dnnモジュールでの推論(4系への固定が必須)
OpenCVのdnnモジュールはCaffeのモデルを直接読み込めます。cv2.dnn.readNetFromCaffe()に.prototxtと.caffemodelを渡すだけで、Caffeのインストールもコンパイルも不要です。
import cv2
import numpy as np
net = cv2.dnn.readNetFromCaffe("deploy.prototxt", "model.caffemodel")
img = cv2.imread("input.jpg")
blob = cv2.dnn.blobFromImage(img, scalefactor=1.0, size=(224, 224),
mean=(104.0, 117.0, 123.0), swapRB=False)
net.setInput(blob)
out = net.forward()
print(int(np.argmax(out)), float(out.max()))
ここに落とし穴があります。OpenCV 5.xではdnnのCaffeインポータが削除されました。5.xブランチのヘッダ(modules/dnn/include/opencv2/dnn/dnn.hpp)にreadNetFromCaffeの宣言は存在せず、実装ディレクトリmodules/dnn/src/caffeそのものが無くなっています(2026年7月12日にGitHubで確認。同ブランチにonnx・tensorflowのインポータは残存)。一方4.xブランチには両方が残っています。PyPIのopencv-pythonは2026年7月2日公開の5.0.0.93が最新のため、pip install opencv-pythonと素で打つとCaffeモデルを読めない環境が出来上がります。
pip install "opencv-python<5"
4系の最新は4.13.0.92(2026年2月5日公開)です。バージョンを上限で固定してから読み込んでください。なおmeanに渡す値は元のCaffeモデルが学習時に使った平均値と一致させる必要があり、ImageNet系の多くは上記の(104, 117, 123)です。ここを揃えないと、エラーは出ないまま推論結果だけが崩れます。またdnnのインポータが対応するのは標準的な層に限られ、独自実装の層を含むモデルはreadNetFromCaffeの時点で例外になります。その場合は次のONNX変換へ進んでください。
ONNX変換によるPyTorch・ONNX Runtimeへの移行
OpenCVでの読み込みは推論専用で、ファインチューニングはできません。モデルを今後も育てるつもりなら、ONNXという中間形式へ変換して現行フレームワークに移すのが本筋です。PyPIのcaffe2onnx(最新2.0.1)がCaffeの2ファイルをONNXへ変換します。
ただしこのツール自体が2021年11月の2.0.1で更新を止めており、setup.pyの依存がonnx==1.6.0(2019年)に固定されています。onnx 1.6.0はPython 3.8以降のホイールが存在しないため、pip install caffe2onnxと素直に打つと、onnxのビルドに失敗してインストール自体が通りません。依存を切り離して現行のonnxと組み合わせるのが回避策です。
pip install --no-deps caffe2onnx
pip install onnx protobuf
export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python
python -m caffe2onnx.convert \
--prototxt deploy.prototxt \
--caffemodel model.caffemodel \
--onnx model.onnx
環境変数の指定が要るのは、caffe2onnxに同梱されたProtocol Buffersの生成コードが古く、protobuf 4系以降のC++実装ではDescriptors cannot be created directlyで停止するためです。純Python実装に切り替えると読み込めます。ただしパース処理はC++実装より遅くなるため、大きな.caffemodelでは変換に時間がかかります。なおWindowsではexportが使えないので、PowerShellなら$env:PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION="python"、コマンドプロンプトならsetで指定してください。
この構成であれば、BVLC公式が配布するGoogLeNetの.caffemodel(51MB)はONNX(27MB)へ変換できます(Python 3.9・onnx 1.19.1・protobuf 6.33.6で確認。将来のバージョンの組み合わせでは同じとは限りません)。変換後はonnxruntimeで推論でき、PyTorch側へ取り込むこともできます。ONNXの立ち位置と変換後の扱いはONNXとは?モデル変換・推論の仕組みと使い方を初心者向けに解説にまとめています。
変換は万能ではありません。Caffeの独自レイヤーを含むモデル(SSDのPriorBox、独自のnormalize層など)は対応する演算子が無く、変換時にエラーで停止します。ここは割り切りが要ります。変換の手当てに半日以上かかるなら、そのモデルは捨てて学習し直すほうが早いのが実情です。2017年前後のCNNは現在の学習済みモデルに精度で劣ることが多く、データセットが手元にあるならPyTorchの現行モデルで転移学習したほうが良い数字が出ます。移行の労力を惜しんで古い精度に縛られるのは、順序が逆です。
それでもCaffeをビルドする場合の現実的な手順
論文の再現や、prototxtにしか存在しない実装を検証する目的で、どうしてもCaffe本体が要る場面はあります。その場合、ホスト環境に直接入れるのは避けてください。現行のCUDAやProtocol Buffersと衝突し、ホスト側の他の環境まで壊します。
Dockerによる旧ライブラリ構成の隔離
現実的なのは、当時のライブラリ構成をそのまま閉じ込めたDockerコンテナで隔離する方法です。例えばUbuntu 16.04系のイメージにCUDA 8とcuDNN 7を入れ、その中でソースからビルドします。cuDNNはmasterブランチがv7まで対応し、1.0タグの時点ではv6世代が前提でした(公式ガイドは「older versions are supported in older Caffe」とも書いています)。どちらにせよ、この世代に収まる組み合わせを選ぶのが条件になります。
CPU推論で足りるなら、Makefile.configでCPU_ONLY := 1を有効にしてください。CUDA関連の依存が丸ごと外れ、ビルドの成功率は大きく上がります。
pycaffeとPythonバージョンの制約
Pythonバインディング(pycaffe)について、公式のインストールガイドが要件として挙げているのはPython 2.7またはPython 3.3+、numpy (>= 1.7)、boost提供のboost.pythonです。この「3.3+」は当時の表記であり、現行のPython 3.12・3.13ではboost.pythonやProtocol Buffersとの非互換でビルドは通りません。コンテナ内のPythonを新しくしないことが、そのまま成功条件になります。
よくある質問
Caffeは今でも使えますか?
学習済みモデルの推論であれば、OpenCV 4系のdnnモジュール経由で問題なく動きます。一方、Caffe本体をソースからビルドして新しくモデルを学習する用途は推奨しません。最終リリースが2017年4月の1.0で止まっており、現行のCUDA・cuDNN・Protocol Buffersとの組み合わせでビルドが通らないためです。
CaffeとTensorFlowはどちらを選ぶべきですか?
Caffeを選ぶ理由は、既存のprototxt資産をそのまま検証したい場合に限られます。これから学習を行うなら、第一候補はPyTorchです。モバイル・組込み・ブラウザへの配布が要件に入るならTensorFlowを選んでください。TensorFlowは2026年3月にv2.21.0がリリースされ、Keras 3を標準APIとして更新が続いています。
深層学習フレームワークにはどんな種類がありますか?
現在も更新が続く主要な選択肢はPyTorch(v2.13.0・2026年7月)、TensorFlow(v2.21.0・2026年3月)、そして両者やJAXをバックエンドに選べる高水準APIのKeras(v3.15.0・2026年6月)です。CaffeやChainer、Theanoは開発が止まっており、新規採用の候補には入りません。研究由来の実装が集まるPyTorchを起点に、配布先の要件でTensorFlowを検討するのが一般的な選び方です。
CaffeはPythonから使えますか?
pycaffeというPythonバインディングが同梱されており、公式が挙げる要件はPython 2.7または3.3+です。現行のPython 3.12・3.13ではビルドできません。Pythonから既存のCaffeモデルを扱いたいだけなら、pycaffeではなくcv2.dnn.readNetFromCaffe()を使うのが確実です。
Caffeは画像認識以外にも使えますか?
CNNによる画像分類・物体検出が設計の中心で、層の実装も画像系に偏っています。系列データや自然言語処理は、RNN層の実装が限定的なうえ拡張にC++の再ビルドが必要になるため現実的ではありません。この用途は最初からPyTorchかTensorFlowを選んでください。
「caffe」と「cafe」は何が違うのですか?
本記事で扱うソフトウェアのCaffeは「Convolutional Architecture for Fast Feature Embedding」の略称で、開発元のBVLCがコーヒーを意味するイタリア語「caffè」にかけて名付けたものです。飲食店の「cafe(カフェ)」はフランス語由来の一般名詞で、綴りのfが1つです。イタリア語では「caffè」とfを2つ重ね、末尾にアクセント記号が付きます。