μ½˜ν…μΈ λ‘œ κ±΄λ„ˆλ›°κΈ°

μΈμŠ€ν„΄μŠ€ μ„ΈλΆ„ν™” 데이터 μ„ΈνŠΈ κ°œμš”

μ§€μ›λ˜λŠ” 데이터 μ„ΈνŠΈ ν˜•μ‹

Ultralytics YOLO ν˜•μ‹

YOLO μ„ΈλΆ„ν™” λͺ¨λΈ ν•™μŠ΅μ— μ‚¬μš©λ˜λŠ” 데이터 μ„ΈνŠΈ λ ˆμ΄λΈ” ν˜•μ‹μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

  1. 이미지당 ν•˜λ‚˜μ˜ ν…μŠ€νŠΈ 파일: 데이터 μ„ΈνŠΈμ˜ 각 μ΄λ―Έμ§€μ—λŠ” 이미지 파일과 이름이 κ°™κ³  ν™•μž₯μžκ°€ ".txt"인 ν•΄λ‹Ή ν…μŠ€νŠΈ 파일이 μžˆμŠ΅λ‹ˆλ‹€.
  2. 객체당 ν•˜λ‚˜μ˜ ν–‰: ν…μŠ€νŠΈ 파일의 각 행은 μ΄λ―Έμ§€μ˜ 객체 μΈμŠ€ν„΄μŠ€ ν•˜λ‚˜μ— ν•΄λ‹Ήν•©λ‹ˆλ‹€.
  3. 행별 객체 정보: 각 ν–‰μ—λŠ” 객체 μΈμŠ€ν„΄μŠ€μ— λŒ€ν•œ λ‹€μŒ 정보가 ν¬ν•¨λ©λ‹ˆλ‹€:
    • 객체 클래슀 인덱슀: 객체의 클래슀λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ •μˆ˜(예: μ‚¬λžŒμ˜ 경우 0, μžλ™μ°¨μ˜ 경우 1 λ“±)μž…λ‹ˆλ‹€.
    • 개체 경계 μ’Œν‘œμž…λ‹ˆλ‹€: 마슀크 μ˜μ—­ μ£Όλ³€μ˜ 경계 μ’Œν‘œλ‘œ, 0μ—μ„œ 1 μ‚¬μ΄λ‘œ μ •κ·œν™”λ©λ‹ˆλ‹€.

μ„ΈλΆ„ν™” 데이터 μ„ΈνŠΈ νŒŒμΌμ—μ„œ 단일 ν–‰μ˜ ν˜•μ‹μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

<class-index> <x1> <y1> <x2> <y2> ... <xn> <yn>

이 ν˜•μ‹μž…λ‹ˆλ‹€, <class-index> λŠ” 객체에 λŒ€ν•œ 클래슀의 μΈλ±μŠ€μž…λ‹ˆλ‹€. <x1> <y1> <x2> <y2> ... <xn> <yn> λŠ” 객체의 μ„Έκ·Έλ¨Όν…Œμ΄μ…˜ 마슀크의 경계 μ’Œν‘œμž…λ‹ˆλ‹€. μ’Œν‘œλŠ” 곡백으둜 κ΅¬λΆ„λ©λ‹ˆλ‹€.

λ‹€μŒμ€ 3점 μ„Έκ·Έλ¨ΌνŠΈμ™€ 5점 μ„Έκ·Έλ¨ΌνŠΈλ‘œ κ΅¬μ„±λœ 두 개의 객체가 μžˆλŠ” 단일 이미지에 λŒ€ν•œ YOLO 데이터 μ„ΈνŠΈ ν˜•μ‹μ˜ μ˜ˆμž…λ‹ˆλ‹€.

0 0.681 0.485 0.670 0.487 0.676 0.487
1 0.504 0.000 0.501 0.004 0.498 0.004 0.493 0.010 0.492 0.0104

팁

  • 각 ν–‰μ˜ 길이가 같을 ν•„μš”λŠ” μ—†μŠ΅λ‹ˆλ‹€.
  • 각 μ„ΈλΆ„ν™” λ ˆμ΄λΈ”μ—λŠ” μ΅œμ†Œ XY 포인트 3점: <class-index> <x1> <y1> <x2> <y2> <x3> <y3>

데이터 μ„ΈνŠΈ YAML ν˜•μ‹

