728x90

RetinaNet 

RetinaNet이 나오기 전까지는 one-stage 는 수행 시간이 짧아서 좋지만 수행능려은 faster RCNN보다 떨어진다는 인식이 있었다. one-stage의 고질병이던 작은 객체검출 문제를 개선시킴

 

검출해야할 객체보다 백그라운드가 많아서 대부분 앵커박스들이 백그라운드에 학습값으로 치중이 된다. 반면 적은 수의 foreground에서 정보를 가져와야하는데 백그라운드 정보 때문에 압도가 된다. 따라서 Object Detection은 본질적으로 이런 문제를 안고 있다.

 

 

동적으로 Cross entropy를 조절하는 방법이 focal Loss이다.

 

focal Loss

focal Loss는 Cross entropy에 가중치를 부여하는 개념이다.

위 그림이 Focal loss의 factor 가중치이다. Focal Loss에 분류하기 쉬운 문제(Easy Negative Examples : Backgrounds)보다 분류하기 어려운 문제(Hard Positive Examples : object(foreground))에 더 많은 가중치(factor 감마)를 적용함으로써 Object 검출에 더욱 집중하여 학습 진행한다. 따라서 잘 검출된 객체와 그렇지 못한 객체 사이의 loss값의 차이를 더욱 분명하게 구별할수있다.

 

well-classified 구간을 보면 p값이 증가할수록 loss가 급격히 감소를 하게 된다. p값이 작은 것들, 즉 작은 객체 + just background은 loss 값이 상대적으로 크다. loss값이 크므로 이를 감소시키기 위한 학습이 진행된다. 결론적으로 p값이 낮게 측정된 것들을 위주로 학습 하게끔 만드는 것이 Focal loss의 역할 인것이다.

 

FPN

a) sliding window안에 detect할 객체가 들어오지 않아서 크기을 단계별로 줄여나가면서 detect하는 방법인데, 이는 computing 과 detecting시간이 너무 오래 걸린다는 단점이 있어서 요즘은 잘 사용하지 않는다

b) 일반적인 방법으로는 b처럼 최상위에 있는 FM을 detect한다. 하지만 최상위 FM은 상당히 추성적이다. 핵심적인 정보는 갖고 있을지언정 위치특성은 없기때문에 정확도가 떨어진다.

c) 그래서 c처럼 각 레벨에 있는 FM을 detect하는 방법을 취한다. 대표적으로 SSD가 그 예로 들수 있겠다. 하지만 FM이 상위로 갈수록 손실되는 정보는 있기 때문에 이를 보완하기 위해

d) d방법인 FPN을 이용한다. FM이 상위로 올라 갈수록 resolution이 떨어지게 된다. 그래서 d처럼 skip connection을 이용한다.

빨간줄과 연결된 오른쪽 FM의 resolution 특성을 보완해 준다. 이러한 보완작업을 하기 위해서는 먼저 오른쪽 가장 위에 있는 FM을 upsampling하여 크기를 키워줘야 한다.(왼쪽 FM와 크기가 같아야 합칠수 있으므로) up-sampling을 하게 되면 유추를 해서 크기를 키우기 때문에 정보가 손실이 된다. 이를 왼쪽의 FM이 정보를 보완한다.

 

m5는 conv5를 up-sampling 하지 않고 그대로 받은 후 3*3 conv 실행한다. m4부터는 2배로 up-sampling 후 1*1로 채널을 마춘 conv4을 더해줘서 정보를 보완해 준다. 나머지도 같은 원리로 계산이 된다. 각 m5~m2에서 3*3conv를 연산하여 intermediate layer를 생성한다. intermediate layer로 classification&Regression을 실행한다. m2~5을 3*3 conv를 해주는 이유는 Aliasing effect를 제거하기 위해서다. 위 처럼 서로다른 정보가 합쳐지면 본래 가지고 있던 정보가 자칫 다른 의미로 해석이 될수있다. 왜곡될 가능성을 내포하기 때문에 3*3conv를 통해 희석을 시키는 것이다. 마치 이미지에서 뿌옇게 만들기 위한 블러링 필터와 같은 느낌인것 같다.

 

