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

Roboflow 100 데이터 μ„ΈνŠΈ

Roboflow 100이 κ°œλ°œν•˜κ³  Roboflow μ—μ„œ κ°œλ°œν•˜κ³  Intel μ—μ„œ ν›„μ›ν•˜λŠ” 100은 획기적인 객체 탐지 λ²€μΉ˜λ§ˆν¬μž…λ‹ˆλ‹€. μ—¬κΈ°μ—λŠ” 90,000개 μ΄μƒμ˜ 곡개 데이터 μ„ΈνŠΈμ—μ„œ μƒ˜ν”Œλ§λœ 100개의 λ‹€μ–‘ν•œ 데이터 μ„ΈνŠΈκ°€ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 이 λ²€μΉ˜λ§ˆν¬λŠ” 의료, 항곡 이미지, λΉ„λ””μ˜€ κ²Œμž„ λ“± λ‹€μ–‘ν•œ μ˜μ—­μ— λŒ€ν•œ λͺ¨λΈμ˜ 적응성을 ν…ŒμŠ€νŠΈν•˜κΈ° μœ„ν•΄ κ³ μ•ˆλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

Roboflow 100 κ°œμš”

μ£Όμš” κΈ°λŠ₯

  • 7개 μ˜μ—­μ— 걸쳐 100개의 데이터 μ„ΈνŠΈκ°€ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€: 항곡, λΉ„λ””μ˜€ κ²Œμž„, ν˜„λ―Έκ²½, μˆ˜μ€‘, λ¬Έμ„œ, μ „μžκΈ°, μ‹€μ œ 세계.
  • 이 λ²€μΉ˜λ§ˆν¬λŠ” 805개 ν΄λž˜μŠ€μ— 걸쳐 224,714개의 μ΄λ―Έμ§€λ‘œ κ΅¬μ„±λ˜μ–΄ 있으며, 11,170μ‹œκ°„μ΄ λ„˜λŠ” 라벨링 μž‘μ—… 덕뢄에 κ°€λŠ₯ν–ˆμŠ΅λ‹ˆλ‹€.
  • λͺ¨λ“  μ΄λ―Έμ§€μ˜ ν¬κΈ°λŠ” 640x640ν”½μ…€λ‘œ μ‘°μ •λ˜λ©°, 클래슀 λͺ¨ν˜Έμ„±μ„ μ—†μ• κ³  잘 λ“œλŸ¬λ‚˜μ§€ μ•ŠλŠ” 클래슀λ₯Ό ν•„ν„°λ§ν•˜λŠ” 데 쀑점을 λ‘‘λ‹ˆλ‹€.
  • μ£Όμ„μ—λŠ” 객체에 λŒ€ν•œ 경계 μƒμžκ°€ ν¬ν•¨λ˜μ–΄ μžˆμ–΄ 객체 감지 λͺ¨λΈμ„ ν›ˆλ ¨ν•˜κ³  ν‰κ°€ν•˜λŠ” 데 μ ν•©ν•©λ‹ˆλ‹€.

데이터 μ„ΈνŠΈ ꡬ쑰

Roboflow 100 데이터 μ„ΈνŠΈλŠ” 7개의 μΉ΄ν…Œκ³ λ¦¬λ‘œ κ΅¬μ„±λ˜μ–΄ 있으며, 각 μΉ΄ν…Œκ³ λ¦¬μ—λŠ” κ³ μœ ν•œ 데이터 μ„ΈνŠΈ, 이미지 및 클래슀 집합이 μžˆμŠ΅λ‹ˆλ‹€:

  • Aerial: 총 9,683개의 이미지가 ν¬ν•¨λœ 7개의 데이터 μ„ΈνŠΈλ‘œ κ΅¬μ„±λ˜μ–΄ 있으며, 24개의 μ„œλ‘œ λ‹€λ₯Έ 클래슀λ₯Ό ν¬κ΄„ν•©λ‹ˆλ‹€.
  • λΉ„λ””μ˜€ κ²Œμž„: 88개 ν΄λž˜μŠ€μ— 걸쳐 11,579개의 이미지가 ν¬ν•¨λœ 7개의 데이터 μ„ΈνŠΈκ°€ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
  • ν˜„λ―Έκ²½: 28개 ν΄λž˜μŠ€μ— 걸쳐 13,378개의 이미지가 ν¬ν•¨λœ 11개의 데이터 μ„ΈνŠΈλ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€.
  • μˆ˜μ€‘: 39개 클래슀의 18,003개 이미지λ₯Ό ν¬ν•¨ν•˜λŠ” 5개의 데이터 μ„ΈνŠΈκ°€ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
  • λ¬Έμ„œ: 24,813개의 이미지가 ν¬ν•¨λœ 8개의 데이터 μ„ΈνŠΈλ‘œ κ΅¬μ„±λ˜λ©° 90개의 클래슀둜 λ‚˜λ‰©λ‹ˆλ‹€.
  • μ „μžκΈ°: 12개 데이터 μ„ΈνŠΈ, 41개 클래슀의 총 36,381개 μ΄λ―Έμ§€λ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€.
  • μ‹€μ œ 세계: 50개의 데이터 μ„ΈνŠΈκ°€ μžˆλŠ” κ°€μž₯ 큰 μΉ΄ν…Œκ³ λ¦¬λ‘œ, 495개 ν΄λž˜μŠ€μ— 걸쳐 110,615개의 이미지λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

