πŸ” λ”₯λŸ¬λ‹ ν•™μŠ΅ 쀑 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둜 일뢀 λ°©μ–΄ κ°€λŠ₯

🎯 마무리

λ”₯λŸ¬λ‹ ν•™μŠ΅μ—μ„œ λͺ¨λΈλ³΄λ‹€ μ€‘μš”ν•œ 것은 데이터 ν’ˆμ§ˆμž…λ‹ˆλ‹€. μ†μƒλœ 이미지 ν•˜λ‚˜λ‘œ ν•™μŠ΅μ΄ μ€‘λ‹¨λ˜λŠ” 것을 λ°©μ§€ν•˜κΈ° μœ„ν•΄, κΌ­ ν•™μŠ΅ 전에 데이터λ₯Ό ν•œ 번 “κ²€μ§„”ν•΄ μ£Όμ„Έμš”.

πŸš€ μ—λŸ¬ μ—†λŠ” λ”₯λŸ¬λ‹, 데이터뢀터 μ‹œμž‘λ©λ‹ˆλ‹€!

μ½”λ©˜νŠΈ

λ‹΅κΈ€ 남기기

이메일 μ£Όμ†ŒλŠ” κ³΅κ°œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ν•„μˆ˜ ν•„λ“œλŠ” *둜 ν‘œμ‹œλ©λ‹ˆλ‹€