> For the complete documentation index, see [llms.txt](https://docs.roboflow.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roboflow.com/roboflow/roboflow-ko/datasets/dataset-versions/image-preprocessing.md).

# 이미지 전처리

전처리는 데이터셋이 표준 형식(예: 모든 이미지가 동일한 크기)으로 유지되도록 합니다. 이 단계는 모델을 학습하기 전에 데이터셋의 일관성을 보장하는 데 필수적입니다.

전처리는 Train, Valid, 및 Test 세트의 모든 이미지에 적용됩니다(반면 [Augmentations](/roboflow/roboflow-ko/datasets/dataset-versions/image-augmentation.md)은 Train 세트에만 적용됩니다).

Roboflow 플랫폼은 다음과 같은 전처리 옵션을 제공합니다:

* Auto-Orient
* Resize
* Grayscale
* Auto-Adjust Contrast
* Isolate Objects
* Static Crop
* Tile
* Modify Classes
* Filter Null
* Filter by Tag

각 옵션은 아래에 설명되어 있습니다.

### Auto-Orient

Auto-orient는 이미지에서 EXIF 데이터를 제거하여, 디스크에 저장된 방식과 동일하게 표시되도록 합니다.

EXIF 데이터는 주어진 이미지의 방향을 결정합니다. 애플리케이션(예: Mac의 Preview)은 이 데이터를 사용해, 디스크에 저장된 방향과 다르더라도 이미지를 특정 방향으로 표시합니다.

* Roboflow는 기본적으로 이 기능을 켠 상태로 두고, 추론 시 이미지가 모델에 어떻게 입력되는지 확인할 것을 권장합니다.
* 이미지를 auto-orient해야 하는지 여부에 대해 더 자세히 알아보고 싶다면, [블로그를 확인해 보세요](https://blog.roboflow.com/exif-auto-orientation/).

### Resize

Resize는 이미지 크기를 변경하고, 필요에 따라 원하는 치수로 스케일 조정합니다. 주석은 비례적으로 조정됩니다(아래의 “fill” 경우는 제외).

현재는 축소만 지원합니다. 어떤 resize 옵션이 사용 사례에 가장 적합한지에 대한 [가이드도 제공합니다](https://blog.roboflow.com/you-might-be-resizing-your-images-incorrectly/).

* **Stretch to:** 이미지를 원하는 픽셀 단위 치수로 늘립니다. 주석은 비례적으로 스케일 조정됩니다. 이미지는 정사각형이 되며 왜곡되지만, 원본 이미지 데이터는 손실되지 않습니다.
* **Fill (with center crop) in:** 생성된 이미지는 원하는 출력 치수의 중앙 크롭입니다. 예를 들어 원본 이미지가 2600x2080이고 resize 옵션이 640x640으로 설정되어 있으면, 출력 resize는 원본 이미지의 중앙 640x640이 됩니다. 종횡비는 유지되지만, 원본 이미지 데이터는 손실됩니다.
* **Fit within:** 원본 이미지의 종횡비를 유지하면서 원본 치수가 출력 이미지의 치수에 맞게 스케일 조정됩니다. 예를 들어 원본 이미지가 2600x2080이고 resize 옵션이 640x640으로 설정되어 있으면, 더 긴 치수(2600)는 640으로 스케일되고 다른 치수(2080)는 약 512픽셀로 스케일됩니다. 이미지의 종횡비와 원본 데이터는 유지되지만, 정사각형은 아닙니다.
* **Fit (reflect edges) in:** 원본 이미지의 종횡비를 유지하면서 원본 치수가 출력 이미지의 치수에 맞게 스케일 조정되고, 새로 생성된 패딩은 원본 이미지의 반사본입니다. 예를 들어 원본 이미지가 2600x2080이고 resize 옵션이 416x416으로 설정되어 있으면, 더 긴 치수(2600)는 416으로 스케일되고 다른 치수(2080)는 약 335.48픽셀로 스케일됩니다. 남는 픽셀 영역(416-335.48, 즉 80.52픽셀)은 원본 이미지의 반사된 픽셀입니다. 특히 Roboflow는 기본적으로 주석도 반사합니다. 이미지는 정사각형이며 패딩이 추가되고, 종횡비와 원본 데이터가 유지됩니다.
* **Fit (black edges) in:** 원본 이미지의 종횡비를 유지하면서 원본 치수가 출력 이미지의 치수에 맞게 스케일 조정되고, 새로 생성된 패딩은 검은색 영역입니다. 예를 들어 원본 이미지가 2600x2080이고 resize 옵션이 416x416으로 설정되어 있으면, 더 긴 치수(2600)는 416으로 스케일되고 다른 치수(2080)는 약 335.48픽셀로 스케일됩니다. 남는 픽셀 영역(416-335.48, 즉 80.52픽셀)은 검은색 픽셀입니다. 이미지는 정사각형이며 검은색 패딩이 추가되고, 종횡비와 원본 데이터가 유지됩니다.
* **Fit (white edges) in:** 원본 이미지의 종횡비를 유지하면서 원본 치수가 출력 이미지의 치수에 맞게 스케일 조정되고, 새로 생성된 패딩은 흰색 영역입니다. 예를 들어 원본 이미지가 2600x2080이고 resize 옵션이 416x416으로 설정되어 있으면, 더 긴 치수(2600)는 416으로 스케일되고 다른 치수(2080)는 약 335.48픽셀로 스케일됩니다. 남는 픽셀 영역(416-335.48, 즉 80.52픽셀)은 흰색 픽셀입니다. 이미지는 정사각형이며 흰색 패딩이 추가되고, 종횡비와 원본 데이터가 유지됩니다.

### Grayscale

RGB 채널이 있는 이미지를 단일 grayscale 채널의 이미지로 변환하여 메모리를 절약할 수 있습니다. 각 grayscale 픽셀의 값은 해당 red, green, blue 픽셀의 가중합으로 계산됩니다: Y = 0.2125 R + 0.7154 G + 0.0721 B.

이 가중치는 동일한 가중치보다 빨강, 초록, 파랑에 대한 인간의 인식을 더 잘 반영하기 때문에 CRT phosphor에서 사용됩니다. (출처: [Scikit-Image](https://scikit-image.org/docs/dev/auto_examples/color_exposure/plot_rgb_to_gray.html).)

### Auto-Adjust Contrast

대비가 낮은 이미지를 향상시킵니다. 우리는 [대비를 전처리 단계로 사용할지 여부를 살펴보았습니다](https://blog.roboflow.com/when-to-use-contrast-as-a-preprocessing-step/).

* **Contrast Stretching**: 이미지는 2번째와 98번째 백분위수 사이에 해당하는 모든 강도를 포함하도록 재스케일됩니다. [더 보기](http://homepages.inf.ed.ac.uk/rbf/HIPR2/stretch.htm).
* **Histogram Equalization**: 이미지에서 “가장 자주 나타나는 강도 값들을 퍼뜨립니다.” 평준화된 이미지는 대략 균일한 분포를 가지며, 모든 색상의 픽셀이 대체로 동일한 비율로 표현됩니다. [더 보기](https://en.wikipedia.org/wiki/Histogram_equalization).
* **Adaptive Equalization**: Contrast Limited Adaptive Histogram Equalization(CLAHE). 이미지의 서로 다른 타일 영역에서 계산된 히스토그램을 사용하는 국소 대비 향상 알고리즘입니다. 따라서 이미지의 대부분보다 더 어둡거나 밝은 영역에서도 국소적인 디테일을 향상시킬 수 있습니다. (출처: [Scikit-Image](https://scikit-image.org/docs/dev/api/skimage.exposure.html#skimage.exposure.equalize_adapthist).)

## 고급 전처리 기능

### Isolate Objects

Isolate Objects 변환은 각 bounding box를 잘라 개별 이미지로 추출합니다. 이 단계는 Object Detection 데이터셋을 Classification 데이터셋으로 변환합니다.

데이터셋의 여러 클래스가 서로 유사한 경우, 두 개의 모델을 순차적으로 사용하는 것이 일반적입니다. 첫 번째 모델(Object Detection)은 객체를 찾고, 두 번째 모델(Classification)은 그 객체가 무엇인지 식별합니다. Isolate Objects 변환은 두 번째 모델 학습에 필요한 데이터셋을 만드는 데 유용합니다.

### Static Crop

![Static Crop 기능과 예시 출력입니다.](/files/c17e235a038f45d02cc3134a37b036ed95f738f5)

### Tile

Tile은 작은 객체를 감지할 때 도움이 될 수 있습니다(특히 항공 이미지나 microscopy 같은 상황에서). 기본 설정은 2x2 tiling이지만, 필요에 맞게 조정할 수 있습니다. Tile은 *전에* 전처리 파이프라인에서 resize가 수행됩니다.

![tiling 도구와 출력의 미리보기(“grid”로 표시됨)입니다.](/files/40bcd16f96702ec1475cae14a116fa884460d4dd)

### Modify Classes

데이터셋의 새 버전을 생성할 때 특정 클래스를 제외하거나 클래스를 재매핑(이름 변경)하는 데 사용하는 전처리 도구입니다. 이러한 변경은 생성하는 버전에만 적용됩니다. 기본 데이터셋에는 변경이 적용되지 않습니다.

!["Apple leaf" 클래스를 제외합니다.](/files/8bd2094f07fdbfc67a7a0133df8f091ce383c001)

!["scratches" 클래스를 "scratch"로 재매핑합니다.](/files/04478ea4dddb5e89346a64738030c48821736853)

### Filter Null

Filter Null 변환을 사용하면 사용자가 데이터셋 내 이미지의 일정 비율이 주석 처리되도록 요구할 수 있습니다. null annotation으로 표시된 이미지, 또는 Modify Classes 도구를 적용한 후 "unannotated"로 표시된 이미지만 Filter Null을 사용할 때 영향을 받습니다.

이 변환은 데이터셋의 상당 부분에 관심 객체가 포함되어 있지 않은 경우에 유용합니다.

![Filter Null 전처리 단계를 적용하는 중입니다.](/files/5c9e479b4616e30933f2a2f6dc18ac5ce2ce8f0b)

{% hint style="warning" %}
이 도구를 사용하기 전에 데이터셋의 모든 이미지가 올바르게 주석 처리되었는지, 적절한 이미지를 null annotation으로 지정했는지, 그리고/또는 불필요한 클래스를 제외했는지 확인하세요.
{% endhint %}

{% hint style="info" %}
[Missing Annotations와 Null Annotations의 차이](https://blog.roboflow.com/missing-and-null-image-annotations/)

"Missing Annotations"는 이미지가 주석 처리되지 않았을 때 발생합니다(이미지를 주석 없이 두면 학습된 데이터셋의 성능에 문제가 생길 수 있으며, 학습 실패로 이어질 수 있습니다). Null annotations는 *아무것도* 해당 이미지 안에 존재하지 않을 때만 적용해야 하며, 모델이 감지하기를 원하는 대상이 없을 때 사용해야 합니다.
{% endhint %}

### Filter by Tag

Filter by Tag 변환을 사용하면 어떤 이미지가 버전에 포함되거나 제외되어야 하는지, [Tags](https://docs.roboflow.com/datasets/add-tags-to-images) 가 어떤 항목에 적용되었는지에 따라 필터링할 수 있습니다. 이 변환은 새 데이터 하위 집합으로 모델을 학습하거나 원치 않는 이미지를 학습에서 제외할 때 유용합니다.

각 Tag에는 세 가지 옵션이 있습니다:

* **Require:** Required tags가 있는 이미지만 버전에 포함됩니다.
* **Exclude**: Excluded tags가 있는 이미지는 버전에 포함되지 않습니다.
* **Allow:** Allowed tags가 있는 이미지는 Exclude 및 Require 규칙에 따라 버전에 포함됩니다.

<figure><img src="/files/0307e342fc935cf1e57f8b8d700cc67ebaa9fa2a" alt=""><figcaption><p>이 예시에서 생성된 Version에는 <code>do-not-include</code> 태그가 없는 이미지만 포함됩니다.</p></figcaption></figure>
