leaf_kind_dinov2_logreg
OpenArm SciEdu ๋๋ญ์ ๋ถ๋ฅ ์คํ์์, ์ค ์์ ์ ์ ์นด๋๊ฐ ๋ณต์ฝ(compound)์ธ์ง ๋จ์ฝ(simple)์ธ์ง ํ์ ํ๋ค. ์นด๋๊ฐ ์๊ฑฐ๋ ๊ฐ๋ ค์ก์ผ๋ฉด none์ด๋ค(2026-10-04 ๋์งธ ํ, ์
์งธ ๋ถ๋ฅ ์ถ๊ฐ).
๋ก๋ด PC ๋ํ์ธต์ ํ์ ๊ธฐ ์๋ฆฌ์ ์ด๋ค. ํ์ ๊ฒฐ๊ณผ์ ๊ท์น์ ์ ์ฉํด ์ผ์ชฝ/์ค๋ฅธ์ชฝ์ ์ ํ๊ณ , ๊ทธ ์ชฝ ๋ฌธ์ฅ์ pi0.5(leapshared/SciEdu_pauses_3exp_210epi_leafdir_pi05)์ ๋ณด๋ธ๋ค.
๊ตฌ์ฑ
- ํน์ง:
facebook/dinov2-base์pooler_output(์ต์ข layernorm ๋ค CLS ํ ํฐ, 768) - ๋ถ๋ฅ๊ธฐ: ํ์คํ(mean, std) ๋ค 3๋ถ๋ฅ ์ํํธ๋งฅ์ค ํ๊ท(W 3ร768, b 3). ๋ถ๋ฅ๋
classes= [compound, simple, none]์ด๋ค.classifier.json์ ์ซ์ 3,843๊ฐ๊ฐ ์๋ค. - ์ ์ฒ๋ฆฌ:
AutoImageProcessor(facebook/dinov2-base). ์งง์ ๋ณ 256์ผ๋ก bicubic ์ค์ด๊ธฐ, ๊ฐ์ด๋ฐ 224 ์๋ฅด๊ธฐ, /255, ImageNet mean/std, RGB - ์
๋ ฅ:
follower_d455f640ร480 RGB ํ๋ ์์์ ์์ (x0, y0, x1, y1) = (150, 100, 490, 440)์ ์๋ฅธ๋ค. - ์ฐ๋ ๋: ์นด๋๊ฐ ์ค ์์ ํผ์ ์ ์๊ณ ๋ ํ์ด ์ฌ๊ณ ์์ ๋. ํ์ต ์ฌ์ง์ ์นด๋๋ฅผ ์ฎ๊ธด ํ์ด ์ถ๋ฐํ๊ธฐ 5ํ๋ ์ ์ ์ด๋ค.
์ฐ๋ ๋ฒ
from leaf_kind import LeafKind
clf = LeafKind() # CPU. classifier.json๊ณผ dinov2-base๋ฅผ ๋ฐ๋๋ค
r = clf.judge([f1, f2, f3]) # ๊ฐ์ ๋ ์ฐ์ ํ๋ ์ ๋ช ์ฅ (H x W x 3 RGB uint8)
# r["kind"]: "compound" | "simple" โ ์ฎ๊ธด๋ค
# "none" โ ์นด๋๊ฐ ์๊ฑฐ๋ ๊ฐ๋ ค์ก๋ค(ํ ํ๋ ์์ด๋ผ๋ none์ด๋ฉด). ํ์ ํ์ง ์๊ณ 1์ด ๋ค ๋ค์ ๋ณธ๋ค
# None โ ์นด๋๋ ์๋๋ฐ ํ๋ ์ ๋ต์ด ๊ฐ๋ ธ๊ฑฐ๋ ํ๊ท ํ์ ์ด 0.9๋ณด๋ค ๋ฎ๋ค. ์ ์๋์๊ฒ ๋ฌป๋๋ค
# r["probs"]: ํ๋ ์ ํ๊ท {compound, simple, none}, r["votes"]: ํ๋ ์๋ณ ํ์
๊ฒ์ฆ (2026-10-04, H200)
- ์นด๋ ์ฌ์ง:
Leaf_rules_60epi_labeled059๋ฒ(ํฉ๋ณธ ๋๋ญ์ 059๋ฒ)- ๋ก๋ด PC probe 142์ฅ + H200์ด ๊ทธ๋ฆฌํผ๋ก ์ฐพ์ 314์ฅ
- H200 ๊ฒ์ถ์์ ์นด๋๊ฐ ๊ฐ๋ ค์ก๊ฑฐ๋ ๋์ด๊ธฐ ์ ์ธ 20์ฅ(๋์ผ๋ก ํ์ธ)์ ๋บ๋ค.
- ์ ๋ต์ ์ํผ์๋ ๊ท์น(๋ณต์ฝ ์ผ์ชฝ / ๋ณต์ฝ ์ค๋ฅธ์ชฝ) ร ์นด๋๋ฅผ ์ฎ๊ธด ํ์ด๋ค.
- none ์ฌ์ง 795์ฅ
- A ์ํผ์๋ ๋ ๋น ์ค 120
- B ๊ทธ๋ฆฌํผ๊ฐ ์นด๋๋ฅผ ์ฅ ์งํ(๊ฐ๋ฆผ) 338
- C ์ฅ ๋ค 1.5์ด(์นด๋๋ฅผ ์ฎ๊ธฐ๋ ์ค์ด๊ฑฐ๋ ๋น ์ค) 337. ์ฌ๋ ์์ด ์นด๋๋ฅผ ๋๋ 1์ฅ์ ๋บ๋ค.
- ํ์ต์ ๋ถ๋ฅ ๊ท ํ ๊ฐ์ค์น๋ก ํ๋ค.
๊ฒ์ฆ ์ํผ์๋ 6ยท7ยท46ยท47์ ๋นผ๊ณ ํ์ตํด ๊ทธ ์ํผ์๋๋ก ์ฐ ๊ฒฐ๊ณผ(ํ: ์ ๋ต, ์ด: ํ์ ):
| ์ ๋ต \ ํ์ | compound | simple | none |
|---|---|---|---|
| compound | 21 | 0 | 0 |
| simple | 0 | 22 | 0 |
| none | 0 | 0 | 52 |
์ํผ์๋ ๋จ์ 10๊ฒน(1,251์ฅ):
| ์ ๋ต \ ํ์ | compound | simple | none |
|---|---|---|---|
| compound | 238 | 0 | 1 |
| simple | 0 | 216 | 1 |
| none | 0 | 0 | 795 |
- none์ ์นด๋๋ก ๋ณธ ๊ฒ(์๋ ์นด๋๋ฅผ ์ง์ผ๋ฌ ๊ฐ๋ ์ค์)์ 0์ด๋ค.
- ์นด๋๋ฅผ none์ผ๋ก ๋ณธ 2์ฅ์ 1์ด ๋ค ๋ค์ ๋ณด๋ ์ชฝ ์คํจ๋ค.
- ์ฒ์ ๋ณด๋ ์นด๋ ๋์์ธ์์์ ๋ณต์ฝ/๋จ์ฝ ์ ํ๋๋ ์ฒซ ํ(2๋ถ๋ฅ)์ผ๋ก ์ฐ ๋๋ต๊ฐ์ด 92~94%๋ค.
- ํ์ต ์ฌ์ง์ AV1๋ก ๋ นํํ ์์์ ํ์ด ์ด ๊ฒ์ด๋ค. ์ค๊ธฐ ์นด๋ฉ๋ผ ํ๋ ์์์๋ ๋ช ์ฅ์ผ๋ก ํ์ธํ๊ธฐ๋ฅผ ๊ถํ๋ค.
ํ๊ณ
- none์ ๋ นํ์ ์๋ ์ฅ๋ฉด(๋น ์ค, ๊ทธ๋ฆฌํผ ๊ฐ๋ฆผ, ์นด๋๋ฅผ ์ฎ๊ธฐ๋ ์ค)์ผ๋ก๋ง ๋ฐฐ์ ๋ค. ์ฌ๋ ์์ด ์นด๋๋ฅผ ๋๋ ์ค์ธ ์ฌ์ง์ ๋ฐ๋ก ๋ฐฐ์ฐ์ง ์์๋ค.
- ๊ฐ์ ๋ ์ฐ์ ํ๋ ์ ์ค ํ๋๋ผ๋ none์ด๋ฉด none์ ๋ธ๋ค. ์๋ ์นด๋๋ฅผ ์ง์ผ๋ฌ ๊ฐ์ง ์๋ ์ชฝ์ผ๋ก ์ ํ๋ค.
- ์ผ์ชฝ/์ค๋ฅธ์ชฝ์ ์ด ํ์ ๊ธฐ๊ฐ ์๋๋ผ ๋ํ์ธต์ด ํ์ ๊ท์น์ผ๋ก ์ ํ๋ค.
CPU ์๋ (H200 ์๋ฒ CPU, x86_64 24์ฝ์ด. ๋ก๋ด PC์์๋ ๋ค๋ฅผ ์ ์๋ค)
| ์ค๋ ๋ | 1์ฅ | 3์ฅ ํ ๋ฒ์ |
|---|---|---|
| 1 | 339 ms | 967 ms |
| 4 | 97 ms | 285 ms |
| 8 | 58 ms | 152 ms |
๋์งธ ํ judge 3์ฅ์ CPU 8์ค๋ ๋๋ก 181 ms์๋ค(์ํํธ๋งฅ์ค๋ ๋ฌด์ํ ๋งํผ ๊ฐ๋ณ๋ค).
ํ์ผ
classifier.json: ์ซ์(mean, std, W, b), ๋ถ๋ฅ, ์๋ฅด๊ธฐ ์์, ์ ์ฒ๋ฆฌ ์ค๋ช , ๊ฒ์ฆ ๊ฒฐ๊ณผ(ํผ๋ ํ๋ ฌ)leaf_kind.py: ํ์ ๊ธฐ(LeafKind)- ํ์ตยทํ๊ฐ ์ฝ๋์ ๊ฒฐ๊ณผ(H200):
scripts/leaf_kind/,logs/leaf_kind_local/