반응형

 

논문 링크입니다.

https://paperswithcode.com/paper/hierarchical-multi-scale-attention-for

 

Papers with Code - Hierarchical Multi-Scale Attention for Semantic Segmentation

7 code implementations in PyTorch and TensorFlow. Multi-scale inference is commonly used to improve the results of semantic segmentation. Multiple images scales are passed through a network and then the results are combined with averaging or max pooling. I

paperswithcode.com

 

 

0. Title


HIERARCHICAL MULTI-SCALE ATTENTION FOR SEMANTIC SEGMENTATION

-> semantic segmentation을 위한 계층적 multi-scale 어텐션

즉 이 논문의 핵심은, 계층적이고 + multi-scale이고 + attention을 활용한 것이지 않을까 싶다.

 

 

1. ABSTRACT


multi scale 추론은 semantic segmentation의 성능을 올리기 위해 자주 사용되는 기법이다.

다중 이미지 scale들이 네트워크를 통과하고, 그 결과물은 average pooling이나 max pooling으로 결합된다.

이 논문에서는 multi-scale 예측결과에 attention-based 접근법을 적용하였다.

우리의 attention mechanism은 계층적이다. 다른 최근의 접근법들보다 약 4배의 메모리 효율을 향상시킬 수 있다.

 

게다가 더 큰 crop-size를 이용해서 학습시킬 수 있게 한다. 이는 곧 더 높은 모델 정확도를 가질 수 있다는 의미이다.

우리는 두 가지의 데이터셋에 적용해 보았다.

1) Cityscapes -> generalization을 위해 leverage auto-labeling 기법 사용

2) Mapillary Vistas

-> 두 가지의 데이터셋에서 모두 state-of-the-art한 결과를 낼 수 있었다.

 

 

 

2. Conclusion


우리는 semantic segmentation에 계층적 multi-scale attention 기법을 적용하였다.

우리는 segmentation accuracy을 향상시켰다. 메모리와 계산을 효율적으로 처리함과 동시에,

 

 

 

 

3. Result (Data 훑기)


1) implementation protocol

우리의 implementation protocol을 자세하게 설명할 것이다.

 

- Training Detail

Pytorch와 Nvidia DGX 서버(8 GPU) with *mixed precision

*mixed precision은 모델 학습시 FP16, FP32 부동 소수점 유형을 상황에 따라 유연하게 사용하여 학습을 더 빠르게 실행하고 메모리를 적게 사용하는 방법이다

: Semantic and attention predictions at every scale level for two different scenes

왼쪽 사진은 디테일한 문제 -> 2x scale에서 가장 잘 예측, attention도 2x에서 가장 잘 attend함

오른쪽 사진은 큰 영역 세그먼테이션 문제 -> 0.5 scale에서 가장 잘 예측, attention도 가장 성공적으로 집중한 것이 0.5였을 때임

 

white color for attention이 높은 값을 가졌음(거의 1.0)

모든 scale의 attention 합은 1.0임

 

Auto-generated coarse labels은 GT(Original coarse label)보다 더 디테일하게 레이블링되었음

더 정교한 레이블링은 레이블들의 분포를 향상시켰다. 작고 큰 아이템들이 모두 표시되었기 때문이다. 기존에 큰 오브젝트만 있던 것과는 다르게

 

 

Table 2 : Ablation study on Cityscapes validation set.

베이스라인은 HRNet-OCR을 뼈대로 썼다. 

MS attention이 우리가 제안한 multi-scale attention method이다.

Auto-labeling은 학습시에, 자동적으로 생성된 coarse label을 사용하였는지, 아니면 ground truth coarse label을 사용하였는지를 나타낸다.

두가지의 조합이 가장 좋은 성능을 나타내었다.

 

 

- 학습 세팅

optimizer로는 SGD, GPU당 1 batch size, momentum = 0.9, *weight decay = 5e(-4)

*Weight decay는 모델의 weight의 제곱합을 패널티 텀으로 주어 (=제약을 걸어) loss를 최소화 하는 것을 말한다. overfittin을 줄이기 위해 사용

“polynomial” learning rate policy 사용

첫번째 loss function으로 RMI 사용

auxiliary loss function으로 cross-entropy 사용

 

Cityscapes 데이터셋에 2.0 poly exponent

초기 learning rate = 0.02

200 에포크 for 4 DGX nodes

class uniform sampling in data loader -> 클래스별로 비슷하게 뽑기 위해서 -> 클래스별 데이터 분포가 불균형할 때 좋음

 

- Data augmentation

gaussian blur, color augmentation, random horizontal flip and random scaling (0.5x - 2.0x) on the input images

crop size of 2048x1024 for Cityscapes and 1856x1024 for Mapillary

 

 

2) Results on Cityscape

뼈대로써 HRNet-OCR을 사용하였고, multi-scale attention method를 주로 사용하였다.

RMI을 main segmentation head로 사용.

auxiliary segmentation head에는 cross entropy 사용. 왜냐하면 RMI가 학습이 깊어질수록 학습 정확도를 떨어트리는 것을 확인했기 때문이다.

 

더 큰 Mapillary dataset을 먼저 학습시키고, pre-trained model을 Cityscapes에 다시 학습시켰다.

Mapillary dataset에는 attention을 학습시키지 않았다.

우리의 Cityscapes의 SOTA 레시피는 train + val images / auto-labelled coarse images로 달성하였다.

50%는 train + val images 에서 샘플을 뽑았고, 나머지는 auto-labelled coarse images에서 뽑았다.

inference time에서 {0.5, 1.0, 2.0} 의 scale과 image flipping을 사용하였다.

TABLE2 : Ablation study on Cityscapes validation set.

MS Attention은 0.5% IoU +

Auto-labeling은 1.1% IoU +

Both 1.4% IoU +

 

Table 3: Comparison vs other methods on the Cityscapes test set

Cityscapes test set score에서 best score로 85.1을 달성하였다. 3가지 클래스를 빼고 모든 클래스에서 가장 우수하였음.

 

3) Results on Mapillary Vistas

Mapillary Vistas은 굉장히 큰 데이터셋으로, 25,000개의 높은 해상도 이미지와 66개의 object categories로 구성됨.

HRNet-OCR을 줄기로 썼고, multi-scale attention method를 사용하였다.

