YOLO

TensorFlow를 이용한 YOLO v1 논문 구현 #9 - 최종 실행 및 결과 확인

가면 쓴 사냥꾼 2022. 7. 8. 16:13

이전 포스팅 모음:

  1. https://it-the-hunter.tistory.com/26?category=1035318
  2. https://it-the-hunter.tistory.com/31?category=1035318
  3. https://it-the-hunter.tistory.com/28?category=1035318
  4. https://it-the-hunter.tistory.com/32?category=1035318
  5. https://it-the-hunter.tistory.com/33?category=1035318
  6. https://it-the-hunter.tistory.com/34?category=1035318
  7. https://it-the-hunter.tistory.com/36?category=1035318
  8. https://it-the-hunter.tistory.com/37?category=1035318
 

TensorFlow를 이용한 YOLO v1 논문 구현 #8 - evaluate.py

이전 글: https://it-the-hunter.tistory.com/36 TensorFlow를 이용한 YOLO v1 논문 구현 #7 - train.py 이전 글: https://it-the-hunter.tistory.com/34 TensorFlow를 이용한 YOLO v1 논문 구현 #6 - model.py 이..

it-the-hunter.tistory.com

최종 실행 및 결과 확인

지금까지 참 힘들게 달려왔다. 드디어 최종 결과를 확인할 차례다 !!


train.py 실행

일단 먼저 yolo 모델에 데이터를 학습 시켜줘야 한다. 터미널 또는 아나콘다 프롬프트를 열고 다음과 같이 입력해주자.

python train.py

그럼 위 사진처럼 train.py가 실행되며, voc 데이터셋을 다운로드하고 실행 준비가 진행된다.

  • Total params: 22,907,195
  • Trainable params: 22,872,763
  • Non-trainable params: 34,432

준비가 완료되면 epoch별로 loss function이 적용되며 학습이 진행된다. epoch의 default값은 135이므로, 다르게 설정해주고 싶으면 train.py를 이렇게 실행하자.

python train.py --num_epochs=임의값

학습이 진행되는 도중, 결과를 시각화하기 위해 tensorboard를 이용할 것이다. 실행에 문제가 없다면 tensorboard_log 폴더가 생성되고 그 안에 train과 validation도 생성될 것이다.


Tensorboard를 이용한 시각화

tensorboard --logdir=tensorboard_log

http://localhost:6006/에 tensorboard 시각화가 완료됐다는 메세지이다. 브라우저를 이용해 들어가자.

위 사진과 같이 각 그래프들이 정상적으로 출력되면 성공이다. 시각화된 것들을 분석해보자.


class_loss

class의 loss 값들이다. 처음에는 갈피를 못잡다가 학습이 충분이 진행되면서 안정권에 진입하는 걸 볼 수 있다.


coord_loss

coord의 loss값이다. class와 마찬가지로 학습이 충분히 진행되면 안정권에 진입한다.


object_loss

오브젝트 검출에 대한 loss값이다. class나 coordinate만큼은 아니지만 그래도 조금씩 안정적으로 변화하는 걸 확인할 수 있다.


noobject_loss

오브젝트가 없는 이미지들의 loss 값이다. object와 극명히 대비되는 모습인데, 학습이 진행되면 될수록 안정권에 들어간다. 이는 오브젝트가 있는 사진이 학습 데이터에 더 많기 때문으로 추측된다.


learning_rate

learning rate 값이 너무 크면 가중치가 발산되어버려 객체 검출이 불가능해지고, 오히려 너무 작으면 객체 검출 속도가 굉장히 느리다. 본 YOLO v1 모델에서는 일정 학습 후 learning rate가 확 떨어지는 모습을 볼 수 있다. 이후 적당한 값을 찾은 모습으로 진행이 된다.


total_validation__toal_loss

total validation loss의 값이 점진적으로 나아지고 있는 모습이다. total loss 값은 전체적인 loss를 합한 값이라 가시성이 떨어진다 판단했고, 오히려 validation이 중간 평가에 목적을 두고 있으므로 total_validation_total_loss로 확인하는 것이 바람직하다고 생각한다.


Images

왼쪽은 정답 영역이고, 오른쪽은 예측 영역이다. 불안정했던 예측 영역이 학습이 진행될수록 정교해지는 걸 확인할 수 있다.


evaluate.py

학습이 완료됐고 tensorboard로 시각화에 성공까지 했다면, evaluate로 최종 평가를 할 시간이다. 터미널 또는 아나콘다 프롬프트에 다음 과 같이 입력하여 evaluate.py를 실행하자.

python evaluate.py

train.py와 유사하게 실행될 것이다. 각 레이어들이 출력된 후 최종적으로 166장의 이미지가 저장된다.

우리가 tensorboard에서 확인한 것과 동일한 결과들이다. 이로써 YOLO v1 구현이 완료되었다 !!