Unsupervised Learning of Visual Representations by Solving Jigsaw Puzzles
(Submitted on 30 Mar 2016 (v1), last revised 22 Aug 2017 (this version, v3))
arXiv:1603.09246
위의 세가지 self-supervised learning 논문들이 비교에 자주 사용된다.
data에 labeling을 하는 것이 cost가 비쌀 수 있어 요즘은 self-supervised learning이 대세다.
저자들은 하나의 snapshot으로부터 현재까지 얻을 수 있었던 정보보다 더 많은 것을 뽑아낼 수 있다고 생각했다.
그 생각을 바탕으로 jigsaw puzzle reassembly 문제를 생각해낸다.
Related work 부분에서는 대략적인 unsupervised learning에 대해서 얘기를 하고 있고
self-supervised learning에 대해서는 label 을 구분하는 것을 말해준다.
크게 label은 다음 2가지로 나뉜다.
-
non-visual 신호와 연관되고 쉽게 얻을 수 있는 label. (ex. ego-motion, audio, text...)
-
data의 구조로부터 얻을 수 있는 label
여기서는 후자의 label을 이용한다. input 이미지를 재활용하여 pixel arrangement를 label로 사용하게 된다.
[Doersch.]
비교에 앞서 첫번째로 Doersch의 논문을 살짝 알아본다.
직소퍼즐 문제와 비슷하게 9등분을 하지만 단 2개의 이미지 패치로 상대적인 위치 구분을 분류한다.
이러한 학습은 (c) 이미지의 중간 패치와 왼쪽-위, 중간-위 패치들간의 위치파악에 있어서 상대적으로 많이 애매한 단점이 있다.
그러나 jigsaw puzzle에서는 패치를 2개가 아닌 전부를 비교함으로써 이러한 모호함을 줄이는 장점이 있다.
[Wang and Gupta]
비디오를 트래킹하면서 동일한 물체로부터 2개의 패치를 얻어온다. 그리고 나머지 1개의 패치는 임의로 막 가져온다.
이 3개의 패치를 비교하면서 학습을 하게 되고 이 방법의 장점은 labeling하는데 있어서 traking method만 있으면 된다는 것이다.
[Agrawal]
센서를 이용한다. 두개의 이미지 프레임으로부터 egomotion을 대략적으로 추정하고 실제 거리측정 센서로 부터 측정된 egomotion과 비교를 하면서 학습을 한다.
동일한 물체의 다른 이미지를 이용하면 학습된 feature들은 low-level의 유사성(color, texture..)에 초점을 맞추게 된다.
하지만 jigsaw puzzle에서는 이 유사성이 패치의 위치학습에 도움이 되지않는다면 학습하지 않고 패치간의 차이에 초점을 맞추는 장점이 있다.
처음 구현에 앞서 저자들이 생각한 방법은 9개의 타일들을 한번에 다 겹쳐서 인풋으로 넣는 것이었다.
하지만 이 방법은 네트워크가 low-level texture statistics를 배우도록 했기 때문에 다른 방법을 사용하게 된다.
그래서 나온 해결방법이 CFN이다. CFN은 Context Free Network 로 내멋대로 해석하자면 무맥락 네트워크이다.
왜 무맥락이냐..? 하나의 패치는 각 네트워크의 입력으로 따로 들어가게 되고 이렇게 학습된 각 패치에 대한 각각의 feature들은 fc7전까지 서로 관여를 할 수 없게 된다.
그렇기 때문에 context free network 라고 부른다.
fc7에서 합쳐진(concat) feature들은 각 파트의 배열을 결정하는데 사용이 된다.
이 네트워크의 목적은 상대적인 위치를 결정하기 위해 각 object part의 가능한 가장 대표적이고 구분이 잘 되는 feature들을 학습하게 하는 것이다.
permutation을 만들고 인덱스를 각각 붙여준다.
총 9!개의 permu가 나오고 이 permu set이 성능에 중요한 요인이 된다는것을 나중에 실험을 통해 알게된다.
CFN의 결과는 매우 고차원의 PDF 로 나오게 된다.
그렇기 때문에 제한된 양의 data로 고차원의 PDF 를 뽑아내기 위해 주의가 필요하다.
예를 들어 각 패치가 절대적인 위치를 학습하게 되면 feature들은 semantic meaning을 잃게 된다.
구현은 위의 사항으로 진행되었고 학습에 총 2.5일이 걸렸다.
Transfer learning을 Pascal VOC에 해보았다.
transfer learning은 2019/11/04 - [AI/논문정리] - How transferable are features in deep neural networks? 에 정리해뒀다.
무튼.. CFN을 통해 학습한 feature들을 Pascal VOC에 적용해보았을 때
비교하기위한 나머지 3개보다 뛰어났고 기존의 AlexNet과 거의 비슷한 성능을 보이고 있었다.
또한 ImageNet Classification에도 적용을 했다.
앞의 transfer learning 논문에서 앞의 layer들은 general하고 뒤의 것들은 specific하다고 했다.
고로 네트워크 어디에서는 이들의 transition이 일어나는데 이것을 이해하기 위해
뒤에서부터 layer들의 feature들을 fine-tune 시키며 확인해보았다.
결과는 CFN이 conv1부터 conv4 까지 아주 괜찮은 성능을 내는 것을 확인했다.
다만 conv5를 fine-tune 시켰을 때 그 폭이 굉장히 컸는데 이는 conv 5가 이전 jigsaw puzzle problem에 specific하다는 것을 의미한다.
이번에는 반대로 생각해본다.
기존의 pre-trained AlexNet의 feature들이 jigsaw puzzle을 푸는데 얼마나 도움을 주는지 테스트 해보았다.
original 대비 88%의 성능을 보여주는데 이는 semantic training이 object part의 인지에 있어서 꽤나 도움이 된다는 것을 의미한다.
이제 ablation study를 permutation set 에 대해 진행해보았다.
총 3가지 기준으로 permutation set을 만들었다.
첫번째가 cardinality 즉, permutation 의 개수이다.
결과적으로 permutation의 수가 늘면 jigsaw puzzle은 더 어려워지지만 반면에 detection task는 성능이 상승했다.
두번째는 average hamming distance 이다.
해밍거리는 각 permutation의 원소 위치가 다른 개수이다.
표에서 알 수 있듯이, average hamming distance가 커질수록 jigsaw task의 정확도가 올라갔고 detection 성능도 좋아졌다.
마지막으로 minimum hamming distance이다.
결과로 알 수 있는 점은...
가장 좋은 성능을 내는 permutation set은 permutation의 수와 minimum hamming distance의 조율을 통해 얻어 낼 수 있다.
이번 ablation study는 shortcut에 대해서 진행하였다.
shortcut은 feature들이 pretext task를 푸는데만 적합하고 classification, detection등과 같은 target task에는 적합하지 않을 때를 의미한다.
이는 컴퓨터는 게으르고 똑똑하기 때문에 가장 빠르고 쉬운 방법을 학습하려는 습성이 있기 때문이다.
무튼, shortcut의 종류와 해결법은 아래와 같다.
low level statistics는 인접한 패치들은 픽셀강도의 평균과 표준편차가 비슷하여 이를 학습하여 인접 패치를 쉽게 찾을 수 있다는 점이다.
이 shortcut을 피하기 위해 각각의 패치에 대해 독립적으로 평균과 표준편차를 normalize해주었다.
edge continuity는 말그대로 인접패치와 edge가 이어지는 것을 학습하는 경우이다.
이를 피하기 위해 9개의 패치 안에서 더작은 사이즈인 64*64 이미지를 랜덤한 위치에서 뽑아왔다.
이것은 각 패치들 사이의 gap을 만들어내기 때문에 edge continuity를 해결할 수 있었다.
chromatic aberration은 색수차 현상이다. 빛이 각 색에 따라 밀리는(?) 그런 현상이다.
(색 수차 현상은 정확히 뭐라고 설명을 못하겠으니 생략한다...ㅎ)
네트워크는 초록색과 마젠타(빨강+파랑) 사이의 분리를 탐지하여 상대적인 렌즈의 위치를 알 수 있다.
상대적인 렌즈의 위치를 아는 순간 패치들의 상대적 위치를 푸는 것은 아주 간단한 문제로 변해버린다.
이를 피하기 위해 이미지를 중간에만 자르고 컬러와 grayscale을 섞어서 사용한다.
또한 jitter를 해버림으로써 해결할 수 있다.
세가지 shortcut을 피하는 방법을 썼을 때 성능은 위의 표로 나타난다.
필터가 무엇을 학습했는지를 알아보았다.
top을 뽑는 기준은 간단하게 각 layer마다 하나의 채널에서 나오는 output을 가지고 l1 norm 을 계산하는 것이다.
(a), (b)는 texture에 특화된것을 알 수 있다.
(c)는 조금더 전문화 되었고 face detector가 최초로 나온 것을 볼 수 있다.
(d), (e)는 part detector임을 알 수 있다.
image retrieval에 대해 질적으로 평가해보았다.
위의 그림에서 (c)가 CFN이다.
CFN이 비슷한 모양의 object에 대해 굉장히 민감하고 종종 같은 카테고리안에 있는것을 확인할 수 있다.
image retrieval을 양적으로 평가했을 때 다음과 같은 그래프가 나온다.
CFN은 Doersch와 비슷한 성능을 보이고 있는 것을 확인할 수 있다.
하지만 우리는 굉장히 simple한 ranking metric을 사용하였기 때문에 정확하지가 않다.
아래의 표에서 CFN은 fine-tune을 통해 학습할 수록 더욱 좋은 (넷 중 최고의) 성능을 보였기 때문에
feature metric이 배운다는 가정이라면 더욱 좋은 성능을 낼 수 있다고 믿는다.
(= 그래프에서 다른 것들보다 위에 존재할 수 있을 것이다)
결론은 다음과 같다.
CFN이 각각의 타일을 object part로써 학습을 하고 각각의 part가 object에서 어떻게 조합이 되는지를 학습한다.
그렇게 학습이 된 CFN의 feature들은 classification과 detection에서도 좋은 성능을 보였다.
이로써 Unsupervised Learning of Visual Representations by Solving Jigsaw Puzzles 논문을 다 읽어보았다. :)
(이미지는 논문의 것을 그대로 사용하여 본인이 직접 ppt를 작성하였습니다.)