신경망의 훈련은 신경망의 구조, 최적화 방법, 그리고, 가중치 초기화 등 다양한 변수의 영향을 받습니다. 즉, 네트워크를 어떻게 설정하느냐에 따라 신경망의 훈련은쉬울수도, 어려울 수도있습니다. ( 또한, 해당 모델에서 학습하고자 하는 목표에 대한 정의 및 어떤 loss fuction을 사용할지, 그리고 어떻게 사용할지도 고민을 같이 진행해야 합니다.)
배경 지식
Loss Surface를 알기 위해서 공부해야 되는 개념은 Loss function이다. (Cost function이라고도 일컫어진다.)
Loss function은 모델이 내놓은 예측값과 실제 정답이 얼마나 다른지를 나타내는 지표로서 정의된다. (모델 학습의 목표는 loss값을 최소화하는 W,B를 찾는 것이다)
Loss function은 대표적으로 MSE(Mean Squared Error)와 CEE(Cross Entropy Error)가 자주 사용되며, 그 외 다양한 loss function이 존재한다.
Loss Surface란
딥러닝에서 모델은 Loss function의 내놓은 값(Loss)을 줄이는 방향으로 학습이 진행된다.
이 과정에서 parameter가 변함에 따라서 loss값이 변하게 되는데, parameter 개수가 2개이하가 아닌이상 사람이 알아볼 수 있는 형태로 loss 그래프를 그리기가 어렵다.
아래 예시는 parameter가 2개일때 loss값(z축)이 어떻게 변하는지를 나타낸 그림이고 loss값들로 이루어진 surface를 loss surface라고 한다.
Loss Surface 만드는 법
Loss Surface를 시각화하는 방법은두개의 가우시안 분포를 따르는 랜덤 방향 벡터를 만드는 것입니다. (0,0) 의 중앙 지점은 이미 훈련된 파라미터에서의 Loss 값으로 최저점을 의미한다고 볼 수 있습니다. 두개의 방향 벡터를 만든 뒤, 각 방향벡터에 -1 부터 1까지의 상수를 곱하고, 기존 네트워크의 학습된 파라미터와 더하여 Loss Surface 를 시각화 합니다.
왼쪽 그래프의 성능을 보게 되면 SOTA 모델인 EfficientDet 모델보다 성능이 월등히 높게 나온것을 알 수 있습니다.
(먼저 간단하게 YOLO의 역사에 대해서 언급하고 시작하겠습니다.)
2개의 branch로 나눈 다음에
1. Introduction / brief history of YOLO
- YOLO(You Only Look Once)는 이미지 전체를 한번에 처리하는 Object Detection의 대표적인 1-Stage Approach - Real-time Object Detection으로 큰 주목 - 그 후 해를 거듭하며 발전 ( YOLOv1, v2, v3, v4, v5, PP-YOLO, ... ) - 최근에 트랜스포머 계열의 모델들이 Object Detection 태스크에 들어오기 전에는 대부분의 Object Detection 모델들은 CNN개반으로 수행했는데, 이번에 다루는 YOLO 역시 대표적인 CNN 기반의 네트워크
오른쪽에 보시면 citation수를 나타내고 있는데, 이는 YOLO 시리즈 모델들이 얼마나 널리 쓰이고 있는가에 대한 반증이기도 합니다.
해당 모델이 어떻게 발전했는지를 간단하게만 소개해 드리자면,
한번에 바운딩 박스를 그리고 물체를 분류하는 YOLOv1이 제안
.미리 정해둔 형태의 박스를 바운딩 박스의 후보로 사용하는 anchor 박스 개념을 제안
작은 물체도 탐지가 가능한 모델 아이디어를 제안
1. Introduction / YOLOX Overview
- 최근 2년동안 연구자들은 Anchor-Free Detector, Advanced Label Assignment Strategy, End-to-end Detector의 연구에 주목하였지만 YOLO 시리즈에는 적용되지 않음 - 따라서 본 논문에서는 그러한 좋은 기법들을 적용하여 성능 개선에 목적을 두었다.
Key concepts
Anchor-free 방식의 Yolo구조
Object Detection을 위한 발전 기술 적용 :
Decoupled head ( head를 분리 )
발전된 Label assignment 기법 적용 : SimOTA
강력한 data augmentation : Mosaic, Mixup
YOLOv3 baseline
YOLOv4, v5가 anchor-based 파이프라인에 과도하게 최적화 될 수 있음을 고려하여 YOLOv3-SPP를 base architecture로 선정
- 먼저 Backbone인 DarkNet에서 feature map을 추출합니다. - Neck에서는 위에 그림과 같이 공간구조의 정보를 유지는 SPP Layer를 사용합니다. ( 이와 관련된 내용은 추후 추가적으로 다룰 예정) - 그리고 FPN을 통해 멀티 스케일 Feature map을 얻을 수 있습니다. - Feature에 대한 성숙도가 낮은 아래의 Feature map의 문제를 개선할 수 있는데요. high level의 extraction 정보를 더함으로써 아래의 Feature map이 지니고 있는 위치정보를 같이 활용할 수 있습니다. - Dense Prediction을 보게 되면 위에서부터 큰 물체, 중간 물체, 작은 물체 순으로 detection하는 feature map
2. Network Design / Anchor-free
가운데 그림이 Backbon network를 거친 최종 피쳐맵을 의미합니다, 좌측의 경우 Anchor-free 우측의 경우가 Anchor-based 방법을 나타내고 있습니다.
Anchor-based
위의 그림을 보게 되시면 검은 점에서 prediction을 진행한다고 가정을 했을 때, 해당 Cell에서 Regression을 진행 후 나온 output값을 바탕으로 Anchor의 중심점과 가로와 세로의 길이를 결과적으로 bounding box의 가로 세로 길이와 중심점을 학습한다고 보시면 됩니다. ( 이는 네트워크마다 조금씩 다를 순 있습니다.) 여기서 예시를 보게 되면 하나의 Anchor box가 빨간색 박스와 파란색 박스를 만들었다는 걸 의미합니다. 여기서는 초로색 GT box와 초록색 box의 iou값이 높기 때문에 파란색 bounding box가 Positive 샘플로 분류가 됩니다. 빨간색 box는 학습에 참여하지 않음
Anchor-free
위와는 조금 다르게 Anchor-free에서는 GT box안에 있는 Cell들이 전부 Positive 샘플이 됩니다. 예를 들어 위에 그림과 같이 검은 점에서 prediction을 진행 한다고 했을 때, 해당 Cell에서부터 Ground Truth의 각 모서리까지의 길이를 학습하게 됩니다. 이를 바탕으로 Detectiion Task를 수행하게 됩니다.
Anchor-based design의 단점
도메인에 specific해서 다른 데이터에 generalization 어려움 ( 최적의 anchor box 배치가 그 도매인에 specific하게 만듬 ) - ex) 데이터 셋에 따라서 aspect ratio 비율이 달라질 수 있음
Bounding box regression의 범위를 feature level에 따라 pre-define
같은 위치에서 여러 개의 bounding box detect 가능
어떤 point가 예측이 되면 그 point에서 실제 GT의 top,left,right,bottom의 차이를 학습
위의 그림을 추가적으로 설명하자면 YOLOX에서는 같은 포인트에서 두개의 Bounding box를 예측할 수 있는데, 그 이유는 낮은 feature level에서 하나만 예측하도록 ranage를 제한. 즉, feature level에 따라 range가 pre-define
2. Network Design / Architecture
Object detection에서 Classification과 Regression이 서로 상충하는 문제가 존재함[1](아래 논문 참고)
feature map의 결과를 256 Channel로 줄이고 3x3 Conv를 지나는 2개의 branch를 추가
Classification에는 Binary Cross Entropy Loss를 사용해서 각각의 clss에 대한 확률이 나옴
Localization에서는 IOU Loss를 사용하여 Bounding Box에 대한 종횡거리가 나오게 됨
Loclization의 경우 Regression과 Objectness를 포함
Regression Bounding Box에 대한 종횡거리
Objectness의 경우 해당 cell이 백그라운드를 나타내는지 아니면 어떠한 오브젝트라도 포함하는지를 0~1사의 value로 표현
YOLOv3~v5에서 1개였던 기존 head를 분리하면서 수렴 속도와 end-to-end의 AP를 항샹시킴
3. Training Strategies / Strong data augmentation
저자는 여기서 총 4가지의 Data augmentation의 방법을 적용하였습니다. 1. Random horizon flip 2. Color jitter ( 원본 영상의 hsl을 변경하여 증강시키는 클러스터라는 방법 ) 3. Mosaic ( 원본 이미지외에 3개의 추가적인 사진을 섞는 방법 ) 4. Mixup ( 이미지랑 레이블에 다른 거를 조금씩 섞는 방법 ) ( 강력한 Data aumentation을 사용해서 그런지 몰라도 pre-trained weight를 사용해도 성능향상이 별로 일어나지 않아서 scratch 학습을 진행했다고 하는데 일반적인 데이터 셋인 코코 데이터 셋에서 이러한 현상이 발견된 점은 신기합니다. )
3. Training Strategies / Multi-positive
기본적인 Ancor free 방법만으로는 Anchor-based의 정확성을 따라잡기 힘듬에 따라 여러 방법들을 적용하게 됨 1. Center-ness ( FCOS 논문에서 처음 제안) - 위의 사진과 같이 동그라미 점의 cell이 prediction하고자 하는 cell이라면 오브젝트 레이블이 좀 불분명한 점이 있습니다. 이러한 문제 때문에 detection ratio가 떨어진다고 생각해서 FCOS 저자는 positive한 셀들중에서 오브젝트의 중심에 해당하는 셀들만 positive로 할당하는 Center-ness 방법을 사용해서 정확도를 좀 더 항샹 시킴 2. Multi-positive - 중앙에 있는 셀 말고도 그 주위에서도 좋은 prediction을 할 수 있는 셀들을 사용하는 방법. 센터 말고 주위의 셀들도 prediction하는 방법 3. simOTA - 각 cell의 loss를 구해서, 각 Cell에서 Loss가 조금 낮은 애들만 top k를 뽑아서 학습시키는 방법. 예를 들어 그림에서처럼 사람 cell에 해당하는 9개의 sample중에서 5개는 loss가 낮은데 이 낮은 친구들을 positive sample로 사용하자는 의미. 라켓에 해당하는 cell의 경우도 파란색으로 5개가 loss가 낮음 이 친구들을 positive sample로 사용하자!!
4. Experimental results
5. Conclusion
이 논문에서 anchor-free detector를 사용하여 YOLO 시리즈의 업데이트 버전을 제안
최근 고도화된 detection 기술인 decoupled head, advanced label assigning strategy등을 사용해 속도와 정확성이 전반적으로 훌륭한 성능을 보임
전반적으로 널리 쓰이는 YOLOv3의 아키텍쳐를 사용해서 AP(COCO)를 SOTA 최고로 개선시킴
인공신경망에서 Attention이라고 하는것은 어떤 특정한 신경망을 뜻하는것이 아니라 인간의 시각적 집중(Visual Attention) 현상을 구현하기위한 신경망적 기법을 말합니다.
Attention이 딥러닝 모델 혹은 layer가 아닌 기법인 이유
위의 그림과 같이 구현되어 있다고 가정한다면, 사람이 주목하는 부분에 대해서 고화질을 유지하고 그 이외의 영역에 대해서는 저화질을 유지하게 됩니다. 이 말을 다시 정리하자면, 우리의 초점이 맞는 곳 즉, 우리가 보고자 하는 영역에 대해서는 높은 집중도를 보여서 고화질을 유지하게되고 보지 않는것에 관해서는 낮은 저화질로 낮은 집중도를 유지하게 됩니다. 이러한 현상을 인공신경망에서도 구현을 해보고자 하는것이 Attention 기법이라고 할 수 있겠습니다.
2. 가중치와 어텐션의 공통점과 차이점
가중치도 결국 보고자하는 영역을 집중적으로 본다고 할 수 있는데 그럼 가중치를 학습하는것과 차이는 뭐야?
=> 가중치와 어텐션의 공통점과 차이점
가중치와 어텐션 모두 해당 값을 얼마나 가중시킬 것인가를 나타내는 역활을 하지만, 어텐션을 가중치와 달리 전체 또는 특정 영역의 입력값을 반영하여, 그 중에 어떤 부분에 집중해야 하는지를 나타내는 것을 목표로 한다. ( 어떻게 사용하냐에 따라서 선택적으로 사용할 수 있다는 부분이 다르다고 할 수 있겠다. )
좀 더 상세히 설명하자면 가중치의 경우 <Visual World> 의 이미지가 있다고 가정할 때 각 이미지의 모양, 형태에 집중하는것이 아닌최종적으로 y와 얼마만큼 가까워지게 만들 수 있는지에 focus가 맞춰져 있다고 생각하시면 될 것 같습니다. 또 그 판단기준( y와 유사하게 만드는 값 )에 따라서 가중시킬것인지 축소시킬것인지가 결정됩니다. 하지만 어텐션의 경우 객체나 물체같은 경우를 인식해서 그 객체나 물체가 있는 특정영역만 집중을 하겠다라는게 어텐션의 컨셉이라고 생각하시면 됩니다.
3. 신경망 기계번역
Attention기법이 인공신경망에 어떻게 적용되는지 특정분야를 가지고 설명을 하도록 하겠습니다. 대표적인 분야로 자연어처리 분야를 예로 사용하겠습니다.
우리가 번역하고자하는 언어를 데이터로 사용해서 번역하고자 언어로 변역하는 시스템이 신경망 기계번역이라고 보시면 될 것 같습니다.
4. 기계번역에서의 어텐션 메커니즘
인코더-디코더 방식의 경우 인풋데이터를 특정 크기의 벡터 사이즈로 압축 후 디코더를 통해 원하는 출력값을 산출하게 된다. ( 특정 크기의 벡터 사이즈가 고정되는 이유는 특정 크기의 벡터 사이즈로 데이터를 압축해서 표현하기 위함. Encoder -Decoder에 관해서는 따로 자세히 설명할 예정 ) 여기서 고정된 크기의 벡터를 사용했을 때 보통 이 벡터의 사이즈가 사용된 데이터를 압축하는식으로 진행되기 때문에 데이터의 특징을 대표하는 feature이면서 동시에 데이터의 손실이 발생하게 된다. 이에 대해서 문제제기를 Neural Machine Translation By Jointly Learning To Align Translate논문에서 했으며, 이를 극복방안 중 하나로 Attention 기법을 제안하였다.
5. 기계번역에서의 어텐션 메커니즘 구조
메커니즘 구조에 대해서 좀 더 자세히 설명하자면 X_1 ~ X_T 까지의 입력 데이터값이 주어지게 되면 RNN의 구조를 통해서 Hidden state 값을 뽑아내게 되는데, Hidden state 값의 경우 정방향 RNN에서 나온 Hidden state 값과 역방향 RNN에서 나온 Hidden state 값을 concatenate 이어붙여서 사용합니다.
위의 그림을 보시면 y의 경우에는 최종 출력물이고 s의 경우는 linear mapping을 한 상태 마지막으로 c의 경우 중간 값이라고 기억하시면 됩니다.
( 위의 구조 연산은 따로 좀 더 자세히 설명을 진행하도록 하겠습니다. Vision만하다보니 어텐션은 어렵네요...)
6. 어텐션 메커니즘의 의의
위의 수식을 보게 되면 어텐션을 사용하게 됐을 때, Softmax의 형태를 취하고 있음을 알 수 있습니다. 즉, 이말은 0~1사의 값을 가진다고 볼 수 있는데 이는 수학적으로 확률로 해석할 수 있음을 의미합니다.
기존의 RNN의 경우 연쇄적인 반영을 통해서 feedback시스템이 구성이 되기 때문에 길이가 길어질 경우 dependency가 생길 수 있지만 Attention의 경우 각각의 x에 따른 h를 뽑아내게 되고 각각의 a값에 따른 가중치들이 반영이 되기 때문에 기존의 RNN에 비해서 길어질 경우에 발생하는 부분을 조금 해소할 수 있을것 입니다.