Mapillary images에는 다양한 해상도가 있기 떄문에 long edge를 2177로 하여 resize 했다.

 

ImageNet classification에서 미리 학습한 HRNet weight를 사용하였다.

Mapillary에는 더 큰 메모리가 필요했기 때문에, crop size를 1856 x 1024로 줄였다.

Table 4: Comparison of results on Mapillary validation set.

두번째로 높은 IOU를 가진 Panoptic Deeplab보다 2.4 더 높은 성능 달성.

 

 

 

 

Introduction


semantic segmentation은 모든 픽셀을 N개의 클래스 중 하나로 label하는 태스크이다.

이 태스크에는 trade-off 관계가 있는데,

특정 유형의 예측은 lower inference resolution에서 가장 잘 처리되지만,

어떤 예측은 higher inference resolution에서 잘 처리된다는 것이다.

 

디테일한 부분은 확대된 이미지 사이즈에서 더 잘 예측됩니다.

global context가 필요한 큰 구조는 축소된 이미지 사이즈에서 더 좋다.

왜냐하면, network의 receptive field가 더 필요한 부분을 볼 수 있게 하기 때문이다.

이를 "class confusion"이라고 부른다.

Illustration of common failures modes for semantic segmentation as they relate to inference scale.

첫번째 행에서 2.0x scale (high resolution)일 때 디테일한 사람의 형상을 더 잘 잡아내는 것을 볼 수 있다.

두번째 행에서는 커다란 도로와 나눠진 영역을 0.5x scale (low resolution)일 때 더 잘 segment되는 것을 볼 수 있다.

 

 

multi-scale inference를 사용하는 것은 이 trade-off를 다루기 위해 자주 사용되는 방식이다.

예측은 다양한 규모로 이루어지고, 결과는 averaging or max pooling으로 합쳐진다.

averaging을 사용하는 것은 일반적으로 성능을 향상시키지만, 가장 좋은 결과를 가장 나쁜 결과와 결합한다는 단점이 있다.

반대로, max pooling은 픽셀당 가장 좋은 하나의 scale 결과를 선택할 수 있다. (weighted combination으로)

 

이러한 문제를 해결하기 위해 attention method를 채택하였다. 픽셀 레벨에서 multi-scale predictions을 어떻게 조합할지 예측하기 위해.

네트워크가 인접 척도간의 상대적 가중치를 예측하는 계층적 attention method를 제안한다. 

계층적이라는 성질 때문에, training pipeline에서만 하나의 추가 scale로 augment할 수 있었다.

예를 들어, 타겟 inference scale이 {0.5, 1.0, 2.0}이면, 다른 어텐션 방식들은 모든 스케일로 학습시키길 요구한다. 4.25x (0.5^2 + 2.0^2 )의 학습 비용을 발생시키면서

우리의 방식은 학습시 , 오직 추가 0.5x 스케일만 추가하였다. 0.25x (0.5^2 ) 의 학습 비용 발생시키면서

게다가, 우리의 계층적 매커니즘은 inference time에서 유연성을 부여할 수 있다.이전의 방식보다(only use training scales during inference)

 

Cityscapes에서 SOTA를 달성하기 위해 auto-labelling을 시행하였다. 데이터셋의 다양성을 부여하기 위해 

이로인해 일반화 효과가 있었다.

 

 

요약


- hierarchical multi-scale attention mechanism으로 class confusion와 fine detail 문제를 개선하였다. 다수의 scale을 사용함으로써

- hard-threshold based auto-labelling strategyunlabelled image를 활용하고, IOU를 높였다.

- Cityscapes (85.1 IOU)와 Mapillary Vistas (61.1 IOU)에서 SOTA를 달성하였다.

 

 

 

Related Work


1) Multi-scale context methods

우리의 SOTA는 low output stride를 사용하였다. (input image size와 output size의 비율로, 높을수록 축소)

이것은 fine detail 문제를 더 잘 해결할 수 있게 하였고, receptive field가 줄어드는 효과가 있었다.

 

다만, 이렇게 줄어든 receptive field는 이미지에서 커다란 물체를 인식하기에 어려움이 있다.

Pyramid pooling은 multi-scale context를 합침으로써 줄어든 receptive field 문제를 보완할 수 있다.

PSPNet은 spatial pyramid pooling을 사용함으로써 multiple scale로부터 feature들을 병합하였다. (pooling의 순서와 convolution operation을 이용해)

DeepLab은 다양한 레벨의 dilation을 적용한 astrous convolutions를 사용하는 Astrous Spatial Pyramid Pooling을 이용하였다. 이로인해, PSPNet보다 더 밀집한 feature를 생성해 낼 수 있었다.

 

2) Relational context methods

일반적으로, pyramid pooling은 고정적이고 사각형의 영역을 가지고 수행한다. pooling과 dilation이 일반적으로 대칭적인 패션을 이루고 있기 때문이다.  

게다가 그러한 기법은 정적이고 학습되지 않는 경향이 있다.

그러나, relational context method는 픽셀간의 관계로 문맥을 파악하고, 사각형 영역에 국한되지 않는다.

relational context method는 이미지 구성을 기반으로 형성된다.

따라서 non-square한 semantic regions에 적절하다. OCRNet, DANET, CFNet, OCNet도 Relational context methods를 사용한다.

 

3) Multi-scale inference

relation과 multi-scale 모두 multi-scale evaluation을 쓴다.

multi-scale에서 prediction을 조합하는 데에 두가지 접근법이 있다. 

average pooling과 max pooliing이다. (average pooling이 더 일반적이다)

 

하지만, average pooling은 모든 결과를 동일한 가중치로 합치기 때문에 최적이 아닐 수 있다.

 

 

우리의 hierarchical based attention mechanism는 추론 시간이 scale 개수에 구애받지 않는다.

게다가, 우리의 모델은 average-pooling보다 더 좋은 성능을 냄과 동시에, 클래스별/장면별 다양한 스케일의 중요성을 시각화하였다.

또한, 하나의 스케일을 사용하는 다른 모델들보다 뛰어나고, 고해상도 예측을 생성하는데에 multi-level feature를 사용하여 더 좋은 attention을 실현시킴

 

4) Auto-labelling

 

 

