> ## Content Index
> Fetch the complete content index at: https://sudormrf.run/llms.txt
> Use this file to discover other available public pages before exploring further.

# Weakly supervised Learning으로 Object localization하기
- URL: https://sudormrf.run/2016/04/10/object-localization-with-weakly-supervised-learning/
- Published: 2016-04-10T06:00:15.000Z
- Updated: 2016-04-10T07:25:42.000Z
- Author: Junho Cho
- Tags: Detection, Computer Vision, Deep Learning, #Import 2026-10-24 03:36

공유하고자하는 논문의 제목은

## Learning Deep Features for Discriminative Localization

Bolei Zhou, Aditya Khosla, Agata Lapedriza, Aude Oliva, Antonio Torralba  
Computer Science and Artificial Intelligence Laboratory, MIT

논문의 데모는 "[여기](http://places.csail.mit.edu/demo.html?ref=sudormrf.run)"서 쉽게 해볼 수 있다.  
데모의 내용을 풀이하자면 먼저 처음엔 scene label로 태깅되어 있는 데이터로 Weakly supervised learning을 한 CNN을 학습시킨다. 그리고 아래 사진을 input으로 넣어준다면,  
![](https://sudormrf.run/content/images/2016/04/demo.png)  
이 이미지가 분류되는 scene classs는 artstudio이며 이것이 어떻게 추론되었는지를 Class Activation Map으로 위 사진처럼 보여(visualize)준다.

"Class" Activation Map이란 이름의 의미는, 이 이미지가 만약에 Top-2 class인 artgallery라고 추론한 이유도 visualization이 가능하기 때문이다. **즉 Class마다 Activation map을 볼 수 있다.**

결국 제목은 최대한 쉽게, image label로 object detection이 가능하다를 검증한 논문이다.

내가 NeuralArt에 관심을 가지면서 보았던 *Understanding Deep Image Representations by Inverting Them , CVPR2015* 같은 논문에서는 CNN에 encoding 된 visual information을 CNN을 통과시킨 feature map에서 inverting 시킴으로써 분석해본다. 예를들어서  
![](https://sudormrf.run/content/images/2016/04/understanding-cnnrepresentation.png)  
각각 convolution layer[\[1\]](#fn1)의 CNN feature map에서 원래 input image를 복원한다. 하지만 이건 CNN feature에 어떤 정보가 들어있는지를 보는 논문이었고, 지금 소개하는 논문은 어떤 feature map이 activation 되는지를 보여주는 것으로 정리할 수 있다.

논문의 결과를 간단히 옮기면  
![](https://sudormrf.run/content/images/2016/04/result2.png)  
이렇게 되는데. 간단히 설명하자면, Dome이라고 태그되어 있는 이미지가 palace로 prediction 될 때의 Class Activiation Map (이제 CAM이라 줄여쓰겠다.), dome, church ... 등으로 prediction 될 때 각각 CAM을 보여준 것이다. 그리고 오른쪽 figure는 각 이미지들에서 babel에 대한 CAM등을 보여준 것이다.

논문의 Contribution은 먼저

- *Weakly supervised object localization*
- 이미지 label에 대해서만 training 되었다.
- 즉, object의 bounding box, segmentation 같은 건 전혀 학습데이터에 들어가지 않는다.
- 그럼에도 불구하고, 꽤나 준수한 object localization이 가능하다.
- CNN feature를 visualization했다. (internal representation of CNNs)
- 이것을 Class Activation Map(CAM)이라는 방법으로 Localization을 하였다.
- 어떤 output의 어떤 visual pattern에 의해 activated된 각각 unit들을 visualize
- 이것들이 복잡한 방법들로가 아니라, 간단한 idea로, 단 한번의 CNN forward pass로 localize, CAM이 가능하다.

## Weakly Supervised Object Localization

첫 딥러닝에서의 approach는 양질의 labeling이 된 굉장히 많은 data를 통해 CNN을 학습시키는 것이다. 즉 Data-driven인 딥러닝은 결국 data 의존도가 매우 많은데, 실제로 세상에는 data가 많다고 쳐도 labeling이 되어 있지는 않다. labeling 자체가 수고가 많이드는 작업인데, 그냥 image가 어떤 object class다 라고 태깅하는 건 비교적 쉽지만, 그 물체가 어디에 있는지 bounding box, segmentation annotation을 만들어주는 건 굉장히 수고스럽다. 결국 ImageNet같은 좋은 data들이 있지만 더 구체적인 문제를 해결하려고하면 그에 대한 data가 없어 학습이 불가능할 수 있다. 방금 말한건 CNN의 Supervised learning에서의 문제라고 볼 수 있는데, 그렇다면 조금 약한 label로 더 구체적인 문제를 풀어 볼 수는 없을까? 즉 이를 Weakly supervised learning이라 하는데, object label로만 object localization을 해보자! 라는 것이 이 논문의 취지이다.

CNN feature는 우리가 몰랐던 representation이 무궁무진하다. ImageNet으로 training 된 model을 다른 domain 문제에서도 적용해서 이것저것 바꾸면서(tuning) 해결하려는 시도(예를 들어 object localization, segmentation, saliency prediction, NeuralArt)가 무수히 많았고 성공적이었다. CNN이 hierarchical model이라는 것의 장점과 deep해 질 수록 contextual meaning 들을 담아 내고 있는 것이 딥러닝 연구가 진행되면서 알아낸 공통적인 맥락이다. 이 CNN feature의 gram matrix를 계산해서 고흐 풍의 그림을 그려낸 것도 CNN feature의 representation 능력이 매우 뛰어남을 보여준다.

이 CNN의 장점을 이용하여 object class로 학습했음에도 불구하고 object localization이 가능하다는 것은 이미 밝혀진 내용이다.

> [Caffe-Net Surgery Tutorial](https://github.com/BVLC/caffe/blob/master/examples/net%5Fsurgery.ipynb?ref=sudormrf.run), [Is object localization for free? – Weakly-supervised learning with convolutional neural networks](http://leon.bottou.org/publications/pdf/cvpr-2015.pdf?ref=sudormrf.run) Oquab et al. CVPR2015 등을 참고.

# CNN Architecture

CNN의 구조는 다음과 같다.  
![](https://sudormrf.run/content/images/2016/04/archi.png)  
쉽게 말하면, Fully connected(FC) layer을 다 제거하고 마지막에 Global Average Pooling(GAP)을 하여 1x1x512 같은 vector로 mapping한다. 그리고 여기서 FC layer를 달아서 softmax로 classification을 학습시킨다. FCN을 지향하기 때문에 GoogLeNet의 성능이 제일 좋다.

**GAP**: 쉽게 설명해보자면, 우리가 CNN에서 주로 하던 pooling은 max-pooling이다. Pooling을 하는 이유는 CNN feature dimension을 줄여서 over fitting을 피하고자함이고, max-pooling을 하는 이유는 activation된 neuron을 더 잘 학습하고자함이다. (사실 실험적인 이유가 큰듯한데) 주로 `2x2` max-pooling을 해서 `HxWxC` dimension을 `H/2xW/2xC`, 1/4배로 줄였는데, global pooling은 `HxW` pooling이란 의미이다. 즉 한 feature map (`HxWxC`)을 전부 pooling해서 한 neuron(`1x1xC`)으로 mapping 시킨다는 것.

따라서 각 feature map은 GAP을 통해 한 neuron이 된다. 그리고 이 neuron들에 적절한 weight를 준 FC layer을 학습시켜서 classification을 하게 되는데, 만약에 Australian terrier로 classification이 되면 그렇게 분류 시킨 FC의 weight를 고대로 각 feature map에 가중치를 주어서 CAM을 뽑아낸다.

이 내용은 CNN의 기본적 이해가 있다면 쉽게 이해가 될텐데, 자세한 설명은 논문을 읽는게 더 좋을 듯 하다.  
GAP이 Global Max Pooling(GMP)보다 좋다고 주장하는 이유도 간략히 바로 옮기자면

**Intuitive difference between GMP and GAP?**

- GAP loss encourages identification on the extent of an object.
- GMP loss encourages it to identify just one discriminative part.
- GAP, average of a map maximized by finding all discriminative parts of object  
if activations is all low, output of particular map reduces.
- GMP, low scores for all image regions except the most discriminative part  
do not impact the score when perform MAX

Object localization은 CAM에서 20% threshold를 주어 bounding box를 만들어낸다.

이렇게 ImageNet을 새로 처음부터 GAP을 붙여 training 시킨 모델로 다른 domain 문제에도 실험을 굉장히 많이했는데 몇개만 옮기자면

![](https://sudormrf.run/content/images/2016/04/action-1.png)

Action, Event 같이 한 object가 아닌 것도 visualization이 가능한데, 잘 보면 Cooking을 한다는 것은 사람이 주방기구를 사용하니까 그런 영역에 activation이 일어난다.

![](https://sudormrf.run/content/images/2016/04/SVM.png)

이미지에 concept이 tagging된 것들로 학습해서 mirror-in-lake가 어디 부분에서 activation이 되었는지 (물론 그 concept에 대한 위치 정보로 학습한 것이 아님), 그리고 구글 맵에서 text가 있는 image와 없는 image를 학습시켜서 text가 있는 이미지에서 어디 부분에서 activation이 되는지를 전부다 Weakly-supervised로! 어떻게 어디가 activation이 되었는지를 깔끔하게 보여준다.

결론적으로 CAM은 굉장히 유용한 tool이 될 것이라고 생각되고 weakly-supervised learning이 실제로 잘 되는 것을 보면서 다른 문제에서도 어떻게하면 weak label로 우리가 풀고 싶은 더 어려운 문제를 풀까 고민을 잘 해봐야겠다.

---

1. 신기한건 Fully-connected에서도 가능하다. 1x1 conv라고 생각하면 똑같을 수도 있지만 어쨌든 [↩︎](#fnref1)