이 κ΅¬μ‘°λŠ” μ‹€μ œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹œλ‚˜λ¦¬μ˜€λ₯Ό λ°˜μ˜ν•˜μ—¬ 객체 감지 λͺ¨λΈμ— λŒ€ν•œ λ‹€μ–‘ν•˜κ³  κ΄‘λ²”μœ„ν•œ ν…ŒμŠ€νŠΈ ν™˜κ²½μ„ μ œκ³΅ν•©λ‹ˆλ‹€.

λ²€μΉ˜λ§ˆν‚Ή

데이터 μ„ΈνŠΈ λ²€μΉ˜λ§ˆν‚Ήμ€ 정확도, 평균 정밀도 및 F1 μ μˆ˜μ™€ 같은 ν‘œμ€€ν™”λœ λ©”νŠΈλ¦­μ„ μ‚¬μš©ν•˜μ—¬ νŠΉμ • 데이터 μ„ΈνŠΈμ—μ„œ λ¨Έμ‹  λŸ¬λ‹ λͺ¨λΈ μ„±λŠ₯을 ν‰κ°€ν•©λ‹ˆλ‹€.

λ²€μΉ˜λ§ˆν‚Ή

λ²€μΉ˜λ§ˆν‚Ή κ²°κ³ΌλŠ” "ultralytics-benchmarks/evaluation.txt"에 μ €μž₯λ©λ‹ˆλ‹€.

λ²€μΉ˜λ§ˆν‚Ή μ˜ˆμ‹œ

import os
import shutil
from pathlib import Path

from ultralytics.utils.benchmarks import RF100Benchmark

# Initialize RF100Benchmark and set API key
benchmark = RF100Benchmark()
benchmark.set_key(api_key="YOUR_ROBOFLOW_API_KEY")

# Parse dataset and define file paths
names, cfg_yamls = benchmark.parse_dataset()
val_log_file = Path("ultralytics-benchmarks") / "validation.txt"
eval_log_file = Path("ultralytics-benchmarks") / "evaluation.txt"

# Run benchmarks on each dataset in RF100
for ind, path in enumerate(cfg_yamls):
    path = Path(path)
    if path.exists():
        # Fix YAML file and run training
        benchmark.fix_yaml(str(path))
        os.system(f"yolo detect train data={path} model=yolo11s.pt epochs=1 batch=16")

        # Run validation and evaluate
        os.system(f"yolo detect val data={path} model=runs/detect/train/weights/best.pt > {val_log_file} 2>&1")
        benchmark.evaluate(str(path), str(val_log_file), str(eval_log_file), ind)

        # Remove the 'runs' directory
        runs_dir = Path.cwd() / "runs"
        shutil.rmtree(runs_dir)
    else:
        print("YAML file path does not exist")
        continue

print("RF100 Benchmarking completed!")

μ• ν”Œλ¦¬μΌ€μ΄μ…˜

