데이터 증강(Data Augmentation)은 학습 데이터를 인위적으로 다양하게 만들어서
모델의 일반화 성능을 향상시키는 방법입니다.
데이터증강은 딥러닝모델에서 매우 중요한역할을 하며, 주어진 데이터에서 다양한 패턴을 학습할수 있도록 도와줍니다.
일반적으로 이미지 분류 및 객체 감지 문제에서 많이 사용되는 증강 기법은 다음과 같습니다.
- 좌우 반전: 이미지를 좌우로 반전하여 새로운 이미지를 만듭니다.
- 회전: 이미지를 일정 각도만큼 회전시켜 새로운 이미지를 만듭니다.
- 이동: 이미지를 상하좌우로 이동시켜 새로운 이미지를 만듭니다.
- 확대/축소: 이미지를 확대하거나 축소하여 새로운 이미지를 만듭니다.
- 가우시안 노이즈 추가: 이미지에 가우시안 노이즈를 추가하여 새로운 이미지를 만듭니다.
- 밝기 조절: 이미지의 밝기를 조절하여 새로운 이미지를 만듭니다.
- 컬러 증강: 이미지의 색조, 채도, 명도 등을 조절하여 새로운 이미지를 만듭니다.
이 외에도 다양한 증강 기법이 있으며, 문제에 따라 적합한 증강 기법을 선택하는 것이 중요합니다.
증강 기법은 모델이 학습하는 동안 이미지가 다양한 변형을 겪게 하므로, 모델의 일반화 성능을 향상시킬 수 있습니다.
그러나 증강 기법을 지나치게 사용하면 모델이 오버피팅(Overfitting)되기 쉬우므로 적절한 비율로 사용해야 합니다.
[Code]: random_crop
위 코드는 TensorFlow를 사용하여 저해상도 이미지(lowres_img)에서 무작위로 잘라낸 작은 이미지(lowres_crop)를 만드는 코드입니다. 이를 통해 딥러닝 모델을 학습할 때 입력 이미지와 출력 이미지 사이의 차이를 학습시킬 수 있습니다.
먼저, hr_crop_size는 고해상도 이미지(highres_img)에서 잘라내려는 크기입니다. // 연산자는 나누기 후 소수점 이하를 버리는 정수 나누기를 수행합니다. 따라서 lowres_crop_size는 hr_crop_size를 scale로 나눈 후 버림한 값입니다. 예를 들어, hr_crop_size가 96이고 scale이 4이면, lowres_crop_size는 24가 됩니다.
그 다음, lowres_img_shape는 lowres_img의 높이와 너비를 포함하는 1D Tensor입니다. tf.shape(lowres_img)는 lowres_img의 형상(shape)을 반환하는 TensorFlow 연산입니다. [:2]는 높이와 너비만 선택하라는 의미입니다.
그 후, lowres_width와 lowres_height는 lowres_img에서 무작위로 선택한 x, y 좌표입니다. tf.random.uniform() 함수를 사용하여 무작위 값을 생성합니다. 이 함수는 지정된 형태(shape)로 균등 분포의 무작위 값을 생성합니다. shape 인수는 생성할 텐서의 형태를 지정합니다. maxval은 생성 가능한 값 중 최대값을 지정합니다. 여기서 maxval은 lowres_img_shape에서 lowres_crop_size를 뺀 값입니다. 이렇게 하면 lowres_crop이 이미지 바깥으로 나가지 않도록 보장할 수 있습니다. 마지막으로 dtype은 생성할 값의 데이터 유형을 지정합니다. 이 경우 tf.int32로 지정합니다.
따라서 lowres_width와 lowres_height는 lowres_crop_size보다 작거나 같은 값으로 생성됩니다. 이 값은 lowres_img에서 임의로 선택한 작은 이미지를 나타내는 왼쪽 상단 모서리의 좌표입니다. 이 좌표와 lowres_crop_size를 사용하여 lowres_img에서 lowres_crop을 자르면 됩니다.
'Deep Learning with Python' 카테고리의 다른 글
| Train, Test and Validation 구분: take() & skip() (0) | 2023.04.10 |
|---|---|
| TensorFlow with 모델 학습 과정 by GPU (0) | 2023.04.08 |
| 13_케라스 합성곱 층 (0) | 2022.08.17 |
| 12_합성곱(CNN) 신경망의 구성요소 (0) | 2022.08.16 |