juuuding

[paper review] ZFNet_Visualizing_Understanding_CNN 본문

논문 리뷰/컴퓨터비전

[paper review] ZFNet_Visualizing_Understanding_CNN

jiuuu 2024. 8. 2. 17:35

※ 혼자 읽고 정리한 글이라 틀린 내용이 있을 수 있습니다.

 

[Visualizing_Understanding_CNN (ZFNet)]

https://arxiv.org/pdf/1311.2901

 

 

💡Introduction

 합성곱 신경망은 얼굴 인식, 숫자 인식 등에 뛰어난 성능을 보였다. 이 뛰어난 성능을 보인데에는 큰 훈련 세트, 강력한 GPU로 인한 큰 모델 생성, dropout과 같은 새로운 regularization 전략 등의 역할도 큰 비중을 차지하였다.

이러한 발전들에도 불구하고 이 모델의 내부 연산,  과정, 어떻게 좋은 성능을 내는지에 대한 이해도가 부족하다. 이 점을 해결하기 위해 visualization을 하며 이 시각화는 multi-layered Deconvolutional Network를 사용한다. 또, 부분적으로 입력 이미지를 가려서 그에 대한 결과를 가지고 민감도 분석을 시행한다. 

 이 도구들을 이용하여 ImageNet에서 Krizhevsky et al. (2012)의 아키텍처와 다른 아키텍처를 능가하는 방법을 발견하였고, 소프트맥스 분류기를 재학습시켜 다른 데이터셋에 대한 일반화 능력을 탐구하였다.

시각화 기법을 사용하여 모델의 성능을 향상시켰다..

 

1. Related work

 신경망 작동을 이해하기 위해 특징을 시각화하는 것은 주로 픽셀 공간으로 투영이 가능한 첫번째 층에 한정됨.

 

1. Erhan et al. (2009)

 유닛의 활성화를 최대화하기 위해 이미지 공간에서 그래디언트 하강법을 수행하여 각 유닛에 대한 최적 자극을 찾았다. 하지만 이는 신중한 초기화가 필요하고 유닛의 불변성에 대한 정보를 제공하지 않는다. 즉, 유닛이 변형된 입력에서도 동일하게 반응하는지에 대한 정보를 제공하지 않는다는 것이다. 

 

2. Le et al. (2010)

 주어진 유닛의 헤시안을 optimal response 주위에서 수치적으로 계산하여 불변성에 대한 통찰을 제공하는 방법을 보여주었다. 하지만 이는 더 높은 층에서 불변성이 매우 복잡하여 단순한 이차 근사로는 제대로 포착되지 않았다.

 

3. Donahue et al. (2013)

 모델의 더 높은 층에서 데이터 셋 내의 강한 활성화를 일으키는 패치를 식별하는 시각화를 보여준다.

 

4. ZFNet

 불변성에 대한 non-parametric 관점을 제공하고 특징 맵을 활성화하는 패턴을 보여준다. 여기서 시각화는 입력 이미지를 크롭하고 top-down projection을 하여 특정 특징 맵을 자극하는 각 패치의 구조를 보여준다.   

 

 

 

💡 Approach

 여기서는 일반적인 fully supervised convnet model을 사용한다. 우선 모델은 2D 이미지를 입력으로 받고 이에 대한 C 클래스의 확률을 결과로 출력한다. 각 층은 다음 단계들로 구성되어 있다.

 

① 이 전 층의 출력(1계층은 입력 이미지)에 대한 합성곱 레이어 + 학습된 필터

② relu 활성화 함수

③ [선택] max pooling 

④ [선택] local contrast operation (normalization)

 

 이렇게 이어진 층에다 끝 쪽 층에는 conventional fc network가 있고, 마지막 층에는 softmax classifier이 있다. 

 

 

 모델은 N개의 라벨링 된 입력 이미지와 크로스 엔트로피 손실함수를 사용한다. 네트워크의 매개변수는 역전파 과정을 통해 기울기를 계산하여 경사 하강 방식으로 업데이트 된다. 

 

