Sunshine Plants Classifier (ConvNeXt-Base @ 384, 113 classes)

113๊ฐ€์ง€ ์‹๋ฌผ(๊ด€์—ฝ/ํ—ˆ๋ธŒ/๊ฝƒ/๋‹ค์œก ๋“ฑ) ์ด๋ฏธ์ง€๋ฅผ ๋ถ„๋ฅ˜ํ•˜๋Š” ConvNeXt-Base ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค. ImageNet-22k ์‚ฌ์ „ํ•™์Šต๋œ timm ๊ฐ€์ค‘์น˜(convnext_base.fb_in22k_ft_in1k)๋ฅผ ๋ฐฑ๋ณธ์œผ๋กœ ๋‘ ๋‹จ๊ณ„ ํ•™์Šต:

  1. 224 ํ•ด์ƒ๋„ 37 epoch ํ•™์Šต โ†’ val_acc 93.29%
  2. 384 ํ•ด์ƒ๋„ 11 epoch ํŒŒ์ธํŠœ๋‹ โ†’ val_acc 94.05%

์„ฑ๋Šฅ

Split Top-1 Accuracy
Validation (best) 94.05%
Test mean per-class 93.48%
Test median per-class 94.12%
  • 100% ์ •ํ™• ํด๋ž˜์Šค: 24๊ฐœ
  • 80% ๋ฏธ๋งŒ ์•ฝ์  ํด๋ž˜์Šค: 4๊ฐœ (Dracaena_fragrans_Compacta, Radermachera_sinica, Howea_forsteriana, Dypsis_lutescens)
  • ๊ฐ™์€ ์†(genus) ๋‚ด๋ถ€ ํ˜ผ๋™: 22.7% (๋ณ€์ข… ํ†ตํ•ฉ์œผ๋กœ ๊ฐœ์„  ์—ฌ์ง€)

์ž์„ธํ•œ ํด๋ž˜์Šค๋ณ„ ์ •ํ™•๋„์™€ ํ˜ผ๋™ ๋ถ„์„์€ summary_class_confusion.txt ์ฐธ๊ณ .

์‚ฌ์šฉ๋ฒ•

timm + safetensors (๊ถŒ์žฅ)

import json
import timm
import torch
from PIL import Image
from huggingface_hub import hf_hub_download
from safetensors.torch import load_file

REPO = "dkrak737/sunshine-plants-convnext-384"

with open(hf_hub_download(REPO, "labels.json"), "r") as f:
    labels = json.load(f)
class_names = [labels["id2label"][str(i)] for i in range(labels["num_classes"])]

model = timm.create_model(
    "convnext_base.fb_in22k_ft_in1k",
    pretrained=False,
    num_classes=len(class_names),
)
model.load_state_dict(load_file(hf_hub_download(REPO, "model.safetensors")))
model.eval()

cfg = timm.data.resolve_model_data_config(model)
cfg["input_size"] = (3, 384, 384)
transform = timm.data.create_transform(**cfg, is_training=False)

img = Image.open("plant.jpg").convert("RGB")
with torch.inference_mode():
    probs = model(transform(img).unsqueeze(0)).softmax(-1)[0]
    top = probs.topk(5)
for p, i in zip(top.values, top.indices):
    print(f"{p.item()*100:6.2f}%  {class_names[i]}")

Gradio ๋ฐ๋ชจ

์ด ๋ ˆํฌ์—๋Š” app.py๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์–ด, ๋กœ์ปฌ์—์„œ ๋ฐ”๋กœ ๋„์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

git clone https://huggingface.co/dkrak737/sunshine-plants-convnext-384
cd sunshine-plants-convnext-384
pip install -r requirements.txt
python app.py
# โ†’ http://localhost:7860

๋˜๋Š” Hugging Face Space๋กœ ๋ฐฐํฌํ•ด ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค (SDK: gradio).

ํ•™์Šต ์„ธํŒ…

