Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Installing Caffe on Ubuntu 16.04 and above (CPU ONLY, WITHOUT CUDA OR GPU SUPPORT)

This is a guide on how to install Caffe for Ubuntu 16.04 and above, without GPU support (No CUDA required).

Prerequisites:

OpenCV

sudo apt-get install libopencv-dev python-opencv

OpenBLAS OR Atlas

OpenBLAS

sudo apt-get install libopenblas-dev

Atlas

sudo apt-get install libatlas-base-dev

Boost

sudo apt-get install libboost-all-dev

Protobuf (USING PIP)

sudo pip install protobuf

If you don't have pip yet, install it using the following commands:
sudo apt-get install python-pip python-dev build-essential

sudo pip install --upgrade pip

General Dependencies

sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler 

sudo apt-get install the python-dev 

sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev 

Getting Caffe

git clone https://github.com/BVLC/caffe

You will now find the caffe folder in your Home directory.

We have to make a copy of Makefile.config.example, which we generally name as, Makefile.config to which we can make changes based on our system settings.

cd caffe
cp Makefile.config.example Makefile.config

Making Changes In Makefile.config

Make sure you are still in the caffe directory, then use this command to open Makefile.config

gedit Makefile.config 
Note- The following line numbers may vary.
  • On line 8, uncomment CPU_ONLY := 1

  • On Line 21, uncomment OPENCV_VERSION := 3 if you're using OpenCV 3 or above. If you aren't sure, try this in another terminal

$ python
>>> import cv2
>>> cv2.__version__
'3.0.0'
  • On line 25, uncomment CUSTOM_CXX := g++

  • On line 50, set BLAS := open if you've installed OpenBLAS, or let it be the default BLAS := atlas if you've installed Atlas.

  • On line 94, change

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include

to

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include  /usr/include/hdf5/serial 
  • On line 95, change
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib

to

LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib  /usr/lib/x86_64-linux-gnu/hdf5/serial

This should resolve hdf5 errors when running make

Now within the caffe directory, run the following one after the other

make all
make test
make runtest

These should run smoothly without any errors. If you do however, encounter errors, refer the ones at the end of this post or elsewhere to resolve them.

Make sure to REMOVE BUILD every time you resolve an error, and run those three commands again to rebuild.

This is VERY IMPORTANT, otherwise the errors will persist.

To remove build,

rm -rf ./build*/

Once all three run without errors, while in the caffe directory, type

make pycaffe

This will build a python wrapper. You will also find a python folder within the caffe folder now.

To use caffe within python, export its path as

export PYTHONPATH=~/Home/_username_/caffe/python:$PYTHONPATH

Replace _username_ with the your username in the system.

Once you've done this, run the python terminal and import caffe

>>> import caffe
>>>

This, should work. If it throws a 'module not found' error, check if it has been appended in pythonpath properly by typing

