Deep Learning Visualization Tool로서 유명한 것은 Deep Visualization Toolbox 라 한다. 2015년에 발표되었고, Network 내부를 관찰할 수 있다는 측면에서 유용할 것 같다. (관련자료: https://tensorflow.blog/tag/deep-visualization-toolbox/ )
----
Deep Visualization Toolbox
- Refer : http://yosinski.com/deepvis
Jason Yosinski, “Understanding Neural Networks Through Deep Visualization”, 2015, Deep leanring workshop 31
- Regularization optimization을 이용해서 각 layer에서의 image를 형상화
- Caffe 모델을 keras version 으로 만든 것이 ‘quiver'임
----
단점은 caffe 기반이라고 하는 것인데, 여길 찾아보니 Quiver라는 Keras 기반 tool이 있어 그 결과를 기록한다.
Quiver의 Github 는 https://github.com/jakebian/quiver 이고, 설치는
> pip install quiver_engine
으로 하면 된다.
사용방법은 매우 간단한데, 모델과 학습된 weight를 불러온 다음, quiver_engine.sever를 불러온후 model과 이미지 경로를 설정하면, 브라우저에서 확인할 수 있다.
그런데, 실행과정에서 몇가지 문제가 발생한다.
1. gevent.wsgi 문제 : quiver에서 사용한 gevent.wsgi 가 old version이라 삭제되면 gevent.pywsgi 로 변경되었다. quiver를 변경하면 된다.
2. 사용 이미지 : 당연히 quiver에서 불러온 이미지는 학습된 network에서 정의된 이미지 사이즈와 같아야 한다. VGG16의 경우 224 x 224 x 3 의 size를 가져야 한다. ( Photoscape X 같은 이미지 앱으로 사이즈를 조정하면 된다. 이를 몰라서 한참 헤메었다. )
3. Warning으로 Update your Model call to the Keras 2 API: Model(inputs=Tensor("in..., outputs=Tensor("de...) 가 발생하는 데 이것도 Keras V2로 넘어가면서 Model(input= ..., output = ...) 이 Model(inputs = .... , outputs = ...) 로 변경된 문제이니 quiver에서 변경하면 된다.
4. 실행후 네트워크 visualization image의 임시 저장경로로 ./tmp/ 를 사용한다. quiver에서는 자동으로 만들어 주지 않는다. 따라서, './tmp/ ' 폴더를 만들어 줘야 한다.
5. quiver 에서는 Dense layer는 나타나지 않는다. Conv layer를 확인하면 된다.
위 과정을 거치고 나면, 브라우저에서 아래와 같은 창을 볼 수 있다.
아래는 피부영상에 대해서 VGG16네트워크의 block1_conv1 layer의 결과이다.
이중 상위 4개의 이미지를 확인한 결과는 다음과 같다.
VGG16에서 하단의 layer로 갈수로 이미지의 low level feature 보다는 high level feature를 학습하는 것을 관찰할 수 있다.
본 시험에서 몇가지 생각해 볼 것이 발견되었는데,
1. 피부 영상의 경우 hair가 큰 영향이 없다고 생각해는데 ( 전체이미지에서 hair가 차지하는 픽셀이 작기 때문에 ), 그렇지 않을 가능성도 있다.
2. 학습하였을 때 hair가 차지하는 비중이 작다면 Transfer learning/fine-tuning network에서 상단보다는 하단에서 fine tuning을 하는 것이 좋을 것 같다는 생각이다.
다음은 Keras-vis를 시험해 보고자 한다.