관리 메뉴

ComputerVision Jack

Keras to Caffe 본문

Computer Vision/Model Convert

Keras to Caffe

JackYoon 2021. 6. 7. 21:45
반응형

딥러닝 모델을 다양한 환경에 맞게 사용하려면 model을 컨버팅 해야합니다. 그 중 오늘은 keras model을 caffe model로 converting 하는 방법을 포스팅하겠습니다.

 

virtual Box

우선 리눅스 환경을 이용하기 위해 vm virtual box를 실행해야합니다.

리눅스 환경이나 virtual box가 처음이신 분들은 아래의 블로그를 참고하시면 쉽게 설치하실 수 있습니다.

https://ndb796.tistory.com/370

 

Windows 10 운영체제에 VirtualBox 및 우분투(Ubuntu) 설치하기

※ VirtualBox 설치 ※ 개발 혹은 실습을 할 때, 윈도우(Windows) 10 운영체제의 컴퓨터에 리눅스 운영체제의 가상 환경을 갖추어야 하는 경우가 종종 있다. 이번 포스팅에서는 오라클(Oracle)에서 무료

ndb796.tistory.com

우분투 설치를 완료하시면 기본적으로 virtual box에 대한 setting을 진행해야합니다.

$sudo apt-get update && sudo apt-get upgrade
$sudo apt-get install -y build-essential cmake git pkg-config

$sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler
$sudo apt-get install -y libatlas-base-dev
$sudo apt-get install -y --no-install-recommends libboost-all-dev
$sudo apt-get install -y libgflags-dev libgoogle-glog-dev liblmdb-dev

$sudo apt-get install -y python-pip
$sudo apt-get install -y python-dev
$sudo apt-get install -y python-numpy python-scipy
$sudo apt-get install -y libopencv-dev

 

해당 설치를 완료하면 이제 본격적으로 caffe를 git clone하여 진행하면 됩니다.

working directory
git clone 진행

$git clone https://github.com/BVLC/caffe
$cd caffe/
$cp Makefile.config.example Makefile.config
$gedit Makefile.config

caffe gitclone을 진행 한 후, gedit을 통해 Makefile.config를 수정해야합니다.

Makefile.config

해당 파일에서 CPU_ONLY := 1의 주석을 풀어줍니다. 다음

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 /usr/lib/x86_64-linux-gnu/hdf5/serial 추가

 

다음 Make를 통해 빌드를 시작합니다.

$make clean
$make all
$make test
$make runtest
$make pycaffe

make 빌드
make runtest

caffe lib가 정상 작동 되는 것을 확인할 수 있습니다.

$gedit ~/.bashrc
// export PYTHONPATH=~/caffe/python:$PYTHONPATH 파일 마지막에 추가
$python
>> import caffe 

caffe 완료

caffe python path를 설정한 후, python을 실행합니다. 만약 다음과 같은 에러 문구를 만나면 pip을 통해 설치합니다.

  • ImportError : No module named skimage.io
  • ImportError : No module named google.protobuf.internal
    $pip install scikit-image
    $pip install protobuf

caffe Lib은 기본적으로 파이썬 2.x 버전을 사용합니다. 하지만 위의 설명대로 pip을 실행할 때 typing Error가 발생하는 경우가 생깁니다.

$sudo python3 -m pip uninstall pip
$curl https://bootstrap.pypa.io/pip/2.7/get-pip -o -get-pip.py
$python get-pip.py

그럴 경우 pip을 지운뒤 다시 설치하시면 진행되는 것을 확인 할 수 있습니다.

 

이제 Keras model을 Caffe model로 Converting하는 public code를 소개합니다.

https://github.com/uhfband/keras2caffe

 

uhfband/keras2caffe

Keras to Caffe model converter tool. Contribute to uhfband/keras2caffe development by creating an account on GitHub.

github.com

해당 코드를 이용하시면 쉽게 keras 모델을 변환할 수 있습니다.

keras 모델을 불러오는 방법은 크게 2가지가 있습니다.

  • load_model()
  • load_weights()

모델에 대한 정보를 모른다면 load_model() 함수를 사용하시고 모델에 대한 정보가 있다면 모델을 생성한 후, load_weights() 통하여 가중치를 가져옵니다.

load_model
load_weights

$ python convert.py
// pip install keras==2.2.4
// pip install tensorflow==1.14.0

caffe model convert

해당 converting을 진행하면 2가지의 output이 나오게됩니다.

  • prototxt 파일
  • caffe model 파일

prototxt 파일의 경우 모델의 structure를 명시하는 파일입니다. caffe model의 경우 변환된 caffe model을 지칭합니다.

하지만 여기서 prototxt 파일에 대해 수정해야할 부분이 있습니다.

 

convolution 연산

뉴트론을 통해 caffe 모델을 분석해보면 우리가 아는 convolution 연산과 조금 다른 부분을 확인할 수 있습니다. 따라서 해당 연산 순서에 맞게 prototxt파일을 조금 수정해야합니다.

prototxt

prototxt파일을 열어 보시면 top이 해당 layer의 input으로 들어오는 선행 layer를 지칭합니다. 하지만 batch_normalization_4 input은 conv2d_4인데 위의 layer는 conv2d_3이기 때문에 순서를 맞춰줘야합니다.

 

[한계점]

해당 keras to caffe model public code는 한계점이 많습니다. 다양한 layer operation (ex lambda)에 대해 제약적이기 때문에 다양한 model (backbone)을 변환 할 수 없습니다. 만약 변환하고 싶다면 따로 구현을 해서 넣어야 할 것 같습니다.

 

또한 concate를 진행할 때 axis를 설정해야합니다. keras와 caffe model은 channel 순서가 다르기 때문에 그 부분을 확인하여 axis를 설정해야합니다. caffe는 pytorch와 같은 순서를 지닌것으로 알고 있습니다.

 

이상 converting 포스팅을 마무리하겠습니다.

다음 시간엔 Darknet을 caffe model로 변환하는 포스팅을 진행하겠습니다. 감사합니다.

반응형

'Computer Vision > Model Convert' 카테고리의 다른 글

Keras to TFlite  (0) 2021.06.15
Darknet to Caffe  (0) 2021.06.08
Comments