본문 바로가기

개발공부

yolo v3

SSD에 이어 yolo에 대해서 들여다 보았다. 현재 v4?버전 까지 나와있는거 같은데 나는 v3에 대해서만 글을 쓰려고 한다. 아래 네트워크 구조를 보면 굉장히 이해가 잘 되도록 설명되어있다. 

 

 

차근차근 기억을 되집어서 얘기해보면 일단 backbone에서 feature map을 뽑아낸다. 크기가 13 * 13이 되면 여기서 1차적으로 detection한 결과를 뽑아낸다. 13*13이기 때문에 비교적 크기가 큰 물체를 detect하는 경향이 있다. 

두번 째로 여기서 그치지 않고 13*13 featre map을 upsampling해서 그전에 가지고 있던 26*26  feature map과 합친다. 이렇게 되면 이점은 13*13에서 가지고 있던 추상화된 정보를 가지고 26*26에 합침으로서 더 풍부한 정보를 얻을 수 있다. 그리고 다시 26 * 26에서 detect한 결과를 추출한다. 이 과정을 다시 한 번 반복하여 52*52 사이즈에서도 실행한다. 이렇게 뽑아낸 3개의 feature map에서의 정보를 취합한 후 NMS를 거쳐서 detect score가 높은 Object를 걸러낸다. 그것이 yolo v3이다. 

 

yolo v2와 가장 다른점은 FPN의 사용과 Anchor box의 개수가 feature map마다 3개씩 총 9개를 사용했다는 점이다. 아래 그림은 조금 더 디테일하게 설명해놓은 그림인데 위에 그림과 비교해가면서 보면 이해가 쉽기는 하다.

 

 

또 특이한 점은 FPN을 거친 결과는 이제 Head 부분으로 들어가서 Classification과 Regression의 절차를 거칠 텐데 여기에 Dense 층을 쓴것이아니라 Conv 층을 사용한 것이다. Dense 층을 사용하게 되면 image들의 inputsize를 통일시켜줘야하는 번거로움이 있는데 Conv층은 비교적 자유롭다. 

 

공부한 내용을 복습하면서 집어본거라 틀린 내용이 있을 수도 있다. 

 

CV를 이용해서 inference해보았는데 SSD랑 속도는 비슷한거 같다. 아.. 코드는 git에 올렸다. 

'개발공부' 카테고리의 다른 글

[안드로이드 9.0프로토콜 변경사항]  (0) 2021.08.03
콘다 env 생성  (0) 2021.07.25
SSD(Single Shot Detector)  (0) 2021.07.23
Android studio  (0) 2021.07.01
Object Detection_RCNN  (0) 2021.06.29