YOLOv3를 이용한 턱스크찾기 프로젝트
마스크 / 턱스크 / 마스크를 쓰지않은사람을 찾아내고 분류하기
소개
실시간으로 마스크 쓴 사람과 쓰지 않은 사람을 구분할 수 없을까하는 생각에 이 프로젝트를 진행하고 되었고, 마스크를 제대로 쓰지 않은 사람까지 구별해 보자가 이 프로젝트의 목표입니다. 방법은 이미지에서 사람의 얼굴이 어디 있는지 탐지하고 그 다음에 분류를 하면 될 거라고 생각했습니다.
저는 마스크를 쓴 사람을 0
마스크를 제대로 쓰지 않은 사람을 1
마스크를 쓰지 않은 사람은 2로 분류했습니다.
그리고 이 분류가 초당 30장씩 가능하다면 실시간으로 가능하겠죠
사용한 알고리즘과 환경
그래서 객체탐지에서 매우 빠르고 정확하다는 욜로라는 알고리즘을 사용했고, 코랩 기반으로 진행했습니다.
기존에 학습된 네트워크를 가져와서 전이학습 형태로 썼는데 이 네트워크는 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
'인공지능 > CV' 카테고리의 다른 글
인공지능이 만드는 폰트 [ HAN2HAN : Hangul Font Generation] (0) | 2021.11.13 |
---|---|
GAN에서의 미분 (Pytorch) (0) | 2021.10.13 |
객체탐지 (Object Detection) 2. YOLO !! (v1~v3) (2) | 2021.05.01 |
객체탐지 (Object Detection) 1. YOLO 이전 까지 흐름 (0) | 2021.05.01 |
MASK RCNN 실행시 버전오류 (0) | 2021.04.20 |
댓글