본문 바로가기
AI이야기

Hugging Face로 이미지 분류 AI 만들기: ResNet-18 모델 학습 가이드

by logbe1 2024. 10. 14.

이미지 분류 모델을 학습시키는 과정을 HuggingFace를 사용하여 간단하게 구현해보고, 모델 학습의 핵심 단계들을 좀 더 깊이 들여다볼게요. 지난 포스팅에서 살짝 언급했듯이, 딥러닝 모델 학습 과정은 데이터 준비부터 모델 평가까지 여러 단계를 거치는데, HuggingFace는 이 복잡한 과정들을 좀 더 쉽고 효율적으로 만들어 줍니다.

 


데이터 준비하기: 인도 음식 이미지 데이터셋 활용하기

데이터는 모델이 학습하는 밑바탕이 되는 아주 중요한 부분이에요. 마치 건물을 지을 때 튼튼한 기초가 필요하듯이, 딥러닝 모델도 좋은 성능을 내려면 양질의 데이터가 필수죠. 이번 포스팅에서는 인도 음식 이미지 데이터셋을 활용해서 이미지 분류 모델을 학습시켜 볼 거예요.

 

이미지 분류 모델을 학습시키려면, 모델이 이해할 수 있는 형태로 이미지 데이터를 준비해야 해요. 이전 포스팅에서도 살짝 언급했지만, HuggingFace는  함수를 통해 다양한 데이터셋을 쉽게 불러올 수 있도록 지원해요. 덕분에 우리는 직접 데이터를 수집하거나 전처리하는 번거로운 과정을 생략하고, 바로 모델 학습에 집중할 수 있죠.

 

저는 이전 포스팅에서 소개했던 인도 음식 이미지 데이터셋을 다시 사용해볼 거예요. 이 데이터셋은 다양한 종류의 인도 음식 이미지와 각 이미지에 해당하는 음식 이름 레이블로 구성되어 있답니다. HuggingFace에서 제공하는  데이터셋을  함수를 이용해서 간단하게 로드해볼 수 있어요.

 

dataset = load_dataset("rajistics/indian_food_images")

 하면 데이터셋이 로드되고, 과 로 나눠진 데이터를 확인할 수 있답니다.  훈련 데이터와 테스트 데이터를 분리하는 건 모델의 성능을 객관적으로 평가하기 위해서 아주 중요한 과정이에요.

 


데이터 전처리: 모델이 이해할 수 있는 형태로 변환하기

모델이 학습할 수 있도록 데이터를 모델이 이해할 수 있는 형태로 바꿔주는 과정이 필요해요. 마치 우리가 외국인 친구에게 한국어로 말할 때, 그 친구가 이해할 수 있도록 쉬운 단어로 설명하거나 몸짓을 사용하는 것과 비슷하다고 생각하면 돼요. 딥러닝 모델도 마찬가지로, 원본 데이터 그대로 넣어주면 제대로 학습하지 못할 수 있어요.

 

일반적으로 이미지 데이터는 픽셀 값으로 이루어져 있는데, 이 픽셀 값들을 모델이 학습할 수 있도록 적절하게 변환해야 해요. 이때, HuggingFace의 가 큰 도움을 줍니다. 는 모델이 학습할 때 사용했던 데이터 전처리 과정을 자동으로 불러와서 적용해주는 역할을 해요.

 

저희는 이번에 ResNet-18이라는 이미지 처리 모델을 사용할 거예요. ResNet-18 모델은 이미지의 크기를 224x224로 조정하고, 이미지를 RGB 채널로 변환하는 등의 전처리 과정을 거쳐 학습되었어요. 따라서, 우리도 같은 전처리 과정을 거쳐야 모델이 데이터를 제대로 이해하고 학습할 수 있답니다.

 

image_processor = AutoImageProcessor.from_pretrained("microsoft/resnet-18")
image_processor.size['shortest_edge'] = 32 # 이미지 크기를 32로 설정 (원래 224였음)

def preprocess_data(examples):
    images = examples["image"]
        images = [image.convert("RGB") for image in images]
            pixel_values = image_processor(images, return_tensors="pt").pixel_values
                labels = examples["label"]
                    return {"pixel_values": pixel_values, "labels": labels}
                    
                    train_dataset = dataset["train"].with_transform(preprocess_data)
                    test_dataset = dataset["test"].with_transform(preprocess_data)

 코드에서  함수는 이미지를 RGB 채널로 변환하고, 를 이용해 픽셀 값으로 변환하는 역할을 합니다. 그리고 을 이용해 과 에 전처리 과정을 적용해줍니다.

 


모델 불러오기: ResNet-18 모델 활용하기

이제 모델을 불러올 차례에요. HuggingFace는 다양한 사전 학습된 모델들을 제공하기 때문에, 우리는 직접 모델을 설계하고 학습시키는 대신, 이러한 사전 학습된 모델을 활용하여 빠르게 개발을 시작할 수 있어요. 이번에는 ResNet-18 모델을 사용해볼 건데요, ResNet-18은 이미지 분류 작업에 널리 사용되는 효과적인 모델 중 하나랍니다.

 

