좌충우돌 이상행동 탐지 CCTV 프로젝트
by Cori부제: C3D, 3D Convolution Layer를 이용한 이상행동 분류
6개월간의 교육 과정이 모두 끝이 났다. 마지막 2달 동안은 이상행동 탐지 CCTV 프로젝트를 진행했는데,
이에 대한 내용을 이번 포스팅에서 다뤄보려 한다.
※ 프로젝트 코드는 보유하고 있지 않습니다 (2023.12.16)
0. 개발 환경, 개발 배경 및 서비스 아키텍처
0) 개발 환경
aws region: ap-northeast-1 (Tokyo, Kinesis Video Stream 서비스를 이용하기 위함)
ec2 instance: Deep Learning Base AMI (Ubuntu 18.04) Version 49.0, p2.xlarge
Deep Learning Base AMI (Ubuntu 18.04) Version 49.0, p2.8xlarge (c3d trainig)
aws service: Kinesis Video Streams, EC2, DynamoDB, Amazon SNS, Amazon S3
1) 개발 배경 - 증가하는 CCTV를 이용한 효율적인 범죄 모니터링 추진
2) 서비스 아키텍처
CCTV 영상을 실시간으로 받아오기 힘들어, 웹캠을 통해 스트리밍으로 실시간으로 받아오는 것으로 대신하였다. 받아온 영상에 대해 ec2 인스턴스에 저장되어 있는 C3D 모델을 이용하여 이상행동 분류를 수행하고, 이상행동이 반복 검출될 경우 해당 값을 문자로 보내주는 서비스를 제공한다.
1. aws 서비스 체험기
0) 계정 생성 및 MFA 보안 설정하기
-> 해당 내용은 다음 포스팅을 참고하여 진행하였다. 정리가 잘 돼 있어서 따로 정리할 필요성을 느끼지 못했음 !
1) ec2 인스턴스 기본 설정하기
-> ec2 인스턴스를 생성하고, 필요한 라이브러리들을 설치하고, Jupyter Notebook, Anaconda 설치하는 방법에 대해 정리해두었다.
2) SageMaker
-> SageMaker를 이용해 S3에 데이터를 저장하고, 저장한 데이터와 모델을 엔드포인트를 이용해 로드하여 추론하는 방법을 정리하였다.
3) Kinesis Video Stream (Ubuntu)
-> Kinesis Video Stream을 설치하여, 웹캠에서 촬영중인 영상을 aws Kinesis Video Stream에 전송하는 방법을 정리하였다.
4) AWS CLI
-> Amazon aws cli 설치 방법 및 기본 세팅 방법에 대해 정리해두었다.
5) EC2 <-> S3
-> Amazon aws의 s3 버킷과 ec2 인스턴스를 연동하여 파일을 전송 및 동기화하는 방법에 대해 정리해 두었다.
2. 모델링
1) 다중 인스턴스 학습 공부
-> 다중 인스턴스 학습에 대한 내용은 아래 포스팅에 자세하게 적혀 있다. 해당 개념을 이용해, 분류하고자 하는 이상행동 (절도, 폭행, 방화, 정상)을 담은 Bag 여러 개를 생성해서 직접 모델링 해 보고자 시도하였다.
-> 구현 방법을 잘못 생각해서, 하나의 인스턴스 (Mnist Image 1장) = 하나의 비디오 데이터라고 생각하고 구현을 시도하였더니 학습 데이터 구성하는 부분에서 커널이 자꾸 죽는 문제가 생겼다. 결국 프로젝트 기간 내에 구현을 못할 것 같아, 중건에 Stop하고 C3D 모델을 살펴보기 시작했다.
2) C3D
-> C3D는 Convolutional 3D의 약자로, 3차원 Convolution Layer와 Filter를 이용하여 입력 데이터의 공간적 특징 뿐만 아니라 시간적 특징까지 추출할 수 있는 네트워크 모델이다.
. C3D 실행 환경 구축
-> C3D 네트워크는 caffe를 기반으로 작성된 모델로, 나온 지 좀 시간이 지난 모델이어서 개발환경을 구축하는데 우여곡절이 많았다. 결국 bvlc/caffe:gpu docker image를 사용하여 개발 환경을 구축해서 사용했다.
. 데이터 전처리 및 모델링
-> UCF Crime Dataset을 이용해 우리가 분류할 이상행동 유형 (방화, 폭행, 절도, 정상)에 해당하는 데이터셋을 재구축하고, C3D 모델 Input으로 들어가는 파일 형태로 전처리하였다. 이를 이용해 모델링과, 알림 전송 조건에 관한 후처리 작업을 진행하였다. 이에 대한 내용은 다음에 정리해 두었다.
3. 데모
-> Kinesis Video Streaming 서비스를 이용해 웹캠 영상을 실시간으로 수집하고, 이를 gstreamer로 영상을 ec2로 보내 ec2에서 Clip 단위로 예측을 수행한다. 52번 동안 이상행동으로 예측했을 경우, Amaznon SNS 서비스를 이용해 문자를 전송하고, DynamoDB에 로그를 저장한다.
4. 소감
-> 2달동안 아무 사전 지식 없이 함께 고생해준 팀원들한테 가장 감사하다. 개발하면서 수없이 많은 오류를 접하고, 취업 준비하기도 벅찬데새벽 늦게까지 함께 프로젝트를 해 온 결과, 성공적으로 프로젝트를 마칠 수 있었던 것 같다.
또한 이번 프로젝트를 통해 파레트의 법칙은 어디에나 적용된다는 사실을 다시 한번 깨닫게 되었다. 나에게 주어진 역할은 모델링 이었지만, 온전히 모델링에 투자한 시간은 20 이하였고, 모델링을 위한 환경 세팅에 투자한 시간 + 환경 세팅 중 발생한 오류 잡는데 투자한 시간 = 80 이상이었던 것 같다.
많은 것을 배웠고, 아직 부족한 점이 많다는 것을 깨닫게 해준 이번 프로젝트 .. 발생한 오류 잡는 과정이 힘들기도 했지만, 혼자가 아니었기 때문에 즐겁게 할 수 있었던 것 같다. 프로젝트를 시작하기 전으로 돌아가서 누군가 나에게 이번 프로젝트를 다시 하겠냐고 물어본다면 나는 주저않고 하겠습니다라고 답할 것 같다.
'AI > Projects' 카테고리의 다른 글
인스타그램 크롤링 (해시태그, 계정 ID) (8) | 2022.04.29 |
---|---|
[Elastic Search] 트위터 데이터 실시간으로 수집, 시각화하기 (0) | 2021.10.31 |
도로주행 영상에서 신호등 검출하기 (4) | 2021.10.29 |
COVID-19 이전과 이후 국내 시·도별 수출 현황 분석 (0) | 2021.09.13 |
블로그의 정보
코딩하는 오리
Cori