본문 바로가기

내가 작업한 것들/소프트웨어

libsrcnn (Super-Resolution Neural Networks) 맥에서 테스트

libsrcnn 이란? 참조1, 참조2


MacOSX 에서의 테스트

 이번 테스트는 MacOSX 에서 기본 LLVM-GCC 를 사용하여 zsh로 성능 테스트를 해 보았습니다. 일단 MacOSX 에서는 기본적으로 HPC-GCC 가 아니고는 OpenMP 를 통한 CPU 가속을 할 수 없기 때문에, 기본적인 LLVM-GCC 의 Optimization 에 제한적으로 기능을 제한 해야 합니다.

테스트 한 MacOSX

    • 모델명:    MacBook Pro
    • 모델 식별자:    MacBookPro12,1
    • 프로세서 이름:    Intel Core i7
    • 프로세서 속도:    3.1 GHz
    • 총 코어 개수:    2
    • L2 캐시(코어당):    256 KB
    • L3 캐시:    4 MB
    • 메모리:    16 GB
 테스트 이미지는 크기가 3:2 비율을 가지는 DSLR 로 촬영한 가로 2048px 이미지 하나를 가로 512px 기준으로 resize 한 것을 2배 크기로 늘리는 작업을 하는데 걸리는 시간은 약 6초 정도 입니다.

 빌드 옵션은 기본으로 git 에 올라 가 있는 Makefile.staticlib 과 Makefile.test 를 차례로 빌드 해서 만들어진 것을 그대로 사용 하였으며, libpng 오류는 시스템에서 같이 빌드한 libpng 에서 출력 되는 오류 입니다.


이미지 비교

가로 512px 로 줄인 이미지

1024px 로 Super-Resolution 처리 된 이미지

SRCNN 의 Convolution 연산의 Y 채널 이미지 dump

가로 2048px 의 원본 이미지

SRCNN 의 경우 이미지의 명암부를 가지고 있는 Y 채널을 비약적으로 복구 해 주는 알고리즘으로 실제 16bit 이상의 흑백 이미지를 쓸 경우에서도 효과적인 고해상도 복원 능력을 가져다 줍니다만, 아마 가로 2048px 가 넘어가는 TFT panel 이나 CMOS 등의 센서를 통해 얻은 이미지를 확대 할 경우 엄청나게 느릴수 있습니다.

 이미지를 자세히 클릭해서 확인을 해 보면, 맥북의 터미널 안의 글자 처럼 이미 너무 무너져서 복구하기 어려운 픽셀 단위로의 정보를 제외 하고는 정말 높은 원래 이미지대비 높은 복원해상력을 가지고 있다는 것을 알 수 있습니다.

 또한 제가 만든 libsrcnn 의 경우 현재 원래 참조한 ShuWang 의 소스가 가진 버그를 수정하고, 성능을 비약적으로 올려 둔 것은 물론, OpenCV 없이 구동 할 수 있는 장점은 아마 다른 프로젝트에서 사용하기에 어려움이 없을 듯 합니다. 또한 interpolation 종류를 Bicubic 외에 Lanczos-3 나 B-Spline 등을 지원 하고 있기 때문에 필요에 따라 더 다양한 복원 방법을 바꿔서 사용해 볼 수 있습니다.


소스 위치


라이센스

LGPLv3