K-ν΄λ κ΅μ°¨ κ²μ¦μ ν΅ν Ultralytics
μκ°
μ΄ μ’ ν© κ°μ΄λλ Ultralytics μμ½μμ€ν λ΄μμ κ°μ²΄ κ°μ§ λ°μ΄ν° μΈνΈμ λν K-Fold κ΅μ°¨ κ²μ¦μ ꡬννλ λ°©λ²μ μ€λͺ ν©λλ€. YOLO κ°μ§ νμκ³Ό sklearn, pandas, PyYamlκ³Ό κ°μ μ£Όμ Python λΌμ΄λΈλ¬λ¦¬λ₯Ό νμ©νμ¬ νμν μ€μ , νΉμ§ λ²‘ν° μμ± νλ‘μΈμ€, K-Fold λ°μ΄ν° μΈνΈ λΆν μ€νμ μλ΄ν©λλ€.
νλ‘μ νΈμ κ³ΌμΌ κ°μ§ λ°μ΄ν° μΈνΈκ° ν¬ν¨λλ μ¬μ©μ μ§μ λ°μ΄ν° μμ€κ° ν¬ν¨λλ , μ΄ νν 리μΌμ K-λ°° κ΅μ°¨ κ²μ¦μ μ΄ν΄νκ³ μ μ©νμ¬ νλ‘μ νΈμ μ λ’°μ±κ³Ό κ²¬κ³ μ±μ κ°ννλ λ° λμμ μ£Όλ κ²μ λͺ©νλ‘ ν©λλ€. λ¨Έμ λ¬λ λͺ¨λΈμ μ μ©ν©λλ€. μ μ²νλ λμ k=5
μ κΈ°λ₯Ό μ¬μ©νμ§λ§, μ΅μ μ μ κΈ° μλ λ°μ΄ν° μΈνΈμ νλ‘μ νΈμ νΉμ±μ λ°λΌ λ¬λΌμ§ μ μλ€λ μ μ μ μνμΈμ.
λ μ΄μ κ³ λ―Όν νμ μμ΄ λ°λ‘ μμνκ² μ΅λλ€!
μ€μ
-
μ£Όμμ YOLO νμ§ νμμΌλ‘ μμ±ν΄μΌ ν©λλ€.
-
μ΄ κ°μ΄λμμλ μ΄λ Έν μ΄μ νμΌμ λ‘컬μμ μ¬μ©ν μ μλ€κ³ κ°μ ν©λλ€.
-
λ°λͺ¨μμλ κ³ΌμΌ κ°μ§ λ°μ΄ν° μΈνΈλ₯Ό μ¬μ©ν©λλ€.
- μ΄ λ°μ΄ν° μΈνΈμλ μ΄ 8479κ°μ μ΄λ―Έμ§κ° ν¬ν¨λμ΄ μμ΅λλ€.
- μ¬κΈ°μλ 6κ°μ ν΄λμ€ λ μ΄λΈμ΄ ν¬ν¨λλ©°, κ° λ μ΄λΈμ μ΄ μΈμ€ν΄μ€ μλ μλμ λμ΄λμ΄ μμ΅λλ€.
ν΄λμ€ λ μ΄λΈ | μΈμ€ν΄μ€ μ |
---|---|
Apple | 7049 |
ν¬λ | 7202 |
νμΈμ ν | 1613 |
μ€λ μ§ | 15549 |
λ°λλ | 3536 |
μλ° | 1976 |
-
νμν Python ν¨ν€μ§κ° ν¬ν¨λ©λλ€:
ultralytics
sklearn
pandas
pyyaml
-
μ΄ νν 리μΌμ λ€μμμ μλν©λλ€.
k=5
μ μ΅λλ€. κ·Έλ¬λ νΉμ λ°μ΄ν° μ§ν©μ κ°μ₯ μ ν©ν μ κΈ° μλ₯Ό κ²°μ ν΄μΌ ν©λλ€. -
μλ‘μ΄ Python κ°μ νκ²½(
venv
)λ₯Ό νλ‘μ νΈμ μΆκ°νκ³ νμ±νν©λλ€. μ¬μ©pip
(λλ μ νΈνλ ν¨ν€μ§ κ΄λ¦¬μ)λ₯Ό ν΄λ¦νμ¬ μ€μΉν©λλ€:- Ultralytics λΌμ΄λΈλ¬λ¦¬:
pip install -U ultralytics
. λλ 곡μ repo. - Scikit-learn, νλ€, PyYAML:
pip install -U scikit-learn pandas pyyaml
.
- Ultralytics λΌμ΄λΈλ¬λ¦¬:
-
μ£Όμμ΄ YOLO κ°μ§ νμμΈμ§ νμΈν©λλ€.
- μ΄ νν 리μΌμ κ²½μ° λͺ¨λ μ£Όμ νμΌμ
Fruit-Detection/labels
λλ ν°λ¦¬λ‘ μ΄λν©λλ€.
- μ΄ νν 리μΌμ κ²½μ° λͺ¨λ μ£Όμ νμΌμ
κ°μ²΄ κ°μ§ λ°μ΄ν°μΈνΈλ₯Ό μν νΉμ§ λ²‘ν° μμ±νκΈ°
-
λ¨Όμ μ
example.py
Python νμΌλ‘ μ΄λνμ¬ μλ λ¨κ³λ₯Ό μννμΈμ. -
λ°μ΄ν° μΈνΈμ λν λͺ¨λ λΌλ²¨ νμΌμ κ²μν©λλ€.
-
μ΄μ λ°μ΄ν° μΈνΈ YAML νμΌμ λ΄μ©μ μ½κ³ ν΄λμ€ λ μ΄λΈμ μΈλ±μ€λ₯Ό μΆμΆν©λλ€.
-
λΉμ΄ μλ
pandas
DataFrame. -
μ£Όμ νμΌμ μλ κ° ν΄λμ€ λ μ΄λΈμ μΈμ€ν΄μ€λ₯Ό κ³μ°ν©λλ€.
from collections import Counter for label in labels: lbl_counter = Counter() with open(label, "r") as lf: lines = lf.readlines() for line in lines: # classes for YOLO label uses integer at first position of each line lbl_counter[int(line.split(" ")[0])] += 1 labels_df.loc[label.stem] = lbl_counter labels_df = labels_df.fillna(0.0) # replace `nan` values with `0.0`
-
λ€μμ μ±μμ§ λ°μ΄ν°νλ μμ μν 보기μ λλ€:
0 1 2 3 4 5 '0000a16e4b057580_jpg.rf.00ab48988370f64f5ca8ea4...' 0.0 0.0 0.0 0.0 0.0 7.0 '0000a16e4b057580_jpg.rf.7e6dce029fb67f01eb19aa7...' 0.0 0.0 0.0 0.0 0.0 7.0 '0000a16e4b057580_jpg.rf.bc4d31cdcbe229dd022957a...' 0.0 0.0 0.0 0.0 0.0 7.0 '00020ebf74c4881c_jpg.rf.508192a0a97aa6c4a3b6882...' 0.0 0.0 0.0 1.0 0.0 0.0 '00020ebf74c4881c_jpg.rf.5af192a2254c8ecc4188a25...' 0.0 0.0 0.0 1.0 0.0 0.0 ... ... ... ... ... ... ... 'ff4cd45896de38be_jpg.rf.c4b5e967ca10c7ced3b9e97...' 0.0 0.0 0.0 0.0 0.0 2.0 'ff4cd45896de38be_jpg.rf.ea4c1d37d2884b3e3cbce08...' 0.0 0.0 0.0 0.0 0.0 2.0 'ff5fd9c3c624b7dc_jpg.rf.bb519feaa36fc4bf630a033...' 1.0 0.0 0.0 0.0 0.0 0.0 'ff5fd9c3c624b7dc_jpg.rf.f0751c9c3aa4519ea3c9d6a...' 1.0 0.0 0.0 0.0 0.0 0.0 'fffe28b31f2a70d4_jpg.rf.7ea16bd637ba0711c53b540...' 0.0 6.0 0.0 0.0 0.0 0.0
νμ κ°κ° λ°μ΄ν° μΈνΈμ μ΄λ―Έμ§μ ν΄λΉνλ λΌλ²¨ νμΌμ μμΈμ μμ±νκ³ μ΄μ ν΄λμ€ λΌλ²¨ μΈλ±μ€μ ν΄λΉν©λλ€. κ° νμ λ°μ΄ν° μΈνΈμ μ‘΄μ¬νλ κ° ν΄λμ€ λΌλ²¨μ κ°μκ° ν¬ν¨λ μμ¬ νΉμ§ 벑ν°λ₯Ό λνλ λλ€. μ΄ λ°μ΄ν° ꡬ쑰λ₯Ό μ¬μ©νλ©΄ κ°μ²΄ κ°μ§ λ°μ΄ν° μΈνΈμ K-Fold κ΅μ°¨ κ²μ¦μ μ μ©ν μ μμ΅λλ€.
K-ν΄λ λ°μ΄ν° μΈνΈ λΆν
-
μ΄μ μ°λ¦¬λ
KFold
ν΄λμ€μμsklearn.model_selection
λ₯Ό μμ±νλ €λ©΄k
λ°μ΄ν° μ§ν©μ λΆν ν©λλ€.- μ€μ:
- μ€μ
shuffle=True
λ₯Ό μ¬μ©νλ©΄ μ€νλ¦Ώμ ν΄λμ€λ₯Ό 무μμλ‘ λΆλ°°ν μ μμ΅λλ€. - μ€μ μΌλ‘
random_state=M
μ΄λM
λ₯Ό μ μλ‘ μ ννλ©΄ λ°λ³΅ κ°λ₯ν κ²°κ³Όλ₯Ό μ»μ μ μμ΅λλ€.
- μ€μ
- μ€μ:
-
μ΄μ λ°μ΄ν° μΈνΈκ° λ€μκ³Ό κ°μ΄ λΆν λμμ΅λλ€.
k
ν΄λμλ κ°κ°train
그리κ³val
μΈλ±μ€. μ΄λ¬ν κ²°κ³Όλ₯Ό λ³΄λ€ λͺ ννκ² νμνκΈ° μν΄ λ°μ΄ν° νλ μμ ꡬμ±ν©λλ€. -
μ΄μ κ° ν΄λμ λν ν΄λμ€ λ μ΄λΈμ λΆν¬λ₯Ό λ€μμ μ‘΄μ¬νλ ν΄λμ€μ λΉμ¨λ‘ κ³μ°ν©λλ€.
val
μ μλ μ¬λλ€μκ²train
.fold_lbl_distrb = pd.DataFrame(index=folds, columns=cls_idx) for n, (train_indices, val_indices) in enumerate(kfolds, start=1): train_totals = labels_df.iloc[train_indices].sum() val_totals = labels_df.iloc[val_indices].sum() # To avoid division by zero, we add a small value (1E-7) to the denominator ratio = val_totals / (train_totals + 1e-7) fold_lbl_distrb.loc[f"split_{n}"] = ratio
μ΄μμ μΈ μλ리μ€λ λͺ¨λ ν΄λμ€ λΉμ¨μ΄ κ° λΆν λ° ν΄λμ€ κ°μ ν©λ¦¬μ μΌλ‘ λΉμ·ν΄μ§λ κ²μ λλ€. κ·Έλ¬λ μ΄λ λ°μ΄ν° μ§ν©μ νΉμ±μ λ°λΌ λ¬λΌμ§ μ μμ΅λλ€.
-
λ€μμΌλ‘, κ° λΆν μ λν λλ ν°λ¦¬μ λ°μ΄ν° μΈνΈ YAML νμΌμ μμ±ν©λλ€.
import datetime supported_extensions = [".jpg", ".jpeg", ".png"] # Initialize an empty list to store image file paths images = [] # Loop through supported extensions and gather image files for ext in supported_extensions: images.extend(sorted((dataset_path / "images").rglob(f"*{ext}"))) # Create the necessary directories and dataset YAML files (unchanged) save_path = Path(dataset_path / f"{datetime.date.today().isoformat()}_{ksplit}-Fold_Cross-val") save_path.mkdir(parents=True, exist_ok=True) ds_yamls = [] for split in folds_df.columns: # Create directories split_dir = save_path / split split_dir.mkdir(parents=True, exist_ok=True) (split_dir / "train" / "images").mkdir(parents=True, exist_ok=True) (split_dir / "train" / "labels").mkdir(parents=True, exist_ok=True) (split_dir / "val" / "images").mkdir(parents=True, exist_ok=True) (split_dir / "val" / "labels").mkdir(parents=True, exist_ok=True) # Create dataset YAML files dataset_yaml = split_dir / f"{split}_dataset.yaml" ds_yamls.append(dataset_yaml) with open(dataset_yaml, "w") as ds_y: yaml.safe_dump( { "path": split_dir.as_posix(), "train": "train", "val": "val", "names": classes, }, ds_y, )
-
λ§μ§λ§μΌλ‘ μ΄λ―Έμ§μ λ μ΄λΈμ κ° λΆν μ ν΄λΉ λλ ν 리('train' λλ 'val')μ 볡μ¬ν©λλ€.
- μ°Έκ³ : μ΄ μ½λ λΆλΆμ νμν μκ°μ λ°μ΄ν° μΈνΈμ ν¬κΈ°μ μμ€ν νλμ¨μ΄μ λ°λΌ λ¬λΌμ§λλ€.
import shutil for image, label in zip(images, labels): for split, k_split in folds_df.loc[image.stem].items(): # Destination directory img_to_path = save_path / split / k_split / "images" lbl_to_path = save_path / split / k_split / "labels" # Copy image and label files to new directory (SamefileError if file already exists) shutil.copy(image, img_to_path / image.name) shutil.copy(label, lbl_to_path / label.name)
κΈ°λ‘ μ μ₯(μ ν μ¬ν)
μ ν μ¬νμΌλ‘ K-Fold λΆν λ° λ μ΄λΈ λ°°ν¬ λ°μ΄ν°νλ μμ λ μ½λλ₯Ό CSV νμΌλ‘ μ μ₯νμ¬ λμ€μ μ°Έμ‘°ν μ μμ΅λλ€.
folds_df.to_csv(save_path / "kfold_datasplit.csv")
fold_lbl_distrb.to_csv(save_path / "kfold_label_distribution.csv")
K-Fold λ°μ΄ν° λΆν μ μ¬μ©νμ¬ YOLO κ΅μ‘
-
λ¨Όμ YOLO λͺ¨λΈμ λ‘λν©λλ€.
-
κ·Έλ° λ€μ λ°μ΄ν° μΈνΈ YAML νμΌμ λ°λ³΅νμ¬ νμ΅μ μ€νν©λλ€. κ²°κ³Όλ μ§μ λ λλ ν°λ¦¬μ μ μ₯λ©λλ€.
project
그리κ³name
μΈμλ₯Ό μ¬μ©ν μ μμ΅λλ€. κΈ°λ³Έμ μΌλ‘ μ΄ λλ ν°λ¦¬λ 'exp/runs#'μ΄λ©°, μ¬κΈ°μ #μ μ μ μΈλ±μ€μ λλ€.results = {} # Define your additional arguments here batch = 16 project = "kfold_demo" epochs = 100 for k in range(ksplit): dataset_yaml = ds_yamls[k] model = YOLO(weights_path, task="detect") model.train(data=dataset_yaml, epochs=epochs, batch=batch, project=project) # include any train arguments results[k] = model.metrics # save output metrics for further analysis
κ²°λ‘
μ΄ κ°μ΄λμμλ YOLO κ°μ²΄ κ°μ§ λͺ¨λΈμ νλ ¨νκΈ° μν΄ K-Fold κ΅μ°¨ κ²μ¦μ μ¬μ©νλ νλ‘μΈμ€λ₯Ό μ΄ν΄λ΄€μ΅λλ€. λ°μ΄ν° μΈνΈλ₯Ό Kκ°μ νν°μ μΌλ‘ λΆν νμ¬ μ¬λ¬ ν΄λμ κ±Έμ³ κ· ν μ‘ν ν΄λμ€ λΆν¬λ₯Ό 보μ₯νλ λ°©λ²μ λ°°μ μ΅λλ€.
λν λ°μ΄ν° λΆν κ³Ό μ΄λ¬ν λΆν μ λν λ μ΄λΈ λΆν¬λ₯Ό μκ°ννκΈ° μν΄ λ³΄κ³ μ λ°μ΄ν°νλ μμ λ§λλ μ μ°¨λ₯Ό μ΄ν΄λ΄μΌλ‘μ¨ νμ΅ λ° κ²μ¦ μΈνΈμ ꡬ쑰μ λν λͺ νν μΈμ¬μ΄νΈλ₯Ό μ»μ μ μμμ΅λλ€.
μ ν μ¬νμΌλ‘ λμ€μ μ°Έμ‘°ν μ μλλ‘ κΈ°λ‘μ μ μ₯νλλ°, μ΄λ λκ·λͺ¨ νλ‘μ νΈλ λͺ¨λΈ μ±λ₯ λ¬Έμ λ₯Ό ν΄κ²°ν λ νΉν μ μ©ν μ μμ΅λλ€.
λ§μ§λ§μΌλ‘, κ° λΆν μ λ°λ³΅νμ¬ μ€μ λͺ¨λΈ νμ΅μ ꡬννκ³ μΆκ° λΆμ λ° λΉκ΅λ₯Ό μν΄ νμ΅ κ²°κ³Όλ₯Ό μ μ₯νμ΅λλ€.
μ΄ K-Fold κ΅μ°¨ κ²μ¦ κΈ°μ μ μ¬μ© κ°λ₯ν λ°μ΄ν°λ₯Ό μ΅λν νμ©νλ κ°λ ₯ν λ°©λ²μ΄λ©°, λ€μν λ°μ΄ν° νμ μ§ν©μμ λͺ¨λΈ μ±λ₯μ μ λ’°ν μ μκ³ μΌκ΄μ± μκ² μ μ§νλ λ° λμμ΄ λ©λλ€. κ·Έ κ²°κ³Ό νΉμ λ°μ΄ν° ν¨ν΄μ κ³Όλνκ² λ§μΆ κ°λ₯μ±μ΄ μ μ λ³΄λ€ μΌλ°ν κ°λ₯νκ³ μ λ’°ν μ μλ λͺ¨λΈμ λ§λ€ μ μμ΅λλ€.
μ΄ κ°μ΄λμμλ YOLO μ μ¬μ©νμ§λ§, μ΄λ¬ν λ¨κ³λ λλΆλΆ λ€λ₯Έ λ¨Έμ λ¬λ λͺ¨λΈμλ μ μ©ν μ μμ΅λλ€. μ΄λ¬ν λ¨κ³λ₯Ό μ΄ν΄νλ©΄ μμ μ λ¨Έμ λ¬λ νλ‘μ νΈμ κ΅μ°¨ κ²μ¦μ ν¨κ³Όμ μΌλ‘ μ μ©ν μ μμ΅λλ€. ν볡ν μ½λ©!
μμ£Ό 묻λ μ§λ¬Έ
K-Fold κ΅μ°¨ κ²μ¦μ΄λ 무μμ΄λ©° κ°μ²΄ κ°μ§μ μ μ©ν μ΄μ λ 무μμΈκ°μ?
K-ν΄λ κ΅μ°¨ κ²μ¦μ λͺ¨λΈ μ±λ₯μ λ³΄λ€ μμ μ μΌλ‘ νκ°νκΈ° μν΄ λ°μ΄ν° μ§ν©μ 'k'κ°μ νμ μ§ν©(ν΄λ)μΌλ‘ λλμ΄ νκ°νλ κΈ°λ²μ λλ€. κ° ν΄λλ νλ ¨ λ° κ²μ¦ λ°μ΄ν°λ‘ μ¬μ©λ©λλ€. κ°μ²΄ κ°μ§μ λ§₯λ½μμ K-Fold κ΅μ°¨ κ²μ¦μ μ¬μ©νλ©΄ Ultralytics YOLO λͺ¨λΈμ μ±λ₯μ΄ κ°λ ₯νκ³ λ€μν λ°μ΄ν° λΆν μ κ±Έμ³ μΌλ°νν μ μμ΄ μ λ’°μ±μ ν₯μμν€λ λ° λμμ΄ λ©λλ€. Ultralytics YOLO μ μ¬μ©ν K-Fold κ΅μ°¨ μ ν¨μ± κ²μ¬ μ€μ μ λν μμΈν μ§μΉ¨μ Ultralytics μ μ¬μ©ν K-Fold κ΅μ°¨ μ ν¨μ± κ²μ¬λ₯Ό μ°Έμ‘°νμΈμ.
Ultralytics YOLO μ μ¬μ©νμ¬ K-Fold κ΅μ°¨ μ ν¨μ± κ²μ¬λ₯Ό ꡬννλ €λ©΄ μ΄λ»κ² ν΄μΌ νλμ?
K-Fold κ΅μ°¨ μ ν¨μ± κ²μ¬λ₯Ό ꡬννλ €λ©΄ Ultralytics YOLO , λ€μ λ¨κ³λ₯Ό λ°λΌμΌ ν©λλ€:
- μ£Όμμ΄ YOLO κ°μ§ νμμΈμ§ νμΈν©λλ€.
- λ€μκ³Ό κ°μ Python λΌμ΄λΈλ¬λ¦¬ μ¬μ©
sklearn
,pandas
λ°pyyaml
. - λ°μ΄ν° μΈνΈμμ νΉμ§ 벑ν°λ₯Ό μμ±ν©λλ€.
- λ€μμ μ¬μ©νμ¬ λ°μ΄ν° μ§ν©μ λΆν ν©λλ€.
KFold
μμsklearn.model_selection
. - κ° λΆν μ λν΄ YOLO λͺ¨λΈμ νμ΅μν΅λλ€.
μ’ ν©μ μΈ κ°μ΄λλ λ¬Έμμμ K-Fold λ°μ΄ν°μΈνΈ λΆν μΉμ μ μ°Έμ‘°νμΈμ.
물체 κ°μ§μ Ultralytics YOLO μ μ¬μ©ν΄μΌ νλ μ΄μ λ 무μμΈκ°μ?
Ultralytics YOLO λ λμ μ νλμ ν¨μ¨μ±μΌλ‘ μ΅μ²¨λ¨ μ€μκ° λ¬Όμ²΄ κ°μ§ κΈ°λ₯μ μ 곡ν©λλ€. νμ§, μΈλΆν, λΆλ₯ λ± λ€μν μ»΄ν¨ν° λΉμ μμ μ μ§μνλ λ€λͺ©μ κΈ°λ₯λ κ°μΆκ³ μμ΅λλ€. λν μ½λ μμ΄ λͺ¨λΈμ νλ ¨νκ³ λ°°ν¬ν μ μλλ‘ Ultralytics HUBμ κ°μ λꡬμ μννκ² ν΅ν©λ©λλ€. μμΈν λ΄μ©μ Ultralytics YOLO νμ΄μ§μμ μ΄μ κ³Ό κΈ°λ₯μ μ΄ν΄λ³΄μΈμ.
λ΄ μ£Όμμ΄ Ultralytics YOLO μ μ¬λ°λ₯Έ νμμΈμ§ νμΈνλ €λ©΄ μ΄λ»κ² ν΄μΌ νλμ?
μ£Όμμ YOLO κ°μ§ νμμ λ°λΌμΌ ν©λλ€. κ° μ£Όμ νμΌμλ μ΄λ―Έμ§μ κ²½κ³ μμ μ’νμ ν¨κ» κ°μ²΄ ν΄λμ€κ° λμ΄λμ΄μΌ ν©λλ€. YOLO νμμ κ°μ²΄ κ°μ§ λͺ¨λΈ νμ΅μ μν κ°μνλκ³ νμ€νλ λ°μ΄ν° μ²λ¦¬λ₯Ό 보μ₯ν©λλ€. μ¬λ°λ₯Έ μ£Όμ νμμ λν μμΈν λ΄μ©μ YOLO κ°μ§ νμ κ°μ΄λλ₯Ό μ°Έμ‘°νμΈμ.
κ³ΌμΌ κ°μ§ μ΄μΈμ μ¬μ©μ μ§μ λ°μ΄ν° μΈνΈμ K-Fold κ΅μ°¨ κ²μ¦μ μ¬μ©ν μ μλμ?
μ, μ£Όμμ΄ YOLO κ°μ§ νμμΈ κ²½μ° λͺ¨λ μ¬μ©μ μ§μ λ°μ΄ν° μΈνΈμ K-Fold κ΅μ°¨ μ ν¨μ± κ²μ¬λ₯Ό μ¬μ©ν μ μμ΅λλ€. λ°μ΄ν° μΈνΈ κ²½λ‘μ ν΄λμ€ λ μ΄λΈμ μ¬μ©μ μ μ λ°μ΄ν° μΈνΈμ λ§λ κ²μΌλ‘ λ°κΎΈλ©΄ λ©λλ€. μ΄λ¬ν μ μ°μ±μ ν΅ν΄ λͺ¨λ κ°μ²΄ κ°μ§ νλ‘μ νΈμμ K-Fold κ΅μ°¨ κ²μ¦μ μ¬μ©ν κ°λ ₯ν λͺ¨λΈ νκ°μ μ΄μ μ λ릴 μ μμ΅λλ€. μ€μ μμλ₯Ό λ³΄λ €λ©΄ νΉμ§ λ²‘ν° μμ±νκΈ° μΉμ μ μ°Έμ‘°νμΈμ.