Roboflow 100은 컴퓨터 λΉ„μ „ 및 λ”₯ λŸ¬λ‹κ³Ό κ΄€λ ¨λœ λ‹€μ–‘ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— 맀우 μœ μš©ν•©λ‹ˆλ‹€. μ—°κ΅¬μžμ™€ μ—”μ§€λ‹ˆμ–΄λŠ” 이 벀치마크λ₯Ό μ‚¬μš©ν•˜μ—¬ λ‹€μŒκ³Ό 같은 μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

  • 닀쀑 도메인 μ»¨ν…μŠ€νŠΈμ—μ„œ 개체 감지 λͺ¨λΈμ˜ μ„±λŠ₯을 ν‰κ°€ν•˜μ„Έμš”.
  • 일반적인 객체 인식을 λ„˜μ–΄ μ‹€μ œ μ‹œλ‚˜λ¦¬μ˜€μ— λŒ€ν•œ λͺ¨λΈμ˜ 적응성을 ν…ŒμŠ€νŠΈν•©λ‹ˆλ‹€.
  • 의료, 항곡 이미지, λΉ„λ””μ˜€ κ²Œμž„ λ“± λ‹€μ–‘ν•œ 데이터 μ„ΈνŠΈμ—μ„œ 객체 감지 λͺ¨λΈμ˜ κΈ°λŠ₯을 λ²€μΉ˜λ§ˆν‚Ήν•΄ λ³΄μ„Έμš”.

μ‹€μ œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— λŒ€ν•œ 더 λ§Žμ€ 아이디어와 μ˜κ°μ„ μ–»μœΌλ €λ©΄ μ‹€μ œ ν”„λ‘œμ νŠΈμ— λŒ€ν•œ κ°€μ΄λ“œλ₯Ό ν™•μΈν•˜μ„Έμš”.

μ‚¬μš©λ²•

Roboflow 100 데이터 μ„ΈνŠΈλŠ” GitHub와 Roboflow Universeμ—μ„œ λͺ¨λ‘ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Roboflow 100 GitHub λ¦¬ν¬μ§€ν† λ¦¬μ—μ„œ 직접 μ•‘μ„ΈμŠ€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ Roboflow μœ λ‹ˆλ²„μŠ€μ—μ„œλŠ” 각 데이터 μ„ΈνŠΈ λ‚΄μ—μ„œ 내보내기 λ²„νŠΌμ„ ν΄λ¦­ν•˜κΈ°λ§Œ ν•˜λ©΄ κ°œλ³„ 데이터 μ„ΈνŠΈλ₯Ό λ‹€μš΄λ‘œλ“œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μƒ˜ν”Œ 데이터 및 주석

Roboflow 100은 λ‹€μ–‘ν•œ 각도와 μ˜μ—­μ—μ„œ μΊ‘μ²˜ν•œ λ‹€μ–‘ν•œ 이미지와 λ™μ˜μƒμ΄ ν¬ν•¨λœ 데이터 μ„ΈνŠΈλ‘œ κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒμ€ RF100 λ²€μΉ˜λ§ˆν¬μ— ν¬ν•¨λœ 주석이 달린 μ΄λ―Έμ§€μ˜ μ˜ˆμ‹œμž…λ‹ˆλ‹€.

μƒ˜ν”Œ 데이터 및 주석

μœ„μ—μ„œ λ³Ό 수 μžˆλŠ” Roboflow 100 벀치마크의 닀양성은 μ œν•œλœ 도메인 λ‚΄μ—μ„œ 단일 λ©”νŠΈλ¦­μ„ μ΅œμ ν™”ν•˜λŠ” 데 쀑점을 λ‘λŠ” κΈ°μ‘΄ λ²€μΉ˜λ§ˆν¬λ³΄λ‹€ 크게 λ°œμ „ν•œ κ²ƒμž…λ‹ˆλ‹€.

인용 및 감사

연ꡬ λ˜λŠ” 개발 μž‘μ—…μ— Roboflow 100 데이터셋을 μ‚¬μš©ν•˜λŠ” 경우 λ‹€μŒ 논문을 μΈμš©ν•΄ μ£Όμ„Έμš”:

@misc{2211.13523,
    Author = {Floriana Ciaglia and Francesco Saverio Zuppichini and Paul Guerrie and Mark McQuade and Jacob Solawetz},
    Title = {Roboflow 100: A Rich, Multi-Domain Object Detection Benchmark},
    Eprint = {arXiv:2211.13523},
}

