Visualizing and Understanding Convolutional Networks(2013)
0. Abstract
- AlexNet 이후 `Large Convolutional Network` 모델들이 ImageNet bechmark에서 인상적인 classification 성능을 보임
- 그러나 왜 성능이 좋은지, 어떻게 성능을 개선시켰는지에 대해선 명확하게 이해하지 못함
- 본 논문에선 Large Convolutional Network의 중간에 있는 feature layers의 기능과 classifier의 작동 과정을 확인하는 새로운 시각화 기법을 제안
- 해당 visualization 기술이 diagnostic role을 수행하여 AlexNet보다 ImageNet benchmark에서 더 우수한 성능을 보임
- `softmax classifier`가 재훈련될 때 Caltech-101과 Caltech-256 데이터셋에 대한 현재의 SOTA 모델보다 더 우수한 성능을 보여 본 논문의 모델이 다른 데이터셋을 잘 일반화시킴을 보임
1. Introduction
- `AlexNet`은 ImageNet 2012 benchmark에서 매우 인상적인 결과를 보여주었고, convnet 모델에 대한 관심을 높인 몇 가지 요인 존재
- 수백만 개의 labeled examples로 구성된 거대한 training sets의 이용가능성
- 거대한 모델을 실용적으로 훈련하게끔 하는 강력한 GPU 활용
- `Dropout`과 같은 더 나은 모델 regularization 전략
- 이러한 고무적인 진전에도 불구하고, 복잡한 모델의 내부 작동과 어떻게 좋은 성능을 달성했는지에 대해서는 많이 알 수 없음
- 본 논문에서는 모델의 모든 layer의 개별 feature maps을 작동시키는 `input stimuli`를 드러내는 시각화 기법을 제시
- 이러한 기법은 훈련 과정에서 features의 변화 과정을 관찰하고, 모델의 잠재적인 문제를 진단할 수 있게 함
- 해당 시각화 기법은 `multi-layered Deconvolutional Network(deconvnet)`을 활용하여 `feature activations`를 `input pixel space`로 project
- input image의 어떠한 부분이 classification에서 중요한 역할을 수행하는지 확인하기 위해 일부를 가려 classifier output을 분석
- AlexNet의 아키텍쳐에 위의 내용들을 포함시켜 ImageNet에 대해 더 나은 결과를 보여주는 모델 아키텍쳐를 발견
- 이후 상단의 softmax classifier를 재학습시켜 다른 데이터셋에 대한 해당 모델의 `generalization` 능력을 확인
2. Approach
- standard fully supervised convnet 모델을 활용
- color 2D input image $x_i$를 일련의 layers를 통해 다양한 $C$ classes에 대한 probability vector $\hat{y}_i$에 매핑
- 각 layer는 다음으로 구성
- 학습된 필터를 통해 이전 layer output과의 `convolution` 연산(첫 번째 layer의 경우 input image와의 convolution 연산)
- `rectified linear function`을 통해 전달($relu(x) = max(x,0)$)
- local neighborhoods에 대한 `max pooling`(optional)
- feature maps을 거쳐 정규화를 거치는 `local contrast operation`(optional)
- 네트워크의 상위 몇 계층은 fully-connected layers이며 최종 layer는 `softmax classifier`
- $N$개의 large labeled images set $\left\{x,y \right\}$를 통해 모델을 훈련
- $y_i$는 true class를 포함한 discrete variable
- $\hat{y}$와 $y_i$를 비교하기 위해 image classification에 적합한 `cross-entropy loss function`을 사용
- convolutional layers의 filters, fully-connected layers의 weight, biases 등은 네트워크 전체에 걸쳐 파라미터에 대한 loss의 미분을 `backpropagating`하며, `stochastic gradient descent`를 통해 업데이트하여 학습
2.1 Visualization with a Deconvnet
- convnet의 작동 원리를 이해하기 위해선 중간 layer의 feature activity를 해석해야하기 때문에 이러한 activity들을 input pixel space로 되돌리는 방식을 제안
- feature map 내에서 주어진 activation이 어떠한 input pattern에서 비롯되었는지를 확인
- `Deconvolutional Network(deconvnet)`을 활용
- deconvnet은 convnet과 동일하게 `filtering`과 `pooling`으로 구성되지만 이와 반대로 작동
- pixel을 feature에 매핑하는 것이 아닌 feature를 pixel에 매핑
- deconvnet의 원논문에서는 이를 unsupervised learning을 위한 방법으로 제시했지만, 본 논문에선 이미 학습된 convnet의 검사 용도로만 활용되며, 학습 능력을 사용하진 x
- convnet을 검사하기 위해 convnet의 각 layer에 deconvnet을 붙여 image pixel로 돌아가는 연속된 경로 제공
- 먼저 input image가 convnet에 주어지고, layer 전체에서 feature를 계산
- 주어진 convnet activation을 확인하기 위해 layer의 다른 모든 activation은 0으로 설정하고, 생성된 feature map을 해당 layer에 부착된 deconvnet layer에 input으로 전달
- 선택된 activation의 원인이 된 하위 layer의 activity를 `unpool`, `rectify`, `filter`를 거쳐 reconstruct
- reconstruction을 생성하는 과정(projection)에서는 convnet의 max pooling 과정에서 생성된 switch setting을 사용
- 이러한 switch setting은 주어진 input image에 고유하기 때문에, 한 번의 activation을 통해 얻어진 reconstruction은 원본 input image의 작은 조각과 유사
- reconstruction은 feature activation에 대한 기여도에 따라 가중치가 부여된 구조
- input image의 어떤 부분이 모델 훈련 과정에서 중요하게 작용했는지를 확인 가능
- projection 과정은 generative process를 포함하지 않기 때문에 모델에서 추출된샘플이 아님
Unpooling
- convnet의 max pooling 연산은 비가역적(non-invertible)이기 때문에 역함수를 계산할 수 없지만, 각 pooling 영역 내 최대값들의 위치를 `switch` 변수에 기록하여 대략적인 inverse를 얻을 수 있음
- deconvnet의 `unpooling` 연산에서는 switches를 사용하여 상위 layer의 reconstructions를 stimulus의 구조를 보존하면서 적절한 위치로 배치시킴
Rectification
- convnet은 feature map이 항상 양수이게 해주는 `ReLU` 비선형 함수를 사용
- 각 layer의 적절한 feature reconstructions 또한 항상 양수여야 하기 때문에 ReLU 사용
- 음수 값에 대한 복원은 불가능한데, 이는 결과에 큰 영향을 미치지 않음
Filtering
- convnet은 학습된 filter를 사용하여 이전 layer의 feature map에 대한 convolution 연산을 수행
- deconvnet에서는 동일한 filter의 transposed version을 사용
- 이전 layer의 ouput이 아닌 `rectified map`에 적용
- 실제로는 각 filter를 수직, 수평으로 뒤집은 형태
💡 transposed convolution
: 처음 `transposed convolution`은 input data를 abstract spatial representation으로 compress하기 위해 convolution 연산을 사용한 이후, 이를 다시 decompress하는 경우에 사용되었다. 그 예시로 `convolutional auto-encoder`의 복원 과정과, `semantic segmentation` 분야를 들 수 있다.
transposed convolution 방법이 전통적인 upsampling 방법론들보다 훨씬 유연하게 활용이 가능한 것은 사실이지만, 먼저 최적의 kernel weight를 학습하지 않으면 이를 적용하지 못한다는 단점이 있다. 또한 output에 `checkerboard artifacts`가 발생할 수 있다. 여기서 checkerboard artifacts란, 다음 그림과 같이 이미지를 매우 가깝게 보는 경우 checkerboard 패턴이 보이는 것을 말한다.
transposed convolution의 과정은 다음과 같다. 이는 실제 커널을 수직, 수평으로 flip한 필터를 사용하는 convolution 연산이라고 생각할 수 있다. 아래 그림에서는 커널 내 다크 블루 색상이 본래 오른쪽 하단에 있었는데, 연산 과정에서는 왼쪽 상단으로 옮긴 것을 확인할 수 있다.
3. Training Details
- ImageNet classification에 사용된 `AlexNet`의 구조와 비슷하지만 2개의 GPU를 사용하여 학습하기 위한 `sparse connection`을 사용하지 않고, `dense connection`을 사용
- ImageNet 2012 training set(1.3M images, 1000개의 classes)을 통해 훈련
- 각 RGB image들에 대한 전처리
- 가장 작은 dimension을 256으로 resizing
- (256 x 256) 크기로 centor crop
- 모든 images에 대한 per-pixel mean을 계산하여 pixel 값을 빼 강도 조절
- 마지막으로 (224 x 224) 크기의 sub-crop 10개 사용(corners + center with(out) horizontal flip)
- `stochastic gradient descent`를 통해 파라미터 업데이트
- mini batch size : 128의
- learning rate : $10^{-2}$
- validation error가 정체되는 경우 수동으로 learning rate 조정
- momentum : 0.9
- fully-connected layers에 `Dropout(p=0.5)` 적용
- 모든 가중치는 $10^{-2}$로 초기화되며, bias는 0으로 설정
- 1,2번째 layer에서는 visualization을 수행하는데, 이를 통해 몇 개의 filter가 지배적인 것을 확인 가능
- 이를 해결하기 위해 convolution layer에서 각 filter의 RMS 값이 fixed radius $10^{-1}$을 초과하는 경우 해당 fixed radius로 `renormalize`
- input images가 대략 [-128, 128] 범위에 있는 경우(특히 모델의 첫 번째 layer) 중요
- AlexNet과 마찬가지로 training set의 개수를 늘리기 위해 각 training example에 대해 crop과 flip을 적용
- 하나의 GTX580 GPU를 통해 70 epochs까지 훈련한 이후 중단
4. Convnet Visualization
- deconvnet을 활용해 ImageNet validation set의 feature activation 시각화
Feature Visualization
- 모델이 1번 완전히 훈련이 끝난 후의 feature visualization으로, 주어진 feature map에 대한 가장 강력한 activation 9개를 나타냄
- 각 layer에서의 projection은 네트워크의 계층적 특성을 나타냄
- Layer 2 : input image의 코너 부분이나 엣지 및 색상 등 단순한 부분을 나타냄
- Layer 3 : 좀 더 복잡한 부분, 즉 유사한 질감 표현 등을 나타냄(Row 1, Col 1에서의 mesh pattern 등)
- Layer 4 : 상당한 편차가 있지만 좀 더 class-specific한 부분을 나타냄(개의 얼굴, 새의 다리 등)
- Layer 5 : 위치나 자세의 변화를 포함하는 전체적인 객체를 나타냄
Feature Evolution during Training
- 주어진 feature map을 pixel space로 project하는 과정에서 가장 강력한 activation의 훈련 과정에서의 변화
- 이미지 내에서의 갑작스러운 변화는 가장 강력한 activation이 생성되면서 발생
- [1,2,5,10,20,30,40,64] epoch에서 각 layer의 변화를 나타낸 것으로, 하위 layer에서는 비교적 적은 epoch만에 수렴하는 것처럼 볼 수 있지만, 상위 layer의 경우 40-50 이상의 많은 epoch를 학습해야 수렴
- 모델이 완전히 수렴할 때까지 충분한 학습이 필요함을 입증
Feature Invariance
- `Feature Invariance`란, input image가 변화하여도 모델의 output은 크게 변하지 않는 정도를 말함
- 5개의 샘플 이미지에 대해 위치 이동(translation), 크기 변환(scaling), 회전 변환(rotation)을 수행한 이미지를 통해 모델의 가장상단 및 하단인 layer 1와 layer 7 각각의 feature vector와 변환을 하지 않은 이미지에 대한 feature 간의 `Euclidean distance`을 확인
- a2~c2는 layer 1, a3~c3는 layer 7에 대하여 변환을 하지 않은 이미지의 feature와의 Euclidean distance를 나타냄
- a4~c4는 이미지가 변환되었을 때 각 이미지에 대한 실제 레이블에 대한 probability를 나타냄
- layer 1에서는 색상, 엣지 등 단순한 영역을 나타내기 때문에 작은 변화에도 큰 차이가 발생하지만, 이후 점점 그 영향이 작아짐
- 모델의 output은 translation과 scaling에서는 비교적 안정적이지만, rotation에서는 불안정
- 회전 대칭(rotational symmetry)이 있는 entertainment center 등의 객체는 비교적 안정적임으로 제외
4.1 Architecture Selection
- 훈련된 모델에 대한 시각화를 통해 기존 AlexNet에 존재하는 첫 번째 layer의 두 가지 문제점을 발견((b) & (d))
- 첫 번째 layer filter는 중간 frequency information이 거의 없이 매우 높거나 낮은 frequency information이 혼합된 형태
- stride의 크기가 4로 너무 커 2nd layer의 시각화에서 aliasing artifact를 보임(흐릿하게 특징을 잘 못잡아냄)
- 위에서 발견한 문제점을 해결하기 위해 AlexNet의 1st layer의 구조 변경
- 1st layer의 filter size를 (11 x 11)에서 (7 x 7)로 변경
- convolution 연산의 stride 크기를 4에서 2로 감소
- 새로운 아키텍쳐를 통해 1st, 2nd layer feature에 더 많은 정보를 포함시켰으며((c) & (e)), 결과적으로 분류 성능을 향상시킴
4.2 Occlusion Sensitivity
- 이미지 분류 모델이 이미지 내 객체의 위치를 실제로 파악하는지, 혹은 주변의 context를 통해 분류하는 것인지 확인하기 위해 input image의 다양한 부분을 grey square로 가린 후 분류 결과를 확인
- input image 내 객체가 grey square에 의해 가려지면 layer 5(fully-connected layer 이전 마지막 layer)의 feature map의 activity와 올바른 클래스를 예측할 확률이 모두 현저히 떨어져 모델이 객체를 잘 localize하는 것을 확인
- 첫 번째 포메라니안 이미지의 예시에서는 개의 얼굴을 가릴 경우 feature map의 activity도 가장 덜 활발하며(파란색으로 표시), 올바른 클래스를 예측할 확률도 떨어짐(파란색)
4.3 Correspondence Analysis
- 딥러닝 모델은 기존 recognition 방법들과 다르게 서로 다른 이미지에서 특정 객체 부분 간의 `correspondence`를 설정하는 명시적인 메커니즘이 없음
- 그러나 딥러닝 모델이 이를 암묵적으로 계산할 수 있다는 가능성이 존재
- 정면을 보고 있는 형태로 그린 개 사진 5장의 오른쪽 눈, 왼쪽 눈, 코를 공통적으로 가린 후 분류 수행
- $i$번째 이미지에 대한 `difference vector` $\epsilon ^l_i$ 계산
- $x^l_i$ : original image의 layer $l$에 대한 feature vector
- $\tilde{x}^l_i$ : occluded image의 layer $l$에 대한 feature vector
$$ \epsilon^l_i = x^l_i - \tilde{x}^l_i $$
- 5개의 이미지 pairs $(i, j)$에 대한 `consistency`
- $H$ : Hamming distance
$$ \Delta_l = \sum_{i,j=1, i\neq j}^{5}H(sign(\epsilon^l_i), sign(\epsilon^l_j)) $$
- $\Delta$ 값이 낮다는 것은 masking으로 인한 변화가 feature representation을 동일하게 변화시켜 일치도가 높음을 의미
- 서로 다른 이미지에 대해서 같은 부분에 대해 일치도가 높은 feature representation을 생성할 경우, 모델이 해당 부분에 대한 특징을 잘 파악한다는 것을 의미
- $l = 5, 7$ layer에서 얼굴의 세 부분(오른쪽 눈, 왼쪽 눈, 코)와 random part에 대한 $\Delta$ score 비교
- layer 5의 경우 랜덤 파트를 가린 것과 비교했을 때 score가 낮아 모델이 어느정도 correspondence를 파악함을 의미
- layer 7의 경우 score가 모두 비슷한데, 이는 상위 layer에서 눈, 코 같은 자세한 부분보다는 개의 종을 구별하기 때문으로 보임
5. Experiments
5.1 ImageNet 2012
- 1000개의 카테고리에 대한 1.3M/50k/100k개의 training/validation/text 데이터
- AlexNet의 1st layer에 대한 구조 수정을 통해 ImageNet 데이터셋에서 더 나은 성능을 보임
6. Discussion
- CNN 모델 내 이루어지는 activity에 대한 새로운 시각화 방법을 제안하여 CNN을 통해 추출한 features가 랜덤하고, 해석 불가능한 패턴이 아님을 보임
- 오히려 계층이 올라갈수록 `compositionality`, `increasing invariance`, `class discrimination` 등 직관적으로 바람직한 특성들이 나타남
- 본 논문에서 제시한 visualization 기법은 모델이 더 나은 결과를 얻기 위한 문제 해결 과정에도 사용 가능함
- AlexNet의 ImageNet 2012 데이터셋에 대한 결과를 실제로 개선시킴
- classification을 위해 훈련된 모델이 `broad scene context`만 사용하는 것이 아니라 이미지의 `local structure`에도 매우 민감함을 입증
- 네트워크의 최소한의 깊이를 확보하는 것이 모델의 성능에 중요함을 확인
- ImageNet을 통해 훈련된 모델이 다른 데이터셋을 잘 일반화할 수 있는 방법을 제시
Comment
💡 CNN 모델은 convolution filter를 기반으로한 convolution 연산과 이를 통해 생성된 feature map의 요약 과정으로 볼 수 있는 pooling 등을 거쳐 이미지에 대한 특징을 학습하고, 이를 통해 분류를 수행하는 모델이다. 그러나 AlexNet이 ImageNet 데이터셋에 대하여 상당히 좋은 성능을 보여주었음에도 불구하고, 왜 좋은 성능이 나타나는지 내부 작동 과정에 대해선 알 수 없었다. 이러한 문제점을 해결하기 위해 'ZFNet'은 기존의 'AlexNet' 모델에서의 pooling, convolution, activation 등을 반대로 수행하는 deconvnet 모델을 활용하여 이미지 분류 과정을 시각화하고, 이를 통해 첫 번째 layer에서의 문제점을 발견해 간단한 모델 아키텍처 수정으로 분류 성능을 향상시켰다.
ZFNet의 의미는 결국 CNN 모델의 중간 layer들이 어떤 특징을 학습하고, 어떤 과정을 거쳐 이미지 분류를 수행하는지를 확인할 수 있다는 점에 있다. 또한 이러한 시각화 방법을 잘 사용하여 CNN 모델이 수행해야하는 문제를 해결하기 위해 잘 작동하고 있는지 또한 확인할 수 있다.
Reference
[1] https://medium.com/apache-mxnet/transposed-convolutions-explained-with-ms-excel-52d13030c7e8