프로젝트 개요
어린이집 폭력감지 CCTV로, yolov7을 사용하여, 교사가 아이를 학대할 경우 부모님 핸드폰으로 해당 폭력 영상을 전송하여, 어린이집 학대 사건이 일어났을 경우 증거인멸을 하지 못하게 하며, 빠른 시일 내에 부모님이 아이가 학대받는지 아닌지 알 수 있도록 하기 위해 이번 프로젝트를 진행하게 되었습니다. 거꾸로 어린이집 교사 입장에서는 아이가 작은 생채기가 생겨도 교사의 학대에 의한 것이 아닌, 아이의 실수에 의해 상처가 났다는 등 억울한 일이 생기지 않도록 도와줄 수 있습니다.
프로젝트 현위치
현재 30frame마다 keypoint값을 받아 저장한 후, 30프레임 단위로 폭력을 감지하는 방식으로 프로젝트를 진행하고 있습니다. 30frame으로 묶었더니, list 사이즈가 맞지 않아 난항을 겪고 있습니다...
numpy배열인 줄 알았던 yolov7의 kpts가 사실은 tensor였다는 것을 알았습니다.. 원하는 대로 배열이 만들어지지 않는데는 다 이유가 있었네요... 그래서 오늘은 tensor에 대해 알아보며 keypoint값을 무사히 추출한 후 LSTM 학습을 진행할 예정입니다.
Tensor
tensor란, 간단하게는 다차원 배열을 의미합니다. 텐서의 속성에는 모양, 자료형, 어느 장치(device)에 저장되는지가 있습니다. 원래는 1차원으로 구성된 값은 벡터, 2차원은 행렬, 3차원 이상의 배열을 텐서라고 부르지만 파이토치에서는 모두 torch.Tensor입니다. 편의를 위해 numpy로 변환하여 진행하였습니다.
numpy
numpy배열 두 개를 붙이는 여러 방법 중, concatenate 와 vstack의 차이점에 대해 알아봅시다. 딥러닝에서 배열 데이터를 사용하기 위해선 numpy에 대해 아주 잘 알아야 하는데요, numpy는 두 개의 배열을 합치는 함수가 상당히 많고, 합치는 방법도 다양해서 많이 헷갈리기 마련입니니다. 그중에서도 제가 이번 프로젝트를 진행하며 헷갈리는 두 개만 정리하고 넘어가도록 하겠습니다.
np.concatenate([x,y])
x = np.array([1,2,3,4,5,6])
y = np.array([7,8,9,10,11,12])
output1 = np.concatenate([x,y])
print(np.shape(output1))
print(output1)
np.vstack([x,y])
x = np.array([1,2,3,4,5,6])
y = np.array([7,8,9,10,11,12])
output1 = np.vstack([x,y])
print(np.shape(output1))
print(output1)
풀어서 설명하자면, concatenate은 list 더하기와 같은 일을 하고, vstack은 두 개의 리스트를 하나처럼 삽입하는 것입니다.
다음 프로젝트 일지를 쓰는동안 30frame에서 한 npy파일로 저장하여 LSTM을 학습시켜보고자 합니다. 한 x.npy당 하나의 레이블 y.npy가 있어야 하기 때문에 30frame마다 폭력감지를 하도록 학습시키기 위해선 30프레임마다 npy로 저장해야한다는 판단을 내렸습니다.
'사물인터넷 졸업프로젝트' 카테고리의 다른 글
[사물인터넷 캡스톤 디자인] 폭력감지 CCTV 프로젝트 일지 ⑤ (0) | 2023.06.09 |
---|---|
[사물인터넷 졸업 프로젝트] 폭력감지 CCTV 프로젝트 ④ (0) | 2023.05.23 |
[사물인터넷 캡스톤디자인] 폭력감지 CCTV 프로젝트 일지 ③ (0) | 2023.05.23 |
[사물인터넷 캡스톤 디자인] CCTV 프로젝트 일지 ① (0) | 2023.05.23 |