Ultralytics ν”„λ ˆμž„μ›Œν¬λŠ” 탐지 λͺ¨λΈ ν•™μŠ΅μ„ μœ„ν•œ 데이터 μ„ΈνŠΈ 및 λͺ¨λΈ ꡬ성을 μ •μ˜ν•˜κΈ° μœ„ν•΄ YAML 파일 ν˜•μ‹μ„ μ‚¬μš©ν•©λ‹ˆλ‹€. λ‹€μŒμ€ 탐지 데이터 μ„ΈνŠΈλ₯Ό μ •μ˜ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” YAML ν˜•μ‹μ˜ μ˜ˆμž…λ‹ˆλ‹€:

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../datasets/coco8-seg # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images
test: # test images (optional)

# Classes (80 COCO classes)
names:
    0: person
    1: bicycle
    2: car
    # ...
    77: teddy bear
    78: hair drier
    79: toothbrush

그리고 train 그리고 val ν•„λ“œλŠ” 각각 νŠΈλ ˆμ΄λ‹ 이미지와 μœ νš¨μ„± 검사 이미지가 ν¬ν•¨λœ λ””λ ‰ν„°λ¦¬μ˜ 경둜λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.

names λŠ” 클래슀 μ΄λ¦„μ˜ μ‚¬μ „μž…λ‹ˆλ‹€. μ΄λ¦„μ˜ μˆœμ„œλŠ” YOLO 데이터 μ„ΈνŠΈ 파일의 객체 클래슀 인덱슀 μˆœμ„œμ™€ μΌμΉ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

μ‚¬μš©λ²•

예

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n-seg.pt")  # load a pretrained model (recommended for training)

# Train the model
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)
# Start training from a pretrained *.pt model
yolo segment train data=coco8-seg.yaml model=yolo11n-seg.pt epochs=100 imgsz=640

μ§€μ›λ˜λŠ” 데이터 μ„ΈνŠΈ

μ§€μ›λ˜λŠ” 데이터 μ„ΈνŠΈ

  • COCO: 물체 감지, μ„ΈλΆ„ν™” 및 μΊ‘μ…˜μ„ μœ„ν•œ 포괄적인 데이터 μ„ΈνŠΈλ‘œ, λ‹€μ–‘ν•œ μΉ΄ν…Œκ³ λ¦¬μ— 걸쳐 200만 개 μ΄μƒμ˜ 라벨이 μ§€μ •λœ 이미지가 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
  • COCO8-seg: μ„ΈλΆ„ν™” λͺ¨λΈ ν•™μŠ΅μ˜ λΉ λ₯Έ ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•΄ μ„€κ³„λœ COCO의 μ»΄νŒ©νŠΈν•œ 8개의 이미지 ν•˜μœ„ μ§‘ν•©μœΌλ‘œ, CI 검사 및 μ›Œν¬ν”Œλ‘œ 검증에 μ΄μƒμ μž…λ‹ˆλ‹€. ultralytics 리포지토리에 μ €μž₯ν•©λ‹ˆλ‹€.
  • COCO128-seg: μ„ΈλΆ„ν™” 주석이 μžˆλŠ” 128개의 COCO 이미지 ν•˜μœ„ 집합을 ν¬ν•¨ν•˜λŠ” μΈμŠ€ν„΄μŠ€ μ„ΈλΆ„ν™” μž‘μ—…μ„ μœ„ν•œ 더 μž‘μ€ 데이터 μ„ΈνŠΈμž…λ‹ˆλ‹€.
  • Carparts-seg: μžλ™μ°¨ λΆ€ν’ˆμ˜ 세뢄화에 μ΄ˆμ μ„ 맞좘 μ „λ¬Έ 데이터 μ„ΈνŠΈλ‘œ, μžλ™μ°¨ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μ΄μƒμ μž…λ‹ˆλ‹€. μ—¬κΈ°μ—λŠ” κ°œλ³„ μžλ™μ°¨ λΆ€ν’ˆμ— λŒ€ν•œ μžμ„Έν•œ 주석과 ν•¨κ»˜ λ‹€μ–‘ν•œ μ°¨λŸ‰μ΄ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
  • κ· μ—΄ μ„Έκ·Έλ¨ΌνŠΈ: λ‹€μ–‘ν•œ ν‘œλ©΄μ˜ 균열을 μ„ΈλΆ„ν™”ν•˜κΈ° μœ„ν•΄ λ§žμΆ€ν™”λœ 데이터 μ„ΈνŠΈμž…λ‹ˆλ‹€. 인프라 μœ μ§€λ³΄μˆ˜ 및 ν’ˆμ§ˆ 관리에 ν•„μˆ˜μ μΈ 이 λ°μ΄ν„°λŠ” ꡬ쑰적 약점을 μ‹λ³„ν•˜κΈ° μœ„ν•œ λͺ¨λΈ ν•™μŠ΅μ— ν•„μš”ν•œ μƒμ„Έν•œ 이미지λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.
  • νŒ¨ν‚€μ§€ μ„Έκ·Έλ¨ΌνŠΈ: λ‹€μ–‘ν•œ μœ ν˜•μ˜ 포μž₯μž¬μ™€ λͺ¨μ–‘을 μ„ΈλΆ„ν™”ν•˜κΈ° μœ„ν•œ 데이터 μ„ΈνŠΈμž…λ‹ˆλ‹€. λ¬Όλ₯˜ 및 μ°½κ³  μžλ™ν™”μ— 특히 μœ μš©ν•˜λ©°, νŒ¨ν‚€μ§€ μ·¨κΈ‰ 및 λΆ„λ₯˜λ₯Ό μœ„ν•œ μ‹œμŠ€ν…œ κ°œλ°œμ— 도움이 λ©λ‹ˆλ‹€.