Hierarchical multi-scale attention


우리의 attention 매커니즘은 [1] Liang-Chieh Chen, Yi Yang, Jiang Wang, Wei Xu, and Alan L. Yuille. Attention to scale: Scale-aware semantic image segmentation, 2015.과 매우 닮아있다. dense mask가 각각의 스케일마다 학습되어지는것과 multi-scalse prediction들이 pixel-wise summation으로 mask들 사이에서 결합된다는 것이다. Chen의 모델을 Explicit method, 우리 모델을 Hierarchical mothod라고 하자.

우리는 모든 attention mask를 학습시키는 것 대신에, 인접한 스케일 사이의 상대적인 attention mask를 학습하였다.

장점 1) 유연하게 스케일을 선택할 수 있다. 추론에서 0.25x나 2.0x scale을 0.5x와 1.0x로 학습된 모델에 계층적으로 추가하는 것이 가능하다. 이전의 모델들은 학습시와 동일한 스케일만 사용할 수 있었다.

장점 2) training efficiency를 향상시킬 수 있다. explicit model에서는 0.5, 1.0, 2.0 스케일을 사용하면, the training cost is 0.5^2 + 1.0^2 + 2.0^2 = 5.25 였다. 하지만 계층적 모델은 0.5^2 + 1.0^2 = 1.25 이면 된다.

 

 

 

Architecture


Backbone : HRNet-OCR

Semantic Head : (3x3 conv) → (BN) → (ReLU) → (3x3 conv) → (BN) → (ReLU) → (1x1 conv)

Attention Head : semantic head와 구조적으로 동일, 마지막 convolutional output만 single channel

semantic and attention heads는 OCR block에서 가져온 feature들을 먹였다. 

auxiliary semantic head : OCR하기 전에 HRNet trunk로부터 직접 feature를 가져오는 부분, (1x1 conv) → (BN) → (ReLU) → (1x1 conv)

 

attention이 semantic logits에 모두 적용되고 나서, 예측 결과는 target image size로 upsampling 된다.(bilinear upsampling)

 

Analysis


Table 1: Comparison of our hierarchical multi-scale attention method vs. other approaches on Mapillary validation set

 

 baseline averaging approach (49.4) or the explicit approach (51.4)보다 더 좋은 성능(51.6) 을 내었다.

Unlike the explicit method 0.25x scale 을 추가하였다. 0.25x scale을 추가하니 re-training을 할 필요가 없어졌다.

flexibility at inference time가 우리의 최대 장점이다. 학습은 한번 할 수 있지만, inference는 다양한 스케일을 선택하여 유연하게 할 수 있다.

 

한 가지 더, average pooling 방식에 0.25x 스케일을 추가하면 해로운 영향(-0.7 IOU)이 있는 것으로 나왔다.

반면, 우리의 계층적 모델은 0.6 IOU가 향상되었다.

baseline averaging method에서는 0.25x 스케일 데이터가 다른 스케일들과 합쳐질 때 너무 거친 나머지 여러 클래스들에서 1.5 IOU의 감소가 이루어 졌다. 

예측의 거친 정도는 엣지와 fine detail에 해롭다.

하지만, 우리의 모델에서는 0.25x 스케일을 가장 적절한 방식으로 적용하였기 때문에 0.25x scale 결과는 가장자리에는 적용하지 않았음

 

 

 

 

Question


- RMI

 

반응형
반응형

 

Opening


인터넷 세상에 있는 거의 80%의 traffic은 비디오이다. 대다수의 인터넷에 올라와 있는 자료들은 모두 비주얼 데이터이다.

따라서, 이 데이터를 이용하고 이해하는 것은 매우 중요하다. 하지만, 이는 굉장히 어렵다.

유튜브가 굉장히 좋은 통계이다. 사람들이 계속해서 만들어 내고, 구글의 직원이 이를 하나하나씩 관리할 여력이 되지 않는다.

이 때 비주얼 데이터의 내용을 이해하는 기술이 굉장히 중요할 것이다.

컴퓨터 비전은 다양한 분야들에 대한 이해를 바탕으로 이루어져야 한다. (물리학, 생물학 등)

 

 

 

관련된 강의 소개


CS231a : 3d reconstruction, 컴퓨터비전을 위한 센서 등

CS231n : 이미지 분류에 사용할 neural network(딥러닝)

 

 

visual recognition의 역사


현재의 컨볼루션 네트워크까지의 발전된 과정을 아는 것이 중요하다.

 

1) 540백만년 전 갑자기 많은 종류의 동물이 멸종하였다.

동물학자 앤드류 파커가 화석을 바탕으로, 첫 동물의 눈이 발달하였고 갑자기 볼 수 있게 되었다는 것을 발견하였다.

처음으로 볼 수 있게 되면서 삶을 사전 예방하게 되었다.

먹이는 포식자들로부터 탈출하여야 했고, 이는 진화적 군비 전쟁으로 이어졌다.

이것이 시각의 시작이었다.

 

특별히 지적으로 뛰어난 인간의 뇌의 뉴런은 시각 처리와 관련이 되어 있다. 이것이 가장 큰 센서리 시스템이다.

시각 시스템을 통해 움직이고, 일하고, 먹고, 등등을 한다.

따라서 시각 시스템은 지성을 가진 인간에게 중요한 역할을 한다.

 

인간의 기계적인 시각 시스템인 카메라는 어떨까?

2) 가장 처음의 카메라는 르네상스 시대의 Camera Obscura(1545)이다.

카메라가 진화하면서 가장 많이쓰는 센서가 되었다.

 

3) Gubel & Wiesel의 Electronic signal from brain(1950-1960)이다. 고양이의 뇌가 어떻게 반응하는지를 보았다. 

visual processing은 뇌에서 간단한 구조로 시작되고, 뇌가 복잡하게 구조화한다는 것을 알게 되었다.

 

4) Block world(1963) : 첫번째 컴퓨터 비전 이론 -> visual world가 기하학적 모양으로 되어있고, 목적은 인식과 재건이었다.

the summer vision project(1966) -> visual system에 대한 연구 -> 이것으로 시작하여, 가장 중요하고 빠르게 성장하고 있음. 하지만 아직도 해결안됨

 