>>> import sys
>>> sys.path
['', '/home/nikita/caffe/python', '/home/nikita', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib
/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/home/nikita/.local/lib/python2.7/site-
packages']

If you see that the /home/_username_/caffe/python path, isn't there, then do

>>> sys.path.append('/Home/_username_/caffe/python')

Alternatively, just use

caffe/python

depending on whether your export is already under home/username

That's all there is to installing caffe.

Common Errors

OpenCV Errors

.
.
/usr/bin/ld: cannot find -lopencv_imgcodecs
/usr/bin/ld: cannot find -lopencv_videoio
collect2: error: ld returned 1 exit status

This usually happens when you've either forgotten to uncomment line 21 when you have OpenCV 3, or if you haven't checked the version properly. If you're using OpenCV < 3, this shouldn't be an error at all. If it still shows on OpenCV >= 3.0, then in the Makefile ( NOT Makefile.config ) on line 181 (in my case), add libraries such that it looks like

LIBRARIES += glog gflags protobuf leveldb snappy \
  lmdb boost_system hdf5_hl hdf5 \
  opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs

Also, make sure to rebuild!

OpenBLAS Errors

/usr/bin/ld: cannot find -lcblas
collect2: ld returned 1 exit status
make: *** [.build_release/lib/libcaffe.so] Error 1

This happens if you've not installed OpenBLAS properly, or if you've set
BLAS := open when you have only Atlas installed. It may sound silly, but 'to err is human'.

If it persists after rebuild, install Atlas instead and change to BLAS := atlas

@NguyenDangBinh
Copy link

NguyenDangBinh commented Apr 1, 2019

dear all.
I had issue like that:
(OpenSSL) binh@binh:~/3Dpose_ssl/caffe-3dssl$ make all
CXX src/caffe/solver.cpp
In file included from ./include/caffe/util/device_alternate.hpp:40:0,
from ./include/caffe/common.hpp:19,
from ./include/caffe/blob.hpp:8,
from ./include/caffe/net.hpp:10,
from ./include/caffe/solver.hpp:7,
from src/caffe/solver.cpp:6:
./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’:
./include/caffe/util/cudnn.hpp:21:10: warning: enumeration value ‘CUDNN_STATUS_RUNTIME_PREREQUISITE_MISSING’ not handled in switch [-Wswitch]
switch (status) {
^
./include/caffe/util/cudnn.hpp: In function ‘void caffe::cudnn::setConvolutionDesc(cudnnConvolutionStruct**, cudnnTensorDescriptor_t, cudnnFilterDescriptor_t, int, int, int, int)’:
./include/caffe/util/cudnn.hpp:113:70: error: too few arguments to function ‘cudnnStatus_t cudnnSetConvolution2dDescriptor(cudnnConvolutionDescriptor_t, int, int, int, int, int, int, cudnnConvolutionMode_t, cudnnDataType_t)’
pad_h, pad_w, stride_h, stride_w, 1, 1, CUDNN_CROSS_CORRELATION));
^
./include/caffe/util/cudnn.hpp:15:28: note: in definition of macro ‘CUDNN_CHECK’
cudnnStatus_t status = condition;
^
In file included from ./include/caffe/util/cudnn.hpp:5:0,
from ./include/caffe/util/device_alternate.hpp:40,
from ./include/caffe/common.hpp:19,
from ./include/caffe/blob.hpp:8,
from ./include/caffe/net.hpp:10,
from ./include/caffe/solver.hpp:7,
from src/caffe/solver.cpp:6:
/home/binh/anaconda2/envs/OpenSSL/include/cudnn.h:500:27: note: declared here
cudnnStatus_t CUDNNWINAPI cudnnSetConvolution2dDescriptor( cudnnConvolutionDescriptor_t convDesc,
^
Makefile:575: recipe for target '.build_release/src/caffe/solver.o' failed
make: *** [.build_release/src/caffe/solver.o] Error 1

How to solve? Thank you so much.

@NguyenDangBinh
Copy link

NguyenDangBinh commented Apr 1, 2019

dear all.
I had issue like that:
(OpenSSL) binh@binh:~/3Dpose_ssl/caffe-3dssl$ make all
CXX src/caffe/solver.cpp
In file included from ./include/caffe/util/device_alternate.hpp:40:0,
from ./include/caffe/common.hpp:19,
from ./include/caffe/blob.hpp:8,
from ./include/caffe/net.hpp:10,
from ./include/caffe/solver.hpp:7,
from src/caffe/solver.cpp:6:
./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’:
./include/caffe/util/cudnn.hpp:21:10: warning: enumeration value ‘CUDNN_STATUS_RUNTIME_PREREQUISITE_MISSING’ not handled in switch [-Wswitch]
switch (status) {
^
./include/caffe/util/cudnn.hpp: In function ‘void caffe::cudnn::setConvolutionDesc(cudnnConvolutionStruct**, cudnnTensorDescriptor_t, cudnnFilterDescriptor_t, int, int, int, int)’:
./include/caffe/util/cudnn.hpp:113:70: error: too few arguments to function ‘cudnnStatus_t cudnnSetConvolution2dDescriptor(cudnnConvolutionDescriptor_t, int, int, int, int, int, int, cudnnConvolutionMode_t, cudnnDataType_t)’
pad_h, pad_w, stride_h, stride_w, 1, 1, CUDNN_CROSS_CORRELATION));
^
./include/caffe/util/cudnn.hpp:15:28: note: in definition of macro ‘CUDNN_CHECK’
cudnnStatus_t status = condition;
^
In file included from ./include/caffe/util/cudnn.hpp:5:0,
from ./include/caffe/util/device_alternate.hpp:40,
from ./include/caffe/common.hpp:19,
from ./include/caffe/blob.hpp:8,
from ./include/caffe/net.hpp:10,
from ./include/caffe/solver.hpp:7,
from src/caffe/solver.cpp:6:
/home/binh/anaconda2/envs/OpenSSL/include/cudnn.h:500:27: note: declared here
cudnnStatus_t CUDNNWINAPI cudnnSetConvolution2dDescriptor( cudnnConvolutionDescriptor_t convDesc,
^
Makefile:575: recipe for target '.build_release/src/caffe/solver.o' failed
make: *** [.build_release/src/caffe/solver.o] Error 1

How to solve? Thank you so much.

@Kannank97
Copy link

Kannank97 commented Apr 26, 2019

Hey, Thank you so much. This saved me a lot of time for my work

@ilyes-ouled-omar
Copy link

ilyes-ouled-omar commented Apr 30, 2019

Thank you!!!
It was really helpful :)

