CNN은 "Convolutional Neural Network"의 약자로, 합성곱 신경망을 말한다. 이미지 처리와 인식 분야에서 탁월한 성과를 보이는 딥러닝 모델 중 하나이다.
CNN은 주로 이미지 데이터와 같은 2D 데이터를 처리하는 데 특화되어 있다. 이러한 특성은 이미지의 공간적인 특징을 이해하고 인식하는 데 유리하게 작용한다. 기본적으로 CNN은 합성곱 계층(Convolutional layer)과 풀링 계층(Pooling layer)으로 구성된다.
주요 구성 요소:
1. 합성곱 계층(Convolutional Layer): 이미지에 커널(필터)을 적용하여 이미지의 특징을 감지하는 역할을 한다. 각 커널은 작은 지역 패턴(예: 선, 모서리 등)을 인식하는 역할을 수행하며, 합성곱을 통해 이미지 전체에 대해 이 패턴을 찾아낸다.
2. 활성화 함수(Activation Function): 주로 ReLU(Rectified Linear Unit)가 사용되며, 합성곱 계층의 출력값에 비선형성을 추가하여 모델의 표현력을 향상시킨다.
3. 풀링 계층(Pooling Layer): 이미지의 크기를 줄이면서 중요한 정보를 보존하는 역할을 한다. 일반적으로 최대 풀링(Max Pooling)이나 평균 풀링(Average Pooling)을 사용하여 이미지를 다운샘플링한다.
4. 완전 연결 계층(Fully Connected Layer): CNN의 마지막 부분에 위치하며, 최종적인 분류 작업이나 출력을 위해 사용된다.
CNN은 이미지의 지역적인 구조를 고려하여 특징을 추출하고 이를 효과적으로 학습하여 이미지 분류, 객체 검출, 분할 등 다양한 컴퓨터 비전 작업에 사용된다. 또한, 전이 학습(Transfer Learning)과 함께 사용되면 작은 데이터셋에서도 뛰어난 성능을 발휘하는데 도움이 된다.
import os
import torch
import torchvision
from torchvision import transforms
# 데이터셋 경로 설정
train_data_dir = "path/to/train_dataset_directory"
# 이미지 증식을 위한 변환(트랜스폼) 설정
data_transform = transforms.Compose([
transforms.Resize((150, 150)), # 이미지 크기 조정
transforms.RandomRotation(20), # 랜덤 회전 (0~20도 사이의 랜덤 회전)
transforms.RandomHorizontalFlip(), # 랜덤으로 수평 뒤집기
transforms.RandomVerticalFlip(), # 랜덤으로 수직 뒤집기
transforms.RandomAffine(0, translate=(0.2, 0.2), shear=0.2), # 랜덤한 어파인 변환
transforms.ColorJitter(brightness=0.2, contrast=0.2, saturation=0.2, hue=0.1), # 색상 변환
transforms.ToTensor(), # 이미지를 Tensor로 변환
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) # 정규화
])
# 이미지 파일 불러오기
images = [os.path.join(train_data_dir, file) for file in os.listdir(train_data_dir)]
# 증식할 이미지 개수 설정
num_augmented_images_per_image = 5
# 이미지 증식 수행 및 저장
for image_path in images:
img = Image.open(image_path)
for i in range(num_augmented_images_per_image):
augmented_img = data_transform(img)
augmented_img_path = os.path.join(train_data_dir, f"augmented_{i}_{os.path.basename(image_path)}")
torchvision.utils.save_image(augmented_img, augmented_img_path)
'MS AI School' 카테고리의 다른 글
DAY 39 - 데이터 처리 개요 (0) | 2022.12.09 |
---|---|
DAY 38 - CRUD 애플리케이션 만들기 (0) | 2022.12.09 |
DAY 33 - 회귀 실습(보스턴 집값 예측) (0) | 2022.12.07 |
DAY 32 - 다중 분류 실습(로이터 기사) (0) | 2022.12.06 |
DAY 31 - 이진 분류 실습(영화 리뷰 IMDB dataset) (0) | 2022.12.06 |