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