5) David marr(1970s) -> vision이 뭔지? 어떤 방향으로 computer vision이 가야하는지를 고민하였다.

인풋 이미지 -> Primal Sketch(Edges) -> 2 1/2-D sketch -> 3D model(계층적으로 3D 로 구현)

 

6) Generalized Cylinder(1979)

간단한 블록 세상에서 실제 물체를 인식하려면 어떻게 해야할까? 고민하였다. 하지만, 컴퓨터가 정말 느리고 데이터가 없었다. 

모든 물체는 실린더 모양으로 되어있다고 가정하여 물체의 복잡도를 줄였다.

7) Pictorial Structure(1973)

Lines & Edges -> toys 정도에 그침

 

 

물체 인식이 너무 어려우면, 먼저 object segmentation을 하는게 어떨까?

8) Normalized Cut(1997)

image segmentation의 등장이었다. 픽셀 단위로 물체를 인식하는 개념.

 

9) Face Detection(2001)

machine learning tech -> SVM, boosting, graphical model, etc.

많은 기여를 한 것은 AdaBoosting을 realtime face-detection에서 사용한 것이었다.

컴퓨터 칩이 아직도 많이 느렸지만, 머신러닝 기법으로 리얼타임 얼굴인식을 성공하였다.

 

10) fuji digital camera (2006)

real-time face detector를 가진 카메라를 fuji에서 출시하였다.

 

 

11) feature-based  (1999)

객체 인식을 feature-based로 해보고자 하였다. 전체 물체를 다른 동일 물체로 대입시키고자 하였다.

물체의 각도, 조명 등등 때문에 실현하기 어려운 아이디어였지만,

물체의 부분(feature)을 보자는 시각을 건네 주었다. 

패턴을 맞춰보는 것보다 피쳐를 이용해서 두 개의 물체를 맞춰볼 수 있었다.

 

 

12) Spatial Pyramid Matching(2006)

이미지의 여러 부분에서 feature들을 뽑아서 feature descriptor에 넣고

support vector machine 알고리즘을 돌림

 

 

13) Histogram of Graidents(2005), Deformable Part Model(2009)

사람을 인식하고자 노력하였다.

 

21세기가 되면서 사진의 질이 좋아졌다

인터넷의 성장과 함께 디지털 카메라의 성능이 더더 좋아지고, 컴퓨터 비전을 수행하기에 적합하게 데이터의 질이 높아졌다.

 

14) PASCAL Visual Object Challence라는 데이터셋이 등장

물체 인식의 진전 정도를 측정할 수 있게 해준 벤치마크 데이터가 등장하였다.

데이터셋은 20개의 물체 클래스로 이루어져있다. 

-> 2007년부터 2012년까지 예측 정확도가 꾸준히 올랐다.

 

문제는 너무 train set에 overfitting되었다는 것이다.

visual data는 너무 복잡하였다.

 

15) ImageNet : 22K 카테고리 + 14M 개의 이미지들 

데이터양을 급격하게 늘려서 train set에 오버피팅 되지 않자는 목적에서 22K 카테고리 + 14M 개의 이미지를 가진 ImageNet을 만들었다.

성능을 진전시키기 위해 ImageNet Large Scale Visual Recognition Challenge을 개최하였다.

상위 5개의 클래스가 맞으면 correct로 채점한다.

 

error rate graph

2012년에 error rater가 엄청 급감 했다. -> Convolution Neural Network 등장 !!

 

 

 

우리 수업에서는 Convolution Neural Network 에 딥 다이브해서 알아볼 것이다.

그 중에서도 image classification에 focus 할 것이다.

object detection, image captioning(이미지를 자연어로 설명)도 할 것이다.

 

 

CNN은 물체 인식의 아주 중요한 도구가 되었다.


ImageNet Large Scale Visual Recognition Challenge 우승 모델

2010년) 아직도 계층적이다. 

2012년) AlexNet. 이 때부터 모든 우승자는 Neural Network 였다. 7-8 layer를 가지고 있다.

2014년) 19 layer를 가지고 있다. (VGG)

2015년) 152개의 layer를 가진 ResNet이 개발되었다.

 

사실, CNN은 2012년에 나온게 아니다.

1998년에 나와서 post office에서 digit를 인식하는데 사용되었다.

1998년에 나온 모델이 2012년의 AlexNet과 비슷해 보인다.

take pixels -> classify

 

그렇다면 왜 2012년에 주목받게 되었을까?

1) computation (계산능력)

: 트랜지스터의 개수가 엄청나게 증가

동일한 환경에서 모델의 사이즈만 증가시켜도 성능이 증가하는 경우가 있기 때문이다.

2) data

: labeled 데이터가 많아져서, ex) PASCAL, ImageNet

많고 high-quality인 data가 수집되었기 때문이다.

 

 

더 다양하게 활용되고 있는 사례들.

Image Retrieval




객체 뿐만 아니라 객체간의 관계와 상황, 객체의 특성을 인식할 수 있어야 한다.

 

 

Fei-Fei Lee의 연구


사람들은 잠깐의 영상을 보고 많은 양의 글로 설명할 수 있다.

 

 

수업의 철학


1) thorough and detailed : CNN 구현

2) practical

3) state of the art

4) fun

 

 

Q. 궁금한것, 더알아볼것


- support vector machine 알고리즘이 무엇인지?

- AdaBoost

반응형
반응형

# FCN

논문 링크 입니다.

https://arxiv.org/abs/1411.4038

 

Fully Convolutional Networks for Semantic Segmentation

Convolutional networks are powerful visual models that yield hierarchies of features. We show that convolutional networks by themselves, trained end-to-end, pixels-to-pixels, exceed the state-of-the-art in semantic segmentation. Our key insight is to build

arxiv.org

 

 

# Semantic Image Segmentation이란?


Semantic Image Segmentation의 목적은 사진에 있는 모든 픽셀을 해당하는 (미리 지정된 개수의) class로 분류하는 것입니다. 이미지에 있는 모든 픽셀에 대한 예측을 하는 것이기 때문에 dense prediction 이라고도 불립니다.

여기서 주의해야하는 점은 semantic image segmentation 은 같은 class의 instance 를 구별하지 않는다는 것입니다. 쉽게말해서, 밑에 가족사진처럼 같은 class 에 속하는 object (사람이 4명)가 있을 때

