• Tistory
    • 태그
    • 위치로그
    • 방명록
    • 관리자
    • 글쓰기
Carousel 01
Carousel 02
Previous Next

'Convolutional Neural Networks'에 해당되는 글 1건

  • 2015.07.16 [Caffe] Caffe + opencv + CUDA 설치방법 ( in windows ) (25)

[Caffe] Caffe + opencv + CUDA 설치방법 ( in windows )

전공관련/Deep Learning 2015. 7. 16. 20:38




요즘 꽤나 HOT 한 주제 중에 하나인 Deep Learning.

딥러닝을 구현하기엔 쉽지 않고, 또 누군가가 만들어준 좋은 라이브러리가 있는데 굳이 내가 고생 할 필요가없지..

 

Caffe              C/C++, CUDA

Torch 7            C/C++, CUDA, Linux, Android, Mac

Theano            Python

 

일반적으로 많이 사용하는 라이브러리 인 것 같은데 나는 windows 환경에서 C++을 이용하는 Caffe를 처음 이용 해 보기로 했다.

 

처음 보는 이친구 어떻게 다뤄야 할지 막막하던 차에 나랑 pc 환경이 아주 비슷한 분이 caffe 환경설정하는 방법을 올려두셨더군.

https://initialneil.wordpress.com/

원문은 위 주소에서 확인 가능하고 나는 다음을 위해 따로 기록.

 

//========================================================

 

[ Visual Studio 2013 + CUDA 6.5 + OpenCV 2.4.9 에서의 Caffe 환경설정 ]

 

