일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 스파르타코딩클럽
- 백준평범한배낭
- 백준9012
- 윤곽선검출
- 컴퓨터비전
- 냅색알고리즘
- 확인문제
- 코딩테스트실력진단
- 2019카카오코테
- java
- BOJ
- 이것이자바다
- 딥러닝
- 코드트리
- 운영체제
- 백준가운데를말해요
- 백준스택
- 백준
- 합성곱연산
- 가운데를말해요
- 백준10828
- BOJ1655
- 웹개발기초
- 이것이자바다9장
- 백준괄호
- 코테
- 이것이자바다확인문제
- KT포트포워딩
- 백준온라인저지
- 카카오코테
- Today
- Total
코딩하는 락커
[Week4] 비-최대값 억제 +앵커 박스 + YOLO 알고리즘 본문
비-최대값 억제Non-max suppression example는 알고리즘이 각 물체를 한 번씩만 감지하게 해준다. 즉, 찾아낸 많은 bounding box들 중 가장 정확한 것을 제외하고 지우는 역할을 하는 것이다.

비-최대값 억제를 하기 위해서는 먼저 각 bounding box의 감지 확률 p_c을 계산한다. 그리고 감지 확률이 가장 높은 것(위 이미지에서는 0.9, 초록색 bounding box) 에서 object를 찾았다고 가정한 뒤 나머지 bounding 를 검사하여 가정한 부분과 많이 겹치는, 즉 IOU가 높은 bounding box들(0.7, 0.8, 파란색 bounding box들)을 억제시키는 것이다.
이렇게 되면 처음에 가정했던 한 개의 bounding box만 남아있게 된다.
만약 코드로 구현하고자 할 때는 p_c가 0.6이하인 값의 bounding box를 다 버리고, 그래도 2개 이상의 bounding box가 남아있다면 가장 높은 값을 가진 bounding box를 결과로 도출하면 된다.
그럼 만약 한 개의 영역에서 여러 개의 물체를 감지하고 싶다면 어떻게 해야 할까? 이를 해결하기 위해서 사용하는 것이 바로 앵커 박스Anchor Box이다.

앵커 박스의 아이디어는 서로 다른 모양의 여러 개의 앵커 박스를 결합한 형태의 output 레이블 y를 사용하는 것이다. 위 이미지와 같은 object를 감지한다고 할 때, 우선 초록색 모양의 앵커 박스와 빨간색 모양의 앵커 박스를 정의한다.

위 이미지처럼 초록색 앵커박스에 해당하는 매개변수와 빨간색 앵커 박스에 해당하는 매개변수를 모두 넣어 output 레이블 y를 정의하는 것이다. 그리고 앵커 박스들 중 object와의 IOU가 높은 값을 찾아 격자 셀, 앵커 박스의 쌍에 배정한다.
그러면 위 예시에 따른 결과 레이블은 3 x 3 x 16 사이즈가 된다.
만약 두 물체가 모두 있는 경우 결과 레이블의 p_c값은 두 개 다 1이 되고, 각각의 중심값, 경계 상자값, 클래스 값을 갖게 된다.
두 물체 중 한 개만 있는 경우 결과 레이블의 해당 물체의 p_c값만 1이 되고, 다른 쪽 앵커 박스의 값은 임의의 숫자를 갖는다. 끝!
그러면
1. 먼저 앵커 박스를 고려한 target vector Y(격자 높이 x 격자 넓이 x (앵커박스 개수 x 결과값 벡터)를 구성하여 신경망을 훈련시킨 뒤 output volume(물체존재여부, 중심값(x, y), 경계 상자값(h, w), 클래스들)을 도출하고
2. 훈련된 신경망이 예측 값을 출력하고
3. 비-최대값 억제를 적용하여 가장 가능성이 높은 bounding box를 출력하면
YOLO 알고리즘을 구성할 수 있다!
'[2020] 📚 DSC 겨울방학 스터디' 카테고리의 다른 글
[Week4] 경계 상자 예측하기 + 합집합 위의 교집합(IOU) (0) | 2020.02.07 |
---|---|
[Week4] 물체 인식 + 합성곱으로 슬라이딩 윈도 구현하기 (0) | 2020.02.06 |
[Week4] 물체 로컬리제이션 + 특징점 탐지 (0) | 2020.02.03 |
[Week3] 왜 케이스 스터디를 하나요? + 고전적인 네트워크들 (0) | 2020.02.01 |
[Week3] 왜 합성곱을 사용할까요? (0) | 2020.02.01 |