클론 코딩
[코드 리뷰] 정렬된_이미지와 증강된 이미지 출력 및 저장하기 (Colab)
ParkS2
2024. 3. 30. 11:50
코드를 따라가며 코드의 흐름을 파악하며 코드를 이해하고 학습
코드는 주석과 셀의 윗부분에 마크다운으로 설명
정렬된_이미지와 증강된 이미지 출력 및 저장하기 (Colab).ipynb
6.81MB
- 라이브러리 임포트:
- 기본적인 데이터 처리와 배열 연산을 위해 pandas와 numpy를 사용.
- torch 및 관련 라이브러리들은 딥러닝 모델을 구현하기 위해 사용.
- PIL은 이미지 처리를 위해, matplotlib과 seaborn은 데이터 시각화를 위해 사용.
- warnings는 경고 메시지를 필터링하기 위해 사용.
- 필요 라이브러리 설치:
- !pip install torchvision을 통해 torchvision을 설치합니다. 이는 torch와 함께 이미지 데이터를 처리할 때 자주 사용.
- GPU 사용 설정:
- !nvidia-smi를 통해 GPU 상태를 확인하고, cuda가 사용 가능한 경우 device를 GPU로 설정한다. 이 프로젝트에서는 CPU가 출력되었다. 따라서 GPU를 사용할 수 없는 환경이거나, GPU가 인식되지 않는 문제가 있을 수 있다.
- 시드 고정 함수:
- seed_everything 함수를 중복으로 정의했다. 이는 프로젝트의 재현성을 보장하기 위해 난수 생성 시드를 고정하는 데 사용된다.
- 데이터 로딩 및 확인:
- train_df와 test_df를 로드하여 데이터를 확인한다. 데이터 프레임의 .info() 메소드를 통해 데이터의 기본 구조를 검토한다.
- 이미지 처리 및 저장:
- 이미지를 확인하고 저장하기 위한 함수 check_img_save_origin과 aug_img_save를 정의한다. 이들 함수는 이미지를 확인하고, 필요에 따라 원본 이미지를 저장하거나 이미지를 증강시키는 작업을 수행한다.
이미지 처리 및 저장 부분은 두 개의 주요 기능을 수행한다. 하나는 원본 이미지를 확인하고 저장하는 것이고, 다른 하나는 이미지 데이터를 증강시키는 것이다. 여기서 증강(Augmentation)은 데이터 세트를 인위적으로 확장하여 딥러닝 모델의 일반화 능력을 향상시키는 기법을 말한다. 아래에서 각 함수의 작동 방식에 대해 설명한다.
1. 원본 이미지 확인 및 저장 (check_img_save_origin)
이 함수는 train_df (학습 데이터 프레임), show_num (보여줄 이미지 수), save_origin (원본 이미지 저장 여부)을 인자로 받는다. 함수의 주요 단계는 다음과 같다:
- 먼저, 각 이미지에 대한 새로운 데이터 프레임을 생성하여 이미지 ID와 경로를 저장한다.
- save_origin이 True일 경우 모든 학습 데이터에 대해, False일 경우 지정된 수(show_num)만큼의 이미지에 대해 작업을 수행한다.
- 각 이미지를 불러온 후, 4x4 격자에 해당하는 각 부분 이미지를 추출한다. 이 때, 이미지는 16개의 부분으로 나누어진 것으로 가정한다.
- 이미지에 숫자를 표시하고, 숫자의 위치에 따라 이미지를 재배치하여 '원본' 이미지를 생성한다. 이 과정은 데이터의 원래 순서를 나타내기 위해 수행된다.
- save_origin이 True일 경우, 생성된 '원본' 이미지를 지정된 경로에 저장한다.
- 함수는 마지막으로 학습 이미지와 재정렬된 원본 이미지를 시각적으로 비교하기 위해 두 이미지를 나란히 표시한다.
2. 이미지 데이터 증강 및 저장 (aug_img_save)
이 함수도 train_df, show_num, save_aug (증강 이미지 저장 여부)를 인자로 받는다. 주요 작업 흐름은 다음과 같다:
- 증강된 이미지에 대한 새로운 데이터 프레임을 생성한다.
- 원본 이미지를 불러온 후, 각 부분 이미지를 추출한다.
- 부분 이미지들의 위치를 무작위로 섞어, 새로운 이미지인 '증강' 이미지를 생성한다. 이 과정은 모델이 위치 변화에 더 강인하게 학습하도록 도와준다.
- save_aug가 True일 경우, 생성된 증강 이미지를 지정된 경로에 저장한다.
- 마찬가지로, 학습 이미지와 증강된 이미지를 시각적으로 비교하기 위해 두 이미지를 나란히 표시한다.
코드 평가
- 재현성: 코드에서 랜덤 시드를 고정하는 것은 실험의 재현성을 보장하고 결과의 일관성을 유지하는 데 중요하다.
- 데이터 전처리: 이미지 경로를 사용하여 데이터를 로드하고, 이미지에 숫자를 그려서 표시하는 것은 모델 훈련 전 데이터를 검증하는 좋은 방법이다.
- 데이터 증강: 이미지 데이터를 무작위로 섞어 증강하는 기능은 학습 데이터의 다양성을 증가시켜 모델의 일반화 능력을 향상시키는데 도움을 준다.
- GPU 사용 확인: 코드에 GPU 사용 가능 여부를 확인하는 부분이 포함되어 있어, GPU를 활용할 수 있는 환경에서는 모델 훈련 속도를 향상시킬 수 있다.
- 시각화: 시각화는 데이터를 이해하고, 문제를 발견하며, 결과를 전달하는 데 있어 중요한 도구이다.
개선할점
- 코드 중복: 코드에서 일부 중복되는 부분들이 보인다. 예를 들어, if save_origin == False: 문이 반복되어 나타나며, 이는 함수를 더 효율적으로 만들기 위해 리팩토링할 수 있는 부분이다.
- 버전 경고: torchvision을 설치할 때 나타난 pip의 경고 메시지는 주의를 요한다. 사용 중인 라이브러리의 버전이 최신이 아니라는 것은 보안 및 기능 개선을 놓칠 수 있음을 의미한다.
- 에러 핸들링: 코드에서 파일 또는 디렉토리 생성 과정에서 예상치 못한 에러가 발생할 경우를 대비한 에러 핸들링이 빠져 있다.
- 함수의 길이: check_img_save_origin와 aug_img_save 함수가 매우 길고 여러 가지 작업을 수행하기 때문에, 이러한 함수들을 더 작은 단위로 분리하여 각각의 기능을 명확히 할 수 있다.