본문 바로가기

프로그래밍/토이 프로젝트

(딥러닝_AI)yolov5을 이용하여 마스크 실시간 디텍션 프로젝트

프로젝트 개요

  • 캠이나 비디오를 통해 사람들의 마스크 착용상태 유무를 판단하는 2D Object Detection을 진행
  • 사람의 얼굴을 감지하여 Bounding Box를 생성하고 mask, nomask의 두 가지 class로 나타내어 줌
  • 실생활에서 마스크 미착용 금지 구역에서 미착용 상태의 사람이 있을 때 실시간으로 포착해 경고음 발생등에 사용가능

 

따라서 실시간 객체 추적모델인 yolov5를 사용하여 사람의 마스크 착용여부를 검출하도록 설계하였습니다.

https://github.com/ultralytics/yolov5

 

GitHub - ultralytics/yolov5: YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite

YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite. Contribute to ultralytics/yolov5 development by creating an account on GitHub.

github.com

 

Data processing

딥러닝은 data driven approach이기 때문에 데이터의 양과 질이 중요합니다. 

그런데 아예 맨 땅에서부터 데이터를 생성하기는 시간과 정확도가 부족했기에 아래링크의 roboflow에서 제공하는 마스크 데이터셋을 사용하였습니다.(이 데이터셋을 기본 데이터셋이라 하겠습니다) 이 데이터셋은 작은 데이터셋이기 때문에 높은 Precision을 얻기위해서 추가로 1000장을 다시 라벨링 해주었습니다. 이때 사용한 기법이 Pseudo labeling 기법이고 뒤에 자세히 설명하겠습니다.

 

https://public.roboflow.com/object-detection/mask-wearing

 

Mask Wearing Object Detection Dataset

Download 1934 free images labeled with bounding boxes for object detection.

public.roboflow.com

 

기본 데이터셋으로 yolov5 학습

기본 데이터셋은 Train 데이터셋이 100장 Validation 데이터셋이 15장 입니다.

일단 이 데이터셋으로 yolov5를 훈련시킵니다.

기본 데이터셋으로 학습한 결과(precision은 0.78)

 

훈련된 모델 테스트 사진

 

precision은 0.78이 나왔고 수치뿐만 아니라 정말로 잘되고 있나 결과사진들도 확인해 보았습니다.

 

라벨링 형식

라벨링 형식

라벨링 형식은 위 사진과 같습니다. 첫번째 숫자가 0이면 mask class, 1이면 nomask class 이며 나머지 4개의 숫자는 bounding box의 좌표입니다.

 

 

Pseudo labeling

처음 기본 데이터셋으로 학습한 우리 모델로 라벨링 되지 않은 600장을 검출하도록 합니다. precision이 0.78이 나왔기 때문에 완벽하지는 않더라도 좋은 결과들을 얻어 낼수 있었습니다. 이렇게 사람이 일일이 라벨링 하는것이 아니라 학습된 모델이 직접 라벨링되지 않은 데이터를 라벨링하게 하는것을 Pseudo labeling라 합니다. 사람은 틀린것을 빼거나 수정하는 작업만을 하고 이 검출된 결과를 다시 원래 데이터셋에 추가함으로써 데이터셋을 늘리면서 모델의 정확도도 높히고 작업시간도 상당히 단축시킬수 있었습니다.

 

pseudo labeling후 기본 데이터셋에 추가해서 다시 학습

 

이 데이터셋을 기본 데이터셋에 추가하고 학습한 결과를 보니 전체 precision이 0.846까지 약 0.08만큼 증가하였습니다.

질 좋은 데이터량이 늘었기때문에 정확도가 더 높아진것을 확인할수 있엇습니다. 이과정을 한번더 반복해서 약 1000장을 학습하도록 했습니다.

 

최종 precision

 

최종 precision이 0.938으로 실제 사용하기 충분할정도의 값이 나왔습니다.

 

이제 건물에 들어가기전에 단말기에 마스크 유무를 확인하는 시스템이란 설정으로 실시간 실험을 해보았습니다.

 

실험 영상

마스크 디텍션 데모영상

 

실시간으로 마스크유무와 마스크 착용상태(턱스크)까지 점검할수있는 마스크 디텍터가 완성되었습니다.

 

분석

  • pseudo labeling 기법으로 기계가 직접 라벨링을 하게 하여 작업시간은 줄이고 정확도는 높였습니다.
  • 의료시설이나 산업현장에서 실시간 단말기에 사용가능한 마스크 디텍터를 만들었습니다.
  • 마스크 뿐만아니라 다른 중요한 장비에 대해서도 똑같이 적용하여 다른 디텍터를 만들수 있습니다.

감사합니다.

'프로그래밍 > 토이 프로젝트' 카테고리의 다른 글

라인 트레이서 프로젝트  (3) 2023.01.18
성경 자막 자동생성 프로그램  (2) 2023.01.14