운전자의 졸음을 인식하는 AI
레벨 3 자동화에서도 운전자의 주의는 필요
졸음운전은 아주 위험합니다. 미국 고속도로 교통안전국에서는 2017년에 졸음운전으로 인해 미국에서 약 90,000건의 충돌 사고, 50,000명의 부상자, 800명의 사망자가 발생한 것으로 추정하고 있습니다.
제조사들은 자율 차량을 목표로 하고 있지만 아직 운전자가 누워서 잠을 청할 수 있는 단계는 아닙니다. 주의력 없는 보행자, 궂은 날씨, 노후화된 도로 등으로 가득 찬 예측 불가능한 세계를 헤쳐 나가는 일은 최첨단 AI(인공 지능)에게도 아직은 머나먼 길입니다. 당분간 대부분의 자동차는 운전자가 도로에 집중을 해야 하고 자동차가 요청하면 운전자가 핸들을 잡아야 하는 레벨 3 자율성을 넘어설 수 없을 것입니다. 졸음운전은 계속 문제가 될 것입니다.
자동차는 운전자의 졸음 정도를 판정해야 하고 이에 대해서는 다양한 솔루션이 있을 수 있습니다. 운전자의 눈꺼풀을 추적하는 솔루션도 있지만 조명 조건 또는 운전자의 시선에 따라 문제가 발생합니다. 다른 솔루션은 핸들 움직임 같은 운전자의 입력을 평가하지만, 자율주행 차량에서는 운전자가 핸들을 잡고 있지 않기 때문에 이는 소용이 없을 것입니다. 하지만 Graz University of Technology에서 나온 새로운 연구에서는 AI의 영리한 응용을 통해 심장의 전기 활동으로 졸음운전을 판정할 새로운 방법을 찾았습니다.
데이터의 패턴
분류를 위한 견고한 머신러닝 알고리즘을 훈련시키려면 상당한 수의 레이블이 지정된 표본이 필요합니다. 레이블이 지정된 훈련 표본을 생성하기 위해 이 오스트리아의 팀은 직접 제작한 운전 시뮬레이터를 사용했습니다. 이는 오락실에서 볼 수 있는 비디오 게임이나 레이싱 게임 의자와는 비교할 수 없습니다. ADSG(Automated Driving Simulator of Graz)는 MINI Countryman 자동차 전체로 시작합니다. 운전자 주위에는 LCD 패널이 8개 있고 바람과 엔진 소음이 사운드 시스템에서 나오며, 베이스 스피커들이 장치 전체를 진동시킵니다.
Graz의 공학부 교수이자 팀 리더인 Arno Eichberger 교수는 이렇게 말합니다. "매우 사실감이 있습니다. 그리고 졸음운전에 관한 이 특정 연구의 경우에는 이런 단조로운 운전을 시뮬레이션하는 게 그다지 어렵지 않아서 더 좋습니다."
그들은 다른 자동차가 없는 야간 고속도로 주행을 재현했습니다. 그는 "일부 운전자에게서는 완전한 미세 수면을 얻을 수 있었습니다"라고 말합니다.
이 팀은 92명의 운전자에 대한 데이터를 수집했습니다. 각 참가자는 충분한 휴식을 취한 상태로, 또 피곤한 상태로 총 두 번에 걸쳐 실험실로 왔습니다. 피곤한 상태의 참가자들은 최소한 16시간 동안 잠을 자지 않았거나 전날 4시간 이하의 수면을 취한 상태였습니다. 방문할 때마다 그들은 수동 및 자동 운전 시나리오에 참여했습니다.
Eichberger는 "기본적인 아이디어는 공개적으로도 사용할 수 있는 졸음운전자에 대한 거대하고 독특한 데이터베이스를 만드는 것이었습니다"라고 말합니다.
연구원들은 안구 움직임, 호흡, 발한, 시선 방향, 동공 확장 등 운전자에 대한 다양한 데이터를 수집했지만 연구는 ECG(심전도) 전극을 사용한 심장 활동 측정에만 의존했습니다.
졸음을 객관적으로 측정하는 일은 여전히 과제로 남아있지만, 연구에서 Graz의 연구원들은 교통 심리학자들이 운전자를 녹화한 화면을 보고 하품, 머리의 꾸벅임, 긴 눈 깜빡임 등에 기반해 최선의 평가를 내리도록 요청해서 실측 레이블을 만들었습니다. 심리학자들은 경각 상태, 보통 졸음, 심한 졸음, 수면 등 네 가지 레이블을 제공했습니다. 이 연구에서는 후자의 두 레이블을 심한 졸음으로 분류했습니다.
Eichberger는 적어도 세 가지 졸음 상태가 있어야 한다고 강조했습니다. 왜냐면 경각 상태와 심한 졸음 상태만 있다면 운전자가 심한 졸음 상태에 있다고 자동차가 경고할 때는 이미 위험하기 때문입니다.
딥 슬립
Eichberger의 팀은 다층 신경망을 사용하는 딥러닝이라는 머신러닝 기법을 사용했습니다. 그들은 공간적 입력값을 처리하도록 특별히 고안된 신경망인 컨벌루션 신경망을 구축했습니다. 이러한 유형의 알고리즘은 고양이 사진을 보고 픽셀의 복잡한 패턴을 분간한 후 그 영상을 고양이로 식별할 수 있습니다.
과거의 졸음 감지 방법에서는 수작업으로 코딩한 규칙을 적용해서 복잡한 파형으로 도달하는 ECG 신호를 처리했습니다. 심장이 박동할 때마다 ECG에는 R-피크라는 신호가 생성됩니다. 프로그래머들은 소프트웨어가 R-피크를 찾도록 하고, 피크들 사이의 시간을 측정한 후에 그 간격이 얼마나 다른지를 계산해서 졸음과 상관관계가 있는 심박 변이라는 통계량을 생성하였습니다. 그러나 이러한 방법들은 ECG 신호에 감춰진, 연구원들이 미처 찾을 생각을 하지 못하는 다른 중요한 정보를 놓칠 수 있었습니다. 딥러닝은 사람이 경험을 통해 직관을 형성하는 식으로 그러한 미묘한 패턴을 식별할 수 있기 때문에 강력합니다.
그럼 단순한 전기 진폭 시퀀스에 불과한 ECG 신호에 어떻게 영상을 위해 고안된 컨벌루션 신경망을 적용할 수 있을까요? 그리고 그렇게 하는 이유는 뭘까요? 방법을 알려드리자면 바로 이 파형을 영상으로 변환하는 것입니다.
Energies에 게재된 이 새로운 방식에 관한 논문의 주 저자인 Sadegh Arefnezhad는 MATLAB®에서 Wavelet Toolbox™를 사용해서 웨이블릿 스케일로그램을 만들었습니다. 시계열 데이터는 다양한 주파수로 된 짧은 '웨이블릿'의 집합으로 간주할 수 있습니다. MATLAB은 파형을 x축은 시간, y축은 주파수로 하는 더 단순한 웨이블릿으로 분해합니다. 웨이블릿 스케일로그램에서 각 지점의 밝기는 해당 시점에서 그 주파수의 웨이블릿의 진폭을 나타냅니다.
왜 파형을 음영 처리된 영상으로 변환한 다음에 신경망에 입력할까요? MathWorks의 Principal Software Engineer인 Wayne King은 이렇게 대답합니다. "어떤 신호의 시간-주파수를 보면 관련된 특징이 원시 시간 영역 데이터에 비해 더 확연하게 보이기 때문입니다." "중요한 점은, 영상으로 만든 덕분에 컴퓨터 과학자들이 오랜 시간 발전시켜 온 컨벌루션 신경망의 장점을 연구원들이 사용할 수 있게 되었다는 점이죠."
Arefnezhad는 그 영상과 실측 졸음 레이블을 MATLAB에서 Deep Learning Toolbox™를 사용하여 만든 신경망에 입력했습니다. "아주 사용자 친화적이었습니다." Arefnezhad가 말합니다. "다양한 유형의 계층을 추가하여 쉽게 저만의 신경망을 만들 수 있었죠." 그는 신경망이 ECG 신호를 경각 상태, 보통 졸음 또는 심한 졸음으로 분류하도록 훈련시켰습니다. 신경망은 분류 결과가 맞냐 틀리냐에 기반하여 스스로를 조정합니다.
불균형 데이터의 균형 잡기
신경망의 끝에 있는 중요한 계층에서는 데이터가 불균형하다는 사실을 고려합니다. 예를 들어 수동 주행 테스트에서는 전체 표본의 6%만 심한 졸음운전자들의 그것이었습니다. 알고리즘이 나머지 두 레이블만 추측했다면 거의 항상 맞았을 것입니다. Arefnezhad는 훈련 중에 심한 졸음 표본에 가중치를 부여하는 계층을 추가했습니다. 그는 다른 일부 연구원들은 졸음과 비졸음으로 고르게 분할된 데이터를 알고리즘에 입력한다고 말합니다.
신경망은 가상 뉴런들의 연결 강도를 정의하는 파라미터로 구성되어 있습니다. 그러한 파라미터들이 훈련 중에 변화합니다. 그들은 훈련 중에 하이퍼파라미터도 사용합니다. 연구원들은 이러한 값들을 설정하여 학습률(피드백에 반응해서 파라미터가 변하는 정도)을 조절하고 훈련 중에 추가할 잡음의 양을 조절하고 이는 신경망의 견고성에 영향을 줍니다. 어떤 사람들은 기본 규칙을 기초로 하이퍼파라미터를 선택하고, 어떤 사람들은 무차별 대입 검색을 사용하여 많은 파라미터를 시험합니다. Arefnezhad는 시간이 지나면서 검색 범위를 좁히는 확률론을 사용하는 베이즈 최적화를 사용했습니다.
이 팀은 아직 보지 않은 영상으로 신경망을 테스트하고, ECG 데이터에서 수동으로 추출한 특징에 의존하는 다른 두 머신러닝 방법과 성능을 비교했습니다. 먼저 그들은 R-피크들 사이의 모든 간격을 수집했습니다. 다음에 일련의 간격의 집합에 있는 표준편차 등 11가지 값을 계산했습니다. 그들은 이런 값들을 KNN(k-최근접 이웃) 모델과 랜덤 포레스트 등 두 가지 분류기 중 하나에 입력했습니다. 그러한 기본 방법 중 최고인 랜덤 포레스트는 수동 운전 모드에서 졸음을 분류할 때 62%의 정확도를, 자동 모드에서는 64%의 정확도를 달성했습니다.
딥러닝 신경망은 이런 방법보다 더 나은 성능을 보였습니다. 각각 77%와 79%의 정확도를 달성했습니다. Arefnezhad는 스케일로그램에서 정확한 단서를 찾는 신경망의 능력에 감탄했습니다. 그는 "영상을 보면 경각 상태와 보통 졸음운전자는 큰 차이가 없습니다. 하지만 신경망은 차이를 쉽게 식별합니다"라고 말합니다.
앞으로의 길
Eichberger와 Arefnezhad는 앞으로 이 연구가 많은 방향으로 발전할 수 있다고 봅니다. 실용적인 응용에 대한 명확한 장애물은 운전자들이 일상적으로 착용하지 않는 가슴 전극을 사용해서 ECG 데이터를 수집했다는 점입니다. 스마트워치 같은 다른 센서가 가슴 전극을 대신할 수 있습니다. 연구원들은 피부색의 변화에서 맥박을 감지할 수 있는 카메라 시스템도 개발하고 있습니다. "시장에 출시할 솔루션을 만드는 것이 우리의 계획은 아닙니다." Eichberger가 말합니다. "저희는 운전자 졸음을 현재 가능한 기술로 현재 우리가 아는 방식보다 더 나은 방식으로 분류할 수 있다는 사실을 보여주려고 합니다."
그들은 ECG 데이터와 기타 데이터를 조합해서, 한 신호에 고장이 있는 경우에도 더 견고한 시스템을 만들 수 있길 바라고 있습니다. 신호가 사람마다 다를 수 있기 때문에 그들은 개인화된 분류기를 만들려고 합니다. 분류기를 미세 조정하기 위해서는 시뮬레이터에서 운전자가 시간을 보내며 데이터를 제공해야 합니다.
Eichberger와 Arefnezhad는 정지된 시뮬레이터에서 테스트 트랙으로 옮길 계획을 가지고 있습니다. 그러면 또 다른 문제에 접근하는 데 도움이 될 수 있습니다. "현재로서는 차량이 고장일 때 운전자가 개입하는 절차를 어떻게 설계해야 되는지 아무도 모릅니다." Eichberger의 말입니다. "핸들을 잡으라고 운전자에게 어떻게 알려줘야 할까요? 얼마나 많은 시간을 허용해야 할까요?"
자동차가 운전자를 보통 졸음 상태에서 깨어 있는 상태로 유지할 수 있다면 운전자의 개입이 훨씬 매끄러울 것입니다. Eichberger는 "따라서, 운전자가 막 보통 졸음 상태가 되었을 때, 심지어 졸리기 직전 상태일 때를 아는 것은 엄청난 발전입니다"라고 말합니다.