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_sinicaHeteropanax_fragrans 8건, Howea_forsterianaDypsis_lutescens 6건. 다른 속끼리의 혼동이라 진짜 약점.
  3. 장미 변종Rosa_David_AustinRosa_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
8
Safetensors
Model size
87.7M params
Tensor type
F32
·
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
(4)
this model

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

MiniMax H3 Video Generator 20 free credits · Text & image to video Try Free →