사람을 따로 분류하지 않고, 그 픽셀 자체가 어떤 class 에 속하는지에만 관심이 있습니다 (오른쪽 사진). 왼쪽 사진처럼 instance 를 구별하는 모델은 따로 instance segmentation 이라고 불립니다.

단순히 사진을 보고 분류하는것에 그치지 않고 그 장면을 완벽하게 이해해야하는 높은 수준의 문제입니다.

 

 

# 들어가기 전에


**CNN Architecture: 전체 구조**

**CNN Architecture: 대표적 레이어 유형**

 

CNN에는 여러 종류의 계층이 있습니다.

그 중에 대표적인 레이어 유형은 다음과 같습니다.

1) **Convolutional layer**━"필터"는 이미지를 통과하여 한 번에 몇 Pixel(NxN)을 스캔하고 각 형상이 속하는 클래스를 예측하는 형상 맵을 만듭니다.

2) **Pooling layer (downsampling)**━가장 중요한 정보를 유지하는 동시에, 각 피쳐의 정보량을 줄입니다(대개 여러 개의 회전이 있습니다).

**[출처]** [[딥러닝 레이어] FC(Fully Connected Layers)이란?](https://blog.naver.com/intelliz/221709190464)|**작성자** [인텔리즈](https://blog.naver.com/intelliz)

 

# Abstract


CNN은 image recognition에 큰 발전을 가지고 왔습니다.semantic segmentation에도 CNN Deep learning model을 사용하기 위한 방법으로 FCN의 방법을 제시했습니다.

FCN은 AlexNet, VGG, GoogleNet과 같은 분류 모델을 적용하고, fine-tuning 함으로써 목적에 맞게 변형한 것입니다.

 

# 핵심 아이디어


 

정리해보자면,

- CNN으로 사진의 feature들을 추출하고, classifier 부분을 FC(fully connected layer)에서 CNN 부분으로 변경하여, 공간적 정보를 보존하고 image size에 상관 없이 입력 받을 수 있습니다.

- 사이즈가 작아진 activation map을 Upscaling을 이용해 원래의 input 이미지 크기를 가지도록 만들어주고, skip connection을 사용하여 깊은 network의 coarse한(거친) semantic 정보와 shallow, fine한 겉 모습의 정보를 합쳐주어 예측한 segmentation 결과를 출력할 수 있습니다.

 

# Introduction


FCN은 픽셀 단위의 예측(pixelwise prediction)을 수행합니다.

→ 네트워크 내의 upsampling layer는 *subsampled pooling을 통해 픽셀 단위의 예측을 가능하게 합니다.

일반적인 CNN 같아 보이지만, 자세히 보시면 컨볼루션을 거친 뒤, 이를 쫙 펴서 FC에 넣어주는 것이 아니라, 1x1 컨볼루션을 계속 진행하는 것을 볼 수 있습니다. 그리고 이를 Upsampling 과정을 거쳐서 원래 이미지와 똑같은 크기의 피쳐맵을 만들어줍니다. 이 피쳐맵의 픽셀 하나하나를 classification 결과 값으로 하여 세그멘테이션을 진행하는 것입니다.

즉, 컨볼루션 레이어들만으로! Semantic Segmentation을 수행할 수 있게됩니다.

 

 

# Fully Convolutional networks


image recognition에서 일반적으로 사용하는 FC(Fully Connected layer) classfier를 CNN으로 바꿔주어 공간 정보를 보전하고 다양한 image size를 입력으로 받는 것

 

### 1. Adapting classifiers for dense prediction


LeNet, AlexNet과 같은 recognition 신경망은 fixed-sized 입력값을 받아서 공간정보가 없는 출력값을 생성합니다. 이러한 신경망의 Flatten → FC(Fully Connected layer) 부분에서 spatial 정보가 소실 되게 됩니다. 그래서 NIN(Network In Network, 1x1 Conv)로 FC(Fully Connected layer) 를 대체하여 spatial한 정보를 보존시켰다.

모든 layer에 Conv를 사용함으로서 ground truth를 각 layer의 출력을 얻을 수 있어 forward, backward passes가 간단해 효율적인 연산을 할 수 있다고 합니다.

- Ground Truth는 추론에 의해 제공되는 정보와 달리 직접 관찰 및 측정(즉, 경험적 증거)에 의해 제공되는 실제 또는 사실로 알려진 정보 를 참조하기 위해 다양한 분야에서 사용되는 용어

    

    

 

### 2. Shift-and-stitch is filter rarefaction


입력값이 conv + pooling을 통과하면 크기가 감소합니다. 이를 복원하는 방법으로 shift-and-stich 방법을 검토하는데,  이보다 skip connection을 사용한 upsampling이 더 효과적으로 판단하여 shift-and-stich 방법은 사용하지 않습니다

- shift-and-stich 방법 : max pooling을 하고 위치 정보를 저장하여 원래의 이미지 크기로 upscaling하는 방식, but 계산 비용이 큼

- Max pooling (맥스 풀링)

: 맥스 풀링은 Activation map을 MxN의 크기로 잘라낸 후, 그 안에서 가장 큰 값을 뽑아내는 방법이다.

 

 

### 3. Upsampling is backwards strided convolution


Convolutionalization을 통해 출력 Feature map은 원본 이미지의 위치 정보를 내포할 수 있게 되었습니다.

그러나 Semantic segmentation의 최종 목적인 픽셀 단위 예측과 비교했을 때, FCN의 출력 Feature map은 너무 **coarse(거친, 알맹이가 큰)** 합니다.

따라서 Coarse map을 원본 이미지 크기에 가까운 Dense map으로 변환해줄 필요가 있습니다.

1) backward strided convolution(=Deconvolution)과

2) bilinear interpolation을 사용합니다.

 

 

### 1) backward strided convolution(Deconvolution)


위와 같이 사이를 띄워주고 padding 해준 Input을 convolution하면 원하는 사이즈의 Output을 얻을 수 있다. 

그래서 원래 이미지 사이즈로 Upsampling하면, pixelwise loss를 구할 수 있어서 backprop 하기가 용이하다.

 

 

### 2) bilinear interpolation


Bilinear interpolation을 이해하기 위해서는 Linear interpolation을 우선적으로 이해할 필요가 있다.

