코린이의 공부일기

[Boost Camp] U.stage_Object detection 본문

BOOST CAMP_정리

[Boost Camp] U.stage_Object detection

SOJUNG 2021. 9. 12. 02:15

 

what is object detection ?

Instance segmentation과 Panoptic segmentation은 Semantic segmentation과 달리 같은 class이지만 다른 개체들(instance)들 도 분류하며 더 많은 정보를 제공해줄 수 있는 advanced 된 기법이다.

→ 이렇게 개체들을 구분하는 기술이 Object detection에 적용된다.

 

output값으로 X좌표와 Y좌표 그리고 width,height 값, Class을 도출하는 방식이다.

위치 정보, class 정보의 사례는 Autonomous Driving, Optical Character Recognition(OCR) 많이 쓰인다.

 

 

Two-stage-detector

 

Faster CNN

 

Region Proposal Network을 Neural network로 대체했다

R-CNN에 들어가기 앞서서 먼저 IoU와 Anchor Boxe에 대해 알아보자 !

 

IoU= 두 영역의 교집합 / 두 영역의 합집합

→ IoU의 값이 클수록 잘 중첩되어 있음을 알 수 있다.

 

 

 

Anchor Box는 각각 위치를 지정하고 scale과 비율별로 후보군을 지정해놓은 것이다.

각 후보군 마다 IoU값을 기준으로 positive sample/negative sample을 지정하고 loss 값을 정해주며 학습을 진행한다.

 

 

Faster R-CNN의 구조

 

Feature map을 뽑고 RPN을 을 통해 Resion Proposal을 여러 개 제안한다.

제안된 Resion Proposal에 RoI pooling을 적용하고 boundingbox regression과 classifier을 도출한다.

 

매 위치마다 K개의 anchor box 후보 들을 고려해준다.

256dimension의 벡터 1개를 추출한다.

 

 

Single-stage detector

 

Single stage detector은 정확성은 어느정도 포기하고 RoI pooling을 하지않으며 빠른 속도의 처리를 보여준다.

-ex) YOLO

 

 

 

YOLO 구조

 

최종적으로 각 위치마다의 결과가 도출된다(7 X 7 X 30)

 

 

YOLO의 단점을 보완한 방식 - Single shot Multibox Detector (SSD)

 

Single shot Multibox Detector (SSD)

→ 다양한 bounding box shape들을 고려할 수 있음 → 성능이 좋아진다.

 

 

결과적으로 SSD는 YOLO보다 속도면과 정확도 면에서  더 좋은 결과를 가진다.

 

 

Single stage detector vs Two stage detector

 

Single stage detector 은 RoI pooling을 진행하지 않아 모든 영역에 대해 gradient을 계산하는 방식으로 data imbalance의 문제가 생긴다.

 

 

Focal Loss

 

 

γ(감마) 에 따라서 큰 값일 수록 loss의 기울기가 shape해진다.

정답에 가까우면 gradient는 거의 무시가 되며, 어렵고 잘못 판별되는 부분들은 좀 더 강한 weight을 준다.

 

 

 

 

Further Thinking

 

Q. Focal loss는 object detection에만 사용될 수 있을까요?

A. 아니요! classification 에서도 사용할 수 있습니다. segmentation : 경계면에 loss값을 크게 주면 경계에 대한 컨트롤 가능!

 

Q. CornerNet/CenterNet은 어떤 형식으로 네트워크가 구성되어 있을까요?

A. 박스의 후보를 걸러내는데 사용되는 computation power를 줄일 수 있습니다.

A. CenterNet은 yolo와 다르게 앵커 박스를 생성하지 않고 오브젝트의 중심을 바로 학습함, CornerNet은 그 반대

 

Q. 그림 예시에서 나온 9개의 bounding box로 어떻게 훈련을 시킬 수 있나요?

A. IOU를 기준으로 특정 값보다 높은 값을 택하고 특정 값보다 낮은 값을 틀린 것으로 보도록 학습!

 

 

 

09-10 회고 + 계획

 

오늘 강의는 너무너무 어려웠다..사실 너무 직관적으로만 강의를 이해한 것 같아서,

전체적으로 Transformer 부분과 Faster RCNN 부분을 다시 정리해 볼 예정이다.

Semantic segmentation, instance segmentation에 구성과 트레이닝 과정을 유심하게  볼 필요가 있으니 꼭! P stage전에 티스토리에 정리해야겠다.

  그리고 같은 조 캠퍼분께서 3번 째 필수과제를 응용한 efficientnet 을 이용해 segmentation을 적용한 코드를 공유해주셨는데 너무 많이 도움이 되었다.

요즘 cv관련 코드에 대해 익숙해지려고 많이 노력하는데 추가적으로 다른 모델을 적용한 코드를 주셔서 Segmentation을 더 공부할 수 있었다 . 나도 앞으로 과제에서 멈추지 않고 다른 모델을 적용한다거나 다른 데이터를 적용해보는 응용력을 길러보도록 노력해야겠다.

그리고 오늘 추가적으로 진행하는 프로젝트를 위해서 ubuntu에 대해서 공부했는데 기초명령어부터 잘 설명되어있는 블로그를 발견해서 내일 ubuntu명령어에 대한 포스팅을 쭉 훑어볼 예정이다.

https://sikaleo.tistory.com/15?category=884074 

 

리눅스(우분투) 입문자를 위한 기초 명령어1 - ls, mkdir, cd, rm, mv

이번 시간에는 리눅스 명령어들에 대해서 다뤄보겠습니다. 저도 리눅스를 사용한 지 몇달 안되서 저와 같은 리린이(?) 분들을 위한 포스팅이 되겠습니다. 리눅스를 편안하게 쓰신다면 한 번 빠

sikaleo.tistory.com

 

* 9월 3주차에 꼭 해야할 것

 

1. Ubuntu 명령어 익숙해지기

2. Convolution neural network 기초 찾아보고 잊고 놓쳤던 부분 따로 학습하고 포스팅

3. Semantic segmentation과 object detection 구글링해보며 이해하려 노력하기 

4. 백앤드 프로젝트 진행순서 체크하고 Crawling 찾아보기

Comments