Downloads · 30 days
0
quandao92/clip-based-anomaly-detection
clip-based-anomaly-detection is a machine learning model from quandao92. Use it for the machine learning task on the model card, and read the license before you ship it in a product. It is set up for torch.
<div style='text-align: center; font-size: 28px; font-weight: bold' <h1CLIP 기반 제품 결함 탐지 모델 카드</h1 </div
Downloads · 30 days
0
Access
Public
Updated Oct 27, 2025
Repo size
130 MB
Likes
0
Public
Click a slice to open those files.
.pth129 MB · 99%
From the Hugging Face model README
AnomalyCLIP은 특정 객체에 의존하지 않는 텍스트 프롬프트를 학습하여 이미지 내의 전경 객체와 상관없이 일반적인 정상 및 비정상 패턴을 포착하는 것을 목표로 합니다. 이 모델은 CLIP 기반 이상 탐지 기법을 활용하여 제품 결함을 탐지합니다. 사전 학습된 CLIP 모델을 파인튜닝(Fine-tuning)하여 제품 이미지에서 결함을 식별하며, 이를 통해 생산 라인의 품질 관리 및 결함 탐지 작업을 자동화할 수 있습니다.
| 속성 | 값 |
|---|---|
| 개발자 | 윤석민 |
| 제작 후원 | SOLUWINS Co., Ltd. (솔루윈스) |
| 참고 연구 | zhou2023 anomalyclip [github] |
| 모델 유형 | CLIP (Contrastive Language-Image Pretraining) - Domain-Agnostic Prompt Learning Model |
| 프로그래밍 언어 | Python |
| 라이선스 | Apache 2.0, MIT, OpenAI |
| 제한사항 | 설명 |
|---|---|
| 데이터 요구사항 | 충분하고 다양한 훈련 데이터가 필요하며, 데이터셋이 부족하거나 불균형할 경우 모델 성능이 저하될 수 있습니다. |
| 성능 제한 | 실시간 결함 감지 성능은 하드웨어 사양에 따라 달라질 수 있으며, 높은 해상도에서의 정확도가 떨어질 수 있습니다. |
| 탐지 한계 | 결함이 미세하거나 제품 간 유사성이 매우 높은 경우, 모델이 결함을 정확하게 탐지하지 못할 수 있습니다. |
| 구성 요소 | 사양 |
|---|---|
| CPU | Intel Core i9-13900K (24 Cores, 32 Threads) |
| RAM | 64GB DDR5 |
| GPU | NVIDIA RTX 4090Ti 24GB |
| Storage | 1TB NVMe SSD + 2TB HDD |
| 구성 요소 | 버전 |
|---|---|
| OS | Windows 11 64 bit / Ubuntu 20.04LTS |
| Python | 3.8 (anaconda) |
| PyTorch | 1.9.0 |
| OpenCV | 4.5.3 |
| Cuda Toolkit | 11.8 |
| CuDNN | 9.3.0.75 for cuda11 |
이 모델은 제품의 정상 이미지와 결함 이미지를 사용하여 훈련됩니다. 이 데이터는 제품의 이미지, 결함 영역에 대한 ground truth 정보, 그리고 기타 관련 특성을 포함하고 있습니다. 이미지는 CLIP 모델의 입력 형식에 적합하도록 전처리되며, 결함 영역의 평가를 위해 ground truth 마킹이 포함됩니다.
1차: 20240903_V0_간이 환경 데이터 수집
2차: 20240910_V1_하우징 내 이미지 수집
3차: 20250328_V2_설비 내 데이터 수집
이미지 크기 조정 및 정규화:
Ground Truth 마킹:
데이터 분류:
본 데이터 라벨링 가이드는 AnomalyDetection 기반 모델 학습을 위해 수집된 데이터를 라벨링하는 기준과 프로세스를 명확히 정의합니다. 데이터는 주로 정상(normal) 데이터를 중심으로 구성되며, 최소한의 비정상(anomaly) 데이터를 포함합니다. 본 가이드는 데이터의 품질을 유지하고 모델 학습 및 테스트를 최적화하는 데 목표를 둡니다.
정상(normal) 데이터:
비정상(anomaly) 데이터:
1. 파일 네이밍 규칙
<수집년월일>_<V버전>_<간단한 설명> 형식으로 작성.20240910_V0_간이 환경 데이터 수집.2. 라벨 메타데이터
라벨 메타데이터는 CSV 형식으로 저장하며, 각 데이터의 라벨 및 설명을 포함합니다.
필수 필드:
image_id: 이미지 파일명.label: 정상(normal) 또는 비정상(anomaly) 여부.description: 상세 설명(예: 결함 유형).예시:
{
"image_id": "normal_20241111_001.jpg",
"label": "normal",
"description": "매끄러운 표면을 가진 정상적인 금속 부품, 광택이 균일함."
}
{
"image_id": "abnormal_20241111_002.jpg",
"label": "error",
"description": "표면에 선형 스크래치가 발견됨."
}
AD-CLIP 모델은 CLIP (ViT-B-32)을 백본으로 사용하여 이미지에서 특징을 추출하고, 대조 학습을 통해 이상을 탐지합니다. 최종 출력은 이미지가 비정상인지 정상인지를 판별하는 이상 점수와 각 클래스의 확률을 제공합니다.
<div style="display: flex; justify-content: center; align-items: center; flex-direction: column;"> <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/62sYcSncxxzqGjQAa0MgQ.png" height="500" width="70%"> <p>CLIP-based Anomaly Detection Model Architecture</p> </div>입력 계층 (Input Layer):
Backbone:
Neck:
Head:
optimizer:
name: AdamW # AdamW 옵티마이저 (가중치 감쇠 포함)
lr: 0.0001 # 학습률
loss:
classification_loss: 1.0 # 분류 손실 (교차 엔트로피)
anomaly_loss: 1.0 # 결함 탐지 손실 (이상 탐지 모델에 대한 손실)
contrastive_loss: 1.0 # 대조 학습 손실 (유사도 기반 손실)
하이퍼파라미터 설정:
AD-CLIP 기반 이상탐지 모델은 총 3개 버전으로 관리되고 있으며,
각 버전은 데이터 품질 개선 및 모델 성능 향상에 맞춰 체계적으로 변경·승인되었다.
모든 이력은 데이터 버전, 모델 성능(F1), 승인자, 비고 사항과 함께 기록되어 추적 가능하다.
| 버전 | 변경일 | 주요 변경 내용 | 데이터 버전 | 성능 (F1) | 조치자 | 검수자 | 비고 |
|---|---|---|---|---|---|---|---|
| v1.0.0 | 2024-09-23 | 초기 데이터셋 기반 모델 최초 학습 | 20240910_V0 | 0.91 | 윤석민 | 최종호 | 최초 배포 |
| v1.1.0 | 2024-09-26 | 데이터 증강(회전·조명) 및 Prompt 수정 | 20240920_V1 | 0.94 | 윤석민 | 최종호 | 성능 안정화 |
| v2.0.0 | 2025-06-19 | 데이터 30% 증가, 전체 재학습 수행 | 20250610_V3 | 0.98 | 윤석민 | 최종호 | 2차년도 목표 충족 (고도화 완료) |
AD-CLIP 모델의 변경·교체 시점은 데이터 버전, 코드 버전, 성능 로그, 승인 기록이 상호 연계되며,
이를 통해 모델 신뢰성, 재현성, 추적성을 동시에 확보한다.
| 구분 | 규칙 | 예시 |
|---|---|---|
| 데이터 버전 | YYYYMMDD_V# 형식 | 20240910_V0 |
| 모델 버전 | vX.Y.Z 형식 | v2.0.0 |
| 운영 로그 버전 | LOG_YYYYMMDD 형식 | LOG_20251027 |
| 구분 | 관리 항목 | 설명 |
|---|---|---|
| 데이터 관리 | 수집·라벨링·무결성 검증 | 해시(SHA256) 기반 데이터 추적 |
| 모델 관리 | 학습·평가·재학습 결과 기록 | 각 버전별 체크포인트 및 메타데이터 저장 |
| 운영 관리 | 배포·로그·성능 추적 | 운영 중 Probability·F1 모니터링 |
| 보안 관리 | Adversarial 탐지·Poisoning 방지 | 공격 탐지 시 모델 격리 및 복원 수행 |
| 단계 | 주요 활동 | 산출물 |
|---|---|---|
| ① 성능 감시 | Probability 및 F1 Score 자동 모니터링 | eval_log.json |
| ② 교체 검토 | 기준 미달 시 재학습 모델 생성 | candidate_model.pth |
| ③ 성능 비교 | 기존 vs 신규 모델 검증 | compare_result.xlsx |
| ④ 승인 | 검수자 승인 및 회의록 기록 | approval_log.json |
| ⑤ 배포 | 운영 반영 및 로그 등록 | release_note.md |
| ⑥ 추적 | 모델 교체 이력 업데이트 | model_version_log.csv |
{
"model_name": "ADCLIP_v2.0.0",
"data_version": "20250610_V3",
"created_at": "2025-06-19T10:00:00Z",
"f1_score": 0.98,
"precision": 0.977,
"recall": 0.982,
"optimizer": "AdamW",
"framework": "PyTorch 2.0.0",
"base_model": "openai/clip-vit-base-patch32",
"author": "윤석민 책임연구원",
"reviewer": "최종호 책임연구원",
"status": "Active",
"notes": "2차년도 전체 재학습 및 성능 고도화 버전"
}
이 모델을 실행하려면 Python과 함께 다음 라이브러리가 필요합니다:
pip install -r requirements.txt
Dataset configuration 예시:
├── data/
│ ├── COMP_1/
│ │ ├── product_1/
│ │ │ ├── ground_truth
│ │ │ │ ├── anomaly_1
│ │ │ │ ├── anomaly_2
│ │ │ │
│ │ │ ├── test/
│ │ │ │ ├── good
│ │ │ │ ├── anomaly_1
│ │ │ │ ├── anomaly_2
│ │ │ │
│ │ │ ├── train/
│ │ │ │ ├── good
│ │ │ │ ├── anomaly_1
│ │ │ │ ├── anomaly_2
│ │
│ │ ├── product_2/
│ │
│ │ ├── meta.json
│
│ ├── COMP_2/
데이터셋의 모든 정보를 JSON 파일(meta_train.json, meta_test.json)로 저장:
cd dataset_config
python dataset_get_json.py
수동으로 모든 ground truth(anomaly mask만) 생성:
cd dataset_config
python image_ground_truth.py
cd training_libs
python dataset.py
Dataset 클래스 동작 방식:
__init__ 메서드: 데이터셋의 루트 디렉토리, 변환 함수, 데이터셋 이름, 모드를 입력으로 받습니다generate_class_info 함수를 호출하여 클래스 정보를 생성하고 클래스 이름을 클래스 ID에 매핑합니다__len__ 메서드: 데이터셋의 샘플 수를 반환합니다__getitem__ 메서드: 주어진 인덱스의 샘플 데이터를 반환합니다학습 및 테스트를 위한 이미지 전처리:
# training_libs/utils.py
# AnomalyCLIP_lib/transform.py
Data Processing Techniques:
'Normalize' from 'torchvision.transforms'Custom 'ResizeMaxSize' class'RandomResizedCrop' from 'torchvision.transforms''Resize' with BICUBIC interpolation'CenterCrop''ToTensor''AugmentationCfg'로 설정 가능
Uses 'timm' library if specified# training_lib/prompt_ensemble.py
Prompts Built in the Code:
Normal Prompt: ["{}"]
Anomaly Prompt: ["damaged {}"]
Construction Process:
prompts_pos (Normal): Combines the class name with the normal templateprompts_neg (Anomaly): Combines the class name with the anomaly template학습 데이터셋 경로 및 모델 체크포인트 저장 경로 정의:
parser.add_argument("--train_data_path", type=str, default="./data/", help="train dataset path")
parser.add_argument("--dataset", type=str, default='smoke_cloud', help="train dataset name")
parser.add_argument("--save_path", type=str, default='./checkpoint/', help='path to save results')
프롬프트 학습 중 학습할 임베딩의 깊이를 설정합니다. 이는 모델이 데이터에서 복잡한 특징을 학습하는 능력에 영향을 미칩니다:
parser.add_argument("--depth", type=int, default=9, help="image size")
학습에 사용할 입력 이미지의 크기를 정의합니다 (픽셀 단위):
parser.add_argument("--image_size", type=int, default=518, help="image size")
학습 파라미터 설정:
parser.add_argument("--epoch", type=int, default=500, help="epochs")
parser.add_argument("--learning_rate", type=float, default=0.0001, help="learning rate")
parser.add_argument("--batch_size", type=int, default=8, help="batch size")
DPAM의 크기/깊이 파라미터:
parser.add_argument("--dpam", type=int, default=20, help="dpam size")
DPAM 설정 가이드:
--dpam should be around 10-13--dpam should be around 20-24DPAM 설명:
--dpam), 모델을 얼마나 fine-tune할지 제어합니다--dpam을 모델의 레이어 수로 설정할 수 있습니다 (예: ViT-B의 경우 12, ViT-L의 경우 24)Load pre-trained and Fine tuned (Checkpoints) models:
Pre-trained model (./pre-trained model/):
Fine-tuned models (./checkpoint/):
본 문서는 AnomalyCLIP 모델의 취약점 분석 및 적대적 공격(Adversarial Attacks)에 대한 방어 대책을 체계적으로 수립하기 위해 작성되었습니다. 모델의 신뢰성과 안정성을 확보하고 데이터 무결성을 유지하기 위해, 데이터 및 모델 수준의 방어 전략을 구현하고 성능을 평가한 결과를 포함합니다.
Adversarial Examples:
Data Poisoning:
Evasion Attacks:
데이터 정제:
데이터 증강(Data Augmentation):
데이터 무결성 검증:
Adversarial Training:
Gradient Masking:
Temperature Scaling:
실시간 탐지 및 대응:
자동화된 방어 도구:
| 메트릭 | 기본 데이터 | 적대적 데이터 | 변화율 |
|---|---|---|---|
| Accuracy | 98% | 92% | -6% |
| F1 Score | 0.935 | 0.91 | -2.5% |
| False Positive | 2% | 5% | +3% |
| False Negative | 3% | 7% | +4% |
다양한 공격 기법 테스트:
모델 개선:
실시간 방어 시스템 구축:
본 섹션은 AnomalyCLIP/AD-CLIP 기반 모델 카드의 보안·라이선스 거버넌스를 정의합니다.
목적: 공급망(Software Supply Chain) 리스크 최소화, 라이선스 의무 준수, 재배포/상용화 적합성 확보.
실제 사용하는 버전/라이선스는
pip-licenses/cyclonedx-py산출물로 자동생성하여 본 테이블을 정기 업데이트합니다.
| 패키지 | 버전(예) | 라이선스(예) | 핵심 의무 |
|---|---|---|---|
| ftfy | 6.2.0 | MIT | 저작권 고지 유지 |
| matplotlib | 3.9.0 | PSF/MATPL | 저작권 고지 |
| numpy | 1.24.3 | BSD-3 | 저작권/면책 고지 |
| opencv-python | 4.9.0.80 | Apache-2.0 | NOTICE 포함 권장 |
| pandas | 2.2.2 | BSD-3 | 저작권/면책 고지 |
| Pillow | 10.3.0 | HPND-PIL | 저작권 고지 |
| PyQt5 / PyQt5-sip | 5.15.10 / 12.13.0 | GPLv3/상용듀얼 | 상용 배포·정적 링크 주의 |
| regex | 2024.5.15 | PSF | 저작권 고지 |
| scikit-learn | 1.2.2 | BSD-3 | 저작권 고지 |
| scipy | 1.9.1 | BSD-3 | 저작권 고지 |
| setuptools | 59.5.0 | MIT | 저작권 고지 |
| scikit-image | 최신 | BSD-3 | 저작권 고지 |
| tabulate | 0.9.0 | MIT | 저작권 고지 |
| thop | 0.1.1.post... | MIT | 저작권 고지 |
| timm | 0.6.13 | Apache-2.0 | NOTICE 포함 권장 |
| torch | 2.0.0 | BSD-3 | 저작권 고지 |
| torchvision | 0.15.1 | BSD-3 | 저작권 고지 |
| tqdm | 4.65.0 | MPL-2.0 | 수정 배포 시 소스 공개 요건 확인 |
| pyautogui | 최신 | BSD-3 | 저작권 고지 |
| CLIP 가중치(ViT-B/32 등) | 링크 참조 | OpenAI Terms(모델 가중치) | 상업적 이용 가능 여부/재배포 제한 사항을 개별 약관으로 재확인 필요 |
⚠️ 주의: PyQt5는 GPLv3(또는 상용 라이선스)로 배포됩니다. 상용 배포/정적 링크 시 코드 공개 의무가 발생할 수 있으므로, 필요 시 상용 라이선스 구매 또는 Qt의 대체 GUI(예: PySide6 LGPL, 웹 프론트엔드) 검토가 필요합니다.
⚠️ OpenAI CLIP 가중치는 OpenAI 제공 약관을 반드시 확인해 재배포/상업적 사용 범위를 검증하세요.
LICENSE, NOTICE, THIRD_PARTY_LICENSES/ 유지도구 체인(권장):
cyclonedx-py / pipdeptree → bom.json/bom.xmlpip-licenses --format=jsonpip-audit, safety, (컨테이너) trivy정책:
SECURITY.md에 CVE, 영향범위, 대응상태 기록예시 커맨드:
# SBOM
python -m pip install cyclonedx-bom pipdeptree pip-licenses pip-audit safety
cyclonedx-py -o sbom.json
pipdeptree --json-tree > deps.json
pip-licenses --format=json --with-license-file > THIRD_PARTY_LICENSES/licenses.json
# 취약점
pip-audit # PyPI 에코시스템 취약점 스캔
safety check # 안전성 DB 기반 스캔
# 컨테이너(있을 경우)
trivy fs . # 소스/종속성 스캔
안전하고 재현 가능한 빌드 파이프라인을 유지하여 공급망 리스크를 최소화합니다.
권장 설정:
requirements.txt / constraints.txt)에 정확한 버전(pin) 명시pip-tools를 사용해 의존성 동결 (pip-compile)--require-hashes 옵션으로 해시 검증설치 예시:
pip install pip-tools
pip install cyclonedx-bom pipdeptree pip-licenses pip-audit safety
빌드/검증 명령어:
# 의존성 동결
pip-compile requirements.in --output-file requirements.txt
# SBOM 생성
cyclonedx-py -o sbom.json
# 라이선스 및 의존성 리스트
pip-licenses --format=json --with-license-file > THIRD_PARTY_LICENSES/licenses.json
# 취약점 점검
pip-audit
safety check
모델과 데이터는 AI 공급망의 핵심 자산입니다.
아래 지침은 데이터 무결성과 모델의 신뢰성을 보장하기 위한 최소 보안 기준을 정의합니다.
핵심 목표:
데이터 보안 관리 절차:
| 단계 | 설명 | 도구 / 실행 예시 |
|---|---|---|
| ① 수집 | 원본 데이터 수집 후 MD5/SHA256 해시 기록 | sha256sum dataset.zip > dataset.sha256 |
| ② 검증 | 데이터 로딩 전 해시 일치 여부 확인 | sha256sum -c dataset.sha256 |
| ③ 라벨 관리 | 라벨링 메타데이터를 별도 JSON/CSV로 분리 관리 | meta_train.json, meta_test.json |
| ④ 접근 제어 | 데이터 폴더 권한 최소화 (r-- 권한으로 공유) | chmod 440 data/* |
| ⑤ 버전 관리 | 변경 시점마다 버전명 기록 (예: 20241002_V2) | Git tag 또는 DVC 사용 |
모델 아티팩트 관리:
| 항목 | 관리 방법 | 주의사항 |
|---|---|---|
| 모델 가중치 (.pth) | 체크포인트 파일마다 SHA256 생성 및 보관 | 파일명에 Epoch, 버전, 날짜 포함 (adclip_e120_v2.pth) |
| 학습 로그 | TensorBoard 또는 CSV 포맷으로 기록 | 손실 곡선 및 성능 지표 포함 |
| 모델 설정값 (Config) | config.yaml 파일과 함께 저장 | 하이퍼파라미터 변경 시 버전 변경 필수 |
| 추적성 확보 | MLflow / W&B 또는 로컬 DB 사용 | run_id, commit_id, data_version 연동 |
| 비공개 저장소 관리 | 내부 NAS 또는 S3 Private Bucket 활용 | 공개 저장소 업로드 금지 (특히 고객 이미지 포함 시) |
체크포인트 메타데이터 구조 (예시):
{
"model_name": "ad_clip_epoch_120.pth",
"sha256": "3f83c2a0aef2d7d9c2225b18d9ea435d...",
"data_version": "20241002_V2",
"created_at": "2024-10-12T09:30:00Z",
"train_command": "python train.py --config config.yaml --epochs 200",
"framework": "PyTorch 2.0.0",
"base_model": "openai/clip-vit-base-patch32",
"f1_score": 0.91,
"author": "윤석민",
"organization": "SOLUWINS Co., Ltd."
}
적대적 공격(Adversarial Attack) 방어 강화:
| 공격 유형 | 설명 | 대응 방안 |
|---|---|---|
| FGSM (Fast Gradient Sign Method) | 입력 이미지에 작은 노이즈 추가 | 학습 시 FGSM 샘플 포함 (Adversarial Training) |
| PGD (Projected Gradient Descent) | 반복적으로 노이즈 최적화 | torchattacks 라이브러리 기반 방어 테스트 |
| Data Poisoning | 학습 데이터에 악성 데이터 삽입 | 데이터 정제 및 해시 기반 무결성 검증 |
| Evasion Attack | 추론 시 입력 조작 | 확률 임계값 조정 + Gradient Masking |
무결성 검증 자동화 스크립트 (예시):
#!/bin/bash
echo "[INFO] Starting dataset integrity check..."
for file in $(cat dataset.sha256 | awk '{print $2}'); do
sha256sum -c dataset.sha256 --status $file
if [ $? -eq 0 ]; then
echo "[OK] $file integrity verified."
else
echo "[ERROR] $file integrity mismatch!"
exit 1
fi
done
echo "[INFO] Dataset integrity check completed successfully."
권장 도구:
| 목적 | 도구 | 비고 |
|---|---|---|
| 데이터 버전 관리 | DVC (Data Version Control) | Git 연동 가능 |
| 모델 실험 추적 | MLflow / W&B | 하이퍼파라미터 및 결과 추적 |
| 보안 스캔 | trivy, safety, pip-audit | 의존성 취약점 점검 |
| 무결성 검증 | sha256sum / openssl dgst | 해시 기반 검증 |
예시 워크플로우 (모델 아카이브 생성):
# 1. 해시 생성
sha256sum ad_clip_epoch_120.pth > ad_clip_epoch_120.pth.sha256
# 2. 메타데이터 생성
python gen_metadata.py --model ad_clip_epoch_120.pth --out model_info.json
# 3. 아카이브 패키징
tar -czvf adclip_model_v2.tar.gz ad_clip_epoch_120.pth model_info.json
# 4. 업로드 전 무결성 검증
sha256sum -c ad_clip_epoch_120.pth.sha256
문서화 예시:
/security/model_security/README.md파일 내 포함 권장
# Model Artifact Security Policy
- 모든 모델 가중치는 SHA256 기반 무결성 검증 후 업로드됩니다.
- 각 모델에는 학습 환경, 데이터 버전, 하이퍼파라미터가 명시된 `model_info.json`이 포함됩니다.
- 데이터셋 및 모델 변경 시, 새로운 버전 태그(`_Vx.x`)를 부여하고 SBOM을 재생성합니다.
오픈소스 라이선스 및 데이터셋·모델 약관을 준수하여 법적 리스크를 방지합니다.
원칙:
| 라이선스 | 사용 가능성 | 주의사항 |
|---|---|---|
| MIT / BSD / Apache-2.0 | 자유로운 상업적 사용 가능 | 저작권, NOTICE 파일 유지 |
| GPL / MPL 등 카피레프트 | 조건부 허용 | 링크 방식에 따라 소스 공개 의무 발생 |
| OpenAI CLIP 가중치 | 제한적 | 상업적 이용 약관 별도 확인 필요 |
| HuggingFace Dataset | 출처별 확인 | 데이터 제공자 약관 준수 필요 |
체크리스트:
THIRD_PARTY_LICENSES/ 최신화프로세스 상 책임과 권한을 명확히 정의합니다.
| 활동 | Responsible | Consulted | Accountable |
|---|---|---|---|
| 신규 OSS 도입 검토 | 개발팀 | 보안팀, 법무 | 보안팀장 |
| SBOM/라이선스 스캔 | 개발팀 | 보안팀 | 보안팀장 |
| 취약점 패치 적용 | 개발팀 | 보안팀 | 개발팀장 |
| 릴리스 승인 | 개발팀 | 보안·법무 | 제품 책임자(PO) |
릴리스/병합 전 보안·법적 준수를 위한 점검 항목입니다.
- [ ] requirements.txt 버전 핀 및 해시 포함
- [ ] pip-audit / safety: High·Critical 취약점 없음
- [ ] SBOM(cyclonedx-py) 생성 및 커밋
- [ ] THIRD_PARTY_LICENSES/ 갱신 완료
- [ ] NOTICE 및 LICENSE 최신화
- [ ] 모델 가중치·데이터셋 약관 검증 문서 첨부
- [ ] GUI 프레임워크(PyQt5 등) 상용성 검토 결과 첨부
- [ ] CI 빌드·테스트 통과