일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 백엔드
- mysql
- Java
- OPENPATH
- UXUI기초정복
- 국비지원교육
- 오블완
- 내일배움카드
- 디자인챌린지
- Spring
- 패스트캠퍼스
- 객체지향
- 디자인교육
- KDT
- 환급챌린지
- 오픈패스
- 백엔드개발자
- 백엔드 부트캠프
- UXUI챌린지
- UXUIPrimary
- 내일배움캠프
- 국비지원
- 국비지원취업
- 오픈챌린지
- 티스토리챌린지
- baekjoon
- Be
- 부트캠프
- 백준
- 디자인강의
- Today
- Total
군만두의 IT 공부 일지
[AI] Python 이미지 경로 문제 오류 해결 본문
📌 요약
AI 경진대회를 준비하면서 발견한 아래 오류를 이틀 동안 고민하다가 드디어 해결했다.
Caught error in DataLoader worker process 0.
📌 서론
제공받은 데이터와 베이스라인 코드를 실행했다. 하지만 계속 Model Train을 실행했을 때 다음과 같은 오류가 발생했다.
📌 시도한 방법
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로 실행했다. 하지만 오류는 그대로였다.
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 파일을 찾을 수 없다는 것 같다.
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'
📌 해결
그렇게 하니 그동안 고생했던 게 허무하게도 아래와 같이 오류가 발생하지 않는다.
📌 후기
AI 공부를 해본 적이 없어 그런지 아무것도 몰랐는데, 데이터 준비부터 시간이 많이 걸린다는 점을 알게 되었다. Colab을 많이 사용해 봤다면 바로 알 수 있는 오류였는데 아쉽다. 그리고 정보를 찾거나 문제를 해결하는 데 있어서 chatGPT가 인기가 많은 이유를 알 것 같았다.
참고자료
1. 압축 해제
2. 런타임 유형 변경
3. chatGPT