기술블로그

[2탄] Yolo v3 를 이용한 인물 추적 프로젝트

유미포 2020. 11. 27. 13:21

 

이 포스트를 보기 전 반드시  [1탄]Yolo v3 를 이용한 인물 추적 프로젝트 을 보고 오시길 바랍니다. 이번 포스트는 전 포스트와 중복되는 내용을 많이 생략했습니다. 


2020/11/27 - [1탄] Yolo v3 를 이용한 인물 추적 프로젝트

 

 


안녕하세요. 저번 포스트에 이어 다른 영상으로 yolo v3모델을 훈련시켜보려고 합니다. 

이번에 가져온 영상은 저번 영상보다 조금 더 자율주행카트에 적합한것같아 자겨왔습니다. 


1. 최대한 비슷한 옷을 입을 사람들이 여러명 나온다

2. 화질이 너무 좋진 않다 (저희 프로젝트의 카트는 화질이 좋지 못할 예정입니다)

3. 화면이 너무 정신없게 움직이지 않는다 (실제 상황에서는 그럴 일이 없기 때문입니다 )

4. 너무 단조롭지 않은 배경


가 제가 영상을 고른 기준이였는데요, 저번에 결과가 생각보다 좋지 않아 뭐가 문제일까 고민하다가 몇가지 문제점을 나름 찾아봤어습니다. 

 

문제1) 너무 사람들이 지나치게 비슷한 옷을 입고 있다. 

문제2) 화질이 고르지 않다. ( 왜때문인지 계속 화질 저하가 발생한다) 

문제3) 사람들이 너무 많이 움직인다.

문제4) 배경이 너무 산만하다 (무대 배경/장치가 너무 화려하다)

문제5) 카메라가 전혀 움직이지 않는다

 


이러한 문제점들을 바탕으로 조금 더 프로젝트에 적합한 영상이 없을까 유투브를 떠돌아다니던중 이 영상을 발견하게 되었습니다.  

www.youtube.com/watch?v=QaZ93sibpk0&t=9s

 

아주 유명한 시리즈의 영상인데요, 촬영감독님(?)이 한 연예인의 집 내에서 그 연예인을 따라다니며 촬영한 영상입니다. 지금 나오시는분은 킴 카다시안이시죠. 다른 연예인들은 주로 혼자만 나오는데 킴카다시안님 영상에는 가족분들 (타 인물) 도 나오시고 해서  한번 가져와봤습니다. 

 

문제1) 너무 사람들이 지나치게 비슷한 옷을 입고 있다. >> 비슷한 생의 옷이지만 트와이스처럼 비슷하진 않다.  

문제2) 화질이 고르지 않다. ( 왜때문인지 계속 화질 저하가 발생한다) >> 화질이 고르게 좋다

문제3) 사람들이 너무 많이 움직인다. >> 킴 카다시안이 천천히 움직인다

문제4) 배경이 너무 산만하다 (무대 배경/장치가 너무 화려하다) >> 집이 커서 배경이 계속 바뀐다

문제5) 카메라가 전혀 움직이지 않는다 >> 카메라가 인물을 따라 움직인다. 


학습데이터로 사용할 영상 정하기 

 

영상미가 넘치는 영상이여서 쭉 보다보니 킴 카다시안께서 너무 모델학습에 적합하게 움직여주신 부분이 있어서 바로 따왔습니다. 5분 11초에서 5분 15초까지 앞, 뒤 회전까지 모두 다 해주시다니.... 제가 이 영상으로 학습을 시키시길 원하신거죠..(?) ㅋㅋㅋ 

이정도 회전과 움직임은 고객에게도 요구할 수 있을것같아서 이부분을 학습시키기로 했습니다. 다만, 저번 트와이스편에서 아쉬웠던게 1초당 4프레임의 사진만 가져온 것이였습니다. 이번엔 1초당 6프레임의 영상을 가져왔습니다. 

 

훈련에 사용한 10초 영상

 


 

1탄에서와 같이 이미지를 labelImg를 이용해서 다 박스를 그렸습니다. 저번과 다르게 한 점이 있다면, 상반신만 탐지하도록 했습니다. 생각해보니 사람을 인지하는데 꼭 전신을 인식할 필요가 없고, 프로젝트에서 사용할 카트는 카메라를 윗쪽 방향을 향하게 할 예정이기 때문에 하체를 찍을 일이 별로 없을것 같아 그런 결정을 했습니다. 

 

영상에서 훈련 데이터셋 만드는 과정
이미지마다 .txt 파일을 만들었다

이제 욜로로 학습시킬 때 필요한 파일들을 만들어야합니다.  저번 포스트에 적었던것처럼, 저는 미리 만들어져있는 실행파일로 손쉽게 만들었습니다. 파일은 제 깃허브에 올려두겠습니다. 

 

