caffe SSD 코드 컴파일 실행 프로세스 및 문제 해결

caffe SSD 코드 컴파일 실행 프로세스 및 문제 해결


이 문서는 다음 코드를 기반으로 합니다.
https://github.com/weiliu89/caffe/tree/ssd
down 내려와서 디렉터리에 들어가기
-rw-rw-r--  1 ~ ~  23986 8   13 15:29 Makefile
-rw-rw-r--  1 ~ ~   4402 8   10 17:05 Makefile.config.example

기계 설정과 환경의 상황에 따라 이 두 파일을 수정하고 우선Makefile을 복사합니다.config.example에서 Makefile까지.config
cp Makefile.config.example Makefile.config

uncomment 다음 항목과 같이 config 파일을 수정합니다.
USE_CUDNN: = 1, CUDNN을 호출해서 커피 코드를 실행해야 하기 때문입니다
OPENCV_VERSION: =3, 기기의 오픈 cv 버전 번호가 3이기 때문입니다.X
CUDA_ARCH := -gencode arch=compute_50,code=sm_50 \
             -gencode arch=compute_52,code=sm_52 \
             -gencode arch=compute_61,code=sm_61

CUDA_ARCH는 이 몇 가지만 보류하면 됩니다. 이것은 gpu의 산력 성능과 관련된 항목입니다. 본 기계는 TITAN Xp를 사용하기 때문에 작은 주석을 떼지 않으면 Warning에 보고합니다.
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial

hdf5 경로를include에 추가합니다.
Makefile 구성 파일은 기본적으로 완료됩니다.Makefile 수정 사항은 다음과 같습니다.
흔히 볼 수 있는 문제는 일반적으로 라이브러리를 찾을 수 없기 때문에 이 코드에 주목한다.
LIBRARIES += glog gflags protobuf boost_system boost_filesystem boost_regex m hdf5_serial_hl hdf5_serial 

# handle IO dependencies
USE_LEVELDB ?= 1
USE_LMDB ?= 1
USE_OPENCV ?= 1

ifeq ($(USE_LEVELDB), 1)
    LIBRARIES += leveldb snappy
endif
ifeq ($(USE_LMDB), 1)
    LIBRARIES += lmdb
endif
ifeq ($(USE_OPENCV), 1)
    LIBRARIES += opencv_core opencv_highgui opencv_imgproc

    ifeq ($(OPENCV_VERSION), 3)
        LIBRARIES += opencv_imgcodecs opencv_videoio
    endif

endif
PYTHON_LIBRARIES ?= boost_python27 python2.7
WARNINGS := -Wall -Wno-sign-compare

첫 번째 행의 LIBRARIES +=...,만약 어떤 라이브러리를 잘못 보고해서 찾지 못하면, 이 줄에 가입할 수 있습니다. 예를 들어boostregex m hdf5_serial_hl hdf5_serial은 다 첨가된 거예요.보스트 잘못 보고해서...regex::XXX를 찾지 못했습니다.

오답과 해결

