CNN 알고리즘에서 이미지에 필터를 적용하는 과정을 병렬처리를 통해 빠르게 수행하도록 개선한 프로젝트이다.
- OS : Window10
- gcc & g++ : MSYS2 사용
- mingw64 8.0 버전이
filesystem
모듈과 버그를 일으켜 MSYS2를 사용함
- mingw64 8.0 버전이
- cpp standard : cpp+17
- opencv : 4.5.2
- cmake 사용
CMakeList.txt
파일 수정- 1번 라인의 OpenCV 디렉토리 설정
- ./run.sh
- 컴파일
cmake . -G "MinGW Makefiles"
make
- 실행
./main.exe ./images/color ./result_images < ./configs/filter.txt
./images/color
는 input 이미지들이 담긴 폴더. 없을 경우 프로그램 종료./result_images
는 결과 이미지가 담길 폴더. 없을 경우 만들어줌
- opencv를 사용하여 Image file load
- conv-filter apply
- filter appiled file 저장
시간단위 : 1/sec
파일 크기 | load image 시간 | apply filter 시간 | save image 시간 |
---|---|---|---|
500KB | 0.007 | 0.208 | 0.011 |
39.1MB | 0.795 | 24.649 | 1.350 |
시간단위 : 1/sec
파일 크기 | load image 시간 | apply filter + save image 시간 | 총 시간 | 싱글 스레드 총 시간 |
---|---|---|---|---|
500KB | 0.007 | 0.216 | 0.223 | 0.217 |
39.1MB | 0.805 | 4.016 | 4.821 | 23.845 |
25개, 총 207MB | 7.068 | 21.828 | 28.894 | 174.806 |
120개, 총 58.2MB | 1.586 | 2.386 | 3.972 | 25.305 |
Image Filtering 시 Divide&Conquer기법을 이용, 이미지 분할 후 Multi Threading을 통해 이를 처리, 단 Image width,col < 512pixel 일 경우 단일 쓰레드를 취하는 방식 사용
분할 된 Image를 reconstruct 시에도 Divide&Conquer기법을 이용, Multu Threading을 통해 Bypass를 늘려 이를 처리, 이를 통해 Throuput 을 늘림
Multi Threading 적용 시 약6~7배정도 excution time이 빨라졌다.
한 스레드가 처리하는 최대 이미지 크기를 256x256, 512x512, 1024x1024로 두고 데이터셋을 총 207MB의 25개 사진으로 하여 10번씩 테스트하였음
- images
- Filter를 적용하려는 이미지들이 위치하는 디렉토리
- color 디렉토리에는 컬러 이미지가 위치하며, 해당 디렉토리의 이미지를 사용한다
- result_images
- 결과 이미지가 위치한다.
- configs
- filter.txt가 위치한다.
- src
- 프로그램 코드들이 위치한다.
https://github.com/opencv/opencv
Copyrigth 2021 ~ present, OpenCV team
ApaChe License 2.0