| | --- |
| | tags: |
| | - clipsegmentation |
| | - pytorch |
| | - research |
| | - computer-vision |
| | library_name: torch |
| | datasets: |
| | - quandao92/ad-clip-dataset |
| | metrics: |
| | - f1 |
| | base_model: |
| | - openai/clip-vit-base-patch32 |
| | --- |
| | |
| | <div style='text-align: center; font-size: 28px; font-weight: bold'> |
| | <h1>CLIP ๊ธฐ๋ฐ ์ ํ ๊ฒฐํจ ํ์ง ๋ชจ๋ธ ์นด๋</h1> |
| | </div> |
| |
|
| | ## ๋ชฉ์ฐจ (Table of Contents) |
| |
|
| | - [๋ชจ๋ธ ์ธ๋ถ์ฌํญ](#๋ชจ๋ธ-์ธ๋ถ์ฌํญ) |
| | - [๋ชจ๋ธ ์ค๋ช
](#๋ชจ๋ธ-์ค๋ช
) |
| | - [๊ธฐ์ ์ ์ ํ์ฌํญ](#๊ธฐ์ ์ -์ ํ์ฌํญ) |
| | - [ํ์ต ์ธ๋ถ์ฌํญ](#ํ์ต-์ธ๋ถ์ฌํญ) |
| | - [ํ๋์จ์ด ํ๊ฒฝ](#ํ๋์จ์ด-ํ๊ฒฝ) |
| | - [์ํํธ์จ์ด ํ๊ฒฝ](#์ํํธ์จ์ด-ํ๊ฒฝ) |
| | - [๋ฐ์ดํฐ์
์ ๋ณด](#๋ฐ์ดํฐ์
-์ ๋ณด) |
| | - [๋ฐ์ดํฐ ๋ผ๋ฒจ๋ง ๊ฐ์ด๋](#๋ฐ์ดํฐ-๋ผ๋ฒจ๋ง-๊ฐ์ด๋) |
| | - [AD-CLIP Model Architecture](#ad-clip-model-architecture) |
| | - [Optimizer and Loss Function](#optimizer-and-loss-function) |
| | - [Metrics](#metrics) |
| | - [Training Parameters](#training-parameters) |
| | - [Pre-trained CLIP model](#pre-trained-clip-model) |
| | - [Evaluation Parameters](#evaluation-parameters) |
| | - [ํ์ต ์ฑ๋ฅ ๋ฐ ํ
์คํธ ๊ฒฐ๊ณผ](#ํ์ต-์ฑ๋ฅ-๋ฐ-ํ
์คํธ-๊ฒฐ๊ณผ) |
| | - [๋ชจ๋ธ ๋ณ๊ฒฝ ์ด๋ ฅ](#๋ชจ๋ธ-๋ณ๊ฒฝ-์ด๋ ฅ-model-update-history) |
| | - [๋ชจ๋ธ ๋ฒ์ ๊ด๋ฆฌ ์ฒด๊ณ](#๋ชจ๋ธ-๋ฒ์ -๊ด๋ฆฌ-์ฒด๊ณ-model-version-management) |
| | - [์ค์น ๋ฐ ์คํ ๊ฐ์ด๋](#์ค์น-๋ฐ-์คํ-๊ฐ์ด๋) |
| | - [๋ชจ๋ธ ์คํ ๋จ๊ณ](#๋ชจ๋ธ-์คํ-๋จ๊ณ) |
| | - [Dataset Configuration](#dataset-configuration) |
| | - [Image Pre-processing](#2-image-pre-processing-transformation) |
| | - [Prompt Generating](#3-prompt-generating) |
| | - [Initial Setting for Training](#4-initial-setting-for-training) |
| | - [Hyper Parameters Setting](#5-hyper-parameters-setting) |
| | - [Depth Parameter](#depth-parameter) |
| | - [Image Size](#image-size) |
| | - [Training Parameters](#training-parameters) |
| | - [DPAM (Deep Prompt Attention Mechanism)](#dpam-deep-prompt-attention-mechanism) |
| | - [Test Process](#6-test-process) |
| | - [๋ชจ๋ธ ๊ณต๊ฒฉ ์ทจ์ฝ์ ๋ถ์](#๋ชจ๋ธ-๊ณต๊ฒฉ-์ทจ์ฝ์ -๋ถ์) |
| | - [์คํ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ณด์ยท๋ผ์ด์ ์ค ์ํ ๊ด๋ฆฌ ์ฒด๊ณ](#์คํ์์ค-๋ผ์ด๋ธ๋ฌ๋ฆฌ-๋ณด์๋ผ์ด์ ์ค-์ํ-๊ด๋ฆฌ-์ฒด๊ณ) |
| | - [References](#references) |
| |
|
| | --- |
| |
|
| | ## ๋ชจ๋ธ ์ธ๋ถ์ฌํญ |
| |
|
| | ### ๋ชจ๋ธ ์ค๋ช
|
| |
|
| | AnomalyCLIP์ ํน์ ๊ฐ์ฒด์ ์์กดํ์ง ์๋ ํ
์คํธ ํ๋กฌํํธ๋ฅผ ํ์ตํ์ฌ ์ด๋ฏธ์ง ๋ด์ ์ ๊ฒฝ ๊ฐ์ฒด์ ์๊ด์์ด ์ผ๋ฐ์ ์ธ ์ ์ ๋ฐ ๋น์ ์ ํจํด์ ํฌ์ฐฉํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค. |
| | ์ด ๋ชจ๋ธ์ CLIP ๊ธฐ๋ฐ ์ด์ ํ์ง ๊ธฐ๋ฒ์ ํ์ฉํ์ฌ ์ ํ ๊ฒฐํจ์ ํ์งํฉ๋๋ค. |
| | ์ฌ์ ํ์ต๋ CLIP ๋ชจ๋ธ์ ํ์ธํ๋(Fine-tuning)ํ์ฌ ์ ํ ์ด๋ฏธ์ง์์ ๊ฒฐํจ์ ์๋ณํ๋ฉฐ, ์ด๋ฅผ ํตํด ์์ฐ ๋ผ์ธ์ ํ์ง ๊ด๋ฆฌ ๋ฐ ๊ฒฐํจ ํ์ง ์์
์ ์๋ํํ ์ ์์ต๋๋ค. |
| |
|
| | | ์์ฑ | ๊ฐ | |
| | |------|-----| |
| | | **๊ฐ๋ฐ์** | ์ค์๋ฏผ | |
| | | **์ ์ ํ์** | SOLUWINS Co., Ltd. (์๋ฃจ์์ค) | |
| | | **์ฐธ๊ณ ์ฐ๊ตฌ** | zhou2023 anomalyclip [[github](https://github.com/zqhang/AnomalyCLIP.git)] | |
| | | **๋ชจ๋ธ ์ ํ** | 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 ๋งํน์ด ํฌํจ๋ฉ๋๋ค. |
| |
|
| | - **๋ฐ์ดํฐ ์์ค:** https://huggingface.co/datasets/quandao92/ad-clip-dataset |
| | - **๋ฐ์ดํฐ ์์ง ์ฅ๋น:** |
| | - ์์ง H/W: jetson orin nano 8GB |
| | - ์นด๋ฉ๋ผ: BFS-U3-89S6C Color Camera |
| | - ๋ ์ฆ: 8mm Fiexd Focal Length Lens |
| | - ์กฐ๋ช
: LIDLA-120070 |
| | - ๋ฐ์ดํฐ ํ์: .bpm, .jpg |
| |
|
| | #### ๋ฐ์ดํฐ ๋ฒ์ ๊ด๋ฆฌ |
| |
|
| | **1์ฐจ: 20240903_V0_๊ฐ์ด ํ๊ฒฝ ๋ฐ์ดํฐ ์์ง** |
| | - V01: ์ ์ฒ๋ฆฌ ์ ๋ฐ์ดํฐ ์๋ณธ โ ๋ฐ์ดํฐ ์์ง ์๋ณธ: 120ea |
| | - V02: ๋ฐ์ดํฐ ๋ถ๋ฅ โ ์ ์/๋ถ๋ ๋ถ๋ฅ: 116ea/4ea |
| | - V03: ๋ฐ์ดํฐ ๋ถ๋ฅ, ๋ฐ์ดํฐ ํ์ โ ์ด๋ฏธ์ง ์ฆ๊ฐ_45/90/135๋๋ก ํ์ _360ea |
| |
|
| | <div style="text-align: center;"> |
| | <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/6kvzgbH81jJrHJECaEspY.png" height="500" width="100%"> |
| | <p>Ground Truth Marking</p> |
| | </div> |
| |
|
| | <div style="display: flex; justify-content: space-between;"> |
| | <div style="text-align: center; margin-right: 5px;"> |
| | <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/_fkcI52_BTcqvQyrJ4EXl.png" height="80%" width="90%" style="margin-right:5px;"> |
| | <p>PCA ๋ถํฌ ์๊ฐํ</p> |
| | </div> |
| | <div style="text-align: center; margin-right: 5px;"> |
| | <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/biaWPJtbm6iwNf7ZqnW5O.png" height="80%" width="90%" style="margin-right:5px;"> |
| | <p>Isolation Forest๋ก ์ด์๊ฐ ์๋ณ ๊ฒฐ๊ณผ</p> |
| | </div> |
| | </div> |
| | |
| | **2์ฐจ: 20240910_V1_ํ์ฐ์ง ๋ด ์ด๋ฏธ์ง ์์ง** |
| | - V01: ์ ์ฒ๋ฆฌ ์ ๋ฐ์ดํฐ ์๋ณธ โ ๋ฐ์ดํฐ ์์ง ์๋ณธ: 350ea |
| | - V02: ๋ฐ์ดํฐ ๋ถ๋ฅ โ ์ ์/๋ถ๋ ๋ถ๋ฅ: 336ea/14ea |
| | - V03: ๋ฐ์ดํฐ ๋ถ๋ฅ, ๋ฐ์ดํฐ ํ์ โ ์ด๋ฏธ์ง ์ฆ๊ฐ: 1,050ea |
| |
|
| | <div style="text-align: center;"> |
| | <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/YsP7UwejFabUFp2Im0xWj.png" height="500" width="100%"> |
| | <p>Ground Truth Marking</p> |
| | </div> |
| |
|
| | <div style="display: flex; justify-content: space-between;"> |
| | <div style="text-align: center; margin-right: 5px;"> |
| | <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/CNFdse5mHQY1KkMb5BYpb.png" height="80%" width="90%" style="margin-right:5px;"> |
| | <p>PCA ๋ถํฌ ์๊ฐํ</p> |
| | </div> |
| | <div style="text-align: center; margin-right: 5px;"> |
| | <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/nRO00DJFT0-B1EJYf8lzK.png" height="80%" width="90%" style="margin-right:5px;"> |
| | <p>Isolation Forest๋ก ์ด์๊ฐ ์๋ณ ๊ฒฐ๊ณผ</p> |
| | </div> |
| | </div> |
| | |
| | **3์ฐจ: 20250328_V2_์ค๋น ๋ด ๋ฐ์ดํฐ ์์ง** |
| | - V01: ์ ์ฒ๋ฆฌ ์ ๋ฐ์ดํฐ ์๋ณธ โ ์ด๋ฏธ์ง ์์ง_2,010๊ฐ |
| | - V02: ๋ฐ์ดํฐ ๋ถ๋ฅ โ ์ ์/๋ถ๋ ๋ถ๋ฅ ์ํ_1,918/92 |
| | - V03: ๋ฐ์ดํฐ ๋ถ๋ฅ, ๋ฐ์ดํฐ ํ์ โ ์ด๋ฏธ์ง ์ฆ๊ฐ ์ํ_์ด๋ฏธ์ง ํ์ ์ ํตํด ์ด๋ฏธ์ง ๊ฐ์ 6,030๊ฐ |
| | |
| | <div style="text-align: center;"> |
| | <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/MFyVWaqr4GDNs8W2mWzGZ.png" height="500" width="100%"> |
| | <p>Ground Truth Marking</p> |
| | </div> |
| | |
| | <div style="display: flex; justify-content: space-between;"> |
| | <div style="text-align: center; margin-right: 5px;"> |
| | <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/Kc3EMbY05frUFQh5HbVHn.png" height="80%" width="90%" style="margin-right:5px;"> |
| | <p>PCA ๋ถํฌ ์๊ฐํ</p> |
| | </div> |
| | <div style="text-align: center; margin-right: 5px;"> |
| | <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/SP4R5LjGo2M1Zvby1Bar_.png" height="80%" width="90%" style="margin-right:5px;"> |
| | <p>Isolation Forest๋ก ์ด์๊ฐ ์๋ณ ๊ฒฐ๊ณผ</p> |
| | </div> |
| | </div> |
| | |
| | #### Data Configuration |
| | |
| | **์ด๋ฏธ์ง ํฌ๊ธฐ ์กฐ์ ๋ฐ ์ ๊ทํ:** |
| | - ์ด๋ฏธ์ง๋ ์ผ์ ํ ํฌ๊ธฐ(์: 518x518)๋ก ๋ฆฌ์ฌ์ด์ฆ๋๋ฉฐ, CLIP ๋ชจ๋ธ์ ์
๋ ฅ์ผ๋ก ์ ํฉํ๊ฒ ์ฒ๋ฆฌ๋ฉ๋๋ค. |
| | - ์ ๊ทํ๋ฅผ ํตํด ํฝ์
๊ฐ์ [0, 1] ๋ฒ์๋ก ๋ณํํฉ๋๋ค. |
| | |
| | **Ground Truth ๋งํน:** |
| | - ๊ฒฐํจ์ด ์๋ ์ด๋ฏธ์ง์ ๋ํด ๊ฒฐํจ ์์ญ์ bounding box ํ์ ๋๋ binary mask๋ก ํ์ํฉ๋๋ค. |
| | - ๋งํน๋ ๋ฐ์ดํฐ๋ฅผ JSON ๋๋ CSV ํ์์ผ๋ก ์ ์ฅํ์ฌ ๋ชจ๋ธ ํ๊ฐ ์ ์ฌ์ฉํฉ๋๋ค. |
| | |
| | <div style="text-align: center;"> |
| | <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/k8GQgaTK7JfQExNpCYpzz.png" height="500" width="100%" style="margin-right:5px;"> |
| | <p>Ground Truth Marking</p> |
| | </div> |
| | |
| | **๋ฐ์ดํฐ ๋ถ๋ฅ:** |
| | - Normal: ๊ฒฐํจ์ด ์๋ ์ ์ ์ ํ์ ์ด๋ฏธ์ง. |
| | - Error: ๊ฒฐํจ์ด ์๋ ์ ํ์ ์ด๋ฏธ์ง. ๊ฒฐํจ ์์น์ ๊ด๋ จ ์ ๋ณด๊ฐ ํฌํจ๋ฉ๋๋ค. |
| | |
| | <div style="display: flex;justify-content: space-between;"> |
| | <div style="text-align: center;margin-right: 5px;"> |
| | <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/5pGwZ-sptjWjf7WpHifyJ.jpeg" height="400" width="450"> |
| | </div> |
| | <div style="text-align: center;justify-content: space-between; margin-right: 5px;"> |
| | <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/3iihck7VfkXKw9VcIl06x.jpeg" height="400" width="450"> |
| | </div> |
| | <div style="text-align: center;justify-content: space-between;margin-right: 5px;"> |
| | <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/tjsmiXq9pp0K6KSuS1iOS.jpeg" height="400" width="450"> |
| | </div> |
| | </div> |
| | <p style="text-align: center;">Normal Product Images</p> |
| | |
| | <div style="display: flex;justify-content: space-between;"> |
| | <div style="text-align: center;margin-right: 5px;"> |
| | <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/Qv01zDzEM5u8cQYdALrSU.jpeg" height="400" width="450"> |
| | </div> |
| | <div style="text-align: center;justify-content: space-between; margin-right: 5px;"> |
| | <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/B5q_FKiTVXkuElTSlUc4s.jpeg" height="400" width="450"> |
| | </div> |
| | <div style="text-align: center;justify-content: space-between;margin-right: 5px;"> |
| | <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/3pro8oEqMTiEwiwFKcACn.jpeg" height="400" width="450"> |
| | </div> |
| | </div> |
| | <p style="text-align: center;">Error Product Images</p> |
| | |
| | ### ๋ฐ์ดํฐ ๋ผ๋ฒจ๋ง ๊ฐ์ด๋ |
| | |
| | ๋ณธ ๋ฐ์ดํฐ ๋ผ๋ฒจ๋ง ๊ฐ์ด๋๋ AnomalyDetection ๊ธฐ๋ฐ ๋ชจ๋ธ ํ์ต์ ์ํด ์์ง๋ ๋ฐ์ดํฐ๋ฅผ ๋ผ๋ฒจ๋งํ๋ ๊ธฐ์ค๊ณผ ํ๋ก์ธ์ค๋ฅผ ๋ช
ํํ ์ ์ํฉ๋๋ค. |
| | ๋ฐ์ดํฐ๋ ์ฃผ๋ก ์ ์(normal) ๋ฐ์ดํฐ๋ฅผ ์ค์ฌ์ผ๋ก ๊ตฌ์ฑ๋๋ฉฐ, ์ต์ํ์ ๋น์ ์(anomaly) ๋ฐ์ดํฐ๋ฅผ ํฌํจํฉ๋๋ค. |
| | ๋ณธ ๊ฐ์ด๋๋ ๋ฐ์ดํฐ์ ํ์ง์ ์ ์งํ๊ณ ๋ชจ๋ธ ํ์ต ๋ฐ ํ
์คํธ๋ฅผ ์ต์ ํํ๋ ๋ฐ ๋ชฉํ๋ฅผ ๋ก๋๋ค. |
| | |
| | #### ๋ผ๋ฒจ๋ง ๋ฒ์ |
| | |
| | 1. **์ ์(normal) ๋ฐ์ดํฐ:** |
| | - ์ ์ฒด ๋ฐ์ดํฐ์ ์ฝ **95% ์ด์**์ ์ฐจ์ง. |
| | - ๋ค์ํ ํ๊ฒฝ ์กฐ๊ฑด์์ ์์ง๋ ๋ฐ์ดํฐ๋ฅผ ํฌํจ (์กฐ๋ช
, ๊ฐ๋, ๋ฐฐ๊ฒฝ ๋ฑ). |
| | - ์ ์์ ์ธ ์ํ์ ๊ธ์ ํ๋ฉด, ์ ๋ฐํ ๊ตฌ์กฐ, ๊ท ์ผํ ๊ดํ์ ๊ฐ์ง ๋ฐ์ดํฐ. |
| | |
| | 2. **๋น์ ์(anomaly) ๋ฐ์ดํฐ:** |
| | - ์ ์ฒด ๋ฐ์ดํฐ์ ์ฝ **5% ์ดํ**๋ก ์ ํ. |
| | - ๊ฒฐํจ ์ ํ: |
| | - **Scratch**: ์คํฌ๋์น. |
| | - **Contamination**: ์ผ๋ฃฉ ๋๋ ์ด๋ฌผ์ง. |
| | - **Crack**: ํ๋ฉด ๊ท ์ด. |
| | |
| | #### ๋ฐ์ดํฐ ๋ผ๋ฒจ๋ง ๊ธฐ์ค |
| | |
| | **1. ํ์ผ ๋ค์ด๋ฐ ๊ท์น** |
| | - ๋ฐ์ดํฐ ๋ฒ์ ๋ณ ํ์ผ๋ช
์ ๋ฒ์ ๋ณ๋ก ์์ดํจ. |
| | - ๊ฐ ๋ฒ์ ์ ๋ฐ์ดํฐ ๊ด๋ฆฌ ๋ฌธ์ ์ฐธ๊ณ . |
| | - ๋ฐ์ดํฐ ํด๋๋ช
์ **`<์์ง๋
์์ผ>_<V๋ฒ์ >_<๊ฐ๋จํ ์ค๋ช
>`** ํ์์ผ๋ก ์์ฑ. |
| | - ์์: `20240910_V0_๊ฐ์ด ํ๊ฒฝ ๋ฐ์ดํฐ ์์ง`. |
| | |
| | **2. ๋ผ๋ฒจ ๋ฉํ๋ฐ์ดํฐ** |
| | |
| | ๋ผ๋ฒจ ๋ฉํ๋ฐ์ดํฐ๋ CSV ํ์์ผ๋ก ์ ์ฅํ๋ฉฐ, ๊ฐ ๋ฐ์ดํฐ์ ๋ผ๋ฒจ ๋ฐ ์ค๋ช
์ ํฌํจํฉ๋๋ค. |
| | |
| | ํ์ ํ๋: |
| | - `image_id`: ์ด๋ฏธ์ง ํ์ผ๋ช
. |
| | - `label`: ์ ์(`normal`) ๋๋ ๋น์ ์(`anomaly`) ์ฌ๋ถ. |
| | - `description`: ์์ธ ์ค๋ช
(์: ๊ฒฐํจ ์ ํ). |
| |
|
| | ์์: |
| | ```json |
| | { |
| | "image_id": "normal_20241111_001.jpg", |
| | "label": "normal", |
| | "description": "๋งค๋๋ฌ์ด ํ๋ฉด์ ๊ฐ์ง ์ ์์ ์ธ ๊ธ์ ๋ถํ, ๊ดํ์ด ๊ท ์ผํจ." |
| | } |
| | { |
| | "image_id": "abnormal_20241111_002.jpg", |
| | "label": "error", |
| | "description": "ํ๋ฉด์ ์ ํ ์คํฌ๋์น๊ฐ ๋ฐ๊ฒฌ๋จ." |
| | } |
| | ``` |
| |
|
| | ## AD-CLIP Model Architecture |
| |
|
| | 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):** |
| | - ์
๋ ฅ ์ด๋ฏธ์ง: ๋ชจ๋ธ์ ํฌ๊ธฐ [640, 640, 3]์ ์ด๋ฏธ์ง๋ฅผ ์
๋ ฅ๋ฐ์ต๋๋ค. ์ฌ๊ธฐ์ 640x640์ ์ด๋ฏธ์ง์ ๊ฐ๋ก์ ์ธ๋ก ํฌ๊ธฐ์ด๋ฉฐ, 3์ RGB ์์์ ์ฑ๋ ์๋ฅผ ๋ํ๋
๋๋ค. |
| | - ๊ธฐ๋ฅ: ์ด ๊ณ์ธต์ ์
๋ ฅ๋ ์ด๋ฏธ์ง๋ฅผ ์ฒ๋ฆฌํ๊ณ ๋ชจ๋ธ์ ๋๋จธ์ง ๋ถ๋ถ์ ๋ง๋ ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ค๋นํ๋ ์ญํ ์ ํฉ๋๋ค. |
| |
|
| | **Backbone:** |
| | - CLIP (ViT-B-32): ๋ชจ๋ธ์ CLIP์ Vision Transformer (ViT-B-32) ์ํคํ
์ฒ๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง์์ ํน์ง์ ์ถ์ถํฉ๋๋ค. ViT-B-32๋ ์ด๋ฏธ์ง๋ฅผ ์ดํดํ๋ ๋ฐ ํ์ํ ๊ณ ๊ธ ํน์ฑ์ ์ถ์ถํ ์ ์๋ ๋ฅ๋ ฅ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. |
| | - ํํฐ: ํํฐ ํฌ๊ธฐ [32, 64, 128, 256, 512]๋ ๊ฐ ViT ๋ ์ด์ด์์ ์ฌ์ฉ๋๋ฉฐ, ์ด๋ฏธ์ง์ ๊ฐ ๋ ๋ฒจ์์ ์ค์ํ ์ ๋ณด๋ฅผ ์ถ์ถํ์ฌ ํน์ง์ ํ์ตํฉ๋๋ค. |
| |
|
| | **Neck:** |
| | - ์ด์ ํ์ง ๋ชจ๋ (Anomaly Detection Module): ์ด ๋ชจ๋์ CLIP์์ ์ถ์ถ๋ ํน์ง์ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ฏธ์ง๋ฅผ ๋ถ์ํ๊ณ ์ด์ ์ฌ๋ถ๋ฅผ ํ๋จํฉ๋๋ค. ์ด ๋จ๊ณ์์๋ ์ด๋ฏธ์ง ๋ด์์ ์ ์๊ณผ ๋น์ ์ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ๋ณํ๊ธฐ ์ํ ์ค์ํ ์ฒ๋ฆฌ๊ฐ ์ด๋ฃจ์ด์ง๋๋ค. |
| | - ๋์กฐ ํ์ต (Contrastive Learning): ๋์กฐ ํ์ต ๋ฐฉ๋ฒ์ ์ ์ ์ด๋ฏธ์ง์ ๋น์ ์ ์ด๋ฏธ์ง ๊ฐ์ ์ฐจ์ด๋ฅผ ํ์ตํ์ฌ, ์ด๋ฏธ์ง์ ์ด์ ์ฌ๋ถ๋ฅผ ๋์ฑ ๋ช
ํํ๊ฒ ๊ตฌ๋ถํ ์ ์๊ฒ ๋์์ค๋๋ค. |
| |
|
| | **Head:** |
| | - ์ด์ ํ์ง ํค๋ (Anomaly Detection Head): ๋ชจ๋ธ์ ๋ง์ง๋ง ๋ถ๋ถ์ผ๋ก, ์ด ๊ณ์ธต์ ์ด๋ฏธ์ง๊ฐ ๋น์ ์์ ์ธ์ง ์ ์์ ์ธ์ง๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. |
| | - Outputs: |
| | - ์ด์ ์ ์ (Anomaly Score): ๋ชจ๋ธ์ ์ด๋ฏธ์ง๊ฐ ์ด์์ธ์ง ์๋์ง๋ฅผ ๋ํ๋ด๋ ์ ์(์: 1์ ์ด์, 0์ ์ ์)๋ฅผ ์ถ๋ ฅํฉ๋๋ค. |
| | - ํด๋์ค ํ๋ฅ (Class Probabilities): ๋ชจ๋ธ์ ๊ฐ ํด๋์ค์ ๋ํ ํ๋ฅ ์ ์ถ๋ ฅํ๋ฉฐ, ์ด ํ๋ฅ ์ ํตํด ๊ฒฐํจ์ด ์๋์ง ์๋์ง์ ์ฌ๋ถ๋ฅผ ํ๋จํฉ๋๋ค. |
| |
|
| | ## Optimizer and Loss Function |
| |
|
| | ### Training |
| |
|
| | **optimizer:** |
| | ```python |
| | name: AdamW # AdamW ์ตํฐ๋ง์ด์ (๊ฐ์ค์น ๊ฐ์ ํฌํจ) |
| | lr: 0.0001 # ํ์ต๋ฅ |
| | ``` |
| |
|
| | **loss:** |
| | ```python |
| | classification_loss: 1.0 # ๋ถ๋ฅ ์์ค (๊ต์ฐจ ์ํธ๋กํผ) |
| | anomaly_loss: 1.0 # ๊ฒฐํจ ํ์ง ์์ค (์ด์ ํ์ง ๋ชจ๋ธ์ ๋ํ ์์ค) |
| | contrastive_loss: 1.0 # ๋์กฐ ํ์ต ์์ค (์ ์ฌ๋ ๊ธฐ๋ฐ ์์ค) |
| | ``` |
| |
|
| | ## Metrics |
| |
|
| | - Precision # ์ ๋ฐ๋ (Precision) |
| | - Recall # ์ฌํ์จ (Recall) |
| | - mAP # ํ๊ท ์ ๋ฐ๋ (Mean Average Precision) |
| | - F1-Score # F1-์ ์ (๊ท ํ ์กํ ํ๊ฐ ์งํ) |
| |
|
| | ## Training Parameters |
| |
|
| | **ํ์ดํผํ๋ผ๋ฏธํฐ ์ค์ :** |
| | - Learning Rate: 0.001 |
| | - Batch Size: 8 |
| | - Epochs: 200 |
| |
|
| | ## Pre-trained CLIP model |
| |
|
| | | Model | Download | |
| | | --- | --- | |
| | | ViT-B/32 | [download](https://openaipublic.azureedge.net/clip/models/40d365715913c9da98579312b702a82c18be219cc2a73407c4526f58eba950af/ViT-B-32.pt) | |
| | | ViT-B/16 | [download](https://openaipublic.azureedge.net/clip/models/5806e77cd80f8b59890b7e101eabd078d9fb84e6937f9e85e4ecb61988df416f/ViT-B-16.pt) | |
| | | ViT-L/14 | [download](https://openaipublic.azureedge.net/clip/models/b8cca3fd41ae0c99ba7e8951adf17d267cdb84cd88be6f7c2e0eca1737a03836/ViT-L-14.pt) | |
| | | ViT-L/14@336px | [download](https://openaipublic.azureedge.net/clip/models/3035c92b350959924f9f00213499208652fc7ea050643e8b385c2dac08641f02/ViT-L-14-336px.pt) | |
| |
|
| | ## Evaluation Parameters |
| |
|
| | - F1-score: 90% ์ด์ (1๋
์ฐจ) |
| | - F1-score: 98% ์ด์ (2๋
์ฐจ) |
| |
|
| | ## ํ์ต ์ฑ๋ฅ ๋ฐ ํ
์คํธ ๊ฒฐ๊ณผ |
| |
|
| | ### ํ์ต์ฑ๋ฅ ๊ฒฐ๊ณผ ๊ทธ๋ํ |
| |
|
| | <div style="display: flex; justify-content: space-between; margin-bottom: 10px;"> |
| | <div style="text-align: center; margin-right: 20px;"> |
| | <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/7Q1RzKyia-WNSCJHnk2-d.png" height="80%" width="100%" style="margin-right:5px;"> |
| | </div> |
| | <div style="text-align: center; margin-right: 20px;"> |
| | <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/9PyBtPZMACgN1lJOqlVbG.png" height="80%" width="100%" style="margin-right:5px;"> |
| | </div> |
| | </div> |
| | <p style="text-align: center;">ํ์ต ๊ณผ์ ์์</p> |
| | |
| | <div style="display: flex; justify-content: space-between;"> |
| | <div style="text-align: center; margin-right: 20px;"> |
| | <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/_lUD77x-yueXycuIn7jya.png" height="80%" width="100%" style="margin-right:5px;"> |
| | <p>1์ฐจ ํ์ต ์ฑ๋ฅ</p> |
| | </div> |
| | <div style="text-align: center; margin-right: 20px;"> |
| | <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/NHDH9N94cI-KqP8k-ASUN.png" height="80%" width="100%" style="margin-right:5px;"> |
| | <p>2์ฐจ ํ์ต ์ฑ๋ฅ</p> |
| | </div> |
| | <div style="text-align: center; margin-right: 20px;"> |
| | <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/6n0DnnQjXD8Ql-p3Owxan.png" height="80%" width="100%" style="margin-right:5px;"> |
| | <p>3์ฐจ ํ์ต ์ฑ๋ฅ</p> |
| | </div> |
| | </div> |
| | |
| | ### ํ
์คํธ ๊ฒฐ๊ณผํ |
| |
|
| | <div style="display: flex; justify-content: space-between;"> |
| | <div style="text-align: center; margin-right: 20px;"> |
| | <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/u1DQHjXM41DMq1JIUOGlp.png" height="100%" width="100%" style="margin-right:5px;"> |
| | </div> |
| | <div style="text-align: center; margin-right: 20px;"> |
| | <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/ndQ60TKlheW8hmOrMBELU.png" height="100%" width="100%" style="margin-right:5px;"> |
| | </div> |
| | </div> |
| | |
| | ### ํ
์คํธ ๊ฒฐ๊ณผ |
| |
|
| | <div style="display: flex; justify-content: space-between;"> |
| | <div style="text-align: center; margin-right: 20px;"> |
| | <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/A91V0GdrcUcX01cC-biG9.png" height="600" width="1000" style="margin-right:5px;"> |
| | <p>Anomaly Product</p> |
| | </div> |
| | <div style="text-align: center; margin-right: 20px;"> |
| | <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/PxleIhphzViTGCubVhWn7.png" height="600" width="1000" style="margin-right:5px;"> |
| | <p>Normal Product</p> |
| | </div> |
| | </div> |
| | |
| | --- |
| |
|
| | ## ๋ชจ๋ธ ๋ณ๊ฒฝ ์ด๋ ฅ (Model Update History) |
| |
|
| | > 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์ฐจ๋
๋ ๋ชฉํ ์ถฉ์กฑ (๊ณ ๋ํ ์๋ฃ) | |
| | |
| | --- |
| | |
| | ## ๋ชจ๋ธ ๋ฒ์ ๊ด๋ฆฌ ์ฒด๊ณ (Model Version Management) |
| | |
| | > 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` | |
| |
|
| | --- |
| |
|
| | ### ๋ชจ๋ธ ๋ฉํ๋ฐ์ดํฐ ์์ |
| |
|
| | ```json |
| | { |
| | "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๊ณผ ํจ๊ป ๋ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค: |
| |
|
| | ### ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ |
| |
|
| | - **ftfy==6.2.0**: ํ
์คํธ ์ ๊ทํ ๋ฐ ์ธ์ฝ๋ฉ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ |
| | - **matplotlib==3.9.0**: ๋ฐ์ดํฐ ์๊ฐํ ๋ฐ ๊ทธ๋ํ ์์ฑ์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ |
| | - **numpy==1.24.3**: ์์น ์ฐ์ฐ์ ์ํ ํต์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ |
| | - **opencv_python==4.9.0.80**: ์ด๋ฏธ์ง ๋ฐ ๋น๋์ค ์ฒ๋ฆฌ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ |
| | - **pandas==2.2.2**: ๋ฐ์ดํฐ ๋ถ์ ๋ฐ ์กฐ์์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ |
| | - **Pillow==10.3.0**: ์ด๋ฏธ์ง ํ์ผ ์ฒ๋ฆฌ ๋ฐ ๋ณํ์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ |
| | - **PyQt5==5.15.10**: GUI ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ ์ํ ํ๋ ์์ํฌ |
| | - **PyQt5_sip==12.13.0**: PyQt5์ Python ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ |
| | - **regex==2024.5.15**: ์ ๊ท ํํ์ ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ |
| | - **scikit_learn==1.2.2**: ๊ธฐ๊ณ ํ์ต ๋ฐ ๋ฐ์ดํฐ ๋ถ์์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ |
| | - **scipy==1.9.1**: ๊ณผํ ๋ฐ ๊ธฐ์ ๊ณ์ฐ์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ |
| | - **setuptools==59.5.0**: Python ํจํค์ง ๋ฐฐํฌ ๋ฐ ์ค์น๋ฅผ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ |
| | - **scikit-image**: ์ด๋ฏธ์ง ์ฒ๋ฆฌ ๋ฐ ๋ถ์์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ |
| | - **tabulate==0.9.0**: ํ ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ |
| | - **thop==0.1.1.post2209072238**: PyTorch ๋ชจ๋ธ์ FLOP ์๋ฅผ ๊ณ์ฐํ๋ ๋๊ตฌ |
| | - **timm==0.6.13**: ๋ค์ํ ์ต์ ์ด๋ฏธ์ง ๋ถ๋ฅ ๋ชจ๋ธ์ ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ |
| | - **torch==2.0.0**: PyTorch ๋ฅ๋ฌ๋ ํ๋ ์์ํฌ |
| | - **torchvision==0.15.1**: ์ปดํจํฐ ๋น์ ์์
์ ์ํ PyTorch ํ์ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ |
| | - **tqdm==4.65.0**: ์งํ ์ํฉ์ ์๊ฐ์ ์ผ๋ก ํ์ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ |
| | - **pyautogui**: GUI ์๋ํ๋ฅผ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ |
| | |
| | ### ์ค์น ๋ช
๋ น์ด |
| | |
| | ```bash |
| | pip install -r requirements.txt |
| | ``` |
| | |
| | --- |
| | |
| | ## ๋ชจ๋ธ ์คํ ๋จ๊ณ |
| | |
| | ### Dataset Configuration |
| | |
| | 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 ํ์ผ ์์ฑ |
| | |
| | ๋ฐ์ดํฐ์
์ ๋ชจ๋ ์ ๋ณด๋ฅผ JSON ํ์ผ(meta_train.json, meta_test.json)๋ก ์ ์ฅ: |
| | |
| | ```bash |
| | cd dataset_config |
| | python dataset_get_json.py |
| | ``` |
| | |
| | #### Ground Truth ์์ฑ |
| | |
| | ์๋์ผ๋ก ๋ชจ๋ ground truth(anomaly mask๋ง) ์์ฑ: |
| | |
| | ```bash |
| | cd dataset_config |
| | python image_ground_truth.py |
| | ``` |
| | |
| | #### ํ์ต ๋ฐ ํ
์คํธ์ฉ ๋ฐ์ดํฐ์
์ค์ |
| | |
| | ```bash |
| | cd training_libs |
| | python dataset.py |
| | ``` |
| | |
| | **Dataset ํด๋์ค ๋์ ๋ฐฉ์:** |
| | - `__init__` ๋ฉ์๋: ๋ฐ์ดํฐ์
์ ๋ฃจํธ ๋๋ ํ ๋ฆฌ, ๋ณํ ํจ์, ๋ฐ์ดํฐ์
์ด๋ฆ, ๋ชจ๋๋ฅผ ์
๋ ฅ์ผ๋ก ๋ฐ์ต๋๋ค |
| | - ๋ฉํ ์ ๋ณด๋ฅผ ๋ด์ JSON ํ์ผ (meta_train.json)์ ์ฝ์ด์ ํด๋์ค ์ด๋ฆ ๋ชฉ๋ก๊ณผ ๋ชจ๋ ๋ฐ์ดํฐ ํญ๋ชฉ์ ๋ฆฌ์คํธ์ ์ ์ฅํฉ๋๋ค |
| | - `generate_class_info` ํจ์๋ฅผ ํธ์ถํ์ฌ ํด๋์ค ์ ๋ณด๋ฅผ ์์ฑํ๊ณ ํด๋์ค ์ด๋ฆ์ ํด๋์ค ID์ ๋งคํํฉ๋๋ค |
| | - `__len__` ๋ฉ์๋: ๋ฐ์ดํฐ์
์ ์ํ ์๋ฅผ ๋ฐํํฉ๋๋ค |
| | - `__getitem__` ๋ฉ์๋: ์ฃผ์ด์ง ์ธ๋ฑ์ค์ ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํฉ๋๋ค |
| | - ์ด๋ฏธ์ง ๊ฒฝ๋ก๋ฅผ ํตํด ์ด๋ฏธ์ง๋ฅผ ์ฝ๊ณ , ์ด์ ์ฌ๋ถ์ ๋ฐ๋ผ ๋ง์คํฌ ์ด๋ฏธ์ง๋ฅผ ์์ฑํฉ๋๋ค |
| | - ํ์์ ์ด๋ฏธ์ง์ ๋ง์คํฌ์ ๋ณํ ํจ์๋ฅผ ์ ์ฉํฉ๋๋ค |
| | - ์ด๋ฏธ์ง, ๋ง์คํฌ, ํด๋์ค ์ด๋ฆ, ์ด์ ์ฌ๋ถ, ์ด๋ฏธ์ง ๊ฒฝ๋ก, ํด๋์ค ID๋ฅผ ํฌํจํ ๋์
๋๋ฆฌ๋ฅผ ๋ฐํํฉ๋๋ค |
| | |
| | ### 2. Image Pre-processing (Transformation) |
| | |
| | ํ์ต ๋ฐ ํ
์คํธ๋ฅผ ์ํ ์ด๋ฏธ์ง ์ ์ฒ๋ฆฌ: |
| | |
| | ```python |
| | # training_libs/utils.py |
| | # AnomalyCLIP_lib/transform.py |
| | ``` |
| | |
| | **Data Processing Techniques:** |
| | - **normalization**: ์ด๋ฏธ์ง ํฝ์
๊ฐ์ ํ๊ท ๋ฐ ํ์คํธ์ฐจ๋ก ํ์คํ |
| | - ๋ฐฉ๋ฒ: `'Normalize' from 'torchvision.transforms'` |
| | - **max_resize**: ์ด๋ฏธ์ง์ ์ต๋ ํฌ๊ธฐ๋ฅผ ์ ์งํ๋ฉฐ, ๋น์จ์ ๋ง์ถ๊ณ ํจ๋ฉ์ ์ถ๊ฐํ์ฌ ํฌ๊ธฐ ์กฐ์ |
| | - ๋ฐฉ๋ฒ: `Custom 'ResizeMaxSize' class` |
| | - **random_resized_crop**: ํ๋ จ ์ค์ ์ด๋ฏธ์ง๋ฅผ ๋๋ค์ผ๋ก ์๋ฅด๊ณ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ์ฌ ๋ณํ์ ์ถ๊ฐ |
| | - ๋ฐฉ๋ฒ: `'RandomResizedCrop' from 'torchvision.transforms'` |
| | - **resize**: ๋ชจ๋ธ ์
๋ ฅ์ ๋ง๊ฒ ์ด๋ฏธ์ง๋ฅผ ๊ณ ์ ๋ ํฌ๊ธฐ๋ก ์กฐ์ |
| | - ๋ฐฉ๋ฒ: `'Resize' with BICUBIC interpolation` |
| | - **center_crop**: ์ด๋ฏธ์ง์ ์ค์ ๋ถ๋ถ์ ์ง์ ๋ ํฌ๊ธฐ๋ก ์๋ฅด๊ธฐ |
| | - ๋ฐฉ๋ฒ: `'CenterCrop'` |
| | - **to_tensor**: ์ด๋ฏธ์ง๋ฅผ PyTorch ํ
์๋ก ๋ณํ |
| | - ๋ฐฉ๋ฒ: `'ToTensor'` |
| | - **augmentation (optional)**: ๋ฐ์ดํฐ ์ฆ๊ฐ์ ์ํด ๋ค์ํ ๋๋ค ๋ณํ ์ ์ฉ, `'AugmentationCfg'`๋ก ์ค์ ๊ฐ๋ฅ |
| | - ๋ฐฉ๋ฒ: `Uses 'timm' library if specified` |
| |
|
| | ### 3. Prompt Generating |
| |
|
| | ```python |
| | # training_lib/prompt_ensemble.py |
| | ``` |
| |
|
| | **Prompts Built in the Code:** |
| |
|
| | 1. Normal Prompt: `["{}"]` |
| | - Normal Prompt Example: "object" |
| |
|
| | 2. Anomaly Prompt: `["damaged {}"]` |
| | - Anomaly Prompt Example: "damaged object" |
| |
|
| | **Construction Process:** |
| |
|
| | 1. `prompts_pos (Normal)`: Combines the class name with the normal template |
| | 2. `prompts_neg (Anomaly)`: Combines the class name with the anomaly template |
| |
|
| | ### 4. Initial Setting for Training |
| |
|
| | ํ์ต ๋ฐ์ดํฐ์
๊ฒฝ๋ก ๋ฐ ๋ชจ๋ธ ์ฒดํฌํฌ์ธํธ ์ ์ฅ ๊ฒฝ๋ก ์ ์: |
| |
|
| | ```python |
| | 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') |
| | ``` |
| |
|
| | ### 5. Hyper Parameters Setting |
| |
|
| | #### Depth Parameter |
| |
|
| | ํ๋กฌํํธ ํ์ต ์ค ํ์ตํ ์๋ฒ ๋ฉ์ ๊น์ด๋ฅผ ์ค์ ํฉ๋๋ค. ์ด๋ ๋ชจ๋ธ์ด ๋ฐ์ดํฐ์์ ๋ณต์กํ ํน์ง์ ํ์ตํ๋ ๋ฅ๋ ฅ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค: |
| |
|
| | ```python |
| | parser.add_argument("--depth", type=int, default=9, help="image size") |
| | ``` |
| |
|
| | #### Image Size |
| |
|
| | ํ์ต์ ์ฌ์ฉํ ์
๋ ฅ ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ฅผ ์ ์ํฉ๋๋ค (ํฝ์
๋จ์): |
| |
|
| | ```python |
| | parser.add_argument("--image_size", type=int, default=518, help="image size") |
| | ``` |
| |
|
| | #### Training Parameters |
| |
|
| | ํ์ต ํ๋ผ๋ฏธํฐ ์ค์ : |
| |
|
| | ```python |
| | 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 (Deep Prompt Attention Mechanism) |
| |
|
| | DPAM์ ํฌ๊ธฐ/๊น์ด ํ๋ผ๋ฏธํฐ: |
| |
|
| | ```python |
| | parser.add_argument("--dpam", type=int, default=20, help="dpam size") |
| | ``` |
| |
|
| | **DPAM ์ค์ ๊ฐ์ด๋:** |
| | - ViT-B/32 and ViT-B/16: `--dpam` should be around 10-13 |
| | - ViT-L/14 and ViT-L/14@336px: `--dpam` should be around 20-24 |
| |
|
| | **DPAM ์ค๋ช
:** |
| | - DPAM์ ํนํ Vision Transformers (ViT)์์ ๋ชจ๋ธ์ ํน์ ๋ ์ด์ด๋ฅผ ๊ฐ์ ํ๊ณ ํฅ์์ํค๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค |
| | - Attention ๋ฉ์ปค๋์ฆ์ ํตํด ๋ชจ๋ธ์ด ๊ฐ ๋ ์ด์ด ๋ด์์ ์ค์ํ ํน์ง์ ์ง์คํ ์ ์๋๋ก ๋์์ค๋๋ค |
| | - DPAM์ ์ฌ๋ฌ ๋ ์ด์ด์ ์ ์ฉ๋์ด ๋ ๊น๊ณ ์ธ๋ถ์ ์ธ ํน์ง ์ถ์ถ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค |
| | - DPAM์ด ์ํฅ์ ๋ฏธ์น๋ ๋ ์ด์ด ์๋ ์กฐ์ ๊ฐ๋ฅํฉ๋๋ค (`--dpam`), ๋ชจ๋ธ์ ์ผ๋ง๋ fine-tuneํ ์ง ์ ์ดํฉ๋๋ค |
| | - ์ ์ฒด ๋ชจ๋ธ์ ๊ฐ์ ํ๋ ค๋ฉด `--dpam`์ ๋ชจ๋ธ์ ๋ ์ด์ด ์๋ก ์ค์ ํ ์ ์์ต๋๋ค (์: ViT-B์ ๊ฒฝ์ฐ 12, ViT-L์ ๊ฒฝ์ฐ 24) |
| | - ์ต์ข
๋ ์ด์ด(์ผ๋ฐ์ ์ผ๋ก ๋ชจ๋ธ์ด ๋ณต์กํ ํน์ง์ ํ์ตํ๋ ๊ณณ)์๋ง ์ง์คํ๋ ค๋ฉด ๋ ์ ์ DPAM ๋ ์ด์ด๋ฅผ ์ ํํ ์ ์์ต๋๋ค |
| |
|
| | ### 6. Test Process |
| |
|
| | **Load pre-trained and Fine tuned (Checkpoints) models:** |
| |
|
| | 1. **Pre-trained model** (`./pre-trained model/`): |
| | - ์ฌ์ ํ์ต๋ ๋ชจ๋ธ (ViT-B, ViT-L, ๋ฑ) ํฌํจ |
| | - CLIP ๋ชจ๋ธ ํ์ต์ ์์์ ์ผ๋ก ์ฌ์ฉ๋จ |
| | - ์ฌ์ ํ์ต๋ ๋ชจ๋ธ์ ์ด์ ์ ํ์ต๋ ํน์ง์ ํ์ฉํ์ฌ ํ์ต ์๋๋ฅผ ๋์ด๊ณ ๊ฐ์ ํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค |
| |
|
| | 2. **Fine-tuned models** (`./checkpoint/`): |
| | - ์ด ํด๋์ "epoch_N.pth" ํ์ผ์ fine-tuning ๊ณผ์ ์ค ๋ชจ๋ธ์ ์ํ๋ฅผ ์ ์ฅํฉ๋๋ค |
| | - ๊ฐ ".pth" ํ์ผ์ ์ฌ์ ํ์ต๋ ๋ชจ๋ธ์์ fine-tuned๋ ๋ชจ๋ธ์ ๋ฒ์ ์ ๋ํ๋
๋๋ค |
| | - ์ด๋ฌํ ์ฒดํฌํฌ์ธํธ๋ fine-tuning ์ฌ๊ฐ, ๋ค์ํ ๋จ๊ณ์์ ๋ชจ๋ธ ํ๊ฐ, ๋๋ ์ฑ๋ฅ์ด ๊ฐ์ฅ ์ข์ ๋ฒ์ ์ ํ์ ์ฌ์ฉํ ์ ์์ต๋๋ค |
| | |
| | --- |
| | |
| | ## ๋ชจ๋ธ ๊ณต๊ฒฉ ์ทจ์ฝ์ ๋ถ์ |
| | |
| | ๋ณธ ๋ฌธ์๋ AnomalyCLIP ๋ชจ๋ธ์ ์ทจ์ฝ์ ๋ถ์ ๋ฐ ์ ๋์ ๊ณต๊ฒฉ(Adversarial Attacks)์ ๋ํ ๋ฐฉ์ด ๋์ฑ
์ ์ฒด๊ณ์ ์ผ๋ก ์๋ฆฝํ๊ธฐ ์ํด ์์ฑ๋์์ต๋๋ค. |
| | ๋ชจ๋ธ์ ์ ๋ขฐ์ฑ๊ณผ ์์ ์ฑ์ ํ๋ณดํ๊ณ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ๊ธฐ ์ํด, ๋ฐ์ดํฐ ๋ฐ ๋ชจ๋ธ ์์ค์ ๋ฐฉ์ด ์ ๋ต์ ๊ตฌํํ๊ณ ์ฑ๋ฅ์ ํ๊ฐํ ๊ฒฐ๊ณผ๋ฅผ ํฌํจํฉ๋๋ค. |
| | |
| | ### 1. ์ทจ์ฝ์ ๋ถ์ |
| | |
| | #### ์ ๋์ ๊ณต๊ฒฉ ์๋๋ฆฌ์ค |
| | |
| | 1. **Adversarial Examples:** |
| | - ์ค๋ช
: ์
๋ ฅ ๋ฐ์ดํฐ์ ์์ ๋
ธ์ด์ฆ๋ฅผ ์ถ๊ฐํ์ฌ ๋ชจ๋ธ์ ์์ธก์ ์๊ณกํฉ๋๋ค. |
| | - ์: ์ ์ ์ด๋ฏธ์ง๋ฅผ ๊ฒฐํจ ์ด๋ฏธ์ง๋ก ์์ธกํ๋๋ก ์ ๋ํฉ๋๋ค. |
| | |
| | 2. **Data Poisoning:** |
| | - ์ค๋ช
: ํ์ต ๋ฐ์ดํฐ์ ์
์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์
ํ์ฌ ๋ชจ๋ธ ํ์ต์ ์๊ณกํฉ๋๋ค. |
| | - ์: ๋น์ ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ ๋ฐ์ดํฐ๋ก ํ์ต์ํค๋ ๊ฒฝ์ฐ์
๋๋ค. |
| | |
| | 3. **Evasion Attacks:** |
| | - ์ค๋ช
: ์ถ๋ก ์ ๋ชจ๋ธ์ ๋ถ๋ฅ ๊ฒฐ๊ณผ๋ฅผ ์กฐ์ํฉ๋๋ค. |
| | - ์: ๊ฒฐํจ ๋ฐ์ดํฐ๋ฅผ ์ ์์ผ๋ก ์์ธกํ๋๋ก ์ ๋ํฉ๋๋ค. |
| | |
| | #### ๋ชจ๋ธ ๋ฐ ๋ฐ์ดํฐ์
์ํฅ |
| | |
| | - ์ฑ๋ฅ ์ ํ: ์ ๋์ ์ํ ์
๋ ฅ ์ ๋ชจ๋ธ์ ์ ํ๋ ๊ฐ์ |
| | - ๋ฌด๊ฒฐ์ฑ ์์: ๋ฐ์ดํฐ ๋ณ์กฐ๋ก ์ธํด ํ์ต๋ ๋ชจ๋ธ์ด ์ค์ ํ๊ฒฝ์์ ์ ๋ขฐ์ฑ์ ์์ค |
| | - ์
์์ ํ์ฉ ๊ฐ๋ฅ์ฑ: ๋ชจ๋ธ์ ์์ฌ๊ฒฐ์ ์ด ์ค์๋ํ์ฌ ์์ฐ ํ์ง ๊ด๋ฆฌ ์คํจ ๊ฐ๋ฅ์ฑ ์ฆ๊ฐ |
| | |
| | ### 2. ๋์ ๋ฐฉ์ |
| | |
| | #### ๋ฐ์ดํฐ ์์ค ๋ฐฉ์ด ๋์ฑ
|
| | |
| | 1. **๋ฐ์ดํฐ ์ ์ :** |
| | - ํ๋ฆฟํ๊ฑฐ๋ ์๋ฆฐ ์ด๋ฏธ์ง ์ ๊ฑฐ |
| | - ๋ฐ์ดํฐ ๋
ธ์ด์ฆ ์ ๊ฑฐ ๋ฐ ๊ฒฐํจ ๋ณต๊ตฌ |
| | - ๊ฒฐ๊ณผ: ๋ฐ์ดํฐ ํ์ง ๊ฐํ๋ก ์ ๋์ ๋
ธ์ด์ฆ ํจ๊ณผ ๊ฐ์ |
| | |
| | 2. **๋ฐ์ดํฐ ์ฆ๊ฐ(Data Augmentation):** |
| | - ๋๋ค ํ์ , ํฌ๊ธฐ ์กฐ์ , ๋ฐ๊ธฐ ๋ฐ ๋๋น ์กฐ์ |
| | - Gaussian Noise ๋ฐ Salt-and-Pepper Noise ์ถ๊ฐ |
| | - ๊ฒฐ๊ณผ: ๋ฐ์ดํฐ ๋ค์์ฑ ํ๋ณด ๋ฐ ๋ชจ๋ธ ์ผ๋ฐํ ์ฑ๋ฅ ๊ฐํ |
| | |
| | 3. **๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๊ฒ์ฆ:** |
| | - ๊ฐ ๋ฐ์ดํฐ ํด์๊ฐ(MD5) ์ ์ฅ ๋ฐ ์๋ณ์กฐ ์ฌ๋ถ ํ์ธ |
| | - ๊ฒฐ๊ณผ: ๋ฐ์ดํฐ์
์ ๋ขฐ์ฑ ๋ฐ ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ |
| | |
| | #### ๋ชจ๋ธ ์์ค ๋ฐฉ์ด ๋์ฑ
|
| | |
| | 1. **Adversarial Training:** |
| | - FGSM ๊ธฐ๋ฐ์ ์ ๋์ ์ํ์ ํ์ต ๋ฐ์ดํฐ์ ํฌํจ |
| | - ๊ฒฐ๊ณผ: ์ ๋์ ์ํ์์๋ ํ๊ท ์ ํ๋ 5% ํฅ์ |
| | |
| | 2. **Gradient Masking:** |
| | - ๊ทธ๋๋์ธํธ๋ฅผ ์จ๊ฒจ ๋ชจ๋ธ์ด ์ ๋์ ๊ณต๊ฒฉ์ ๋
ธ์ถ๋์ง ์๋๋ก ๋ฐฉ์ด |
| | |
| | 3. **Temperature Scaling:** |
| | - ๋ชจ๋ธ์ ์์ธก ํ๋ฅ ์ ์กฐ์ ํ์ฌ ์ ๋์ ์ํ ๋ฏผ๊ฐ๋ ์ํ |
| | |
| | #### ์์คํ
์์ค ๋ฐฉ์ด ๋์ฑ
|
| | |
| | 1. **์ค์๊ฐ ํ์ง ๋ฐ ๋์:** |
| | - ์
๋ ฅ ๋ฐ์ดํฐ์ ์ด์ ํจํด์ ์ค์๊ฐ์ผ๋ก ํ์งํ๋ ์์คํ
๊ตฌ์ถ |
| | - ๊ฒฐ๊ณผ: ์ ๋์ ๊ณต๊ฒฉ ๋ฐ์ ์ ์ฆ๊ฐ์ ์ธ ๊ฒฝ๊ณ ๋ฐ ๋์ ๊ฐ๋ฅ |
| | |
| | 2. **์๋ํ๋ ๋ฐฉ์ด ๋๊ตฌ:** |
| | - Adversarial Examples ์์ฑ ๋ฐ ๋ฐฉ์ด ํ
์คํธ ์๋ํ |
| | |
| | ### 3. ์คํ ๊ฒฐ๊ณผ |
| | |
| | #### ํ๊ฐ ๋ฐ์ดํฐ |
| | |
| | - ์ ์ ๋ฐ์ดํฐ: 110๊ฑด |
| | - ๊ฒฐํจ ๋ฐ์ดํฐ: 10๊ฑด |
| | - ์ ๋์ ๋ฐ์ดํฐ(FGSM ๊ณต๊ฒฉ): 100๊ฑด |
| | |
| | #### ์ฃผ์ ์ฑ๋ฅ ์งํ |
| | |
| | | ๋ฉํธ๋ฆญ | ๊ธฐ๋ณธ ๋ฐ์ดํฐ | ์ ๋์ ๋ฐ์ดํฐ | ๋ณํ์จ | |
| | |--------|------------|---------------|--------| |
| | | Accuracy | 98% | 92% | -6% | |
| | | F1 Score | 0.935 | 0.91 | -2.5% | |
| | | False Positive | 2% | 5% | +3% | |
| | | False Negative | 3% | 7% | +4% | |
| | |
| | ### 4. ํฅํ ๊ณํ |
| | |
| | 1. **๋ค์ํ ๊ณต๊ฒฉ ๊ธฐ๋ฒ ํ
์คํธ:** |
| | - PGD, DeepFool ๋ฑ ์๋ก์ด ๊ณต๊ฒฉ ๊ธฐ๋ฒ ์ ์ฉ ๋ฐ ํ๊ฐ |
| | |
| | 2. **๋ชจ๋ธ ๊ฐ์ :** |
| | - Contrastive Learning ๋ฐ ์์๋ธ ํ์ต์ ํตํ ๊ฒฌ๊ณ ์ฑ ๊ฐํ |
| | |
| | 3. **์ค์๊ฐ ๋ฐฉ์ด ์์คํ
๊ตฌ์ถ:** |
| | - ๋ชจ๋ธ์ ์ค์๊ฐ ์์ธก ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ์ฌ ์ ๋์ ์
๋ ฅ ํ์ง ๋ฐ ์ฐจ๋จ |
| | |
| | --- |
| | |
| | ## ์คํ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ณด์ยท๋ผ์ด์ ์ค ์ํ ๊ด๋ฆฌ ์ฒด๊ณ |
| | |
| | > ๋ณธ ์น์
์ AnomalyCLIP/AD-CLIP ๊ธฐ๋ฐ ๋ชจ๋ธ ์นด๋์ **๋ณด์ยท๋ผ์ด์ ์ค ๊ฑฐ๋ฒ๋์ค**๋ฅผ ์ ์ํฉ๋๋ค. |
| | > ๋ชฉ์ : ๊ณต๊ธ๋ง(Software Supply Chain) ๋ฆฌ์คํฌ ์ต์ํ, ๋ผ์ด์ ์ค ์๋ฌด ์ค์, ์ฌ๋ฐฐํฌ/์์ฉํ ์ ํฉ์ฑ ํ๋ณด. |
| | |
| | ### 1) ๋ฒ์(Scope) & ์์น |
| | |
| | - ๋์: ํ์ต/์ถ๋ก ์ฝ๋, ์คํฌ๋ฆฝํธ, ๋๊ตฌ ์ฒด์ธ, ํ์ ์ฐ์ถ๋ฌผ(๊ฐ์ค์นยท์ฒดํฌํฌ์ธํธยทGUI ์คํํ์ผ), ๋ฐฐํฌ ๋ฒ๋ค(whl/zip/docker) |
| | - ์์น: |
| | - ์ต์๊ถํ(Principle of Least Privilege) |
| | - ์ฌํ๊ฐ๋ฅ ๋น๋(Reproducible Build) |
| | - ํฌ๋ช
์ฑ(๋ช
์์ ๋ผ์ด์ ์ค ๊ณ ์ง) |
| | - ์ ์ํ ์ทจ์ฝ์ ํจ์น |
| | - ์์ฉ ๋ฐฐํฌ ์ ๋ชจ๋ OSS ์๋ฌด(์ ์๊ถ/NOTICE/์์ค ์ ๊ณต ๋ฒ์ ๋ฑ) ์ ์ดํ ํ ๋ฐฐํฌ |
| | |
| | ### 2) ๋ผ์ด๋ธ๋ฌ๋ฆฌ & ๋ผ์ด์ ์ค ๋งคํธ๋ฆญ์ค |
| | |
| | > ์ค์ ์ฌ์ฉํ๋ ๋ฒ์ /๋ผ์ด์ ์ค๋ `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 ์ ๊ณต ์ฝ๊ด์ ๋ฐ๋์ ํ์ธํด ์ฌ๋ฐฐํฌ/์์
์ ์ฌ์ฉ ๋ฒ์๋ฅผ ๊ฒ์ฆํ์ธ์. |
| | |
| | ### 3) ๋ฐฐํฌ ์ ํ์ ๊ณ ์ง(Attribution) & NOTICE |
| | |
| | - ์ ์ฅ์ ๋ฃจํธ์ `LICENSE`, `NOTICE`, `THIRD_PARTY_LICENSES/` ์ ์ง |
| | - ํจํค์ง๋ณ ์ ์๊ถยท๋ฉด์ฑ
๊ณ ์ง ํฌํจ(์๋์์ง ์ฐ์ถ๋ฌผ ๋ณํฉ) |
| | - ๋ชจ๋ธ ๊ฐ์ค์น/๋ฐ์ดํฐ์
์ ์์ ์์ยท์ฝ๊ด์ README์ ๋ช
์ |
| | |
| | ### 4) ์ทจ์ฝ์ ๊ด๋ฆฌ ํ๋ก์ธ์ค (CVE/SBOM) |
| | |
| | **๋๊ตฌ ์ฒด์ธ(๊ถ์ฅ):** |
| | - SBOM: `cyclonedx-py` / `pipdeptree` โ `bom.json`/`bom.xml` |
| | - ๋ผ์ด์ ์ค: `pip-licenses --format=json` |
| | - ์ทจ์ฝ์ : `pip-audit`, `safety`, (์ปจํ
์ด๋) `trivy` |
| | |
| | **์ ์ฑ
:** |
| | 1. ์ฃผ๊ธฐ์ ์ค์บ: ๋ฉ์ธ ๋ธ๋์น ์ฃผ 1ํ, ๋ฆด๋ฆฌ์ค ์ง์ 1ํ |
| | 2. ์๊ณ์น: High/CRITICAL ๋ฐ๊ฒฌ ์ ๋ฆด๋ฆฌ์ค ์ค๋จ, ํจ์น/์ฐํ๋ฒ์ ํ๊ฐ |
| | 3. ๋ณ๊ฒฝ๊ด๋ฆฌ: ํจ์น ํ ํ๊ท ํ
์คํธ, ์ฑ๋ฅ ์ํฅ ๋ณด๊ณ |
| | 4. ์ถ์ : `SECURITY.md`์ CVE, ์ํฅ๋ฒ์, ๋์์ํ ๊ธฐ๋ก |
| | |
| | **์์ ์ปค๋งจ๋:** |
| | |
| | ```bash |
| | # 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 . # ์์ค/์ข
์์ฑ ์ค์บ |
| | ``` |
| | |
| | ### 5. ๊ฐ๋ฐยท๋น๋ ๋ณด์ (Development & Build Security) |
| | |
| | > ์์ ํ๊ณ ์ฌํ ๊ฐ๋ฅํ ๋น๋ ํ์ดํ๋ผ์ธ์ ์ ์งํ์ฌ ๊ณต๊ธ๋ง ๋ฆฌ์คํฌ๋ฅผ ์ต์ํํฉ๋๋ค. |
| | |
| | **๊ถ์ฅ ์ค์ :** |
| | - ์ ๊ธํ์ผ(`requirements.txt` / `constraints.txt`)์ ์ ํํ ๋ฒ์ (pin) ๋ช
์ |
| | - `pip-tools`๋ฅผ ์ฌ์ฉํด ์์กด์ฑ ๋๊ฒฐ (`pip-compile`) |
| | - CI/CD์์ `--require-hashes` ์ต์
์ผ๋ก ํด์ ๊ฒ์ฆ |
| | - ๋ฐฐํฌ ์ํฐํฉํธ์ SHA256 ํด์ ๋ฐ SBOM ํฌํจ |
| | - API Key / Token์ ์ฝ๋์ ์ ๋ ํฌํจ ๊ธ์ง (ํ๊ฒฝ๋ณ์ ๋๋ Secret Manager ์ฌ์ฉ) |
| | - ์๋ช
/๋ฌด๊ฒฐ์ฑ ๊ด๋ฆฌ: ํด์ ๊ฒ์ฆ ๋ฐ SBOM ๋์ ๋ฐฐํฌ |
| | - ๊ถํ ๋ถ๋ฆฌ: ํ์ต/์ถ๋ก ์๋ฒ๋ ์ต์ ๊ถํ์ผ๋ก ์คํ |
| | |
| | **์ค์น ์์:** |
| | |
| | ```bash |
| | pip install pip-tools |
| | pip install cyclonedx-bom pipdeptree pip-licenses pip-audit safety |
| | ``` |
| | |
| | **๋น๋/๊ฒ์ฆ ๋ช
๋ น์ด:** |
| | |
| | ```bash |
| | # ์์กด์ฑ ๋๊ฒฐ |
| | 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 |
| | ``` |
| | |
| | ### 6. ๋ฐ์ดํฐยท๋ชจ๋ธ ์ํฐํฉํธ ๋ณด์ (Data & Model Artifact Security) |
| | |
| | > ๋ชจ๋ธ๊ณผ ๋ฐ์ดํฐ๋ AI ๊ณต๊ธ๋ง์ ํต์ฌ ์์ฐ์
๋๋ค. |
| | > ์๋ ์ง์นจ์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ๊ณผ ๋ชจ๋ธ์ ์ ๋ขฐ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํ ์ต์ ๋ณด์ ๊ธฐ์ค์ ์ ์ํฉ๋๋ค. |
| | |
| | **ํต์ฌ ๋ชฉํ:** |
| | 1. ํ์ต ๋ฐ ํ๊ฐ ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ(Integrity) ๋ณด์ฅ |
| | 2. ๋ชจ๋ธ ์ฒดํฌํฌ์ธํธ(.pth ๋ฑ)์ ์๋ณ์กฐ ๋ฐฉ์ง ๋ฐ ์ถ์ ์ฑ ํ๋ณด |
| | 3. ์ ๋์ ๊ณต๊ฒฉ(Adversarial Attack) ๋ฐ ๋ฐ์ดํฐ ์ค์ผ(Data Poisoning) ๋์ |
| | 4. ํ์ต ์ฌํ์ฑ(Reproducibility) ๋ณด์ฅ |
| | |
| | **๋ฐ์ดํฐ ๋ณด์ ๊ด๋ฆฌ ์ ์ฐจ:** |
| | |
| | | ๋จ๊ณ | ์ค๋ช
| ๋๊ตฌ / ์คํ ์์ | |
| | |------|------|------------------| |
| | | โ ์์ง | ์๋ณธ ๋ฐ์ดํฐ ์์ง ํ 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 ํ์ฉ | ๊ณต๊ฐ ์ ์ฅ์ ์
๋ก๋ ๊ธ์ง (ํนํ ๊ณ ๊ฐ ์ด๋ฏธ์ง ํฌํจ ์) | |
| |
|
| | **์ฒดํฌํฌ์ธํธ ๋ฉํ๋ฐ์ดํฐ ๊ตฌ์กฐ (์์):** |
| |
|
| | ```json |
| | { |
| | "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 | |
| |
|
| | **๋ฌด๊ฒฐ์ฑ ๊ฒ์ฆ ์๋ํ ์คํฌ๋ฆฝํธ (์์):** |
| |
|
| | ```bash |
| | #!/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 | ํด์ ๊ธฐ๋ฐ ๊ฒ์ฆ | |
| |
|
| | **์์ ์ํฌํ๋ก์ฐ (๋ชจ๋ธ ์์นด์ด๋ธ ์์ฑ):** |
| |
|
| | ```bash |
| | # 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` ํ์ผ ๋ด ํฌํจ ๊ถ์ฅ |
| | |
| | ```markdown |
| | # Model Artifact Security Policy |
| | - ๋ชจ๋ ๋ชจ๋ธ ๊ฐ์ค์น๋ SHA256 ๊ธฐ๋ฐ ๋ฌด๊ฒฐ์ฑ ๊ฒ์ฆ ํ ์
๋ก๋๋ฉ๋๋ค. |
| | - ๊ฐ ๋ชจ๋ธ์๋ ํ์ต ํ๊ฒฝ, ๋ฐ์ดํฐ ๋ฒ์ , ํ์ดํผํ๋ผ๋ฏธํฐ๊ฐ ๋ช
์๋ `model_info.json`์ด ํฌํจ๋ฉ๋๋ค. |
| | - ๋ฐ์ดํฐ์
๋ฐ ๋ชจ๋ธ ๋ณ๊ฒฝ ์, ์๋ก์ด ๋ฒ์ ํ๊ทธ(`_Vx.x`)๋ฅผ ๋ถ์ฌํ๊ณ SBOM์ ์ฌ์์ฑํฉ๋๋ค. |
| | ``` |
| | |
| | ### 7. ์ฌ๋ฐฐํฌยท์์
ํ ๊ฐ์ด๋ (Redistribution & Commercialization) |
| | |
| | > ์คํ์์ค ๋ผ์ด์ ์ค ๋ฐ ๋ฐ์ดํฐ์
ยท๋ชจ๋ธ ์ฝ๊ด์ ์ค์ํ์ฌ ๋ฒ์ ๋ฆฌ์คํฌ๋ฅผ ๋ฐฉ์งํฉ๋๋ค. |
| | |
| | **์์น:** |
| | |
| | | ๋ผ์ด์ ์ค | ์ฌ์ฉ ๊ฐ๋ฅ์ฑ | ์ฃผ์์ฌํญ | |
| | |-----------|-------------|-----------| |
| | | MIT / BSD / Apache-2.0 | ์์ ๋ก์ด ์์
์ ์ฌ์ฉ ๊ฐ๋ฅ | ์ ์๊ถ, NOTICE ํ์ผ ์ ์ง | |
| | | GPL / MPL ๋ฑ ์นดํผ๋ ํํธ | ์กฐ๊ฑด๋ถ ํ์ฉ | ๋งํฌ ๋ฐฉ์์ ๋ฐ๋ผ ์์ค ๊ณต๊ฐ ์๋ฌด ๋ฐ์ | |
| | | OpenAI CLIP ๊ฐ์ค์น | ์ ํ์ | ์์
์ ์ด์ฉ ์ฝ๊ด ๋ณ๋ ํ์ธ ํ์ | |
| | | HuggingFace Dataset | ์ถ์ฒ๋ณ ํ์ธ | ๋ฐ์ดํฐ ์ ๊ณต์ ์ฝ๊ด ์ค์ ํ์ | |
| | |
| | **์ฒดํฌ๋ฆฌ์คํธ:** |
| | - [x] `THIRD_PARTY_LICENSES/` ์ต์ ํ |
| | - [x] PyQt5 ๋ฑ GPL ๊ณ์ด ์์กด์ฑ ๊ฒํ |
| | - [x] CLIP ๊ฐ์ค์น ์ฝ๊ด ๋ฌธ์ ์ฒจ๋ถ |
| | - [x] SBOM + ํด์ ํฌํจํ์ฌ ๋ฐฐํฌ |
| | |
| | ### 8. ๋ด๋ถ ์น์ธยทRACI (Internal Approval & RACI) |
| | |
| | > ํ๋ก์ธ์ค ์ ์ฑ
์๊ณผ ๊ถํ์ ๋ช
ํํ ์ ์ํฉ๋๋ค. |
| | |
| | | ํ๋ | Responsible | Consulted | Accountable | |
| | |------|--------------|------------|--------------| |
| | | ์ ๊ท OSS ๋์
๊ฒํ | ๊ฐ๋ฐํ | ๋ณด์ํ, ๋ฒ๋ฌด | ๋ณด์ํ์ฅ | |
| | | SBOM/๋ผ์ด์ ์ค ์ค์บ | ๊ฐ๋ฐํ | ๋ณด์ํ | ๋ณด์ํ์ฅ | |
| | | ์ทจ์ฝ์ ํจ์น ์ ์ฉ | ๊ฐ๋ฐํ | ๋ณด์ํ | ๊ฐ๋ฐํ์ฅ | |
| | | ๋ฆด๋ฆฌ์ค ์น์ธ | ๊ฐ๋ฐํ | ๋ณด์ยท๋ฒ๋ฌด | ์ ํ ์ฑ
์์(PO) | |
| | |
| | ### 9. PR ์ฒดํฌ๋ฆฌ์คํธ (Pull Request Checklist) |
| | |
| | > ๋ฆด๋ฆฌ์ค/๋ณํฉ ์ ๋ณด์ยท๋ฒ์ ์ค์๋ฅผ ์ํ ์ ๊ฒ ํญ๋ชฉ์
๋๋ค. |
| | |
| | ```markdown |
| | - [ ] requirements.txt ๋ฒ์ ํ ๋ฐ ํด์ ํฌํจ |
| | - [ ] pip-audit / safety: HighยทCritical ์ทจ์ฝ์ ์์ |
| | - [ ] SBOM(cyclonedx-py) ์์ฑ ๋ฐ ์ปค๋ฐ |
| | - [ ] THIRD_PARTY_LICENSES/ ๊ฐฑ์ ์๋ฃ |
| | - [ ] NOTICE ๋ฐ LICENSE ์ต์ ํ |
| | - [ ] ๋ชจ๋ธ ๊ฐ์ค์นยท๋ฐ์ดํฐ์
์ฝ๊ด ๊ฒ์ฆ ๋ฌธ์ ์ฒจ๋ถ |
| | - [ ] GUI ํ๋ ์์ํฌ(PyQt5 ๋ฑ) ์์ฉ์ฑ ๊ฒํ ๊ฒฐ๊ณผ ์ฒจ๋ถ |
| | - [ ] CI ๋น๋ยทํ
์คํธ ํต๊ณผ |
| | ``` |
| | |
| | --- |
| | |
| | ## References |
| | |
| | - AnomalyCLIP: Object-agnostic Prompt Learning for Zero-shot Anomaly Detection [[github](https://github.com/zqhang/AnomalyCLIP.git)] |
| | |