본문 바로가기
인공지능/CV

YOLOv3를 이용한 턱스크찾기 프로젝트

by EXUPERY 2021. 5. 1.
반응형

 

YOLOv3를 이용한 턱스크찾기 프로젝트

마스크 / 턱스크 / 마스크를 쓰지않은사람을 찾아내고 분류하기


소개

실시간으로 마스크 쓴 사람과 쓰지 않은 사람을 구분할 수 없을까하는 생각에 이 프로젝트를 진행하고 되었고, 마스크를 제대로 쓰지 않은 사람까지 구별해 보자가 이 프로젝트의 목표입니다. 방법은 이미지에서 사람의 얼굴이 어디 있는지 탐지하고 그 다음에 분류를 하면 될 거라고 생각했습니다.

 

저는 마스크를 쓴 사람을 0

마스크를 제대로 쓰지 않은 사람을 1

마스크를 쓰지 않은 사람은 2로 분류했습니다.

그리고 이 분류가 초당 30장씩 가능하다면 실시간으로 가능하겠죠

 

사용한 알고리즘과 환경

 

 

그래서 객체탐지에서 매우 빠르고 정확하다는 욜로라는 알고리즘을 사용했고, 코랩 기반으로 진행했습니다.

 

 

https://towardsdatascience.com/yolo-v3-object-detection-53fb7d3bfe6b

기존에 학습된 네트워크를 가져와서 전이학습 형태로 썼는데 이 네트워크는 80개로 분류하는
코코데이터을 통해서 훈련되었고, 네트워크 구조 등에 대한 설명은 제가 이전에 작성해놓은 포스트를 참조하시면 좋습니다. 

 

객체탐지 (Object Detection) 2. YOLO !! (v1~v3 간단리뷰)

객체탐지 (Object Detection) YOLO !! (v1~v3 간단리뷰) YOLO YOLOv3는 조셉이라는 분에 의해서 개발되었습니다. Github에서 다크넷을 클론해서 쓰는 방식으로 굉장히 편리하게 사용할 수 있습니다. 구글 코

exupery-1.tistory.com

 

 

 

DATASET

데이터셋을 구하는 것이 가장 힘들었던 부분이었습니다. 라벨링된 데이터를 찾기 힘들었는데, VitorLin께서 본인 깃헙에 구글드라이브를 통해 제공하셨습니다. 분류되는 클래스는 다음과 같이 정했습니다.

  • no mask - No mask at all.
  • improperly - Partially covered face.
  • mask - Mask covers the essential parts.

따라서 모델 cfg를 classes=80에서 classes=3으로 바꾸어주었고, filter도 255에서 24로 변경하였습니다.

 

Evaluation

객체를 얼마나 잘 검출하는가를 평가하는 recall값이 0.95로 굉장히 잘 검출한다는 것을 알 수 있습니다. 마스크를 썼는지 안썼는지 유무를 파악하기위해 먼저 사람의 얼굴을 탐지하는 것이 첫번째입니다. 예측한 박스가 정말 사람얼굴을 예측했는지 묻는 precision보다는, 이미지 or 영상 내에있는 사람의 얼굴을 얼마나 잘 찾았는지에대한 재현률(recall)값이 중요하다고 생각했습니다. 그리고 결과는 만족스러웠습니다.

예측한 박스와 실제 얼굴이 얼마나 겹치는지 말해주는 IoU도 평균적으로 70%가 겹친다고하니, 사람의 눈으로 식별하는데는 무리없을 것 같이 보입니다.

 

Average Precision은 각각의 클래스에 대해서 IoU를 0.05간격으로 Precision과 Recall이 차트에 그리고, 그 그래프의 아래면적인 AUC를 구하는 방법입니다.(오른쪽의 max값으로 그린 curve의 아래면적을 구하는 방법입니다. 성능지표는 이 후 포스트에서 다루도록 하겠습니다.). 그리고 구해진 Average Precision을 평균낸 것이, 객체검출에서 자주 쓰이는 Mean Average Precision입니다. 준수한 성능을 보이고 있습니다.

 

 

Real Time

실시간으로 탐지하는 것이 이 프로젝트의 목표 중 하나였고, 로컬에서는 다크넷에서 제공하는 demo를 통해 구현할 수 있습니다. 저는 추가적으로 제가 사용했던 구글 코랩상에서 구현하고자 하였고, theAIGuys님의 코드를 참조하여 추가하였습니다. 실시간으로 마스크를 쓰지않은 상태에서, 제대로 쓰지않은 상태, 제대로 쓴 상태로 순차적으로 넘어가는 것을 촬영한 영상입니다. 정확하게 인지하는 것을 알 수 있습니다.

 

 

 

Github

아래는 이 프로젝트를 담은 Repository입니다. 누구나 쉽게 따라할 수 있도록 만들어 놓았습니다.

 

MINED30/Face_Mask_Detection_YOLO

Contribute to MINED30/Face_Mask_Detection_YOLO development by creating an account on GitHub.

github.com

 

 

반응형

댓글