다음의 두 값을 예측해 보자.

위의 값은 5, 아래 값은 7 임을 어렵지 않게 예측할 수 있다. 이 처럼 두 지점 사이의 값을 추정할 때 직관적으로 사용하는 방법이 Linear interpolation이다.

 

위의 추정 방식은 다음과 같이 식으로 표현할 수 있다.

 

식을 앞의 예제에 대입하면 다음과 같이 추정값을 쉽게 구할 수 있다.

 

** bilinear interpolation은 이러한 1차원의 Linear interpolation을 2차원으로 확장한 것이다.

네 지점 A, B, C, D 사이의 임의의 점 X를 추정할 수 있다.

이제 우리는 다음과 같은 Feature map의 빈 영역을 추정할 수 있다.

 

### 4. Patchwise training is loss sampling


patchwise training과 fully convolutional training을 비교해서 설명합니다.

- Patchwise training란 하나의 이미지에서 객체가 존재하는 위치 또는 주변 위치를 crop하여 하나의 patch로 만든 뒤 모델에 입력하는 training 방식입니다.

  Patchwise training을 사용하는 이유는 이미지에 필요 없는 정보들이 존재할 수 있고, 하나의 이미지에서 서로 다른 객체가 존재하는 경우 중복성이 발생한다(고양이에 관련된 feature를 추출해야하는데, 필요 없는 배경까지 모두 봐야 하는 문제)

→ 이미지에서 patch 이미지를 뽑아내서 필요한 부분을 위주로 training 시킬 수 있다. class imbalance 문제를 완화할 수 있지만 공간적 상관 관계가 부족해진다는 단점이 있다

→ patchwise training을 통해 하나의 이미지를 100개의 patch로 분할해 각 patch마다의 loss 값을 구하게 된다. 이 때, 모든 loss를 사용하는 것이 아니라 중요한 patch들의 loss만 사용하거나 가중치를 주어 loss 값을 샘플링해 사용할 수 있다고 한다.

 

- 반면에 fully convolutional training은 전체 이미지를 입력으로 받아 학습하는 것입니다.

→ 결과적으로는 patchwise training을 사용하지 않았습니다. whole image training이 dense prediction을 위한 training 속도 측면에서 더 효과적이고 효율적이었다고 합니다.

 

 

# Segmentation Architecture


FCN, Upsampling 그리고 pixelwise loss를 사용한 모델을 이용해 dense prediction을 구했습니다.

여기서 skip connection을 이용해 coarse, semantic 정보와 local, appearance 정보를 합친 개선 된prediction을 구했습니다.

 

 

### 1. From classifier to dense FCN


backbone은 VGG-16을 사용합니다. 그리고, 마지막 classifier layer를 버리고, 이것을 fully convolution으로 변경합니다. 원래 이미지 크기로 맞춰주기 위해 coarse output에 upsampling을 수행하는 deconvolution layer 이후의 coarse output locater에 21 차원을 가진 1x1 convolution을 추가합니다. 21차원은 배경을 포함한 *PASCAL classes를 예측합니다. channel을 PASCAL의 class 개수와 맞추기 위해 1x1 conv를 사용했다.

 

*Pascal VOC is a collection of datasets for object detection

 

VGG16을 예로 살펴보자. 다음과 같이 출력층 부분의 마지막 3 fc-layers를 모두 Conv-layers로 변경한다.

 

 

 

### 2. Combining what and where


segmentation을 위한 새로운 fully convolutional network를 정의합니다. layer를 결합하고 출력값의 공간적인 정보를 개선합니다.

*skip architecture

1x1인 pool5의 activation map을 32배 한 upsampled prediction을 FCN-32s라고 한다.

2x2인 pool4의 activation map과 pool5를 2x upsampled prediction을 더해, 16x upsampled prediction(FCN-16s)를 구했다.

이와 같이 4x4 pool3과 앞서 더해주었던 prediction을 합해 8x upsampled predicton(FCN-8s)를 구했다.

 

결과를 보면 low 레이어의 prediction을 더한 FCN-8s가 가장 디테일한 부분까지 가지고 있는 것을 확인할 수 있다.

또한 결과표를 봐도 FCN-8s의 결과가 가장 좋은 것을 확인할 수 있다.

 

 

 

반응형
반응형

논문 링크


https://arxiv.org/pdf/1311.2524.pdf

 

2014년 발행

 

0. TITLE


Rich feature hierarchies for accurate object detection and semantic segmentation

 

: 정확한 detection과 segmentation을 위한 feature 계층화

 

1. Abstract


최근 Object Detection 성능이 정체되었다.

PASCAL VOC dataset에서 가장 높은 수준을 달성한 방식은 다수의 low-level image feature 들을 high-level context와 결합한 것이었다.

이 논문에서는 이전 최고 모델(VOC 2012에서 mAP 53.3%) 보다 mAP 기준 30% 향상시킨 알고리즘을 소개하려고 한다.

 

우리 알고리즘의 핵심 요소는 

1) bottom-up region proposals에 높은 용량의 CNN을 적용할 수 있다는 것 (localize와 segment를 위해)

2) labeled 학습 데이터가 부족할 때, 보조 작업에 대한 supervised pre-training(domain-specific한 fine-tuning)이 엄청난 성능 향상을 가져다줌

-> (image classification) 의 충분한 데이터로 보조 작업을 하고 target task(detection)으로 fine-tune하는 방식

 

우리는 CNN과 함께 region proposals들을 결합하였기 때문에

우리의 알고리즘을 R-CNN(Regions with CNN features)라고 부르기로 하였다.

 

우리는 OverFeat라는 비슷한 CNN 구조를 가진 sliding window detector를 제안한 모델과 R-CNN을 비교하였다.

200-class ILSVRC2013 detection dataset에서 R-CNN이 OverFeat의 성능을 능가했다는 것을 증명하였다

 

 

 

2. Conclusion 


우리 알고리즘의 두가지 인사이트

1) bottom-up region proposals에 높은 용량의 CNN을 적용할 수 있다는 것 (localize와 segment를 위해)

2) 데이터가 부족한 문제에 “supervised pre-training/domain-specific finetuning"이 굉장히 효과적이다.

 

 

3. Result & Discussion (Data 훑기)


