Learning CIFAR-10 with AlexNet

2023. 8. 30. 12:432023-2 AI_track/toy project

CIFAR-10 EDA

CIFAR-10의 이미지 예시는 위와 같다. train 데이터는 50000장, test 데이터는 10000장 이다. 이미지는 32x32 픽셀이며 3채널(RGB)로 이루어져 있다. 

 

각 클래스마다 몇 개의 데이터를 가지고 있는지 표를 그려본 결과, train은 각 클래스마다 5000장, test는 1000장씩 들어있다는 것을 알 수 있었다.

 

Data preprocessing

데이터 전처리는 다음과 같이 수행하였다.

IMG_RESIZE = (40, 40)
IMG_SIZE = (32, 32)
NORMALIZE_MEAN = (0.49139968, 0.48215841, 0.44653091)
NORMALIZE_STD = (0.24703223, 0.24348513, 0.26158784)

train_transforms = [
    T.Resize(IMG_RESIZE),
    T.RandomCrop(IMG_SIZE),
    T.RandomHorizontalFlip(0.5),
    T.RandomVerticalFlip(0.5),
    T.ToTensor(),
    T.Normalize(NORMALIZE_MEAN, NORMALIZE_STD),
]

처음에는 이미지 데이터 3채널의 각 평균과 표준편차 값을 전부 0.5로 설정하였다. 이후 채널의 평균과 표준편차 값을 직접 구해 설정하였더니, 성능이 약 1~2% 정도 올라감을 확인하였다.

 

AlexNet

AlexNet 논문에서 구현된 것과는 조금 다르게 이미지 데이터에 맞춰 AlexNet 모델을 구현하였다. Local Respose Normalization을 삭제하였고, 이미지 데이터에 맞춰 입력 크기, 클래스의 갯수, 출력 노드, 입력 노드를 변경하였다. 

 

Experiment

하이퍼 파라미터 튜닝을 진행하기 위해 batch_size와 learning_rate를 바꿔가며 실험을 해보았다. criterion은 cross_entropy를 사용하였고, optimizer는 adam을 사용했다. 그리고 scheduler를 사용하여 15 epoch마다 learning_rate가 0.1배씩 감소하게 하였다. 그 결과는 다음과 같다.

  batch_size=64 batch_size=128 batch_size=256
lr=0.001 Epoch 44
Acc: 68.98
Epoch 41
Acc: 69.37
Epoch 46
Acc: 71.66
lr=0.0005 Epoch 41
Acc: 73.95
Epoch 25
Acc: 73.84
Epoch 32
Acc: 71.86
lr=0.0001 Epoch 36
Acc: 67.79
Epoch 29
Acc: 60.65
Epoch 38
Acc: 55.63

lr=0.0005일 때 성능이 높게 나타나는 경향이 있으며, lr=0.0005이며 batch_size=64, 128일 때 약 74%의 정확도로 가장 높게 나타났다.

 

Ablation Study

더 나아가 이전에 사용했던 모델에서 Batch Normalization을 추가해 Batch Normalization의 유무에 따른 성능 비교를 진행하였다.

Batch Normalization은 output의 dimension 별로 N개의 batch size IMAGE끼리 평균과 표준편차를 구해 정규화를 시키는 것이다. 이를 통해 layer를 계속 지나도 output 분포가 크게 변하지 않으면서 학습에 도움이 된다.

 

아래는 AlexNet과 BN을 추가한 AlexNet, 그리고 여러 argument에 따른 성능 비교 실험을 진행한 결과이다.

  AlexNet AlexNet with BN
Baseline Epoch 108 
Acc: 80.69 
 Epoch 109 
Acc: 86.04
RandomCrop Epoch 42 
Acc: 79.08
Epoch 71 
Acc: 82.52
RandomHorizontalFlip
RandomVerticalFlip
Epoch 51 
Acc: 79.69 
Epoch 46
Acc: 86.01
RandomCrop
RandomHorizontalFlip
RandomVerticalFlip
Epoch 80 
Acc: 74.86 
Epoch 59
Acc: 80.20
TrivialAugmentWide Epoch 120 
Acc: 84.33
Epoch 87 
Acc: 89.23

두 모델 모두 RandomCrop 데이터 증강을 사용하면 성능이 하락하는 것을 알 수 있다. 이것은 CIFAR-10의 특성에 의한 결과라 생각된다. CIFAR-10 이미지의 object가 이미지 전체를 포괄할 만큼 크기 때문에 argumentation을 할 시 object가 왜곡되어 학습을 방해하는 것이라 판단된다. 

 

또한 AlexNet에 BN을 추가한 결과를 보면 AlexNet에 비해 6% 이상 정확도가 증가한 것을 알 수 있다. 이것은 BN이 Classfication Task에서 중요한 역할을 한다는 것을 알 수 있다.

 


2023-2 AI_track toy project를 진행하면서 어떻게 팀프로젝트를 진행하는 것이 좋을지에 대한 고민을 많이 했다. 다같이 팀플에 의욕을 보이면서 활발한 소통을 이루고 싶었으나, 조장인 내 능력의 한계로 인해 이루지 못한 거 같다. 아무래도 다같이 만날 기회도 없다 보니 친해지기도 어렵고, 서로 존댓말만 쓰는 딱딱한 상황에서 회의는 부담스럽고 빠르게 지치게 되었다. 짧은 시간 내에 진행한 만큼 부족한 부분이 많은 프로젝트였지만, 다음 프로젝트를 진행할 때 어떻게 하면 좋을지에 대한 나름의 지침이 생겼다. 우선 팀원들과 친해지는 것이 중요하다. 친한만큼 의견을 제시하기도 편하고, 의견 조율도 쉽게 될 것이다. 또한 역할 분담을 체계적으로 해야한다. 각자 맡은 역할이 있다면, 프로젝트 진행이 수월해질 것이다. 마지막으로, 팀플은 혼자 하는 것이 아니다. 서로의 진행 상황을 계속 공유하며 많은 소통을 하는 것이 중요하다. 앞으로 많은 프로젝트를 하게 될 텐데, 잘 해냈으면 좋겠다.