~/about-caffe/caffe-ssd$ make all
LD -o .build_release/lib/libcaffe.so.1.0.0-rc3
CXX/LD -o .build_release/tools/finetune_net.bin
CXX/LD -o .build_release/tools/convert_imageset.bin
.build_release/lib/libcaffe.so: undefined reference to `boost::match_results<__gnu_cxx>::__normal_iterator const*, std::__cxx11::basic_string, std::char_traits, std::allocator > >, std::allocator::sub_match<__gnu_cxx>::__normal_iterator const*, std::__cxx11::basic_string, std::char_traits, std::allocator > > > > >::maybe_assign(boost::match_results<__gnu_cxx>::__normal_iterator const*, std::__cxx11::basic_string, std::char_traits, std::allocator > >, std::allocator::sub_match<__gnu_cxx>::__normal_iterator const*, std::__cxx11::basic_string, std::char_traits, std::allocator > > > > > const&)'
.build_release/lib/libcaffe.so: undefined reference to `boost::re_detail::raise_runtime_error(std::runtime_error const&)'
.build_release/lib/libcaffe.so: undefined reference to `boost::cpp_regex_traits::toi(char const*&, char const*, int) const'
.build_release/lib/libcaffe.so: undefined reference to `boost::re_detail::put_mem_block(void*)'
.build_release/lib/libcaffe.so: undefined reference to `boost::re_detail::perl_matcher<__gnu_cxx>::__normal_iterator const*, std::__cxx11::basic_string, std::char_traits, std::allocator > >, std::allocator::sub_match<__gnu_cxx>::__normal_iterator const*, std::__cxx11::basic_string, std::char_traits, std::allocator > > > >, boost::regex_traits, boost::cpp_regex_traits > >::construct_init(boost::basic_regex, boost::regex_traits, boost::cpp_regex_traits > > const&, boost::regex_constants::_match_flags)'
.build_release/lib/libcaffe.so: undefined reference to `boost::re_detail::get_mem_block()'
.build_release/lib/libcaffe.so: undefined reference to `boost::re_detail::verify_options(unsigned int, boost::regex_constants::_match_flags)'
.build_release/lib/libcaffe.so: undefined reference to `boost::re_detail::get_default_error_string(boost::regex_constants::error_type)'
.build_release/lib/libcaffe.so: undefined reference to `boost::basic_regex, boost::regex_traits, boost::cpp_regex_traits > >::do_assign(char const*, char const*, unsigned int)'
.build_release/lib/libcaffe.so: undefined reference to `boost::re_detail::cpp_regex_traits_implementation::transform(char const*, char const*) const'
.build_release/lib/libcaffe.so: undefined reference to `boost::re_detail::cpp_regex_traits_implementation::transform_primary(char const*, char const*) const'
collect2: error: ld returned 1 exit status
Makefile:619: recipe for target '.build_release/tools/convert_imageset.bin' failed
make: *** [.build_release/tools/convert_imageset.bin] Error 1

질문 유형: [undefined reference to'boost:::re detail:::]
해결 방안: boost의 버전이 너무 낮아서 1.60보다 커야 한다는 주장을 보았는데 본 컴퓨터의 boost는 1.58이기 때문에 수동으로 boost를 다운로드하여 설치한다. 여기는 1.68 버전 번호의 boost 라이브러리를 사용하고 설치한 후에 문제가 해결된다.(boost 참조 문서 설치:https://blog.csdn.net/this_capslock/article/details/47170313)
또 다른 문제는 make pycaffe 때 다음과 같이 나타난다는 것이다.
~/about-caffe/caffe-ssd$ make py
CXX/LD -o python/caffe/_caffe.so python/caffe/_caffe.cpp
/usr/bin/ld: cannot find -lboost_python
collect2: error: ld returned 1 exit status
Makefile:501: recipe for target 'python/caffe/_caffe.so' failed
make: *** [python/caffe/_caffe.so] Error 1

질문 유형: [cannot find -lboost python], 하지만 실제로는makefile에서 boostpython이 추가되었습니다.
PYTHON_LIBRARIES ?= boost_python python2.7

여기 솔루션
PYTHON_LIBRARIES ?= boost_python27 python2.7

곧 boostpython에서 boost 로 변경python.
마지막으로 커피와pycaffe가 모두 컴파일되었습니다. ssd의python 발걸음을 실행하고 오류를 보고합니다.
~/about-caffe/caffe-ssd$ python examples/ssd/ssd_pascal.py
Traceback (most recent call last):
  File "examples/ssd/ssd_pascal.py", line 2, in <module>
    import caffe
ImportError: No module named caffe

오류 유형: [No module named XXX] 이 경우 두 가지 이유가 있습니다. 하나는 make pycaffe가 없다는 것입니다.다른 하나는pycaffe의 경로를 환경 변수에 넣지 않은 것이다.여기에서 우리make는pycaffe를 통과했기 때문에pycaffe를 환경 변수에 수동으로 넣어야 합니다.
caffe_root = '~/about-caffe/caffe-ssd/'
if caffe_root + 'python' not in sys.path:
    sys.path.append(caffe_root + 'python')
# sys.path.insert(0, caffe_root + 'python')

import caffe

이렇게 하면 운행할 수 있다.
다음은lmdb 데이터를 훈련이 필요한 자신의 데이터 집합으로 바꾸어 ssd의caffe모델을 훈련시켰다~
2018년 8월 13일 16:14:04
너는 천사에게 반한 줄 알았는데, 사실은 마귀에 홀린 거야.극작가, 세만티스[돈키호테]

좋은 웹페이지 즐겨찾기