학습에 필요한 파일들 만들기 

 

.cfg파일을 만들어야합니다. 1탄에서와 같은 파일을 이용했습니다. 클래스가 1개라서 변경 할 사항이 없었습니다. 이번에는 전체 파일을 첨부하겠습니다 (제 깃허브에서도 확인 가능합니다)


훈련데이터로 모델 학습시키기

저번과 달리 데이터 훈련이 1시간밖에 걸리지 않았습니다. 사진도 더 많아졌는데 왜 더 빨리 훈련을 했을까요? (아시는분은 댓글에 남겨주세요..)  여튼 결과물로 

 

1. yolov3_kimk_train_1000.weights

2. yolov3_kimk_train_2000.weights

3. yolov3_kimk_train_final.weights

4. yolov3_kimk_train_last.weights

 

4개의 파일이 생성되었습니다. 

 

mAP를 계산하는 명령어를 통해 1000파일과 2000 파일을 비교해보겠습니다. 

 

./darknet detector map cfg/kimk_data.data cfg/yolov3_kimk_train.cfg backup/yolov3_kimk_train_1000.weights 

 

이번에도 2000번 파일이 더 정확한 결과를 냅니다. 

 

이제 yolov3_kimk_train_2000.weights 를 weight로 사용하여 원본 동영상에서 kim을 탐색하도록 하겠습니다. 

 

./darknet detector demo cfg/kim-data.data cfg/yolov3_kimk_test\ .cfg backup/yolov3_kimk_train_2000.weights -thresh 0.95 -dont_show ../../KimK/kimk.mp4 -out_filename kimk_full_result_2000_095.avi

 

(참고로 중간의 -dont_show를 지우시면 실시간으로 처리되는 데이터를 확인하실 수 있습니다)

 

저번과 다르게 한 점은 -thresh 를 0.95로 설정한 것입니다. 사실 0.7로 먼저 테스트를 해봤는데, 나오는 거의 모든 인물을 다 한번씩은 kim이라고 인식했습니다. accuracy가 0.7-0.9사이에서 다른 인물도 kim으로 인식하는걸 보고 항상 0.95-1.00으로 인식되는 진짜 kim 만 인식할 수 있게 thresh를 확 높혔습니다. 

 

생각해보면 사람을 잘못인식하는것보다 인식 못하는게 자율주행 카트의 역할을 잘 할 듯 합니다. (멈춰있는게 고객이 아닌 다른 사람을 따라가는 것보다 좋다고 생각했습니다) 


최종 결과 

 

사람이 한명 있을때 탐색

움직이고 뒤를 돌아보는 모습도 잘 감지합니다! 혼자 있을 때는 확실히 높은 정확도를 가지고 있는것같습니다 ( 전체 영상을 다 보셔도 거의 98%(뇌피셜) 인식합니다)


 

사람이 많을때 인식

 

 사람들과 함께 있을때도 나름 잘 인식하는것같습니다. 다른사람을 많이 인식하는 것보다 인식을 못하는게 낫다고 생각하는 사람으로서, 굉장히 만족합니다. 


 

조명과 빛이 다를때의 인식

이렇게... 잘 움직여주시고... 조명과 명암도 바꿔가며 움직여주시는건 진짜 자율주행카트 알고리즘 테스트할때 쓰라고 하신것같아요... ㅎㅎ 감사합니다 ㅎㅎ 


남편을 인식한다

그래도 인식을 완벽히 하진 못합니다. 남편을 가끔 인식하기도 합니다. 


전체 영상을 올리고싶었지만... 어떻게 잘라도 저작권에 다 걸리네요...(유투브 알고리즘...대단해..)

영상 전반적으로 인식을 아주 잘합니다. 가족 나올때 빼고는 정말 정확히 인식하는것같습니다. 혹시 전체영상을 보고싶으시다면 제가 이메일로 보내드리겠습니다. 댓글 남겨주세요 ㅎㅎ

 

이번 결과는 성공적인것같습니다. 가끔 남편을 kim으로 잘못인식하는 부분이 있지만, 아주 잠깐이고 금방 인식을 멈춥니다. kim이 혼자 있을 때에는 거의 항상 정확히 찾는것을 알 수 있습니다.  

 

훈련할때 사용한 영상이 일반고객에게도 요구할 수 있는 수준의 움직임인걸 생각하면 굉장히 만족스럽습니다. 

 

결국 저희가 yolo를 deepsort와 연결하여 사용하게 되었는데, 다음에는 deepsort알고리즘을 소개하는 포스트를 써볼까 합니다.

그점 저는 이만!