현재 AI 회사에서 신분증 및 문서 OCR 솔루션 개발 업무를 맡고 있는데 간간히 데이터 수집을 도와주고 있는데 데이터 수집은 PNG로 하는데 실제 학습은 JPEG로 변환하여 학습을 진행하고 있다. 또, 실제 솔루션 내부에서도 JPEG 타입 이미지만 요청을 받도록 프로세스를 구성하였는데 왜 그런지 이번 기회에 자세하게 알아보고자 한다.
정의
PNG 란?
"Portable Network Graphics"의 약자로서 그림 파일 형식 가운데 하나이다.
탄생배경
초창기 인터넷에서 그림파일들은 컴퓨서브(CompuServ)사에서 개발한 GIF 형식을 사용하고 있었다. 하지만 GIF 핵심이 되는 LZW 알고리즈에 대하여 유니시스사에서 특허권을 취득하고 그 권한을 행사하기 시작하자, 프로그래머들은 이참에 GIF의 몇가지 문제점들을 해결하는 셈치고 새로운 그림 파일형식을 개발하기 시작하였고 1996년에 PNG가 발표되었다.
특징
- 256색만 지원하는 GIF와 달리 24비트 RGB 색상과 32비트 RGBA를 지원한다.
- 무손실 압축이다.
- 다른 무손실 압축 포맷인 BMP, PCX, TGA 등에 비해압축 효율이 좋은 편이다.
- 무손실 압축이다보니 타 이미지 포맷에 비해 파일 용량이 큰 편이다.
- 애니메이션 미지원
- 애니메이션이 필요한 경우에는 GIF나 APNG와 같은 포맷을 사용해야 된다.
- 투명도(알파 채널) 지원
- 알파 채널을 통해 이미지의 일부를 와전히 투명하게 또는 반투명하게 표현할 수 있다.
- 아래 이미지는 PNG 이미지(캐릭터)와 JPEG 이미지(하늘 배경)를 합친 예시이다.
(글또의 또봇이라는 캐릭터를 가지고 만들었는데... 잘 안만들어 지네요...ㅜㅜ)


무손실 압축이란?
Lossless compression, 말 그대로 압축된 상태에서도 디지털 원본가 100% 똑같은 형태를 유지하는 방식이다. 무손실 압축 포맷은 따라서 반복 표현되는 정보를 최대한 줄여 수학적으로 정의되는 정보량에 가깝게 만든느 수학적 기법과 관련이 있다.
장점
- 비손실 압축으로 이미지 품질 저하가 없음.
- 투명도와 반투명도 지원.
- 다양한 색상 표현 가능(24비트 또는 32비트 색상).
- 선명한 그래픽이나 로고, 텍스트 기반 이미지에 적합.
단점
- JPEG에 비해 파일 크기가 크다.
- 복잡한 이미지(사진 등)에서는 비효율적이며, 파일 크기가 매우 커질 수 있음.
- 기본적으로 애니메이션을 지원하지 않음(APNG는 예외).
JPEG 란?
"Joint Photographic Experts Group"의 약자로, 그림 파일 형식의 하나다. 정지 화상을 위해서 만들어진 손실 압축, 무손실 압축 (JPEG 9.1부터) 방법 표준이다.
특징
- 손실 압축
- 일부 정보를 버리는 방법을 손실 압축이라고 한다. 이로 인해 파일 크기가 작아지지만, 이미지의 품질은 어느 정도 저하될 수 있다.
- 하지만 JPEG는 인간의 시각 시스템을 고려해 덜 중요한 시각 정보를 제거하기 때문에, 적절한 품질 설정에서 사람 눈으로는 거의 차이가 느껴지지 않는다.
- 높은 압축률
- 원본 이미지 크기의 10% 정도까지 줄일 수 있다.
- 유연한 품질 설정
- 파일 크기를 줄이기 위해 더 높은 압축을 적용하거나, 고품질 이미지를 위해 압축률을 낮출 수 있다.
- 광범위한 호환성
- 웹 브라우저, 이미지 편집 소프트웨어, 스마트폰, 카메라 등에서 기본적으로 사용된다.


