티스토리 뷰
비디오 입력 모델은 대개 디코딩된 비디오로부터 일정한 간격으로 N 프레임을 샘플링하고 이 샘플링된 프레임이 입력으로 들어간다.
그런데, 비디오 디코딩은 연산량이 많이 필요한 작업중에 하나이다. 그러다보니, 학습 과정에서 매 번 비디오를 Full 디코딩하고 거기서 또 프레임을 샘플링하는 것은 데이터 전처리 과정으로써 병목을 발생시키기 쉬운 작업이다.
그래서, 이러한 문제를 완화하고자 나는 `cache`라는 폴더를 생성하고, 학습 과정에서 비디오를 Full 디코딩하면서 학습에 사용되는 프레임들을 `cache/비디오 파일 이름/%05d.jpg` 이러한 형식으로 저장하게 했다.
다시 또 디코딩이 필요한 jpg로 저장한 이유는 numpy array로 바로 저장하기란 내 PC의 용량이 충분하지 않았다.
하지만, 여기서 문제가 발생했다. training set과 validation set에 있는 비디오는 서로 다르나 파일 이름이 같다면, training 과정을 거치며 cache 폴더에 먼저 training set에 있는 비디오가 프레임 단위로 저장이 되고 validation 과정에서 해당 비디오 파일을 읽을때 cache 폴더에 해당 비디오 파일 이름에 해당하는 `cache/비디오 파일 이름/` 가 존재하다보니 학습 과정에서 저장된, 그리고 학습에 사용된 데이터를 validation 과정에 사용하게 해버린 것이다. 그러니까 validation accuracy 가 100%가 나오는 것이였다... 내가 이런 알고리즘을 개발했을리는 없다고 생각하며 코드를 다시 봤는데 역시나였다.
간단한 해결책으로 `cache_train` 폴더와 `cache_val` 폴더에 나눠서 저장되게끔 구현을 수정할 수 있지만, 이렇게 해도 training set 혹은 validation set 내에서 다른 비디오인데 파일 이름이 같은 파일들이 존재하면 문제가 발생한다. 해결책으로 cache 폴더에 저장될때 폴더명 비디오 파일 이름과 함께 hash 값이 함께 폴더명에 포함되도록 구현을 해봤다. 충돌에 대한 케이스 검사는 안해보긴 했는데... 나중에 한 번 해봐야겠다.
글을 쓰다보니 왜이렇게 혁이형 생각이 나는거지...?
https://www.youtube.com/watch?v=Pg-DUHM7MaA
'Deep Learning' 카테고리의 다른 글
[Deep Learning] C++ ONNXRuntime model metadata 읽기 (0) | 2023.07.17 |
---|---|
[Deep Learning] ONNXRuntime Output이 계속 변한다면... (0) | 2023.07.03 |
기록용 ignite optimizer multi groups warmup 관련 (0) | 2023.06.11 |
ultralytics(YOLOv8) 8.0.114 흥미로운 패치 (0) | 2023.06.09 |
CLIP 비교 벤치마크 자료 (0) | 2023.06.07 |
- Total
- Today
- Yesterday
- 위상 정렬 알고리즘
- 백준
- 가장 긴 증가하는 부분 수열
- 이분탐색
- 백준 11437
- 백준 11053
- FairMOT
- ㅂ
- 인공지능을 위한 선형대수
- 자료구조
- 단축키
- LCA
- 순열
- 조합
- 백트래킹
- 파이참
- Lowest Common Ancestor
- C++ Deploy
- 문제집
- MOT
- cosine
- PyCharm
- 백준 1766
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |