티스토리 뷰


Dynamic Time Warping..

패턴 인식에서 이용되는 방법으로 시퀀스를 시간의 길이를 고려하지 않고 인식할 수 있는 방법이다. 말 그대로 Time을 Warping하기 때문에 특정한 동작을 느리게 하게 되면 시간을 느리게 변화시키는 방법이다.

위키피디아의

http://en.wikipedia.org/wiki/Dynamic_time_warping

에 간단한 내용과 구글에서 검색하면 여러 가지 자료들을 얻을 수 있다..그냥 DTW를 가장 잘 나타내고 그림 한장으로 이해할 수 있는 건 다음인거 같다..

사용자 삽입 이미지

현재의 cost에 distance를 더해가며 오른쪽위의 끝까지 갈 수 있는지..그 여부를 찾는, 그 과정을 찾는 것이 DTW인 것이다.

DTW는 위와 같은 matrix로 Dynamic programming으로 구현이 가능하다..

지금 내가 이용해야하는 값들은 일단은 3축 가속도를 사용하므로

v = {Accx, Accy, Accz}

일 것이고, 그 거리를 구하는 것은 Euclidean distance를 활용하여

사용자 삽입 이미지
다음과 같이 구하면 되고...

문제는 DP를 하는데, 실시간으로 처리하는 것이기 때문에 어떠한 식으로 구현하느냐 하는 것이다.

Train example이 v이고 Test example이 i라 하면 |v|x|i| 크기의 배열을 써야하는가...

이것이 아니라 조금 수정해서

그냥 |v| 크기의 배열을 활용하는 것을 해보자..

개념은 이렇게 될 것이다.

일단 matching이 시작되면

1. dtw[]를 |v|의 배열이라 한다 -> vector<vector<float>> 정도로 해야겠다
2. 맞출 seqence v와 현재 입력 값 i 들의 distance를 구한다. distance[]라고 하자
 - distance[]는 infinite로 초기화한다
3. index 0에서부터 왼쪽으로 가면서 index - 1의 cost의 값을 더한다
4. distance[index - 1] + cost > distance[index]라면 교체,
5. index + 1 데이터 수집하여 똑같이 구한다.
6. dtw가 위치를 그대로 자치할지, 오른쪽으로 갈지 선택(최소 값으로..)

뭐, 이정도일 텐데

고려해야할 문제는
1. cost는 계속 늘어나므로 매칭을 어떠한 식으로 인식할 것인지의 여부..
2. 얼마나 차이나는 것까지 허용하느냐..(단지 최소의 값으로만 간다면 안될듯..)
3. 확률 모델을 도입하느냐
4. 여러 패턴 중에서 부분 패턴(9 의 아래로 긋는 선과 1의 선의 중복의 경우?)의 처리

뭐 일단 이정도만 고려해야겠다..

이 dtw[]를 구현하기 전에 성능 비교를 위해 그냥 dtw[][]를 쓰는 것을 구현해야겠다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함