안녕하세요, 오늘 읽은 논문은 Convolutional-Recursive Deep Learning for 3D Object Classification 입니다.
3D Sensing 기술의 발전으로 이미지의 색상 RGB와 Depth 정보를 추출할 수 있어, 이 둘을 활용하여 object recognition 성능을 향상시킬 수 있습니다. 해당 논문은 RGB-D 이미지를 분류하기 위해, CNN과 RNN을 활용합니다. CNN은 edge와 같은 low-level 이동 불변 특성을 추출하고, 고차원 특징을 구성하기 위해 이 저차원 특징을 RNN에 전달합니다.
위 그림을 살펴보면 RGB, Depth image에서 각각 특징을 추출하며, 마지막에 결합한 후 classification을 합니다.
Convolutional-Recursive Neural Networks
해당 논문은 다음과 같은 과정으로 classification이 이루어집니다.
1. Unsupervised Pre-training of CNN Filters
우선, RGB, Depth 두 set으로부터 무작위 patch를 추출합니다. 각 patch는 normalize와 whiening을 거쳐서 전처리 됩니다. 전처리된 patch는 k-mean를 수행하여 cluster 됩니다. 아래 그림은 clustering된 filter 결과입니다.
2. Single CNN Layer
RNN에서 feature를 통합하기 위해서, CNN의 이동 불변 특성을 활용합니다. single layer CNN은 conv, ReLU, LCN로 이루어져 있습니다. LCN은 AlexNet에서 제안되었으며, 후속 연구에서 큰 효과가 없다는 것으로 밝혀져 현재는 사용하지 않는 방법입니다. 각 이미지에 cnn layer를 거쳐서 k*r*r 차원의 행렬을 생성합니다. k는 filter 수이고, r은 입력 이미지에서 conv 연산을 거친 후의 피쳐맵 크기입니다. 이 절차를 color, depth 이미지 각각에 적용합니다.
3. Fixed-Tree Recursive Neural Networks
트리 구조로 동일한 신경망을 반복적으로 적용하여, 계층적인 특징 표현을 학습합니다. 트리의 마지막 노드는 K차원 벡터이며, 마지막 노드의 개수는 r^2개가 존재합니다.
부모가 k x b x b 차원을 갖고 있으면 자식은 k x b^2 x b^2 차원을 갖습니다. 그리고 가중치 W는 동일한 가중치를 사용합니다. 만약 부모가 128x3x3 차원을 갖고 있으면, 자식은 128x9x9 차원을 갖습니다. 여기서 128x3x3 차원 벡터에 f(w(x1~x3)) 연산을 거쳐서 128x3x1 차원을 생성합니다. 3개의 블락이 합쳐져서 123x9x9가 됩니다.
트리 구조를 거쳐서 최종적으로 128x1x1 벡터가 생성됩니다.
4. Multiple Random RNNs
128x1x1 차원의 벡터를 N개의 RNN에 전달합니다. 128 차원이 N개의 차원으로 축소됩니다. 이 N개의 차원 벡터는 softmax를 거쳐서 image를 분류합니다.
참고자료
[2] https://papers.nips.cc/paper/2012/file/3eae62bba9ddf64f69d49dc48e2dd214-Paper.pdf