[Caffe] CNN을 통한 학습을 완료한 후 Classification 하기
CNN을 통한 학습을 완료한 후 Classification 하기
AlexNet이든, 구글넷이든, 카페넷이든 학습이 완료되었다면 Caffemodel 이라는 확장자를 가진 네트워크 가중치 파라미터 파일이 생성될 것이다. 이 파일을 통해 우리는 새로운 이미지를 하나씩 네트워크에 넣어보면서 분류를 실험해 볼 수 있다.
두 가지 방법이 있는데 파이썬 파일일 이용하는 방법, cpp 파일을 이용하는 방법이다. cpp파일을 통해 분류를 하면 classify과정의 시간이 10배 가까이 짧은걸 확인할 수 있었다.. 단순 언어의 문제인지 내부 함수 구현 방법의 문제인지는 모르겠다.
1. 파이썬 파일을 이용하는 방법
위의 게시글에서 Caffe 와 CUDA를 설치하는 과정에서 마지막 설치가 잘 되었는지 확인하기 위해 해보았던 명령 중에
$> python python/classify.py --print_results examples/images/cat.jpg foo
와 같은 명령이 있다. 이는 classify.py 을 이용하여 분류를 cat.jpg 파일의 분류를 진행하겠다는 의미이다.
여기서 classify.py 파일이 중요한데 argument들을 살펴보면 네트워크, mean file(npy) 등을 설정하는 부분이 존재한다.
이 부분을 현재 분류하고자 하는 환경에 맞게 바꿔 주어야 한다. 자신이 사용한 CNN 네트워크의 deploy.txt 파일을 확인하여 입력하고,
mean file(npy) 을 만들어 classify.py 에 경로를 입력한다. 나머지 classify.py 의 필요 변경 사항은 위의 게시글에 자세히 설명해 두었다.
npy 파일을 만들기 귀찮다면 2번 방법으로 해보자..
2. CPP 파일을 이용하는 방법
이 파일을 그대로 사용하는 것이다. 1번 방법과 다르게 콘솔 창에 명령을 넣는 과정에서 네트워크나 mean파일과 같은 파라미터가 입력된다.
위의 예시를 보면 caffemodel, deploy, synset, 입력 데이터가 들어가는 것을 알 수 있다. 여기서 보다시피 cpp 을 통한 분류는 binaryproto 타입의 mean 파일을 사용한다. 이 파일은 학습을 위한 lmdb파일 생성후 공식처럼 같이 생성하는 파일이라 반드시 존재할 것이다. (구글넷은 필요없긴 하지만...) 암튼 이런 npy를 안만들어도 되는 점은 1번방법보다 좋은 것 같다.
만약 classification.cpp 파일을 수정했다면 반드시 make all 을 통해 재 빌드 후 명령을 수행해야 한다.
댓글
댓글 쓰기