Instructions to use dkrak737/sunshine-plants-convnext-384 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- timm
How to use dkrak737/sunshine-plants-convnext-384 with timm:
import timm model = timm.create_model("hf_hub:dkrak737/sunshine-plants-convnext-384", pretrained=True) - Notebooks
- Google Colab
- Kaggle
Sunshine Plants Classifier (ConvNeXt-Base @ 384, 113 classes)
113가지 식물(관엽/허브/꽃/다육 등) 이미지를 분류하는 ConvNeXt-Base 모델입니다.
ImageNet-22k 사전학습된 timm 가중치(convnext_base.fb_in22k_ft_in1k)를 백본으로 두 단계 학습:
- 224 해상도 37 epoch 학습 → val_acc 93.29%
- 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 매핑)
한계 및 약점
학습 데이터와 분석 기준으로 알려진 약점:
- Dracaena 속 변종 구분 어려움 —
D_fragrans_Compacta69.6%,D_draco84.0%,D_sanderiana88.2%. 잎 형태가 매우 유사한 변종들로, 변종 통합 또는 추가 데이터 필요. - 야자 계열 혼동 —
Radermachera_sinica↔Heteropanax_fragrans8건,Howea_forsteriana↔Dypsis_lutescens6건. 다른 속끼리의 혼동이라 진짜 약점. - 장미 변종 —
Rosa_David_Austin↔Rosa_chinensis_minima. - 학습 데이터에 없는 종은 분류 불가능 (가장 가까운 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
Model tree for dkrak737/sunshine-plants-convnext-384
Base model
timm/convnext_base.fb_in22k_ft_in1k