ํ•ญ๋ชฉ ๊ฐ’
Backbone convnext_base.fb_in22k_ft_in1k (timm)
Pretrain ImageNet-22k โ†’ ImageNet-1k
Stage 1 224ร—224, 37 epochs
Stage 2 384ร—384, 11 epochs (fine-tune)
Optimizer AdamW + layer-wise LR decay
EMA enabled (ModelEma)
Augmentation timm default + RandAugment
Hardware RunPod GPU

์ž…๋ ฅ/์ถœ๋ ฅ

  • ์ž…๋ ฅ: RGB ์ด๋ฏธ์ง€ (timm transform, 384ร—384, ImageNet ์ •๊ทœํ™”)
  • ์ถœ๋ ฅ: 113-dim logits โ†’ softmax ํ™•๋ฅ 
  • ํด๋ž˜์Šค ๋ชฉ๋ก: class_names.txt ๋˜๋Š” labels.json (idโ†”label ๋งคํ•‘)

ํ•œ๊ณ„ ๋ฐ ์•ฝ์ 

ํ•™์Šต ๋ฐ์ดํ„ฐ์™€ ๋ถ„์„ ๊ธฐ์ค€์œผ๋กœ ์•Œ๋ ค์ง„ ์•ฝ์ :

  1. Dracaena ์† ๋ณ€์ข… ๊ตฌ๋ถ„ ์–ด๋ ค์›€ โ€” D_fragrans_Compacta 69.6%, D_draco 84.0%, D_sanderiana 88.2%. ์žŽ ํ˜•ํƒœ๊ฐ€ ๋งค์šฐ ์œ ์‚ฌํ•œ ๋ณ€์ข…๋“ค๋กœ, ๋ณ€์ข… ํ†ตํ•ฉ ๋˜๋Š” ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ ํ•„์š”.
  2. ์•ผ์ž ๊ณ„์—ด ํ˜ผ๋™ โ€” Radermachera_sinica โ†” Heteropanax_fragrans 8๊ฑด, Howea_forsteriana โ†” Dypsis_lutescens 6๊ฑด. ๋‹ค๋ฅธ ์†๋ผ๋ฆฌ์˜ ํ˜ผ๋™์ด๋ผ ์ง„์งœ ์•ฝ์ .
  3. ์žฅ๋ฏธ ๋ณ€์ข… โ€” Rosa_David_Austin โ†” Rosa_chinensis_minima.
  4. ํ•™์Šต ๋ฐ์ดํ„ฐ์— ์—†๋Š” ์ข…์€ ๋ถ„๋ฅ˜ ๋ถˆ๊ฐ€๋Šฅ (๊ฐ€์žฅ ๊ฐ€๊นŒ์šด 113๊ฐœ ์ค‘ ํ•˜๋‚˜๋กœ ๊ฐ•์ œ ๋ถ„๋ฅ˜๋จ).

๋ผ์ด์„ ์Šค

  • ๋ชจ๋ธ ๊ฐ€์ค‘์น˜: Apache 2.0
  • ๋ฐฑ๋ณธ ๋ผ์ด์„ ์Šค: timm/convnext_base.fb_in22k_ft_in1k ์™€ ๋™์ผ (Apache 2.0)

์ธ์šฉ

์ด ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์‹œ๋ฉด ์•„๋ž˜๋กœ ์ธ์šฉํ•ด์ฃผ์„ธ์š”:

@misc{sunshine-plants-2026,
  author = {dkrak737},
  title  = {Sunshine Plants Classifier (ConvNeXt-Base 384, 113 classes)},
  year   = {2026},
  howpublished = {\url{https://huggingface.co/dkrak737/sunshine-plants-convnext-384}}
}
Downloads last month
20
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for dkrak737/sunshine-plants-convnext-384

Finetuned
(3)
this model

Space using dkrak737/sunshine-plants-convnext-384 1