데이터분석/Tensorflow

[Tensorflow] How to Retrain Inception’s Final Layer for New Categories

쌍쌍바나나 2017. 2. 7. 21:54
반응형

  modern object recognition models은 수백만개의 파라미터의 값과 full train을 하는데 걸리는 시간이 주 단위로 걸리게 된다. Transfer learning은 여러개의 categories로 이루어진 set을 fully-trained model인 ImageNet을 대상으로, 새로운 클래스를 추가해서 기존에 존재하는 weights를 다시 retrain하는 것을 말한다. 요약해서 말하면, 이미 트레이닝이 된 모델의 수백만개의 parameters를 그대로 사용하는데, 새로운 클래스를 추가하므로서, 기존 weights를 retrain하는 것을 Transfer learning이라고 한다. 예를 들어서 마지막 final layer를 retraining하고, 그 나머지 모든 layer에 대해서는 신경쓰지 않는다. 더 자세히 알고 싶으면 아래 논문을 참고 하길 바란다. 


https://arxiv.org/pdf/1310.1531v1.pdf


비록 transfer learning을 하는게 full training을 하는 것보다 성능은 좋지 않지만, 많은 애플리케이션에서 뛰어난 효과를 얻고 있다. 일단 full training하는 시간이 엄청 긴데, GPU가 없는 laptop에서도 대략 30분이면 모든 training을 할 수 있다. 아래 예제는 어떻게 새로운 클래스를 추가해서 모델을 학습시키는지에 대한 training process에 대해서 설명을 한다. 


training을 하기 전에 학습에 사용할 새로운 클래스의 이미지들이 필요하다. 만약 없다면, 아래의 이미지를 사용하자. 


$ cd ~ 

$ curl -O http://download.tensorflow.org/example_images/flower_photos.tgz

$ tar xzf flower_photos.tgz


이미지를 다운로드 다 했다면, TensorFlow source directory로 이동을해서 retrainer를 build를 한다. 아래와 같이 입력하자.

bazel은 google의 build tool로서, 설치가 필요하다.

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

$ brew install bazel


$ bazel build tensorflow/examples/image_retraining:retrain

여기서 에러가 나는데,,,, 왜 나는지 나도 모르겠음


$ python tensorflow/examples/image_retraining/retrain.py --image_dir ~/flower_photos


으로 실행하면, [pre-trained Inception v3 모델 다운로드] - [bottleneck 생성] - [새로운 클래스 training] 순으로 진행이 된다. 


정확도를 돌려보면 대략 92%정도 나온다… 대단대단



bottleneck

bottleneck을 생성되는데 걸리는 시간은 머신에 따라 속도 차이가 있겠지만, 대략 30분 정도 소요가 된다. bottleneck은 final output layer의 전에서 사용할 정보를 가지고 있다. 



반응형