quandao92 commited on
Commit
aa8ec6a
ยท
verified ยท
1 Parent(s): c07954e

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +597 -517
README.md CHANGED
@@ -1,12 +1,21 @@
1
  ---
 
 
 
 
 
 
2
  datasets:
3
- - quandao92/ad-clip-dataset
4
  metrics:
5
- - f1
6
  base_model:
7
- - openai/clip-vit-base-patch32
8
  ---
9
- <div style='text-align: center; font-size: 28px; font-weight: bold'>CLIP ๊ธฐ๋ฐ˜ ์ œํ’ˆ ๊ฒฐํ•จ ํƒ์ง€ ๋ชจ๋ธ ์นด๋“œ</div>
 
 
 
10
 
11
  ## ๋ชจ๋ธ ์„ธ๋ถ€์‚ฌํ•ญ
12
 
@@ -16,34 +25,44 @@ AnomalyCLIP์€ ํŠน์ • ๊ฐ์ฒด์— ์˜์กดํ•˜์ง€ ์•Š๋Š” ํ…์ŠคํŠธ ํ”„๋กฌํ”„ํŠธ๋ฅผ
16
  ์ด ๋ชจ๋ธ์€ CLIP ๊ธฐ๋ฐ˜ ์ด์ƒ ํƒ์ง€ ๊ธฐ๋ฒ•์„ ํ™œ์šฉํ•˜์—ฌ ์ œํ’ˆ ๊ฒฐํ•จ์„ ํƒ์ง€ํ•ฉ๋‹ˆ๋‹ค.
17
  ์‚ฌ์ „ ํ•™์Šต๋œ CLIP ๋ชจ๋ธ์„ ํŒŒ์ธํŠœ๋‹(Fine-tuning)ํ•˜์—ฌ ์ œํ’ˆ ์ด๋ฏธ์ง€์—์„œ ๊ฒฐํ•จ์„ ์‹๋ณ„ํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์ƒ์‚ฐ ๋ผ์ธ์˜ ํ’ˆ์งˆ ๊ด€๋ฆฌ ๋ฐ ๊ฒฐํ•จ ํƒ์ง€ ์ž‘์—…์„ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
18
 
