This release is a pre-release and may not be stable for production use.
anofit
양품 사진만으로 학습하는 기계 시각 이상 탐지. 긁힘·깨짐 같은 구조적 불량과, 부품이 빠졌거나 자리가 바뀐 논리적 불량을 함께 잡는다. 학습부터 임계값 결정, 검사 시험까지 대시보드 하나로 한다.
Anomaly detection for machine vision, trained from good images only — structural and logical defects, with a dashboard. Documentation is in Korean; the CLI prints Korean.
- 문서·이슈: https://github.com/pashidl-lab/anofit — 대시보드 따라하기:
docs/dashboard-walkthrough.md - 문의·라이선스: pashidl.lab@gmail.com
무엇을 하나
| 모드 | 잡는 것 | 바탕 |
|---|---|---|
struct |
긁힘 · 깨짐 · 오염 · 변형 | SALAD (ICCV 2025) — 교사/학생 + 오토인코더 |
logic |
부품 누락 · 개수 오류 · 위치 바뀜 | CSAD (BMVC 2024) — 부품 분할 + 히스토그램 |
both |
둘 다 (기본) | 두 점수를 z-score 로 합침 |
MVTec LOCO 5품종 실측 (AUROC, 양품 = test/good, 이상 = logical + structural, 2026-09-09):
| 품종 | struct | logic | both |
|---|---|---|---|
| juice_bottle | 99.90 | 73.27 | 99.72 |
| breakfast_box | 86.52 | 70.30 | 84.97 |
| pushpins | 92.66 | 53.23 | 91.57 |
| screw_bag | 82.17 | 49.96 | 72.94 |
| splicing_connectors | 95.26 | 62.07 | 94.34 |
이 숫자는 라벨 없이, 양품만 보고 학습한 값이다. 논문 값은 라벨된 테스트 셋으로 가장 좋은
에폭을 고른 것이라 직접 비교가 안 된다. 자세한 것은 저장소의 BENCH_REPORT.md.
설치
# 1) CUDA 에 맞는 torch 를 먼저 (pip 은 CPU 판을 고른다)
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121
# 2) anofit — 학습까지 하려면 [train]
pip install "anofit[train]"
# 검사만 하는 기계(이미 학습한 번들로 점수만)면 이것으로 충분하다
pip install anofit
- Python 3.10 – 3.13, Windows / Linux
- 학습은 GPU 가 필요하다 (실측 요구 VRAM 은
anofit doctor가 말해 준다). 검사는 CPU 로도 된다. - 산출물·캐시·가중치를 어느 디스크에 둘지는
anofit.yaml로 정한다 — 본보기anofit.example.yaml. 없으면 사용자 캐시 폴더에 쌓인다.
5분 시작
anofit doctor --mode both # 이 기계로 되는가: GPU · 디스크 · 의존성 · 가중치
anofit fetch --mode both # 파운데이션 가중치 10.4 GB (원 배포처에서, sha256 대조, 이어받기)
anofit serve # 대시보드 → http://127.0.0.1:8732
대시보드에서: 준비 탭에 양품 폴더(서버 경로 또는 업로드) → 학습 탭에서 품종 이름을 정하고 시작 → 끝나면 임계값 탭에서 운용점을 고르고 검사 탭에 사진을 넣어 본다.
명령줄로 같은 일:
anofit train --category my_part --good ./good --mode both # 번들 생성
anofit threshold <번들> # 임계값이 뜻하는 것
anofit score <번들> photo.png --models-dir <번들> # 한 장 판정
anofit export <번들> -o my_part.afz # 현장으로 옮길 파일 하나
가중치는 동봉하지 않는다
anofit fetch 가 원 배포처에서 받는다. 각 가중치는 배포처의 라이선스를 따른다
(THIRD_PARTY_NOTICES.md §6, 매니페스트 anofit/fetch_manifest.json).
| 크기 | 출처 | |
|---|---|---|
| GroundingDINO Swin-T | 0.69 GB | IDEA-Research |
| RAM++ Swin-L | 3.01 GB | recognize-anything |
| SAM-HQ ViT-H | 2.57 GB | SysCV |
| SAM ViT-H | 2.56 GB | Meta |
| EfficientAD teacher | 0.03 GB | SALAD 저장소 |
| Imagenette v2 | 1.56 GB | fast.ai |
--mode struct 만이면 6.7 GB, logic 만이면 6.3 GB. 첫 학습 때 라이브러리가 스스로 받는 것이
1 GB 쯤 더 있다 (bert-base-uncased, timm wide_resnet50_2, dino_vitbase8).
라이선스 · 체험
평가용 라이선스다 (LICENSE). 처음 실행한 날부터 90일은 그대로 쓴다. 그 뒤에는
학습·대시보드·fetch 가 멈추고, 이미 학습한 번들로 검사하는 것은 계속 된다 — 돌고 있는
라인이 서지 않는다.
anofit license # 남은 날짜
anofit license --install "<key>" # 받은 키 설치 (또는 환경 변수 ANOFIT_LICENSE)
키는 pashidl.lab@gmail.com 으로 요청한다. 학습한 모델과 사진은 전부 사용자의 것이다.
포함된 오픈소스(GroundingDINO · SAM · RAM++ · CSAD · SALAD)는 각자의 라이선스를 그대로
가지며, 무엇을 고쳤는지는 THIRD_PARTY_NOTICES.md 에 파일 단위로 적었다.
안 되는 것 · 알아 둘 것
- 안전이 걸린 곳에는 쓰지 않는다 (
LICENSE§7). - 정확도는 사진·조명·부품에 달렸다. 위 표는 MVTec LOCO 에서의 측정이지 약속이 아니다.
- 학습 시간: 품종당 최대 2시간 (RTX 4090, both, 양품 300장 기준). 캐시 1~3 GB, 번들 0.1 GB.
- Windows 에서 폴더 가져오기는 심볼릭 링크를 쓰고, 안 되면 복사한다.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file anofit-0.1.0.dev0-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: anofit-0.1.0.dev0-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 681.5 kB
- Tags: CPython 3.13, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1042b0c29720620bc369b84fcc55b0a1afc9304f7f62f00a51d809db5c0038eb
|
|
| MD5 |
8e5b4778fa1acecdf99caf401a3021e8
|
|
| BLAKE2b-256 |
99b4d8411b50cd3a817683d2f453f01e630212ea2a848c09185a385b05d26758
|
Provenance
The following attestation bundles were made for anofit-0.1.0.dev0-cp313-cp313-win_amd64.whl:
Publisher:
wheels.yml on pashidl-lab/anofit-src
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
anofit-0.1.0.dev0-cp313-cp313-win_amd64.whl -
Subject digest:
1042b0c29720620bc369b84fcc55b0a1afc9304f7f62f00a51d809db5c0038eb - Sigstore transparency entry: 2838316218
- Sigstore integration time:
-
Permalink:
pashidl-lab/anofit-src@d7f225ecb3d3f66f84ee4101d51776a955115ae0 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/pashidl-lab
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@d7f225ecb3d3f66f84ee4101d51776a955115ae0 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file anofit-0.1.0.dev0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: anofit-0.1.0.dev0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 715.2 kB
- Tags: CPython 3.13, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8c1253f6f01c65e4a0cca769f7588a10e15e17dde49baca214edcb688740976d
|
|
| MD5 |
227125d73b369f54ff1dca29411c95b1
|
|
| BLAKE2b-256 |
0a536dc33013dd199d4cc229178e282bf58cf138a2f39d22ecef90a98a2fce0f
|
Provenance
The following attestation bundles were made for anofit-0.1.0.dev0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
wheels.yml on pashidl-lab/anofit-src
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
anofit-0.1.0.dev0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
8c1253f6f01c65e4a0cca769f7588a10e15e17dde49baca214edcb688740976d - Sigstore transparency entry: 2838316347
- Sigstore integration time:
-
Permalink:
pashidl-lab/anofit-src@d7f225ecb3d3f66f84ee4101d51776a955115ae0 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/pashidl-lab
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@d7f225ecb3d3f66f84ee4101d51776a955115ae0 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file anofit-0.1.0.dev0-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: anofit-0.1.0.dev0-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 682.7 kB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
60ea0471fd0ec5292b89798bce7879ac8d795aa22952647a10d8342985887745
|
|
| MD5 |
97ac458e253f8899d00476b59c476e6f
|
|
| BLAKE2b-256 |
f1063aa044f4e8a928f9f84cb9d25ce415acfbf0015bb750db539bb81872ab13
|
Provenance
The following attestation bundles were made for anofit-0.1.0.dev0-cp312-cp312-win_amd64.whl:
Publisher:
wheels.yml on pashidl-lab/anofit-src
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
anofit-0.1.0.dev0-cp312-cp312-win_amd64.whl -
Subject digest:
60ea0471fd0ec5292b89798bce7879ac8d795aa22952647a10d8342985887745 - Sigstore transparency entry: 2838316155
- Sigstore integration time:
-
Permalink:
pashidl-lab/anofit-src@d7f225ecb3d3f66f84ee4101d51776a955115ae0 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/pashidl-lab
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@d7f225ecb3d3f66f84ee4101d51776a955115ae0 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file anofit-0.1.0.dev0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: anofit-0.1.0.dev0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 713.9 kB
- Tags: CPython 3.12, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4fe4ec7d30f30ddac1dd0db06e33403521453e862a169702555cd797c600f2fc
|
|
| MD5 |
c3d00aaba569e1fb10760d0c00c315ec
|
|
| BLAKE2b-256 |
dd6c1f65b656623207707b45e1385e1e4eff4ef1d392599034224339289e8a0a
|
Provenance
The following attestation bundles were made for anofit-0.1.0.dev0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
wheels.yml on pashidl-lab/anofit-src
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
anofit-0.1.0.dev0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
4fe4ec7d30f30ddac1dd0db06e33403521453e862a169702555cd797c600f2fc - Sigstore transparency entry: 2838316279
- Sigstore integration time:
-
Permalink:
pashidl-lab/anofit-src@d7f225ecb3d3f66f84ee4101d51776a955115ae0 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/pashidl-lab
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@d7f225ecb3d3f66f84ee4101d51776a955115ae0 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file anofit-0.1.0.dev0-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: anofit-0.1.0.dev0-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 692.3 kB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
98276ee4f0bed0107662bea989dd95ae375fcacc8fea10ce395fc42d0b33fcdc
|
|
| MD5 |
028512a35aa24ace26f8a92b2e315477
|
|
| BLAKE2b-256 |
da5650a41fbf9de72f35a8c43dad5872b66bd99d668efb3a79240e0da530ae56
|
Provenance
The following attestation bundles were made for anofit-0.1.0.dev0-cp311-cp311-win_amd64.whl:
Publisher:
wheels.yml on pashidl-lab/anofit-src
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
anofit-0.1.0.dev0-cp311-cp311-win_amd64.whl -
Subject digest:
98276ee4f0bed0107662bea989dd95ae375fcacc8fea10ce395fc42d0b33fcdc - Sigstore transparency entry: 2838316608
- Sigstore integration time:
-
Permalink:
pashidl-lab/anofit-src@d7f225ecb3d3f66f84ee4101d51776a955115ae0 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/pashidl-lab
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@d7f225ecb3d3f66f84ee4101d51776a955115ae0 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file anofit-0.1.0.dev0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: anofit-0.1.0.dev0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 716.0 kB
- Tags: CPython 3.11, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2cdc18dc8e156092980e1a17ed86d90ce5856bd3bc9cf8e653bf254f20b5b7ef
|
|
| MD5 |
66bda751a428a8883b7052598f237aa5
|
|
| BLAKE2b-256 |
b4f99b0b203d455725651a86aca621f733d0840aaad80f74ba6113d75f8282cf
|
Provenance
The following attestation bundles were made for anofit-0.1.0.dev0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
wheels.yml on pashidl-lab/anofit-src
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
anofit-0.1.0.dev0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
2cdc18dc8e156092980e1a17ed86d90ce5856bd3bc9cf8e653bf254f20b5b7ef - Sigstore transparency entry: 2838316397
- Sigstore integration time:
-
Permalink:
pashidl-lab/anofit-src@d7f225ecb3d3f66f84ee4101d51776a955115ae0 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/pashidl-lab
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@d7f225ecb3d3f66f84ee4101d51776a955115ae0 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file anofit-0.1.0.dev0-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: anofit-0.1.0.dev0-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 692.0 kB
- Tags: CPython 3.10, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e53ed72fc7db31c008995b95e29bcc76b1da04d34f847fe378d3b3ad944ee041
|
|
| MD5 |
0ee505e9b713f3ad9a58c9d830735846
|
|
| BLAKE2b-256 |
4dfe7d7b3d7d7a3ef3174bf8a29b235fb69b7d5c7e69983ae07b9ffdbafa5991
|
Provenance
The following attestation bundles were made for anofit-0.1.0.dev0-cp310-cp310-win_amd64.whl:
Publisher:
wheels.yml on pashidl-lab/anofit-src
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
anofit-0.1.0.dev0-cp310-cp310-win_amd64.whl -
Subject digest:
e53ed72fc7db31c008995b95e29bcc76b1da04d34f847fe378d3b3ad944ee041 - Sigstore transparency entry: 2838316497
- Sigstore integration time:
-
Permalink:
pashidl-lab/anofit-src@d7f225ecb3d3f66f84ee4101d51776a955115ae0 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/pashidl-lab
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@d7f225ecb3d3f66f84ee4101d51776a955115ae0 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file anofit-0.1.0.dev0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: anofit-0.1.0.dev0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 715.6 kB
- Tags: CPython 3.10, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a085fcacfcc3c12aad3bf66abd695a60d5c72a12d2819fb43c4a3b9f8447e263
|
|
| MD5 |
7d44b5467d4cc2acfcd61d6a83b02d60
|
|
| BLAKE2b-256 |
318f7bb22f10fc5eda1d86383bae9273160cd6456d4b97a3e3d69296ef45b8e9
|
Provenance
The following attestation bundles were made for anofit-0.1.0.dev0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
wheels.yml on pashidl-lab/anofit-src
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
anofit-0.1.0.dev0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
a085fcacfcc3c12aad3bf66abd695a60d5c72a12d2819fb43c4a3b9f8447e263 - Sigstore transparency entry: 2838316185
- Sigstore integration time:
-
Permalink:
pashidl-lab/anofit-src@d7f225ecb3d3f66f84ee4101d51776a955115ae0 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/pashidl-lab
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
wheels.yml@d7f225ecb3d3f66f84ee4101d51776a955115ae0 -
Trigger Event:
workflow_dispatch
-
Statement type: