1. 데이터
라이선스
Open Use of Data Agreement v1.0
데이터 출처 및 관련 연구
데이터는 Microsoft에서 제공하는 3축 가속도계 및 3축 자이로스코프를 활용해 측정된 센서 데이터를 활용하였다.
3축 가속도계(accelerometer)와 3축 자이로스코프(gyroscope)를 활용해 측정된 센서 데이터는 총 id 별 600 time 간 동작 데이터, id 3125개 x 600 time =1875000 데이터로 구성되어있다. 데이터 테이블은 "train_features.csv (1875000, 8)" 와 같다.
학습 데이터는 "train_labels.csv (3125, 3)"로 id 별 동작과 동작 label, 총 61개로 구성되어있으며, 테스트용 데이터는 "test_features.csv (469200, 8)"로 id 별 600 time 간 동작 데이터, 총 id 782개 x 600 time =469200 데이터로 이루어져있다.
2. 알고리즘
Machine Learning
LSTM, GRU, CNN 등 여러 방법 중 1D-CNN의 Global-Pooling이 가장 성능이 이를 채택하여 사용하였다. 이에 대한 자세한 도출 과정은 아래와 같다.
EDA Data 살펴보기
Data 설명
id 는 고유 식별자 번호, time은 0.02초를 간격으로 x,y,z축 별로 가속도계 측정 결과 및 x,y,z축 별로 자이로스코프계 측정 결과를 포함한다. 가속도계는해당 방향으로의 가속도로 방향성을 내포 중이다. 이 정보를 통해 가속도는 해당 운동이 과격한 운동인지, 그렇지 않은지 분류하는데 도움을 줄 것으로 예측되며, 과격히 움직이는 운동일수록 acc의 절대값이 크게 나타날 것이다.자이로스코프계는 해당 방향으로 dps로 방향성을 내포 중이며 3개 축으로 동작을 인식하여 균형감과 입체감을 정밀하게 감지할 수 있다. 이를 통해 정적, 동적인 상태를 파악하는데 중요한 역할을 할 것으로 예측된다.
총 data는 id별로 600개, 즉 0.02 * 600 = 12초 동안의 데이터로 구성되어있다.
Feature Generation를 통한 데이터에 방향성으로 속도 조합 도출
feature generation을 통해 raw 데이터에서 파생되는 데이터를 도출하였다. 이를 활용하여 운동 데이터를 생성하였으며, 추후 새로운 input으로 사용하였다.
Smoothing Data 추가
미세하게 흔들리는 수치가 많아 Smoothing Data 추가하여, 보정 작업을 거쳤다.
운동 데이터 추가로 feature 개선
물리에서 "가속도"는 속도의 미분 값이므로 가속도를 적분하면 속도가 된다. 속도는 방향성을 내포하고있기 때문에, 0이 되면 운동이 한 번 멈춘 지점이 된다. 따라서, 누적 가속도 = 속도, ” 속도 == 0이 되는 지점" == "방향성이 바뀔 수 있는 지점"으로 판단하였다. 예로 스쿼트를 할 때, 팔을 들었다가 내리는 순간 누적 가속도의 합은 0이 될 것이다. 이 횟수를 기반으로 해당 운동에서 몇번의 cycle이 있었는지 파악할 수 있다. 이를 활용하여 운동 데이터를 추가하였으며, 이 데이터들을 퓨리에 변환을 한 후 모든 데이터를 합쳤다.
모델링
CNN, LSTM, CNN+LSTM 등 여러 구조 적용해보다가 CNN에서 Flatten 없이 Global average pooling 한 구조가 가장 성능이 좋아 채택하였다. 최종 성능은 accuracy는 0.8528, loss는 0.48506로 도출되었다.
이를 이용하여 유튜브 운동 동작 분류를 진행하였다. 하지만 이를 이용하여 동영상 내 운동 동작을 분류하는 것에는 정확한 분류작업에 어려움을 느껴, 열심히 만든 모델을 직접 사용하지는 못하였다.
3. 유튜브 운동 영상 크롤링으로 데이터 수집
위의 모델을 사용하여 직접 운동 영상을 학습시키려고 하였으나, 생각보다 정확도가 낮아 다른 방법을 채택하였다. 바로 유튜브의 태그, 제목 등을 크롤링하여 그 영상이 어느 운동에 대해 정보를 제공하는 지를 나타내는 것이다.
영상 정보 수집
‘제목’, ‘조회수’, ‘제작자’, ‘영상 링크’, ‘썸네일’에 대해 크롤링을 진행하였다. 홈트레이닝으로 유명한 유튜버(심으뜸, 땅끄부부, 지기 TV, 권혁, 미스터 황 등)의 URL을 수집하였다. 각 URL을 통해 Selenium을 이용하여 영상 정보 크롤링을 진행하였다. 수집할 데이터는 영상제목/영상조회수/댓글수/좋아요/싫어요를 수집하였다. 영상마다 들어가서 각 영상별 데이터를 수집해오는 방법을 택하였다.
데이터 분석
Text Cleansing를 활용하여 먼저 텍스트에서 인터넷 유니코드같은 범용문자들을 제거하였다. 그 후, Tokenize를 통해 영상 제목 토큰화하였다. 이 결과 나온 토큰의 예로 복근, 10분, 칼로리 폭파, 등운동, 하체, 초보, 가슴, 고강도 타바타 등이 있었으며, 운동 종류를 분류할 수 있는 토큰들을 수집할 수 있었다.