# λ°μ΄ν°νλ μ μ°μ΄λ³΄κΈ° (μμ 5κ°)
print(df.head())


### Object Count by Category (μΉ΄ν
κ³ λ¦¬λ³ λΆκ· ν νμΈ)
> λΆμ: μ΄λ€ μΉ΄ν
κ³ λ¦¬(μ: K-004)λ λ°μ΄ν°κ° 500μ₯ μ΄μμΌλ‘ λμ³λλλ°, λ€λ₯Έ κ²λ€μ 50μ₯λ μ± μ λλ κ² λ³΄μ
λλ€.
> μ μ μ λ΅: λ°μ΄ν°κ° λ무 μ μ μΉ΄ν
κ³ λ¦¬λ λͺ¨λΈμ΄ νμ΅νκΈ° μ΄λ €μΈ κ² κ°μ΅λλ€. μ¦κ° λ° AI-hubλ₯Ό μ΄μ©ν΄ **"λ°μ΄ν° λΆμ‘±ν μμ½ μμ£Όλ‘ μΆκ° μμ§ νμ!"** (test datasetμΌλ‘ μ°μΈ 5000κ°μ§λ¦¬ μ μΈ)
### Objects per Image (μ΄λ―Έμ§λΉ κ°μ²΄ μ λΆν¬)
> λΆμ: νκ· 3.04κ°μ΄κ³ , λλΆλΆμ μ΄λ―Έμ§μ μμ½μ΄ 2~4κ° μ λ λ΄κ²¨ μμ.
> μ μ μ λ΅: λ§μ½ μμ½μ΄ 1κ°λ§ μλ μ΄λ―Έμ§κ° λ무 λ§λ€λ©΄, μ μ²λ¦¬ κ³Όμ μμ μ΄λ―Έμ§λ₯Ό νμ μν€κ±°λ ν©μ±ν΄μ κ°μ²΄ μλ₯Ό λ리λ νμ΄νλΌμΈ(Augmentation)μ ꡬμΆν΄μΌ ν νμκ° μμ.

### Check Bbox (λ°μ΄λ© λ°μ€ κ²μ)
> λΆμ: μμ½ μμ λΉ¨κ° λ°μ€κ° μμ£Ό μ νν μμΉμ κ·Έλ €μ Έ μλκ±Έλ‘ λ³΄μ (μ 체μ μΌλ‘ λΌλ²¨λ§ νμ§μ μ’μ 보μ).
# annotation idμ train dataκ° 1:1 λμμ΄ μ λλμ§ νμΈ
def check_data_alignment(df, img_dir):
actual_files = set(os.listdir(img_dir))
df_files = set(df['image_path'].apply(lambda x: os.path.basename(x)))
# μ΄λ―Έμ§ νμΌμ μλλ° JSONμ μλ κ²½μ° (Missing Label)
missing_labels = actual_files - df_files
# JSONμλ μλλ° μ€μ νμΌμ μλ κ²½μ° (Missing Image)
missing_images = df_files - actual_files
print(f"β
κ΅μ§ν© κ²μ¬ μλ£!")
print(f"π λΌλ²¨ μλ μ΄λ―Έμ§: {len(missing_labels)}κ°")
print(f"π μ΄λ―Έμ§ μλ λΌλ²¨: {len(missing_images)}κ°")
check_data_alignment(df, TRAIN_IMG_DIR)
β κ΅μ§ν© κ²μ¬ μλ£! π λΌλ²¨ μλ μ΄λ―Έμ§: 0κ° π μ΄λ―Έμ§ μλ λΌλ²¨: 0κ°

### ν΄μλ μλ²½ ν΅μΌ (Consistency):
> κ·Έλνμ λ§λκΈ°κ° λ± ν μ€(1280 λΆκ·Ό)λ§ λΎ°μ‘±νκ² μμμλ κ²μ λͺ¨λ μ΄λ―Έμ§μ κ°λ‘(Width)μ μΈλ‘(Height)κ° **λκ°μ ν¬κΈ°(μ: 1280x1280)**λ‘ κΉλνκ² μ λ¦¬κ° μ λκ²μ λ³Ό μ μμ.
λͺ¨λΈ νμ΅ν λ 리μ¬μ΄μ¦ λΉμ¨μ κ³ λ―Όν νμκ° μμ΄μ μ±λ₯μ΄ μμ£Ό μμ μ μΌλ‘ λμ¬ κ±°λΌ μΆμΈ‘ν΄λ³Ό μ μμ.
### κΉ¨μ§ νμΌ 0κ° (Reliability):
> νλ¨μ "0κ° κΉ¨μ§ νμΌ μ κ±°λ¨"μ μμ§ν λͺ¨λ λ°μ΄ν°κ° μ½κΈ° κ°λ₯ν μνλΌλ λ».