| 1 |
--- |
1 |
--- |
| 2 |
title: 참고: NSFWJS 모델 호환성 매트릭스 |
2 |
title: 참고: NSFWJS 모델 호환성 매트릭스 |
| 3 |
document_id: reference-nsfwjs-model-compatibility |
3 |
document_id: reference-nsfwjs-model-compatibility |
| 4 |
slug: reference-nsfwjs-model-compatibility |
4 |
slug: reference-nsfwjs-model-compatibility |
| 5 |
target_editor_version: 9.1.0 |
5 |
target_editor_version: 9.1.0 |
| 6 |
document_type: reference |
6 |
document_type: reference |
| 7 |
doc_type: reference |
7 |
doc_type: reference |
| 8 |
target_readers: [웹마스터, 개발자, AI agent] |
8 |
target_readers: [웹마스터, 개발자, AI agent] |
| 9 |
importance: High |
9 |
importance: High |
| 10 |
dependency: Medium |
10 |
dependency: Medium |
| 11 |
core_type: Reference |
11 |
core_type: Reference |
| 12 |
stability: [Stable Anchor, Version-Bound] |
12 |
stability: [Stable Anchor, Version-Bound] |
| 13 |
stable_anchor: [model.json 기반 배포, className 기반 판정] |
13 |
stable_anchor: [model.json 기반 배포, className 기반 판정] |
| 14 |
version_bound: [9.1.0의 buildAssessment 구현, T2_NSFW_BROWSER_MODEL_TYPE 설정] |
14 |
version_bound: [9.1.0의 buildAssessment 구현, T2_NSFW_BROWSER_MODEL_TYPE 설정] |
| 15 |
related_docs: [guide-nsfwjs-custom-model-installation, guide-nsfwjs-overview, config-nsfwjs-runtime-settings] |
15 |
related_docs: [guide-nsfwjs-custom-model-installation, guide-nsfwjs-overview, config-nsfwjs-runtime-settings] |
| 16 |
related_files: [9.1.0/t2editor/config/nsfw_api_browser.js] |
16 |
related_files: [9.1.0/t2editor/config/nsfw_api_browser.js] |
| 17 |
related_functions: [buildAssessment, classify] |
17 |
related_functions: [buildAssessment, classify] |
| 18 |
related_classes_modules: [NSFWFilterAPI] |
18 |
related_classes_modules: [NSFWFilterAPI] |
| 19 |
related_features: [모델 교체, 자체 호스팅, 분류 결과 해석] |
19 |
related_features: [모델 교체, 자체 호스팅, 분류 결과 해석] |
| 20 |
related_ui: [NSFW 상태 배지] |
20 |
related_ui: [NSFW 상태 배지] |
| 21 |
change_risk: 호환성 판단을 잘못하면 로딩은 성공하지만 실제 판정 의미가 달라질 수 있습니다. |
21 |
change_risk: 호환성 판단을 잘못하면 로딩은 성공하지만 실제 판정 의미가 달라질 수 있습니다. |
| 22 |
reading_order: 32 |
22 |
reading_order: 32 |
| 23 |
summary: T2Editor 9.1.0에서 NSFWJS 모델 교체 시 확인해야 하는 입력 크기, 모델 타입, 출력 클래스, 운영 리스크를 정리한 참고 문서입니다. |
23 |
summary: T2Editor 9.1.0에서 NSFWJS 모델 교체 시 확인해야 하는 입력 크기, 모델 타입, 출력 클래스, 운영 리스크를 정리한 참고 문서입니다. |
| 24 |
description: NSFWJS 기본 모델과 커스텀 TFJS 모델을 T2Editor 9.1.0에 연결할 때의 호환 조건을 표 중심으로 정리한 참고 문서입니다. |
24 |
description: NSFWJS 기본 모델과 커스텀 TFJS 모델을 T2Editor 9.1.0에 연결할 때의 호환 조건을 표 중심으로 정리한 참고 문서입니다. |
| 25 |
tags: [NSFWJS, compatibility, reference, T2Editor] |
25 |
tags: [NSFWJS, compatibility, reference, T2Editor] |
| 26 |
version_tag: 9.1.0 |
26 |
version_tag: 9.1.0 |
| 27 |
maintenance_difficulty: Medium |
27 |
maintenance_difficulty: Medium |
| 28 |
test_requirement: High |
28 |
test_requirement: High |
| 29 |
ai_agent_risk: Medium |
29 |
ai_agent_risk: Medium |
| 30 |
source_basis: [현재 코드 분석 기반, NSFWJS 공식 README 기반, TensorFlow.js 공식 문서 기반] |
30 |
source_basis: [현재 코드 분석 기반, NSFWJS 공식 README 기반, TensorFlow.js 공식 문서 기반] |
| 31 |
beginner_section_included: false |
31 |
beginner_section_included: false |
| 32 |
webmaster_section_included: true |
32 |
webmaster_section_included: true |
| 33 |
developer_section_included: true |
33 |
developer_section_included: true |
| 34 |
--- |
34 |
--- |
| 35 |
|
35 |
|
| 36 |
[목차] |
36 |
[목차] |
| 37 |
|
37 |
|
| 38 |
[[분류:참고자료]] |
38 |
[[분류:참고자료]] |
| 39 |
[[분류:NSFWJS]] |
39 |
[[분류:NSFWJS]] |
| 40 |
[[guide-nsfwjs-custom-model-installation|커스텀 모델 설치 가이드]] |
|
|
| 41 |
|
40 |
|
| 42 |
= 빠른 판정 = |
41 |
= 빠른 판정 = |
| 43 |
|
42 |
|
| 44 |
||= 질문 ||= 바로 확인할 항목 ||= 결과 || |
43 |
||= 질문 ||= 바로 확인할 항목 ||= 결과 || |
| 45 |
|| 모델 파일만 바꾸면 되나? || 출력 클래스 5종 유지 여부 || 유지되면 가능성이 높음 || |
44 |
|| 모델 파일만 바꾸면 되나? || 출력 클래스 5종 유지 여부 || 유지되면 가능성이 높음 || |
| 46 |
|| URL만 바꾸면 되나? || `model.json` 공개 경로, weight shard 경로 || 경로가 맞아야 함 || |
45 |
|| URL만 바꾸면 되나? || `model.json` 공개 경로, weight shard 경로 || 경로가 맞아야 함 || |
| 47 |
|| `graph`가 필요한가? || 모델이 GraphModel인지 확인 || 맞으면 필요 || |
46 |
|| `graph`가 필요한가? || 모델이 GraphModel인지 확인 || 맞으면 필요 || |
| 48 |
|| `size`도 필요한가? || 입력이 224 외 크기인지 확인 || 모델에 따라 필요 || |
47 |
|| `size`도 필요한가? || 입력이 224 외 크기인지 확인 || 모델에 따라 필요 || |
| 49 |
|| UI 수정도 필요한가? || 클래스 체계/threshold 변경 여부 || 다르면 필요 || |
48 |
|| UI 수정도 필요한가? || 클래스 체계/threshold 변경 여부 || 다르면 필요 || |
| 50 |
|
49 |
|
| 51 |
= 모델별 기본 호환성 = |
50 |
= 모델별 기본 호환성 = |
| 52 |
|
51 |
|
| 53 |
||= 모델 ||= load 방식 ||= 권장 type ||= 입력 크기 ||= 드롭인 교체성 ||= 메모 || |
52 |
||= 모델 ||= load 방식 ||= 권장 type ||= 입력 크기 ||= 드롭인 교체성 ||= 메모 || |
| 54 |
|| MobileNetV2 || 이름 또는 URL || null || 224 || 높음 || 가장 가벼운 축 || |
53 |
|| MobileNetV2 || 이름 또는 URL || null || 224 || 높음 || 가장 가벼운 축 || |
| 55 |
|| MobileNetV2Mid || 이름 또는 URL || `graph` || 문서상 mid graph 취급 || 매우 높음 || 9.1.0 기본값 || |
54 |
|| MobileNetV2Mid || 이름 또는 URL || `graph` || 문서상 mid graph 취급 || 매우 높음 || 9.1.0 기본값 || |
| 56 |
|| InceptionV3 || 이름 또는 URL || null || 299 || 보통 || 더 무거울 수 있음 || |
55 |
|| InceptionV3 || 이름 또는 URL || null || 299 || 보통 || 더 무거울 수 있음 || |
| 57 |
|| 커스텀 LayersModel || URL || null || 모델별 상이 || 낮음~보통 || 출력 클래스 확인 필요 || |
56 |
|| 커스텀 LayersModel || URL || null || 모델별 상이 || 낮음~보통 || 출력 클래스 확인 필요 || |
| 58 |
|| 커스텀 GraphModel || URL || `graph` || 모델별 상이 || 낮음~보통 || TFJS 변환 방식 확인 필요 || |
57 |
|| 커스텀 GraphModel || URL || `graph` || 모델별 상이 || 낮음~보통 || TFJS 변환 방식 확인 필요 || |
| 59 |
|
58 |
|
| 60 |
= 현재 9.1.0 코드가 기대하는 출력 = |
59 |
= 현재 9.1.0 코드가 기대하는 출력 = |
| 61 |
|
60 |
|
| 62 |
현재 T2Editor 9.1.0은 예측 결과 배열에서 `className` 값을 소문자로 읽고 아래 키를 찾습니다. |
61 |
현재 T2Editor 9.1.0은 예측 결과 배열에서 `className` 값을 소문자로 읽고 아래 키를 찾습니다. |
| 63 |
|
62 |
|
| 64 |
||= 키 ||= 용도 ||= 누락 시 영향 || |
63 |
||= 키 ||= 용도 ||= 누락 시 영향 || |
| 65 |
|| porn || explicitScore 계산 || unsafe 판정 약화 || |
64 |
|| porn || explicitScore 계산 || unsafe 판정 약화 || |
| 66 |
|| hentai || explicitScore 계산 || unsafe 판정 약화 || |
65 |
|| hentai || explicitScore 계산 || unsafe 판정 약화 || |
| 67 |
|| sexy || suspect/unsafe 보조 || suspect 판정 약화 || |
66 |
|| sexy || suspect/unsafe 보조 || suspect 판정 약화 || |
| 68 |
|| neutral || safeScore 계산 || safe 판정 약화 || |
67 |
|| neutral || safeScore 계산 || safe 판정 약화 || |
| 69 |
|| drawing || safeScore 계산 || 드로잉 안전 판정 약화 || |
68 |
|| drawing || safeScore 계산 || 드로잉 안전 판정 약화 || |
| 70 |
|
69 |
|
| 71 |
[note] |
70 |
[note] |
| 72 |
즉, 모델이 성공적으로 로드되더라도 `className` 체계가 다르면 현재 UI에 맞는 의미로 결과를 해석할 수 없습니다. |
71 |
즉, 모델이 성공적으로 로드되더라도 `className` 체계가 다르면 현재 UI에 맞는 의미로 결과를 해석할 수 없습니다. |
| 73 |
[/note] |
72 |
[/note] |
| 74 |
|
73 |
|
| 75 |
= 호환되지 않는 대표 사례 = |
74 |
= 호환되지 않는 대표 사례 = |
| 76 |
|
75 |
|
| 77 |
- 클래스 이름이 숫자 인덱스만 있는 모델 |
76 |
- 클래스 이름이 숫자 인덱스만 있는 모델 |
| 78 |
- `safe/unsafe` 2분류만 반환하는 모델 |
77 |
- `safe/unsafe` 2분류만 반환하는 모델 |
| 79 |
- 멀티라벨이지만 `Porn/Hentai/Sexy/Neutral/Drawing` 체계가 아닌 모델 |
78 |
- 멀티라벨이지만 `Porn/Hentai/Sexy/Neutral/Drawing` 체계가 아닌 모델 |
| 80 |
- 이미지 전처리를 별도로 요구하는 모델 |
79 |
- 이미지 전처리를 별도로 요구하는 모델 |
| 81 |
- 입력 크기와 색공간이 크게 다른 모델 |
80 |
- 입력 크기와 색공간이 크게 다른 모델 |
| 82 |
|
81 |
|
| 83 |
= 운영 체크리스트 = |
82 |
= 운영 체크리스트 = |
| 84 |
|
83 |
|
| 85 |
[warning] |
84 |
[warning] |
| 86 |
다음 네 항목을 모두 만족하기 전에는 운영 반영을 권장하지 않습니다. |
85 |
다음 네 항목을 모두 만족하기 전에는 운영 반영을 권장하지 않습니다. |
| 87 |
[/warning] |
86 |
[/warning] |
| 88 |
|
87 |
|
| 89 |
1. `model.json`과 `.bin` 파일이 모두 HTTP 200으로 열림 |
88 |
1. `model.json`과 `.bin` 파일이 모두 HTTP 200으로 열림 |
| 90 |
2. `type` 설정이 실제 모델 형식과 맞음 |
89 |
2. `type` 설정이 실제 모델 형식과 맞음 |
| 91 |
3. 클래스 이름이 현재 판정 코드와 맞음 |
90 |
3. 클래스 이름이 현재 판정 코드와 맞음 |
| 92 |
4. 샘플 이미지 세트로 threshold를 점검함 |
91 |
4. 샘플 이미지 세트로 threshold를 점검함 |
| 93 |
|
92 |
|
| 94 |
[folding(샘플 테스트 최소 세트)] |
93 |
[folding(샘플 테스트 최소 세트)] |
| 95 |
- 일반 인물 사진 |
94 |
- 일반 인물 사진 |
| 96 |
- 풍경/사물 사진 |
95 |
- 풍경/사물 사진 |
| 97 |
- 애니/일러스트 |
96 |
- 애니/일러스트 |
| 98 |
- 경계 사례 |
97 |
- 경계 사례 |
| 99 |
- 실제 차단 대상 사례 |
98 |
- 실제 차단 대상 사례 |
| 100 |
[/folding] |
99 |
[/folding] |
| 101 |
|
100 |
|
| 102 |
= 차기 개선 후보 = |
101 |
= 차기 개선 후보 = |
| 103 |
|
102 |
|
| 104 |
- `T2_NSFW_BROWSER_MODEL_SIZE` 전역 설정 추가 |
103 |
- `T2_NSFW_BROWSER_MODEL_SIZE` 전역 설정 추가 |
| 105 |
- `class map` 설정 추가 |
104 |
- `class map` 설정 추가 |
| 106 |
- 모델별 threshold preset 추가 |
105 |
- 모델별 threshold preset 추가 |
| 107 |
- IndexedDB 캐시 정책 선택 기능 추가 |
106 |
- IndexedDB 캐시 정책 선택 기능 추가 |
| 108 |
|
107 |
|
| 109 |
== 수정 요약 == |
108 |
== 수정 요약 == |
| 110 |
- 커스텀 모델 교체 시의 호환 기준을 표 중심으로 정리했습니다. |
109 |
- 커스텀 모델 교체 시의 호환 기준을 표 중심으로 정리했습니다. |
| 111 |
|
110 |
|