안녕하세요. 드라마앤컴퍼니의 빅데이터센터 AILab 박호림입니다.
드라마앤컴퍼니 빅데이터 센터의 AI Lab은 Recommendation System, Ranking Model, Graph Neural Network, Natural Language Processing, Document Understanding, Computer Vision 등 연구 영역을 넓혀가고 있으며, 기반 연구를 통해 고객의 비즈니스에서 WOW 하는 경험을 제공하고자 노력하고 있습니다.
리멤버를 사용하는 많은 유저들은 본인의 명함 또는 주고받은 명함을 직접 촬영하여 등록하고 있습니다. 직접 촬영을 하다 보면 밝거나 어두운 또는 명함을 책상에 두거나 손으로 들거나 등의 다양한 환경에서 촬영하다 보니 명함 이미지를 복원하거나 다양한 후처리가 필요합니다. 따라서 이번 포스팅에서는 유저가 촬영한 명함 이미지에 대한 복원 방법에 대해 알아보고자 합니다.
1. 명함 이미지 복원의 필요성과 이미지 복원 Task
명함 이미지 복원의 필요성
- 명함을 촬영하면 명함 외 배경 부분을 잘라내고 명함만 확대하여 사용자에게 보이도록 합니다. 여기서 원본이미지에서 명함 부분만 잘라내어 확대하기 때문에 저해상도(낮은 품질)로 유저에게 보이는 문제가 있어 고해상도로 복원을 필요로 합니다.
- 리멤버 앱을 통한 명함 촬영은 자연히 다양한 환경에서 촬영된 명함 이미지들이 포함되어 있습니다. 하지만 촬영 시 주변 환경에 따라, 카메라의 성능에 따라 명함을 촬영한 이미지에 노이즈가 내포되곤 합니다. 촬영한 이미지에서 명함을 잘라내는 데 큰 문제는 없지만, 사용자에게 깨끗한 명함 이미지를 제공하기 위해서는 노이즈를 제거하는 명함 이미지 복원 작업이 필요합니다.
- 실제 명함을 촬영하여 명함 이미지를 저장하기 때문에 명함 자체가 오염되거나 명함을 잡고 찍은 명함 이미지라면 해당 부분이 반영되어 저장됩니다. 많은 유저들은 리멤버 상에서 명함을 통한 다양한 교류와 활동을 하기에 오염된 명함을 깨끗한 명함으로 복원할 필요가 있습니다.
그림 1. 저해상도 명함 이미지(좌), 흐릿한 명함 이미지(중), 명함 정보 일부가 가려진 명함 이미지(우)
이미지 복원 Task
리멤버에서 명함 이미지를 촬영하고 난 후 이미지 복원에 대한 문제에 대해 3가지 정도 Task로 정의할 수 있습니다.
Super-Resolution
Super-Resolution(SR)은 저해상도 이미지를 고해상도 이미지로 변환하는 Task를 의미합니다.
그림 2. Super-Resolution 예시 이미지
Denoising, Deblurring
Denoising 이란 입력 이미지로부터 이미지에 존재하는 노이즈를 제거하는 Task를 의미합니다.
Deblurring 이란 흐릿한 이미지에서 Blur를 제거하여 깔끔한 이미지로 만드는 Task 입니다.
그림 3. Denoising, Deblurring 예시 이미지
Inpainting
Inpainting 이란 오래된 사진 또는 화질이 번진 이미지에서 손실된 영역을 복구하는 Task입니다.
그림 4. Inpainting 예시 이미지
2. 전통적 이미지 복원 방법
Super-Resolution
그림 5. Interpolation 종류
Super-Resolution Task를 해결하기 위해 전통적으로 많이 쓰는 방법의 하나는 Interpolation입니다. Interpolation이란 알고 있는 값을 가지는 두 점 사이의 어떠한 지점의 값을 추정하는 방법을 의미합니다.
Super-Resolution을 해결하기 위한 Interpolation으로는 Bilinear interpolation, Bicubic interpolation 등이 있습니다. linear interpolation이란 두 점 사이의 직선을 그리는 방법, 즉 1차 함수에 해당하며 Cubic interpolation은 3차 함수 그래프 기준으로 값을 추정하는 방법입니다. 이 방법들을 2차원으로 확장해 Super-Resolution으로 적용하여 저해상도 이미지를 고해상도 이미지로 변환시켜줍니다. 이러한 방법 외에도 Nearest, Area, Lanczos 등의 Interpolation이 존재합니다.
그림 6. Bilinear, Lanczos Interpolation 테스트 이미지
그림 6은 360×270 사이즈의 명함 이미지를 두 가지 interpolation으로 변환한 결과 이미지입니다. Bilinear, Lanczos interpolation을 거친 두 결과 이미지를 보면 Lanczos interpolation 결과가 조금 더 선명하게 나타납니다. 하지만 두 결과 모두 좋지 않은 해상도를 보여주고 있습니다.
사실 Interpolation은 Opencv에서 이미지 사이즈를 축소, 확대 시킬때 사용하는 방법으로 Super Resolution으로 부르기 애매한 부분이 있으며 Interpolation을 통한 Resize는 좋은 결과를 얻기 어려운 부분이 있습니다. 또 다른 Super-Resolution solution으로는 저해상도 이미지를 만드는 Image degradation model을 정의하고 Inverse problem으로 접근하는 방법이 존재합니다.
Denoising
De-noising Task를 해결하는 전통적 방법 중 필터링을 이용해 노이즈를 제거하는 방법이 존재합니다. 대중적인 방법으로는 Gaussian, Bilateral, Median filtering, Non-Local means filtering 등이 존재합니다.
- Gaussian filtering : Gaussian filtering은 현 픽셀값과 이웃 픽셀 값들의 가중 평균을 이용해 현재 픽셀 값을 교체하는 방법입니다. Gaussian filtering은 이미지가 공간적으로 천천히 변하기 때문에 가까이 있는 픽셀들은 비슷한 값을 갖는다는 가정하에 만들어진 방법으로, 현재 픽셀에 가까울 수록 더 큰 가중치 값을 갖고 멀수록 작은 가중치 값을 갖습니다. 하지만 이 방법은 Edge 같은 부분을 뭉그러트리기 때문에 노이즈 제거에는 단점으로 나타납니다.
- Bilateral filtering : Gaussian filtering을 보완한 방법으로 Bilateral filtering이 등장했는데, Edge 정보를 보존하면서 노이즈를 제거하는 방법으로 현재 픽셀과 이웃 픽셀 사이의 거리와 픽셀 값의 차이를 동시에 가중치에 반영하여 픽셀간의 거리만 반영한 Gaussian filtering을 보완한 방법입니다.
- Non-Local means filtering[1] : 2번의 Bilateral filtering 방법도 문제점이 있습니다. Bilateral filtering은 픽셀간 거리와 픽셀 값 차이를 사용하는데, 픽셀값만을 비교하게 되어 위치적 요소를 고려하지 못하기 때문에 너무 심한 노이즈를 갖는 이미지의 경우 픽셀의 평균을 구해 연산하는데 문제점이 존재합니다. 이런 Bilateral Filtering 을 보완한 방법으로 Non-Local means filtering이 등장합니다. Non-Local means filtering은 비교하고자 하는 지점의 픽셀만 보는 것이 아니라 해당 픽셀에 대한 주변을 patch로 잘라내어 patch 사이의 거리를 계산합니다. patch까지 비슷하다고 판단되면 두 픽셀 간의 평균을 구해 노이즈를 제거하는 방식으로 진행됩니다. 따라서 Bilateral filtering과 비슷하지만 보완되어 성능이 뛰어나며, 딥러닝이 등장하고 Restoration에 적용되기 전까지 대중적으로 사용되어 왔습니다. 그림 7은 노이즈가 있는 4032×3024 명함 이미지에 대해 Non-Local means filtering을 적용한 결과에 대한 이미지입니다.
그림 7. 명함 이미지 Non Local Means Filtering 테스트 결과
Inpainting
Inpainting이란 이미지의 손상, 열화, 누락된, 가려진, 보이지 않는 부분을 채워 완전한 이미지를 복원, 생성하는 것을 의미합니다. 전통적 Inpainting 방법으로는 Patch 기반, Diffusion 기반 두 가지 방법으로 볼 수 있습니다.
Patch 기반의 방법은 이미지에서 손상되지 않는 부분에서 가장 일치하는 후보 패치를 찾아 손상된 위치에 복사하는 방법입니다. Diffusion 기반의 방법은 이미지 컨텐츠에서 누락된 영역의 경계로부터 시작하여 누락된 영역 내부로 점차 채워가는 방법을 의미합니다.
3. 딥러닝 기반 이미지 복원 방법
딥러닝이 등장하고 발전함에 따라 전통적인 복원 방법에서 딥러닝을 활용한 이미지 복원 방법이 등장하기 시작했습니다.
SRCNN[2]
그림 8. SRCNN의 전체 구조
본 모델은 지도학습 모델이며, 저해상도 이미지와 고해상도 정답 이미지를 제공한 후 모델이 변환한 고해상도 이미지와 정답 이미지 간의 차이를 좁히도록 학습하는, 정답에 가까워지도록 하는 맵핑 함수를 찾는 모델입니다. 그림 8은 SRCNN의 전체 구조입니다. Bicubic interpolation으로 고해상도 이미지 사이즈와 동일하게 만든 후 임의의 Patch size 기준으로 분할하여 각 Patch의 High resolution에서의 Convolution 연산을 통해 추정합니다. 이후 Convolution 연산을 통해 고해상도 이미지로 Reconstruction 하는 구조로 설계된 모델입니다.
DnCNN[3]
그림 9. DnCNN의 전체 구조
위 SRCNN은 Super-Resolution task에 대한 모델이며 DnCNN은 Denoising task에 대한 모델입니다. 그림 9는 DnCNN의 전체 구조입니다. 정답 이미지에 Noise를 입혀 Noisy image를 생성하고 CNN 네트워크를 통해 Residual Image를 생성한 다음 정답 이미지와 평균제곱오차(MSE) 계산을 통해 차이를 학습하는 모델입니다.
SRGAN[4]
그림 10. SRGAN의 전체 구조
본 모델은 처음으로 GAN을 이용하여 Super-Resolution task에 적용한 논문입니다. Generator는 저해상도 이미지를 고해상도 이미지로 만들고, Discriminator가 생성된 고해상도 이미지와 정답 고해상도 이미지를 판별하며, 진짜를 가려내는 학습을 진행하는 구조의 모델입니다.
SwinIR[5]
그림 11. SwinIR의 전체 구조
본 논문은 21년도에 나온 논문에 해당 연도 기준으로 Super-Resolution, Denoising Task에 대해 SOTA를 달성한 논문입니다. Vision transformer를 이용한 Image Restoration 모델들은 보통 이미지를 Patch 단위로 나누어 각 Patch 독립적으로 보아서 패치 단위에서의 이웃 픽셀에 대한 정보를 이용하지 못한 문제점이 있습니다. 본 논문에서는 Patch 단위에서만 Attention이 이루어지는 것이 문제점으로 보고 Patch 간의 Attention이 가능하도록 하는 Swin transformer 구조의 Image reestoration 모델입니다. 하지만 Transformer 모델이기에 리소스나 추론 시간 등 상대적으로 더 많은 자원을 사용하기에 실 서비스에 사용되기 위해서는 고려되야 할 점이 많습니다.
그림 12. SwinIR 테스트 결과
그림 12는 저해상도의 테스트 이미지를 SwinIR 모델의 입력으로 하여 추론된 출력 간 비교 이미지입니다. 위에 Interpolation으로 얻은 결과와 눈으로도 확연히 보이는 좋은 결과를 보여줍니다.
NAFNet[6]
그림 13. NAFNet baseline Architecture(좌), GLU 기반의 NAFNet Activation Fuction(우)
22년도 ECCV에 발표된 논문으로 Denoising, Deblurring Task에 대한 이미지 복원 논문입니다. 새로운 모델 디자인을 제안하는 논문이 아닌, UNet[7] 모델 구조를 채택하여 Gated Linear Unit을 활용해 비선형 활성화 함수를 사용하지 않고 Denoising, Deblurring Task를 해결하는 논문입니다. 현재 Denoising, Deblurring Task에서 SOTA를 달성한 모델입니다.
그림 14. 노이즈 명함 이미지, 흐릿한 명함 이미지에 대한 NAFNet 모델 출력 결과
그림 14는 논문 저자가 학습한 NAFNet Pre-trained Model로 노이즈가 존재하는 명함 이미지와 흐릿한 명함 이미지를 각각 추론한 결과입니다. 아주 깨끗한 또는 글자가 선명하게 복원된 이미지는 아니지만 입력 이미지로부터 어느 정도 좋은 복원 결과를 보여주고 있습니다.
4. 결론
지금까지 전통적인 이미지 복원 방법부터 딥러닝 기반의 이미지 복원 방법을 간단하게 살펴보았습니다. 딥러닝 기반의 이미지 복원 방법들이 기존 전통적인 방법에 비해 월등한 성능을 보여주고 있지만, 다만 각각 해결해야 하는 문제에 대한 필요 정도의 성능, 리소스, 시간 등을 고려하여 가장 적절한 방법론을 선택하고 적용하는 것이 좋은 방향으로 판단됩니다.
리멤버 빅데이터 센터 AI Lab에서는 꾸준히 최신 연구를 활용하여 인재 추천 서비스, 광고 추천 서비스, 명함 인식 등 다양한 연구를 수행하고 계속해서 블로그에 글을 포스팅하려고 하고 있습니다. 지속적인 관심 부탁드립니다.
궁금하신 사항은 댓글을 통해 문의 부탁드리며 긴 글 읽어주셔서 감사합니다.
Reference
[1] Buades, Antoni, Bartomeu Coll, and J-M. Morel. “A non-local algorithm for image denoising.” 2005 IEEE computer society conference on computer vision and pattern recognition (CVPR’05). Vol. 2. Ieee, 2005.APA
[2] Dong, Chao, et al. “Image super-resolution using deep convolutional networks.” IEEE transactions on pattern analysis and machine intelligence 38.2 (2015): 295-307.
[3] Zhang, Kai, et al. “Beyond a gaussian denoiser: Residual learning of deep cnn for image denoising.” IEEE transactions on image processing 26.7 (2017): 3142-3155.
[4] Ledig, Christian, et al. “Photo-realistic single image super-resolution using a generative adversarial network.” Proceedings of the IEEE conference on computer vision and pattern recognition . 2017.
[5] Liang, Jingyun, et al. “Swinir: Image restoration using swin transformer.” Proceedings of the IEEE/CVF International Conference on Computer Vision . 2021.
[6] Chen, Liangyu, et al. “Simple baselines for image restoration.” arXiv preprint arXiv:2204.04676 (2022).
[7] Ronneberger, Olaf, Philipp Fischer, and Thomas Brox. “U-net: Convolutional networks for biomedical image segmentation.” International Conference on Medical image computing and computer-assisted intervention. Springer, Cham, 2015.