Roboflow 100 데이터셋을 λ§Œλ“€κ³  μœ μ§€ν•˜λŠ” 데 νž˜μ¨μ£Όμ‹  Roboflow νŒ€κ³Ό λͺ¨λ“  κΈ°μ—¬μžμ—κ²Œ κ°μ‚¬μ˜ 말씀을 μ „ν•©λ‹ˆλ‹€.

객체 감지 및 λ¨Έμ‹  λŸ¬λ‹ ν”„λ‘œμ νŠΈλ₯Ό κ°œμ„ ν•˜κΈ° μœ„ν•΄ 더 λ§Žμ€ 데이터 μ„ΈνŠΈλ₯Ό νƒμƒ‰ν•˜κ³  μ‹ΆμœΌμ‹œλ‹€λ©΄, 포괄적인 데이터 μ„ΈνŠΈ μ»¬λ ‰μ…˜μ„ λ°©λ¬Έν•΄ λ³΄μ„Έμš”.

자주 λ¬»λŠ” 질문

Roboflow 100 데이터 μ„ΈνŠΈλŠ” 무엇이며, 객체 감지에 μ€‘μš”ν•œ μ΄μœ λŠ” λ¬΄μ—‡μΈκ°€μš”?

Roboflow 100 데이터 μ„ΈνŠΈλŠ” Roboflow μ—μ„œ κ°œλ°œν•˜κ³  Intel μ—μ„œ ν›„μ›ν•˜λŠ” 100 데이터 μ„ΈνŠΈλŠ” μ€‘μš”ν•œ 객체 감지 λ²€μΉ˜λ§ˆν¬μž…λ‹ˆλ‹€. 의료, 항곡 이미지, λΉ„λ””μ˜€ κ²Œμž„ λ“±μ˜ μ˜μ—­μ„ μ•„μš°λ₯΄λŠ” 90,000개 μ΄μƒμ˜ 곡개 데이터 μ„ΈνŠΈμ—μ„œ 100개의 λ‹€μ–‘ν•œ 데이터 μ„ΈνŠΈλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ 닀양성은 λͺ¨λΈμ΄ λ‹€μ–‘ν•œ μ‹€μ œ μ‹œλ‚˜λ¦¬μ˜€μ— μ μ‘ν•˜μ—¬ 견고성과 μ„±λŠ₯을 ν–₯μƒμ‹œν‚¬ 수 μžˆλ„λ‘ 보μž₯ν•©λ‹ˆλ‹€.

객체 감지 λͺ¨λΈμ„ λ²€μΉ˜λ§ˆν‚Ήν•˜κΈ° μœ„ν•΄ Roboflow 100 데이터 μ„ΈνŠΈλ₯Ό μ‚¬μš©ν•˜λ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Ό ν•˜λ‚˜μš”?

λ²€μΉ˜λ§ˆν‚Ήμ„ μœ„ν•΄ Roboflow 100 데이터 μ„ΈνŠΈλ₯Ό μ‚¬μš©ν•˜λ €λ©΄ Ultralytics λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ RF100Benchmark 클래슀λ₯Ό κ΅¬ν˜„ν•˜λ©΄ λ©λ‹ˆλ‹€. λ‹€μŒμ€ κ°„λ‹¨ν•œ μ˜ˆμ œμž…λ‹ˆλ‹€:

λ²€μΉ˜λ§ˆν‚Ή μ˜ˆμ‹œ

import os
import shutil
from pathlib import Path

from ultralytics.utils.benchmarks import RF100Benchmark

# Initialize RF100Benchmark and set API key
benchmark = RF100Benchmark()
benchmark.set_key(api_key="YOUR_ROBOFLOW_API_KEY")

# Parse dataset and define file paths
names, cfg_yamls = benchmark.parse_dataset()
val_log_file = Path("ultralytics-benchmarks") / "validation.txt"
eval_log_file = Path("ultralytics-benchmarks") / "evaluation.txt"