1. Visualization with a Deconvnet

 일반적인 convnet 방식(픽셀 -> 활성화)과 반대로 활성화를 입력 픽셀 공간에 매핑하여 어떤 입력 패턴이 특징 맵에서 주어진 활성화를 유발하는지 알아낼 수 있다. convnet에서 사용하는 필터링, 풀링과 같은 요소들을 사용하되 이를 거꾸로 사용하여 특징을 픽셀로 매핑한다. deconvent은 비지도 학습이며, 이는 어떠한 학습 capacity에 사용되지 않고 이미 학습된 convnet을 조사하는데만 사용된다. 

 deconvnet은 convnet의 각 층에  붙어 조사를 진행한다. 주어진 convnet의 활성화를 조사하기 위해 층 안의 모든 활성화를 0으로 셋팅하고 특징 맵을 부착된 deconvnet의 입력으로 넘긴다. 그리고 이어서 ① unpool -> ② rectify -> ③ filter to reconstruct the activity를 하고, 픽셀 공간에 도달하기 전까지 이를 반복한다. 

 

 

① Unpooling

 원래 pooling은 반대 과정이 없지만 여기서는 최대 값의 위치를 기록하며 풀링의 대략적인 inverse를 얻는다. 이때 최대 값의 위치는 switch에 기록되어 있으며 이것을 사용하여 재구성 값을 적절한 위치에 배치한다.

 

② Rectification

 convnet은 활성화 함수로 relu를 사용하여 특징 맵을 항상 양수로 유지한다. 따라서 deconvnet을 할 때도 이러한 특성을 유지하여 유효한 특징 맵을 만들기 위해 relu를 사용한다. 

 

③ Filtering

 convnet은 이전 층에 합성곱을 하기 위한 학습된 필터를 사용한다. 이것을 거꾸로하기 위해 deconvnet에서는 같은 필터의 transposed version을 recitified maps에 사용한다. 여기서 transpose는 각 필터를 수직 / 수평으로 뒤집는다는 의미다. 

 

언풀링에 사용된다고 한 스위치는 특정 입력 이미지에 특화되어 있어, 하나의 활성화로부터 한 재구성은 원래의 입력 이미지 조각과 닮아있으며 구조는 특징 활성화에 기여한 정도에 따라 가중치가 부여된다. 모델은 차별적으로 학습되기 때문에 모델은 입력 이미지의 어느 부분이 분류 작업에 중요한지를 보여준다. 이러한 방식으로 상위층에서 하위층으로 projection을 진행하는데, 이는 보다시피 모델로부터 샘플링된 것이 아니라 기존의 활성화와 스위치 설정을 이용하여 입력 이미지의 특정 부분을 재구성하는 것이다.  

 

 

 

💡Training Details

 여기서 시각화를 할 convnet은 AlexNet과 비슷하지만 layer 간 연결에서 한가지 차이점이 있다. AlexNet에서는 두가지 GPU를 사용하여 계층 간의 sparse connections을 사용하지만, 여기서는 계층 간의 모든 뉴런이 연결되어 있는 dense connection을 사용한다. 

 다음은 모델의 세부 사항이다. 

 - training set: ImageNet 2012

 - preprocess: RGB channel(0-256), crop(256*256), subtracting mean, 10 sub-crops(224*224)

 - stochastic gradient descent: batch size(128), learning rate(10^-2), momentum(0.9)

 - validation error가 안정지대에 안착할 때마다 learning rate 증가

 - Dropout(0.5) in fc-layer

 - Initialization: W(10^-2), b(0)

 

 훈련 중 첫번째 필터를 시각화하면 일부 필터가 지배적인 현상이 나타나는데, 이는 특정 필터들이 너무 강하게 활성화되어 다른 필터들의 역할이 상대적으로 약해지는 문제를 의미한다. 이를 해결하기 위해 RMS(Root Mean Square) 값이 특정 임계값(10^-1)을 초과하는 필터를 고정 반지름으로 renormalization 한다. 이렇게 함으로써 각 필터의 RMS 값을 고정하여 필터들의 활성화 정도를 균일하게 맞춘다. 참고로 여기서 입력 이미지의 평균 픽셀 값 범위는 약 [-128,128]이다. 

layer1 - 흰색 패치가 매우 지배적

RMS: 각 필터의 값을 제곱한 후 평균을 구하고, 다시 제곱근을 취하여 계산 -> 필터의 에너지 측정
고정 반지름(fixed radius): 필터 값을 정규화할 때 사용하는 기준 값. 
ex. RMS=0.15 -> 0.1/0.15 = 2/3 이므로, 필터의 각 요소를 2/3배로 줄여 해당 필터의 RMS 값을 0.1로 맞춤.

 

 훈련할 때는 sub-crop과 flip 방식으로 증강 기법을 사용했으며 GTX580 GPU에서 12일 동안 70 에폭으로 진행하였다. 

 

 

 

