딥러닝 학습을 진행하다 보면 아래와 같은 에러 메시지를 만나곤 합니다:
cppCopyEdittensorflow.python.framework.errors_impl.InvalidArgumentError: jpeg::Uncompress failed. Invalid JPEG data or crop window.
이 에러는 대부분 손상된 이미지 파일 때문에 발생합니다. 특히 크롤링 데이터, 수집된 데이터셋, 또는 압축 해제된 대용량 zip 파일을 사용할 때 이런 문제가 자주 나타납니다.
❗️문제의 원인: 손상된 JPEG 파일
- 이미지가 0바이트거나,
- JPEG 포맷의 내부 구조가 망가졌거나,
- 실제로는 이미지가 아닌데
.jpg
확장자를 가졌거나…
이런 파일이 하나라도 학습 파이프라인에 들어오면, TensorFlow/PyTorch가 학습 중단될 수 있습니다.
✅ 해결 방법: 학습 전에 손상 이미지 제거
학습 전에 모든 이미지가 정상적으로 열리는지 미리 확인하는 것이 안전합니다. 아래는 Python 코드로 손상된 이미지를 자동으로 탐지하고 삭제하는 방법입니다.
pythonCopyEditimport os
from PIL import Image
def remove_corrupted_jpgs(base_dir='./'):
removed = 0
for root, _, files in os.walk(base_dir):
for file in files:
if file.lower().endswith(('.jpg', '.jpeg')):
file_path = os.path.join(root, file)
try:
with Image.open(file_path) as img:
img.verify()
except Exception as e:
print(f"삭제: {file_path} ({e})")
os.remove(file_path)
removed += 1
print(f"총 {removed}개 손상된 이미지 삭제 완료.")
if __name__ == "__main__":
remove_corrupted_jpgs('./')
💡 주요 특징
./
하위 폴더 전체 탐색.jpg
,.jpeg
파일만 검사- 손상 이미지 발견 시 자동 삭제
- PIL(Pillow) 라이브러리 사용
🧪 실제 적용 예시
이미지를 자동 수집해서 학습한 모델에서 다음과 같은 문제가 발생했습니다:
bashCopyEdittensorflow.python.framework.errors_impl.InvalidArgumentError: jpeg::Uncompress failed
위 Python 스크립트를 통해 200여 개의 손상 파일을 제거한 뒤 학습을 재시작하자, 문제 없이 학습이 정상적으로 완료되었습니다.
📌 딥러닝 데이터 전처리 팁
- 훈련 전 이미지 유효성 검증 필수
Image.verify()
는 빠르고 효과적- 데이터 수집 또는 압축 해제 직후 스크립트 자동 실행 추천
- PyTorch의
Dataset
구성에서도 try-except로 일부 방어 가능
🎯 마무리
딥러닝 학습에서 모델보다 중요한 것은 데이터 품질입니다. 손상된 이미지 하나로 학습이 중단되는 것을 방지하기 위해, 꼭 학습 전에 데이터를 한 번 “검진”해 주세요.
🚀 에러 없는 딥러닝, 데이터부터 시작됩니다!