본문 바로가기

반응형

전체 글

(135)
[Deep Learning] 이미지 전처리와 CNN | 왜 이미지는 Linear Layer만으로 부족할까? 지금까지 이미지 데이터를 Flatten()한 뒤 Linear Layer에 넣어 분류했다.하지만 이미지에는 단순한 픽셀값뿐만 아니라어떤 특징이 어디에 위치하는지라는 공간 정보도 중요하다.이번에는 기본적인 이미지 전처리 방법을 살펴보고, 왜 이미지 처리에서 CNN이 많이 사용되는지 개념적으로 정리했다.#CNN #Convolution #Pooling #ImagePreprocessing #ComputerVision #FeatureMap #DataAugmentation #PyTorch #딥러닝공부⠀1. 이미지는 RGB 숫자 Matrix의 집합컬러 이미지는Red Matrix+Green Matrix+Blue Matrix로 구성되어 있다.즉 컴퓨터 입장에서는 이미지가 특별한 사진이 아니라 숫자가 배치되어 있는 Matr..
[Deep Learning] 이미지 Normalize와 PIL·OpenCV 전처리 | RGB부터 영상 Frame까지 앞에서는 ImageFolder와 Transform을 이용해 실제 이미지 파일을 Dataset과 DataLoader로 연결했다.이번에는 이미지가 결국 숫자로 이루어진 데이터라는 점을 바탕으로 RGB Channel의 평균과 표준편차를 계산해 Normalize하는 과정을 확인했다.추가로 PIL과 OpenCV를 이용해 이미지와 영상을 직접 처리하는 방법도 살펴봤다.⠀1. 이미지는 결국 숫자 데이터다우리 눈에는 사진으로 보이지만 컴퓨터에서 이미지는 숫자 데이터다.컬러 이미지는 크게RedGreenBlue세 개의 Channel로 구성된다.PyTorch에서는 일반적으로(Channel, Height, Width)형태이므로 RGB 이미지 하나는(3, H, W)형태의 Tensor라고 볼 수 있다.⠀2. RGB 각각의 평균을..
[Deep Learning] PyTorch 이미지 전처리 | ImageFolder, Transform과 Compose 이전에는 sklearn이나 torchvision에서 이미 정리된 Dataset을 불러와 모델을 학습했다.이번에는 실제 폴더에 저장된 Pizza, Steak, Sushi 이미지 데이터를 직접 불러와이미지 파일 → Dataset → Transform → DataLoader로 연결하는 과정을 살펴봤다.특히 이미지마다 크기가 다를 때 왜 DataLoader에서 오류가 발생하는지, 그리고 여러 전처리를 연결할 때 Compose()가 왜 필요한지를 확인했다.#PyTorch #ImagePreprocessing #ImageFolder #Transform #Compose #DataLoader #ComputerVision #딥러닝공부⠀1. 실제 이미지 파일 불러오기먼저 Google Drive에 저장된 이미지 데이터의 경로..
[Deep Learning] PyTorch FashionMNIST 다중분류 | CrossEntropyLoss, Softmax와 argmax 앞에서는 손글씨 숫자 데이터를 이용해5인가 / 5가 아닌가를 판단하는 Binary Classification을 진행했다.이번 ex13에서는 FashionMNIST 데이터를 이용해 10개의 의류 클래스를 구분하는 Multi-class Classification으로 확장했다.DataLoader와 Training Loop의 기본 구조는 그대로 사용하면서,입력 이미지 크기, 모델 출력 개수, Loss Function, 최종 예측값을 만드는 방법이 이진분류와 어떻게 달라지는지를 확인했다.⠀1. FashionMNIST 데이터 불러오기이번에는 torchvision의 FashionMNIST Dataset을 사용했다.데이터 개수는Train → 60,000Test → 10,000이었다.FashionMNIST는 10개의 ..
[Deep Learning] PyTorch GPU 학습과 Early Stopping | 과적합을 막고 Best Model 저장하기 이번 실습에서는 기존 CPU 기반 PyTorch 코드를 GPU 환경에서도 동작하도록 수정하고, Loss Curve에서 발생하는 Overfitting을 확인한 뒤 Early Stopping까지 직접 구현했다.단순히 학습을 끝까지 돌리는 것이 아니라,성능이 가장 좋았던 모델을 저장하고 → 더 이상 개선되지 않으면 학습을 중단하고 → 저장해둔 Best Model을 다시 불러오는 과정까지 연결했다.#PyTorch #GPU #CUDA #EarlyStopping #Overfitting #BestModel #LossCurve #DeepLearning #딥러닝공부⠀1. PyTorch에서는 GPU 사용도 직접 지정해야 한다PyTorch에서는 모델을 만들었다고 자동으로 GPU에서 연산되는 것이 아니다.먼저 사용할 Devi..
[Deep Learning] PyTorch 모델 평가 | Confusion Matrix와 Heatmap으로 이진분류 결과 확인하기 이번에는 학습된 모델의 Accuracy만 확인하는 것에서 끝나지 않고,실제값과 예측값을 저장 → Confusion Matrix 생성 → Heatmap으로 시각화하는 과정까지 이어서 진행했다.그리고 이 과정에서도 계속 중요하게 등장한 것이 Tensor의 Shape과 데이터 타입이었다.⠀1. Accuracy만으로는 어떤 데이터를 틀렸는지 알기 어렵다앞에서는 모델의 전체 Accuracy를 계산했다.accuracy = accuracy_fn( y_true=targets, y_pred=te_round.squeeze())Accuracy를 보면 전체 데이터 중 몇 %를 맞혔는지는 알 수 있다.하지만 예를 들어 Accuracy가 95%라고 해도실제 5를 5가 아니라고 얼마나 틀렸는지실제 5가 아닌 숫자를 5라..
[Deep Learning] PyTorch DataLoader로 Mini-batch 학습하기 | 손글씨 숫자 이진분류 이번 실습의 핵심은Dataset → DataLoader → Batch → Training Loop로 이어지는 흐름을 이해하는 것이다.⠀1. 손글씨 숫자를 이진분류 문제로 바꾸기이번 실습에서는 sklearn의 load_digits() 데이터를 사용했다.load_digits()에는 0부터 9까지의 손글씨 숫자 데이터가 들어 있는데, 이번에는 이 문제를 다중분류가 아니라"숫자 5인가?"를 판단하는 이진분류 문제로 바꿨다.Target이 5라면15가 아니라면0으로 변환된다.즉 기존의0, 1, 2, 3, 4, 5, 6, 7, 8, 9문제를5 → 1나머지 숫자 → 0인 Binary Classification 문제로 바꾼 것이다. ⠀⠀ 📌 이번 실습의 포인트같은 데이터라도 Target을 어떻게 정의하느냐에 따라다중분..
[Deep Learning] 레이어를 늘렸는데 왜 학습이 안 될까? | 선형 모델의 한계와 ReLU 모델의 Layer와 Parameter를 늘리는 것만으로는 모든 문제가 해결되지 않는다.ex11에서는 원형 데이터를 Linear Layer만으로 학습했을 때 성능이 거의 좋아지지 않았고,비선형 Activation Function인 ReLU를 추가한 뒤 차이가 나타났다.이번 실습을 통해 단순히 모델을 더 크게 만드는 것보다, 현재 모델이 데이터의 패턴을 표현할 수 있는 구조인지 확인하는 것이 중요하다는 점을 확인할 수 있었다.#ActivationFunction #ReLU #NonLinear #Underfitting #NeuralNetwork #PyTorch #딥러닝공부⠀1. 첫 번째 가설: 모델을 더 복잡하게 만들면 좋아질까?Base Model의 성능이 좋지 않자 ex11에서는 Hidden Layer를 추가..
[Deep Learning] PyTorch 이진분류 | BCEWithLogitsLoss, Sigmoid와 squeeze가 필요한 이유 이전에는 선형회귀를 통해 모델이 예측값을 만들고, Loss를 계산한 뒤 Gradient를 구해서 파라미터를 업데이트하는 기본적인 Training Loop를 살펴봤다.이번에는 출력값이 연속적인 숫자가 아니라 0 또는 1 중 하나의 클래스를 예측하는 이진분류(Binary Classification)를 다뤘다.이진분류에서는 단순히 모델의 출력값을 바로 0과 1로 비교하는 것이 아니라,Logit → Sigmoid → Probability → Class의 흐름으로 값을 해석하게 된다.그리고 이 과정에서 Loss를 계산할 때와 실제 클래스 예측값을 만들 때 사용하는 값이 다르다는 점, 예측값과 정답의 Shape을 맞춰야 한다는 점이 중요했다.⠀1. Circle 데이터를 0과 1로 분류하기ex11에서는 make_ci..
[Deep Learning] PyTorch 모델 학습의 전체 흐름 | Loss, Optimizer, Training Loop와 모델 저장 모델 구조를 만드는 것에서 끝나는 것이 아니라, 예측값으로 Loss를 계산하고 Gradient를 구해 파라미터를 실제로 업데이트하는 과정까지 연결해야 학습이 완성된다. ⠀ 1. Loss Function과 Optimizer의 역할을 분리해서 보기처음에는 Loss Function과 Optimizer가 둘 다 학습에 사용되다 보니 역할이 비슷하게 느껴질 수 있다.하지만 실제로는 역할이 명확하게 나뉜다.Loss Function은 현재 모델의 예측값이 실제값과 얼마나 차이나는지 계산하는 역할을 하고,Optimizer는 그 Loss를 기준으로 계산된 Gradient를 사용해서 모델의 파라미터를 실제로 수정하는 역할을 한다.구성 요소역할자료의 예시Loss Function예측값과 실제값의 차이를 계산nn.L1Loss(..

반응형