728x90

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)
728x90

+ Recent posts