1) Object detection with R-CNN

- Results on PASCAL VOC 2010-12

bounding box regression이 있는 것과 없는 결과로 두가지 제출하였다.

non-linear kernel SVM approach로 mAP 기준 35.1% -> 53.7%로 향상 + 더 빠름

Detection average precision (%) on VOC 2010 test

 

- Results on ILSVRC2013 detection

PASCAL VOC에서 사용한 하이퍼 파라미터와 동일하게 설정

bounding box regression이 있는 것과 없는 결과로 두가지 제출하였다.

 

 

2) Semantic segmentation

- Results on VOC 2011

[ validation results ]

Segmentation mean accuracy (%) on VOC 2011 validation.

fg strategy가 full strategy보다 약간 더 성능이 좋다.

이는 masked region shape가 더 강력한 signal을 보낸다는 것이다.

 

full+fg의 성능이 더 좋다.

즉, full features에 의해 제공받은 context가 유익하다는 것이다. 

게다가 10시간 이상 걸렸던 O2P와  다르게, 20 SVR에 우리의 full-fg features를 적용한 것은 1시간에 안에 학습이 완료되었다. 

 

[ test results ] 

Segmentation accuracy (%) on VOC 2011 test

21개의 카테고리 중에 우리의 모델(full+fg R-CN fc6)이 11개의 카테고리에서 가장 높은 성능을 기록했다.

또한, overall 로서는 47.9로 가장 높은 수치를 기록하였다.

 

 

 

4. Introduction


이 논문은 CNN이 PASCAL VOC의 object detection task에서도 놀라운 성능을 보여줄 수 있다는 것을 첫번째로 보여줄 것이다.

두 가지에 집중하였다.

1) 깊은 신경망에서 localizing하는 것

2) 적은 object detection 데이터로도 높은 용량의 모델을 학습시키는 것

 

classification과는 다르게, object detection은 localizing object하는 것이 필요하다.

하지만, CNN은 굉장히 큰 receptive fields와 stride를 가지고 있기 때문에 sliding-window 방식을 적용하기에 어려움이 있다.

우리는 이를 "recognition using regions" 파라다임을 적용함으로써 해결하였다. -> object detection과 semantic segmentation에 모두 성공적이었다.

1) input image를 넣는다

2) 약 2000개의 bottom-up region proposals들을 추출한다 -> affine image warping을 적용하여 input size 통일

3) 각각의 proposal에 큰 CNN를 적용하여 고정 크기의 feature vector를 추출한다.

4) 각각의 region을 class-specific linear SVM을 적용하여 분류한다

* affine image warping 기법을 이용하여, 각각의 region proposal로부터 고정 크기의 input image를 얻음

-> sliding-window 방식을 사용한 OverFeat model보다 성능이 높다. (mAP 기준)

 

 

 

두 번째 문제는, 큰 CNN을 적용하기에 레이블된 데이터가 부족하다는 것이었다.

기존의 전통적인 해결방식은 unsupervised pre-training과 supervised fine-tuning을 사용하는 것이었는데,

우리는 1) 대규모의 보조 데이터셋에(ILSVRC) supervised pre-training을 적용하고

2) 작은 데이터셋(PASCAL)에 domain-specific한 fine-tuning을 적용하는 방식을 이용하였다.

이는, 데이터가 적을 때 높은 용량의 CNN을 학습시키는 데에 효과적이었다.

우리의 실험에서 detection을 위한 fine-tuning을 통해 mAP를 8%point나 올릴 수 있었다. 

 

반응형
반응형

 

논문 링크


https://proceedings.neurips.cc/paper/2012/file/c399862d3b9d6b76c8436e924a68c45b-Paper.pdf

2012년 발행

 

0. TITLE


ImageNet Classification with Deep Convolutional Neural Networks

: CNN을 이용해서 ImageNet 데이터에 classification task를 수행한다.

 

1. Abstract


ImageNet LSVRC-2010 contest에 나왔던 1.2 백만개의 데이터를 1000개의 클래스로 분류하는 작업이다.

top-1과 top-5 error rate가 각각 37.5%, 17%로 이전 SOTA 모델보다 개선된 수치를 달성하였다.

[ 구조 ]

6천만개의 파라미터와 65만개의 뉴런을 가진 뉴럴 네트워크가

5개의 convolution layers로 이루어져 있다.

이 중 일부는 max-pooling layer와 3개의 fully connected layer로 이어진다.

마지막은 1000개로 softmax.

[ 성능 향상을 위해 ]

fully connected layer의 overfitting을 줄이기 위해

"dropout"이라는 정규화 기법 사용

 

 

2. Results & discussion (data 훑기)


1) ILSVRC2010 test set 에 대한 error rates 비교

Comparison of results on ILSVRC2010 test set

 

2) ILSVRC-2012 validation과 test sets에 대한 error rates 비교

(asterisk*가 붙은 것은 ImageNet 2011 Fall release 데이터로 “pre-trained”한 것)

Comparison of error rates on ILSVRC-2012 validation and test sets. In italics are best results achieved by others. Models with an asterisk* were “pre-trained” to classify the entire ImageNet 2011 Fall release.

 

3) Discussion

한 개라도 convolution layer가 사라진다면, 성능이 크게 저하된다. 

top-1  performance에서도 중간에 한 layer를 삭제했더니 2%의 성능 감소가 있었다.

따라서, depth는 결과에 있어 아주 중요한 요소이다.

 

학습에 있어서 unsupervised pre-training을 사용하지 않았다.

궁극적으로는 video sequences에 크고 깊은 convolution nets를 사용하여 

도움이 되는 정보를 제공하는 것이 목표이다.

 

 

3. Introduction


간단한 recognition task는 작은 데이터셋으로도 풀 수 있었지만,

실제 물체는 상당한 다양성을 가지고 있기 때문에 더 큰 training set를 사용해야만 한다.

 

수만은 물체들을 인식하기 위해서는 더 큰 용량을 가진 모델이 필요해졌다.

게다가 주어지지 않은 이미지들에 대한 고려도 해야한다.

이러이러한 문제점이 있지만,

다행히도 현재의 강력한 GPU와 오버피팅없이 train할 수 있을만큼 많은 레이블된 데이터가 있어

