Caffe - yscope75/Deep-LearningKLTN GitHub Wiki

I. Giới thiệu:

###1. Caffe là gì Caffe framework được phát triển bởi Berkeley Vision and Learning Center ( BVLC ) và các động góp từ cộng đồng, được thiết kế để giúp các nhà nghiên cứu khởi tạo và nghiên cứu các Convulutional neural network (CNNs) và các Deep neural networks khác ( DNNs ) một cách dễ dàng, Caffe framework cung cấp các mô hình state-of-the-art cho việc triển khai deep learning trong môi trường nghiên cứu và trong công nghiệp ###2. Tại sao phải sử dụng caffe

###3. Kiến trúc các lớp của caffe framework

  • Blob:

    Blob là một wrapper các dữ liệu được truyền và xử lý trong caffe, và thực hiện "các tác vụ bên dưới" ( under the hood ) cung cấp khả năng đồng bộ hóa giữa CPU và GPU, Blob là một mảng N chiều được lưu dạng C-contiguous ( một block vùng nhớ lớn được cấp phát). caffe lưu trữ và giao tiếp dữ liệu sử dụng blob, blob cung sữ dụng unified memory ( unified memory tạo một vùng chứa dữ liệu được chia sẽ giữa CPU và GPU, nối cầu giữa CPU và GPU) interface để chưa dữ liệu. Dữ liệu là các tham số của mô hình, các batch hình ảnh (1), ....

Trong việc biểu diễn lưu trữ dữ liệu trong xử lý các batch hình ảnh, blob là N x số kênh K x Chiều cao H x Chiều rộng W. Do vậy nếu xet một blob 4 chiều, giá trị tại chỉ số (n, k, h, w) về mặt vật lý được xác định chỉ số ((n * K + k) * H + h) * W + w. Trong đó N là kích thước của batch data, k là số chiều yếu tố, vd đói với ảnh màu RGB thì K là 3. Chiều của các blob lưu trữ các parameter của các mô hình phụ thuộc vào loại và thiết lập của các lớp ( layer ), Ví dụ một lớp convolution với 6 filters, mỗi filter là một ma trận 5x5 và có 3 input thì blob là 6 x 3 x 5 x 5.

  • Layer

Lớp là thành phần cốt lõi của mô hình mạng trong caffe, và cũng là đơn vị tính toán cơ sở. Có rất nhiều loại lớp được xây dựng sẵn trong caffe để xây dựng nên mạng trong nghiên cứu deep learning như: convolution filter, pool, take inner product, áp dụng các phi tuyến như rectified-linear và hàm sigmoid, và tính toán các losses (2) như soft max, hinge (3). ( image about layer from caffe hompage ) Mỗi lóp thực hiện 3 tính toán quan trọng là: setup, foward và backward

- Setup: khởi tạo lớp và các kết nối của lớp
- forward: Nhận dữ liệu từ bên dưới tính toán kết quả đầu ra và gửi lên trên.
- backward: Nhận các gradient ở lớp output, tính gradient ở lớp input và gửi xuống bên dưới.
  • Net
  • Solver

II. Cài đặt:

Các thiết lập dưới đây dành cho ubuntu 15.10

###1. Cài đặt các gói thự viện cần thiết:

General dependencies

 sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf- compiler
 sudo apt-get install --no-install-recommends libboost-all-dev

Cài đặt CUDA Tool

Tải file cài đặt cuda 7.5 dạng .deb từ trang download cuda. Dùng các lệnh sau để cài đặt:

sudo dpkg -i cuda-repo-ubuntu1504-7-5-local_7.5-18_amd64.deb 
sudo apt-get update
sudo apt-get install cuda

Cài đặt ATLAS bằng lệnh

  sudo apt-get install libatlas-base-dev

Cài đặt Python ( option nếu sử dụng wrapper python cua caffe )

  sudo apt-get install the python-dev

###2. Cài đặt caffe: *Tải caffe: cd tới thư mục lưu và tải về bằng lệnh:

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

*Biên dịch: Caffe có thể được biên dịch bởi cả make và cmake. Dưới đây là biên dịch bằng make:

  • Copy file config mẫu
  cp Makefile.config.example Makefile.config

các thiết lập mặc định trong file config gần như sẽ hoạt động tốt, tùy trường hợp cần thay đổi một số thiết lập thì ta chỉnh trong file Makefile.config. Một số phần quan trọng trong file config được giải thích sau đây:

# CPU-only switch (uncomment to build without GPU support).
# CPU_ONLY := 1

Nếu muốn build caffe không dùng GPU thì ta bỏ chú thích dòng thứ 2 bên trên.

# CUDA directory contains bin/ and lib/ directories that we need.
CUDA_DIR := /usr/local/cuda
# On Ubuntu 14.04, if cuda tools are installed via
# "sudo apt-get install nvidia-cuda-toolkit" then use this instead:
# CUDA_DIR := /usr

Đoạn trên đây là thiết lâp đường dẫn đến thư mục cài đặt CUDA. Thư mục cài đặt mặc định là /usr/local/cuda như thiết lập bên trên. Việc build caffe trên ubuntu 15.10 sẽ gặp lỗi hdf5 naming với thông báo:

./include/caffe/util/hdf5.hpp:6:18: fatal error: hdf5.h: No such file or directory

mặc dù thư viện libhdf5-serial-dev đã được cài đặt, ta khắc phục lỗi trên bằng cách chỉnh sửa dòng

# Whatever else you find you need goes here.
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib

thành

# 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/

việc build trên ubuntu 15.10 với CUDA 7.5 sẽ xảy ra một lỗi nữa do CUDA không hỗ trợ biên dịch bằng gcc 4.10 trở lên do đó sẽ ném ra lỗi:

 #error -- unsupported GNU version! gcc versions later than 4.9 are not supported!

Giải pháp tìm thấy ở thời điểm hiện tại là ép chạy bằng cách chú thích dòng trên trong file /usr/local/cuda/include/host_config.h

//#error -- unsupported GNU version! gcc versions later than 4.9 are not supported!

Sau khi đã chỉnh file config xong, ta chạy các lệnh sau để build caffe:

make clean 
make all

Ta theo dõi các dòng lệnh chạy trên console để chắc chắn rằng không còn thông báo lỗi nào xảy ra.Sau khi đã build xong caffe ta build và chạy bộ test caffe.

make test
make runtest

Kiểm tra kết quả trong quá trình chạy test đảm bảo tất cả các test case đề pass như sau: Nếu muốn dùng caffe wrapper cho python thì ta thự hiện lệnh sau để build interface pycaffe:

 make pycaffe