💡Convnet Visualization

 이제 deconvnet을 이용해서 ImageNet의 validation set에 대한 특징 활성화를 시각화해보겠다. 

 

① Feature Visualization

 다음은 훈련을 마친 후 모델로부터 특징들을 시각화한 그림이다. 여기서는 top 9 활성화 위치들을 보여주었다. 픽셀 공간으로 각각 따로 투영하는 다른 구조들을 나타내는데, 이들은 입력 변형에 대한 불변성을 보여준다. 

 각 층의 투영은 특징의 계층적 본질을 나타낸다. 예를 들어 layer2은 단순한 특징인 edge/color 라면 layer3에서는 mesh pattern과 같은 복잡한 패턴, layer4는 얼굴, 다리 같은 더 구체적인 특징, layer5는 중요한 위치에 있는 전체적인 물체처럼 계층적으로 특징을 나타내게 된다.  

만약 layer2에 128개의 필터가 있다면 그 128개 중 랜덤하게 16개의 activation map을 뽑아 시각화를 한 것? 그리고 그 뽑힌 결과에서 16개 각각의 해당 map에서 가장 높은 활성화 값을 가지는 9개의 input 사진을 골라 시각화한 거인가? 이 과정/원리가 좀 헷갈린다..

 

② Feature Evolution during Training

 아래는 훈련 중 가장 강하 활성화가 픽셀 공간으로 투영되었을 때 진행 상황을 시각화한 것이다. 아래 층들은 몇 에폭 내에 수렴하지만, 윗 층들은 상당 수의 에폭 후에야 수렴한다는 것을 알 수 있다. 그렇기 때문에 모델이 완전히 수렴할 때까지 훈련을 지속해야한다. 

 

③ Feature Invariance

 다음은 이동, 회전, 크기 조정을 하며 변형한 샘플 이미지로, 변형되지 않은 특징에 비해 모델의 상위 층과 하위 층에서 특징 벡터가 어떻게 변화하는지를 보여준다. 작은 변환은 첫번째 층에서 큰 영향을 미치지만, 상위 층에서는 영향을 덜 미치며, 이동 및 크기 조정에서는 거의 선형적인 반응을 보이며 안정적인 모습을 보여준다. 반대로 회전 대칭을 가진 객체를 제외하고 회전은 변하는 양상을 띈다. 

 

1. Architecture Selection

 훈련 모델의 시각화는 모델의 연산에 통찰력을 주어 좋은 아키텍처를 선택할 수 있도록 해준다. 아래는 AlexNet과 이 논문에서 사용한 모델의 layer1, 2를 시각화하여 비교한 것이다. 우선 AlexNet은 layer1에 11*11 필터를 사용하고 layer2에 stride 4를 사용하였고, 여기서는 layer1에 7*7을 사용하고 layer2에 stride2를 사용하였다. 시각화 결과를 보면 할 수 있듯이 여기서 사용한 모델이 layer1, 2에서 더 많은 정보를 얻었고, 이것으로 여기서 우리의 모델이 AlexNet보다 분류 성능이 더 좋을 것이라는 걸 유추할 수 있었다. 이처럼 시각화 결과로 조금 더 나은 성능의 모델을 선택할 수 있다. 

 

2.Occlusion Sensitivity

 Q) 모델이 이미지 안 물체를 정말 식별하는 것인가? 아니면 주변 맥락을 사용하는 것인가?

 -> 물체를 가렸을 때 correct class의 확률이 낮아지는 결과를 가지고 모델이 이미지 안 물체를 정확히 식별하는 것을 알 수 있었다.  

 

 그리고 상위 합성곱 층의 특징 맵 시각화를 통해 모델이 이미지 구조와 일치하는 부분에 반응하는 것을 확인함으로써, 다른 시각화의 유효성을 검증한다. 