19
- - **Developed by:** ์œค์„๋ฏผ
20
- - **Funded by:** SOLUWINS Co., Ltd. (์†”๋ฃจ์œˆ์Šค)
21
- - **Referenced by:** zhou2023 anomalyclip [[github](https://github.com/zqhang/AnomalyCLIP.git)]
22
- - **Model type:** CLIP (Contrastive Language-Image Pretraining) - Domain-Agnostic Prompt Learning Model
23
- - **Language(s):** Python
24
- - **License:** Apache 2.0, MIT, OpenAI
 
 
25
 
26
  ### ๊ธฐ์ˆ ์  ์ œํ•œ์‚ฌํ•ญ
27
 
28
- - ๋ชจ๋ธ์€ ๊ฒฐํ•จ ํƒ์ง€๋ฅผ ์œ„ํ•œ ์ถฉ๋ถ„ํ•˜๊ณ  ๋‹ค์–‘ํ•œ ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ๋ฅผ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค. ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ์…‹์ด ๋ถ€์กฑํ•˜๊ฑฐ๋‚˜ ๋ถˆ๊ท ํ˜•ํ•  ๊ฒฝ์šฐ, ๋ชจ๋ธ์˜ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
29
- - ์‹ค์‹œ๊ฐ„ ๊ฒฐํ•จ ๊ฐ์ง€ ์„ฑ๋Šฅ์€ ํ•˜๋“œ์›จ์–ด ์‚ฌ์–‘์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋†’์€ ํ•ด์ƒ๋„์—์„œ ๊ฒฐํ•จ์„ ํƒ์ง€ํ•˜๋Š” ์ •ํ™•๋„๊ฐ€ ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
30
- - ๊ฒฐํ•จ์ด ๋ฏธ์„ธํ•˜๊ฑฐ๋‚˜ ์ œํ’ˆ ๊ฐ„ ์œ ์‚ฌ์„ฑ์ด ๋งค์šฐ ๋†’์€ ๊ฒฝ์šฐ, ๋ชจ๋ธ์ด ๊ฒฐํ•จ์„ ์ •ํ™•ํ•˜๊ฒŒ ํƒ์ง€ํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
 
31
 
32
  ## ํ•™์Šต ์„ธ๋ถ€์‚ฌํ•ญ
33
 
34
- ### Hardware
35
- - **CPU:** Intel Core i9-13900K (24 Cores, 32 Threads)
36
- - **RAM:** 64GB DDR5
37
- - **GPU:** NVIDIA RTX 4090Ti 24GB
38
- - **Storage:** 1TB NVMe SSD + 2TB HDD
 
 
 
39
 
40
- ### Software
41
- - **OS:** Windows 11 64 bit/ Ubuntu 20.04LTS
42
- - **Python:** 3.8 (anaconda)
43
- - **PyTorch:** 1.9.0
44
- - **OpenCV:** 4.5.3
45
- - **Cuda Toolkit:** 11.8
46
- - **CudDNN:** 9.3.0.75 for cuda11
 
 
 
47
 
48
  ### ๋ฐ์ดํ„ฐ์…‹ ์ •๋ณด
49
 
@@ -51,233 +70,254 @@ AnomalyCLIP์€ ํŠน์ • ๊ฐ์ฒด์— ์˜์กดํ•˜์ง€ ์•Š๋Š” ํ…์ŠคํŠธ ํ”„๋กฌํ”„ํŠธ๋ฅผ
51
  ์ด ๋ฐ์ดํ„ฐ๋Š” ์ œํ’ˆ์˜ ์ด๋ฏธ์ง€, ๊ฒฐํ•จ ์˜์—ญ์— ๋Œ€ํ•œ ground truth ์ •๋ณด, ๊ทธ๋ฆฌ๊ณ  ๊ธฐํƒ€ ๊ด€๋ จ ํŠน์„ฑ์„ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
52
  ์ด๋ฏธ์ง€๋Š” CLIP ๋ชจ๋ธ์˜ ์ž…๋ ฅ ํ˜•์‹์— ์ ํ•ฉํ•˜๋„๋ก ์ „์ฒ˜๋ฆฌ๋˜๋ฉฐ, ๊ฒฐํ•จ ์˜์—ญ์˜ ํ‰๊ฐ€๋ฅผ ์œ„ํ•ด ground truth ๋งˆํ‚น์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
53
 
54
- - **๋ฐ์ดํ„ฐ ์†Œ์Šค:** https://huggingface.co/datasets/quandao92/ad-clip-dataset
55
  - **๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ์žฅ๋น„:**
56
  - ์ˆ˜์ง‘ H/W: jetson orin nano 8GB
57
  - ์นด๋ฉ”๋ผ: BFS-U3-89S6C Color Camera
58
  - ๋ Œ์ฆˆ: 8mm Fiexd Focal Length Lens
59
  - ์กฐ๋ช…: LIDLA-120070
60
  - ๋ฐ์ดํ„ฐ ํ˜•์‹: .bpm, .jpg
61
- - **๋ฐ์ดํ„ฐ ๋ฒ„์ „ ๊ด€๋ฆฌ:**
62
- - **1์ฐจ : 20240903_V0_๊ฐ„์ด ํ™˜๊ฒฝ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘**
63
- ๋ฐ์ดํ„ฐ ๋ฒ„์ „ ๋ฐ ์‚ฌ์šฉ ์ด๋ ฅ
64
- - V01: ์ „์ฒ˜๋ฆฌ ์ „ ๋ฐ์ดํ„ฐ ์›๋ณธ -> ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ์›๋ณธ: 120ea
65
- - V02: ๋ฐ์ดํ„ฐ ๋ถ„๋ฅ˜ -> ์ •์ƒ/๋ถˆ๋Ÿ‰ ๋ถ„๋ฅ˜: 116ea/4ea
66
- - V03: ๋ฐ์ดํ„ฐ ๋ถ„๋ฅ˜, ๋ฐ์ดํ„ฐ ํšŒ์ „ -> ์ด๋ฏธ์ง€ ์ฆ๊ฐ•_45/90/135๋„๋กœ ํšŒ์ „_360ea
67
- <div style="text-align: center;">
68
- <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/6kvzgbH81jJrHJECaEspY.png" height="500" width="100%">
69
- <p>Ground Truth Marking</p>
70
- </div>
71
-
72
- <div style="display: flex; justify-content: space-between;">
73
- <div style="text-align: center; margin-right: 5px;">
74
- <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/_fkcI52_BTcqvQyrJ4EXl.png" height="80%" width="90%" style="margin-right:5px;">
75
- <p>PCA ๋ถ„ํฌ ์‹œ๊ฐํ™”</p>
76
- </div>
77
- <div style="text-align: center; margin-right: 5px;">
78
- <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/biaWPJtbm6iwNf7ZqnW5O.png" height="80%" width="90%" style="margin-right:5px;">
79
- <p>Isolation Forest๋กœ ์ด์ƒ๊ฐ’ ์‹๋ณ„ ๊ฒฐ๊ณผ</p>
80
- </div>
81
- </div>
82
-
83
- - **2์ฐจ : 20240910_V1_ํ•˜์šฐ์ง• ๋‚ด ์ด๋ฏธ์ง€ ์ˆ˜์ง‘**
84
- ๋ฐ์ดํ„ฐ ๋ฒ„์ „ ๋ฐ ์‚ฌ์šฉ ์ด๋ ฅ
85
- - V01: ์ „์ฒ˜๋ฆฌ ์ „ ๋ฐ์ดํ„ฐ ์›๋ณธ -> ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ์›๋ณธ: 350ea
86
- - V02: ๋ฐ์ดํ„ฐ ๋ถ„๋ฅ˜ -> ์ •์ƒ/๋ถˆ๋Ÿ‰ ๋ถ„๋ฅ˜: 336ea/14ea
87
- - V03: ๋ฐ์ดํ„ฐ ๋ถ„๋ฅ˜, ๋ฐ์ดํ„ฐ ํšŒ์ „ -> ์ด๋ฏธ์ง€ ์ฆ๊ฐ•: 1,050ea
88
- <div style="text-align: center;">
89
- <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/YsP7UwejFabUFp2Im0xWj.png" height="500" width="100%">
90
- <p>Ground Truth Marking</p>
91
- </div>
92
-
93
- <div style="display: flex; justify-content: space-between;">
94
- <div style="text-align: center; margin-right: 5px;">
95
- <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/CNFdse5mHQY1KkMb5BYpb.png" height="80%" width="90%" style="margin-right:5px;">
96
- <p>PCA ๋ถ„ํฌ ์‹œ๊ฐํ™”</p>
97
- </div>
98
- <div style="text-align: center; margin-right: 5px;">
99
- <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/nRO00DJFT0-B1EJYf8lzK.png" height="80%" width="90%" style="margin-right:5px;">
100
- <p>Isolation Forest๋กœ ์ด์ƒ๊ฐ’ ์‹๋ณ„ ๊ฒฐ๊ณผ</p>
101
- </div>
102
- </div>
103
-
104
- - **3์ฐจ : 20250328_V2_์„ค๋น„ ๋‚ด ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘**
105
- ๋ฐ์ดํ„ฐ ๋ฒ„์ „ ๋ฐ ์‚ฌ์šฉ ์ด๋ ฅ
106
- - V01: ์ „์ฒ˜๋ฆฌ ์ „ ๋ฐ์ดํ„ฐ ์›๋ณธ -> ์ด๋ฏธ์ง€ ์ˆ˜์ง‘_2,010๊ฐœ
107
- - V02: ๋ฐ์ดํ„ฐ ๋ถ„๋ฅ˜ -> ์ •์ƒ/๋ถˆ๋Ÿ‰ ๋ถ„๋ฅ˜ ์ˆ˜ํ–‰_1,918/92
108
- - V03: ๋ฐ์ดํ„ฐ ๋ถ„๋ฅ˜, ๋ฐ์ดํ„ฐ ํšŒ์ „ -> ์ด๋ฏธ์ง€ ์ฆ๊ฐ• ์ˆ˜ํ–‰_์ด๋ฏธ์ง€ ํšŒ์ „์„ ํ†ตํ•ด ์ด๋ฏธ์ง€ ๊ฐœ์ˆ˜ 6,030๊ฐœ
109
- <div style="text-align: center;">
110
- <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/MFyVWaqr4GDNs8W2mWzGZ.png" height="500" width="100%">
111
- <p>Ground Truth Marking</p>
112
- </div>
113
-
114
- <div style="display: flex; justify-content: space-between;">
115
- <div style="text-align: center; margin-right: 5px;">
116
- <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/Kc3EMbY05frUFQh5HbVHn.png" height="80%" width="90%" style="margin-right:5px;">
117
- <p>PCA ๋ถ„ํฌ ์‹œ๊ฐํ™”</p>
118
- </div>
119
- <div style="text-align: center; margin-right: 5px;">
120
- <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/SP4R5LjGo2M1Zvby1Bar_.png" height="80%" width="90%" style="margin-right:5px;">
121
- <p>Isolation Forest๋กœ ์ด์ƒ๊ฐ’ ์‹๋ณ„ ๊ฒฐ๊ณผ</p>
122
- </div>
123
- </div>
124
-
125
- - **Data Configuration:**
126
- - **์ด๋ฏธ์ง€ ํฌ๊ธฐ ์กฐ์ • ๋ฐ ์ •๊ทœํ™”:**
127
- - ์ด๋ฏธ์ง€๋Š” ์ผ์ •ํ•œ ํฌ๊ธฐ(์˜ˆ: 518x518)๋กœ ๋ฆฌ์‚ฌ์ด์ฆˆ๋˜๋ฉฐ, CLIP ๋ชจ๋ธ์˜ ์ž…๋ ฅ์œผ๋กœ ์ ํ•ฉํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
128
- - ์ •๊ทœํ™”๋ฅผ ํ†ตํ•ด ํ”ฝ์…€ ๊ฐ’์„ [0, 1] ๋ฒ”์œ„๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
129
- - **Ground Truth ๋งˆํ‚น:**
130
- - ๊ฒฐํ•จ์ด ์žˆ๋Š” ์ด๋ฏธ์ง€์— ๋Œ€ํ•ด ๊ฒฐํ•จ ์˜์—ญ์„ bounding box ํ˜•์‹ ๋˜๋Š” binary mask๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
131
- - ๋งˆํ‚น๋œ ๋ฐ์ดํ„ฐ๋ฅผ JSON ๋˜๋Š” CSV ํ˜•์‹์œผ๋กœ ์ €์žฅํ•˜์—ฌ ๋ชจ๋ธ ํ‰๊ฐ€ ์‹œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
132
-
133
- <div style="text-align: center;">
134
- <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/k8GQgaTK7JfQExNpCYpzz.png" height="500" width="100%" style="margin-right:5px;">
135
- <p>Ground Truth Marking</p>
136
- </div>
137
-
138
- - **๋ฐ์ดํ„ฐ ๋ถ„๋ฅ˜:**
139
- - Normal: ๊ฒฐํ•จ์ด ์—†๋Š” ์ •์ƒ ์ œํ’ˆ์˜ ์ด๋ฏธ์ง€.
140
- - Error: ๊ฒฐํ•จ์ด ์žˆ๋Š” ์ œํ’ˆ์˜ ์ด๋ฏธ์ง€. ๊ฒฐํ•จ ์œ„์น˜์™€ ๊ด€๋ จ ์ •๋ณด๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
141
- <div style="display: flex;justify-content: space-between;">
142
- <div style="text-align: center;margin-right: 5px;">
143
- <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/5pGwZ-sptjWjf7WpHifyJ.jpeg" height="400" width="450"">
144
- </div>
145
- <div style="text-align: center;justify-content: space-between; margin-right: 5px;">
146
- <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/3iihck7VfkXKw9VcIl06x.jpeg" height="400" width="450"">
147
- </div>
148
- <div style="text-align: center;justify-content: space-between;margin-right: 5px;">
149
- <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/tjsmiXq9pp0K6KSuS1iOS.jpeg" height="400" width="450"">
150
- </div>
151
- </div>
152
- <p style="text-align: center;">Normal Product Images</p>
153
-
154
- <div style="display: flex;justify-content: space-between;">
155
- <div style="text-align: center;margin-right: 5px;">
156
- <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/Qv01zDzEM5u8cQYdALrSU.jpeg" height="400" width="450"">
157
- </div>
158
- <div style="text-align: center;justify-content: space-between; margin-right: 5px;">
159
- <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/B5q_FKiTVXkuElTSlUc4s.jpeg" height="400" width="450"">
160
- </div>
161
- <div style="text-align: center;justify-content: space-between;margin-right: 5px;">
162
- <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/3pro8oEqMTiEwiwFKcACn.jpeg" height="400" width="450"">
163
- </div>
164
- </div>
165
- <p style="text-align: center;">Error Product Images</p>
 
 
 
 
 
166
 
167
  ### ๋ฐ์ดํ„ฐ ๋ผ๋ฒจ๋ง ๊ฐ€์ด๋“œ
 
168
  ๋ณธ ๋ฐ์ดํ„ฐ ๋ผ๋ฒจ๋ง ๊ฐ€์ด๋“œ๋Š” AnomalyDetection ๊ธฐ๋ฐ˜ ๋ชจ๋ธ ํ•™์Šต์„ ์œ„ํ•ด ์ˆ˜์ง‘๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ผ๋ฒจ๋งํ•˜๋Š” ๊ธฐ์ค€๊ณผ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ช…ํ™•ํžˆ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
169
  ๋ฐ์ดํ„ฐ๋Š” ์ฃผ๋กœ ์ •์ƒ(normal) ๋ฐ์ดํ„ฐ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ์ตœ์†Œํ•œ์˜ ๋น„์ •์ƒ(anomaly) ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
170
  ๋ณธ ๊ฐ€์ด๋“œ๋Š” ๋ฐ์ดํ„ฐ์˜ ํ’ˆ์งˆ์„ ์œ ์ง€ํ•˜๊ณ  ๋ชจ๋ธ ํ•™์Šต ๋ฐ ํ…Œ์ŠคํŠธ๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐ ๋ชฉํ‘œ๋ฅผ ๋‘ก๋‹ˆ๋‹ค.
171
- - **๋ผ๋ฒจ๋ง ๋ฒ”์œ„**
172
-
173
- 1. **์ •์ƒ(normal) ๋ฐ์ดํ„ฐ**:
174
- - ์ „์ฒด ๋ฐ์ดํ„ฐ์˜ ์•ฝ **95% ์ด์ƒ**์„ ์ฐจ์ง€.
175
- - ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ ์กฐ๊ฑด์—์„œ ์ˆ˜์ง‘๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จ (์กฐ๋ช…, ๊ฐ๋„, ๋ฐฐ๊ฒฝ ๋“ฑ).
176
- - ์ •์ƒ์ ์ธ ์ƒํƒœ์˜ ๊ธˆ์† ํ‘œ๋ฉด, ์ •๋ฐ€ํ•œ ๊ตฌ์กฐ, ๊ท ์ผํ•œ ๊ด‘ํƒ์„ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ.
177
- 2. **๋น„์ •์ƒ(anomaly) ๋ฐ์ดํ„ฐ**:
178
- - ์ „์ฒด ๋ฐ์ดํ„ฐ์˜ ์•ฝ 5**% ์ดํ•˜**๋กœ ์ œํ•œ.
179
- - ๊ฒฐํ•จ ์œ ํ˜•:
180
- - **Scratch**: ์Šคํฌ๋ž˜์น˜.
181
- - **Contamination**: ์–ผ๋ฃฉ ๋˜๋Š” ์ด๋ฌผ์งˆ.
182
- - **Crack**: ํ‘œ๋ฉด ๊ท ์—ด.
183
- - **๊ฒฐํ•จ ์ด๋ฏธ์ง€ ์˜ˆ์‹œ**
184
- - **๋ฐ์ดํ„ฐ ๋ผ๋ฒจ๋ง ๊ธฐ์ค€**
185
-
186
- -**1. ํŒŒ์ผ ๋„ค์ด๋ฐ ๊ทœ์น™**
187
-
188
- - ๋ฐ์ดํ„ฐ ๋ฒ„์ „๋ณ„ ํŒŒ์ผ๋ช…์€ ๋ฒ„์ „๋ณ„๋กœ ์ƒ์ดํ•จ.
189
- - ๊ฐ ๋ฒ„์ „์˜ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋ฌธ์„œ ์ฐธ๊ณ 
190
- - ๋ฐ์ดํ„ฐ ํด๋”๋ช…์€ **`<์ˆ˜์ง‘๋…„์›”์ผ>_<V๋ฒ„์ „>_<๊ฐ„๋‹จํ•œ ์„ค๋ช…>`** ํ˜•์‹์œผ๋กœ ์ž‘์„ฑ.
191
- - ์˜ˆ์‹œ:20240910_V0_๊ฐ„์ด ํ™˜๊ฒฝ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘
192
-
193
- - **2. ๋ผ๋ฒจ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ**
194
-
195
- ๋ผ๋ฒจ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” csv ํ˜•์‹์œผ๋กœ ์ €์žฅํ•˜๋ฉฐ, ๊ฐ ๋ฐ์ดํ„ฐ์˜ ๋ผ๋ฒจ ๋ฐ ์„ค๋ช…์„ ํฌํ•จ.
196
-
197
- - **ํ•„์ˆ˜ ํ•„๋“œ**:
198
- - `image_id`: ์ด๋ฏธ์ง€ ํŒŒ์ผ๋ช….
199
- - `label`: ์ •์ƒ(`normal`) ๋˜๋Š” ๋น„์ •์ƒ(`anomaly`) ์—ฌ๋ถ€.
200
- - `description`: ์ƒ์„ธ ์„ค๋ช…(์˜ˆ: ๊ฒฐํ•จ ์œ ํ˜•).
201
-
202
- - **์˜ˆ์‹œ:**
203
- ```ruby
204
- {
205
- "image_id": "normal_20241111_001.jpg",
206
- "label": "normal",
207
- "description": "๋งค๋„๋Ÿฌ์šด ํ‘œ๋ฉด์„ ๊ฐ€์ง„ ์ •์ƒ์ ์ธ ๊ธˆ์† ๋ถ€ํ’ˆ, ๊ด‘ํƒ์ด ๊ท ์ผํ•จ."
208
- }
209
- {
210
- "image_id": "abnormal_20241111_002.jpg",
211
- "label": "error",
212
- "description": "ํ‘œ๋ฉด์— ์„ ํ˜• ์Šคํฌ๋ž˜์น˜๊ฐ€ ๋ฐœ๊ฒฌ๋จ."
213
- }
214
- ```
215
-
216
-
217
- # AD-CLIP Model Architecture
 
218
  AD-CLIP ๋ชจ๋ธ์€ CLIP (ViT-B-32)์„ ๋ฐฑ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€์—์„œ ํŠน์ง•์„ ์ถ”์ถœํ•˜๊ณ , ๋Œ€์กฐ ํ•™์Šต์„ ํ†ตํ•ด ์ด์ƒ์„ ํƒ์ง€ํ•ฉ๋‹ˆ๋‹ค.
219
  ์ตœ์ข… ์ถœ๋ ฅ์€ ์ด๋ฏธ์ง€๊ฐ€ ๋น„์ •์ƒ์ธ์ง€ ์ •์ƒ์ธ์ง€๋ฅผ ํŒ๋ณ„ํ•˜๋Š” ์ด์ƒ ์ ์ˆ˜์™€ ๊ฐ ํด๋ž˜์Šค์˜ ํ™•๋ฅ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
 
220
  <div style="display: flex; justify-content: center; align-items: center; flex-direction: column;">
221
  <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/62sYcSncxxzqGjQAa0MgQ.png" height="500" width="70%">
222
  <p>CLIP-based Anomaly Detection Model Architecture</p>
223
  </div>
224
 
225
- - **model:**
226
- - ์ž…๋ ฅ ๊ณ„์ธต (Input Layer):
227
- - ์ž…๋ ฅ ์ด๋ฏธ์ง€: ๋ชจ๋ธ์€ ํฌ๊ธฐ [640, 640, 3]์˜ ์ด๋ฏธ์ง€๋ฅผ ์ž…๋ ฅ๋ฐ›์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ 640x640์€ ์ด๋ฏธ์ง€์˜ ๊ฐ€๋กœ์™€ ์„ธ๋กœ ํฌ๊ธฐ์ด๋ฉฐ, 3์€ RGB ์ƒ‰์ƒ์˜ ์ฑ„๋„ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
228
- - ๊ธฐ๋Šฅ: ์ด ๊ณ„์ธต์€ ์ž…๋ ฅ๋œ ์ด๋ฏธ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ชจ๋ธ์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์— ๋งž๋Š” ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ค€๋น„ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
229
- - backbone:
230
- - CLIP (ViT-B-32): ๋ชจ๋ธ์€ CLIP์˜ Vision Transformer (ViT-B-32) ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€์—์„œ ํŠน์ง•์„ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค. ViT-B-32๋Š” ์ด๋ฏธ์ง€๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ณ ๊ธ‰ ํŠน์„ฑ์„ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
231
- - ํ•„ํ„ฐ: ํ•„ํ„ฐ ํฌ๊ธฐ [32, 64, 128, 256, 512]๋Š” ๊ฐ ViT ๋ ˆ์ด์–ด์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ด๋ฏธ์ง€์˜ ๊ฐ ๋ ˆ๋ฒจ์—์„œ ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ์ถ”์ถœํ•˜์—ฌ ํŠน์ง•์„ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค.
232
- - neck:
233
- - ์ด์ƒ ํƒ์ง€ ๋ชจ๋“ˆ (Anomaly Detection Module): ์ด ๋ชจ๋“ˆ์€ CLIP์—์„œ ์ถ”์ถœ๋œ ํŠน์ง•์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ด๋ฏธ์ง€๋ฅผ ๋ถ„์„ํ•˜๊ณ  ์ด์ƒ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ๋Š” ์ด๋ฏธ์ง€ ๋‚ด์—์„œ ์ •์ƒ๊ณผ ๋น„์ •์ƒ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ ์ค‘์š”ํ•œ ์ฒ˜๋ฆฌ๊ฐ€ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.
234
- - ๋Œ€์กฐ ํ•™์Šต (Contrastive Learning): ๋Œ€์กฐ ํ•™์Šต ๋ฐฉ๋ฒ•์€ ์ •์ƒ ์ด๋ฏธ์ง€์™€ ๋น„์ •์ƒ ์ด๋ฏธ์ง€ ๊ฐ„์˜ ์ฐจ์ด๋ฅผ ํ•™์Šตํ•˜์—ฌ, ์ด๋ฏธ์ง€์˜ ์ด์ƒ ์—ฌ๋ถ€๋ฅผ ๋”์šฑ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค๋‹ˆ๋‹ค.
235
- - head:
236
- - ์ด์ƒ ํƒ์ง€ ํ—ค๋“œ (Anomaly Detection Head): ๋ชจ๋ธ์˜ ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„์œผ๋กœ, ์ด ๊ณ„์ธต์€ ์ด๋ฏธ์ง€๊ฐ€ ๋น„์ •์ƒ์ ์ธ์ง€ ์ •์ƒ์ ์ธ์ง€๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
237
- - outputs:
238
- - ์ด์ƒ ์ ์ˆ˜ (Anomaly Score): ๋ชจ๋ธ์€ ์ด๋ฏธ์ง€๊ฐ€ ์ด์ƒ์ธ์ง€ ์•„๋‹Œ์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ ์ˆ˜(์˜ˆ: 1์€ ์ด์ƒ, 0์€ ์ •์ƒ)๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
239
- - ํด๋ž˜์Šค ํ™•๋ฅ  (Class Probabilities): ๋ชจ๋ธ์€ ๊ฐ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ํ™•๋ฅ ์„ ์ถœ๋ ฅํ•˜๋ฉฐ, ์ด ํ™•๋ฅ ์„ ํ†ตํ•ด ๊ฒฐํ•จ์ด ์žˆ๋Š”์ง€ ์—†๋Š”์ง€์˜ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค.
240
-
241
- # Optimizer and Loss Function
242
- - **training:**
243
- - optimizer:
244
- - name: AdamW # AdamW ์˜ตํ‹ฐ๋งˆ์ด์ € (๊ฐ€์ค‘์น˜ ๊ฐ์‡  ํฌํ•จ)
245
- - lr: 0.0001 # ํ•™์Šต๋ฅ 
246
- - loss:
247
- - classification_loss: 1.0 # ๋ถ„๋ฅ˜ ์†์‹ค (๊ต์ฐจ ์—”ํŠธ๋กœํ”ผ)
248
- - anomaly_loss: 1.0 # ๊ฒฐํ•จ ํƒ์ง€ ์†์‹ค (์ด์ƒ ํƒ์ง€ ๋ชจ๋ธ์— ๋Œ€ํ•œ ์†์‹ค)
249
- - contrastive_loss: 1.0 # ๋Œ€์กฐ ํ•™์Šต ์†์‹ค (์œ ์‚ฌ๋„ ๊ธฐ๋ฐ˜ ์†์‹ค)
250
-
251
- # Metrics
252
- - **metrics:**
253
- - Precision # ์ •๋ฐ€๋„ (Precision)
254
- - Recall # ์žฌํ˜„์œจ (Recall)
255
- - mAP # ํ‰๊ท  ์ •๋ฐ€๋„ (Mean Average Precision)
256
- - F1-Score # F1-์ ์ˆ˜ (๊ท ํ˜• ์žกํžŒ ํ‰๊ฐ€ ์ง€ํ‘œ)
257
-
258
- # Training Parameters
259
- **ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ •**
260
- - Learning Rate: 0.001.
261
- - Batch Size: 8.
262
- - Epochs: 200.
263
-
264
- # Pre-trained CLIP model
 
 
 
 
 
 
 
 
 
 
 
 
 
265
  | Model | Download |
266
- | --- | --- |
267
  | ViT-B/32 | [download](https://openaipublic.azureedge.net/clip/models/40d365715913c9da98579312b702a82c18be219cc2a73407c4526f58eba950af/ViT-B-32.pt) |
268
  | ViT-B/16 | [download](https://openaipublic.azureedge.net/clip/models/5806e77cd80f8b59890b7e101eabd078d9fb84e6937f9e85e4ecb61988df416f/ViT-B-16.pt) |
269
  | ViT-L/14 | [download](https://openaipublic.azureedge.net/clip/models/b8cca3fd41ae0c99ba7e8951adf17d267cdb84cd88be6f7c2e0eca1737a03836/ViT-L-14.pt) |
270
  | ViT-L/14@336px | [download](https://openaipublic.azureedge.net/clip/models/3035c92b350959924f9f00213499208652fc7ea050643e8b385c2dac08641f02/ViT-L-14-336px.pt) |
271
 
272
- # Evaluation Parameters
273
- - F1-score: 90%์ด์ƒ. (1๋…„์ฐจ)
274
- - F1-score: 98%์ด์ƒ. (2๋…„์ฐจ)
275
 
 
 
276
 
 
277
 
278
- # ํ•™์Šต ์„ฑ๋Šฅ ๋ฐ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ
279
 
280
- - **ํ•™์Šต์„ฑ๋Šฅ ๊ฒฐ๊ณผ๊ณผ ๊ทธ๋ž˜ํ”„**:
281
  <div style="display: flex; justify-content: space-between; margin-bottom: 10px;">
282
  <div style="text-align: center; margin-right: 20px;">
283
  <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/7Q1RzKyia-WNSCJHnk2-d.png" height="80%" width="100%" style="margin-right:5px;">
@@ -303,7 +343,8 @@ AD-CLIP ๋ชจ๋ธ์€ CLIP (ViT-B-32)์„ ๋ฐฑ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€์—์„œ
303
  </div>
304
  </div>
305
 
306
- - **ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผํ‘œ**:
 
307
  <div style="display: flex; justify-content: space-between;">
308
  <div style="text-align: center; margin-right: 20px;">
309
  <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/u1DQHjXM41DMq1JIUOGlp.png" height="100%" width="100%" style="margin-right:5px;">
@@ -313,7 +354,8 @@ AD-CLIP ๋ชจ๋ธ์€ CLIP (ViT-B-32)์„ ๋ฐฑ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€์—์„œ
313
  </div>
314
  </div>
315
 
316
- - **ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ**:
 
317
  <div style="display: flex; justify-content: space-between;">
318
  <div style="text-align: center; margin-right: 20px;">
319
  <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/A91V0GdrcUcX01cC-biG9.png" height="600" width="1000" style="margin-right:5px;">
@@ -325,10 +367,9 @@ AD-CLIP ๋ชจ๋ธ์€ CLIP (ViT-B-32)์„ ๋ฐฑ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€์—์„œ
325
  </div>
326
  </div>
327
 
328
-
329
  ---
330
 
331
- # ๋ชจ๋ธ ๋ณ€๊ฒฝ ์ด๋ ฅ (Model Update History)
332
 
333
  > AD-CLIP ๊ธฐ๋ฐ˜ ์ด์ƒํƒ์ง€ ๋ชจ๋ธ์€ **์ด 3๊ฐœ ๋ฒ„์ „**์œผ๋กœ ๊ด€๋ฆฌ๋˜๊ณ  ์žˆ์œผ๋ฉฐ,
334
  > ๊ฐ ๋ฒ„์ „์€ ๋ฐ์ดํ„ฐ ํ’ˆ์งˆ ๊ฐœ์„  ๋ฐ ๋ชจ๋ธ ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ๋งž์ถฐ ์ฒด๊ณ„์ ์œผ๋กœ ๋ณ€๊ฒฝยท์Šน์ธ๋˜์—ˆ๋‹ค.
@@ -347,7 +388,7 @@ AD-CLIP ๋ชจ๋ธ์€ CLIP (ViT-B-32)์„ ๋ฐฑ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€์—์„œ
347
  > AD-CLIP ๋ชจ๋ธ์˜ ๋ณ€๊ฒฝยท๊ต์ฒด ์‹œ์ ์€ **๋ฐ์ดํ„ฐ ๋ฒ„์ „, ์ฝ”๋“œ ๋ฒ„์ „, ์„ฑ๋Šฅ ๋กœ๊ทธ, ์Šน์ธ ๊ธฐ๋ก**์ด ์ƒํ˜ธ ์—ฐ๊ณ„๋˜๋ฉฐ,
348
  > ์ด๋ฅผ ํ†ตํ•ด **๋ชจ๋ธ ์‹ ๋ขฐ์„ฑ, ์žฌํ˜„์„ฑ, ์ถ”์ ์„ฑ**์„ ๋™์‹œ์— ํ™•๋ณดํ•œ๋‹ค.
349
 
350
- ### ๐Ÿ”– ๋ฒ„์ „ ๋ช…๋ช… ๊ทœ์น™
351
 
352
  | ๊ตฌ๋ถ„ | ๊ทœ์น™ | ์˜ˆ์‹œ |
353
  |------|------|------|
@@ -357,7 +398,7 @@ AD-CLIP ๋ชจ๋ธ์€ CLIP (ViT-B-32)์„ ๋ฐฑ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€์—์„œ
357
 
358
  ---
359
 
360
- ### โš™๏ธ ๊ด€๋ฆฌ ๊ตฌ์„ฑ์š”์†Œ
361
 
362
  | ๊ตฌ๋ถ„ | ๊ด€๋ฆฌ ํ•ญ๋ชฉ | ์„ค๋ช… |
363
  |------|------------|------|
@@ -368,7 +409,7 @@ AD-CLIP ๋ชจ๋ธ์€ CLIP (ViT-B-32)์„ ๋ฐฑ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€์—์„œ
368
 
369
  ---
370
 
371
- ### ๐Ÿงฑ ๋ชจ๋ธ ๋ณ€๊ฒฝ ์ ˆ์ฐจ ์š”์•ฝ
372
 
373
  | ๋‹จ๊ณ„ | ์ฃผ์š” ํ™œ๋™ | ์‚ฐ์ถœ๋ฌผ |
374
  |------|------------|--------|
@@ -381,7 +422,7 @@ AD-CLIP ๋ชจ๋ธ์€ CLIP (ViT-B-32)์„ ๋ฐฑ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€์—์„œ
381
 
382
  ---
383
 
384
- ### ๐Ÿงฎ ๋ชจ๋ธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์˜ˆ์‹œ
385
 
386
  ```json
387
  {
@@ -399,312 +440,353 @@ AD-CLIP ๋ชจ๋ธ์€ CLIP (ViT-B-32)์„ ๋ฐฑ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€์—์„œ
399
  "status": "Active",
400
  "notes": "2์ฐจ๋…„๋„ ์ „์ฒด ์žฌํ•™์Šต ๋ฐ ์„ฑ๋Šฅ ๊ณ ๋„ํ™” ๋ฒ„์ „"
401
  }
 
402
 
 
403
 
 
404
 
 
405
 
406
- # ์„ค์น˜ ๋ฐ ์‹คํ–‰ ๊ฐ€์ด๋ผ์ธ
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
407
 
408
- ์ด ๋ชจ๋ธ์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด Python๊ณผ ํ•จ๊ป˜ ๋‹ค์Œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค:
 
 
 
 
 
 
 
 
 
 
409
 
410
- - **ftfy==6.2.0**: ํ…์ŠคํŠธ ์ •๊ทœํ™” ๋ฐ ์ธ์ฝ”๋”ฉ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ.
411
- - **matplotlib==3.9.0**: ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ๋ฐ ๊ทธ๋ž˜ํ”„ ์ƒ์„ฑ์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ.
412
- - **numpy==1.24.3**: ์ˆ˜์น˜ ์—ฐ์‚ฐ์„ ์œ„ํ•œ ํ•ต์‹ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ.
413
- - **opencv_python==4.9.0.80**: ์ด๋ฏธ์ง€ ๋ฐ ๋น„๋””์˜ค ์ฒ˜๋ฆฌ์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ.
414
- - **pandas==2.2.2**: ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋ฐ ์กฐ์ž‘์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ.
415
- - **Pillow==10.3.0**: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ฒ˜๋ฆฌ ๋ฐ ๋ณ€ํ™˜์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ.
416
- - **PyQt5==5.15.10**: GUI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ.
417
- - **PyQt5_sip==12.13.0**: PyQt5์™€ Python ๊ฐ„์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ.
418
- - **regex==2024.5.15**: ์ •๊ทœ ํ‘œํ˜„์‹ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ.
419
- - **scikit_learn==1.2.2**: ๊ธฐ๊ณ„ ํ•™์Šต ๋ฐ ๋ฐ์ดํ„ฐ ๋ถ„์„์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ.
420
- - **scipy==1.9.1**: ๊ณผํ•™ ๋ฐ ๊ธฐ์ˆ  ๊ณ„์‚ฐ์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ.
421
- - **setuptools==59.5.0**: Python ํŒจํ‚ค์ง€ ๋ฐฐํฌ ๋ฐ ์„ค์น˜๋ฅผ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ.
422
- - **scikit-image**: ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ ๋ฐ ๋ถ„์„์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ.
423
- - **tabulate==0.9.0**: ํ‘œ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ.
424
- - **thop==0.1.1.post2209072238**: PyTorch ๋ชจ๋ธ์˜ FLOP ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋„๊ตฌ.
425
- - **timm==0.6.13**: ๋‹ค์–‘ํ•œ ์ตœ์‹  ์ด๋ฏธ์ง€ ๋ถ„๋ฅ˜ ๋ชจ๋ธ์„ ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ.
426
- - **torch==2.0.0**: PyTorch ๋”ฅ๋Ÿฌ๋‹ ํ”„๋ ˆ์ž„์›Œํฌ.
427
- - **torchvision==0.15.1**: ์ปดํ“จํ„ฐ ๋น„์ „ ์ž‘์—…์„ ์œ„ํ•œ PyTorch ํ™•์žฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ.
428
- - **tqdm==4.65.0**: ์ง„ํ–‰ ์ƒํ™ฉ์„ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œ์‹œํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ.
429
- - **pyautogui**: GUI ์ž๋™ํ™”๋ฅผ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ.
430
-
431
- - Install Python libraries
432
- ```
433
- pip install -r requirements.txt
434
- ```
435
-
436
-
437
- ## ๋ชจ๋ธ ์‹คํ–‰ ๋‹จ๊ณ„:
438
-
439
- ### โœ…Dataset configuration
440
-
441
- - Dataset configuration as example below
442
  ```
443
  โ”œโ”€โ”€ data/
444
  โ”‚ โ”œโ”€โ”€ COMP_1/
445
  โ”‚ โ”‚ โ”œโ”€โ”€ product_1/
446
- โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€grouth_truth
447
- โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€anomaly_1
448
- โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€anomaly_2
449
  โ”‚ โ”‚ โ”‚ โ”‚
450
- โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€test/
451
- โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€good
452
- โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€anomaly_1
453
- โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€anomaly_2
454
  โ”‚ โ”‚ โ”‚ โ”‚
455
- โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€train/
456
- โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€good
457
- โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€anomaly_1
458
- โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€anomaly_2
459
- โ”‚ โ”‚ โ”‚ โ”‚
460
  โ”‚ โ”‚ โ”œโ”€โ”€ product_2/
461
- โ”‚ โ”‚ โ”‚ โ”‚
462
  โ”‚ โ”‚ โ”œโ”€โ”€ meta.json
463
- โ”‚ โ”‚ โ”‚
464
  โ”‚ โ”œโ”€โ”€ COMP_2/
465
- โ”‚ โ”‚
466
  ```
467
 
468
- - Generate JSON file storing all the above information of dataset ( -> meta_train.json, meta_test.json)
469
- ```ruby
 
 
 
470
  cd dataset_config
471
  python dataset_get_json.py
472
  ```
473
 
474
- - Making all grouth_truth (only anomaly mask) by hand
475
- ```ruby
 
 
 
476
  cd dataset_config
477
  python image_ground_truth.py
478
  ```
479
 
480
- - Dataset configuration for train and test
481
- ```ruby
 
482
  cd training_libs
483
  python dataset.py
484
  ```
485
 
486
- โ†’ _ _init_ _ ๋ฉ”์„œ๋“œ๋Š” ๋ฐ์ดํ„ฐ์…‹์˜ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ, ๋ณ€ํ™˜ ํ•จ์ˆ˜, ๋ฐ์ดํ„ฐ์…‹ ์ด๋ฆ„, ๋ชจ๋“œ๋ฅผ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์Œ
487
- โ†’ ๋ฉ”ํƒ€ ์ •๋ณด๋ฅผ ๋‹ด์€ JSON ํŒŒ์ผ (meta_train.json)์„ ์ฝ์–ด์™€ ํด๋ž˜์Šค ์ด๋ฆ„ ๋ชฉ๋ก๊ณผ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํ•ญ๋ชฉ์„ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅ
488
- โ†’ generate_class_info ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํด๋ž˜์Šค ์ •๋ณด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํด๋ž˜์Šค ์ด๋ฆ„์„ ํด๋ž˜์Šค ID์— ๋งคํ•‘
489
- โ†’ _ _len_ _ ๋ฉ”์„œ๋“œ๋Š” ๋ฐ์ดํ„ฐ์…‹์˜ ์ƒ˜ํ”Œ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜
490
- โ†’ _ _getitem_ _ ๋ฉ”์„œ๋“œ๋Š” ์ฃผ์–ด์ง„ ์ธ๋ฑ์Šค์˜ ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜
491
- โ†’ ์ด๋ฏธ์ง€ ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•ด ์ด๋ฏธ์ง€๋ฅผ ์ฝ๊ณ , ์ด์ƒ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋งˆ์Šคํฌ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑ
492
- โ†’ ํ•„์š”์‹œ ์ด๋ฏธ์ง€์™€ ๋งˆ์Šคํฌ์— ๋ณ€ํ™˜ ํ•จ์ˆ˜๋ฅผ ์ ์šฉ
493
- โ†’ ์ด๋ฏธ์ง€, ๋งˆ์Šคํฌ, ํด๋ž˜์Šค ์ด๋ฆ„, ์ด์ƒ ์—ฌ๋ถ€, ์ด๋ฏธ์ง€ ๊ฒฝ๋กœ, ํด๋ž˜์Šค ID๋ฅผ ํฌํ•จํ•œ ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ๋ฐ˜ํ™˜
 
494
 
 
495
 
496
- ### โœ… Image pre-processing (transformation) for train and test
497
- ```ruby
498
- training_libs/utils.py
499
- ```
500
- ```ruby
501
- AnomalyCLIP_lib/transform.py
502
  ```
503
- - **Data Processing Techniques:**
504
- - normalization:
505
- description: "์ด๋ฏธ์ง€ ํ”ฝ์…€ ๊ฐ’์„ ํ‰๊ท  ๋ฐ ํ‘œ์ค€ํŽธ์ฐจ๋กœ ํ‘œ์ค€ํ™”"
506
- method: "'Normalize' from 'torchvision.transforms'"
507
- - max_resize:
508
- description: "์ด๋ฏธ์ง€์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ์œ ์ง€ํ•˜๋ฉฐ, ๋น„์œจ์„ ๋งž์ถ”๊ณ  ํŒจ๋”ฉ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ํฌ๊ธฐ ์กฐ์ •"
509
- method: "Custom 'ResizeMaxSize' class"
510
- - random_resized_crop:
511
- description: "ํ›ˆ๋ จ ์ค‘์— ์ด๋ฏธ์ง€๋ฅผ ๋žœ๋ค์œผ๋กœ ์ž๋ฅด๊ณ  ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•˜์—ฌ ๋ณ€ํ˜•์„ ์ถ”๊ฐ€"
512
- method: "'RandomResizedCrop' from 'torchvision.transforms'"
513
- - resize:
514
- description: "๋ชจ๋ธ ์ž…๋ ฅ์— ๋งž๊ฒŒ ์ด๋ฏธ์ง€๋ฅผ ๊ณ ์ •๋œ ํฌ๊ธฐ๋กœ ์กฐ์ •"
515
- method: "'Resize' with BICUBIC interpolation"
516
- - center_crop:
517
- description: "์ด๋ฏธ์ง€์˜ ์ค‘์•™ ๋ถ€๋ถ„์„ ์ง€์ •๋œ ํฌ๊ธฐ๋กœ ์ž๋ฅด๊ธฐ"
518
- method: "'CenterCrop'"
519
- - to_tensor:
520
- description: "์ด๋ฏธ์ง€๋ฅผ PyTorch ํ…์„œ๋กœ ๋ณ€ํ™˜"
521
- method: "'ToTensor'"
522
- - augmentation (optional):
523
- description: "๋ฐ์ดํ„ฐ ์ฆ๊ฐ•์„ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ๋žœ๋ค ๋ณ€ํ™˜ ์ ์šฉ, 'AugmentationCfg'๋กœ ์„ค์ • ๊ฐ€๋Šฅ"
524
- method: "Uses 'timm' library if specified"
525
-
526
- ### โœ… Prompt generating
527
- ```ruby
528
- training_lib/prompt_ensemble.py
529
  ```
530
- ๐Ÿ‘ **Prompts Built in the Code**
531
- 1. Normal Prompt: *'["{ }"]'*
532
- โ†’ Normal Prompt Example: "object"
533
- 2. Anomaly Prompt: *'["damaged { }"]'*
534
- โ†’ Anomaly Prompt Example: "damaged object"
535
 
536
- ๐Ÿ‘ **Construction Process**
537
- 1. *'prompts_pos (Normal)'*: Combines the class name with the normal template
538
- 2. *'prompts_neg (Anomaly)'*: Combines the class name with the anomaly template
 
 
 
 
 
 
539
 
540
- ### โœ… Initial setting for training
 
541
 
542
- - Define the path to the training dataset and model checkpoint saving
543
- ```ruby
 
 
 
544
  parser.add_argument("--train_data_path", type=str, default="./data/", help="train dataset path")
545
  parser.add_argument("--dataset", type=str, default='smoke_cloud', help="train dataset name")
546
  parser.add_argument("--save_path", type=str, default='./checkpoint/', help='path to save results')
547
  ```
548
 
549
- ### โœ… Hyper parameters setting
 
 
550
 
551
- - Set the depth parameter: depth of the embedding learned during prompt training. This affects the model's ability to learn complex features from the data
552
- ```ruby
 
553
  parser.add_argument("--depth", type=int, default=9, help="image size")
554
  ```
555
 
556
- - Define the size of input images used for training (pixel)
557
- ```ruby
 
 
 
558
  parser.add_argument("--image_size", type=int, default=518, help="image size")
559
  ```
560
 
561
- - Setting parameters for training
562
- ```ruby
 
 
 
563
  parser.add_argument("--epoch", type=int, default=500, help="epochs")
564
  parser.add_argument("--learning_rate", type=float, default=0.0001, help="learning rate")
565
  parser.add_argument("--batch_size", type=int, default=8, help="batch size")
566
  ```
567
 
568
- - Size/depth parameter for the DPAM (Deep Prompt Attention Mechanism)
569
- ```ruby
570
- parser.add_argument("--dpam", type=int, default=20, help="dpam size")
571
 
572
- 1. ViT-B/32 and ViT-B/16: --dpam should be around 10-13
573
- 2. ViT-L/14 and ViT-L/14@336px: --dpam should be around 20-24
574
- ```
575
- ```ruby
576
- โ†’ DPAM is used to refine and enhance specific layers of a model, particularly in Vision Transformers (ViT).
577
- โ†’ Helps the model focus on important features within each layer through an attention mechanism
578
- โ†’ Layers: DPAM is applied across multiple layers, allowing deeper and more detailed feature extraction
579
- โ†’ Number of layers DPAM influences is adjustable (--dpam), controlling how much of the model is fine-tuned.
580
- โ†’ If you want to refine the entire model, you can set --dpam to the number of layers in the model (e.g., 12 for ViT-B and 24 for ViT-L).
581
- โ†’ If you want to focus only on the final layers (where the model usually learns complex features), you can choose fewer DPAM layers.
582
  ```
583
 
584
- ### โœ… Test process
 
 
585
 
586
- ๐Ÿ‘ **Load pre-trained and Fine tuned (Checkpoints) models**
587
- 1. Pre-trained mode (./pre-trained model/):
588
- ```ruby
589
- โ†’ Contains the pre-trained model (ViT-B, ViT-L,....)
590
- โ†’ Used as the starting point for training the CLIP model
591
- โ†’ Pre-trained model helps speed up and improve training by leveraging previously learned features
592
- ```
593
- 2. Fine-tuned models (./checkpoint/):
594
- ```ruby
595
- โ†’ "epoch_N.pth" files in this folder store the model's states during the fine-tuning process.
596
- โ†’ Each ".pth" file represents a version of the model fine-tuned from the pre-trained model
597
- โ†’ These checkpoints can be used to resume fine-tuning, evaluate the model at different stages, or select the best-performing version
598
- ```
 
 
 
599
 
 
 
 
 
 
 
 
 
600
 
601
- # ๋ชจ๋ธ ๊ณต๊ฒฉ ์ทจ์•ฝ์  ๋ถ„์„
602
  ๋ณธ ๋ฌธ์„œ๋Š” AnomalyCLIP ๋ชจ๋ธ์˜ ์ทจ์•ฝ์  ๋ถ„์„ ๋ฐ ์ ๋Œ€์  ๊ณต๊ฒฉ(Adversarial Attacks)์— ๋Œ€ํ•œ ๋ฐฉ์–ด ๋Œ€์ฑ…์„ ์ฒด๊ณ„์ ์œผ๋กœ ์ˆ˜๋ฆฝํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
603
  ๋ชจ๋ธ์˜ ์‹ ๋ขฐ์„ฑ๊ณผ ์•ˆ์ •์„ฑ์„ ํ™•๋ณดํ•˜๊ณ  ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด, ๋ฐ์ดํ„ฐ ๋ฐ ๋ชจ๋ธ ์ˆ˜์ค€์˜ ๋ฐฉ์–ด ์ „๋žต์„ ๊ตฌํ˜„ํ•˜๊ณ  ์„ฑ๋Šฅ์„ ํ‰๊ฐ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
604
- ## **1. ์ทจ์•ฝ์  ๋ถ„์„**
605
- - ### ** ์ ๋Œ€์  ๊ณต๊ฒฉ ์‹œ๋‚˜๋ฆฌ์˜ค**
 
 
 
606
  1. **Adversarial Examples:**
607
- - **์„ค๋ช…:** ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์— ์ž‘์€ ๋…ธ์ด์ฆˆ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ชจ๋ธ์˜ ์˜ˆ์ธก์„ ์™œ๊ณก.
608
- - **์˜ˆ:** ์ •์ƒ ์ด๋ฏธ์ง€๋ฅผ ๊ฒฐํ•จ ์ด๋ฏธ์ง€๋กœ ์˜ˆ์ธกํ•˜๋„๋ก ์œ ๋„.
 
609
  2. **Data Poisoning:**
610
- - **์„ค๋ช…:** ํ•™์Šต ๋ฐ์ดํ„ฐ์— ์•…์˜์  ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜์—ฌ ๋ชจ๋ธ ํ•™์Šต์„ ์™œ๊ณก.
611
- - **์˜ˆ:** ๋น„์ •์ƒ ๋ฐ์ดํ„ฐ๋ฅผ ์ •์ƒ ๋ฐ์ดํ„ฐ๋กœ ํ•™์Šต์‹œํ‚ค๋Š” ๊ฒฝ์šฐ.
 
612
  3. **Evasion Attacks:**
613
- - **์„ค๋ช…:** ์ถ”๋ก  ์‹œ ๋ชจ๋ธ์˜ ๋ถ„๋ฅ˜ ๊ฒฐ๊ณผ๋ฅผ ์กฐ์ž‘.
614
- - **์˜ˆ:** ๊ฒฐํ•จ ๋ฐ์ดํ„ฐ๋ฅผ ์ •์ƒ์œผ๋กœ ์˜ˆ์ธกํ•˜๋„๋ก ์œ ๋„.
615
-
616
- - ### **๋ชจ๋ธ ๋ฐ ๋ฐ์ดํ„ฐ์…‹ ์˜ํ–ฅ**
617
- - **์„ฑ๋Šฅ ์ €ํ•˜:** ์ ๋Œ€์  ์ƒ˜ํ”Œ ์ž…๋ ฅ ์‹œ ๋ชจ๋ธ์˜ ์ •ํ™•๋„ ๊ฐ์†Œ.
618
- - **๋ฌด๊ฒฐ์„ฑ ์†์ƒ:** ๋ฐ์ดํ„ฐ ๋ณ€์กฐ๋กœ ์ธํ•ด ํ•™์Šต๋œ ๋ชจ๋ธ์ด ์‹ค์ œ ํ™˜๊ฒฝ์—์„œ ์‹ ๋ขฐ์„ฑ์„ ์ƒ์‹ค.
619
- - **์•…์˜์  ํ™œ์šฉ ๊ฐ€๋Šฅ์„ฑ:** ๋ชจ๋ธ์˜ ์˜์‚ฌ๊ฒฐ์ •์ด ์˜ค์ž‘๋™ํ•˜์—ฌ ์ƒ์‚ฐ ํ’ˆ์งˆ ๊ด€๋ฆฌ ์‹คํŒจ ๊ฐ€๋Šฅ์„ฑ ์ฆ๊ฐ€.
620
-
621
- ## **2. ๋Œ€์‘ ๋ฐฉ์•ˆ**
622
-
623
- - ### ** ๋ฐ์ดํ„ฐ ์ˆ˜์ค€ ๋ฐฉ์–ด ๋Œ€์ฑ…**
624
- 1. **๋ฐ์ดํ„ฐ ์ •์ œ:**
625
- - ํ๋ฆฟํ•˜๊ฑฐ๋‚˜ ์ž˜๋ฆฐ ์ด๋ฏธ์ง€ ์ œ๊ฑฐ.
626
- - ๋ฐ์ดํ„ฐ ๋…ธ์ด์ฆˆ ์ œ๊ฑฐ ๋ฐ ๊ฒฐํ•จ ๋ณต๊ตฌ.
627
- - **๊ฒฐ๊ณผ:** ๋ฐ์ดํ„ฐ ํ’ˆ์งˆ ๊ฐ•ํ™”๋กœ ์ ๋Œ€์  ๋…ธ์ด์ฆˆ ํšจ๊ณผ ๊ฐ์†Œ.
628
- 2. **๋ฐ์ดํ„ฐ ์ฆ๊ฐ•(Data Augmentation):**
629
- - ๋žœ๋ค ํšŒ์ „, ํฌ๊ธฐ ์กฐ์ •, ๋ฐ๊ธฐ ๋ฐ ๋Œ€๋น„ ์กฐ์ •.
630
- - Gaussian Noise ๋ฐ Salt-and-Pepper Noise ์ถ”๊ฐ€.
631
- - **๊ฒฐ๊ณผ:** ๋ฐ์ดํ„ฐ ๋‹ค์–‘์„ฑ ํ™•๋ณด ๋ฐ ๋ชจ๋ธ ์ผ๋ฐ˜ํ™” ์„ฑ๋Šฅ ๊ฐ•ํ™”.
632
- 3. **๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์ฆ:**
633
- - ๊ฐ ๋ฐ์ดํ„ฐ ํ•ด์‹œ๊ฐ’(MD5) ์ €์žฅ ๋ฐ ์œ„๋ณ€์กฐ ์—ฌ๋ถ€ ํ™•์ธ.
634
- - **๊ฒฐ๊ณผ:** ๋ฐ์ดํ„ฐ์…‹ ์‹ ๋ขฐ์„ฑ ๋ฐ ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ.
635
-
636
- - ### **๋ชจ๋ธ ์ˆ˜์ค€ ๋ฐฉ์–ด ๋Œ€์ฑ…**
637
- 1. **Adversarial Training:**
638
- - FGSM ๊ธฐ๋ฐ˜์˜ ์ ๋Œ€์  ์ƒ˜ํ”Œ์„ ํ•™์Šต ๋ฐ์ดํ„ฐ์— ํฌํ•จ.
639
- - **๊ฒฐ๊ณผ:** ์ ๋Œ€์  ์ƒ˜ํ”Œ์—์„œ๋„ ํ‰๊ท  ์ •ํ™•๋„ 5% ํ–ฅ์ƒ.
640
- 2. **Gradient Masking:**
641
- - ๊ทธ๋ž˜๋””์–ธํŠธ๋ฅผ ์ˆจ๊ฒจ ๋ชจ๋ธ์ด ์ ๋Œ€์  ๊ณต๊ฒฉ์— ๋…ธ์ถœ๋˜์ง€ ์•Š๋„๋ก ๋ฐฉ์–ด.
642
- 3. **Temperature Scaling:**
643
- - ๋ชจ๋ธ์˜ ์˜ˆ์ธก ํ™•๋ฅ ์„ ์กฐ์ •ํ•˜์—ฌ ์ ๋Œ€์  ์ƒ˜ํ”Œ ๋ฏผ๊ฐ๋„ ์™„ํ™”.
644
-
645
- - ### **์‹œ์Šคํ…œ ์ˆ˜์ค€ ๋ฐฉ์–ด ๋Œ€์ฑ…**
646
- 1. **์‹ค์‹œ๊ฐ„ ํƒ์ง€ ๋ฐ ๋Œ€์‘:**
647
- - ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ์ด์ƒ ํŒจํ„ด์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํƒ์ง€ํ•˜๋Š” ์‹œ์Šคํ…œ ๊ตฌ์ถ•.
648
- - **๊ฒฐ๊ณผ:** ์ ๋Œ€์  ๊ณต๊ฒฉ ๋ฐœ์ƒ ์‹œ ์ฆ‰๊ฐ์ ์ธ ๊ฒฝ๊ณ  ๋ฐ ๋Œ€์‘ ๊ฐ€๋Šฅ.
649
- 2. **์ž๋™ํ™”๋œ ๋ฐฉ์–ด ๋„๊ตฌ:**
650
- - Adversarial Examples ์ƒ์„ฑ ๋ฐ ๋ฐฉ์–ด ํ…Œ์ŠคํŠธ ์ž๋™ํ™”.
651
-
652
- ## **3. ์‹คํ—˜ ๊ฒฐ๊ณผ**
653
-
654
- - ### **ํ‰๊ฐ€ ๋ฐ์ดํ„ฐ**
655
-
656
- - **๋ฐ์ดํ„ฐ์…‹ ๊ตฌ์„ฑ:**
657
- - ์ •์ƒ ๋ฐ์ดํ„ฐ: 110๊ฑด
658
- - ๊ฒฐํ•จ ๋ฐ์ดํ„ฐ: 10๊ฑด
659
- - ์ ๋Œ€์  ๋ฐ์ดํ„ฐ(FGSM ๊ณต๊ฒฉ): 100๊ฑด
660
-
661
- - ### **์ฃผ์š” ์„ฑ๋Šฅ ์ง€ํ‘œ**
662
- ๋ฉ”ํŠธ๋ฆญ | ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ | ์ ๋Œ€์  ๋ฐ์ดํ„ฐ | ๋ณ€ํ™”์œจ
663
- -----------------|-------------|---------------|--------
664
- Accuracy | 98% | 92% | -6%
665
- F1 Score | 0.935 | 0.91 | -2.5%
666
- False Positive | 2% | 5% | +3%
667
- False Negative | 3% | 7% | +4%
668
-
669
- ## **4. ํ–ฅํ›„ ๊ณ„ํš**
670
- 1. **๋‹ค์–‘ํ•œ ๊ณต๊ฒฉ ๊ธฐ๋ฒ• ํ…Œ์ŠคํŠธ:**
671
- - PGD, DeepFool ๋“ฑ ์ƒˆ๋กœ์šด ๊ณต๊ฒฉ ๊ธฐ๋ฒ• ์ ์šฉ ๋ฐ ํ‰๊ฐ€.
672
- 2. **๋ชจ๋ธ ๊ฐœ์„ :**
673
- - Contrastive Learning ๋ฐ ์•™์ƒ๋ธ” ํ•™์Šต์„ ํ†ตํ•œ ๊ฒฌ๊ณ ์„ฑ ๊ฐ•ํ™”.
674
- 3. **์‹ค์‹œ๊ฐ„ ๋ฐฉ์–ด ์‹œ์Šคํ…œ ๊ตฌ์ถ•:**
675
- - ๋ชจ๋ธ์˜ ์‹ค์‹œ๊ฐ„ ์˜ˆ์ธก ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ์ ๋Œ€์  ์ž…๋ ฅ ํƒ์ง€ ๋ฐ ์ฐจ๋‹จ.
676
 
 
677
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
678
 
679
  ## ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ณด์•ˆยท๋ผ์ด์„ ์Šค ์œ„ํ—˜ ๊ด€๋ฆฌ ์ฒด๊ณ„
680
 
681
  > ๋ณธ ์„น์…˜์€ AnomalyCLIP/AD-CLIP ๊ธฐ๋ฐ˜ ๋ชจ๋ธ ์นด๋“œ์˜ **๋ณด์•ˆยท๋ผ์ด์„ ์Šค ๊ฑฐ๋ฒ„๋„Œ์Šค**๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
682
  > ๋ชฉ์ : ๊ณต๊ธ‰๋ง(Software Supply Chain) ๋ฆฌ์Šคํฌ ์ตœ์†Œํ™”, ๋ผ์ด์„ ์Šค ์˜๋ฌด ์ค€์ˆ˜, ์žฌ๋ฐฐํฌ/์ƒ์šฉํ™” ์ ํ•ฉ์„ฑ ํ™•๋ณด.
683
 
684
- ---
685
-
686
  ### 1) ๋ฒ”์œ„(Scope) & ์›์น™
687
 
688
- - **๋Œ€์ƒ**: ํ•™์Šต/์ถ”๋ก  ์ฝ”๋“œ, ์Šคํฌ๋ฆฝํŠธ, ๋„๊ตฌ ์ฒด์ธ, ํŒŒ์ƒ ์‚ฐ์ถœ๋ฌผ(๊ฐ€์ค‘์น˜ยท์ฒดํฌํฌ์ธํŠธยทGUI ์‹คํ–‰ํŒŒ์ผ), ๋ฐฐํฌ ๋ฒˆ๋“ค(whl/zip/docker).
689
- - **์›์น™**
690
- - ์ตœ์†Œ๊ถŒํ•œ(Principle of Least Privilege), ์žฌํ˜„๊ฐ€๋Šฅ ๋นŒ๋“œ(Reproducible Build), ํˆฌ๋ช…์„ฑ(๋ช…์‹œ์  ๋ผ์ด์„ ์Šค ๊ณ ์ง€), ์‹ ์†ํ•œ ์ทจ์•ฝ์  ํŒจ์น˜.
691
- - **์ƒ์šฉ ๋ฐฐํฌ ์‹œ** ๋ชจ๋“  OSS ์˜๋ฌด(์ €์ž‘๊ถŒ/NOTICE/์†Œ์Šค ์ œ๊ณต ๋ฒ”์œ„ ๋“ฑ) ์„ ์ดํ–‰ ํ›„ ๋ฐฐํฌ.
 
 
 
692
 
693
- ---
694
 
695
- ### 2) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ & ๋ผ์ด์„ ์Šค ๋งคํŠธ๋ฆญ์Šค (์˜ˆ์‹œ)
696
-
697
- > ์‹ค์ œ ์‚ฌ์šฉํ•˜๋Š” ๋ฒ„์ „/๋ผ์ด์„ ์Šค๋Š” `pip-licenses`/`cyclonedx-py` ์‚ฐ์ถœ๋ฌผ๋กœ **์ž๋™์ƒ์„ฑ**ํ•˜์—ฌ ๋ณธ ํ…Œ์ด๋ธ”์„ ์ •๊ธฐ ์—…๋ฐ์ดํŠธ ํ•ฉ๋‹ˆ๋‹ค.
698
 
699
  | ํŒจํ‚ค์ง€ | ๋ฒ„์ „(์˜ˆ) | ๋ผ์ด์„ ์Šค(์˜ˆ) | ํ•ต์‹ฌ ์˜๋ฌด |
700
- |---|---:|---|---|
701
  | ftfy | 6.2.0 | MIT | ์ €์ž‘๊ถŒ ๊ณ ์ง€ ์œ ์ง€ |
702
  | matplotlib | 3.9.0 | PSF/MATPL | ์ €์ž‘๊ถŒ ๊ณ ์ง€ |
703
  | numpy | 1.24.3 | BSD-3 | ์ €์ž‘๊ถŒ/๋ฉด์ฑ… ๊ณ ์ง€ |
704
  | opencv-python | 4.9.0.80 | Apache-2.0 | NOTICE ํฌํ•จ ๊ถŒ์žฅ |
705
  | pandas | 2.2.2 | BSD-3 | ์ €์ž‘๊ถŒ/๋ฉด์ฑ… ๊ณ ์ง€ |
706
  | Pillow | 10.3.0 | HPND-PIL | ์ €์ž‘๊ถŒ ๊ณ ์ง€ |
707
- | PyQt5 / PyQt5-sip | 5.15.10 / 12.13.0 | GPLv3/์ƒ์šฉ๋“€์–ผ | **์ƒ์šฉ ๋ฐฐํฌยท์ •์  ๋งํฌ ์ฃผ์˜** |
708
  | regex | 2024.5.15 | PSF | ์ €์ž‘๊ถŒ ๊ณ ์ง€ |
709
  | scikit-learn | 1.2.2 | BSD-3 | ์ €์ž‘๊ถŒ ๊ณ ์ง€ |
710
  | scipy | 1.9.1 | BSD-3 | ์ €์ž‘๊ถŒ ๊ณ ์ง€ |
@@ -717,36 +799,32 @@ False Negative | 3% | 7% | +4%
717
  | torchvision | 0.15.1 | BSD-3 | ์ €์ž‘๊ถŒ ๊ณ ์ง€ |
718
  | tqdm | 4.65.0 | MPL-2.0 | ์ˆ˜์ • ๋ฐฐํฌ ์‹œ ์†Œ์Šค ๊ณต๊ฐœ ์š”๊ฑด ํ™•์ธ |
719
  | pyautogui | ์ตœ์‹  | BSD-3 | ์ €์ž‘๊ถŒ ๊ณ ์ง€ |
720
- | **CLIP ๊ฐ€์ค‘์น˜(ViT-B/32 ๋“ฑ)** | ๋งํฌ ์ฐธ์กฐ | **OpenAI Terms(๋ชจ๋ธ ๊ฐ€์ค‘์น˜)** | **์ƒ์—…์  ์ด์šฉ ๊ฐ€๋Šฅ ์—ฌ๋ถ€/์žฌ๋ฐฐํฌ ์ œํ•œ ์‚ฌํ•ญ์„ ๊ฐœ๋ณ„ ์•ฝ๊ด€์œผ๋กœ ์žฌํ™•์ธ ํ•„์š”** |
721
 
722
- > โš ๏ธ **์ฃผ์˜**: PyQt5๋Š” GPLv3(๋˜๋Š” ์ƒ์šฉ ๋ผ์ด์„ ์Šค)๋กœ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. **์ƒ์šฉ ๋ฐฐํฌ/์ •์  ๋งํฌ** ์‹œ **์ฝ”๋“œ ๊ณต๊ฐœ ์˜๋ฌด**๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ํ•„์š” ์‹œ **์ƒ์šฉ ๋ผ์ด์„ ์Šค ๊ตฌ๋งค** ๋˜๋Š” **Qt์˜ ๋Œ€์ฒด GUI(์˜ˆ: PySide6 LGPL, ์›น ํ”„๋ก ํŠธ์—”๋“œ)** ๊ฒ€ํ† ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
723
- > โš ๏ธ **OpenAI CLIP ๊ฐ€์ค‘์น˜**๋Š” **OpenAI ์ œ๊ณต ์•ฝ๊ด€**์„ ๋ฐ˜๋“œ์‹œ ํ™•์ธํ•ด **์žฌ๋ฐฐํฌ/์ƒ์—…์  ์‚ฌ์šฉ ๋ฒ”์œ„**๋ฅผ ๊ฒ€์ฆํ•˜์„ธ์š”.
724
 
725
- ---
726
 
727
  ### 3) ๋ฐฐํฌ ์‹œ ํ•„์ˆ˜ ๊ณ ์ง€(Attribution) & NOTICE
728
 
729
- - ์ €์žฅ์†Œ ๋ฃจํŠธ์— **`LICENSE`**, **`NOTICE`**, **`THIRD_PARTY_LICENSES/`** ์œ ์ง€.
730
- - ํŒจํ‚ค์ง€๋ณ„ ์ €์ž‘๊ถŒยท๋ฉด์ฑ… ๊ณ ์ง€ ํฌํ•จ(์ž๋™์ˆ˜์ง‘ ์‚ฐ์ถœ๋ฌผ ๋ณ‘ํ•ฉ).
731
- - ๋ชจ๋ธ ๊ฐ€์ค‘์น˜/๋ฐ์ดํ„ฐ์…‹์˜ **์›์ €์ž‘์žยท์•ฝ๊ด€**์„ README์— ๋ช…์‹œ.
732
-
733
- **NOTICE ํ…œํ”Œ๋ฆฟ (๋ฐœ์ทŒ)**
734
-
735
 
736
  ### 4) ์ทจ์•ฝ์  ๊ด€๋ฆฌ ํ”„๋กœ์„ธ์Šค (CVE/SBOM)
737
 
738
- **๋„๊ตฌ ์ฒด์ธ(๊ถŒ์žฅ)**
739
  - SBOM: `cyclonedx-py` / `pipdeptree` โ†’ `bom.json`/`bom.xml`
740
  - ๋ผ์ด์„ ์Šค: `pip-licenses --format=json`
741
  - ์ทจ์•ฝ์ : `pip-audit`, `safety`, (์ปจํ…Œ์ด๋„ˆ) `trivy`
742
 
743
- **์ •์ฑ…**
744
- 1. **์ฃผ๊ธฐ์  ์Šค์บ”**: ๋ฉ”์ธ ๋ธŒ๋žœ์น˜ ์ฃผ 1ํšŒ, ๋ฆด๋ฆฌ์Šค ์ง์ „ 1ํšŒ.
745
- 2. **์ž„๊ณ„์น˜**: High/CRITICAL ๋ฐœ๊ฒฌ ์‹œ **๋ฆด๋ฆฌ์Šค ์ค‘๋‹จ**, ํŒจ์น˜/์šฐํšŒ๋ฒ„์ „ ํ‰๊ฐ€.
746
- 3. **๋ณ€๊ฒฝ๊ด€๋ฆฌ**: ํŒจ์น˜ ํ›„ ํšŒ๊ท€ ํ…Œ์ŠคํŠธ, ์„ฑ๋Šฅ ์˜ํ–ฅ ๋ณด๊ณ .
747
- 4. **์ถ”์ **: `SECURITY.md`์— CVE, ์˜ํ–ฅ๋ฒ”์œ„, ๋Œ€์‘์ƒํƒœ ๊ธฐ๋ก.
748
 
749
- **์˜ˆ์‹œ ์ปค๋งจ๋“œ**
750
 
751
  ```bash
752
  # SBOM
@@ -761,27 +839,30 @@ safety check # ์•ˆ์ „์„ฑ DB ๊ธฐ๋ฐ˜ ์Šค์บ”
761
 
762
  # ์ปจํ…Œ์ด๋„ˆ(์žˆ์„ ๊ฒฝ์šฐ)
763
  trivy fs . # ์†Œ์Šค/์ข…์†์„ฑ ์Šค์บ”
 
764
 
765
- ### 5๏ธ. ๊ฐœ๋ฐœยท๋นŒ๋“œ ๋ณด์•ˆ (Development & Build Security)
766
 
767
  > ์•ˆ์ „ํ•˜๊ณ  ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๋นŒ๋“œ ํŒŒ์ดํ”„๋ผ์ธ์„ ์œ ์ง€ํ•˜์—ฌ ๊ณต๊ธ‰๋ง ๋ฆฌ์Šคํฌ๋ฅผ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.
768
 
769
- **๊ถŒ์žฅ ์„ค์ •**
770
- - ์ž ๊ธˆํŒŒ์ผ(`requirements.txt` / `constraints.txt`)์— ์ •ํ™•ํ•œ ๋ฒ„์ „(pin) ๋ช…์‹œ
771
  - `pip-tools`๋ฅผ ์‚ฌ์šฉํ•ด ์˜์กด์„ฑ ๋™๊ฒฐ (`pip-compile`)
772
- - CI/CD์—์„œ `--require-hashes` ์˜ต์…˜์œผ๋กœ ํ•ด์‹œ ๊ฒ€์ฆ
773
- - ๋ฐฐํฌ ์•„ํ‹ฐํŒฉํŠธ์— **SHA256 ํ•ด์‹œ ๋ฐ SBOM** ํฌํ•จ
774
- - **API Key / Token**์€ ์ฝ”๋“œ์— ๏ฟฝ๏ฟฝ๋Œ€ ํฌํ•จ ๊ธˆ์ง€ (ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋˜๋Š” Secret Manager ์‚ฌ์šฉ)
775
- - **์„œ๋ช…/๋ฌด๊ฒฐ์„ฑ ๊ด€๋ฆฌ**: ํ•ด์‹œ ๊ฒ€์ฆ ๋ฐ SBOM ๋™์‹œ ๋ฐฐํฌ
776
- - **๊ถŒํ•œ ๋ถ„๋ฆฌ**: ํ•™์Šต/์ถ”๋ก  ์„œ๋ฒ„๋Š” ์ตœ์†Œ ๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰
 
 
777
 
778
- **์„ค์น˜ ์˜ˆ์‹œ**
779
  ```bash
780
  pip install pip-tools
781
  pip install cyclonedx-bom pipdeptree pip-licenses pip-audit safety
782
  ```
783
 
784
- **๋นŒ๋“œ/๊ฒ€์ฆ ๋ช…๋ น์–ด**
 
785
  ```bash
786
  # ์˜์กด์„ฑ ๋™๊ฒฐ
787
  pip-compile requirements.in --output-file requirements.txt
@@ -797,20 +878,18 @@ pip-audit
797
  safety check
798
  ```
799
 
800
- ---
801
-
802
  ### 6. ๋ฐ์ดํ„ฐยท๋ชจ๋ธ ์•„ํ‹ฐํŒฉํŠธ ๋ณด์•ˆ (Data & Model Artifact Security)
803
 
804
  > ๋ชจ๋ธ๊ณผ ๋ฐ์ดํ„ฐ๋Š” AI ๊ณต๊ธ‰๋ง์˜ ํ•ต์‹ฌ ์ž์‚ฐ์ž…๋‹ˆ๋‹ค.
805
  > ์•„๋ž˜ ์ง€์นจ์€ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ๊ณผ ๋ชจ๋ธ์˜ ์‹ ๋ขฐ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์†Œ ๋ณด์•ˆ ๊ธฐ์ค€์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
806
 
807
- **ํ•ต์‹ฌ ๋ชฉํ‘œ**
808
- 1. ํ•™์Šต ๋ฐ ํ‰๊ฐ€ ๋ฐ์ดํ„ฐ์˜ **๋ฌด๊ฒฐ์„ฑ(Integrity)** ๋ณด์žฅ
809
- 2. ๋ชจ๋ธ ์ฒดํฌํฌ์ธํŠธ(.pth ๋“ฑ)์˜ **์œ„๋ณ€์กฐ ๋ฐฉ์ง€ ๋ฐ ์ถ”์ ์„ฑ ํ™•๋ณด**
810
- 3. **์ ๋Œ€์  ๊ณต๊ฒฉ(Adversarial Attack)** ๋ฐ **๋ฐ์ดํ„ฐ ์˜ค์—ผ(Data Poisoning)** ๋Œ€์‘
811
  4. ํ•™์Šต ์žฌํ˜„์„ฑ(Reproducibility) ๋ณด์žฅ
812
 
813
- **๋ฐ์ดํ„ฐ ๋ณด์•ˆ ๊ด€๋ฆฌ ์ ˆ์ฐจ**
814
 
815
  | ๋‹จ๊ณ„ | ์„ค๋ช… | ๋„๊ตฌ / ์‹คํ–‰ ์˜ˆ์‹œ |
816
  |------|------|------------------|
@@ -820,7 +899,7 @@ safety check
820
  | โ‘ฃ ์ ‘๊ทผ ์ œ์–ด | ๋ฐ์ดํ„ฐ ํด๋” ๊ถŒํ•œ ์ตœ์†Œํ™” (r-- ๊ถŒํ•œ์œผ๋กœ ๊ณต์œ ) | `chmod 440 data/*` |
821
  | โ‘ค ๋ฒ„์ „ ๊ด€๋ฆฌ | ๋ณ€๊ฒฝ ์‹œ์ ๋งˆ๋‹ค ๋ฒ„์ „๋ช… ๊ธฐ๋ก (์˜ˆ: `20241002_V2`) | Git tag ๋˜๋Š” DVC ์‚ฌ์šฉ |
822
 
823
- **๋ชจ๋ธ ์•„ํ‹ฐํŒฉํŠธ ๊ด€๋ฆฌ**
824
 
825
  | ํ•ญ๋ชฉ | ๊ด€๋ฆฌ ๋ฐฉ๋ฒ• | ์ฃผ์˜์‚ฌํ•ญ |
826
  |------|-------------|-----------|
@@ -830,7 +909,8 @@ safety check
830
  | **์ถ”์ ์„ฑ ํ™•๋ณด** | MLflow / W&B ๋˜๋Š” ๋กœ์ปฌ DB ์‚ฌ์šฉ | `run_id`, `commit_id`, `data_version` ์—ฐ๋™ |
831
  | **๋น„๊ณต๊ฐœ ์ €์žฅ์†Œ ๊ด€๋ฆฌ** | ๋‚ด๋ถ€ NAS ๋˜๋Š” S3 Private Bucket ํ™œ์šฉ | ๊ณต๊ฐœ ์ €์žฅ์†Œ ์—…๋กœ๋“œ ๊ธˆ์ง€ (ํŠนํžˆ ๊ณ ๊ฐ ์ด๋ฏธ์ง€ ํฌํ•จ ์‹œ) |
832
 
833
- **์ฒดํฌํฌ์ธํŠธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ตฌ์กฐ (์˜ˆ์‹œ)**
 
834
  ```json
835
  {
836
  "model_name": "ad_clip_epoch_120.pth",
@@ -846,7 +926,7 @@ safety check
846
  }
847
  ```
848
 
849
- **์ ๋Œ€์  ๊ณต๊ฒฉ(Adversarial Attack) ๋ฐฉ์–ด ๊ฐ•ํ™”**
850
 
851
  | ๊ณต๊ฒฉ ์œ ํ˜• | ์„ค๋ช… | ๋Œ€์‘ ๋ฐฉ์•ˆ |
852
  |------------|------|------------|
@@ -855,7 +935,8 @@ safety check
855
  | **Data Poisoning** | ํ•™์Šต ๋ฐ์ดํ„ฐ์— ์•…์„ฑ ๋ฐ์ดํ„ฐ ์‚ฝ์ž… | ๋ฐ์ดํ„ฐ ์ •์ œ ๋ฐ ํ•ด์‹œ ๊ธฐ๋ฐ˜ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์ฆ |
856
  | **Evasion Attack** | ์ถ”๋ก  ์‹œ ์ž…๋ ฅ ์กฐ์ž‘ | ํ™•๋ฅ  ์ž„๊ณ„๊ฐ’ ์กฐ์ • + Gradient Masking |
857
 
858
- **๋ฌด๊ฒฐ์„ฑ ๊ฒ€์ฆ ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ (์˜ˆ์‹œ)**
 
859
  ```bash
860
  #!/bin/bash
861
  echo "[INFO] Starting dataset integrity check..."
@@ -871,15 +952,17 @@ done
871
  echo "[INFO] Dataset integrity check completed successfully."
872
  ```
873
 
874
- **๊ถŒ์žฅ ๋„๊ตฌ**
 
875
  | ๋ชฉ์  | ๋„๊ตฌ | ๋น„๊ณ  |
876
  |------|------|------|
877
- | ๋ฐ์ดํ„ฐ ๋ฒ„์ „ ๊ด€๋ฆฌ | **DVC (Data Version Control)** | Git ์—ฐ๋™ ๊ฐ€๋Šฅ |
878
- | ๋ชจ๋ธ ์‹คํ—˜ ์ถ”์  | **MLflow / W&B** | ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ ๊ฒฐ๊ณผ ์ถ”์  |
879
- | ๋ณด์•ˆ ์Šค์บ” | **trivy**, **safety**, **pip-audit** | ์˜์กด์„ฑ ์ทจ์•ฝ์  ์ ๊ฒ€ |
880
- | ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์ฆ | **sha256sum / openssl dgst** | ํ•ด์‹œ ๊ธฐ๋ฐ˜ ๊ฒ€์ฆ |
 
 
881
 
882
- **์˜ˆ์‹œ ์›Œํฌํ”Œ๋กœ์šฐ (๋ชจ๋ธ ์•„์นด์ด๋ธŒ ์ƒ์„ฑ)**
883
  ```bash
884
  # 1. ํ•ด์‹œ ์ƒ์„ฑ
885
  sha256sum ad_clip_epoch_120.pth > ad_clip_epoch_120.pth.sha256
@@ -894,7 +977,8 @@ tar -czvf adclip_model_v2.tar.gz ad_clip_epoch_120.pth model_info.json
894
  sha256sum -c ad_clip_epoch_120.pth.sha256
895
  ```
896
 
897
- **๋ฌธ์„œํ™” ์˜ˆ์‹œ**
 
898
  > `/security/model_security/README.md` ํŒŒ์ผ ๋‚ด ํฌํ•จ ๊ถŒ์žฅ
899
 
900
  ```markdown
@@ -904,27 +988,24 @@ sha256sum -c ad_clip_epoch_120.pth.sha256
904
  - ๋ฐ์ดํ„ฐ์…‹ ๋ฐ ๋ชจ๋ธ ๋ณ€๊ฒฝ ์‹œ, ์ƒˆ๋กœ์šด ๋ฒ„์ „ ํƒœ๊ทธ(`_Vx.x`)๋ฅผ ๋ถ€์—ฌํ•˜๊ณ  SBOM์„ ์žฌ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
905
  ```
906
 
907
- ---
908
-
909
  ### 7. ์žฌ๋ฐฐํฌยท์ƒ์—…ํ™” ๊ฐ€์ด๋“œ (Redistribution & Commercialization)
910
 
911
  > ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด์„ ์Šค ๋ฐ ๋ฐ์ดํ„ฐ์…‹ยท๋ชจ๋ธ ์•ฝ๊ด€์„ ์ค€์ˆ˜ํ•˜์—ฌ ๋ฒ•์  ๋ฆฌ์Šคํฌ๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.
912
 
913
- **์›์น™**
 
914
  | ๋ผ์ด์„ ์Šค | ์‚ฌ์šฉ ๊ฐ€๋Šฅ์„ฑ | ์ฃผ์˜์‚ฌํ•ญ |
915
  |-----------|-------------|-----------|
916
- | **MIT / BSD / Apache-2.0** | โœ… ์ž์œ ๋กœ์šด ์ƒ์—…์  ์‚ฌ์šฉ ๊ฐ€๋Šฅ | ์ €์ž‘๊ถŒ, NOTICE ํŒŒ์ผ ์œ ์ง€ |
917
- | **GPL / MPL ๋“ฑ ์นดํ”ผ๋ ˆํ”„ํŠธ** | โš ๏ธ ์กฐ๊ฑด๋ถ€ ํ—ˆ์šฉ | ๋งํฌ ๋ฐฉ์‹์— ๋”ฐ๋ผ ์†Œ์Šค ๊ณต๊ฐœ ์˜๋ฌด ๋ฐœ์ƒ |
918
- | **OpenAI CLIP ๊ฐ€์ค‘์น˜** | โš ๏ธ ์ œํ•œ์  | ์ƒ์—…์  ์ด์šฉ ์•ฝ๊ด€ ๋ณ„๋„ ํ™•์ธ ํ•„์š” |
919
- | **HuggingFace Dataset** | โš ๏ธ ์ถœ์ฒ˜๋ณ„ ํ™•์ธ | ๋ฐ์ดํ„ฐ ์ œ๊ณต์ž ์•ฝ๊ด€ ์ค€์ˆ˜ ํ•„์š” |
920
 
921
- **์ฒดํฌ๋ฆฌ์ŠคํŠธ**
922
- - [x] `THIRD_PARTY_LICENSES/` ์ตœ์‹ ํ™”
923
- - [x] PyQt5 ๋“ฑ **GPL ๊ณ„์—ด** ์˜์กด์„ฑ ๊ฒ€ํ† 
924
- - [x] CLIP ๊ฐ€์ค‘์น˜ ์•ฝ๊ด€ ๋ฌธ์„œ ์ฒจ๋ถ€
925
- - [x] SBOM + ํ•ด์‹œ ํฌํ•จํ•˜์—ฌ ๋ฐฐํฌ
926
-
927
- ---
928
 
929
  ### 8. ๋‚ด๋ถ€ ์Šน์ธยทRACI (Internal Approval & RACI)
930
 
@@ -937,8 +1018,6 @@ sha256sum -c ad_clip_epoch_120.pth.sha256
937
  | ์ทจ์•ฝ์  ํŒจ์น˜ ์ ์šฉ | ๊ฐœ๋ฐœํŒ€ | ๋ณด์•ˆํŒ€ | ๊ฐœ๋ฐœํŒ€์žฅ |
938
  | ๋ฆด๋ฆฌ์Šค ์Šน์ธ | ๊ฐœ๋ฐœํŒ€ | ๋ณด์•ˆยท๋ฒ•๋ฌด | ์ œํ’ˆ ์ฑ…์ž„์ž(PO) |
939
 
940
- ---
941
-
942
  ### 9. PR ์ฒดํฌ๋ฆฌ์ŠคํŠธ (Pull Request Checklist)
943
 
944
  > ๋ฆด๋ฆฌ์Šค/๋ณ‘ํ•ฉ ์ „ ๋ณด์•ˆยท๋ฒ•์  ์ค€์ˆ˜๋ฅผ ์œ„ํ•œ ์ ๊ฒ€ ํ•ญ๋ชฉ์ž…๋‹ˆ๋‹ค.
@@ -956,5 +1035,6 @@ sha256sum -c ad_clip_epoch_120.pth.sha256
956
 
957
  ---
958
 
959
- # References
960
- - AnomalyCLIP: Object-agnostic Prompt Learning for Zero-shot Anomaly Detection [[github](https://github.com/zqhang/AnomalyCLIP.git)]
 
 
1
  ---
2
+ tags:
3
+ - clipsegmentation
4
+ - pytorch
5
+ - research
6
+ - computer-vision
7
+ library_name: torch
8
  datasets:
9
+ - quandao92/ad-clip-dataset
10
  metrics:
11
+ - f1
12
  base_model:
13
+ - openai/clip-vit-base-patch32
14
  ---
15
+
16
+ <div style='text-align: center; font-size: 28px; font-weight: bold'>
17
+ <h1>CLIP ๊ธฐ๋ฐ˜ ์ œํ’ˆ ๊ฒฐํ•จ ํƒ์ง€ ๋ชจ๋ธ ์นด๋“œ</h1>
18
+ </div>
19
 
20
  ## ๋ชจ๋ธ ์„ธ๋ถ€์‚ฌํ•ญ
21
 
 
25
  ์ด ๋ชจ๋ธ์€ CLIP ๊ธฐ๋ฐ˜ ์ด์ƒ ํƒ์ง€ ๊ธฐ๋ฒ•์„ ํ™œ์šฉํ•˜์—ฌ ์ œํ’ˆ ๊ฒฐํ•จ์„ ํƒ์ง€ํ•ฉ๋‹ˆ๋‹ค.
26
  ์‚ฌ์ „ ํ•™์Šต๋œ CLIP ๋ชจ๋ธ์„ ํŒŒ์ธํŠœ๋‹(Fine-tuning)ํ•˜์—ฌ ์ œํ’ˆ ์ด๋ฏธ์ง€์—์„œ ๊ฒฐํ•จ์„ ์‹๋ณ„ํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์ƒ์‚ฐ ๋ผ์ธ์˜ ํ’ˆ์งˆ ๊ด€๋ฆฌ ๋ฐ ๊ฒฐํ•จ ํƒ์ง€ ์ž‘์—…์„ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
27
 
28
+ | ์†์„ฑ | ๊ฐ’ |
29
+ |------|-----|
30
+ | **๊ฐœ๋ฐœ์ž** | ์œค์„๋ฏผ |
31
+ | **์ œ์ž‘ ํ›„์›** | SOLUWINS Co., Ltd. (์†”๋ฃจ์œˆ์Šค) |
32
+ | **์ฐธ๊ณ  ์—ฐ๊ตฌ** | zhou2023 anomalyclip [[github](https://github.com/zqhang/AnomalyCLIP.git)] |
33
+ | **๋ชจ๋ธ ์œ ํ˜•** | CLIP (Contrastive Language-Image Pretraining) - Domain-Agnostic Prompt Learning Model |
34
+ | **ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด** | Python |
35
+ | **๋ผ์ด์„ ์Šค** | Apache 2.0, MIT, OpenAI |
36
 
37
  ### ๊ธฐ์ˆ ์  ์ œํ•œ์‚ฌํ•ญ
38
 
39
+ | ์ œํ•œ์‚ฌํ•ญ | ์„ค๋ช… |
40
+ |---------|------|
41
+ | **๋ฐ์ดํ„ฐ ์š”๊ตฌ์‚ฌํ•ญ** | ์ถฉ๋ถ„ํ•˜๊ณ  ๋‹ค์–‘ํ•œ ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ์…‹์ด ๋ถ€์กฑํ•˜๊ฑฐ๋‚˜ ๋ถˆ๊ท ํ˜•ํ•  ๊ฒฝ์šฐ ๋ชจ๋ธ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. |
42
+ | **์„ฑ๋Šฅ ์ œํ•œ** | ์‹ค์‹œ๊ฐ„ ๊ฒฐํ•จ ๊ฐ์ง€ ์„ฑ๋Šฅ์€ ํ•˜๋“œ์›จ์–ด ์‚ฌ์–‘์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋†’์€ ํ•ด์ƒ๋„์—์„œ์˜ ์ •ํ™•๋„๊ฐ€ ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. |
43
+ | **ํƒ์ง€ ํ•œ๊ณ„** | ๊ฒฐํ•จ์ด ๋ฏธ์„ธํ•˜๊ฑฐ๋‚˜ ์ œํ’ˆ ๊ฐ„ ์œ ์‚ฌ์„ฑ์ด ๋งค์šฐ ๋†’์€ ๊ฒฝ์šฐ, ๋ชจ๋ธ์ด ๊ฒฐํ•จ์„ ์ •ํ™•ํ•˜๊ฒŒ ํƒ์ง€ํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. |
44
 
45
  ## ํ•™์Šต ์„ธ๋ถ€์‚ฌํ•ญ
46
 
47
+ ### ํ•˜๋“œ์›จ์–ด ํ™˜๊ฒฝ
48
+
49
+ | ๊ตฌ์„ฑ ์š”์†Œ | ์‚ฌ์–‘ |
50
+ |---------|------|
51
+ | **CPU** | Intel Core i9-13900K (24 Cores, 32 Threads) |
52
+ | **RAM** | 64GB DDR5 |
53
+ | **GPU** | NVIDIA RTX 4090Ti 24GB |
54
+ | **Storage** | 1TB NVMe SSD + 2TB HDD |
55
 
56
+ ### ์†Œํ”„ํŠธ์›จ์–ด ํ™˜๊ฒฝ
57
+
58
+ | ๊ตฌ์„ฑ ์š”์†Œ | ๋ฒ„์ „ |
59
+ |---------|------|
60
+ | **OS** | Windows 11 64 bit / Ubuntu 20.04LTS |
61
+ | **Python** | 3.8 (anaconda) |
62
+ | **PyTorch** | 1.9.0 |
63
+ | **OpenCV** | 4.5.3 |
64
+ | **Cuda Toolkit** | 11.8 |
65
+ | **CuDNN** | 9.3.0.75 for cuda11 |
66
 
67
  ### ๋ฐ์ดํ„ฐ์…‹ ์ •๋ณด
68
 
 
70
  ์ด ๋ฐ์ดํ„ฐ๋Š” ์ œํ’ˆ์˜ ์ด๋ฏธ์ง€, ๊ฒฐํ•จ ์˜์—ญ์— ๋Œ€ํ•œ ground truth ์ •๋ณด, ๊ทธ๋ฆฌ๊ณ  ๊ธฐํƒ€ ๊ด€๋ จ ํŠน์„ฑ์„ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
71
  ์ด๋ฏธ์ง€๋Š” CLIP ๋ชจ๋ธ์˜ ์ž…๋ ฅ ํ˜•์‹์— ์ ํ•ฉํ•˜๋„๋ก ์ „์ฒ˜๋ฆฌ๋˜๋ฉฐ, ๊ฒฐํ•จ ์˜์—ญ์˜ ํ‰๊ฐ€๋ฅผ ์œ„ํ•ด ground truth ๋งˆํ‚น์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
72
 
73
+ - **๋ฐ์ดํ„ฐ ์†Œ์Šค:** https://huggingface.co/datasets/quandao92/ad-clip-dataset
74
  - **๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ์žฅ๋น„:**
75
  - ์ˆ˜์ง‘ H/W: jetson orin nano 8GB
76
  - ์นด๋ฉ”๋ผ: BFS-U3-89S6C Color Camera
77
  - ๋ Œ์ฆˆ: 8mm Fiexd Focal Length Lens
78
  - ์กฐ๋ช…: LIDLA-120070
79
  - ๋ฐ์ดํ„ฐ ํ˜•์‹: .bpm, .jpg
80
+
81
+ #### ๋ฐ์ดํ„ฐ ๋ฒ„์ „ ๊ด€๋ฆฌ
82
+
83
+ **1์ฐจ: 20240903_V0_๊ฐ„์ด ํ™˜๊ฒฝ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘**
84
+ - V01: ์ „์ฒ˜๋ฆฌ ์ „ ๋ฐ์ดํ„ฐ ์›๋ณธ โ†’ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ์›๋ณธ: 120ea
85
+ - V02: ๋ฐ์ดํ„ฐ ๋ถ„๋ฅ˜ โ†’ ์ •์ƒ/๋ถˆ๋Ÿ‰ ๋ถ„๋ฅ˜: 116ea/4ea
86
+ - V03: ๋ฐ์ดํ„ฐ ๋ถ„๋ฅ˜, ๋ฐ์ดํ„ฐ ํšŒ์ „ โ†’ ์ด๋ฏธ์ง€ ์ฆ๊ฐ•_45/90/135๋„๋กœ ํšŒ์ „_360ea
87
+
88
+ <div style="text-align: center;">
89
+ <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/6kvzgbH81jJrHJECaEspY.png" height="500" width="100%">
90
+ <p>Ground Truth Marking</p>
91
+ </div>
92
+
93
+ <div style="display: flex; justify-content: space-between;">
94
+ <div style="text-align: center; margin-right: 5px;">
95
+ <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/_fkcI52_BTcqvQyrJ4EXl.png" height="80%" width="90%" style="margin-right:5px;">
96
+ <p>PCA ๋ถ„ํฌ ์‹œ๊ฐํ™”</p>
97
+ </div>
98
+ <div style="text-align: center; margin-right: 5px;">
99
+ <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/biaWPJtbm6iwNf7ZqnW5O.png" height="80%" width="90%" style="margin-right:5px;">
100
+ <p>Isolation Forest๋กœ ์ด์ƒ๊ฐ’ ์‹๋ณ„ ๊ฒฐ๊ณผ</p>
101
+ </div>
102
+ </div>
103
+
104
+ **2์ฐจ: 20240910_V1_ํ•˜์šฐ์ง• ๋‚ด ์ด๋ฏธ์ง€ ์ˆ˜์ง‘**
105
+ - V01: ์ „์ฒ˜๋ฆฌ ์ „ ๋ฐ์ดํ„ฐ ์›๋ณธ โ†’ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ์›๋ณธ: 350ea
106
+ - V02: ๋ฐ์ดํ„ฐ ๋ถ„๋ฅ˜ โ†’ ์ •์ƒ/๋ถˆ๋Ÿ‰ ๋ถ„๋ฅ˜: 336ea/14ea
107
+ - V03: ๋ฐ์ดํ„ฐ ๋ถ„๋ฅ˜, ๋ฐ์ดํ„ฐ ํšŒ์ „ โ†’ ์ด๋ฏธ์ง€ ์ฆ๊ฐ•: 1,050ea
108
+
109
+ <div style="text-align: center;">
110
+ <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/YsP7UwejFabUFp2Im0xWj.png" height="500" width="100%">
111
+ <p>Ground Truth Marking</p>
112
+ </div>
113
+
114
+ <div style="display: flex; justify-content: space-between;">
115
+ <div style="text-align: center; margin-right: 5px;">
116
+ <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/CNFdse5mHQY1KkMb5BYpb.png" height="80%" width="90%" style="margin-right:5px;">
117
+ <p>PCA ๋ถ„ํฌ ์‹œ๊ฐํ™”</p>
118
+ </div>
119
+ <div style="text-align: center; margin-right: 5px;">
120
+ <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/nRO00DJFT0-B1EJYf8lzK.png" height="80%" width="90%" style="margin-right:5px;">
121
+ <p>Isolation Forest๋กœ ์ด์ƒ๊ฐ’ ์‹๋ณ„ ๊ฒฐ๊ณผ</p>
122
+ </div>
123
+ </div>
124
+
125
+ **3์ฐจ: 20250328_V2_์„ค๋น„ ๋‚ด ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘**
126
+ - V01: ์ „์ฒ˜๋ฆฌ ์ „ ๋ฐ์ดํ„ฐ ์›๋ณธ โ†’ ์ด๋ฏธ์ง€ ์ˆ˜์ง‘_2,010๊ฐœ
127
+ - V02: ๋ฐ์ดํ„ฐ ๋ถ„๋ฅ˜ โ†’ ์ •์ƒ/๋ถˆ๋Ÿ‰ ๋ถ„๋ฅ˜ ์ˆ˜ํ–‰_1,918/92
128
+ - V03: ๋ฐ์ดํ„ฐ ๋ถ„๋ฅ˜, ๋ฐ์ดํ„ฐ ํšŒ์ „ โ†’ ์ด๋ฏธ์ง€ ์ฆ๊ฐ• ์ˆ˜ํ–‰_์ด๋ฏธ์ง€ ํšŒ์ „์„ ํ†ตํ•ด ์ด๋ฏธ์ง€ ๊ฐœ์ˆ˜ 6,030๊ฐœ
129
+
130
+ <div style="text-align: center;">
131
+ <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/MFyVWaqr4GDNs8W2mWzGZ.png" height="500" width="100%">
132
+ <p>Ground Truth Marking</p>
133
+ </div>
134
+
135
+ <div style="display: flex; justify-content: space-between;">
136
+ <div style="text-align: center; margin-right: 5px;">
137
+ <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/Kc3EMbY05frUFQh5HbVHn.png" height="80%" width="90%" style="margin-right:5px;">
138
+ <p>PCA ๋ถ„ํฌ ์‹œ๊ฐํ™”</p>
139
+ </div>
140
+ <div style="text-align: center; margin-right: 5px;">
141
+ <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/SP4R5LjGo2M1Zvby1Bar_.png" height="80%" width="90%" style="margin-right:5px;">
142
+ <p>Isolation Forest๋กœ ์ด์ƒ๊ฐ’ ์‹๋ณ„ ๊ฒฐ๊ณผ</p>
143
+ </div>
144
+ </div>
145
+
146
+ #### Data Configuration
147
+
148
+ **์ด๋ฏธ์ง€ ํฌ๊ธฐ ์กฐ์ • ๋ฐ ์ •๊ทœํ™”:**
149
+ - ์ด๋ฏธ์ง€๋Š” ์ผ์ •ํ•œ ํฌ๊ธฐ(์˜ˆ: 518x518)๋กœ ๋ฆฌ์‚ฌ์ด์ฆˆ๋˜๋ฉฐ, CLIP ๋ชจ๋ธ์˜ ์ž…๋ ฅ์œผ๋กœ ์ ํ•ฉํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
150
+ - ์ •๊ทœํ™”๋ฅผ ํ†ตํ•ด ํ”ฝ์…€ ๊ฐ’์„ [0, 1] ๋ฒ”์œ„๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
151
+
152
+ **Ground Truth ๋งˆํ‚น:**
153
+ - ๊ฒฐํ•จ์ด ์žˆ๋Š” ์ด๋ฏธ์ง€์— ๋Œ€ํ•ด ๊ฒฐํ•จ ์˜์—ญ์„ bounding box ํ˜•์‹ ๋˜๋Š” binary mask๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
154
+ - ๋งˆํ‚น๋œ ๋ฐ์ดํ„ฐ๋ฅผ JSON ๋˜๋Š” CSV ํ˜•์‹์œผ๋กœ ์ €์žฅํ•˜์—ฌ ๋ชจ๋ธ ํ‰๊ฐ€ ์‹œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
155
+
156
+ <div style="text-align: center;">
157
+ <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/k8GQgaTK7JfQExNpCYpzz.png" height="500" width="100%" style="margin-right:5px;">
158
+ <p>Ground Truth Marking</p>
159
+ </div>
160
+
161
+ **๋ฐ์ดํ„ฐ ๋ถ„๋ฅ˜:**
162
+ - Normal: ๊ฒฐํ•จ์ด ์—†๋Š” ์ •์ƒ ์ œํ’ˆ์˜ ์ด๋ฏธ์ง€.
163
+ - Error: ๊ฒฐํ•จ์ด ์žˆ๋Š” ์ œํ’ˆ์˜ ์ด๋ฏธ์ง€. ๊ฒฐํ•จ ์œ„์น˜์™€ ๊ด€๋ จ ์ •๋ณด๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
164
+
165
+ <div style="display: flex;justify-content: space-between;">
166
+ <div style="text-align: center;margin-right: 5px;">
167
+ <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/5pGwZ-sptjWjf7WpHifyJ.jpeg" height="400" width="450">
168
+ </div>
169
+ <div style="text-align: center;justify-content: space-between; margin-right: 5px;">
170
+ <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/3iihck7VfkXKw9VcIl06x.jpeg" height="400" width="450">
171
+ </div>
172
+ <div style="text-align: center;justify-content: space-between;margin-right: 5px;">
173
+ <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/tjsmiXq9pp0K6KSuS1iOS.jpeg" height="400" width="450">
174
+ </div>
175
+ </div>
176
+ <p style="text-align: center;">Normal Product Images</p>
177
+
178
+ <div style="display: flex;justify-content: space-between;">
179
+ <div style="text-align: center;margin-right: 5px;">
180
+ <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/Qv01zDzEM5u8cQYdALrSU.jpeg" height="400" width="450">
181
+ </div>
182
+ <div style="text-align: center;justify-content: space-between; margin-right: 5px;">
183
+ <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/B5q_FKiTVXkuElTSlUc4s.jpeg" height="400" width="450">
184
+ </div>
185
+ <div style="text-align: center;justify-content: space-between;margin-right: 5px;">
186
+ <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/3pro8oEqMTiEwiwFKcACn.jpeg" height="400" width="450">
187
+ </div>
188
+ </div>
189
+ <p style="text-align: center;">Error Product Images</p>
190
 
191
  ### ๋ฐ์ดํ„ฐ ๋ผ๋ฒจ๋ง ๊ฐ€์ด๋“œ
192
+
193
  ๋ณธ ๋ฐ์ดํ„ฐ ๋ผ๋ฒจ๋ง ๊ฐ€์ด๋“œ๋Š” AnomalyDetection ๊ธฐ๋ฐ˜ ๋ชจ๋ธ ํ•™์Šต์„ ์œ„ํ•ด ์ˆ˜์ง‘๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ผ๋ฒจ๋งํ•˜๋Š” ๊ธฐ์ค€๊ณผ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ช…ํ™•ํžˆ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
194
  ๋ฐ์ดํ„ฐ๋Š” ์ฃผ๋กœ ์ •์ƒ(normal) ๋ฐ์ดํ„ฐ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ์ตœ์†Œํ•œ์˜ ๋น„์ •์ƒ(anomaly) ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
195
  ๋ณธ ๊ฐ€์ด๋“œ๋Š” ๋ฐ์ดํ„ฐ์˜ ํ’ˆ์งˆ์„ ์œ ์ง€ํ•˜๊ณ  ๋ชจ๋ธ ํ•™์Šต ๋ฐ ํ…Œ์ŠคํŠธ๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐ ๋ชฉํ‘œ๋ฅผ ๋‘ก๋‹ˆ๋‹ค.
196
+
197
+ #### ๋ผ๋ฒจ๋ง ๋ฒ”์œ„
198
+
199
+ 1. **์ •์ƒ(normal) ๋ฐ์ดํ„ฐ:**
200
+ - ์ „์ฒด ๋ฐ์ดํ„ฐ์˜ ์•ฝ **95% ์ด์ƒ**์„ ์ฐจ์ง€.
201
+ - ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ ์กฐ๊ฑด์—์„œ ์ˆ˜์ง‘๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จ (์กฐ๋ช…, ๊ฐ๋„, ๋ฐฐ๊ฒฝ ๋“ฑ).
202
+ - ์ •์ƒ์ ์ธ ์ƒํƒœ์˜ ๊ธˆ์† ํ‘œ๋ฉด, ์ •๋ฐ€ํ•œ ๊ตฌ์กฐ, ๊ท ์ผํ•œ ๊ด‘ํƒ์„ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ.
203
+
204
+ 2. **๋น„์ •์ƒ(anomaly) ๋ฐ์ดํ„ฐ:**
205
+ - ์ „์ฒด ๋ฐ์ดํ„ฐ์˜ ์•ฝ **5% ์ดํ•˜**๋กœ ์ œํ•œ.
206
+ - ๊ฒฐํ•จ ์œ ํ˜•:
207
+ - **Scratch**: ์Šคํฌ๋ž˜์น˜.
208
+ - **Contamination**: ์–ผ๋ฃฉ ๋˜๋Š” ์ด๋ฌผ์งˆ.
209
+ - **Crack**: ํ‘œ๋ฉด ๊ท ์—ด.
210
+
211
+ #### ๋ฐ์ดํ„ฐ ๋ผ๋ฒจ๋ง ๊ธฐ์ค€
212
+
213
+ **1. ํŒŒ์ผ ๋„ค์ด๋ฐ ๊ทœ์น™**
214
+ - ๋ฐ์ดํ„ฐ ๋ฒ„์ „๋ณ„ ํŒŒ์ผ๋ช…์€ ๋ฒ„์ „๋ณ„๋กœ ์ƒ์ดํ•จ.
215
+ - ๊ฐ ๋ฒ„์ „์˜ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋ฌธ์„œ ์ฐธ๊ณ .
216
+ - ๋ฐ์ดํ„ฐ ํด๋”๋ช…์€ **`<์ˆ˜์ง‘๋…„์›”์ผ>_<V๋ฒ„์ „>_<๊ฐ„๋‹จํ•œ ์„ค๋ช…>`** ํ˜•์‹์œผ๋กœ ์ž‘์„ฑ.
217
+ - ์˜ˆ์‹œ: `20240910_V0_๊ฐ„์ด ํ™˜๊ฒฝ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘`.
218
+
219
+ **2. ๋ผ๋ฒจ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ**
220
+
221
+ ๏ฟฝ๏ฟฝ๋ฒจ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” CSV ํ˜•์‹์œผ๋กœ ์ €์žฅํ•˜๋ฉฐ, ๊ฐ ๋ฐ์ดํ„ฐ์˜ ๋ผ๋ฒจ ๋ฐ ์„ค๋ช…์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
222
+
223
+ ํ•„์ˆ˜ ํ•„๋“œ:
224
+ - `image_id`: ์ด๋ฏธ์ง€ ํŒŒ์ผ๋ช….
225
+ - `label`: ์ •์ƒ(`normal`) ๋˜๋Š” ๋น„์ •์ƒ(`anomaly`) ์—ฌ๋ถ€.
226
+ - `description`: ์ƒ์„ธ ์„ค๋ช…(์˜ˆ: ๊ฒฐํ•จ ์œ ํ˜•).
227
+
228
+ ์˜ˆ์‹œ:
229
+ ```json
230
+ {
231
+ "image_id": "normal_20241111_001.jpg",
232
+ "label": "normal",
233
+ "description": "๋งค๋„๋Ÿฌ์šด ํ‘œ๋ฉด์„ ๊ฐ€์ง„ ์ •์ƒ์ ์ธ ๊ธˆ์† ๋ถ€ํ’ˆ, ๊ด‘ํƒ์ด ๊ท ์ผํ•จ."
234
+ }
235
+ {
236
+ "image_id": "abnormal_20241111_002.jpg",
237
+ "label": "error",
238
+ "description": "ํ‘œ๋ฉด์— ์„ ํ˜• ์Šคํฌ๋ž˜์น˜๊ฐ€ ๋ฐœ๊ฒฌ๋จ."
239
+ }
240
+ ```
241
+
242
+ ## AD-CLIP Model Architecture
243
+
244
  AD-CLIP ๋ชจ๋ธ์€ CLIP (ViT-B-32)์„ ๋ฐฑ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€์—์„œ ํŠน์ง•์„ ์ถ”์ถœํ•˜๊ณ , ๋Œ€์กฐ ํ•™์Šต์„ ํ†ตํ•ด ์ด์ƒ์„ ํƒ์ง€ํ•ฉ๋‹ˆ๋‹ค.
245
  ์ตœ์ข… ์ถœ๋ ฅ์€ ์ด๋ฏธ์ง€๊ฐ€ ๋น„์ •์ƒ์ธ์ง€ ์ •์ƒ์ธ์ง€๋ฅผ ํŒ๋ณ„ํ•˜๋Š” ์ด์ƒ ์ ์ˆ˜์™€ ๊ฐ ํด๋ž˜์Šค์˜ ํ™•๋ฅ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
246
+
247
  <div style="display: flex; justify-content: center; align-items: center; flex-direction: column;">
248
  <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/62sYcSncxxzqGjQAa0MgQ.png" height="500" width="70%">
249
  <p>CLIP-based Anomaly Detection Model Architecture</p>
250
  </div>
251
 
252
+ ### ๋ชจ๋ธ ๊ตฌ์กฐ
253
+
254
+ **์ž…๋ ฅ ๊ณ„์ธต (Input Layer):**
255
+ - ์ž…๋ ฅ ์ด๋ฏธ์ง€: ๋ชจ๋ธ์€ ํฌ๊ธฐ [640, 640, 3]์˜ ์ด๋ฏธ์ง€๋ฅผ ์ž…๋ ฅ๋ฐ›์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ 640x640์€ ์ด๋ฏธ์ง€์˜ ๊ฐ€๋กœ์™€ ์„ธ๋กœ ํฌ๊ธฐ์ด๋ฉฐ, 3์€ RGB ์ƒ‰์ƒ์˜ ์ฑ„๋„ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
256
+ - ๊ธฐ๋Šฅ: ์ด ๊ณ„์ธต์€ ์ž…๋ ฅ๋œ ์ด๋ฏธ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ชจ๋ธ์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์— ๋งž๋Š” ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ค€๋น„ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
257
+
258
+ **Backbone:**
259
+ - CLIP (ViT-B-32): ๋ชจ๋ธ์€ CLIP์˜ Vision Transformer (ViT-B-32) ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€์—์„œ ํŠน์ง•์„ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค. ViT-B-32๋Š” ์ด๋ฏธ์ง€๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ณ ๊ธ‰ ํŠน์„ฑ์„ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
260
+ - ํ•„ํ„ฐ: ํ•„ํ„ฐ ํฌ๊ธฐ [32, 64, 128, 256, 512]๋Š” ๊ฐ ViT ๋ ˆ์ด์–ด์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ด๋ฏธ์ง€์˜ ๊ฐ ๋ ˆ๋ฒจ์—์„œ ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ์ถ”์ถœํ•˜์—ฌ ํŠน์ง•์„ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค.
261
+
262
+ **Neck:**
263
+ - ์ด์ƒ ํƒ์ง€ ๋ชจ๋“ˆ (Anomaly Detection Module): ์ด ๋ชจ๋“ˆ์€ CLIP์—์„œ ์ถ”์ถœ๋œ ํŠน์ง•์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ด๋ฏธ์ง€๋ฅผ ๋ถ„์„ํ•˜๊ณ  ์ด์ƒ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ๋Š” ์ด๋ฏธ์ง€ ๋‚ด์—์„œ ์ •์ƒ๊ณผ ๋น„์ •์ƒ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ ์ค‘์š”ํ•œ ์ฒ˜๋ฆฌ๊ฐ€ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.
264
+ - ๋Œ€์กฐ ํ•™์Šต (Contrastive Learning): ๋Œ€์กฐ ํ•™์Šต ๋ฐฉ๋ฒ•์€ ์ •์ƒ ์ด๋ฏธ์ง€์™€ ๋น„์ •์ƒ ์ด๋ฏธ์ง€ ๊ฐ„์˜ ์ฐจ์ด๋ฅผ ํ•™์Šตํ•˜์—ฌ, ์ด๋ฏธ์ง€์˜ ์ด์ƒ ์—ฌ๋ถ€๋ฅผ ๋”์šฑ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค๋‹ˆ๋‹ค.
265
+
266
+ **Head:**
267
+ - ์ด์ƒ ํƒ์ง€ ํ—ค๋“œ (Anomaly Detection Head): ๋ชจ๋ธ์˜ ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„์œผ๋กœ, ์ด ๊ณ„์ธต์€ ์ด๋ฏธ์ง€๊ฐ€ ๋น„์ •์ƒ์ ์ธ์ง€ ์ •์ƒ์ ์ธ์ง€๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
268
+ - Outputs:
269
+ - ์ด์ƒ ์ ์ˆ˜ (Anomaly Score): ๋ชจ๋ธ์€ ์ด๋ฏธ์ง€๊ฐ€ ์ด์ƒ์ธ์ง€ ์•„๋‹Œ์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ ์ˆ˜(์˜ˆ: 1์€ ์ด์ƒ, 0์€ ์ •์ƒ)๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
270
+ - ํด๋ž˜์Šค ํ™•๋ฅ  (Class Probabilities): ๋ชจ๋ธ์€ ๊ฐ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ํ™•๋ฅ ์„ ์ถœ๋ ฅํ•˜๋ฉฐ, ์ด ํ™•๋ฅ ์„ ํ†ตํ•ด ๊ฒฐํ•จ์ด ์žˆ๋Š”์ง€ ์—†๋Š”์ง€์˜ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค.
271
+
272
+ ## Optimizer and Loss Function
273
+
274
+ ### Training
275
+
276
+ **optimizer:**
277
+ ```python
278
+ name: AdamW # AdamW ์˜ตํ‹ฐ๋งˆ์ด์ € (๊ฐ€์ค‘์น˜ ๊ฐ์‡  ํฌํ•จ)
279
+ lr: 0.0001 # ํ•™์Šต๋ฅ 
280
+ ```
281
+
282
+ **loss:**
283
+ ```python
284
+ classification_loss: 1.0 # ๋ถ„๋ฅ˜ ์†์‹ค (๊ต์ฐจ ์—”ํŠธ๋กœํ”ผ)
285
+ anomaly_loss: 1.0 # ๊ฒฐํ•จ ํƒ์ง€ ์†์‹ค (์ด์ƒ ํƒ์ง€ ๋ชจ๋ธ์— ๋Œ€ํ•œ ์†์‹ค)
286
+ contrastive_loss: 1.0 # ๋Œ€์กฐ ํ•™์Šต ์†์‹ค (์œ ์‚ฌ๋„ ๊ธฐ๋ฐ˜ ์†์‹ค)
287
+ ```
288
+
289
+ ## Metrics
290
+
291
+ - Precision # ์ •๋ฐ€๋„ (Precision)
292
+ - Recall # ์žฌํ˜„์œจ (Recall)
293
+ - mAP # ํ‰๊ท  ์ •๋ฐ€๋„ (Mean Average Precision)
294
+ - F1-Score # F1-์ ์ˆ˜ (๊ท ํ˜• ์žกํžŒ ํ‰๊ฐ€ ์ง€ํ‘œ)
295
+
296
+ ## Training Parameters
297
+
298
+ **ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ •:**
299
+ - Learning Rate: 0.001
300
+ - Batch Size: 8
301
+ - Epochs: 200
302
+
303
+ ## Pre-trained CLIP model
304
+
305
  | Model | Download |
306
+ | --- | --- |
307
  | ViT-B/32 | [download](https://openaipublic.azureedge.net/clip/models/40d365715913c9da98579312b702a82c18be219cc2a73407c4526f58eba950af/ViT-B-32.pt) |
308
  | ViT-B/16 | [download](https://openaipublic.azureedge.net/clip/models/5806e77cd80f8b59890b7e101eabd078d9fb84e6937f9e85e4ecb61988df416f/ViT-B-16.pt) |
309
  | ViT-L/14 | [download](https://openaipublic.azureedge.net/clip/models/b8cca3fd41ae0c99ba7e8951adf17d267cdb84cd88be6f7c2e0eca1737a03836/ViT-L-14.pt) |
310
  | ViT-L/14@336px | [download](https://openaipublic.azureedge.net/clip/models/3035c92b350959924f9f00213499208652fc7ea050643e8b385c2dac08641f02/ViT-L-14-336px.pt) |
311
 
312
+ ## Evaluation Parameters
 
 
313
 
314
+ - F1-score: 90% ์ด์ƒ (1๋…„์ฐจ)
315
+ - F1-score: 98% ์ด์ƒ (2๋…„์ฐจ)
316
 
317
+ ## ํ•™์Šต ์„ฑ๋Šฅ ๋ฐ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ
318
 
319
+ ### ํ•™์Šต์„ฑ๋Šฅ ๊ฒฐ๊ณผ ๊ทธ๋ž˜ํ”„
320
 
 
321
  <div style="display: flex; justify-content: space-between; margin-bottom: 10px;">
322
  <div style="text-align: center; margin-right: 20px;">
323
  <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/7Q1RzKyia-WNSCJHnk2-d.png" height="80%" width="100%" style="margin-right:5px;">
 
343
  </div>
344
  </div>
345
 
346
+ ### ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผํ‘œ
347
+
348
  <div style="display: flex; justify-content: space-between;">
349
  <div style="text-align: center; margin-right: 20px;">
350
  <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/u1DQHjXM41DMq1JIUOGlp.png" height="100%" width="100%" style="margin-right:5px;">
 
354
  </div>
355
  </div>
356
 
357
+ ### ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ
358
+
359
  <div style="display: flex; justify-content: space-between;">
360
  <div style="text-align: center; margin-right: 20px;">
361
  <img src="https://cdn-uploads.huggingface.co/production/uploads/65e7d0935ea025ead9623dde/A91V0GdrcUcX01cC-biG9.png" height="600" width="1000" style="margin-right:5px;">
 
367
  </div>
368
  </div>
369
 
 
370
  ---
371
 
372
+ ## ๋ชจ๋ธ ๋ณ€๊ฒฝ ์ด๋ ฅ (Model Update History)
373
 
374
  > AD-CLIP ๊ธฐ๋ฐ˜ ์ด์ƒํƒ์ง€ ๋ชจ๋ธ์€ **์ด 3๊ฐœ ๋ฒ„์ „**์œผ๋กœ ๊ด€๋ฆฌ๋˜๊ณ  ์žˆ์œผ๋ฉฐ,
375
  > ๊ฐ ๋ฒ„์ „์€ ๋ฐ์ดํ„ฐ ํ’ˆ์งˆ ๊ฐœ์„  ๋ฐ ๋ชจ๋ธ ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ๋งž์ถฐ ์ฒด๊ณ„์ ์œผ๋กœ ๋ณ€๊ฒฝยท์Šน์ธ๋˜์—ˆ๋‹ค.
 
388
  > AD-CLIP ๋ชจ๋ธ์˜ ๋ณ€๊ฒฝยท๊ต์ฒด ์‹œ์ ์€ **๋ฐ์ดํ„ฐ ๋ฒ„์ „, ์ฝ”๋“œ ๋ฒ„์ „, ์„ฑ๋Šฅ ๋กœ๊ทธ, ์Šน์ธ ๊ธฐ๋ก**์ด ์ƒํ˜ธ ์—ฐ๊ณ„๋˜๋ฉฐ,
389
  > ์ด๋ฅผ ํ†ตํ•ด **๋ชจ๋ธ ์‹ ๋ขฐ์„ฑ, ์žฌํ˜„์„ฑ, ์ถ”์ ์„ฑ**์„ ๋™์‹œ์— ํ™•๋ณดํ•œ๋‹ค.
390
 
391
+ ### ๋ฒ„์ „ ๋ช…๋ช… ๊ทœ์น™
392
 
393
  | ๊ตฌ๋ถ„ | ๊ทœ์น™ | ์˜ˆ์‹œ |
394
  |------|------|------|
 
398
 
399
  ---
400
 
401
+ ### ๊ด€๋ฆฌ ๊ตฌ์„ฑ์š”์†Œ
402
 
403
  | ๊ตฌ๋ถ„ | ๊ด€๋ฆฌ ํ•ญ๋ชฉ | ์„ค๋ช… |
404
  |------|------------|------|
 
409
 
410
  ---
411
 
412
+ ### ๋ชจ๋ธ ๋ณ€๊ฒฝ ์ ˆ์ฐจ ์š”์•ฝ
413
 
414
  | ๋‹จ๊ณ„ | ์ฃผ์š” ํ™œ๋™ | ์‚ฐ์ถœ๋ฌผ |
415
  |------|------------|--------|
 
422
 
423
  ---
424
 
425
+ ### ๋ชจ๋ธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์˜ˆ์‹œ
426
 
427
  ```json
428
  {
 
440
  "status": "Active",
441
  "notes": "2์ฐจ๋…„๋„ ์ „์ฒด ์žฌํ•™์Šต ๋ฐ ์„ฑ๋Šฅ ๊ณ ๋„ํ™” ๋ฒ„์ „"
442
  }
443
+ ```
444
 
445
+ ---
446
 
447
+ ## ์„ค์น˜ ๋ฐ ์‹คํ–‰ ๊ฐ€์ด๋“œ
448
 
449
+ ์ด ๋ชจ๋ธ์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด Python๊ณผ ํ•จ๊ป˜ ๋‹ค์Œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค:
450
 
451
+ ### ํ•„์ˆ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
452
+
453
+ - **ftfy==6.2.0**: ํ…์ŠคํŠธ ์ •๊ทœํ™” ๋ฐ ์ธ์ฝ”๋”ฉ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
454
+ - **matplotlib==3.9.0**: ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ๋ฐ ๊ทธ๋ž˜ํ”„ ์ƒ์„ฑ์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
455
+ - **numpy==1.24.3**: ์ˆ˜์น˜ ์—ฐ์‚ฐ์„ ์œ„ํ•œ ํ•ต์‹ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
456
+ - **opencv_python==4.9.0.80**: ์ด๋ฏธ์ง€ ๋ฐ ๋น„๋””์˜ค ์ฒ˜๋ฆฌ์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
457
+ - **pandas==2.2.2**: ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋ฐ ์กฐ์ž‘์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
458
+ - **Pillow==10.3.0**: ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ฒ˜๋ฆฌ ๋ฐ ๋ณ€ํ™˜์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
459
+ - **PyQt5==5.15.10**: GUI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ
460
+ - **PyQt5_sip==12.13.0**: PyQt5์™€ Python ๊ฐ„์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
461
+ - **regex==2024.5.15**: ์ •๊ทœ ํ‘œํ˜„์‹ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
462
+ - **scikit_learn==1.2.2**: ๊ธฐ๊ณ„ ํ•™์Šต ๋ฐ ๋ฐ์ดํ„ฐ ๋ถ„์„์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
463
+ - **scipy==1.9.1**: ๊ณผํ•™ ๋ฐ ๊ธฐ์ˆ  ๊ณ„์‚ฐ์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
464
+ - **setuptools==59.5.0**: Python ํŒจํ‚ค์ง€ ๋ฐฐํฌ ๋ฐ ์„ค์น˜๋ฅผ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
465
+ - **scikit-image**: ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ ๋ฐ ๋ถ„์„์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
466
+ - **tabulate==0.9.0**: ํ‘œ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
467
+ - **thop==0.1.1.post2209072238**: PyTorch ๋ชจ๋ธ์˜ FLOP ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋„๊ตฌ
468
+ - **timm==0.6.13**: ๋‹ค์–‘ํ•œ ์ตœ์‹  ์ด๋ฏธ์ง€ ๋ถ„๋ฅ˜ ๋ชจ๋ธ์„ ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
469
+ - **torch==2.0.0**: PyTorch ๋”ฅ๋Ÿฌ๋‹ ํ”„๋ ˆ์ž„์›Œํฌ
470
+ - **torchvision==0.15.1**: ์ปดํ“จํ„ฐ ๋น„์ „ ์ž‘์—…์„ ์œ„ํ•œ PyTorch ํ™•์žฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
471
+ - **tqdm==4.65.0**: ์ง„ํ–‰ ์ƒํ™ฉ์„ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œ์‹œํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
472
+ - **pyautogui**: GUI ์ž๋™ํ™”๋ฅผ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
473
+
474
+ ### ์„ค์น˜ ๋ช…๋ น์–ด
475
 
476
+ ```bash
477
+ pip install -r requirements.txt
478
+ ```
479
+
480
+ ---
481
+
482
+ ## ๋ชจ๋ธ ์‹คํ–‰ ๋‹จ๊ณ„
483
+
484
+ ### 1. Dataset Configuration
485
+
486
+ Dataset configuration ์˜ˆ์‹œ:
487
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
488
  ```
489
  โ”œโ”€โ”€ data/
490
  โ”‚ โ”œโ”€โ”€ COMP_1/
491
  โ”‚ โ”‚ โ”œโ”€โ”€ product_1/
492
+ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ ground_truth
493
+ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ anomaly_1
494
+ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ anomaly_2
495
  โ”‚ โ”‚ โ”‚ โ”‚
496
+ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ test/
497
+ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ good
498
+ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ anomaly_1
499
+ ๏ฟฝ๏ฟฝ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ anomaly_2
500
  โ”‚ โ”‚ โ”‚ โ”‚
501
+ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ train/
502
+ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ good
503
+ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ anomaly_1
504
+ โ”‚ โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ anomaly_2
505
+ โ”‚ โ”‚
506
  โ”‚ โ”‚ โ”œโ”€โ”€ product_2/
507
+ โ”‚ โ”‚
508
  โ”‚ โ”‚ โ”œโ”€โ”€ meta.json
509
+ โ”‚
510
  โ”‚ โ”œโ”€โ”€ COMP_2/
 
511
  ```
512
 
513
+ #### JSON ํŒŒ์ผ ์ƒ์„ฑ
514
+
515
+ ๋ฐ์ดํ„ฐ์…‹์˜ ๋ชจ๋“  ์ •๋ณด๋ฅผ JSON ํŒŒ์ผ(meta_train.json, meta_test.json)๋กœ ์ €์žฅ:
516
+
517
+ ```bash
518
  cd dataset_config
519
  python dataset_get_json.py
520
  ```
521
 
522
+ #### Ground Truth ์ƒ์„ฑ
523
+
524
+ ์ˆ˜๋™์œผ๋กœ ๋ชจ๋“  ground truth(anomaly mask๋งŒ) ์ƒ์„ฑ:
525
+
526
+ ```bash
527
  cd dataset_config
528
  python image_ground_truth.py
529
  ```
530
 
531
+ #### ํ•™์Šต ๋ฐ ํ…Œ์ŠคํŠธ์šฉ ๋ฐ์ดํ„ฐ์…‹ ์„ค์ •
532
+
533
+ ```bash
534
  cd training_libs
535
  python dataset.py
536
  ```
537
 
538
+ **Dataset ํด๋ž˜์Šค ๋™์ž‘ ๋ฐฉ์‹:**
539
+ - `__init__` ๋ฉ”์„œ๋“œ: ๋ฐ์ดํ„ฐ์…‹์˜ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ, ๋ณ€ํ™˜ ํ•จ์ˆ˜, ๋ฐ์ดํ„ฐ์…‹ ์ด๋ฆ„, ๋ชจ๋“œ๋ฅผ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค
540
+ - ๋ฉ”ํƒ€ ์ •๋ณด๋ฅผ ๋‹ด์€ JSON ํŒŒ์ผ (meta_train.json)์„ ์ฝ์–ด์™€ ํด๋ž˜์Šค ์ด๋ฆ„ ๋ชฉ๋ก๊ณผ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํ•ญ๋ชฉ์„ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค
541
+ - `generate_class_info` ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํด๋ž˜์Šค ์ •๋ณด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํด๋ž˜์Šค ์ด๋ฆ„์„ ํด๋ž˜์Šค ID์— ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค
542
+ - `__len__` ๋ฉ”์„œ๋“œ: ๋ฐ์ดํ„ฐ์…‹์˜ ์ƒ˜ํ”Œ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค
543
+ - `__getitem__` ๋ฉ”์„œ๋“œ: ์ฃผ์–ด์ง„ ์ธ๋ฑ์Šค์˜ ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค
544
+ - ์ด๋ฏธ์ง€ ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•ด ์ด๋ฏธ์ง€๋ฅผ ์ฝ๊ณ , ์ด์ƒ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋งˆ์Šคํฌ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค
545
+ - ํ•„์š”์‹œ ์ด๋ฏธ์ง€์™€ ๋งˆ์Šคํฌ์— ๋ณ€ํ™˜ ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค
546
+ - ์ด๋ฏธ์ง€, ๋งˆ์Šคํฌ, ํด๋ž˜์Šค ์ด๋ฆ„, ์ด์ƒ ์—ฌ๋ถ€, ์ด๋ฏธ์ง€ ๊ฒฝ๋กœ, ํด๋ž˜์Šค ID๋ฅผ ํฌํ•จํ•œ ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค
547
 
548
+ ### 2. Image Pre-processing (Transformation)
549
 
550
+ ํ•™์Šต ๋ฐ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์ด๋ฏธ์ง€ ์ „์ฒ˜๋ฆฌ:
551
+
552
+ ```python
553
+ # training_libs/utils.py
554
+ # AnomalyCLIP_lib/transform.py
 
555
  ```
556
+
557
+ **Data Processing Techniques:**
558
+ - **normalization**: ์ด๋ฏธ์ง€ ํ”ฝ์…€ ๊ฐ’์„ ํ‰๊ท  ๋ฐ ํ‘œ์ค€ํŽธ์ฐจ๋กœ ํ‘œ์ค€ํ™”
559
+ - ๋ฐฉ๋ฒ•: `'Normalize' from 'torchvision.transforms'`
560
+ - **max_resize**: ์ด๋ฏธ์ง€์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ์œ ์ง€ํ•˜๋ฉฐ, ๋น„์œจ์„ ๋งž์ถ”๊ณ  ํŒจ๋”ฉ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ํฌ๊ธฐ ์กฐ์ •
561
+ - ๋ฐฉ๋ฒ•: `Custom 'ResizeMaxSize' class`
562
+ - **random_resized_crop**: ํ›ˆ๋ จ ์ค‘์— ์ด๋ฏธ์ง€๋ฅผ ๋žœ๋ค์œผ๋กœ ์ž๋ฅด๊ณ  ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•˜์—ฌ ๋ณ€ํ˜•์„ ์ถ”๊ฐ€
563
+ - ๋ฐฉ๋ฒ•: `'RandomResizedCrop' from 'torchvision.transforms'`
564
+ - **resize**: ๋ชจ๋ธ ์ž…๋ ฅ์— ๋งž๊ฒŒ ์ด๋ฏธ์ง€๋ฅผ ๊ณ ์ •๋œ ํฌ๊ธฐ๋กœ ์กฐ์ •
565
+ - ๋ฐฉ๋ฒ•: `'Resize' with BICUBIC interpolation`
566
+ - **center_crop**: ์ด๋ฏธ์ง€์˜ ์ค‘์•™ ๋ถ€๋ถ„์„ ์ง€์ •๋œ ํฌ๊ธฐ๋กœ ์ž๋ฅด๊ธฐ
567
+ - ๋ฐฉ๋ฒ•: `'CenterCrop'`
568
+ - **to_tensor**: ์ด๋ฏธ์ง€๋ฅผ PyTorch ํ…์„œ๋กœ ๋ณ€ํ™˜
569
+ - ๋ฐฉ๋ฒ•: `'ToTensor'`
570
+ - **augmentation (optional)**: ๋ฐ์ดํ„ฐ ์ฆ๊ฐ•์„ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ๋žœ๋ค ๋ณ€ํ™˜ ์ ์šฉ, `'AugmentationCfg'`๋กœ ์„ค์ • ๊ฐ€๋Šฅ
571
+ - ๋ฐฉ๋ฒ•: `Uses 'timm' library if specified`
572
+
573
+ ### 3. Prompt Generating
574
+
575
+ ```python
576
+ # training_lib/prompt_ensemble.py
 
 
 
 
 
577
  ```
 
 
 
 
 
578
 
579
+ **Prompts Built in the Code:**
580
+
581
+ 1. Normal Prompt: `["{}"]`
582
+ - Normal Prompt Example: "object"
583
+
584
+ 2. Anomaly Prompt: `["damaged {}"]`
585
+ - Anomaly Prompt Example: "damaged object"
586
+
587
+ **Construction Process:**
588
 
589
+ 1. `prompts_pos (Normal)`: Combines the class name with the normal template
590
+ 2. `prompts_neg (Anomaly)`: Combines the class name with the anomaly template
591
 
592
+ ### 4. Initial Setting for Training
593
+
594
+ ํ•™์Šต ๋ฐ์ดํ„ฐ์…‹ ๊ฒฝ๋กœ ๋ฐ ๋ชจ๋ธ ์ฒดํฌํฌ์ธํŠธ ์ €์žฅ ๊ฒฝ๋กœ ์ •์˜:
595
+
596
+ ```python
597
  parser.add_argument("--train_data_path", type=str, default="./data/", help="train dataset path")
598
  parser.add_argument("--dataset", type=str, default='smoke_cloud', help="train dataset name")
599
  parser.add_argument("--save_path", type=str, default='./checkpoint/', help='path to save results')
600
  ```
601
 
602
+ ### 5. Hyper Parameters Setting
603
+
604
+ #### Depth Parameter
605
 
606
+ ํ”„๋กฌํ”„ํŠธ ํ•™์Šต ์ค‘ ํ•™์Šตํ•  ์ž„๋ฒ ๋”ฉ์˜ ๊นŠ์ด๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ชจ๋ธ์ด ๋ฐ์ดํ„ฐ์—์„œ ๋ณต์žกํ•œ ํŠน์ง•์„ ํ•™์Šตํ•˜๋Š” ๋Šฅ๋ ฅ์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค:
607
+
608
+ ```python
609
  parser.add_argument("--depth", type=int, default=9, help="image size")
610
  ```
611
 
612
+ #### Image Size
613
+
614
+ ํ•™์Šต์— ์‚ฌ์šฉํ•  ์ž…๋ ฅ ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค (ํ”ฝ์…€ ๋‹จ์œ„):
615
+
616
+ ```python
617
  parser.add_argument("--image_size", type=int, default=518, help="image size")
618
  ```
619
 
620
+ #### Training Parameters
621
+
622
+ ํ•™์Šต ํŒŒ๋ผ๋ฏธํ„ฐ ์„ค์ •:
623
+
624
+ ```python
625
  parser.add_argument("--epoch", type=int, default=500, help="epochs")
626
  parser.add_argument("--learning_rate", type=float, default=0.0001, help="learning rate")
627
  parser.add_argument("--batch_size", type=int, default=8, help="batch size")
628
  ```
629
 
630
+ #### DPAM (Deep Prompt Attention Mechanism)
 
 
631
 
632
+ DPAM์˜ ํฌ๊ธฐ/๊นŠ์ด ํŒŒ๋ผ๋ฏธํ„ฐ:
633
+
634
+ ```python
635
+ parser.add_argument("--dpam", type=int, default=20, help="dpam size")
 
 
 
 
 
 
636
  ```
637
 
638
+ **DPAM ์„ค์ • ๊ฐ€์ด๋“œ:**
639
+ - ViT-B/32 and ViT-B/16: `--dpam` should be around 10-13
640
+ - ViT-L/14 and ViT-L/14@336px: `--dpam` should be around 20-24
641
 
642
+ **DPAM ์„ค๋ช…:**
643
+ - DPAM์€ ํŠนํžˆ Vision Transformers (ViT)์—์„œ ๋ชจ๋ธ์˜ ํŠน์ • ๋ ˆ์ด์–ด๋ฅผ ๊ฐœ์„ ํ•˜๊ณ  ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค
644
+ - Attention ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ†ตํ•ด ๋ชจ๋ธ์ด ๊ฐ ๋ ˆ์ด์–ด ๋‚ด์—์„œ ์ค‘์š”ํ•œ ํŠน์ง•์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค
645
+ - DPAM์€ ์—ฌ๋Ÿฌ ๋ ˆ์ด์–ด์— ์ ์šฉ๋˜์–ด ๋” ๊นŠ๊ณ  ์„ธ๋ถ€์ ์ธ ํŠน์ง• ์ถ”์ถœ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค
646
+ - DPAM์ด ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๋ ˆ์ด์–ด ์ˆ˜๋Š” ์กฐ์ • ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค (`--dpam`), ๋ชจ๋ธ์„ ์–ผ๋งˆ๋‚˜ fine-tuneํ• ์ง€ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค
647
+ - ์ „์ฒด ๋ชจ๋ธ์„ ๊ฐœ์„ ํ•˜๋ ค๋ฉด `--dpam`์„ ๋ชจ๋ธ์˜ ๋ ˆ์ด์–ด ์ˆ˜๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (์˜ˆ: ViT-B์˜ ๊ฒฝ์šฐ 12, ViT-L์˜ ๊ฒฝ์šฐ 24)
648
+ - ์ตœ์ข… ๋ ˆ์ด์–ด(์ผ๋ฐ˜์ ์œผ๋กœ ๋ชจ๋ธ์ด ๋ณต์žกํ•œ ํŠน์ง•์„ ํ•™์Šตํ•˜๋Š” ๊ณณ)์—๋งŒ ์ง‘์ค‘ํ•˜๋ ค๋ฉด ๋” ์ ์€ DPAM ๋ ˆ์ด์–ด๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
649
+
650
+ ### 6. Test Process
651
+
652
+ **Load pre-trained and Fine tuned (Checkpoints) models:**
653
+
654
+ 1. **Pre-trained model** (`./pre-trained model/`):
655
+ - ์‚ฌ์ „ ํ•™์Šต๋œ ๋ชจ๋ธ (ViT-B, ViT-L, ๋“ฑ) ํฌํ•จ
656
+ - CLIP ๋ชจ๋ธ ํ•™์Šต์˜ ์‹œ์ž‘์ ์œผ๋กœ ์‚ฌ์šฉ๋จ
657
+ - ์‚ฌ์ „ ํ•™์Šต๋œ ๋ชจ๋ธ์€ ์ด์ „์— ํ•™์Šต๋œ ํŠน์ง•์„ ํ™œ์šฉํ•˜์—ฌ ํ•™์Šต ์†๋„๋ฅผ ๋†’์ด๊ณ  ๊ฐœ์„ ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค
658
 
659
+ 2. **Fine-tuned models** (`./checkpoint/`):
660
+ - ์ด ํด๋”์˜ "epoch_N.pth" ํŒŒ์ผ์€ fine-tuning ๊ณผ์ • ์ค‘ ๋ชจ๋ธ์˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค
661
+ - ๊ฐ ".pth" ํŒŒ์ผ์€ ์‚ฌ์ „ ํ•™์Šต๋œ ๋ชจ๋ธ์—์„œ fine-tuned๋œ ๋ชจ๋ธ์˜ ๋ฒ„์ „์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค
662
+ - ์ด๋Ÿฌํ•œ ์ฒดํฌํฌ์ธํŠธ๋Š” fine-tuning ์žฌ๊ฐœ, ๋‹ค์–‘ํ•œ ๋‹จ๊ณ„์—์„œ ๋ชจ๋ธ ํ‰๊ฐ€, ๋˜๋Š” ์„ฑ๋Šฅ์ด ๊ฐ€์žฅ ์ข‹์€ ๋ฒ„์ „ ์„ ํƒ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
663
+
664
+ ---
665
+
666
+ ## ๋ชจ๋ธ ๊ณต๊ฒฉ ์ทจ์•ฝ์  ๋ถ„์„
667
 
 
668
  ๋ณธ ๋ฌธ์„œ๋Š” AnomalyCLIP ๋ชจ๋ธ์˜ ์ทจ์•ฝ์  ๋ถ„์„ ๋ฐ ์ ๋Œ€์  ๊ณต๊ฒฉ(Adversarial Attacks)์— ๋Œ€ํ•œ ๋ฐฉ์–ด ๋Œ€์ฑ…์„ ์ฒด๊ณ„์ ์œผ๋กœ ์ˆ˜๋ฆฝํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
669
  ๋ชจ๋ธ์˜ ์‹ ๋ขฐ์„ฑ๊ณผ ์•ˆ์ •์„ฑ์„ ํ™•๋ณดํ•˜๊ณ  ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด, ๋ฐ์ดํ„ฐ ๋ฐ ๋ชจ๋ธ ์ˆ˜์ค€์˜ ๋ฐฉ์–ด ์ „๋žต์„ ๊ตฌํ˜„ํ•˜๊ณ  ์„ฑ๋Šฅ์„ ํ‰๊ฐ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
670
+
671
+ ### 1. ์ทจ์•ฝ์  ๋ถ„์„
672
+
673
+ #### ์ ๋Œ€์  ๊ณต๊ฒฉ ์‹œ๋‚˜๋ฆฌ์˜ค
674
+
675
  1. **Adversarial Examples:**
676
+ - ์„ค๋ช…: ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์— ์ž‘์€ ๋…ธ์ด์ฆˆ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ชจ๋ธ์˜ ์˜ˆ์ธก์„ ์™œ๊ณกํ•ฉ๋‹ˆ๋‹ค.
677
+ - ์˜ˆ: ์ •์ƒ ์ด๋ฏธ์ง€๋ฅผ ๊ฒฐํ•จ ์ด๋ฏธ์ง€๋กœ ์˜ˆ์ธกํ•˜๋„๋ก ์œ ๋„ํ•ฉ๋‹ˆ๋‹ค.
678
+
679
  2. **Data Poisoning:**
680
+ - ์„ค๋ช…: ํ•™์Šต ๋ฐ์ดํ„ฐ์— ์•…์˜์  ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜์—ฌ ๋ชจ๋ธ ํ•™์Šต์„ ์™œ๊ณกํ•ฉ๋‹ˆ๋‹ค.
681
+ - ์˜ˆ: ๋น„์ •์ƒ ๋ฐ์ดํ„ฐ๋ฅผ ์ •์ƒ ๋ฐ์ดํ„ฐ๋กœ ํ•™์Šต์‹œํ‚ค๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.
682
+
683
  3. **Evasion Attacks:**
684
+ - ์„ค๋ช…: ์ถ”๋ก  ์‹œ ๋ชจ๋ธ์˜ ๋ถ„๋ฅ˜ ๊ฒฐ๊ณผ๋ฅผ ์กฐ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
685
+ - ์˜ˆ: ๊ฒฐํ•จ ๋ฐ์ดํ„ฐ๋ฅผ ์ •์ƒ์œผ๋กœ ์˜ˆ์ธกํ•˜๋„๋ก ์œ ๋„ํ•ฉ๋‹ˆ๋‹ค.
686
+
687
+ #### ๋ชจ๋ธ ๋ฐ ๋ฐ์ดํ„ฐ์…‹ ์˜ํ–ฅ
688
+
689
+ - ์„ฑ๋Šฅ ์ €ํ•˜: ์ ๋Œ€์  ์ƒ˜ํ”Œ ์ž…๋ ฅ ์‹œ ๋ชจ๋ธ์˜ ์ •ํ™•๋„ ๊ฐ์†Œ
690
+ - ๋ฌด๊ฒฐ์„ฑ ์†์ƒ: ๋ฐ์ดํ„ฐ ๋ณ€์กฐ๋กœ ์ธํ•ด ํ•™์Šต๋œ ๋ชจ๋ธ์ด ์‹ค์ œ ํ™˜๊ฒฝ์—์„œ ์‹ ๋ขฐ์„ฑ์„ ์ƒ์‹ค
691
+ - ์•…์˜์  ํ™œ์šฉ ๊ฐ€๋Šฅ์„ฑ: ๋ชจ๋ธ์˜ ์˜์‚ฌ๊ฒฐ์ •์ด ์˜ค์ž‘๋™ํ•˜์—ฌ ์ƒ์‚ฐ ํ’ˆ์งˆ ๊ด€๋ฆฌ ์‹คํŒจ ๊ฐ€๋Šฅ์„ฑ ์ฆ๊ฐ€
692
+
693
+ ### 2. ๋Œ€์‘ ๋ฐฉ์•ˆ
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
694
 
695
+ #### ๋ฐ์ดํ„ฐ ์ˆ˜์ค€ ๋ฐฉ์–ด ๋Œ€์ฑ…
696
 
697
+ 1. **๋ฐ์ดํ„ฐ ์ •์ œ:**
698
+ - ํ๋ฆฟํ•˜๊ฑฐ๋‚˜ ์ž˜๋ฆฐ ์ด๋ฏธ์ง€ ์ œ๊ฑฐ
699
+ - ๋ฐ์ดํ„ฐ ๋…ธ์ด์ฆˆ ์ œ๊ฑฐ ๋ฐ ๊ฒฐํ•จ ๋ณต๊ตฌ
700
+ - ๊ฒฐ๊ณผ: ๋ฐ์ดํ„ฐ ํ’ˆ์งˆ ๊ฐ•ํ™”๋กœ ์ ๋Œ€์  ๋…ธ์ด์ฆˆ ํšจ๊ณผ ๊ฐ์†Œ
701
+
702
+ 2. **๋ฐ์ดํ„ฐ ์ฆ๊ฐ•(Data Augmentation):**
703
+ - ๋žœ๋ค ํšŒ์ „, ํฌ๊ธฐ ์กฐ์ •, ๋ฐ๊ธฐ ๋ฐ ๋Œ€๋น„ ์กฐ์ •
704
+ - Gaussian Noise ๋ฐ Salt-and-Pepper Noise ์ถ”๊ฐ€
705
+ - ๊ฒฐ๊ณผ: ๋ฐ์ดํ„ฐ ๋‹ค์–‘์„ฑ ํ™•๋ณด ๋ฐ ๋ชจ๋ธ ์ผ๋ฐ˜ํ™” ์„ฑ๋Šฅ ๊ฐ•ํ™”
706
+
707
+ 3. **๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์ฆ:**
708
+ - ๊ฐ ๋ฐ์ดํ„ฐ ํ•ด์‹œ๊ฐ’(MD5) ์ €์žฅ ๋ฐ ์œ„๋ณ€์กฐ ์—ฌ๋ถ€ ํ™•์ธ
709
+ - ๊ฒฐ๊ณผ: ๋ฐ์ดํ„ฐ์…‹ ์‹ ๋ขฐ์„ฑ ๋ฐ ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ
710
+
711
+ #### ๋ชจ๋ธ ์ˆ˜์ค€ ๋ฐฉ์–ด ๋Œ€์ฑ…
712
+
713
+ 1. **Adversarial Training:**
714
+ - FGSM ๊ธฐ๋ฐ˜์˜ ์ ๋Œ€์  ์ƒ˜ํ”Œ์„ ํ•™์Šต ๋ฐ์ดํ„ฐ์— ํฌํ•จ
715
+ - ๊ฒฐ๊ณผ: ์ ๋Œ€์  ์ƒ˜ํ”Œ์—์„œ๋„ ํ‰๊ท  ์ •ํ™•๋„ 5% ํ–ฅ์ƒ
716
+
717
+ 2. **Gradient Masking:**
718
+ - ๊ทธ๋ž˜๋””์–ธํŠธ๋ฅผ ์ˆจ๊ฒจ ๋ชจ๋ธ์ด ์ ๋Œ€์  ๊ณต๊ฒฉ์— ๋…ธ์ถœ๋˜์ง€ ์•Š๋„๋ก ๋ฐฉ์–ด
719
+
720
+ 3. **Temperature Scaling:**
721
+ - ๋ชจ๋ธ์˜ ์˜ˆ์ธก ํ™•๋ฅ ์„ ์กฐ์ •ํ•˜์—ฌ ์ ๋Œ€์  ์ƒ˜ํ”Œ ๋ฏผ๊ฐ๋„ ์™„ํ™”
722
+
723
+ #### ์‹œ์Šคํ…œ ์ˆ˜์ค€ ๋ฐฉ์–ด ๋Œ€์ฑ…
724
+
725
+ 1. **์‹ค์‹œ๊ฐ„ ํƒ์ง€ ๋ฐ ๋Œ€์‘:**
726
+ - ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ์ด์ƒ ํŒจํ„ด์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํƒ์ง€ํ•˜๋Š” ์‹œ์Šคํ…œ ๊ตฌ์ถ•
727
+ - ๊ฒฐ๊ณผ: ์ ๋Œ€์  ๊ณต๊ฒฉ ๋ฐœ์ƒ ์‹œ ์ฆ‰๊ฐ์ ์ธ ๊ฒฝ๊ณ  ๋ฐ ๋Œ€์‘ ๊ฐ€๋Šฅ
728
+
729
+ 2. **์ž๋™ํ™”๋œ ๋ฐฉ์–ด ๋„๊ตฌ:**
730
+ - Adversarial Examples ์ƒ์„ฑ ๋ฐ ๋ฐฉ์–ด ํ…Œ์ŠคํŠธ ์ž๋™ํ™”
731
+
732
+ ### 3. ์‹คํ—˜ ๊ฒฐ๊ณผ
733
+
734
+ #### ํ‰๊ฐ€ ๋ฐ์ดํ„ฐ
735
+
736
+ - ์ •์ƒ ๋ฐ์ดํ„ฐ: 110๊ฑด
737
+ - ๊ฒฐํ•จ ๋ฐ์ดํ„ฐ: 10๊ฑด
738
+ - ์ ๋Œ€์  ๋ฐ์ดํ„ฐ(FGSM ๊ณต๊ฒฉ): 100๊ฑด
739
+
740
+ #### ์ฃผ์š” ์„ฑ๋Šฅ ์ง€ํ‘œ
741
+
742
+ | ๋ฉ”ํŠธ๋ฆญ | ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ | ์ ๋Œ€์  ๋ฐ์ดํ„ฐ | ๋ณ€ํ™”์œจ |
743
+ |--------|------------|---------------|--------|
744
+ | Accuracy | 98% | 92% | -6% |
745
+ | F1 Score | 0.935 | 0.91 | -2.5% |
746
+ | False Positive | 2% | 5% | +3% |
747
+ | False Negative | 3% | 7% | +4% |
748
+
749
+ ### 4. ํ–ฅํ›„ ๊ณ„ํš
750
+
751
+ 1. **๋‹ค์–‘ํ•œ ๊ณต๊ฒฉ ๊ธฐ๋ฒ• ํ…Œ์ŠคํŠธ:**
752
+ - PGD, DeepFool ๋“ฑ ์ƒˆ๋กœ์šด ๊ณต๊ฒฉ ๊ธฐ๋ฒ• ์ ์šฉ ๋ฐ ํ‰๊ฐ€
753
+
754
+ 2. **๋ชจ๋ธ ๊ฐœ์„ :**
755
+ - Contrastive Learning ๋ฐ ์•™์ƒ๋ธ” ํ•™์Šต์„ ํ†ตํ•œ ๊ฒฌ๊ณ ์„ฑ ๊ฐ•ํ™”
756
+
757
+ 3. **์‹ค์‹œ๊ฐ„ ๋ฐฉ์–ด ์‹œ์Šคํ…œ ๊ตฌ์ถ•:**
758
+ - ๋ชจ๋ธ์˜ ์‹ค์‹œ๊ฐ„ ์˜ˆ์ธก ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ์ ๋Œ€์  ์ž…๋ ฅ ํƒ์ง€ ๋ฐ ์ฐจ๋‹จ
759
+
760
+ ---
761
 
762
  ## ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ณด์•ˆยท๋ผ์ด์„ ์Šค ์œ„ํ—˜ ๊ด€๋ฆฌ ์ฒด๊ณ„
763
 
764
  > ๋ณธ ์„น์…˜์€ AnomalyCLIP/AD-CLIP ๊ธฐ๋ฐ˜ ๋ชจ๋ธ ์นด๋“œ์˜ **๋ณด์•ˆยท๋ผ์ด์„ ์Šค ๊ฑฐ๋ฒ„๋„Œ์Šค**๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
765
  > ๋ชฉ์ : ๊ณต๊ธ‰๋ง(Software Supply Chain) ๋ฆฌ์Šคํฌ ์ตœ์†Œํ™”, ๋ผ์ด์„ ์Šค ์˜๋ฌด ์ค€์ˆ˜, ์žฌ๋ฐฐํฌ/์ƒ์šฉํ™” ์ ํ•ฉ์„ฑ ํ™•๋ณด.
766
 
 
 
767
  ### 1) ๋ฒ”์œ„(Scope) & ์›์น™
768
 
769
+ - ๋Œ€์ƒ: ํ•™์Šต/์ถ”๋ก  ์ฝ”๋“œ, ์Šคํฌ๋ฆฝํŠธ, ๋„๊ตฌ ์ฒด์ธ, ํŒŒ์ƒ ์‚ฐ์ถœ๋ฌผ(๊ฐ€์ค‘์น˜ยท์ฒดํฌํฌ์ธํŠธยทGUI ์‹คํ–‰ํŒŒ์ผ), ๋ฐฐํฌ ๋ฒˆ๋“ค(whl/zip/docker)
770
+ - ์›์น™:
771
+ - ์ตœ์†Œ๊ถŒํ•œ(Principle of Least Privilege)
772
+ - ์žฌํ˜„๊ฐ€๋Šฅ ๋นŒ๋“œ(Reproducible Build)
773
+ - ํˆฌ๋ช…์„ฑ(๋ช…์‹œ์  ๋ผ์ด์„ ์Šค ๊ณ ์ง€)
774
+ - ์‹ ์†ํ•œ ์ทจ์•ฝ์  ํŒจ์น˜
775
+ - ์ƒ์šฉ ๋ฐฐํฌ ์‹œ ๋ชจ๋“  OSS ์˜๋ฌด(์ €์ž‘๊ถŒ/NOTICE/์†Œ์Šค ์ œ๊ณต ๋ฒ”์œ„ ๋“ฑ) ์„ ์ดํ–‰ ํ›„ ๋ฐฐํฌ
776
 
777
+ ### 2) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ & ๋ผ์ด์„ ์Šค ๋งคํŠธ๋ฆญ์Šค
778
 
779
+ > ์‹ค์ œ ์‚ฌ์šฉํ•˜๋Š” ๋ฒ„์ „/๋ผ์ด์„ ์Šค๋Š” `pip-licenses`/`cyclonedx-py` ์‚ฐ์ถœ๋ฌผ๋กœ **์ž๋™์ƒ์„ฑ**ํ•˜์—ฌ ๋ณธ ํ…Œ์ด๋ธ”์„ ์ •๊ธฐ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
 
 
780
 
781
  | ํŒจํ‚ค์ง€ | ๋ฒ„์ „(์˜ˆ) | ๋ผ์ด์„ ์Šค(์˜ˆ) | ํ•ต์‹ฌ ์˜๋ฌด |
782
+ |--------|---------|--------------|-----------|
783
  | ftfy | 6.2.0 | MIT | ์ €์ž‘๊ถŒ ๊ณ ์ง€ ์œ ์ง€ |
784
  | matplotlib | 3.9.0 | PSF/MATPL | ์ €์ž‘๊ถŒ ๊ณ ์ง€ |
785
  | numpy | 1.24.3 | BSD-3 | ์ €์ž‘๊ถŒ/๋ฉด์ฑ… ๊ณ ์ง€ |
786
  | opencv-python | 4.9.0.80 | Apache-2.0 | NOTICE ํฌํ•จ ๊ถŒ์žฅ |
787
  | pandas | 2.2.2 | BSD-3 | ์ €์ž‘๊ถŒ/๋ฉด์ฑ… ๊ณ ์ง€ |
788
  | Pillow | 10.3.0 | HPND-PIL | ์ €์ž‘๊ถŒ ๊ณ ์ง€ |
789
+ | PyQt5 / PyQt5-sip | 5.15.10 / 12.13.0 | GPLv3/์ƒ์šฉ๋“€์–ผ | ์ƒ์šฉ ๋ฐฐํฌยท์ •์  ๋งํฌ ์ฃผ์˜ |
790
  | regex | 2024.5.15 | PSF | ์ €์ž‘๊ถŒ ๊ณ ์ง€ |
791
  | scikit-learn | 1.2.2 | BSD-3 | ์ €์ž‘๊ถŒ ๊ณ ์ง€ |
792
  | scipy | 1.9.1 | BSD-3 | ์ €์ž‘๊ถŒ ๊ณ ์ง€ |
 
799
  | torchvision | 0.15.1 | BSD-3 | ์ €์ž‘๊ถŒ ๊ณ ์ง€ |
800
  | tqdm | 4.65.0 | MPL-2.0 | ์ˆ˜์ • ๋ฐฐํฌ ์‹œ ์†Œ์Šค ๊ณต๊ฐœ ์š”๊ฑด ํ™•์ธ |
801
  | pyautogui | ์ตœ์‹  | BSD-3 | ์ €์ž‘๊ถŒ ๊ณ ์ง€ |
802
+ | CLIP ๊ฐ€์ค‘์น˜(ViT-B/32 ๋“ฑ) | ๋งํฌ ์ฐธ์กฐ | OpenAI Terms(๋ชจ๋ธ ๊ฐ€์ค‘์น˜) | ์ƒ์—…์  ์ด์šฉ ๊ฐ€๋Šฅ ์—ฌ๋ถ€/์žฌ๋ฐฐํฌ ์ œํ•œ ์‚ฌํ•ญ์„ ๊ฐœ๋ณ„ ์•ฝ๊ด€์œผ๋กœ ์žฌํ™•์ธ ํ•„์š” |
803
 
804
+ โš ๏ธ **์ฃผ์˜**: PyQt5๋Š” GPLv3(๋˜๋Š” ์ƒ์šฉ ๋ผ์ด์„ ์Šค)๋กœ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. ์ƒ์šฉ ๋ฐฐํฌ/์ •์  ๋งํฌ ์‹œ ์ฝ”๋“œ ๊ณต๊ฐœ ์˜๋ฌด๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ํ•„์š” ์‹œ ์ƒ์šฉ ๋ผ์ด์„ ์Šค ๊ตฌ๋งค ๋˜๋Š” Qt์˜ ๋Œ€์ฒด GUI(์˜ˆ: PySide6 LGPL, ์›น ํ”„๋ก ํŠธ์—”๋“œ) ๊ฒ€ํ† ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
 
805
 
806
+ โš ๏ธ **OpenAI CLIP ๊ฐ€์ค‘์น˜**๋Š” OpenAI ์ œ๊ณต ์•ฝ๊ด€์„ ๋ฐ˜๋“œ์‹œ ํ™•์ธํ•ด ์žฌ๋ฐฐํฌ/์ƒ์—…์  ์‚ฌ์šฉ ๋ฒ”์œ„๋ฅผ ๊ฒ€์ฆํ•˜์„ธ์š”.
807
 
808
  ### 3) ๋ฐฐํฌ ์‹œ ํ•„์ˆ˜ ๊ณ ์ง€(Attribution) & NOTICE
809
 
810
+ - ์ €์žฅ์†Œ ๋ฃจํŠธ์— `LICENSE`, `NOTICE`, `THIRD_PARTY_LICENSES/` ์œ ์ง€
811
+ - ํŒจํ‚ค์ง€๋ณ„ ์ €์ž‘๊ถŒยท๋ฉด์ฑ… ๊ณ ์ง€ ํฌํ•จ(์ž๋™์ˆ˜์ง‘ ์‚ฐ์ถœ๋ฌผ ๋ณ‘ํ•ฉ)
812
+ - ๋ชจ๋ธ ๊ฐ€์ค‘์น˜/๋ฐ์ดํ„ฐ์…‹์˜ ์›์ €์ž‘์žยท์•ฝ๊ด€์„ README์— ๋ช…์‹œ
 
 
 
813
 
814
  ### 4) ์ทจ์•ฝ์  ๊ด€๋ฆฌ ํ”„๋กœ์„ธ์Šค (CVE/SBOM)
815
 
816
+ **๋„๊ตฌ ์ฒด์ธ(๊ถŒ์žฅ):**
817
  - SBOM: `cyclonedx-py` / `pipdeptree` โ†’ `bom.json`/`bom.xml`
818
  - ๋ผ์ด์„ ์Šค: `pip-licenses --format=json`
819
  - ์ทจ์•ฝ์ : `pip-audit`, `safety`, (์ปจํ…Œ์ด๋„ˆ) `trivy`
820
 
821
+ **์ •์ฑ…:**
822
+ 1. ์ฃผ๊ธฐ์  ์Šค์บ”: ๋ฉ”์ธ ๋ธŒ๋žœ์น˜ ์ฃผ 1ํšŒ, ๋ฆด๋ฆฌ์Šค ์ง์ „ 1ํšŒ
823
+ 2. ์ž„๊ณ„์น˜: High/CRITICAL ๋ฐœ๊ฒฌ ์‹œ ๋ฆด๋ฆฌ์Šค ์ค‘๋‹จ, ํŒจ์น˜/์šฐํšŒ๋ฒ„์ „ ํ‰๊ฐ€
824
+ 3. ๋ณ€๊ฒฝ๊ด€๋ฆฌ: ํŒจ์น˜ ํ›„ ํšŒ๊ท€ ํ…Œ์ŠคํŠธ, ์„ฑ๋Šฅ ์˜ํ–ฅ ๋ณด๊ณ 
825
+ 4. ์ถ”์ : `SECURITY.md`์— CVE, ์˜ํ–ฅ๋ฒ”์œ„, ๋Œ€์‘์ƒํƒœ ๊ธฐ๋ก
826
 
827
+ **์˜ˆ์‹œ ์ปค๋งจ๋“œ:**
828
 
829
  ```bash
830
  # SBOM
 
839
 
840
  # ์ปจํ…Œ์ด๋„ˆ(์žˆ์„ ๊ฒฝ์šฐ)
841
  trivy fs . # ์†Œ์Šค/์ข…์†์„ฑ ์Šค์บ”
842
+ ```
843
 
844
+ ### 5. ๊ฐœ๋ฐœยท๋นŒ๋“œ ๋ณด์•ˆ (Development & Build Security)
845
 
846
  > ์•ˆ์ „ํ•˜๊ณ  ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๋นŒ๋“œ ํŒŒ์ดํ”„๋ผ์ธ์„ ์œ ์ง€ํ•˜์—ฌ ๊ณต๊ธ‰๋ง ๋ฆฌ์Šคํฌ๋ฅผ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.
847
 
848
+ **๊ถŒ์žฅ ์„ค์ •:**
849
+ - ์ž ๊ธˆํŒŒ์ผ(`requirements.txt` / `constraints.txt`)์— ์ •ํ™•ํ•œ ๋ฒ„์ „(pin) ๋ช…์‹œ
850
  - `pip-tools`๋ฅผ ์‚ฌ์šฉํ•ด ์˜์กด์„ฑ ๋™๊ฒฐ (`pip-compile`)
851
+ - CI/CD์—์„œ `--require-hashes` ์˜ต์…˜์œผ๋กœ ํ•ด์‹œ ๊ฒ€์ฆ
852
+ - ๋ฐฐํฌ ์•„ํ‹ฐํŒฉํŠธ์— SHA256 ํ•ด์‹œ ๋ฐ SBOM ํฌํ•จ
853
+ - API Key / Token์€ ์ฝ”๋“œ์— ์ ˆ๋Œ€ ํฌํ•จ ๊ธˆ์ง€ (ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋˜๋Š” Secret Manager ์‚ฌ์šฉ)
854
+ - ์„œ๋ช…/๋ฌด๊ฒฐ์„ฑ ๊ด€๋ฆฌ: ํ•ด์‹œ ๊ฒ€์ฆ ๋ฐ SBOM ๋™์‹œ ๋ฐฐํฌ
855
+ - ๊ถŒํ•œ ๋ถ„๋ฆฌ: ํ•™์Šต/์ถ”๋ก  ์„œ๋ฒ„๋Š” ์ตœ์†Œ ๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰
856
+
857
+ **์„ค์น˜ ์˜ˆ์‹œ:**
858
 
 
859
  ```bash
860
  pip install pip-tools
861
  pip install cyclonedx-bom pipdeptree pip-licenses pip-audit safety
862
  ```
863
 
864
+ **๋นŒ๋“œ/๊ฒ€์ฆ ๋ช…๋ น์–ด:**
865
+
866
  ```bash
867
  # ์˜์กด์„ฑ ๋™๊ฒฐ
868
  pip-compile requirements.in --output-file requirements.txt
 
878
  safety check
879
  ```
880
 
 
 
881
  ### 6. ๋ฐ์ดํ„ฐยท๋ชจ๋ธ ์•„ํ‹ฐํŒฉํŠธ ๋ณด์•ˆ (Data & Model Artifact Security)
882
 
883
  > ๋ชจ๋ธ๊ณผ ๋ฐ์ดํ„ฐ๋Š” AI ๊ณต๊ธ‰๋ง์˜ ํ•ต์‹ฌ ์ž์‚ฐ์ž…๋‹ˆ๋‹ค.
884
  > ์•„๋ž˜ ์ง€์นจ์€ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ๊ณผ ๋ชจ๋ธ์˜ ์‹ ๋ขฐ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์†Œ ๋ณด์•ˆ ๊ธฐ์ค€์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
885
 
886
+ **ํ•ต์‹ฌ ๋ชฉํ‘œ:**
887
+ 1. ํ•™์Šต ๋ฐ ํ‰๊ฐ€ ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ(Integrity) ๋ณด์žฅ
888
+ 2. ๋ชจ๋ธ ์ฒดํฌํฌ์ธํŠธ(.pth ๋“ฑ)์˜ ์œ„๋ณ€์กฐ ๋ฐฉ์ง€ ๋ฐ ์ถ”์ ์„ฑ ํ™•๋ณด
889
+ 3. ์ ๋Œ€์  ๊ณต๊ฒฉ(Adversarial Attack) ๋ฐ ๋ฐ์ดํ„ฐ ์˜ค์—ผ(Data Poisoning) ๋Œ€์‘
890
  4. ํ•™์Šต ์žฌํ˜„์„ฑ(Reproducibility) ๋ณด์žฅ
891
 
892
+ **๋ฐ์ดํ„ฐ ๋ณด์•ˆ ๊ด€๋ฆฌ ์ ˆ์ฐจ:**
893
 
894
  | ๋‹จ๊ณ„ | ์„ค๋ช… | ๋„๊ตฌ / ์‹คํ–‰ ์˜ˆ์‹œ |
895
  |------|------|------------------|
 
899
  | โ‘ฃ ์ ‘๊ทผ ์ œ์–ด | ๋ฐ์ดํ„ฐ ํด๋” ๊ถŒํ•œ ์ตœ์†Œํ™” (r-- ๊ถŒํ•œ์œผ๋กœ ๊ณต์œ ) | `chmod 440 data/*` |
900
  | โ‘ค ๋ฒ„์ „ ๊ด€๋ฆฌ | ๋ณ€๊ฒฝ ์‹œ์ ๋งˆ๋‹ค ๋ฒ„์ „๋ช… ๊ธฐ๋ก (์˜ˆ: `20241002_V2`) | Git tag ๋˜๋Š” DVC ์‚ฌ์šฉ |
901
 
902
+ **๋ชจ๋ธ ์•„ํ‹ฐํŒฉํŠธ ๊ด€๋ฆฌ:**
903
 
904
  | ํ•ญ๋ชฉ | ๊ด€๋ฆฌ ๋ฐฉ๋ฒ• | ์ฃผ์˜์‚ฌํ•ญ |
905
  |------|-------------|-----------|
 
909
  | **์ถ”์ ์„ฑ ํ™•๋ณด** | MLflow / W&B ๋˜๋Š” ๋กœ์ปฌ DB ์‚ฌ์šฉ | `run_id`, `commit_id`, `data_version` ์—ฐ๋™ |
910
  | **๋น„๊ณต๊ฐœ ์ €์žฅ์†Œ ๊ด€๋ฆฌ** | ๋‚ด๋ถ€ NAS ๋˜๋Š” S3 Private Bucket ํ™œ์šฉ | ๊ณต๊ฐœ ์ €์žฅ์†Œ ์—…๋กœ๋“œ ๊ธˆ์ง€ (ํŠนํžˆ ๊ณ ๊ฐ ์ด๋ฏธ์ง€ ํฌํ•จ ์‹œ) |
911
 
912
+ **์ฒดํฌํฌ์ธํŠธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ตฌ์กฐ (์˜ˆ์‹œ):**
913
+
914
  ```json
915
  {
916
  "model_name": "ad_clip_epoch_120.pth",
 
926
  }
927
  ```
928
 
929
+ **์ ๋Œ€์  ๊ณต๊ฒฉ(Adversarial Attack) ๋ฐฉ์–ด ๊ฐ•ํ™”:**
930
 
931
  | ๊ณต๊ฒฉ ์œ ํ˜• | ์„ค๋ช… | ๋Œ€์‘ ๋ฐฉ์•ˆ |
932
  |------------|------|------------|
 
935
  | **Data Poisoning** | ํ•™์Šต ๋ฐ์ดํ„ฐ์— ์•…์„ฑ ๋ฐ์ดํ„ฐ ์‚ฝ์ž… | ๋ฐ์ดํ„ฐ ์ •์ œ ๋ฐ ํ•ด์‹œ ๊ธฐ๋ฐ˜ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์ฆ |
936
  | **Evasion Attack** | ์ถ”๋ก  ์‹œ ์ž…๋ ฅ ์กฐ์ž‘ | ํ™•๋ฅ  ์ž„๊ณ„๊ฐ’ ์กฐ์ • + Gradient Masking |
937
 
938
+ **๋ฌด๊ฒฐ์„ฑ ๊ฒ€์ฆ ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ (์˜ˆ์‹œ):**
939
+
940
  ```bash
941
  #!/bin/bash
942
  echo "[INFO] Starting dataset integrity check..."
 
952
  echo "[INFO] Dataset integrity check completed successfully."
953
  ```
954
 
955
+ **๊ถŒ์žฅ ๋„๊ตฌ:**
956
+
957
  | ๋ชฉ์  | ๋„๊ตฌ | ๋น„๊ณ  |
958
  |------|------|------|
959
+ | ๋ฐ์ดํ„ฐ ๋ฒ„์ „ ๊ด€๋ฆฌ | DVC (Data Version Control) | Git ์—ฐ๋™ ๊ฐ€๋Šฅ |
960
+ | ๋ชจ๋ธ ์‹คํ—˜ ์ถ”์  | MLflow / W&B | ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ ๊ฒฐ๊ณผ ์ถ”์  |
961
+ | ๋ณด์•ˆ ์Šค์บ” | trivy, safety, pip-audit | ์˜์กด์„ฑ ์ทจ์•ฝ์  ์ ๊ฒ€ |
962
+ | ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์ฆ | sha256sum / openssl dgst | ํ•ด์‹œ ๊ธฐ๋ฐ˜ ๊ฒ€์ฆ |
963
+
964
+ **์˜ˆ์‹œ ์›Œํฌํ”Œ๋กœ์šฐ (๋ชจ๋ธ ์•„์นด์ด๋ธŒ ์ƒ์„ฑ):**
965
 
 
966
  ```bash
967
  # 1. ํ•ด์‹œ ์ƒ์„ฑ
968
  sha256sum ad_clip_epoch_120.pth > ad_clip_epoch_120.pth.sha256
 
977
  sha256sum -c ad_clip_epoch_120.pth.sha256
978
  ```
979
 
980
+ **๋ฌธ์„œํ™” ์˜ˆ์‹œ:**
981
+
982
  > `/security/model_security/README.md` ํŒŒ์ผ ๋‚ด ํฌํ•จ ๊ถŒ์žฅ
983
 
984
  ```markdown
 
988
  - ๋ฐ์ดํ„ฐ์…‹ ๋ฐ ๋ชจ๋ธ ๋ณ€๊ฒฝ ์‹œ, ์ƒˆ๋กœ์šด ๋ฒ„์ „ ํƒœ๊ทธ(`_Vx.x`)๋ฅผ ๋ถ€์—ฌํ•˜๊ณ  SBOM์„ ์žฌ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
989
  ```
990
 
 
 
991
  ### 7. ์žฌ๋ฐฐํฌยท์ƒ์—…ํ™” ๊ฐ€์ด๋“œ (Redistribution & Commercialization)
992
 
993
  > ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด์„ ์Šค ๋ฐ ๋ฐ์ดํ„ฐ์…‹ยท๋ชจ๋ธ ์•ฝ๊ด€์„ ์ค€์ˆ˜ํ•˜์—ฌ ๋ฒ•์  ๋ฆฌ์Šคํฌ๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.
994
 
995
+ **์›์น™:**
996
+
997
  | ๋ผ์ด์„ ์Šค | ์‚ฌ์šฉ ๊ฐ€๋Šฅ์„ฑ | ์ฃผ์˜์‚ฌํ•ญ |
998
  |-----------|-------------|-----------|
999
+ | MIT / BSD / Apache-2.0 | ์ž์œ ๋กœ์šด ์ƒ์—…์  ์‚ฌ์šฉ ๊ฐ€๋Šฅ | ์ €์ž‘๊ถŒ, NOTICE ํŒŒ์ผ ์œ ์ง€ |
1000
+ | GPL / MPL ๋“ฑ ์นดํ”ผ๋ ˆํ”„ํŠธ | ์กฐ๊ฑด๋ถ€ ํ—ˆ์šฉ | ๋งํฌ ๋ฐฉ์‹์— ๋”ฐ๋ผ ์†Œ์Šค ๊ณต๊ฐœ ์˜๋ฌด ๋ฐœ์ƒ |
1001
+ | OpenAI CLIP ๊ฐ€์ค‘์น˜ | ์ œํ•œ์  | ์ƒ์—…์  ์ด์šฉ ์•ฝ๊ด€ ๋ณ„๋„ ํ™•์ธ ํ•„์š” |
1002
+ | HuggingFace Dataset | ์ถœ์ฒ˜๋ณ„ ํ™•์ธ | ๋ฐ์ดํ„ฐ ์ œ๊ณต์ž ์•ฝ๊ด€ ์ค€์ˆ˜ ํ•„์š” |
1003
 
1004
+ **์ฒดํฌ๋ฆฌ์ŠคํŠธ:**
1005
+ - [x] `THIRD_PARTY_LICENSES/` ์ตœ์‹ ํ™”
1006
+ - [x] PyQt5 ๋“ฑ GPL ๊ณ„์—ด ์˜์กด์„ฑ ๊ฒ€ํ† 
1007
+ - [x] CLIP ๊ฐ€์ค‘์น˜ ์•ฝ๊ด€ ๋ฌธ์„œ ์ฒจ๋ถ€
1008
+ - [x] SBOM + ํ•ด์‹œ ํฌํ•จํ•˜์—ฌ ๋ฐฐํฌ
 
 
1009
 
1010
  ### 8. ๋‚ด๋ถ€ ์Šน์ธยทRACI (Internal Approval & RACI)
1011
 
 
1018
  | ์ทจ์•ฝ์  ํŒจ์น˜ ์ ์šฉ | ๊ฐœ๋ฐœํŒ€ | ๋ณด์•ˆํŒ€ | ๊ฐœ๋ฐœํŒ€์žฅ |
1019
  | ๋ฆด๋ฆฌ์Šค ์Šน์ธ | ๊ฐœ๋ฐœํŒ€ | ๋ณด์•ˆยท๋ฒ•๋ฌด | ์ œํ’ˆ ์ฑ…์ž„์ž(PO) |
1020
 
 
 
1021
  ### 9. PR ์ฒดํฌ๋ฆฌ์ŠคํŠธ (Pull Request Checklist)
1022
 
1023
  > ๋ฆด๋ฆฌ์Šค/๋ณ‘ํ•ฉ ์ „ ๋ณด์•ˆยท๋ฒ•์  ์ค€์ˆ˜๋ฅผ ์œ„ํ•œ ์ ๊ฒ€ ํ•ญ๋ชฉ์ž…๋‹ˆ๋‹ค.
 
1035
 
1036
  ---
1037
 
1038
+ ## References
1039
+
1040
+ - AnomalyCLIP: Object-agnostic Prompt Learning for Zero-shot Anomaly Detection [[github](https://github.com/zqhang/AnomalyCLIP.git)]