Update README.md
Browse files
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 |
-
|
|
|
|
|
|
|
|
|
|
| 10 |
|
| 11 |
## ๋ชจ๋ธ ์ธ๋ถ์ฌํญ
|
| 12 |
|
|
@@ -16,34 +25,44 @@ AnomalyCLIP์ ํน์ ๊ฐ์ฒด์ ์์กดํ์ง ์๋ ํ
์คํธ ํ๋กฌํํธ๋ฅผ
|
|
| 16 |
์ด ๋ชจ๋ธ์ CLIP ๊ธฐ๋ฐ ์ด์ ํ์ง ๊ธฐ๋ฒ์ ํ์ฉํ์ฌ ์ ํ ๊ฒฐํจ์ ํ์งํฉ๋๋ค.
|
| 17 |
์ฌ์ ํ์ต๋ CLIP ๋ชจ๋ธ์ ํ์ธํ๋(Fine-tuning)ํ์ฌ ์ ํ ์ด๋ฏธ์ง์์ ๊ฒฐํจ์ ์๋ณํ๋ฉฐ, ์ด๋ฅผ ํตํด ์์ฐ ๋ผ์ธ์ ํ์ง ๊ด๋ฆฌ ๋ฐ ๊ฒฐํจ ํ์ง ์์
์ ์๋ํํ ์ ์์ต๋๋ค.
|
| 18 |
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
-
|
|
|
|
|
|
|
| 25 |
|
| 26 |
### ๊ธฐ์ ์ ์ ํ์ฌํญ
|
| 27 |
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
|
|
|
|
|
|
| 31 |
|
| 32 |
## ํ์ต ์ธ๋ถ์ฌํญ
|
| 33 |
|
| 34 |
-
###
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
|
|
|
|
|
|
|
|
|
| 39 |
|
| 40 |
-
###
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
|
| 45 |
-
|
| 46 |
-
|
|
|
|
|
|
|
|
|
|
| 47 |
|
| 48 |
### ๋ฐ์ดํฐ์
์ ๋ณด
|
| 49 |
|
|
@@ -51,233 +70,254 @@ AnomalyCLIP์ ํน์ ๊ฐ์ฒด์ ์์กดํ์ง ์๋ ํ
์คํธ ํ๋กฌํํธ๋ฅผ
|
|
| 51 |
์ด ๋ฐ์ดํฐ๋ ์ ํ์ ์ด๋ฏธ์ง, ๊ฒฐํจ ์์ญ์ ๋ํ ground truth ์ ๋ณด, ๊ทธ๋ฆฌ๊ณ ๊ธฐํ ๊ด๋ จ ํน์ฑ์ ํฌํจํ๊ณ ์์ต๋๋ค.
|
| 52 |
์ด๋ฏธ์ง๋ CLIP ๋ชจ๋ธ์ ์
๋ ฅ ํ์์ ์ ํฉํ๋๋ก ์ ์ฒ๋ฆฌ๋๋ฉฐ, ๊ฒฐํจ ์์ญ์ ํ๊ฐ๋ฅผ ์ํด ground truth ๋งํน์ด ํฌํจ๋ฉ๋๋ค.
|
| 53 |
|
| 54 |
-
- **๋ฐ์ดํฐ ์์ค:**
|
| 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 |
-
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
|
| 79 |
-
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
|
| 98 |
-
|
| 99 |
-
|
| 100 |
-
|
| 101 |
-
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
|
| 105 |
-
|
| 106 |
-
|
| 107 |
-
|
| 108 |
-
|
| 109 |
-
|
| 110 |
-
|
| 111 |
-
|
| 112 |
-
|
| 113 |
-
|
| 114 |
-
|
| 115 |
-
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
|
| 126 |
-
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
|
| 130 |
-
|
| 131 |
-
|
| 132 |
-
|
| 133 |
-
|
| 134 |
-
|
| 135 |
-
|
| 136 |
-
|
| 137 |
-
|
| 138 |
-
-
|
| 139 |
-
|
| 140 |
-
|
| 141 |
-
|
| 142 |
-
|
| 143 |
-
|
| 144 |
-
|
| 145 |
-
|
| 146 |
-
|
| 147 |
-
|
| 148 |
-
|
| 149 |
-
|
| 150 |
-
|
| 151 |
-
|
| 152 |
-
|
| 153 |
-
|
| 154 |
-
<
|
| 155 |
-
|
| 156 |
-
|
| 157 |
-
|
| 158 |
-
|
| 159 |
-
|
| 160 |
-
|
| 161 |
-
|
| 162 |
-
|
| 163 |
-
|
| 164 |
-
|
| 165 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 166 |
|
| 167 |
### ๋ฐ์ดํฐ ๋ผ๋ฒจ๋ง ๊ฐ์ด๋
|
|
|
|
| 168 |
๋ณธ ๋ฐ์ดํฐ ๋ผ๋ฒจ๋ง ๊ฐ์ด๋๋ AnomalyDetection ๊ธฐ๋ฐ ๋ชจ๋ธ ํ์ต์ ์ํด ์์ง๋ ๋ฐ์ดํฐ๋ฅผ ๋ผ๋ฒจ๋งํ๋ ๊ธฐ์ค๊ณผ ํ๋ก์ธ์ค๋ฅผ ๋ช
ํํ ์ ์ํฉ๋๋ค.
|
| 169 |
๋ฐ์ดํฐ๋ ์ฃผ๋ก ์ ์(normal) ๋ฐ์ดํฐ๋ฅผ ์ค์ฌ์ผ๋ก ๊ตฌ์ฑ๋๋ฉฐ, ์ต์ํ์ ๋น์ ์(anomaly) ๋ฐ์ดํฐ๋ฅผ ํฌํจํฉ๋๋ค.
|
| 170 |
๋ณธ ๊ฐ์ด๋๋ ๋ฐ์ดํฐ์ ํ์ง์ ์ ์งํ๊ณ ๋ชจ๋ธ ํ์ต ๋ฐ ํ
์คํธ๋ฅผ ์ต์ ํํ๋ ๋ฐ ๋ชฉํ๋ฅผ ๋ก๋๋ค.
|
| 171 |
-
|
| 172 |
-
|
| 173 |
-
|
| 174 |
-
|
| 175 |
-
|
| 176 |
-
|
| 177 |
-
|
| 178 |
-
|
| 179 |
-
|
| 180 |
-
|
| 181 |
-
|
| 182 |
-
|
| 183 |
-
|
| 184 |
-
-
|
| 185 |
-
|
| 186 |
-
|
| 187 |
-
|
| 188 |
-
|
| 189 |
-
|
| 190 |
-
|
| 191 |
-
|
| 192 |
-
|
| 193 |
-
|
| 194 |
-
|
| 195 |
-
|
| 196 |
-
|
| 197 |
-
|
| 198 |
-
|
| 199 |
-
|
| 200 |
-
|
| 201 |
-
|
| 202 |
-
|
| 203 |
-
|
| 204 |
-
|
| 205 |
-
|
| 206 |
-
|
| 207 |
-
|
| 208 |
-
|
| 209 |
-
|
| 210 |
-
|
| 211 |
-
|
| 212 |
-
|
| 213 |
-
|
| 214 |
-
|
| 215 |
-
|
| 216 |
-
|
| 217 |
-
|
|
|
|
| 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 |
-
|
| 226 |
-
|
| 227 |
-
|
| 228 |
-
|
| 229 |
-
|
| 230 |
-
|
| 231 |
-
|
| 232 |
-
|
| 233 |
-
|
| 234 |
-
|
| 235 |
-
|
| 236 |
-
|
| 237 |
-
|
| 238 |
-
|
| 239 |
-
|
| 240 |
-
|
| 241 |
-
|
| 242 |
-
-
|
| 243 |
-
-
|
| 244 |
-
|
| 245 |
-
|
| 246 |
-
|
| 247 |
-
|
| 248 |
-
|
| 249 |
-
|
| 250 |
-
|
| 251 |
-
#
|
| 252 |
-
|
| 253 |
-
|
| 254 |
-
|
| 255 |
-
|
| 256 |
-
|
| 257 |
-
|
| 258 |
-
#
|
| 259 |
-
|
| 260 |
-
|
| 261 |
-
|
| 262 |
-
|
| 263 |
-
|
| 264 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 |
-
|
| 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 |
-
|
| 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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 |
-
โ โ โ โโโ
|
| 447 |
-
โ โ โ โ โโโanomaly_1
|
| 448 |
-
โ โ โ โ โโโanomaly_2
|
| 449 |
โ โ โ โ
|
| 450 |
-
โ โ โ โโโtest/
|
| 451 |
-
โ โ โ โ โโโgood
|
| 452 |
-
โ โ โ โ โโโanomaly_1
|
| 453 |
-
|
| 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 |
-
|
| 469 |
-
|
|
|
|
|
|
|
|
|
|
| 470 |
cd dataset_config
|
| 471 |
python dataset_get_json.py
|
| 472 |
```
|
| 473 |
|
| 474 |
-
|
| 475 |
-
|
|
|
|
|
|
|
|
|
|
| 476 |
cd dataset_config
|
| 477 |
python image_ground_truth.py
|
| 478 |
```
|
| 479 |
|
| 480 |
-
|
| 481 |
-
|
|
|
|
| 482 |
cd training_libs
|
| 483 |
python dataset.py
|
| 484 |
```
|
| 485 |
|
| 486 |
-
|
| 487 |
-
|
| 488 |
-
|
| 489 |
-
|
| 490 |
-
|
| 491 |
-
|
| 492 |
-
|
| 493 |
-
|
|
|
|
| 494 |
|
|
|
|
| 495 |
|
| 496 |
-
|
| 497 |
-
|
| 498 |
-
|
| 499 |
-
|
| 500 |
-
|
| 501 |
-
AnomalyCLIP_lib/transform.py
|
| 502 |
```
|
| 503 |
-
|
| 504 |
-
|
| 505 |
-
|
| 506 |
-
|
| 507 |
-
|
| 508 |
-
|
| 509 |
-
|
| 510 |
-
-
|
| 511 |
-
|
| 512 |
-
|
| 513 |
-
|
| 514 |
-
|
| 515 |
-
|
| 516 |
-
-
|
| 517 |
-
|
| 518 |
-
|
| 519 |
-
|
| 520 |
-
|
| 521 |
-
|
| 522 |
-
|
| 523 |
-
|
| 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 |
-
|
| 537 |
-
|
| 538 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 539 |
|
| 540 |
-
|
|
|
|
| 541 |
|
| 542 |
-
|
| 543 |
-
|
|
|
|
|
|
|
|
|
|
| 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 |
-
###
|
|
|
|
|
|
|
| 550 |
|
| 551 |
-
|
| 552 |
-
|
|
|
|
| 553 |
parser.add_argument("--depth", type=int, default=9, help="image size")
|
| 554 |
```
|
| 555 |
|
| 556 |
-
|
| 557 |
-
|
|
|
|
|
|
|
|
|
|
| 558 |
parser.add_argument("--image_size", type=int, default=518, help="image size")
|
| 559 |
```
|
| 560 |
|
| 561 |
-
|
| 562 |
-
|
|
|
|
|
|
|
|
|
|
| 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 |
-
|
| 569 |
-
```ruby
|
| 570 |
-
parser.add_argument("--dpam", type=int, default=20, help="dpam size")
|
| 571 |
|
| 572 |
-
|
| 573 |
-
|
| 574 |
-
```
|
| 575 |
-
|
| 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 |
-
|
|
|
|
|
|
|
| 585 |
|
| 586 |
-
|
| 587 |
-
|
| 588 |
-
|
| 589 |
-
|
| 590 |
-
|
| 591 |
-
|
| 592 |
-
|
| 593 |
-
|
| 594 |
-
|
| 595 |
-
|
| 596 |
-
|
| 597 |
-
|
| 598 |
-
|
|
|
|
|
|
|
|
|
|
| 599 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 600 |
|
| 601 |
-
# ๋ชจ๋ธ ๊ณต๊ฒฉ ์ทจ์ฝ์ ๋ถ์
|
| 602 |
๋ณธ ๋ฌธ์๋ AnomalyCLIP ๋ชจ๋ธ์ ์ทจ์ฝ์ ๋ถ์ ๋ฐ ์ ๋์ ๊ณต๊ฒฉ(Adversarial Attacks)์ ๋ํ ๋ฐฉ์ด ๋์ฑ
์ ์ฒด๊ณ์ ์ผ๋ก ์๋ฆฝํ๊ธฐ ์ํด ์์ฑ๋์์ต๋๋ค.
|
| 603 |
๋ชจ๋ธ์ ์ ๋ขฐ์ฑ๊ณผ ์์ ์ฑ์ ํ๋ณดํ๊ณ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ๊ธฐ ์ํด, ๋ฐ์ดํฐ ๋ฐ ๋ชจ๋ธ ์์ค์ ๋ฐฉ์ด ์ ๋ต์ ๊ตฌํํ๊ณ ์ฑ๋ฅ์ ํ๊ฐํ ๊ฒฐ๊ณผ๋ฅผ ํฌํจํฉ๋๋ค.
|
| 604 |
-
|
| 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 |
-
|
| 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 |
-
-
|
| 689 |
-
-
|
| 690 |
-
- ์ต์๊ถํ(Principle of Least Privilege)
|
| 691 |
-
-
|
|
|
|
|
|
|
|
|
|
| 692 |
|
| 693 |
-
|
| 694 |
|
| 695 |
-
|
| 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 |
-
|
|
| 721 |
|
| 722 |
-
|
| 723 |
-
> โ ๏ธ **OpenAI CLIP ๊ฐ์ค์น**๋ **OpenAI ์ ๊ณต ์ฝ๊ด**์ ๋ฐ๋์ ํ์ธํด **์ฌ๋ฐฐํฌ/์์
์ ์ฌ์ฉ ๋ฒ์**๋ฅผ ๊ฒ์ฆํ์ธ์.
|
| 724 |
|
| 725 |
-
|
| 726 |
|
| 727 |
### 3) ๋ฐฐํฌ ์ ํ์ ๊ณ ์ง(Attribution) & NOTICE
|
| 728 |
|
| 729 |
-
- ์ ์ฅ์ ๋ฃจํธ์
|
| 730 |
-
- ํจํค์ง๋ณ ์ ์๊ถยท๋ฉด์ฑ
๊ณ ์ง ํฌํจ(์๋์์ง ์ฐ์ถ๋ฌผ ๋ณํฉ)
|
| 731 |
-
- ๋ชจ๋ธ ๊ฐ์ค์น/๋ฐ์ดํฐ์
์
|
| 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.
|
| 745 |
-
2.
|
| 746 |
-
3.
|
| 747 |
-
4.
|
| 748 |
|
| 749 |
-
**์์
|
| 750 |
|
| 751 |
```bash
|
| 752 |
# SBOM
|
|
@@ -761,27 +839,30 @@ safety check # ์์ ์ฑ DB ๊ธฐ๋ฐ ์ค์บ
|
|
| 761 |
|
| 762 |
# ์ปจํ
์ด๋(์์ ๊ฒฝ์ฐ)
|
| 763 |
trivy fs . # ์์ค/์ข
์์ฑ ์ค์บ
|
|
|
|
| 764 |
|
| 765 |
-
### 5
|
| 766 |
|
| 767 |
> ์์ ํ๊ณ ์ฌํ ๊ฐ๋ฅํ ๋น๋ ํ์ดํ๋ผ์ธ์ ์ ์งํ์ฌ ๊ณต๊ธ๋ง ๋ฆฌ์คํฌ๋ฅผ ์ต์ํํฉ๋๋ค.
|
| 768 |
|
| 769 |
-
**๊ถ์ฅ
|
| 770 |
-
- ์ ๊ธํ์ผ(`requirements.txt` / `constraints.txt`)์ ์ ํํ ๋ฒ์ (pin) ๋ช
์
|
| 771 |
- `pip-tools`๋ฅผ ์ฌ์ฉํด ์์กด์ฑ ๋๊ฒฐ (`pip-compile`)
|
| 772 |
-
- CI/CD์์ `--require-hashes` ์ต์
์ผ๋ก ํด์ ๊ฒ์ฆ
|
| 773 |
-
- ๋ฐฐํฌ ์ํฐํฉํธ์
|
| 774 |
-
-
|
| 775 |
-
-
|
| 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. ํ์ต ๋ฐ ํ๊ฐ ๋ฐ์ดํฐ์
|
| 809 |
-
2. ๋ชจ๋ธ ์ฒดํฌํฌ์ธํธ(.pth ๋ฑ)์
|
| 810 |
-
3.
|
| 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 |
-
| ๋ฐ์ดํฐ ๋ฒ์ ๊ด๋ฆฌ |
|
| 878 |
-
| ๋ชจ๋ธ ์คํ ์ถ์ |
|
| 879 |
-
| ๋ณด์ ์ค์บ |
|
| 880 |
-
| ๋ฌด๊ฒฐ์ฑ ๊ฒ์ฆ |
|
|
|
|
|
|
|
| 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 |
-
|
|
| 917 |
-
|
|
| 918 |
-
|
|
| 919 |
-
|
|
| 920 |
|
| 921 |
-
|
| 922 |
-
- [x] `THIRD_PARTY_LICENSES/` ์ต์ ํ
|
| 923 |
-
- [x] PyQt5 ๋ฑ
|
| 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 |
-
|
| 960 |
-
|
|
|
|
|
|
| 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)]
|