오답노트
[yolov5] Yolo 모델 설명 본문
객체검출 프로그램인 yolo에 대해서 간단히 설명해보고자한다.
현재까지 나와있는 yolo 는 v5 까지 존재하는데, 나는 여기서 가장 최근에 나온 v5 를 사용했다.
yolov5 에는 s, m, l, x 의 총 4개 모델이 존재하는데
뒤로 갈수록 속도가 빠르고 가벼운 대신 객체 검출의 성능은 떨어진다. (같은 yolo 모델과 비교했을 때)
나는 그 중 가장 속도가 빠르고 가벼운 s 모델에 대해서 설명해보고자한다.
yolov5 를 해체를 시켜보면 제일 먼저 nc, depth_multiple, width_multiple 이 나와있다.
nc 는 말 그대로 number of classes 로 클래스의 갯수이다.
Depth_multiple 은 레이어의 반복이고, Width_multiple 은 채널의 크기이다.
아래의 anchors 는 객체를 감지할 때에 어느 크기로 검출을 할 건지에 대한 박스의 크기이다.
그 다음에는 backbone 이 존재한다.
yolo를 훈련 시킬 때 미리 학습 된 가중치를 사용할 경우에는 해당 레이어는 필요가 없지만, 가중치를 사용하지 않는 경우에는 backbone 에 위치한 레이어들부터 학습이 처음부터 진행이 된다.
각 구조는 convolution layer 들과 기타 기능을 하는 레이어들의 모음이다.
마지막에 나오는 Spatial Pyramid Pooling 은 기존의 Max, Average pooling 과는 달리 입력 된 이미지 데이터의 크기에 상관하지 않고 학습을 시킬 수 있는 pooling 방식이다.
전반적인 알고리즘은 아래와 같다.
1. 먼저 전체 이미지를 미리 학습된 CNN을 통과시켜 피쳐맵 (특성) 을 추출한다.
2. Selective Search를 통해서 찾은 각각의 RoI들은 제 각기 크기와 비율이 다르다. 이에 SPP를 적용하여 고정된 크기의 feature vector를 추출한다.
3. 그 다음 fully connected layer들을 통과 시킨다.
4. 앞서 추출한 벡터로 각 이미지 클래스 별로 binary SVM Classifier를 학습시킨다.
5. 마찬가지로 앞서 추출한 벡터로 bounding box regressor를 학습시킨다.
위의 알고리즘을 이용하면 입력 이미지에 상관하지 않게는 피처맵을 얻을 수 있고 그것으로 학습을 진행시킬 수 있다.
그 다음은 head 부분이다.
head 는 앞서 선언 된 레이어들을 통과해서 나온 피처맵들을 upsampling 시키며 학습을 진행한다.
최종적으로 detect 레이어에서 위에 선언 된 nc 와 anchors 를 이용하여 학습 된 결과치들을 통해 객체들을 검출한다.
'머신러닝, 딥러닝' 카테고리의 다른 글
FairMOT (수정 중) (0) | 2021.06.08 |
---|---|
yolo loss (IoU) (0) | 2021.05.17 |
머신러닝 모델 관련 (GradientBoosting) (0) | 2021.04.13 |
머신러닝 모델 관련 (SVC) (0) | 2021.04.13 |
HMM (Hidden Markov Model) - 은닉 마르코프 모형 (0) | 2021.03.29 |