군만두의 IT 공부 일지

[AI] Python 이미지 경로 문제 오류 해결 본문

프로그래밍/Python

[AI] Python 이미지 경로 문제 오류 해결

mandus 2023. 7. 28. 01:03

📌 요약

AI 경진대회를 준비하면서 발견한 아래 오류를 이틀 동안 고민하다가 드디어 해결했다.

Caught error in DataLoader worker process 0.

📌 서론

제공받은 데이터와 베이스라인 코드를 실행했다. 하지만 계속 Model Train을 실행했을 때 다음과 같은 오류가 발생했다.

그림 1 이미지 경로 오류

📌 시도한 방법

1. .zip 압축 해제

처음에는 미련하게 데이터 파일을 계속 해제했다. 데이터 중 일부 손실된 부분이 있어 보였기 때문이다. 그래서 압축 파일을 구글 드라이브 안에 집어넣고 colab에서 아래 명령어를 실행하여 압축을 해제했다.

# 드라이브 마운트
from google.colab import drive
drive.mount('/content/drive')
# 압축 해제할 폴더로 이동, 압축 해제
%cd /content/drive/MyDrive/Colab Notebooks/data
!unzip -qq "/content/drive/MyDrive/Colab Notebooks/data/open.zip"

이 방법은 반은 맞았다. 처음에는 압축 해제한 데이터를 집어 넣었기 때문이다. 구글 드라이브 내에서 데이터가 존재하는데, 그걸 내 눈으로 확인하는 데만 10시간은 걸린 것 같다. 제대로 압축 해제된 줄도 모르고 계속 반복해서 작업했다. 데이터가 멀쩡히 존재해도  눈으로 확인하기 어려워 시간을 낭비한 셈이다.

2. 런타임 유형 변경

오류에 대해서 검색했을 때 가장 많이 나온 해결 방법이다. num_workers 값을 0으로 변경하고 GPU로 실행했다. 하지만 오류는 그대로였다.

그림 2 오류 검색 결과

CPU, GPU, TPU와 num_workers값을 0, 1, 4로 바꾸는 것은 소용이 없었던 것이다.

3. 파일 경로 변경

처음부터 csv, img 등 데이터 파일의 경로를 절대 경로로 제대로 작성했다. 그래도 뭔가 잘못 작성했나 싶어서 다시 확인하기를 반복하고, 이틀 동안 해결 방법을 찾지 못한 채 런타임 다시 시작을 계속 누른 것 같다. 오류는 그대로였다.

📌 해결 방법

4. ChatGPT-4 사용

처음부터 계속 GPT한테 물어봤지만 좋은 답은 얻지 못했다. 그런데 진짜 마지막이라고 생각하고 질문했더니 허무하게도 해결되었다.

 

처음에는 GPT가 제시한 오류가 발생하는 파일이 어떤 파일인지를 찾았다.

 

(GPT-4) 이 문제를 해결하려면 다음 단계를 따르십시오.
1. CSV 파일에 기록된 이미지 파일 경로가 정확한지 확인합니다.
2. 이미지 파일이 실제로 존재하는지 확인합니다.
3. 이미지 파일이 손상되지 않았는지 확인합니다.
이러한 검증을 위해 __getitem__ 메소드에 다음과 같은 코드를 추가할 수 있습니다:
def __getitem__(self, idx):
    img_path = self.data.iloc[idx, 1]
    image = cv2.imread(img_path)
    if image is None:
        raise FileNotFoundError(f"Image file at {img_path} not found or corrupted")
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
위의 코드는 cv2.imread가 빈 배열을 반환하면, 즉 이미지 파일을 제대로 불러오지 못하면 FileNotFoundError를 발생시킵니다. 이를 통해 문제가 발생하는 특정 이미지 파일을 식별할 수 있습니다.

 

위 명령어를 추가하여 실행한 결과는 아래와 같다. TRAIN_1348.png 파일을 찾을 수 없다는 것 같다.

그림 3 오류가 발생한 이미지 파일 설명

TRAIN_1348.png 파일이 문제라고 생각해 구글 드라이브에서 이 파일이 멀쩡하게 존재하는지 확인해봤다.

 

그러나 이미지 파일은 손상되지 않았다. 한번 더 명령어를 실행해 보니 이번에는 다른 이미지 파일이 문제라고 한다. GPT-4한테 다시 물었다.

 

(GPT-4) 이미지 파일이 실제로 존재하고 손상되지 않았음에도 불구하고 이런 오류가 발생하는 경우, 다음과 같은 문제들을 살펴보면 좋습니다:
1. 파일 경로의 문제: Python이 실행되는 환경과 이미지 파일이 저장되어 있는 위치 사이에 문제가 있을 수 있습니다. 상대 경로(./train_img/TRAIN_1348.png)를 사용하고 있다면, 이 경로는 현재 Python 스크립트나 주피터 노트북이 실행되는 위치를 기준으로 합니다. Python 스크립트나 주피터 노트북의 실행 위치와 이미지 파일의 위치를 확인해 보세요. 또한, 절대 경로를 사용하면 이러한 문제를 피할 수 있습니다.
2. 파일 권한 문제: 파일이나 디렉토리의 권한이 제대로 설정되어 있지 않으면, Python에서 해당 파일을 읽지 못할 수 있습니다. 이 경우 파일 권한을 확인하고 필요한 경우 수정하세요.
3. 이미지 파일 포맷의 문제: 파일이 손상되지 않았고, 다른 프로그램에서는 정상적으로 열린다 하더라도, cv2.imread 함수가 지원하지 않는 이미지 포맷일 수 있습니다. 이 경우 다른 이미지 포맷으로 변경해 보세요.
4. 운영 체제의 차이: Windows와 Unix 계열의 OS (Mac, Linux 등)에서는 파일 경로의 표현 방식이 다릅니다. 만약 코드가 Windows에서 작성되었고 Unix 계열의 OS에서 실행되는 경우, 경로 구분자 등에 문제가 생길 수 있습니다.
이러한 문제들을 확인하고 수정하여 코드를 다시 실행해 보세요.

 

2, 3, 4는 아닌 것 같았다. 아무래도 1번이 의심스러워서 찾아봤고, Colab의 경우, 작업 디렉토리가 기본적으로 '/content' 로 설정되어 있다는 사실을 알았다. 제공받은 파일 실행하려면 상대 경로로 실행해야 했다. 먼저, 명령어를 실행하던 파일과 데이터 파일을 같은 폴더 안으로 옮겼다. 그리고 아래 명령어를 실행하면 된다.

 

(GPT-4) 다음은 작업 디렉토리를 '/content/drive/MyDrive/data'로 변경하는 예제입니다:
import os

# Change the current working directory
os.chdir('/content/drive/MyDrive/data')

# Verify the change
print(os.getcwd())  # This should print '/content/drive/MyDrive/data'

📌 해결

그렇게 하니 그동안 고생했던 게 허무하게도 아래와 같이 오류가 발생하지 않는다.

Model Train 실행 중

📌 후기

AI 공부를 해본 적이 없어 그런지 아무것도 몰랐는데, 데이터 준비부터 시간이 많이 걸린다는 점을 알게 되었다. Colab을 많이 사용해 봤다면 바로 알 수 있는 오류였는데 아쉽다. 그리고 정보를 찾거나 문제를 해결하는 데 있어서 chatGPT가 인기가 많은 이유를 알 것 같았다.

참고자료

1. 압축 해제

2. 런타임 유형 변경

3. chatGPT

Comments