장점
- 사진과 같은 복잡한 이미지에서 매우 높은 압축률을 달성할 수 있다.
- JPEG는 거의 모든 디지털 기기(웹 브라우저, 카메라, 스마트폰 등)에서 지원된다.
- 이미지 품질과 파일 크기를 조절할 수 있어, 다양한 용도로 활용할 수 있다.
단점
- 손실 압축으로 인한 품질 저하
- 압축으로 인한 세부 정보 손실
- 투명한 배경을 지원하지 않는다.
PNG와 JPEG의 공통점과 차이점
공통점
- 디지털 이미지 포맷
- PNG와 JPEG는 모두 디지털 이미지 파일 포맷이다.
- 색상 표현
- 두 포맷 모두 24비트 색상을 지원하며, 최대 약 1600만 가지 색상을 표현할 수 있다.
- 광범위한 호환성
- 두 포맷 모두 대부분의 이미지 편집 소프트웨어, 웹 브라우저, 운영체제에서 지원된다.
차이점
- 압축 방법
- PNG는 비손실 압축을 사용하여 원본 데이터가 그대로 유지되어 이미지 품질이 변하지 않는다.
- 반면에, JPEG는 손실 압축을 사용하여, 이미지 데이터를 압축하는 과정에서 일부 정보가 제거되어 품질이 저하된다.
- 파일 크기
- PNG는 비손실 압축을 사용하여 파일 크기가 상대적으로 크다, 특히 사진과 같은 복잡한 이미지를 저장할 때 파일 크기가 매우 커질 수 있다.(우리 회사에서 수집하는 PNG 이미지의 경우 대략 8~10MB) 사이이다.
- 반면에, JPEG는 손실 압축을 사용하여 일부 정보가 제거되어 일 크기를 크게 줄일 수 있다.
- 투명도 지원
- PNG의 경우 알파채널을 통해 투명도를 지원한다. 이는 배경이 투명한 로고, 아이콘, 웹 그래픽 등에서 매우 유용하다. 또한, 부분적으로 반투명도도 지원한다.
- JPEG는 항상 불투명한 배경을 가지므로, 배경이 투명해야 하는 경우 적합하지 않다.
- 추가적으로 여러 차이점이 있지만, 간단하게 표로 정리한게 있어 같이 공유한다.
"출처 chatGPT"
정리
정리한 내용을 바탕으로 현재 우리 회사 솔루션에서 JPEG 포맷의 파일들만 처리하는 이유는 파일 크기에 영향을 가장 많이 받아 그런거 같다라고 생각했다. 하지만 한가지 의문이 드는건 JPEG는 손실 압축을 사용하여 정보가 손실되어 실제 모델에서 데이터를 판별하는데 신뢰성이 깨질거 같다라고 생각을 하였다.
그래서 AI 엔지니어 분께 질문을 드렸다. "PNG의 경우에는 파일 크기는 크지만 비손실 압축을 사용해서 데이터 유실이 없는 반면에, JPEG의 경우에는 손실 압축을 사용해서 파일 크기는 작지만 데이터가 유실되어서 정확한 판별이 어렵지 않나요??" 라고 여쭤봤는데 AI 엔지니어 분께서 "PNG와 JPEG 중에 선택하는건 상황에 따라 다르다. PNG는 크기가 큰 만큼 학습에도 연산 속도가 오래 걸려 학습에도 오래 걸리고 판별하는데도 오래 걸린다. 하지만 그만큼 정확성은 높아질 수는 있다. 그렇다고해서 JPEG가 정확성이 떨어지는건 아니다. 여태까지의 경험상 90%의 품질로 압축을 하게되면 크기는 10분의 1로 줄어들지만 원본과 매우 유사하고 PNG를 학습한 모델과 비교했을때에도 많은 차이가 없다." 라고 답변을 해주셨다.
위의 답변을 들어보니까 내가 이번에 알아본 개념보다도 더 정확하게 이해가 되었다.(진즉에 물어볼걸....)
그래서 답변을 듣고 Ngrinder를 통해 자사 솔루션의 TPS를 테스트하였다. TPS는 대략 10배 이상이 차이가 났다. (내부 자료라 외부 반출이 어렵다고 팀장님이 그러셔서 측정 자료를 공유하지 못해요...ㅜㅜ)
여태까지 그냥 되어있으니까 그렇게 사용해야지라고 생각했었는데 이번 기회에 고민을 해보고 그에대한 궁금증을 해소할 수 있어서 매우 좋았다. 다음 번에는 실제 회사에서 사용하는 JNI(JAVA Native Interface)라는 Java 인터페이스를 알아보자.
참고문헌
https://namu.wiki/w/PNG (PNG 란?)
학부생 때 콘텐츠 제작 관련 과를 나와서 png, jpeg 개념부터 공부했던 기억이 나는데요, AI 분야에서 이미지 학습 시킬 때의 비교를 잘 적어주셔서 흥미롭게 읽었습니다! 비전 분야 글은 언제 읽어도 재미 있네요 ㅋㅋ