프로그래밍/머신러닝

YoLov1 신경망 각 레이어들 연산, 손실함수 담백한 리뷰

하루에 한번 방문하기 2021. 9. 18. 20:28

YoLov1 신경망 구조, 이미지 출처 : 원 논문

YoLov1 :
   신경망 구성  
  1. 입력층
   결과 : 448x448x3 해설 : (w, h, c) 입력층의 이미지
  2. Conv층
    결과 : 224x224x192 
    해설 : 3x7x7x64 필터(c, w, h, n)로 2 stride 적용하여 Convolution.
      즉, 3 channel을 가진 7x7 필터를 64개 사용하여 Convolution 연산한 결과가 224x224x192 
  3. MaxPool층
    결과 : 112x112x192 
    해설 : 즉, 2x2의 크기를 가진 윈도우로 2 stride 적용하여 MaxPool 연산한 결과가 112x112x192 
  4. Conv + MaxPool 
     결과 : 56x56x256
  5. Conv층 여러개 + MaxPool 
     결과 : 28x28x512
     해설 : GoogLeNet처럼 Convolution을 여러 필터로 연산한 후 Bottleneck으로 합쳐, MaxPool
  6. Conv층 여러개 + MaxPool 
     결과 : 14x14x1024
  7. Conv층 여러개 + MaxPool 
     결과 : 7x7x1024
  8. Conv층 여러개 + MaxPool 
     결과 : 7x7x1024
.. 1~8에서 MaxPool 연산 전마다 활성화함수 LeakyReLu 적용. 여기까지 Pretraining한다.

  9. Flatten으로 완전연결층 입력으로 사용 + 완전연결층(Fully Connected Layer) + 결과에 LeakyReLu 적용
     결과 : 4096x1
10. 완전연결층(ReLu적용안함)
     결과 : 1470x1

11. Reshape
     결과 : 7x7x30

YoLov1 신경망 결과층에 담길 정보. 이미지 출처 : https://www.cnblogs.com/Lilu-1226/p/10587978.html


... 1~11까지 진행하여, Convolution과 maxpooling에 의해
  448x448 이미지의 특징 맵을 7 x 7만큼 가진 그리드 셀이 생성되었다. 
... 각 셀들은 바운딩 박스 갯수만큼 b개의 { x, y, w, h 및 confidence score}를 가져야 한다.
    confidence score란 Pr(Object) * IOU. 
   Pr은 Predict의 약자. 일반적인 CNN(Convolutional Neural Network)의 결과층 Predict(가중합)과 비슷한 맥락이다.
   IOU는 Intersection Over Union의 약자이다.
   즉, "물체가 있을 확률" * "예측과 정답 바운더리 간 영역 겹침률"을 의미한다.
    

IOU 계산, 이미지 출처 : https://medium.com/curg/you-only-look-once-다-단지-한-번만-보았을-뿐이라구-bddc8e6238e2


... 또한 각 셀들은 분류 클래스 갯수만큼 c개의 conditional class probability를 가져야 한다.
    conditional class probability란 object가 어떤 class인지 예측한 것들을 의미한다.
... 즉, 특징 맵이 7x7x30인 위 신경망의 경우
   448x448 이미지에 대해 전역 Convolution 연산을 거듭하여, 추출한 특징맵이 7x7의 그리드 셀이 되게했다.
   그리고 각각의 셀이 "2 * { x, y, w, h 및 confidence score} + 분류 클래스 각각에 대한 예측도들"를 가지게
 신경망을 설계했다.

YoLov1의 손실함수, 출처 : https://towardsdatascience.com/yolov1-you-only-look-once-object-detection-e1f3ffec8a89


YoLo의 손실 함수 :
 머신러닝 모델은 손실함수가 나타내는 값을 최소화함으로써 훈련된다.
 
 머신러닝에 속하는 딥러닝 YoLo 모델은
  손실함수 유형 중 SSE(sum squared error, 최소제곱법)를 사용하며,
 신경망에 대한 정답 데이터로 "object를 포함하는 정답 바운더리 데이터 x, y, w, h"를 받는다.
  '+' 기호로 구분되는 5개의 항을 최소화해야 한다.

  첫번째 항 : 
    정답데이터 x, y와 예측값x, y의 차이(손실)를 제곱한다.
    즉, 정답데이터 x, y와 예측데이터 x,y의 차이가 적게 나오도록 훈련시킬 것이다.
  두번째 항 :
    정답데이터 w, h와 예측값 w, h의 제곱근의 차이(손실)를 제곱한다.
    즉, 정답데이터 w, h와 예측데이터 w, h의 차이가 적게 나오도록 훈련시킬 것이다.
  세번째 항 :
    어떤 오브젝트가 있는(obj) 영역의 정답데이터 Confidence Score와 예측값 Confidence Score의 손실을 제곱한다.
    이때, Confidence Score는 "YoLov1 신경망 구성 문단"에서 상술했듯 Predict(Object) * IOU로 계산한다.
    즉, 배경이 아닌 영역의 정답 데이터의 {영역 겹침률, 예측값}과 예측 데이터의 {영역 겹침률, 예측값}의 차이가
     적게 나오도록 훈련시킬 것이다.
  네번째 항 :
    어떤 오브젝트도 없는(no obj) 영역의 정답데이터 Confidence Score와 예측값 Confidence Score의 손실을 제곱한다.
    즉, 배경인 영역의 정답 데이터의 {영역 겹침률, 예측값}과 예측 데이터의 {영역 겹침률, 예측값}의 차이가
     적게 나오도록 훈련시킬 것이다.
  다섯번째 항 :
    cell에서의 class를 predict한 예측값과 정답 데이터와의 차이(손실)를 제곱한다.


 


출처 : 
YoLov1 한국어 리뷰 : https://medium.com/curg/you-only-look-once-다-단지-한-번만-보았을-뿐이라구-bddc8e6238e2
   손실함수 설명 : https://curaai00.tistory.com/8
   https://leechamin.tistory.com/233
   https://velog.io/@skhim520/YOLO-v1-논문-리뷰-및-코드-구현
YoLov1 영문 리뷰 : https://towardsdatascience.com/yolov1-you-only-look-once-object-detection-e1f3ffec8a89
Confidence 캘리브레이션 : https://3months.tistory.com/490
Confidence (mAP 계산) https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=angelkim88&logNo=221564305011


신경망 구조와 기법들 중심으로 다루어,

가능한 담백하게 YoLov1부터 YoLov4까지 공부한 걸 정리해 올려보겠습니다.

다음 리뷰는 YoLov1이 20개의 클래스를 다룬 것에 비해

무려 9000개의 클래스를 detection 하는 YoLov2 입니다.