오토인코더를 학습시킨 후 인코딩된 이미지 임베딩을 이용하여 클러스터링을 하였습니다.
이미지 임베딩을 PCA로 차원 축소하고 Kmeans로 클러스터링을 진행하였습니다.
레이어를 깊게 쌓지 않은 2-layer의 feature map channel이 점점 늘어나는 CNN 구조가 제일 성능이 좋았습니다.
또, PCA를 2D보다는 3D로 했을 때가 더 성능이 좋았지만, 눈에 띄는 차이는 없었습니다.
최고 성능은 다음과 같습니다.
ConvFM 3D precision 0.8312990409764603 | recall 0.9906493506493507 | f1 0.9040056885517895
이는, recall 점수가 높다는 점에서 대부분의 실사 이미지는 모두 클러스터링 하지만 precision 점수가 80점대라는 것은 적지 않은 수의 일러스트 이미지도 실사로 분류해버렸다는 뜻입니다.
마지막으로, 실제로 RGB 값에 대해서만 PCA를 해도 0.87의 f1 score를 얻다보니까(실험 서순을 RGB 부터 해봤어야 했는데,, 슬프네요) 오토인코딩을 실제로 할 필요가 있는가에 대해서 저는 할 필요가 없지 않나라고 결론을 내리게 된 것 같습니다. 지금부터는 모델보다는 raw 이미지 자체를 어떻게 활용할 것인가에 대해 더 고민해봐야 할 것 같습니다.
실험 내용
실험 1 이미지 임베딩
AutoEncoder with DNN
FC는 인코더가 3-layer로 이루어져 있으며 변화하는 channel은 resize*resize, 512, 256, 128로 신경망이 구성됩니다.
AutoEncoder with CNN (=Conv)
Conv는 인코더가 2-layer로 이루어져 있으며 변화하는 channel은 3, 16, 4로 컨볼루젼됩니다.
Raw Image RGB
실험 2에 등장하는 ConvFM는 16*16*32 = 8192로 구성되기 때문에 이와 최대한 공정하게 맞추기 위해 52*52*3 = 8112로 구상하였습니다. 따라서 이미지 resize는 52입니다.
실험 1 결과
FC는 색은 어느정도 표현하지만 외형을 거의 표현하지 못했습니다.
Conv는 거의 대부분의 색을 표현하고 외형도 저품질이지만 매우 잘 표현합니다.
Conv 성능
2D precision 0.7910758965804837 | recall 0.9854545454545455 | f1 0.8776312745778394
3D precision 0.7917362270450752 | recall 0.9854545454545455 | f1 0.8780374913214533
기본 RGB값을 바로 PCA에 활용했을 때도 Conv와 동일한 성능을 냈습니다.
2D precision 0.7937238493723849 | recall 0.9854545454545455 | f1 0.8792584009269988
3D precision 0.7953878406708595 | recall 0.9854545454545455 | f1 0.880278422273782
실험 2 CNN Feature map size
Let Feature map size bigger than initial channel size
ConvFM은 인코더가 2-layer로 이루어져 있으며 변화하는 channel은 3, 16, 32로 컨볼루젼됩니다.
실험 2 결과
ConvFM이 Conv보다 디코딩 과정에서 이미지의 색과 외형을 더 잘 표현합니다. 클러스터링 성능 또한 5% 더 높습니다.
실험 3 CNN Layer depth
Let CNN Layers deeper
DeepConvFM은 인코더가 16-layer로 이루어져 있으며 변화하는 channel은 3, 16, 32, 64, 128, 256, 512로 컨볼루젼됩니다. VGG-16의 레이어를 모방했습니다.
SmallDeepConvFM은 인코더가 5-layer로 이루어져 있으며 변화하는 channel은 3, 16, 32, 64, 128, 256로 컨볼루젼됩니다.
BigConvFM은 인코더가 3-layer로 이루어져 있으며 변화하는 channel은 3, 16, 32, 64로 컨볼루젼됩니다.
실험 3 결과
DeepConvFM과 SmallDeepConvFM은 색을 아예 표현하지 못했고, 물체의 실루엣 정도는 표현하였으나 완벽하게 외형을 표현하지 못했습니다.
BigConvFM의 경우 외형과 색은 잘 표현하였으나 성능 자체는 ConvFM 보다 낮았습니다. (실험 4 참고)
실험 4 PCA 2D and 3D
ConvFM
2D precision 0.8308631211857018 | recall 0.9901298701298701 | f1 0.9035316425693292
3D precision 0.8312990409764603 | recall 0.9906493506493507 | f1 0.9040056885517895
BigConvFM
2D precision 0.7871205906480722 | recall 0.9968831168831169 | f1 0.8796699518679808
3D precision 0.7880903490759753 | recall 0.9968831168831169 | f1 0.8802752293577982
목차
결론
오토인코더를 학습시킨 후 인코딩된 이미지 임베딩을 이용하여 클러스터링을 하였습니다. 이미지 임베딩을 PCA로 차원 축소하고 Kmeans로 클러스터링을 진행하였습니다.
레이어를 깊게 쌓지 않은 2-layer의 feature map channel이 점점 늘어나는 CNN 구조가 제일 성능이 좋았습니다. 또, PCA를 2D보다는 3D로 했을 때가 더 성능이 좋았지만, 눈에 띄는 차이는 없었습니다.
최고 성능은 다음과 같습니다.
이는, recall 점수가 높다는 점에서 대부분의 실사 이미지는 모두 클러스터링 하지만 precision 점수가 80점대라는 것은 적지 않은 수의 일러스트 이미지도 실사로 분류해버렸다는 뜻입니다.
마지막으로, 실제로 RGB 값에 대해서만 PCA를 해도 0.87의 f1 score를 얻다보니까(실험 서순을 RGB 부터 해봤어야 했는데,, 슬프네요) 오토인코딩을 실제로 할 필요가 있는가에 대해서 저는 할 필요가 없지 않나라고 결론을 내리게 된 것 같습니다. 지금부터는 모델보다는 raw 이미지 자체를 어떻게 활용할 것인가에 대해 더 고민해봐야 할 것 같습니다.
실험 내용
실험 1 이미지 임베딩
FC
는 인코더가 3-layer로 이루어져 있으며 변화하는 channel은 resize*resize, 512, 256, 128로 신경망이 구성됩니다.Conv
는 인코더가 2-layer로 이루어져 있으며 변화하는 channel은 3, 16, 4로 컨볼루젼됩니다.ConvFM
는 16*16*32 = 8192로 구성되기 때문에 이와 최대한 공정하게 맞추기 위해 52*52*3 = 8112로 구상하였습니다. 따라서 이미지 resize는 52입니다.실험 2 CNN Feature map size
Let Feature map size bigger than initial channel size
ConvFM
은 인코더가 2-layer로 이루어져 있으며 변화하는 channel은 3, 16, 32로 컨볼루젼됩니다.실험 3 CNN Layer depth
Let CNN Layers deeper
DeepConvFM
은 인코더가 16-layer로 이루어져 있으며 변화하는 channel은 3, 16, 32, 64, 128, 256, 512로 컨볼루젼됩니다. VGG-16의 레이어를 모방했습니다.SmallDeepConvFM
은 인코더가 5-layer로 이루어져 있으며 변화하는 channel은 3, 16, 32, 64, 128, 256로 컨볼루젼됩니다.BigConvFM
은 인코더가 3-layer로 이루어져 있으며 변화하는 channel은 3, 16, 32, 64로 컨볼루젼됩니다.실험 4 PCA 2D and 3D
ConvFM
BigConvFM
코드
스케치 영상 검색 위한 분류기/experiments/01_clustering.ipynb