3*3을 거친 P5~P2 layter 에서 앵커박스르 적용한다. 9개의 앵커가 개별 포인트에 모두 찍히게 된다. P2로 갈수록 FM크기가 커지므로 당연히 앵커 박스의 수도 증가한다. 총 앵커박스를 합치면 약 십만개이다. 십만개 앵커박스로 분류와 예측 학습을 실행한다.

 

 

EfficientDet

EfficientDet의 핵심 2가지는 BiFPN, Compound Scaling이다.

 

BiFPN(Bi directional FPN)

BiFPN은 PANet에서 조금 개량된 버전이다. PANet과 큰 차이점은 repeated block, 즉 반복으로 사용할수 있다는 점이다. PANet은 위 그림 과정이 전부이다. 하지만 BiFPN은 위와 같은 BiFPN 블락을 몇개씩 사용가능 하다는 것이다. BiFPN 블락을 몇개 사용할건지 정하는 것은 Compound Scaling을 통해 정한다.

 

각 화살표마다 학습된 가중치를 활용하는 기법이다. 값이 갑자기 커지는 것을 방지하고자 사용된 가중치를 가지고 Fast Normalized fusion을 적용한다.

 

이미지 해상도, 필터수, 네트웍 깊이 와같은 구성요소를 따로 따로 최적화 하기 보다는 모두 조화롭게 최적화하는 방법을 적용하여 모델의 성능을 극대화한 것이 EfficientNet이다

 

제일 좋은 차를 만들기 위한 구성 요소 세가지 마력, wheel, 타이어가 있다고 가정한다. 단순하게 가장 좋은 차를 만들려면 비싸고 좋은 성능을 보이는 구성요소만 뽑아서 조합하면 된다. 하지만 현실은 그와 반대일 가능성도 있다는 것이다. 가장 좋은 것들을 모아놓아도 서로 조화롭게 어우러 지지않으면 수행능력은 기대치를 밑돌게 된다. 마치 눈, 코, 입 따로 봤을땐 원빈인데 얼굴 전체를 보면 갸우뚱하는 경우를 예로 들수 있다. 그러면 마력 , wheel, 타이어를 어느정도 비율 or 크기로 가져가면 최적화가 될수 있는가를 계산하는 것이 Compound Scaling이다.

 

compound scaling을 통해 각 모델별로 최적의 값을 찾아 낼수 있다. 이 개념을 EfficientDet에도 똑같이 적용시킬수 있다. BB, Neck,head 에서 최적의 값을 CS를 통해 찾을수 있다.

 

위 Depth 식처럼 기본적으로 3개가 설정되어 있어서 BiFPN Layer가 3개는 무조건 사용된다. width는 bottom-up에서 사용될 채널 수를 가리킨다.

위 그림처럼 feature fusion될때 3*3 separable convolution이 사용이 되며 이때의 채널수를 width가 결정해준다.

깊은 depth일땐 Relu보다 SiLU가 더 효과적이라고 구글에서 발표했다. scale jittering은 이미지에서 특정 부분을 crop한 후 확대시키는 기법이다.

soft NMS은 위 그림처럼 겹치는 박스들을 제거하지 말고 confidence을 낮춰서 제거를 방지하는 역할을 수행한다.

 

위 실습 내용은 아래 링크에서 확인 가능합니다.

2021.07.27 - [실습 note] - EfficientDet 실습모음(2021-07-27~28)

 

EfficientDet 실습모음(2021-07-27~28)

EfficientDet 강의 실습내용입니다. EfficientDet에 대한 내용은 아래 링크에서 확인하실수 있습니다. 2021.07.26 - [기록 note] - 2021-07-26(RetinaNet & EfficientDet) 2021-07-26(RetinaNet & EfficientDet) R..

ghdrldud329.tistory.com

 

728x90

+ Recent posts