안녕하세요 2조 HufsSuperman의 발표를 맡은 팀장 김준입니다.
저희는 논문 형식으로 프로젝트를 진행했고, 논문 제목은 ~입니다.
- 서론
- 현대사회에서 운전자폭행 사건에 대한 보도가 끊임없이 나오고있고 2021년 8월 전남 여수 택시기사 폭행사건, 2022년 12월 광주 택시기사 폭행사건등 대대적으로 보도될 만큼 크고 작은 운전자 폭행사건이 전국적으로 발생하고 있습니다. 경찰청에 따르면 지난 2022년 운전자 폭행 발생 건수는 약 4300여건으로 매일 평균 12회 꼴로 운전자 폭행사건이 발생하고 있습니다. 이에 따라 보호 격벽 설치 의무화와 같은 운전자 폭행 방지를 위한 노력을 하고 있지만 보시는 그래프와 같이 최근 5년간 운전자 폭행 사건은 급증하고 있는 추세입니다. 저희 논문에서는 택시와 같은 승용차 내에서의 운전 자 폭행을 탐지할 수 있는 딥러닝 모델을 구축했고 실시간 운전자 폭행 탐지를 위해 빠른 연산을 지원하는 경량화 모델을 제안하고 있습니다.
- 데이터셋 설명
- 저희는 aihub의 운전자 및 탑승자 상태 및 이상행동 모니터링 데이터셋의 이상행동 7종 중 운전자 폭행 데이터를 사용했습니다. 또한 실전환경의 테스트를 통해 유튜브에 업로드 되어있는 운전자 폭행 영상을 python 라이브러리를 이용하여 추출했고 폭행이 있는 구간과 없는 구간을 나누어 라벨링 하였습니다.
- 아래 영상을 보시면 같은 영상 중 폭행이 있는 구간과 없는 구간을 나누어 라벨링 하였음을 알 수 있습니다.
- 데이터셋 이미지 개수 문제
- 다음으로 저희 직면한 데이터셋의 문제입니다.
- aihub 데이터셋은 폭행 장면에 대한 영상과 이를 분할한 5개의 이미지로 구성되어있는데요. 저희는 이 중 5개의 이미지를 사용하여 모델을 학습하였습니다. 이 과정에서 발생한 문제점은 저희의 모델은 8개의 프레임을 사용하는 모델이기 때문에 최소 8개의 이미지가 필요했는데 따라서 5개의 이미지를 8개로 증강시켜 모델 학습에 사용하였습니다
- 먼저 폭행 데이터는 오른쪽 위에 보시는 것처럼 1,2,3,4,5 와 같이 폭행 이미지가 포함된 5개의 이미지가 있을 때 장면의 흐름을 해치지 않도록 1,2,3,4,5,4,3,2의 순서로 총 8개의 이미지로 구성하였습니다. 여기서 장면의 흐름을 해치지 않는 다는 말은 8개 이미지로 증강하였을 때, 연속된 두 이미지의 번호 차이가 1을 넘지 않도록 하는 것입니다. 하지만 정상 데이터는 해당 데이터셋이 이상행동 데이터셋임으로 정상데이터가 존재하지 않습니다. 따라서 5장의 이미지 중 연속된 정상이미지를 찾아 장면의 흐름을 헤치지 않도록 순서를 배치하여 구성하였습니다. 위 아래 정상 데이터의 예시를 보시면 scene A 에서 정상 데이터인 1,2,3번을 1,2,3,2,1,2,3,2와 같이 장면의 흐름을 해치지않게 배치하고 있는 모습을 볼 수 있습니다.
- 이렇게 구성한 정상/폭행 데이터를 train, valid, test 각각 8대 1대 1로 사용했습니다.
- Data Sampler
- 다음으로 새로운 샘플러 구축입니다. aihub 데이터셋에는 비슷한 장면들이 많앗는데요. 이러한 장면들을 하나의 폴더로 묶어서 한 epoch당 비슷한 장면들 중 하나의 장면만 학습할 수 있도록 custom sampler를 구축하였습니다.
- 사진을 보시면 오른쪽 두번째 폴더 목록은 비슷한 장면을 모아놓은 폴더들로, 한 에폭에서 이 중 하나의 장면만 샘플링하여 학습에 사용합니다.
- Data Pipeline
- 다음으로 데이터 파이프라인입니다. config 파일에서 설정된 데이터 파이프라인을 통해 모든 이미지들이 처리되는데요. 먼저 MultiScaleCrop을 통해 너비 대 높이를 뜻하는 지정된 4개의 비율중 랜덤하게 선택되어 이미지가 크롭되고, Resize를 통해 224x224의 이미지로 리사이징됩니다. 마지막으로 random flip을 통해 이미지를 좌우로 flip하는 과정을 거칩니다. 이런 augmentation 과정을 통해 좀 더 다양한 데이터를 학습할 수 있도록 했습니다.
- validation pipeline도 MultiScale Crop을 사용하는데, 랜덤하게 한 비율만 crop해서 사용하는 train과 달리, validation에서는 Test Time Augmentation을 사용해 모든 비율에 대한 결과를 출력해 일반적인 성능을 측정할 수 있도록 합니다.
- 모델 소개
- 본 논문에서는 운전자 폭행 탐지를 위해 행동 인식 딥러닝 모델인 tsn(Temporal Segment network)를 사용합니다. tsn은 two-stream model로써 2개의 스트림에서 공간정보와 시간정보를 각각 입력받아 결과를 추출한 후 마지막단에서 통합하는 과정을 거쳐 행동을 분류하는 딥러닝 모델입니다. 먼저 이미지를 입력받는 spatial convnet을 통해 공간정보를 추출하고 두 이미지 사이의 차이인 Optical Flow를 입력받아 temporal convnet을 거쳐 시간정보를 추출합니다. tsn은 temporal segment라고 명명되어있는 만큼 긴 영상을 k개의 segment로 나눠서 공간정보와 시간정보를 추출한 후 이들을 통합하여 행동 분류를 하게됩니다.
사진에서는 3개의 segment로 나눠 사용하고 있지만, 저희는 8개의 segment를 처리하는 모델로 구축하였습니다.
- Mobileone 소개
- 저희는 앞서 설명드린 TSN에서의 Spatial ConvNet과 Temporal ConvNet에서 Resnet50으로 사용되던 것에서 경량화를 위해 경량 CNN인 Mobileone을 사용했습니다.
- Mobileone은 기존 많은 경량 CNN 논문에서 제안된 구조적인 경량화 기법이 아닌 실제 메모리 엑세스에 대한 좀 더 하드웨어 친화적인 경량화 기법입니다.
- 예를 들어 MobilenetV1에서는 기존 Convolution 연산을, 채널별로 더하지 않는 Depthwise Convolution과 1x1 Convolution으로 나눠 연산량을 줄였고, MobilenetV2에서는 residual block에서 차원이 축소된 후 다시 확대되는 연산을, 반대로 확대한 후 축소하는 방식인 inverted residual block을 제안해 연산량을 줄였습니다. 이와 같이 구조적으로 연산량을 줄이는 기법이 많이 제안되었는데요, 이때 연산량을 줄이는 기준으로 초당 연산량인 Flops와 Parameter 수를 기준으로 모델을 제안하고 있습니다.
- 하지만 Mobileone에서는 Flops와 Parameter가 낮아도 실제로는 memory access에서 지연이 발생해 시간이 오래 걸린다고 합니다. 실제로 왼쪽 두 그래프를 보시면, x축이 시간이고 y축이 각각 Flops와 파라미터수인데 다른 경량화 모델은 오른쪽 하단에 위치해 y축인 파라미터수와 Flops가 작아도 시간이 오래 걸리는 것을 확인할 수 있습니다.
- Mobileone은 skip connection과 같이 branch가 많은 연산은 해당 branch로 복사되면서 memory access 시간이 늘어나는 문제가 발생한다고 합니다. 따라서 Mobileone은 오른쪽 하단 그림처럼 학습시에는 skip connection을 사용하지만, 추론시에는 reparameterization을 통해 skip connection 없이 빠르게 동작하도록 구현되었습니다.
- 이런 Mobileone은 transformer 계열인 Mobileformer보다 38배 빠르고 저희가 비교한 다른 경량 CNN 중에서도 가장 좋을 것이라 판단되어 이를 채택하게 되었습니다.
- Model List
- 저희가 실험에 사용한 모델은 다음과 같습니다. 먼저 mobileone_s0부터 s_4까지 모델 크기가 작은순이고 마지막으로 resnet50으로 가장 큰 모델입니다.
- 모델 학습은 다음과 같은 하이퍼파라미터로 학습을 진행하였고, MultiStepLR을 사용해 40에폭, 80에폭에서 0.1배만큼 lr을 줄이며 모델이 고도화 되도록 했습니다.
- Conclusion 1
- 다음은 모델 성능을 비교한 표입니다.
- validation을 기준으로 저장된, best model로 test set에 대한 성능을 비교한 표이다.
- f1 score를 보면 resnet 50을 사용한 TSN은 0.67, mobileone_s0을 사용한 TSN은 0.66 등 mobileone_s3를 사용한 TSN이 0.7로 가장 성능이 좋은 모델이었다.
- Conclusion 2
- 다음은 가장 성능이 좋았던 mobileone_s3를 사용한 TSN과 기존 모델인 resnet50을 사용한 TSN의 Youtube 데이터셋에 대한 테스트 성능표 입니다.
- 이 경우에도 mobileone_s3를 사용한 TSN이 0.05만큼 더 좋은 f1 score를 달성했음을 알 수 있습니다.
- 기대 효과 및 활용 방안
- 이런 저희의 모델을 차량 시스템에 결합하여 사용한다면,
- 기대효과 설명
- 또한 차량 시스템이 아닌 다른 활용방안으로 사고 경위 촬영, 데이터 수집 및 통계에도 기여할 수 있습니다.
- 개선점
- 개선점으로는
- 핸들링으로 인한 몸쏠림과 같은 역동적인 행동의 데이터를 추가 학습할 필요가 있다고 보고 있고,
- 탑승자가 다수인 데이터도 추가 학습할 필요가 있다고 보고 있습니다.
- 후속 연구로는
- 이전 페이지에서 말씀드린 차량 시스템 탑재가 있고,
- 버스와 같은 다른 대중교통으로도 확장할 수 있습니다.
이상으로 2조 HufSuperman 팀의 발표를 마치겠습니다.
질문 대비
- Resnet보다 MobileOne이 성능이 더 좋은 이유는?
- 아무래도 resnet은 오래된 모델이고 MobileOne은 Transformer 계열인 MobileFormer와 비슷한 수준의 성능을 보여서 성능이 더 좋게 나온 것 같다.