티스토리 뷰

728x90

OSError [출처]

예외 생성자에 주어진 인자들의 튜플. 일부 내장 예외(예, OSError)는 특정 수의 인자를 기대하고 이 튜플의 요소에 특별한 의미를 할당하는 반면, 다른 것들은 보통 오류 메시지를 제공하는 단일 문자열로만 호출됩니다.

이 예외는 시스템 함수가 시스템 관련 에러를 돌려줄 때 발생하는데, “파일을 찾을 수 없습니다(file not found)” 나 “디스크가 꽉 찼습니다(disk full)” 와 같은 (잘못된 인자형이나 다른 부수적인 에러가 아닌) 입출력 실패를 포함합니다.

생성자의 두 번째 형식은 아래에 설명된 해당 어트리뷰트를 설정합니다. 어트리뷰트를 지정하지 않으면 기본적으로 None 이 됩니다. 이전 버전과의 호환성을 위해, 세 개의 인자가 전달되면, args 어트리뷰트는 처음 두 생성자 인자의 2-튜플만 포함합니다.

아래의 OS 예외 에서 설명하는 것처럼, 생성자는 종종 OSError 의 서브 클래스를 돌려줍니다. 구체적인 서브 클래스는 최종 errno 값에 따라 다릅니다. 이 동작은 OSError 를 직접 혹은 별칭을 통해 생성할 때만 일어나고, 서브 클래싱할 때는 상속되지 않습니다.

 

이라고 하네요.

 

제가 난 에러는

OSError: unrecognized data stream contents when reading image file

이고 이미지 파일을 읽을 수 없다라는 문구가 떴고, 에러가 난 명령어는

r_rgb = Image.open(osp.join(self.root, datafiles['r_rgb'])).convert('RGB')

였습니다.

 

PIL Library에서 이미지를 오픈을 도와주는 Image 모듈이 문제인가 싶어서, 구글링을 했고 아래 링크를 참고했습니다.

 

[1] https://discuss.pytorch.org/t/images-not-read-properly-anymore-after-an-epoch-of-successful-training/92586

[2] https://stackoverflow.com/questions/42462431/oserror-broken-data-stream-when-reading-image-file

[3] https://github.com/python-pillow/Pillow/issues/1510

 

추가해준 코드로는

from PIL import Image, ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True

 

이며, ImageFile을 코드에선 쓰진 않았는데 일단 추가해주었습니다.

 

이미지 파일을 읽을 때, 데이터 스트림을 읽을 수 없는 문제로 이미지 파일을 변환할 수 없었으니까 'LOAD_TRUNCATED_IMAGES`를 활성화해서 잘린 이미지를 설명해주는 오류를 해결해주는 부분 같습니다.

 

다른 답변을 참고해보면, 이미지 형식이나 크기 조정 등을 하려는 경우 이런 Error message가 뜨며, Pillow 같은 경우가 이미지를 열 때 데이터 크기를 조정, 형식 변환 등을 도와주며 로드해주는 역할을 합니다.

 

일단 해결된 것으로 보아, `IOError: broken data stream when reading image file` 해당 Error와 비슷한 원인이지 않았을까 싶습니다.

 

제가 사용하는 데이터셋 이미지 파일을 load할 때, 원본 크기가 아니라 transform을 통해 기본적으로 모두 Resize 해주었기 때문에 발생한 듯 합니다.

 

이상입니다.

 

728x90
댓글