@ashikrai
Copy link

ashikrai commented Aug 9, 2019

I have followed all the given steps but im getting error on
make all

Error is given below, can anyone help me:

CXX .build_release/src/caffe/proto/caffe.pb.cc
In file included from .build_release/src/caffe/proto/caffe.pb.cc:4:0:
.build_release/src/caffe/proto/caffe.pb.h:12:2: error: #error This file was generated by a newer version of protoc which is
#error This file was generated by a newer version of protoc which is
^
.build_release/src/caffe/proto/caffe.pb.h:13:2: error: #error incompatible with your Protocol Buffer headers. Please update
#error incompatible with your Protocol Buffer headers. Please update
^
.build_release/src/caffe/proto/caffe.pb.h:14:2: error: #error your headers.
#error your headers.
^
In file included from .build_release/src/caffe/proto/caffe.pb.cc:4:0:
.build_release/src/caffe/proto/caffe.pb.h:23:35: fatal error: google/protobuf/arena.h: No such file or directory
compilation terminated.
Makefile:598: recipe for target '.build_release/src/caffe/proto/caffe.pb.o' failed
make: *** [.build_release/src/caffe/proto/caffe.pb.o] Error 1

@roni580
Copy link

roni580 commented Oct 9, 2019

hi, I am successfully done with all the commands listed, but in the last while checking using "import caffe" it says Import error: no module named caffe.

can you help me in encountering this error.
import sys
caffe_root = '/home/nvidia/caffe/' # this file should be run from {caffe_root}/examples (otherwise change this line)
sys.path.insert(0, caffe_root + 'python')

import caffe

@Zrufy
Copy link

Zrufy commented Oct 24, 2019

unsupported GNU version! gcc versions later than 8 are not supported!

@ziggyjosh16
Copy link

ziggyjosh16 commented Dec 6, 2019

I'm wondering if it is possible to install caffe inside a conda environment

@roni580
Copy link

roni580 commented Dec 6, 2019

@roni580
Copy link

roni580 commented Dec 6, 2019

@Hassan313
Copy link

Hassan313 commented Sep 5, 2020

Thank you very much. Really appreciate your work here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment