728x90
반응형

 Compound Scaling

- 네트웍의 깊이(Depth), 필터 수(width), 이미지 Resolution크기를 함께 최적으로 조합하여 모델 성능 극대화

   => 깊이로 resNet이 이득을 봄

- 그러나 단순한 depth의 양으로는 한계가 있어 엔지니어링 테크닉으로 한계 극복 노력

 

EfficientNet architect

- 필터 수 변경 : channels를 wider

- 네트웍 깊이 변경 : deepper

- 이미지 resolution : 224x224 => 512x512가 더 성능이 좋음

=> compound scaling은 이 3요소를 조합하여 모델 개선

 

개별 scaling 요소에 따른 성능 향상 테스트

                        필터수 변경                                깊이 변경                                이미지 resolution 변경

- 필터수, 네트웍 깊이를 일정 수준 이상 늘려도 성능향상 미비, resource는 더욱 많이 듬

- 단, Resolution이 경우 어느정도 약간씩 성능 향상이 지속.

- ImageNet 데이터 세트 기준 80% 정확도에서 개별 scaling 요소를 증가시키더라도 성능향상이 어려움

=> 체감 한계가 있어서 최적화로 성능향상 필요

 

최적 scaling 도출 기반 식

- depth, width, resolution에 따른 FLOPS 변화를 기반으로 최적 시 도출

- width, resolution은 2배가 되면 flops는 4배가 됨(그래서 제곱을 곱함)

 

- 3가지 scaling Factor를 동시 고려하는 compound scaling 적용

- 최초에는 승수를 1로 고정하고 grid search기반으로 a, b, r의 최적 값을 찾아냄.

   EfficientNetB0의 경우 a = 1.2, b = 1.1, r = 1.15

- 다음으로 a, b, r을 고정하고 승수를 증가시켜가면서 efficient B1 ~ B7까지 Scale up 구성

최적화된 architect로 최적화된 resource로 최적화된 속도, 성능을 냄

 

 

반응형
728x90
반응형

Scaleble and Efficient Object Detection

Backbone : EfficientNet

Neck : FPN을 BiFPN으로 바꿈

 => FPN이 성과를 거두자 발전시키려는 노력

Compound Scailing : 한가지 요소에 가중치가 아닌 합쳐서

 

 

BiFPN

 

Compound Scailing 

 

 

 

EfficientDet 성능

적은 연산수, 적은 파라미터 수에 비해 상대적으로 타모델보다 높은 모델 예측성능을 나타냄

D0는 yolo와도 맞먹고, flops도 압도적으로 적다.

 

 

 

 

BiFPN ( Bi Directional FPN

- Cross Scale Connections

기존 FPN : TOP DOWN

- Feature Fusion : feature가 아래로 내려가면서 합쳐짐

중국 PANET : BOTTON UP

=> FEATURE 가 풍부해짐

BiFPN : Cross Scale

input feature를 서로 더해서 반영

 

- Weighted Feature Fusion

- 가중치를 어떻게 부여할 것인가에 대한 문제

 

초기 FPN : RetinaNet에서의 가능성

- bottom-up pathway => top-Down Pathway 

- Lateral Connection + upsampling

 

FPN의 발전 : Path Aggregation Network 

- 내려가던 것에서 올라가던 것

Nas-FPN

- 수천시간의 강화학습을 통해서 최적의 네트웍을 찾아냄

 

BiFPN

- 최상위, 최하위 feature map을 생략

- 원본 feature에서도 추출

- 3개의 추출 : 원본 feature, 하위 feature, Lateral Connection

 

- repeated block

=> compound Scaling으로 block을 몇개 할지 정함

 

Weighted Feature Fusion

서로 다른 resolution (Feature map size)를 가지는 input feature map들은 output feature map을 생성하는 기여도가 다르기 때문에 서로 다른 가중치를 부여하여 합쳐질 수 있어야 한다.

 

- Fast Normalized fusion

 

Unbounded Fusion

- 입력 Feature map에 가중치를 곱해서 출력 feature map  생성

- 여기서 Wi는 정해진 값이 아니라 학습 시켜서 도출된 weight임.

- 연산량 감소를 위해 BiFPN NetWork 구현 시 separable Convolution 적용

 

 

 

 

반응형
728x90
반응형

RetinaNet 특징

- One Stage Detector의 빠른 detection 시간의 장점을 가지면서 One stage detector의 detection 성능 저하 문제 개선

- 수행 시간은 YOLO나 SSD보다 느리지만 Faster RCNN보다 빠름

- 수행 성능은 타 detection 모델보다 뛰어남. 특히 One stage detector 보다 작은 object에 대한 detection능력이 뛰어남

 

# Focal Loss + Feature Pyramid Network

- Focal loss : Cross Entropy를 대체한 loss function 

- Feature Pyramid Network을 backbone에 적용

 

Focal Loss의 필요성

Cross Entropy

object의 classification pred_proba를 로그하고 실제값과 곱함

One-stage detector의 class imbalance 이슈

넓은 이미지 속에서 background엔 detect할 정보가 많은데, detect하고싶은 object는 아주 적은 문제

- Anchor box가 bg에 학습값이 치중되어 분명한 object여도 확률값이 작아짐

 

Easy Example : 찾기 쉬운 대상들. Background 나 크고 선명한 대상 오브젝트. 이미 높은 예측확률을 가지고 있음

Hard Example : 찾기 어려운 대상들. 작고 형태가 불분명하여 낮은 예측 확률을 가지고 있음

 

- Easy Example이 많고 Hard Example이 적은 적은 Class imbalance 이슈는 object detection이 안고 있는 고유문제

- Two Stage detector의 경우 Region Proposal Network에서 오브젝트가 있을만한 높은 확률 순으로 필터링을 먼저 수행할 수 있음

- 하지만 One-Stage는 Region Proposal과 Detection을 같이 수행하므로 매우 많은 오브젝트 후보들에 대해서 detection을 수행해야하므로 class imbalance로 인한 성능 저하 영향이 큼

=> 이미 잘 예측된 object의 loss를 줄이려고 학습이 진행되는데 보통 잘 예측된 object는 Easy Example이다.

     배경이라 anchorbox 할당도 많이 되고, 학습할 개수도 많고, 확률값도 높으니깐

- two-stage도 있는 문제지만 one-stage에서 큼

 

Class imbalance 해결방안

- 기존 : 학습 시 경험치에 기반한 샘플링이나 data augmentation

- RetinaNet : 동적으로 cross entropy 조절

 

Focal loss - Cross Entropy에 가중치 부여

가중치때문에 전반적인 loss가 떨어지는데 확률이 높은 쪽은 아주 많이 떨어지고, 확률이 작은 쪽은 적게 떨어짐

보통 감마 값을 0.25로 잡음

Focal loss를 통해 anchor box를 많이 만듬

 

FPN (Feature Pyramid Network)

- 서로 다른 크기를 가지는 object들을 효과적으로 Detection하기 위해 bottom up과 top down 방식으로 추출된 feature map들을 lateral connection으로 연결하는 방식

- 서로 다른 크기의 object를 detect하기 위해 image size를 줄여나가는 방식으로 하면 큰 object를 detect를 할 수 있지만 computing 시간이 오래걸림, 그래서 최근에는 잘 안씀

- 대신 feature map을 기반으로 predict하는 방식이 일반적임. 그러나 너무 최상위 feature map은 너무 추상화가 되어있고 핵심 feature를 가지고 있지만 위치 정보를 잃어버려서 정확도가 떨어짐

- 그래서 feature map을 사용하긴 하는데 각 map을 predict하게 됨

- layer 특성이 상위 feature map으로 갈수록 소실되어서 detection 정확도가 떨어지는 문제가 발생.

 

- 그래서 bottom up 방식을 사용, 위로 올라갈수록 시멘틱하지만 레졸루션은 떨어짐

- 레졸루션이 떨어져서 image size가 작아질수록 skip connection으로 보완

- upsampling + skip connection

 

* 기존 resnet의 경우 layer가 깊어지면 gradient vanishing 문제가 발생하고 오히려 성능이 떨어짐

  => skip connection을 통해서 jump해서 보내줘서 되살리는 원리를 차용함

 

RetinaNet FPN AnchorBox

- 9개의 anchor box가 p2~p5의 개별 Layer의 개별 grid에 할당

- 3개의 서로다른크기와 3개의 서로다른 스케일을 가짐

- 약 100k의 anchor box들

- 개별 anchor box 는 classification을 위한 k개의 클래스 확률값과 bounding box regression을 위한 4개 좌표값을 가짐

   * 20개 class 확률 + 4개 좌표

 

 

반응형

+ Recent posts