λ‚˜λ§Œμ˜ 데이터 집합 μΆ”κ°€ν•˜κΈ°

자체 데이터 μ„ΈνŠΈκ°€ 있고 이λ₯Ό Ultralytics YOLO ν˜•μ‹μ˜ μ„ΈλΆ„ν™” λͺ¨λΈ ν›ˆλ ¨μ— μ‚¬μš©ν•˜λ €λŠ” 경우, μœ„μ˜ "Ultralytics YOLO ν˜•μ‹"에 μ§€μ •λœ ν˜•μ‹μ„ λ”°λ₯΄λŠ”지 ν™•μΈν•˜μ„Έμš”. μ–΄λ…Έν…Œμ΄μ…˜μ„ ν•„μš”ν•œ ν˜•μ‹μœΌλ‘œ λ³€ν™˜ν•˜κ³  YAML ꡬ성 νŒŒμΌμ—μ„œ 경둜, 클래슀 수 및 클래슀 이름을 μ§€μ •ν•©λ‹ˆλ‹€.

라벨 ν˜•μ‹ 포트 λ˜λŠ” λ³€ν™˜

COCO 데이터 μ„ΈνŠΈ ν˜•μ‹μ„ YOLO ν˜•μ‹μœΌλ‘œ λ³€ν™˜

λ‹€μŒ μ½”λ“œ μŠ€λ‹ˆνŽ«μ„ μ‚¬μš©ν•˜μ—¬ 널리 μ‚¬μš©λ˜λŠ” COCO 데이터 μ„ΈνŠΈ ν˜•μ‹μ—μ„œ YOLO ν˜•μ‹μœΌλ‘œ 라벨을 μ‰½κ²Œ λ³€ν™˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

예

from ultralytics.data.converter import convert_coco

convert_coco(labels_dir="path/to/coco/annotations/", use_segments=True)

이 λ³€ν™˜ λ„κ΅¬λŠ” COCO 데이터 μ„ΈνŠΈ λ˜λŠ” COCO ν˜•μ‹μ˜ 데이터 μ„ΈνŠΈλ₯Ό Ultralytics YOLO ν˜•μ‹μœΌλ‘œ λ³€ν™˜ν•˜λŠ” 데 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ‚¬μš©ν•˜λ €λŠ” 데이터 μ„ΈνŠΈκ°€ λͺ¨λΈκ³Ό ν˜Έν™˜λ˜λŠ”μ§€, ν•„μš”ν•œ ν˜•μ‹ κ·œμΉ™μ„ λ”°λ₯΄κ³  μžˆλŠ”μ§€ λ‹€μ‹œ ν•œ 번 ν™•μΈν•˜λŠ” 것을 μžŠμ§€ λ§ˆμ„Έμš”. μ˜¬λ°”λ₯Έ ν˜•μ‹μ˜ 데이터 μ„ΈνŠΈλŠ” 성곡적인 객체 감지 λͺ¨λΈμ„ ν›ˆλ ¨ν•˜λŠ” 데 맀우 μ€‘μš”ν•©λ‹ˆλ‹€.

μžλ™ 주석

μžλ™ 주석은 사전 ν•™μŠ΅λœ 감지 λͺ¨λΈμ„ μ‚¬μš©ν•΄ μ„ΈλΆ„ν™” 데이터 μ„ΈνŠΈλ₯Ό 생성할 수 μžˆλŠ” ν•„μˆ˜ κΈ°λŠ₯μž…λ‹ˆλ‹€. μˆ˜λ™μœΌλ‘œ 라벨을 뢙일 ν•„μš” 없이 μˆ˜λ§Žμ€ 이미지에 λΉ λ₯΄κ³  μ •ν™•ν•˜κ²Œ 주석을 달 수 μžˆμ–΄ μ‹œκ°„κ³Ό λ…Έλ ₯을 μ ˆμ•½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