1. Caffe’s GitHub(https://github.com/BVLC/caffe)를 다운로드 받고 압축을 해제 해 둔다.


2. VisualStudio에서 Win32콘솔 응용 프로그램으로 프로젝트를 생성한다.

           파일 -> 새로만들기 -> 프로젝트



           Win32 콘솔 응용 프로그램, (이때 경로는 추후 편의를 위해 1번에서 압축풀어둔 caffe의 root 폴더를 이용하라고 권장하던데??)



           빈 프로젝트 생성


3. 64bit 프로그래밍을 위해 플랫폼 변경


           빌드 -> 구성관리자 -> 활성 솔루션 플랫폼 -> 새로만들기 -> x64 -> 확인


4. caffe\src\caffe 경로에 있는 cpp 파일(총 8개)을 프로젝트 소스파일에 추가




5. 속성관리자에서 x64 Debug/Release 의 경로설정을 해 준다.

          



속성페이지 -> 일반 -> 출력 디렉터리 -> ..\..\bin\ (원문에서는 ..\bin 을 사용했지만 내 설정환경에서는 이 경로가 caffe root 폴터, 또한 뒤에 \ 하나 더 안붙이면 warning 뜨니 붙여주자)



속성페이지 -> C/C++ -> 일반 -> 추가포함 디렉토리에 아래 경로 추가


..\include; ..\src;



6. 3rdparty 라이브러리 설치 및 경로설정

           해당 단계에서는 CUDA, OpenCV, Boost, OpenBLAS 를 설치하고 경로를 설정한다.

           (만약 windows 64bit + vs2013을 사용한다면 원 저자가 제공하는 프리빌드 된 파일을 받아서 사용해도 된다)

 

           CUDA 6.5          https://developer.nvidia.com/cuda-toolkit-65

           OpenCV 2.4.9       http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.4.9/

           Boost              http://sourceforge.net/projects/boost/files/boost-binaries/

           OpenBLAS           http://sourceforge.net/projects/openblas/files/

          

           추가포함디렉토리에 아래 경로를 추가 해준다. (사용자 설정에 따라 다름, 원저자는 환경변수 및 매크로 이용)

           C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5\include

  C:\Program Files\opencv2.4.9\build\include

  C:\local\boost_1_56_0


           마찬가지로 링커 -> 일반 -> 추가 라이브러리 디렉터리 에도 아래 경로를 추가한다.

           C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5\lib\x64

           C:\Program Files\opencv2.4.9\build\x64\vc12\lib

  C:\local\boost_1_56_0\lib64-msvc-12.0

 

링커 -> 입력 -> 추가종속성에 아래의 라이브러리를 입력 해준다


Debug

opencv_core249d.lib;opencv_calib3d249d.lib;opencv_contrib249d.lib;opencv_flann249d.lib;

opencv_highgui249d.lib;opencv_imgproc249d.lib;opencv_legacy249d.lib;opencv_ml249d.lib;

opencv_gpu249d.lib;opencv_objdetect249d.lib;opencv_photo249d.lib;opencv_features2d249d.lib;

opencv_nonfree249d.lib;opencv_stitching249d.lib;opencv_video249d.lib;opencv_videostab249d.lib;

cudart.lib;cuda.lib;nppi.lib;cufft.lib;cublas.lib;curand.lib;%(AdditionalDependencies)



Release

opencv_core249.lib;opencv_flann249.lib;opencv_imgproc249.lib;opencv_highgui249.lib;opencv_legacy249.lib;

opencv_video249.lib;opencv_ml249.lib;opencv_calib3d249.lib;opencv_objdetect249.lib;opencv_stitching249.lib;

opencv_gpu249.lib;opencv_nonfree249.lib;opencv_features2d249.lib;cudart.lib;cuda.lib;nppi.lib;cufft.lib;

cublas.lib;curand.lib;%(AdditionalDependencies)

 

GFlags, HDF5, LMDB 등의 라이브러리의 경우 3rdparty 에 포함되어 있고 직접 설정을 원한다면 원저자의 글을 참고하여 caffe root 폴더에 3rdparty 폴더 만들어서 설정.

 

Caffe 실행을 위해 몇가지 dll 파일을 복사해준다.(저자의 3rdpartry 파일을 이용하면 세팅되어있음)


Libglog.dll         : GLog -> caffe\bin

Libopenblas.dll    : OpenBLAS -> caffe\bin

Msvcp120.dll      : HDF5 -> caffe\bin

Msvcr120.dll       : HDF5 -> caffe\bin

 

추가포함디렉터리와 추가라이브러리디렉터리에 아래 경로를 추가해준다.

include

../3rdparty/include; ../3rdparty/include/openblas; ../3rdparty/include/hdf5; ../3rdparty/include/lmdb;

Lib

../3rdparty/lib

 

추가종속성에 아래 라이브러리를 추가로 입력 해준다.

Debug

gflagsd.lib;libglog.lib;libopenblas.dll.a;libprotobufd.lib;libprotoc.lib;leveldbd.lib;lmdbd.lib;libhdf5_D.lib;

libhdf5_hl_D.lib;Shlwapi.lib;


Release

gflags.lib;libglog.lib;libopenblas.dll.a;libprotobuf.lib;libprotoc.lib;leveldb.lib;lmdb.lib;libhdf5.lib;libhdf5_hl.lib;

Shlwapi.lib;

 

리눅스에서는 바로 컴파일 가능하다는데, 윈도우 에서는 일부 소스코드를 수정 해줘야 한다.(7~10번 과정)


7. “commom.cpp”

에러를 확인하기 위해 먼저 common.cpp 파일만 컴파일 해 준다.




컴파일 하면 아래와 같이 getpid error 가 발생 할 것이다




소스코드 상단에 #include <process.h>를 추가 해주고 fopen_s 에러를 막기 위해 속성페이지 -> C/C++ -> 전처리기 -> 전처리기정의에 “_CRT_SECURE_NO_WARNINGS” 를 넣어준다.


“getpid”를 사용하는 라인을 아래와 같이 수정 해 준다.

  1. #ifndef _MSC_VER
  2. pid = getpid();
  3. #else
  4. pid = _getpid();
  5. #endif

다시 컴파일 하면 common.cpp 파일은 에러없이 컴파일이 가능하다.

 

8. “blob.cpp”

#include “caffe/proto/caffe.pb.h” 구문을 활성화 하기위해서는 caffe.proto파일을 생성해야한다.

Proto.exe 파일을 caffe\3rdparty\bin 에 복사

GeneratePB.bat 파일을 caffe\scripts 폴더에 복사

속성페이지 -> 빌드이벤트 -> 빌드 전 이벤트 -> 명령줄에 “../scripts/GeneratePB.bat” 추가

이후 다시 컴파일 하면 caffe.pb.h is being generated 라는 문구와 함께 컴파일이 가능하다.

(caffe_pretty_print.pb.h 관련 에러가 발생하면 error 해결 1번 확인)

( error C4996 이 발생하면 아래의 error 해결 2번 확인, 원문의 13번 참고)

 

9. “net.cpp”

“mkstemp” missing error 가 발생하면 http://stackoverflow.com/questions/6036227/mkstemp-implementation-for-win32 참고하여 해결

또는 io.hpp 상단에 #include “mkstemp.h 문구 추가. (원저자가 구현해둠)

Close 관련 에러를 해결하기 위해 io.hpp 파일의 MakeTempFilename 함수의 close(df) 를 아래와같이 변경 해준다.

  1. #ifndef _MSC_VER
  2. close(fd);
  3. #else
  4. _close(fd);
  5. #endif


io.hpp 파일에 mkdtemp 관련 에러를 해결하기위해 문제의 문장을 아래와 같이 수정 해준다

  1. #ifndef _MSC_VER
  2. char* mkdtemp_result = mkdtemp(temp_dirname_cstr);
  3. #else
  4. errno_t mkdtemp_result = _mktemp_s(temp_dirname_cstr, sizeof(temp_dirname_cstr));
  5. #endif


여기까지 추가 해 주면 net,cpp 파일 컴파일이 가능하다     


10. "solver.cpp"

snprintf error를 해결하기 위해 아래의 문장을 추가 해 준다.

  1. #ifdef _MSC_VER
  2. #define snprintf sprintf_s
  3. #endif


11. caffe/src/layers의 파일들 컴파일

GPU를 사용하기 위해 CUDA를 활성화 해 줘야 한다.

프로젝트 - 빌드종속성 - 사용자 지정 빌드로 들어가서 CUDA를 활성화 해 준다




프로젝트 - 소스에 새로운 필터를 추가 해 주고 caffe/src/layers 에 있는 *.cu 파일을 모두 추가 해준다.



bull_layer.cu 파일의 const float kBNLL_THRESHOLD = 50.; 문구를 아래와 같이 바꿔준다

#define kBNLL_THRESHOLD 50.0


이후 모든 .cu 파일의 속성에서 항목 형식을 CUDA C/C++ 로 변경 해 준다



이제 layers 폴더도 정상적으로 컴파일이 가능하다.



12. 이제 caffe/src/util 폴더에 있는 파일을 컴파일 해야한다.

위에서 한것과 마찬가지로 util 필터 추가하고 cpp파일 추가.

이후  io.cpp 파일에서 ReadProtoFromBinaryFile 함수의 "O_RDONLY" 부분을 "O_RDONLY|OBINARY" 로 수정 해준다.


또 POSIX 에러를 막기위해 아래 문구를 상단에 추가해준다

  1. #ifdef _MSC_VER
  2. #define open _open
  3. #endif


close는 file.close() 를 제외하고 나머지 close 를 _close()로 수정 한다.


math_functions.cpp 파일 상단에 아래의 문구를 추가 해준다.

  1. #define __builtin_popcount __popcnt
  2. #define __builtin_popcountl __popcnt



13. 이제 caffe/src/proto 에 있는 파일을 위한과정.

속성 -> C/C++ -> 명령줄에 다음 문구를 추가 해 준다 "-D_SCL_SECURE_NO_WARNINGS"


여기 까지 하면 caffe 환경설정의 대장정의 끝이다.

컴파일을 해 보면 에러 없이 컴파일 되는 것을 확인 할 수 있을 것이다.


추가적인 문제가 발생 할 경우는 다음 포스팅에서 다루도록 한다.


어유 한번 써보기 쉽지 않구만...

저작자표시비영리

'전공관련 > Deep Learning' 카테고리의 다른 글

[Caffe] NVIDIA DIGITS 버전 업데이트 하기.  (0) 2016.03.18
[Deep Learning] Weight update method 정리.  (0) 2016.02.24
[Deep Learning] Xavier Initialization에 관하여..  (0) 2016.02.22
[Caffe] Caffe를 이용하여 학습할때 snapshot을 이용하여 이어서 학습하기  (0) 2015.12.16
[Deep Learning] 컴퓨터 비전을 위한 심층학습 기법 강의정리  (0) 2015.12.15
[Caffe] Caffe + opencv + CUDA 설치방법 ( in windows )  (25) 2015.07.16
블로그 이미지

매직블럭

작은 지식들 그리고 기억 한조각

Tag Convolutional Neural Networks, Deep Learning, 딥러닝
트랙백 0개, 댓글 25개가 달렸습니다

댓글을 달아 주세요

  • 익명 2015.08.11 22:03  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • 매직블럭 2015.08.19 11:48 신고  댓글주소  수정/삭제

      기본적으로 caffe 환경 설정 한 후에는 간단한 사용 수준에서는 크게 어려운 사항이 없습니다. 아키텍쳐 설계, 학습 파라미터 설정 만 해주시고 새로 학습하고자 하시는 DB를 levelDB나 lmdb 형태로 변환 하고 학습 하면 됩니다.
      학습 단계에서 검증세트로 학습률을 중간중간 테스트 해 볼수도 있고 테스트 세트를 따로 준비해서 학습 후에 평가를 해도 됩니다.

      caffe는 deep learning을 위한 학습알고리즘을 구현 해 둔 것일 뿐 나머지 학습이나 평가 같은 사항은 기존에 사용하시던 다른 머신러닝 알고리즘과 동일하게 적용 하시면 될 것 같습니다.

  • 어렵다.. 2015.08.18 17:55  댓글주소  수정/삭제  댓글쓰기

    8번 blob.cpp 컴파일중인데 아래와 같은 에러가 나타나내요..
    fatal error C1083: 포함 파일을 열 수 없습니다. 'caffe/proto/caffe.pb.hpp': No such file or directory
    그래서 검색해서 다운받아서 넣엇더니...다른에러가뜹니다..
    fatal error C1189: #error : This file was generated by an older version of protoc which is <<

    해결방법이 있을까요?

    • 매직블럭 2015.08.19 11:52 신고  댓글주소  수정/삭제

      caffe.pb.hpp 파일을 다운로드 받으시지 마시고
      scripts\GeneratePB.bat 파일을 에디터로 열어 보시면 몇가지 파일 경로들이 보이실 겁니다. 이 경로를 사용하시는 환경에 맞게 바꿔주시고 저장하신후에 다시 한번 컴파일을 해 보시면 정상적으로 파일이 생성 될 겁니다.

    • 익명 2015.08.19 15:30  댓글주소  수정/삭제

      비밀댓글입니다

    • 익명 2015.08.19 19:55  댓글주소  수정/삭제

      비밀댓글입니다

    • 익명 2015.08.19 21:33  댓글주소  수정/삭제

      비밀댓글입니다

  • 익명 2015.08.24 19:59  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  • 익명 2015.11.10 17:31  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • 매직블럭 2015.09.03 23:56 신고  댓글주소  수정/삭제

      댓글 다신걸 이제야 봤네요. 메일 주소 남겨주시면 메일 한번 드리겠습니다

    • 익명 2015.09.05 23:17  댓글주소  수정/삭제

      비밀댓글입니다

  • 학부생 2016.03.29 21:09  댓글주소  수정/삭제  댓글쓰기

    천재님
    혹시 GPU안쓰고 CPU로만 돌릴려면 어떻게 해야 되는지 아시나요 ?

    • 매직블럭 2016.03.30 13:07 신고  댓글주소  수정/삭제

      소스코드 찾아보시면 #ifdef CPU_ONLY 구문이 포함된 부분이 여러군데 있습니다 해당부분들 찾아서 상단에 CPU_ONLY 를 정의 해 주시던가 공통으로 include 되는 부분 찾아서 정의 해 주셔도 됩니다.
      또 빌드종속성 - 사용자 지정 빌드 에서 CUDA 체크 하셨던 부분 해제 해주셔야 합니다

      이후 사용실 때 Caffe::set_mode(Caffe::GPU); 대신 파라미터로 CPU를 주셔서 Caffe::set_mode(Caffe::CPU); 모드 설정 해 주시고 하용 하시면 됩니다.

  • 익명 2016.04.04 14:48  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • 매직블럭 2016.04.04 15:57 신고  댓글주소  수정/삭제

      이 내용은 원 저자가 작성한 내용을 그대로 옮겨서 저런식으로 경로 설정이 되어있는데 이 방법보다는 $(SolutionDir) 매크로 같은걸 이용하시면 보다 편리합니다. 경로설정 하실때 매크로 버튼 눌러보시면 각 매크로가 어떤 경로나 값을 지정하는지 확인 하실 수 있고요.
      절대경로로 추가하면 혹 프로젝터 경로가 바뀔경우 입출력 경로가 꼬여버리는 문제가 있으므로 그닥 추천하지 않습니다.

  • 학부생 2016.04.04 14:51  댓글주소  수정/삭제  댓글쓰기

    5번스텝에 질문좀 드리겠습니다.
    속성페이지 -> 일반 -> 출력 디렉터리 -> ..\..\bin\ (원문에서는 ..\bin 을 사용했지만 내 설정환경에서는 이 경로가 caffe root 폴터, 또한 뒤에 \ 하나 더 안붙이면 warning 뜨니 붙여주자)

    Q1) 여기서 bin폴더는 어디있나요? 경로 설정이 너무 햇갈려서 직접 부여하고싶은데 아무래 찾아봐도 없네요 ㅠㅠ

    Q2) 그리고,
    속성페이지 -> C/C++ -> 일반 -> 추가포함 디렉토리에 아래 경로 추가

    ..\include; ..\src;
    여기서 include,src폴더는 다운받은 폴더에 있는거 말씀하시는거죠??

    위에꺼 잘못해서 비밀글써서 다시 씁니다. (비밀번호 설정을 안했는데..)
    감사합니다 늘 블로그 와서 공부하고 있습니다.

    • 매직블럭 2016.04.04 16:02 신고  댓글주소  수정/삭제

      위에 적은내용이랑 같은 내용입니다.
      절대경로의 경우 프로젝트 위치가 바뀔경우 입출력 경로가 꼬일 수 있으므로 그닥 추천하지 않고요. 상대경로를 설정하실때 .. 와 같은 상위폴더경로 같은경우는 현재위치가 어디인지 햇갈릴수도 있으니까 $(SolutionDir) 같은 매크로 사용하시면 좋을 것 같습니다. 매크로 버튼 눌러보시면 각 매크로가 어떤 경로나 값을 지칭하는지 확인 가능합니다.

      bin 폴더는 컴파일 된 파일이 출력 될 경로로 폴더 하나 만들어 주시면 되고, include나 src는 다운로드 받으신 caffe에 있는 경로에 맞게 지정 해 주시면 됩니다.

      저도 완전 초보라 나중에 제가 다시볼 목적 + 저같은분 혹시나 도움될까 해서 적어두는거라 부정확한 정보도 있고 저만 알아보게 적는 경우도 있다보니... 차차 개선 해야겠죠.

  • 익명 2016.05.20 16:46  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  • 익명 2016.05.20 16:52  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • 매직블럭 2016.05.26 01:10 신고  댓글주소  수정/삭제

      생성된 caffe.exe 파일을 사용하려면 뒤에 파라미터를 넣어줘야 합니다. 윈도우 상에서 실행시키면 메세지 확인 할 틈도 없이 종료되어 버리니 cmd 창에서 실행 해 보시면 메세지 확인 가능하실 겁니다. 설명 나오는 대로 파라미터 같이 넣어주시면 학습 또는 테스트 가능 합니다.

  • 카페 2016.05.27 15:59  댓글주소  수정/삭제  댓글쓰기

    원래 사이트에서 3rd party를 다운 받아야 하는건가요? 아니면, 그냥 opencv, openblas, cuda 설치만 하면 되는건가요?
    common만 에러 100개 ㅠㅠ

    • 매직블럭 2016.05.28 23:28 신고  댓글주소  수정/삭제

      OpenCV, CUDA, Boost 는 설치 해주시고 나머지는 원저자가 올려둔 3rdparty 파일 사용하시면 됩니다. 다른 설정을 원하시면 나머지 라이브러리들도 개별적으로 설치 하셔도 상관 없습니다.

  • 익명 2017.01.24 17:43  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • 매직블럭 2017.02.02 16:36 신고  댓글주소  수정/삭제

      이 방법은 caffe 가 공식적으로 windows를 지원하기 전에 사용하던 방법으로 지금은 사용하지 않습니다.
      http://jangjy.tistory.com/249 이 글을 참고하셔서 공식적으로 지원하는 버전을 이용하시면 될 것 같습니다.

  • LeeseongMin 2017.10.19 18:02  댓글주소  수정/삭제  댓글쓰기

    hid_t가 선언되지 않았다는 에러가 hdf5.h에 뜨는데 어떻게 해결해야 할까요?

  • «
  • 1
  • »