# Run benchmarks on each dataset in RF100
for ind, path in enumerate(cfg_yamls):
    path = Path(path)
    if path.exists():
        # Fix YAML file and run training
        benchmark.fix_yaml(str(path))
        os.system(f"yolo detect train data={path} model=yolo11n.pt epochs=1 batch=16")

        # Run validation and evaluate
        os.system(f"yolo detect val data={path} model=runs/detect/train/weights/best.pt > {val_log_file} 2>&1")
        benchmark.evaluate(str(path), str(val_log_file), str(eval_log_file), ind)

        # Remove 'runs' directory
        runs_dir = Path.cwd() / "runs"
        shutil.rmtree(runs_dir)
    else:
        print("YAML file path does not exist")
        continue

print("RF100 Benchmarking completed!")

Roboflow 100 데이터 μ„ΈνŠΈμ—λŠ” μ–΄λ–€ 도메인이 ν¬ν•¨λ˜λ‚˜μš”?

Roboflow 100 데이터 μ„ΈνŠΈλŠ” 7개 도메인에 걸쳐 있으며, 각각 물체 감지 λͺ¨λΈμ— λŒ€ν•œ κ³ μœ ν•œ κ³Όμ œμ™€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ œκ³΅ν•©λ‹ˆλ‹€:

  1. 항곡: 7개 데이터 μ„ΈνŠΈ, 9,683개 이미지, 24개 클래슀
  2. λΉ„λ””μ˜€ κ²Œμž„: 7개 데이터 μ„ΈνŠΈ, 11,579개 이미지, 88개 클래슀
  3. ν˜„λ―Έκ²½: 11개 데이터 μ„ΈνŠΈ, 13,378개 이미지, 28개 클래슀
  4. μˆ˜μ€‘: 5개의 데이터 μ„ΈνŠΈ, 18,003개의 이미지, 39개의 클래슀
  5. λ¬Έμ„œ: 8개 데이터 μ„ΈνŠΈ, 24,813개 이미지, 90개 클래슀
  6. μ „μžκΈ°: 12개 데이터 μ„ΈνŠΈ, 36,381개 이미지, 41개 클래슀
  7. μ‹€μ œ 세계: 50개의 데이터 μ„ΈνŠΈ, 110,615개의 이미지, 495개의 클래슀

이 섀정을 μ‚¬μš©ν•˜λ©΄ λ‹€μ–‘ν•œ μ‹€μ œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ λͺ¨λΈμ„ κ΄‘λ²”μœ„ν•˜κ³  λ‹€μ–‘ν•˜κ²Œ ν…ŒμŠ€νŠΈν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Roboflow 100 데이터 μ„ΈνŠΈμ— μ•‘μ„ΈμŠ€ν•˜κ³  λ‹€μš΄λ‘œλ“œν•˜λ €λ©΄ μ–΄λ–»κ²Œ ν•˜λ‚˜μš”?

Roboflow 100 데이터 μ„ΈνŠΈλŠ” GitHub 및 Roboflow Universeμ—μ„œ μ•‘μ„ΈμŠ€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. GitHubμ—μ„œ 전체 데이터 집합을 λ‹€μš΄λ‘œλ“œν•˜κ±°λ‚˜ Roboflow Universeμ—μ„œ 내보내기 λ²„νŠΌμ„ μ‚¬μš©ν•˜μ—¬ κ°œλ³„ 데이터 집합을 선택할 수 μžˆμŠ΅λ‹ˆλ‹€.

Roboflow 100 데이터셋을 연ꡬ에 μΈμš©ν•  λ•Œ μ–΄λ–€ λ‚΄μš©μ„ 포함해야 ν•˜λ‚˜μš”?

Roboflow 100 데이터셋을 연ꡬ에 μ‚¬μš©ν•  λ•ŒλŠ” λ°˜λ“œμ‹œ μ μ ˆν•˜κ²Œ μΈμš©ν•˜μ„Έμš”. λ‹€μŒμ€ ꢌμž₯ 인용 λ°©λ²•μž…λ‹ˆλ‹€:

@misc{2211.13523,
    Author = {Floriana Ciaglia and Francesco Saverio Zuppichini and Paul Guerrie and Mark McQuade and Jacob Solawetz},
    Title = {Roboflow 100: A Rich, Multi-Domain Object Detection Benchmark},
    Eprint = {arXiv:2211.13523},
}

μžμ„Έν•œ λ‚΄μš©μ€ μ’…ν•© 데이터 μ„ΈνŠΈ μ»¬λ ‰μ…˜μ„ μ°Έμ‘°ν•˜μ„Έμš”.

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

λŒ“κΈ€