탐지 λͺ¨λΈμ„ μ‚¬μš©ν•˜μ—¬ μ„ΈλΆ„ν™” 데이터 μ„ΈνŠΈ μƒμ„±ν•˜κΈ°

Ultralytics ν”„λ ˆμž„μ›Œν¬λ₯Ό μ‚¬μš©ν•˜μ—¬ 데이터 집합에 μžλ™ 주석을 달렀면, λ‹€μŒμ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. auto_annotate ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€:

예

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="sam_b.pt")
인수 μœ ν˜• μ„€λͺ… κΈ°λ³Έκ°’
data str 주석을 달 이미지가 ν¬ν•¨λœ ν΄λ”μ˜ κ²½λ‘œμž…λ‹ˆλ‹€. None
det_model str, optional 사전 ν•™μŠ΅λœ YOLO 탐지 λͺ¨λΈ. 기본값은 'yolo11x.pt'. 'yolo11x.pt'
sam_model str, optional 사전 ν•™μŠ΅λœ SAM μ„ΈλΆ„ν™” λͺ¨λΈ. 기본값은 'sam_b.pt'. 'sam_b.pt'
device str, optional λͺ¨λΈμ„ μ‹€ν–‰ν•  μž₯μΉ˜μž…λ‹ˆλ‹€. 기본값은 빈 λ¬Έμžμ—΄(CPU λ˜λŠ” GPU, μ‚¬μš© κ°€λŠ₯ν•œ 경우)μž…λ‹ˆλ‹€. ''
output_dir str or None, optional 디렉터리에 주석이 달린 κ²°κ³Όλ₯Ό μ €μž₯ν•©λ‹ˆλ‹€. 기본값은 'labels' 폴더와 같은 디렉토리에 'data'. None

그리고 auto_annotate ν•¨μˆ˜λŠ” μ΄λ―Έμ§€μ˜ κ²½λ‘œμ™€ ν•¨κ»˜ 사전 ν•™μŠ΅λœ 탐지 및 SAM μ„ΈλΆ„ν™” λͺ¨λΈ, λͺ¨λΈμ„ μ‹€ν–‰ν•  μž₯치, 주석이 달린 κ²°κ³Όλ₯Ό μ €μž₯ν•  좜λ ₯ 디렉터리λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.

μžλ™ 주석은 사전 ν•™μŠ΅λœ λͺ¨λΈμ˜ μ„±λŠ₯을 ν™œμš©ν•˜μ—¬ κ³ ν’ˆμ§ˆμ˜ μ„ΈλΆ„ν™” 데이터 μ„ΈνŠΈλ₯Ό λ§Œλ“œλŠ” 데 ν•„μš”ν•œ μ‹œκ°„κ³Ό λ…Έλ ₯을 크게 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€. 이 κΈ°λŠ₯은 λŒ€κ·œλͺ¨ 이미지 μ»¬λ ‰μ…˜μ„ λ‹€λ£¨λŠ” μ—°κ΅¬μžμ™€ κ°œλ°œμžκ°€ μˆ˜λ™ 주석 μž‘μ—… λŒ€μ‹  λͺ¨λΈ 개발과 평가에 집쀑할 수 있게 ν•΄μ£Όλ―€λ‘œ 특히 μœ μš©ν•©λ‹ˆλ‹€.

자주 λ¬»λŠ” 질문

μΈμŠ€ν„΄μŠ€ μ„ΈλΆ„ν™”λ₯Ό μœ„ν•΄ Ultralytics YOLO μ–΄λ–€ 데이터 μ„ΈνŠΈ ν˜•μ‹μ„ μ§€μ›ν•˜λ‚˜μš”?

Ultralytics YOLO λŠ” μΈμŠ€ν„΄μŠ€ 뢄할을 μœ„ν•΄ μ—¬λŸ¬ 가지 데이터 μ„ΈνŠΈ ν˜•μ‹μ„ μ§€μ›ν•˜λ©°, κΈ°λ³Έ ν˜•μ‹μ€ 자체적인 Ultralytics YOLO ν˜•μ‹μž…λ‹ˆλ‹€. 데이터 μ„ΈνŠΈμ˜ 각 μ΄λ―Έμ§€μ—λŠ” 클래슀 μΈλ±μŠ€μ™€ μ •κ·œν™”λœ 경계 μ’Œν‘œλ₯Ό λ‚˜μ—΄ν•˜λŠ” μ—¬λŸ¬ ν–‰(객체당 ν•œ ν–‰)으둜 μ„Έκ·Έλ¨ΌνŠΈλœ 객체 정보가 ν¬ν•¨λœ ν•΄λ‹Ή ν…μŠ€νŠΈ 파일이 ν•„μš”ν•©λ‹ˆλ‹€. YOLO 데이터 μ„ΈνŠΈ ν˜•μ‹μ— λŒ€ν•œ μžμ„Έν•œ 지침은 μΈμŠ€ν„΄μŠ€ μ„ΈλΆ„ν™” 데이터 μ„ΈνŠΈ κ°œμš”λ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.