카테고리

  • 살다보니.. (414)
    • 주절거림 (3)
    • 취미생활 (36)
      • 지식과 지혜 (3)
      • 풍경이 되어 (4)
      • Memories (17)
      • 엥겔지수를 높여라 (2)
    • mathematics (6)
      • Matrix Computation (2)
      • RandomProcesses (3)
    • English.. (8)
    • Programming (134)
      • C, C++, MFC (51)
      • C# (1)
      • OpenCV (17)
      • Python (47)
      • Git, Docker (3)
      • Matlab (4)
      • Windows (3)
      • Kinect V2 (2)
      • 기타 etc. (6)
    • 전공관련 (73)
      • Algorithm (6)
      • Deep Learning (49)
      • 실습 프로그램 (4)
      • 주워들은 용어정리 (8)
      • 기타 etc. (6)
    • Computer (104)
      • Utility (21)
      • Windows (24)
      • Ubuntu, Linux (55)
      • NAS (2)
      • Embedded, Mobile (2)
    • IT, Device (41)
      • 제품 사용기, 개봉기 (14)
      • 스마트 체험단 신청 (27)
    • Wish List (3)
    • TISTORY TIP (5)
    • 미분류. 수정중 (1)

태그목록

  • 오봉자싸롱
  • 일본
  • 에누리닷컴
  • 후쿠오카
  • 크롬
  • LIBSVM
  • matlab function
  • 딥러닝
  • ReadString
  • portugal
  • 매트랩
  • DeepLearning
  • 큐슈
  • 칼로리 대폭발
  • 스마트체험단
  • CStdioFile
  • review
  • SVM
  • Computer Tip
  • DSLR
  • random variable
  • 갤럭시노트3
  • Convolutional Neural Networks
  • Deep Learning
  • 포르투갈
  • ColorMeRad
  • utility
  • matlab
  • 매트랩 함수
  • function

달력

«   2022/05   »
일 월 화 수 목 금 토
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
05-20 07:35

LATEST FROM OUR BLOG

  • 골뱅이 연산자의 의미 (행렬곱)..
  • 프린터 용지 부족 문제를 해⋯.
  • [MXNet] 데이터 리스트를 만⋯.
  • 예쁘게 출력하자 pprint - pr⋯.
  • 작업표시줄 미리보기를 리스⋯.
  • 이미지 실제 파일 포맷 확인하기.
  • 알리 등 해외배송 배송상태를⋯.
  • 티스토리 코드블럭 내용을 복⋯.
  • warning 을 on/off 하자.
  • windows 10 파일 선택, 파일⋯.
RSS 구독하기

BLOG VISITORS

  • Total : 1,114,479
  • Today : 41
  • Yesterday : 672

Copyright © 2015 Socialdev. All Rights Reserved.

티스토리툴바