Check failed: registry.count(type) == 1 (0 vs. 1) Unknown layer type: Data
Windows에서 caffe를 빌드하는 것이 예전보다 많이 쉬워진 듯 합니다. Windows용 브랜치를 받아서 약간의 스크립트 수정만 하면 Visual Studio를 실행할 필요조차 없이 알아서 빌드가 됩니다. 한편으로는 세세한 빌드 환경을 조절할 수 없다는 것이 단점인데 이런 부분이 실제 사용할 때 있어 문제가 발생합니다.
빌드된 caffe를 링크하고 자신의 애플리케이션에서 활용할 경우 다음과 같은 오류가 나타납니다.
1 |
F0406 23:17:16.038146 10884 layer_factory.cpp:62] Check failed: registry.count(type) == 1 (0 vs. 1) Unknown layer type:  (known types: Convolution, Eltwise, LRN, Pooling, Power, Python, ReLU, Sigmoid, Softmax, Split, TanH) |
적당히 따라가보면 layer_factory.hpp에서 사용될 레이어 종류들을 등록하게 되는데 이부분에서 로그에 나오는 것 외에 나머지 레이어들은 등록하지 않는 것 같습니다.
윈도우 빌드에서는 무슨 이유인지 이러한 현상이 나타나는데, 검색해보면 2015년도 이야기들이 많고 적용하기가 힘이 듭니다. 동적 라이브러리로 caffe를 빌드하면 해결된다는 이야기도 있습니다. 하지만 간단한 방법이 있었습니다.
복잡한 설정이나 다시 빌드할 필요없이 애플리케이션 프로젝트를 빌드할 때
1 |
CMAKE_WINDOWS_BUILD |
매크로를 넣어주면 간단히 해결되었습니다. 어느 헤더에서 분기가 일어나는게 아닌가 싶습니다.