b - layer5의 한 필터로 a 사진의 일부분을 가려가며 사진에 대한 활성화 값을 나타낸 것, c - layer5의 한 필터로 4가지 input image에서 해당 필터를 적용한 시각화를 나타낸 것, d - occluder을 사진의 일부분에 여러차례 적용해가며 올바른 분류에 가장 영향을 많이 끼치는 부분을 시각화한 것, e - 해당 부분을 가렸을 때 분류기가 사진을 어떤 클래스로 분류하는지 나타낸 것

 

 첫번째 행을 예로 들자면 b,c를 보고 layer5 한 필터에서는 포메라니안 얼굴에 가장 강력한 활성을 보여 해당 필터에서는 포메라니안 얼굴을 인식하는 것을 알 수 있다. d,e에서는 분류기가 해당 사진을 포메라니안으로 분류하는데에는 얼굴 부분이 가장 중요한 것을 알 수 있는데, 사진에서 포메라니안 얼굴을 가렸을 때 분류기가 사진을 테니스 공으로 분류해버린다는 것을 확인할 수 있다. 

 또 세번째 행을 예시로 들어보자면 layer5의 한 feature map에서 사람의 얼굴에 가장 강력한 활성을 보여 이 필터에서는 사람의 얼굴을 인식하는 것을 확인 가능하다. 그리고 강아지 얼굴을 가렸을 때 다른 라벨로 분류한다는 사실을 보아, 분류기는 강아지 얼굴에 가장 민감하다는 것을 알 수 있다. 

 

3. Correspondence Analysis

 

 심층 신경망이 객체의 특정 부분들 사이 대응 관계를 계산할 수 있는 가능성을 계산해보았다. 여기서 대응 관계란 여러 이미지에서 동일한 객체의 동일한 부분들 사이 일관된 연결 관계를 의미한다. 예를 들어 얼굴1에서의 왼쪽 눈과 얼굴2에서의 왼쪽 눈이 동일한 위치, 특징으로 인식되는 것을 말한다. 이러한 대응 관계 계산을 위해 이미지의 동일한 부분을 가리고, 가린 이미지와 원본 이미지의 layer l에서의 특징 벡터 차이를 계산한다. ( ε^i_l = x^i_l - x̃^i_l , ^i_l과 x̃^i_l은 각각 원본 이미지와 마스킹된 이미지에 대한 층 l의 특징 벡터). 그러고 이 방식으로 관련된 모든 이미지 쌍 (i,j)의 특징 벡터 차이를 계산하여 차이 벡터 ε의 일관성을 측정한다. 

H: hamming distance

 여기서 결과 값이 작다면 가린 부분들의 일관성이 크다는 의미다. 즉 예를 들어보면 눈을 가렸을 때 delta값이 작다면 해당 층에서 각 이미지의 눈이 같은 특징으로 인식이된다는 것이다.  

 

 위 계산 방법을 이용하여 이미지마다 눈, 코, 랜덤 부분을 가려 delta 값(대응 관계 점수)을 계산해보았다.  layer5에서는 눈, 코 부분의 결과 값이 임의 객체 부분 결과보다 낮은데, 이는 layer5에서 눈, 코 부분들 사이의 대응 관계를 암묵적으로 확립함을 의미한다. 반대로 layer7에서는 눈,코 부분과 임의 부분의 결과가 비슷한데, 이는 layer7이 개의 품종을 구별하려 하여 더 높은 수준의 특징을 학습해 객체 분류 작업을 하려고 하기 때문일 수 있다. 

layer7에서는 객체 부분을 가리든 말든 이미지 인식에 별 차이가 없는 것.. 즉 이 계층에서는 해당 객체의 부분만을 보고 있는 것이 아니라는 의미
layer5에서는 개의 얼굴에서 눈,코와 같은 특정 부분(중간 수준)을 학습하려 하고, layer7에서는 이미지 안 객체 전체
(고수준)을 학습하려 하기 때문인 것 같다. 즉 낮은 계층에서는 어떤 부분 특징, 높은 계층에서는 전체적인 특징을 인식해 분류 작업을 수행하는 것.

 

 

 

💡Experiments

