Life Logs && *Timeline

  • 🔍 딥러닝 학습 중 Invalid JPEG 오류? 손상 이미지 자동 삭제로 해결하기!

    딥러닝 학습을 진행하다 보면 아래와 같은 에러 메시지를 만나곤 합니다:

    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여 개의 손상 파일을 제거한 뒤 학습을 재시작하자, 문제 없이 학습이 정상적으로 완료되었습니다.


    📌 딥러닝 데이터 전처리 팁

    1. 훈련 전 이미지 유효성 검증 필수
    2. Image.verify()는 빠르고 효과적
    3. 데이터 수집 또는 압축 해제 직후 스크립트 자동 실행 추천
    4. PyTorch의 Dataset 구성에서도 try-except로 일부 방어 가능

    🎯 마무리

    딥러닝 학습에서 모델보다 중요한 것은 데이터 품질입니다. 손상된 이미지 하나로 학습이 중단되는 것을 방지하기 위해, 꼭 학습 전에 데이터를 한 번 “검진”해 주세요.

    🚀 에러 없는 딥러닝, 데이터부터 시작됩니다!