ResNet-18 모델은  함수를 이용하여 쉽게 불러올 수 있어요. 그리고 과 를 통해 레이블 정보를 모델에 전달하고, 를 통해 모델의 입력 크기와 데이터의 크기가 다를 때 발생하는 오류를 무시하도록 설정합니다.

 

model = ResNetForImageClassification.from_pretrained("microsoft/resnet-18", 
    id2label={idx: food for idx, food in enumerate(dataset['train'].features['label'].names)},
        label2id={food: idx for idx, food in enumerate(dataset['train'].features['label'].names)},
            ignore_mismatched_sizes=True)
            
            torch.nn.init.kaiming_normal_(model.classifier[1].weight, mode='fan_out')
            torch.nn.init.zeros_(model.classifier[1].bias)

 학습된 모델을 불러온 후, 모델의 마지막 부분을 수정하여 인도 음식 분류에 맞게 조정합니다. 이는 을 사용하여 가중치와 편향을 초기화하는 과정을 통해 이루어집니다.

 


모델 학습시키기: Optimizer & Learning Rate Scheduler 적용하기

이제 모델을 학습시킬 준비가 되었어요! 모델 학습은 모델의 파라미터를 조정하여 데이터를 잘 분류하도록 만드는 과정이에요. 마치 아이가 문제를 풀면서 틀린 부분을 수정하고, 점점 더 문제를 잘 풀 수 있도록 훈련하는 것과 비슷하다고 볼 수 있죠.

 


Optimizer 설정하기

모델을 학습시키기 위해서는 를 설정해야 해요. Optimizer는 모델의 파라미터를 업데이트하는 역할을 하는데, 다양한 종류의 optimizer가 존재하며, 각 optimizer는 장단점을 가지고 있어요. 저희는 Adam Optimizer를 사용해 볼 거예요. Adam Optimizer는 흔히 사용되는 optimizer 중 하나로, 학습 속도가 빠르고, 성능이 뛰어난 편이랍니다.

 


Learning Rate Scheduler 설정하기

는 학습 과정에서 학습률을 조절하는 역할을 해요. 학습 초기에는 학습률을 높게 설정하여 빠르게 학습하고, 학습 후반에는 학습률을 낮춰서 미세 조정을 하는 방식으로 학습 효율을 높일 수 있답니다.

 


Training Loop 구성하기

모델 학습 과정은 를 통해 구현됩니다. 는 훈련 데이터셋을 반복적으로 모델에 입력하고, 모델의 예측 결과와 정답 레이블을 비교하여 손실 함수를 계산하는 과정을 반복합니다. 그리고 계산된 손실 함수를 기반으로 모델의 파라미터를 업데이트하여 모델의 성능을 향상시키죠.

 


from transformers import TrainingArguments, Trainer

training_args = TrainingArguments(
    output_dir="./results",
        per_device_train_batch_size=16,
            per_device_eval_batch_size=64,
                num_train_epochs=3,
                    evaluation_strategy="epoch",
                        save_strategy="epoch",
                            logging_dir="./logs",
                                logging_steps=10,
                                    report_to="none"
                                    )
                                    
                                    trainer = Trainer(
                                        model=model,
                                            args=training_args,
                                                train_dataset=train_dataset,
                                                    eval_dataset=test_dataset,
                                                    )
                                                    
                                                    trainer.train()

 코드에서 는 모델 학습에 필요한 다양한 설정을 담고 있으며, 는 모델 학습을 위한 주요 기능들을 제공합니다. 을 호출하면 모델 학습이 시작됩니다.

 


모델 평가하기: 테스트 데이터셋으로 성능 확인하기

모델 학습이 끝나면, 학습된 모델의 성능을 평가해야 해요. 모델의 성능을 평가하는 방법은 다양하지만, 일반적으로 테스트 데이터셋을 사용하여 모델이 얼마나 잘 예측하는지 확인하는 방식을 사용합니다. 테스트 데이터셋은 모델이 학습하지 않은 데이터로 구성되어 있기 때문에, 모델의 일반화 능력을 측정하는 데 유용하죠.

 

trainer.evaluate()

 호출하면 테스트 데이터셋을 사용하여 모델을 평가하고, 정확도, 정밀도, 재현율 등 다양한 지표를 확인할 수 있습니다.

 


마무리: HuggingFace로 이미지 분류 모델 학습하기

HuggingFace는 딥러닝 모델 학습 과정을 훨씬 간편하게 만들어 주는 아주 유용한 도구에요. 이번 포스팅에서는 HuggingFace를 활용하여 인도 음식 이미지 분류 모델을 학습시키는 방법을 알아봤습니다. 데이터 준비, 전처리, 모델 불러오기, 학습, 평가까지 전 과정을 HuggingFace의 기능들을 활용하여 간단하게 구현할 수 있었죠. 앞으로도 HuggingFace를 활용하여 다양한 딥러닝 모델을 학습하고, 여러분의 아이디어를 구현해 보시길 바랍니다!

 