1. ImageNet 2012

 layer1에서 7*7 필터 사용하고 layer1,2에서 스트라이드 2를 사용함으로써 원래 아키텍처보다 성능을 더 높였다. 여러 모델을 겹랍하여 테스트 오류율 14.8%를 달성하였고, 이는 non-convnet 모델보다 훨씬 우수한 성능을 나타낸다. 

 

 AlexNet의 layer 크기를 조절 / 삭제하면서 에러율을 측정해보았다. fc 6,7 layer을 삭제했을 때 오류가 아주 조금 증가하였는데, fc layer에는 대부분의 매개변수가 있기 때문에 이는 놀라운 결과였다. 또, 중간 합성곱 레이어을 삭제했을 때도 별 변화가 크게 없었는데, fc 6,7과 중간 합성곱을 동시에 삭제하니 많은 에러율 상승이 있었다. 이는 신경망의 깊이가 성능에 중요한 역할을 한다는 걸 나타낸다. 

다음으로 fc layer의 크기를 바꾸었는데 별 변화가 없었다. 중간 합성곱층의 크기를 늘렸을 때는 꽤 많은 성능 향상이 있었다. 하지만 이 크기를 늘리면 fc layer의 크기를 같이 늘려 오버피팅을 초래하게 된다. 

 

2. Feature Generalization

 앞서 보았던 특징 추출 레이어의 능력을 다른 데이터셋에 일반화하는 실험을 진행한다. 이때 layer 수 17개의 훈련된 모델을 고정하여 사용하고 뒤 소프트맥스 분류기를 해당 데이터셋의 클래스 개수에 맞게 변경한다. 실험에서는 ImageNet에서 학습한 우리의 특징 표현과 다른 방법에서 사용된 수작업 특징을 비교한다. 특히 우리의 특징 표현과 수작업 특징은 Caltech, PASCAL 훈련 세트 이외의 이미지를 사용하여 설계되었다. 참고로 Caltech에 일부 ImageNet과 중복된 이미지가 있는데, 이는 normalized correlation을 사용하여 중복 이미지를 식별하여 훈련세트에서 제거하였다. 

 

① Caltech-101

 클래스당 15/30 개의 이미지를 골라 훈련하고, 클래스당 50개의 이미지를  골라 5 train/test folds로 정확도 평균을 측정하였다. 처음부터 학습된 모델은 성능이 좋지 않고 ImageNet 사전 학습된 모델은 성능이 뛰어나다.

 

② Caltech-256

 클래스 당 15/30/45/60 훈련 이미지를 선택하여 평균 정확도를 계산하였다. ImageNet 사전 학습된 모델은 최첨단 결과를 능가하며 처음부터 학습된 모델은 성능이 좋지 않다. 

 

 아래 그림에서는 one-shot 학습 환경을 탐구하는데, 우리의 사전 학습된 모델로는 Caltech-256 훈련 이미지 6장만으로도 훨씬 많은 이미지를 사용하는 방법들의 성능을 능가한다. 이는 ImageNet 특징 추출기의 강력함을 보여준다. 

 

③ PASCAL 2012

PASCAL은 전체 장면을 포함(이미지 안 여러 객체 포함)하는 이미지고 ImageNet을 그렇지 않기 때문에 우리의 평균 성능이 최고 성능보다 조금 낮다. 하지만 5개의 클래스에서 다른 모델을 능가하였다. 

 

 

3. Feature Analysis

 ImageNet에서 사전 학습된 모델의 각 층에서 특징이 얼마나 판별력 있는지 탐구한다. ImageNet 모델에서 유지되는 층의 수를 변경하고 상단에 SVM 또는 소프트맥스 분류기를 배치한다. 두 데이터셋 모두에서 모델의 층을 올릴수록 성능 향상이 되며, 이는 특징 계층이 깊어짐에 따라 점점 더 강력한 특징을 학습한다는 전제를 지지한다. 

 

 

💡Discussion

  • 시각화를 통해 모델 내부 특징 이해
  • occlusion 실험을 통해 모델의 local structure에 대한 민감도 확인
  • ablation study를 통해 네트워크 깊이의 중요성 밝힘
  • 다른 데이터셋에 대한 일반화 성능 평가하여 ImageNet에서 사전 훈련된 모델의 강력한 성능을 입증함

 

시각화를 통해 신경망의 원리/과정을 직관적으로 이해할 수 있어서 너무 재밌게 읽었다. 항상 low level -> high level 패턴을 인식한다고 이론적으로만 배웠는데, 이렇게 자세히 직접 눈으로 보며 확인할 수 있어서 좋았다. deconvolutional 과정을 직접 구현해보는 것도 흥미로울 것 같다.