이 기사에서는 도로 위의 잠재적인 위험을 감지하고 충돌을 방지하기 위한 고급 컴퓨터 비전 알고리즘을 갖춘 자전거 운전자를 위한 스마트 카메라를 개발한 내 경험을 공유하고 싶습니다. 아래에서는 프로토타이핑과 영상 데이터 수집의 전 과정을 간략하게 설명했습니다. 임베디드 엔지니어와 머신러닝 엔지니어 모두에게 흥미로울 수 있습니다. 시작하기 전에 약간의 스포일러가 있습니다. 수집된 데이터 세트는 나중에 오픈 소스로 공개되었습니다.
저는 30년의 경력을 갖고 있으며 그 중 20년은 공공 도로를 달리는 열렬한 사이클리스트입니다. 도로에서 교통사고를 당했을 때, 차가 옆에서 내 자전거를 덮쳤습니다. 다행히 약간의 타박상과 염좌를 입고 탈출했습니다. 그래서 저는 특히 공공 도로에서 자전거를 타는 사람들의 안전 문제를 이해합니다.
문제에 대한 해결책 중 하나는 자전거 카메라를 사용하여 사건을 포착하는 것입니다. 우리가 알고 있듯이 도로에서의 자전거 타기는 시점을 포착하는 카메라를 장착하면 더욱 안전해집니다. 운전자와의 다툼에서 영상을 확보하는 것은 추가적인 보호막 역할을 할 수 있습니다. 증거가 없으면 비윤리적인 운전자가 책임을 부인할 수도 있지만, 자전거 운전자를 위한 카메라가 있으면 그러한 상황에서 생명의 은인이 될 수 있습니다. 영국에는 액션 카메라 영상을 경찰에 제출하는 과정을 간소화하고 합병증을 줄이는 Nextbase라는 웹사이트도 있습니다.
즉, 사고 현장을 카메라에 담을 수 있지만 위험한 상황은 피하는 것이 항상 더 낫다는 점을 인정해야 합니다. 제가 프로젝트를 시작했을 당시에는 도로 위의 위험한 상황을 예방할 수 있는 적극적인 솔루션이 없었습니다. 그래서 저는 카메라로 스마트 자전거 백라이트를 만들기로 결정했습니다. 이 프로젝트의 임무는 자전거 이용자의 사망과 부상을 줄이는 것이었습니다.
원래 이 장치는 도로에서 자전거 타는 사람의 잠재적 위험을 감지할 수 있는 고급 컴퓨터 비전 알고리즘(미디어에서 종종 "인공 지능"이라고 함)으로 설정될 예정이었습니다. 개념을 간단한 단어로 설명하겠습니다. 소프트웨어가 위험을 감지하면 장치는 운전자의 주의를 끌기 위해 깜박이는 빛을 발산합니다. 또한, 안전 시스템은 충돌 전 뒤따르는 차량에 큰 소리를 들려 충돌 방지에 도움을 줍니다.
객체 감지 신경망(인식에 사용되는 컴퓨터 비전 알고리즘의 일부)을 훈련하려면 후방 카메라로 캡처한 공공 도로에서 다양한 시나리오의 대규모 데이터 세트를 찾아야 했습니다. 불행하게도 제가 시작할 당시에는 그러한 오픈 소스 데이터 세트를 웹에서 사용할 수 없었습니다.
운전 행동에 대한 전체 연구는 통계 분석을 위한 데이터 수집, 운전 모델 식별 및 모델링 매개변수 추정과 같은 다양한 목적을 수행하는 운송 공학에서 매우 유용합니다. 데이터와 모델은 도로 안전 분석, 교통 시뮬레이션을 위한 미시적 모델, 예측, 제어, 첨단 운전 보조 시스템을 위한 제어 로직 등 여러 분야에 적용될 수 있습니다.
앞으로는 이 프로젝트를 진행하면서 2021년 최초의 MVP 사용자의 후방 카메라로 캡처한 우크라이나 공공 도로의 데이터 세트를 생성했다고 합니다.
이러한 데이터 세트를 공개 도메인에 보유하는 것의 대중적, 사회적 중요성을 완전히 이해하고 여기에 작업 결과를 업로드했습니다.
사고를 예측하는 신경망을 가르치기 위해서는 많은 데이터를 수집해야 했습니다. 이 경우 첫 번째 베타 테스터에게 라이딩을 녹화할 수 있도록 제공할 카메라 프로토타입을 개발해야 했습니다. 다행스럽게도 내 사이클링 커뮤니티 네트워크에는 도로 안전 활동가들이 많이 포함되어 있습니다. 남은 일은 몇 가지 장치를 조립하여 첫 번째 사용자에게 전달하는 것뿐이었습니다.
아래에서는 개발 프로세스를 간략하게 설명하고 특정 기술 솔루션을 선택하는 논리를 설명하겠습니다.
하드웨어 구성: 케이스는 3D 프린팅되었습니다. 플랫폼으로는 Raspberry Pi 3B+ 컴퓨터 모듈이 선택되었으며, 케이스를 작고 가볍게 유지하기 위해 맞춤형 PCB가 제작되었습니다.
카메라에는 표준 Raspberry Pi IMX219 센서를 사용했지만 120도 렌즈를 사용했습니다. 도로에서의 가시성을 높이기 위해 고출력 LED 조명과 붉은색 렌즈(역시 3D 프린팅)가 추가되었습니다.
기기에서 신경망을 실행하기 위해 저렴하고 강력한 4 TOPs 신경 가속기인 Google Coral Edge TPU(사진 포함)를 사용했습니다. TPU는 USB를 통해 연결되었습니다.
이 모든 전자 장치는 최대 부하(비디오 녹화, 실시간 신경망 작동 및 LED 깜박임)에서 7-8W를 소비했습니다. 8Ah 리튬이온 배터리(케이스 내부 사진 포함)를 사용하여 4~5시간의 작동을 보장했습니다.
OS의 경우 더 잘 지원되고 필요한 모든 드라이버가 문제 없이 쉽게 설치되었기 때문에 표준 Raspbian을 사용했습니다. OS를 부팅한 후 작성하기로 결정한 주요 코드는 C++였습니다.
나는 이것으로 시작하는 것을 권장하지 않습니다. 실험 목적으로 Python이 초보자에게 더 나은 옵션이 될 수 있다고 믿습니다. 그러나 최대 하드웨어 기능으로 Raspberry Pi의 제한된 모든 리소스를 효과적이고 정확하게 제어하려면 C/C++로 작성하는 것이 좋습니다.
이 프로젝트에서 제가 만든 가장 흥미로운 솔루션 중 하나는 OTA(무선 업데이트) 메커니즘과 장치에서 비디오 녹화물을 수집하는 메커니즘입니다.
프로세스는 다음과 같습니다. 사용자가 라이딩을 마치고 집에 오면 USB WiFi 어댑터를 삽입하여 홈 Wi-Fi에 연결하고 장치가 동기화를 시작합니다.
모든 동영상은 Google 드라이브를 통해 동기화되었습니다. 각 기기마다 별도의 Google 계정을 만들었습니다. 제 경우에는 Google Drive에 많은 장점이 있습니다. Google Drive 웹 인터페이스를 통해 즉시 동영상을 볼 수 있었고, 수동으로 새 파일을 삭제하거나 추가하는 것이 쉬웠으며, 마지막으로 무엇보다도 실험에 무료였습니다( 각 계정당 최대 20GB). ( Google , 제발, 나쁜 소리 하지 마세요. 제가 새로 시작한 스타트업에는 MVP가 4명밖에 없었습니다.)
H.264 동영상 인코딩을 사용하면 용량 부족 없이 수백 개의 동영상을 하나의 Google 드라이브에 보관할 수 있습니다.
OTA 프로세스를 설명하겠습니다. 새 펌웨어를 컴파일한 후 Google 드라이브에 업로드합니다. 다음에 Google 드라이브와 동기화하는 동안 기기는 최신 펌웨어 버전을 다운로드하고 이전 버전을 교체합니다.
이를 위해 간단한 gdrive 유틸리티를 사용했습니다. 다음은 새 펌웨어 파일을 업로드하는 데 사용하는 코드입니다.
gdrive upload -p “gdrive folder id” “file”
아래에는 장치에 새 펌웨어를 로드하기 위한 코드 줄이 나와 있습니다.
gdrive update “id” “file”
펌웨어 버전을 확인한 후 비디오 동기화가 발생하고 모든 새로운 녹화물이 Google 드라이브에 업로드됩니다.
다음은 장치에서 디스크로 비디오를 다운로드하는 방법입니다.
gdrive sync upload “local folder” “gdrive folder id”
하루에 한 번 서버에서 스크립트를 실행하여 모든 Google 드라이브를 로컬 폴더와 동기화하고 모든 새 비디오를 다운로드했습니다.
gdrive sync download “gdrive folder id” “local folder”
따라서 몇 달 간의 작업 끝에 내 장치는 라벨링할 준비가 된 200개 이상의 비디오를 수집했습니다.
영상을 수집한 후 이를 처리하고 필터링하여 데이터 세트를 생성했습니다. 그런 다음 수동 라벨링을 위해 소규모 팀을 모았습니다. 팀에는 모든 사진에 라벨을 붙인 4명이 포함되었습니다.
결국 앞서 말씀드린 대로 데이터세트를 오픈소스에 공개하게 되었습니다. GitHub 링크를 통해 찾을 수 있습니다.
저는 오픈 소스 데이터 세트가 연구 커뮤니티를 위한 귀중한 리소스이며 도로 안전 분야의 새로운 알고리즘과 모델 개발에 크게 기여할 수 있다고 믿습니다.