필자는... 21살 수원역 어지러운 횡단보도 사이에서 무의식적으로 무단횡단을 시도하다 옆에 뻔히 서 있는 경찰에게 적발되어 범칙금 5만 원을 문 아픈 추억이 있다.
당시 범칙금을 내 마음 상태는 '앞으로 조심해야겠다가 아닌'
이 상태였는데, 성숙해진 필자는 현재 정말 한적한 밤 11시 부근에서 안전을 확인하고 종종 건너는 편을 제외하곤 왠만해서는 잘 지킨다. 2학기를 함께 하고 있는 학회 활동에서 교통 상황에서의 딥러닝 기법 적용을 구상 중이고, '무단횡단을 감지하는 모델을 만들어보면 어떨까?' 하는 기막힌 아이디어.
그래서 오늘은 일단 과거 조상들이 어떤 연구를 진행했는지 알아보기 위해 'Jaywalking Detection Deep Learning'이라 검색하면 상단에 나오는 논문 'Real-Time Jaywalking Detection and Notification System using Deep Learning and Multi-Object Tracking'을 리뷰해 보겠다.
시간이 없는 분들을 위해 먼저 간략한 요약본:
1. 기존 연구는 단일 도로 구역에서만 설계 및 평가, 알람 기능 제한적
2. 우리는 여러 도로 구역에 동시에 적용할 수 있는 실시간 다중 객체 추적 방식을 제안
3. YOLOv4와 다중 객체 추적 알고리즘 DeepSORT를 사용
요 정도 되겠다. 사실 어떻게 데이터 쓰고 연구할지 대강 보이긴 하는데, 공부하는 셈 치고 따라가보자.
이 아저씨들이 연구하게 된 계기는, 뭐 언제나 비슷하다. 기존 연구들이 너무 느리고 부정확했다는 것. 결론부터 이야기하자면,
이게 처리 무단횡단자를 인식(오른쪽), 운전자에게 알림(왼쪽)하는 방식이고
이게 무단횡단이 발생한 주위 운전자에게 알림을 보낼지 말지 하는 알고리즘이다. 그런데 말이 좀 안 되는게, 이 사람들이 알림을 보내주려면 자신들이 만든 앱을 깔고 있어야 한다고 하는데, 난 핸드폰에 앱을 까는 걸 별로 싫어하기 때문에 실효성이 있을지 모르겠다. 그리고 앱과 컴카메라 ip가 연동되어 있어야 하는데 그럼 전국에 카메라를 설치할 거냐? 그래도 기존 논문과 다르게 '우리는 알림을 보내줘요' 하고 싶었던 거 같은데 지금 여기선 알아도 별로 쓸모가 없으니 그냥 넘어가자.
그럼 이 포스팅에선 뭔 얘기를 할 거냐? 바로 이 사람들이 모델에서 주로 사용한 YOLOv4와 DeepSORT를 얘기할 거다. 그런데 YOLOv4는 얘기 안 할 거다. 왜냐면 내가 알고 있기 때문이다. DeepSort는 처음 들어봐서 공부할 겸 정리할 예정이니 만약에 YOLO를 알고 싶다면 다른 블로그를 참고하길 바란다.
DeepSort란?
간단한 알고리즘인줄 알았는데 아니었다. 차근차근 하나씩 봐 보자. 딥소트 이 기술이 전체 작동 원리는 꽤 단순한데 쓰인 기술이 많아서 하나씩 좀 살펴봐야 할 거 같다.
먼저 Kalman Filter.
자율주행에서 제일 중요한 건 무엇일까? 바로 주행 중 변수 감지와 주행 제어. 이를 위해선 내가 언제 가고, 어디로 가야 하고, 언제 멈출지 정확하게 적힌 '지도'가 필요하다. 센서와 데이터로 실시간으로 맵을 만드는, 이른바 Mapping이 필요한데, 이때 내가 어디쯤 와 있는지를 알 수 있는 Localization이 필요하다.
인간을 예로 들어보자. 내가 학교에 간다. 대충 우리 집에서 강의실까지 걸어서 15분이 걸리는데, 나는 김치찌개 집이 나오면 '아 10분 더 걸어야 하구나'를 본능적으로 느낀다. 내 안에 내재된 '지도'가 있기 때문이고, 주변 건물(데이터)를 통해 위치 파악이 가능하기 때문이다.
하지만 멍청한 로봇은? 자기가 어딨는지 모른다. 그래서 이 멍청한 로봇에게 인간과 비슷한 능력을 부여하기 위해 칼만 필터 라는 것이 사용된다.
칼만 필터는 '과거와 현재의 값을 기준으로, 이전 단계에서 계산한 값을 바탕으로 현재의 값을 계속 업데이트 하는 연산을 통해, 최적값을 추적한다.'
뭔 소리지....
정확한 알고리즘 설명과 그런 건 따로 검색해서 알아보고, 실용적인 것만 여기서 일단 살펴보자.
Predicted state estimate 는 예측한 값(예측 모델)이고, Measurement는 실제 측정값(측정 모델)이다.
Kalman filter는 이렇게 두 모델을 가지고 '더 잘 추측'하기 위해 상태를 업데이트해 나간다.
그래도 이해가 잘 되지 않는다고? 당연하다. 나도 https://limitsinx.tistory.com/72
이걸 보고서야 감이 조금 잡혔다. 이 글을 보고 와라.
이제 칼만 필터를 이해한 당신. 하지만 아직도 엄청난 많은 배경지식을 쌓아야 감이라도 잡힌다. 미안하지만 이 페이지에 그 모든 걸 적기엔 내 역량도 딸리고 다른 좋은 자료가 많다. 그러니 이 부분을 한번 읽어보고 오는 것을 추천한다.
https://velog.io/@jody1188/Object-Tracking-Simple-Online-and-Realtime-Tracking-SORT
그러면 이제 DeepSort를 살펴보는데, 관련 내용은 이 분의 블로그를 많이 참고했다. 여기까지 보고 오면 DeepSort가 무엇인지 이해할 수 있을 것이다.
왠만하면 내가 읽고 내가 정리하려고 했는데, 정리하다 보니까 이 분들 글을 그대로 복사+붙여넣기 하고 있는 자신을 발견해 그냥 아예 원본을 참고하는 것이 낫다 판단했다. 그래도 이 순서대로 한번 쭉 봐보면 이해가 갈 것이다. 다만 장담하건데 2시간 이상의 여유시간을 확보한 상태에서 공부해라.
서론이 좀 많이 길었는데, 결국 이 논문에서 무단횡단자를 감지하는 방법은 다음과 같다.
1. YOLOv4를 통해 객체를 탐지하고, DeepSORT로 각 보행자에게 고유의 ID를 할당해 추적한다.
그리고 좀 허무했던 것이...
2. 도로 구역, 횡단보도 등 모니터링 구역을
"사전에 수동으로"
설정하고, 감지된 보행자의 바운딩 박스가 겹치는지 확인해 무단횡단 여부를 판단한다.
아니 뭐 엄청 큰 그런걸 바란 건 아닌데 난 자동으로 얘가 차도도 구분하고, 횡단보도 신호등도 구분하고 할 줄 알았더니 그냥
저 빨간 area 안에 일정 비율이 겹치면 근처 (자신들이 만든) 앱을 깐 운전자에게 조심하라고 알림을 보낸다는 것이다.
다른 알고리즘이 있길 바랬는데 약간 실망이다. 예를 들어 횡단보도 구역을 자동으로 인식한다든지, 아니면 사람이 무단횡단을 하려는 제스처를 취하면 미리 경고를 해 준다던지 등. 이미 무단횡단을 하고 있는 사람들을 인식해 주변 운전자들에게 알림을 보내준다는 건 그렇게 큰 실효성이 없을 듯하다.
혹시 무단횡단에 관한 논문을 좀 더 보고 싶다면, 내 친구들이 써 놓은 리뷰를 참고해봐라. 원하는 답을 얻을 수도 있다.
'딥러닝' 카테고리의 다른 글
[프로젝트] 킥보드 위험 상황 디텍션 (1) | 2024.10.27 |
---|---|
[프로젝트] 관중석에서 아시아인을 찾아보자! (3) | 2024.10.15 |
[논문 리뷰] 보행자 감지 최강자(라 주장하는) 모델 : Localized Semantic Feature Mixers for Efficient Pedestrian Detection in Autonomous Driving (5) | 2024.09.04 |
MoveNet으로 수집한 데이터를 seq데이터로 변환하자 (0) | 2024.08.30 |
Mediapipe는 다중인식 되지 않는다. MoveNet을 이용해보자 (0) | 2024.08.23 |