소소한 컴퓨터 이야기

좌충우돌 이상행동 탐지 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 보안 설정하기

-> 해당 내용은 다음 포스팅을 참고하여 진행하였다. 정리가 잘 돼 있어서 따로 정리할 필요성을 느끼지 못했음 ! 

 

[wecode Bonusweek] AWS 보안설정하기

AWS설정방법 참조 aws웹사이트 접속 회원가입을 한다. 우측 상단에 있는 내 계정 - AWS Management Console에서 로그인한다. 로그인 창에 두 종류의 로그인이 나오는데 IAM 사용자가 생성되지 않았으므로

velog.io

1) ec2 인스턴스 기본 설정하기

-> ec2 인스턴스를 생성하고, 필요한 라이브러리들을 설치하고, Jupyter Notebook, Anaconda 설치하는 방법에 대해 정리해두었다.

 

[Amazon AWS] ec2 instance 기본 세팅하기

안녕하세요, 오늘은 ec2 Instance를 생성하고, 해당 인스턴스에 Jupyter Notebook 및 Anaconda를 설치하는 방법에 대해 다뤄보겠습니다. * 해당 작업은 IAM 사용자로 수행하였으며, Root 계정에 MFA 보안 설정

cori.tistory.com

2) SageMaker

-> SageMaker를 이용해 S3에 데이터를 저장하고, 저장한 데이터와 모델을 엔드포인트를 이용해 로드하여 추론하는 방법을 정리하였다. 

 

[AWS] SageMaker를 이용한 모델 추론

aws sagemaker는 기계 학습 모델을 대량으로 빌드, 훈련, 배포하는데 사용되는 서비스로 이번 포스팅에서는 aws sagemaker의 jupyter notebook을 이용해 s3에 데이터를 저장하고, 모델을 불러와 추론하는 과

cori.tistory.com

3) Kinesis Video Stream (Ubuntu)

-> Kinesis Video Stream을 설치하여, 웹캠에서 촬영중인 영상을 aws Kinesis Video Stream에 전송하는 방법을 정리하였다. 

 

[AWS] Kinesis Video Stream 서비스 사용하기

Kinesis Video Streams는 재생 및 분석을 위해 미디어 스트림을 캡처, 저장 및 처리를 돕는 서비스로, 실시간 영상을 받아 처리하기 위해 이번 프로젝트에서 사용하였다. [Installation] 1. 기본적인 설정하

cori.tistory.com

4) AWS CLI

-> Amazon aws cli 설치 방법 및 기본 세팅 방법에 대해 정리해두었다. 

 

[AWS CLI] AWS CLI 설치 및 기본 세팅하기

AWS 명령줄 인터페이스(CLI)는 AWS 서비스를 관리하는 통합 도구로, 도구 하나만 다운로드하여 구성하면 여러 AWS 서비스를 명령줄에서 제어 할 수 있다. [AWS CLI 설치] 1. 설치할 디렉토리 생성 및 이

cori.tistory.com

5) EC2 <-> S3

-> Amazon aws의 s3 버킷과 ec2 인스턴스를 연동하여 파일을 전송 및 동기화하는 방법에 대해 정리해 두었다.

 

[aws] ec2 instance와 s3 bucket 연동하기

이번 포스팅에서는 ec2 instance와 s3 bucket을 연동하는 여러 방법에 대해 알아보겠습니다. [AWS CLI를 이용한 연동] 1. ec2 -> s3 upload $ aws s3 cp [source file name] s3://[destination bucket nam..

cori.tistory.com


2. 모델링

1) 다중 인스턴스 학습 공부

-> 다중 인스턴스 학습에 대한 내용은 아래 포스팅에 자세하게 적혀 있다. 해당 개념을 이용해, 분류하고자 하는 이상행동 (절도, 폭행, 방화, 정상)을 담은 Bag 여러 개를 생성해서 직접 모델링 해 보고자 시도하였다.

 

다중 인스턴스 학습

의료 분야에서 컴퓨터 비전을 적용 할 때 대부분의 작업에는 1) 진단을위한 이미지 분류 또는 2) 병변 식별 및 분리를위한 분할이 포함됩니다. 그러나 병리학 암 발견에서 이것이 항상 가능한 것

ichi.pro

-> 구현 방법을 잘못 생각해서, 하나의 인스턴스 (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으로 들어가는 파일 형태로 전처리하였다. 이를 이용해 모델링과, 알림 전송 조건에 관한 후처리 작업을 진행하였다. 이에 대한 내용은 다음에 정리해 두었다.

 

[C3D] 이상행동 탐지 모델링

앞선 포스팅에서, Docker를 이용한 C3D를 실행하기 위한 환경 구축은 완료 했고, 본격적으로 이상행동을 탐지하기 위한 데이터 전처리 및 모델링 방식에 대해 살펴보겠습니다. (편의상 반말로 작성

cori.tistory.com

3. 데모

-> Kinesis Video Streaming 서비스를 이용해 웹캠 영상을 실시간으로 수집하고, 이를 gstreamer로 영상을 ec2로 보내 ec2에서 Clip 단위로 예측을 수행한다. 52번 동안 이상행동으로 예측했을 경우, Amaznon SNS 서비스를 이용해 문자를 전송하고, DynamoDB에 로그를 저장한다. 


4. 소감

-> 2달동안 아무 사전 지식 없이 함께 고생해준 팀원들한테 가장 감사하다. 개발하면서 수없이 많은 오류를 접하고, 취업 준비하기도 벅찬데새벽 늦게까지 함께 프로젝트를 해 온 결과, 성공적으로 프로젝트를 마칠 수 있었던 것 같다.

 

또한 이번 프로젝트를 통해 파레트의 법칙은 어디에나 적용된다는 사실을 다시 한번 깨닫게 되었다. 나에게 주어진 역할은 모델링 이었지만, 온전히 모델링에 투자한 시간은 20 이하였고, 모델링을 위한 환경 세팅에 투자한 시간 + 환경 세팅 중 발생한 오류 잡는데 투자한 시간 = 80 이상이었던 것 같다.

 

많은 것을 배웠고, 아직 부족한 점이 많다는 것을 깨닫게 해준 이번 프로젝트 .. 발생한 오류 잡는 과정이 힘들기도 했지만, 혼자가 아니었기 때문에 즐겁게 할 수 있었던 것 같다. 프로젝트를 시작하기 전으로 돌아가서 누군가 나에게 이번 프로젝트를 다시 하겠냐고 물어본다면 나는 주저않고 하겠습니다라고 답할 것 같다.

블로그의 정보

코딩하는 오리

Cori

활동하기