QnA

Q1. HuggingFace에서 제공하는 사전 학습된 모델은 어떤 종류가 있나요?

A1. HuggingFace는 이미지 분류, 자연어 처리, 음성 인식 등 다양한 분야에서 활용 가능한 사전 학습된 모델들을 제공해요.  BERT, GPT, ResNet, Vision Transformer 등 다양한 모델들을 찾아볼 수 있고, 여러분의 목적에 맞는 모델을 선택하여 사용할 수 있답니다.

 

Q2. 모델 학습 시 하이퍼파라미터는 어떻게 설정해야 하나요?

A2. 모델 학습 시 하이퍼파라미터는 모델의 성능에 큰 영향을 미치는 중요한 요소에요. 학습률, 배치 크기, 에폭 수 등 다양한 하이퍼파라미터를 조정하여 최적의 성능을 얻을 수 있도록 실험을 통해 찾아내는 것이 중요해요.

 

Q3. 모델 학습 시간은 얼마나 걸리나요?

A3. 모델 학습 시간은 데이터셋의 크기, 모델의 복잡성, 하이퍼파라미터 설정 등 여러 요소에 따라 달라져요. GPU를 사용하면 학습 시간을 단축할 수 있으며, HuggingFace에서 제공하는 Trainer를 이용하면 학습 과정을 모니터링하고, 학습 시간을 예측할 수 있습니다.

 

키워드:딥러닝,머신러닝,AI,인공지능,이미지분류,ResNet,모델학습,파이토치,PyTorch,데이터셋,데이터전처리,오토ML,AutoML,Transformer,프롬프트엔지니어링,PromptEngineering,데이터과학,DataScience,컴퓨터비전,ComputerVision,머신러닝엔지니어,MachineLearningEngineer,AI개발,AIDEV,딥러닝모델,DeepLearningModel,자동화,Automation,오픈소스,OpenSource,깃허브,GitHub

 

 

 

관련 포스트 더 보기

2024.10.05 - [AI이야기] - 인공지능 시대, 인과적 언어 모델링의 핵심 원리 파헤치기!

 

인공지능 시대, 인과적 언어 모델링의 핵심 원리 파헤치기!

과거의 단어들이 미래의 단어를 예측하는 흥미로운 세상, 인과적 언어 모델링의 세계에 오신 것을 환영합니다!요즘 챗봇이나 AI 작문 도구를 사용해 보신 분들이라면, 컴퓨터가 마치 사람처럼

logbe1.tistory.com

2024.10.05 - [AI이야기] - Hugging Face Hub 활용! AI 모델 개발, 이제 쉽게 시작하세요

 

Hugging Face Hub 활용! AI 모델 개발, 이제 쉽게 시작하세요

AI 개발의 든든한 지원군, Hugging Face Hub와 Transformers를 활용하여 꿈꿔왔던 AI 서비스를 현실로 만들어보세요!Hugging Face Hub는 머신러닝 모델, 데이터셋, 데모, 메트릭 등을 쉽게 공유하고 협업할 수

logbe1.tistory.com

2024.10.07 - [AI이야기] - AI 모델 데모 체험 공간: 누구나 AI를 경험해보세요!

 

AI 모델 데모 체험 공간: 누구나 AI를 경험해보세요!

AI 기술이 빠르게 발전하면서, 우리 삶의 많은 부분을 바꾸고 있어요. 챗봇, 번역, 이미지 생성 등 다양한 분야에서 AI가 활용되고 있죠. 하지만 AI 기술이 복잡하고 어렵게 느껴지는 분들도 많을

logbe1.tistory.com

2024.10.06 - [AI이야기] - Hugging Face로 NLP 모델 활용하기: 초보자를 위한 완벽 가이드

 

Hugging Face로 NLP 모델 활용하기: 초보자를 위한 완벽 가이드

Hugging Face 라이브러리 활용해서 자연어 처리 모델을 써보고 싶은데 어디서부터 시작해야 할지 막막하시죠? 걱정 마세요! 이 글에서는 Hugging Face 라이브러리를 처음 사용하는 분들을 위해 설치부

logbe1.tistory.com

2024.10.06 - [AI이야기] - 모델 허브 활용 가이드: AI 모델 쉽게 활용하는 방법

 

모델 허브 활용 가이드: AI 모델 쉽게 활용하는 방법

요즘 AI 기술이 엄청나게 발전하고 있죠? 덕분에 우리 생활도 점점 더 편리해지고 있는데요. 그런데 막상 AI 모델을 직접 활용하려고 하면 어려움을 느끼는 분들도 많을 거예요. 복잡한 코드를 작

logbe1.tistory.com