문제를 해결할 수 있다.

 

우리의 모델은 가장 큰 CNN 모델 중의 하나를 학습시켰고,

ILSVRC-2010 and ILSVRC-2012에서 가장 높은 결과를 얻을 수 있었다.

 

두 개의 GTX 580 3GB GPU로 5-6일간 학습시켰다.

우리의 실험은 더 빠른 GPU와 더 큰 데이터셋이 있다면 결과가 더 개선될 수 있음을 제안하였다.

 

 

4. Architecture


5개의 convolution layer + 3개의 fully-connected layer

 

1) ReLU의 Non-linearity

기존의 sigmoid나 tanh는 ReLU보다 훨씬 느리다. 즉, ReLU가 훨씬 빠르다.

ReLU는 기존의 activation 함수들보다 경사 하강 알고리즘에 유리하며, overfitting 감소하는 장점이 있다.

ReLU(solid), tanh(dashed) 비교 그래프

ReLU(solid), tanh(dashed)

 

f(x) = |tanh| 함수로도 시도가 있었지만, 여기서는 overfitting을 막는 데에 초점이 맞춰져 있었기 때문에

우리가 발표한 ReLU를 사용할 때 발생되는 accelerated ability와는 다르다 

 

2) 2개의 GPU 사용

1.2백만개의 training 데이터를 사용하기에 1개의 GPU로는 충분치 않아서

두 개의 GPU 사용하였다. 

parallelization 기법 사용하였다.

kernel을 반으로 나눠 각각의 GPU에 넣고, 특정 layer에서 communication 하는 방식

 

3) Local Response Normalization 국지 정규화

정규화가 일반화에 영향을 준다는 것을 알아냈다.

k = 2, n = 5, α = 10−4, β = 0.75 는 여러 연구를 통해 알아낸 최적의 수치이며 

이는 하이퍼 파라미터이다. 아래의 식에 적용하여 정규화(normalization) 수행

* 해당 Normalization 방식을 ReLU 뒤에 수행하였다. 성능향상에 효과적이었다.

 

4) Overlapping pooling

pooling layer에서 s(stride) < z(filter size) 하게 만들어서

overlap 하게 만들었다. 성능향상에 효과적이었다.

 

5) 전체 구조

[ 모델 구조 ]

두 번째, 네 번째, 다섯 번째 convolution layer는 동일한 GPU에 있었던 이전 layer와만 연결되어 있다.

세 번째 Layer은 두 번째 layer의 모든 kernel map과 연결되어 있다.

fully-connect layer들은 모든 이전의 kernel map과 연결되어 있다.

첫번째, 두번째 convolution layer에서 LRN을 사용하였다.

max-pooling은 LRN 뒤에랑 다섯번째 convolution layer에서 사용하였다.

ReLU non-linearity는 모든 convolution layer와 fully-connected layer에서 사용되었다.

 

[ 필터 크기 ]

첫번째 convolution layer의 필터는 224x224x3 input images + 96개의 11x11x3 kernel + 4 pixel의 stride

두번째 convolution layer의 필터는 첫번째 layer의 output size(LRN과 max-pooling 적용된) + 256 kernels of size 5 × 5 × 48 The third, fourth, and fifth convolutional layers are connected to one another without any intervening pooling or normalization layers.

The third convolutional layer has 384 kernels of size 3 × 3 × 256 connected to the (normalized, pooled) outputs of the second convolutional layer.

The fourth convolutional layer has 384 kernels of size 3 × 3 × 192 , and

the fifth convolutional layer has 256 kernels of size 3 × 3 × 192. The fully-connected layers have 4096 neurons each.

 

 

5. Overfitting을 줄이기 위해


1) Data Augmentation

label-preservatin transformations를 사용하여 데이터셋을 인위적으로 늘리는 방식 사용하였다.

data augmentation은 CPU에서 실행하였으므로 computationally free하다.

 

- The first form of data augmentation

generating image translations & horizontal reflections

(random 224 × 224 patches)

-> softmax

 

- The second form of data augmentation

altering the intensities of the RGB channels in training images

Specifically, PCA on the set of RGB pixel values

add multiples of the found principal components with magnitudes proportional to the corresponding eigenvalues times a random variable drawn from a Gaussian with mean zero and standard deviation 0.1.

 

 

2) Dropout

여러 다른 모델들의 예측 결과를 합치는 것도 error 줄이는 데에 매우 효과적이다.

하지만, 굉장히 큰 neural network에 쓰기에는 너무 비싸다.

대신에 dropout을 사용하면 매우 효과적이다. (setting to zero the output of each hidden neuron with probability 0.5)

뉴런들끼리의 영향력을 줄여준다.

마지막에 0.5를 곱해준다.

우리는 dropout을 첫 두개의 fully-connected layer에 적용하였다.

 

 

 

6. Details of learning

stochastic gradient descent를 사용하였다.

batch size 128

momentum 0.9

weight decay 0.0005(중요함) -> 정규화 뿐만 아니라 training error를 줄여줬음

 

모든 layer에 동일한 Learning Rate 적용하였음 -> lr = 0.01

epoch = 90

 

 

반응형
반응형

 

 

https://www.acmicpc.net/problem/18870

 

18870번: 좌표 압축

수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌

www.acmicpc.net



import java.util.*;
import java.util.Map.Entry;

public class CoordinateCompression_18870_me {

    public static void main(String [] args){
        Scanner sc = new Scanner(System.in);
        Integer N = sc.nextInt();
        Integer [] arr = new Integer[N];
        Map<Integer, Integer> orderedMap = new HashMap<>();


        for (int i=0; i<N; i++){
            arr[i] = sc.nextInt();
        }

        Integer [] sortedArr = arr.clone();
        Arrays.sort(sortedArr);


        Integer cnt = 0;
        for(int num : sortedArr){
            if (!orderedMap.containsKey(num)){
                orderedMap.put(num, cnt++);
            }
        };


        StringBuilder sb = new StringBuilder();    
        // 하나씩 출력하다가 StringBuiler 객체에 넣어서 한번에 출력하니까 성공뜸
        for(int num : arr){
            sb.append(orderedMap.get(num)).append(' ');
        }

        System.out.println(sb.toString());

    }
}

 

 

 

 

반응형

+ Recent posts