COCO 데이터 μ„ΈνŠΈ 주석을 YOLO ν˜•μ‹μœΌλ‘œ λ³€ν™˜ν•˜λ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Ό ν•˜λ‚˜μš”?

COCO ν˜•μ‹ 주석을 YOLO ν˜•μ‹μœΌλ‘œ λ³€ν™˜ν•˜λŠ” 방법은 Ultralytics 도ꡬλ₯Ό μ‚¬μš©ν•˜λ©΄ κ°„λ‹¨ν•©λ‹ˆλ‹€. λ˜λŠ” convert_coco ν•¨μˆ˜μ—μ„œ ultralytics.data.converter λͺ¨λ“ˆ:

from ultralytics.data.converter import convert_coco

convert_coco(labels_dir="path/to/coco/annotations/", use_segments=True)

이 μŠ€ν¬λ¦½νŠΈλŠ” COCO 데이터 μ„ΈνŠΈ 주석을 ν•„μˆ˜ YOLO ν˜•μ‹μœΌλ‘œ λ³€ν™˜ν•˜μ—¬ YOLO λͺ¨λΈμ„ ν•™μŠ΅μ‹œν‚€λŠ” 데 μ ν•©ν•©λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ λ ˆμ΄λΈ” ν˜•μ‹ κ°€μ Έμ˜€κΈ° λ˜λŠ” λ³€ν™˜ν•˜κΈ°λ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.

Ultralytics YOLO λͺ¨λΈμ„ κ΅μœ‘ν•˜κΈ° μœ„ν•΄ YAML νŒŒμΌμ„ μ–΄λ–»κ²Œ μ€€λΉ„ν•˜λ‚˜μš”?

Ultralytics 을 μ‚¬μš©ν•˜μ—¬ YOLO λͺ¨λΈμ„ ν•™μŠ΅ν•˜κΈ° μœ„ν•œ YAML νŒŒμΌμ„ μ€€λΉ„ν•˜λ €λ©΄ 데이터 μ„ΈνŠΈ κ²½λ‘œμ™€ 클래슀 이름을 μ •μ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€. λ‹€μŒμ€ YAML ꡬ성 μ˜ˆμ‹œμž…λ‹ˆλ‹€:

path: ../datasets/coco8-seg # dataset root dir
train: images/train # train images (relative to 'path')
val: images/val # val images (relative to 'path')

names:
    0: person
    1: bicycle
    2: car
    # ...

데이터 집합에 따라 κ²½λ‘œμ™€ 클래슀 이름을 μ—…λ°μ΄νŠΈν•΄μ•Ό ν•©λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ 데이터 집합 YAML ν˜•μ‹ μ„Ήμ…˜μ„ μ°Έμ‘°ν•˜μ„Έμš”.

Ultralytics YOLO 의 μžλ™ 주석 κΈ°λŠ₯은 λ¬΄μ—‡μΈκ°€μš”?

Ultralytics YOLO 의 μžλ™ 주석을 μ‚¬μš©ν•˜λ©΄ 사전 ν•™μŠ΅λœ 탐지 λͺ¨λΈμ„ μ‚¬μš©ν•˜μ—¬ 데이터 μ„ΈνŠΈμ— λŒ€ν•œ μ„ΈλΆ„ν™” 주석을 생성할 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ μˆ˜λ™ 라벨링의 ν•„μš”μ„±μ΄ 크게 μ€„μ–΄λ“­λ‹ˆλ‹€. 데이터 μ„ΈνŠΈμ˜ auto_annotate ν•¨μˆ˜λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="sam_b.pt")

이 κΈ°λŠ₯은 주석 ν”„λ‘œμ„ΈμŠ€λ₯Ό μžλ™ν™”ν•˜μ—¬ 더 λΉ λ₯΄κ³  효율적으둜 λ§Œλ“€μ–΄ μ€λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ μžλ™ 주석 μ„Ήμ…˜μ„ μ°Έμ‘°ν•˜μ„Έμš”.

πŸ“…1 λ…„ μ „ 생성됨 ✏️ 2κ°œμ›” μ „ μ—…λ°μ΄νŠΈλ¨

λŒ“κΈ€