docs(10_Wiki): 위키 전체 재구성 — Topic_* 폴더를 4개 카테고리로 통합 + 대규모 중복 제거

Topic_Agent/Topic_Blog/Topics/Topics_Biz/Topics_Meeting/Topics_Rag의 마크다운 지식 문서를
Topic_General/Topic_Programming/Topic_Graphic/Topic_Business 4개 카테고리로 재분류.

- 중복 제거: frontmatter의 status:duplicate/merged + duplicate_of/redirect_to 필드로
  자기 자신을 중복으로 선언한 리다이렉트 stub 1032개 제거, 완전 동일 내용 파일 472개 제거,
  동일 파일명·다른 내용 충돌 시 더 큰(완전한) 버전만 유지(162개 제거) — 총 1639개 중복 제거.
- 분류: 폴더 단위로 명확한 항목(AI_and_ML/Coding/Architecture 등 → Programming,
  Comfyui/Visual_Effects → Graphic, Topics_Biz/Topics_Meeting/사업 등 → Business,
  Poetic_Blog_Writing/창의성/Game_Design 등 → General)은 폴더 우선순위로,
  나머지 혼재 폴더(Topic_Agent/Topic_Blog/Topics 루트/Thinking & Reasoning/Other/UI_UX_Assets)는
  title/tags 키워드 스코어링으로 파일 단위 분류(불명확한 경우 General로 폴백).
  원본 폴더명은 "From_*" 서브폴더로 보존해 추적 가능성 유지.
- 최종 배치: Programming 2784 / General 1608 / Graphic 285 / Business 249 = 4926개 문서.
- 에이전트 운영 상태(.astra/.agent/.obsidian/sessions/memory/_company/docs/lessons/_shared/src)는
  지식 콘텐츠가 아니므로 재분류 대상에서 제외하고 원위치 유지.
- Topics/Topic_email(상위 보호 폴더 Topic_email과 파일명 100% 중복) 삭제 — 보호 폴더 자체는 미변경.
- 완전히 비게 된 Topic_Agent/Topic_Blog/Topics_Biz/Topics_Rag 폴더 제거.
This commit is contained in:
Antigravity Agent
2026-07-05 00:33:48 +09:00
parent 1cfd3bbb56
commit 9148c358d0
6455 changed files with 1 additions and 86875 deletions
@@ -0,0 +1,324 @@
---
id: wiki-2026-0508-ai-이미지-품질-최적화-및-디버깅-image-qualit
title: AI Image Quality Optimization & Debugging
category: 10_Wiki/Topics
status: verified
canonical_id: self
aliases: [Image Quality Optimization, Debugging, defect fixing, negative prompt strategy]
duplicate_of: none
source_trust_level: B
confidence_score: 0.85
verification_status: conceptual
tags: [image-generation, quality, debugging, negative-prompt, inpainting, upscale, defect-detection]
raw_sources: []
last_reinforced: 2026-05-09
github_commit: pending
inferred_by: Claude Opus 4.7 (manual cleanup 2026-05-09)
---
# AI Image Quality Optimization & Debugging
## 📌 한 줄 통찰
> **매 raw output 의 defect (extra finger, blur, watermark) → systematic fix**. **Detect → mask → inpaint → upscale**. 매 specific defect 의 specific negative prompt.
## 📖 핵심
### 매 common defect 의 catalog
#### Body / anatomy
- Extra fingers / toes.
- Wrong number of limbs.
- Asymmetric eyes / face.
- Twisted joints.
- Missing teeth.
#### Quality
- Blur / out of focus.
- Low resolution.
- Compression artifact.
- Noise.
#### Composition
- Subject 의 cropped.
- Cluttered background.
- Wrong aspect.
#### Style
- Generic AI look (waxy skin).
- Inconsistent lighting.
- Wrong era / setting.
#### Text / artifact
- Watermark.
- Signature.
- Garbled text.
- Logo intrusion.
### 매 fix strategy
#### 1. Quality keyword (positive)
- "8k, 4k, high resolution".
- "ultra detailed, sharp focus".
- "masterpiece, professional photography".
→ 매 model 의 quality bias.
#### 2. Negative prompt (Stable Diffusion)
- Generic: "ugly, deformed, blurry, low quality".
- **Specific** > generic. 매 observed defect 의 explicit:
- "extra fingers, malformed hands".
- "watermark, signature, text".
- "asymmetric eyes, cross-eyed".
- "compression artifact, jpeg artifact".
#### 3. Weighted negative
```
(extra fingers:1.5), (deformed hands:1.3), (blurry:1.2), watermark
```
→ 매 defect 의 stronger suppression.
#### 4. Inpaint (region-specific)
- 매 mask 의 defect.
- 매 specific positive prompt.
#### 5. ControlNet (constraint)
- OpenPose: pose 의 enforce.
- Canny: edge.
- Depth: 3D structure.
→ 매 anatomy fix 의 큰 도움.
#### 6. Face restoration
- GFPGAN / CodeFormer.
- 매 face-specific.
#### 7. Upscale + detail
- Real-ESRGAN: 매 detail.
- Tile-based: 큰 image.
### 매 platform 의 difference
| Defect | Stable Diffusion | Midjourney | DALL-E |
|---|---|---|---|
| Extra finger | Negative prompt + ControlNet | Vary Region | Manual edit |
| Watermark | Negative prompt | --no | Inpaint |
| Blur | Negative + steps↑ | --s ↑ | (limited) |
| Bad face | GFPGAN + inpaint | Vary Region | Manual |
### 매 tuning parameter
#### Stable Diffusion
- **Steps**: 20-50 (sweet 30).
- **CFG (guidance)**: 7-12 (high = strict).
- **Sampler**: DPM++ 2M Karras (default modern).
- **Resolution**: SDXL = 1024x1024 native.
#### Midjourney
- **--s** (stylize): 0-1000.
- **--q** (quality): 0.25, 0.5, 1, 2.
- **--c** (chaos): 0-100.
- **--w** (weird): 0-3000.
### 매 photorealism
#### Lighting
- "Golden hour, soft light".
- "Volumetric lighting, rim light".
- "Studio softbox, three-point lighting".
#### Camera
- "85mm lens, shallow depth of field".
- "f/1.4, bokeh".
- "Wide angle 24mm" / "telephoto 200mm".
#### Realism keyword
- "photorealistic, photo, raw" (SD).
- (DALL-E 3 = "photo style, 85mm" — "photorealistic" 가 painting feel).
### 매 debugging workflow
#### Step 1: Generate base
- 매 prompt 의 first try.
#### Step 2: Identify defect
- 매 visual inspection.
- 매 specific list.
#### Step 3: Iterate prompt
- 매 negative prompt 추가.
- 매 quality keyword 추가.
#### Step 4: Regenerate
- 매 same seed (test).
- 매 different seed (variety).
#### Step 5: Inpaint specific
- 매 mask + targeted prompt.
- 매 round 의 small fix.
#### Step 6: Upscale + face
- 매 final detail.
→ 매 round 의 1-2 defect 의 fix. 매 다음 round.
## 💻 Code
### Negative prompt 의 weighted (SD)
```python
prompt = "portrait of a knight, fantasy, oil painting, masterpiece, 8k"
negative = """
(extra fingers:1.5), (malformed hands:1.4), (deformed:1.2),
blurry, low quality, watermark, signature, text,
(asymmetric eyes:1.3), bad anatomy, cropped
"""
result = pipe(
prompt=prompt,
negative_prompt=negative,
num_inference_steps=40,
guidance_scale=8,
).images[0]
```
### Defect detection (manual / heuristic)
```python
import cv2
import numpy as np
def detect_extra_finger(image):
"""간단 heuristic: hand region 의 finger count."""
# 매 OpenPose 의 hand keypoint detection.
hand_kpts = openpose.detect_hand(image)
if len(hand_kpts) > 5:
return True
return False
def detect_watermark(image):
"""매 corner 의 unusual brightness pattern."""
img = np.array(image)
corners = [img[:50, :50], img[:50, -50:], img[-50:, :50], img[-50:, -50:]]
return any(detect_text_in_region(c) for c in corners)
```
### ControlNet OpenPose (anatomy fix)
```python
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel
from controlnet_aux import OpenposeDetector
openpose = OpenposeDetector.from_pretrained("lllyasviel/ControlNet")
pose = openpose(reference_image)
controlnet = ControlNetModel.from_pretrained("lllyasviel/sd-controlnet-openpose")
pipe = StableDiffusionControlNetPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5",
controlnet=controlnet,
)
result = pipe(
prompt="elegant pose, studio lighting",
image=pose, # pose enforce
num_inference_steps=30,
).images[0]
```
→ 매 anatomy correctness ↑.
### Face restoration (GFPGAN)
```python
from gfpgan import GFPGANer
restorer = GFPGANer(
model_path='GFPGANv1.4.pth',
upscale=2,
arch='clean',
)
cropped, restored, output = restorer.enhance(np.array(image))
Image.fromarray(restored).save("face_fixed.png")
```
### Iterative debug loop
```python
def debug_image(prompt, max_rounds=5):
image = generate(prompt)
for round in range(max_rounds):
defects = detect_defects(image)
if not defects:
return image
# Negative prompt 의 update
negative = " ".join(f"({d}:1.3)" for d in defects)
# Inpaint specific region
for d in defects:
mask = create_mask_for_defect(image, d)
image = inpaint(image, mask, prompt=f"perfect {d.target}", negative=negative)
return image
```
### Quality scoring (CLIP)
```python
from transformers import CLIPProcessor, CLIPModel
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")
model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
def quality_score(image, prompt):
inputs = processor(text=[prompt], images=image, return_tensors="pt")
outputs = model(**inputs)
return outputs.logits_per_image.softmax(dim=1)[0][0].item()
# 매 candidate 의 score → best 선택
```
### LLM-judge (for batch)
```python
def llm_judge(image_url, prompt):
return llm.complete([
{"type": "image", "image_url": image_url},
{"type": "text", "text": f"Rate 1-10 how well this matches: '{prompt}'. List defects."}
])
```
## 🤔 결정 기준
| Defect | Tool |
|---|---|
| Extra finger | ControlNet OpenPose + inpaint |
| Bad face | GFPGAN + inpaint |
| Watermark | Negative prompt + inpaint |
| Blur | Steps↑ + sampler change |
| Bad anatomy | ControlNet + reference |
| Style mismatch | LoRA / IP-Adapter |
**기본값**: Specific negative > generic. Inpaint > regenerate. ControlNet 의 anatomy. Detect → fix loop.
## 🔗 Graph
- 부모: [[AI Image Generation]]
- 변형: [[Negative Prompt]] · [[Inpainting]]
- 응용: [[ControlNet]]
- Adjacent: [[AI 모델 사후 편집 도구 (Post-editing Tools)|Post-editing-Tools]]
## 🤖 LLM 활용
**언제**: 매 commercial output 의 quality 의 critical.
**언제 X**: 매 throwaway / personal use.
## ❌ 안티패턴
- **Generic negative ("ugly")**: 매 specific 의 더 강력.
- **Single round**: 매 defect 의 multiple round 필요.
- **Regenerate everything**: 매 seed / context 잃음. Inpaint local.
- **No ControlNet**: 매 anatomy 의 random.
- **Upscale 의 hallucination**: 매 detail invent.
## 🧪 검증 / 중복
- Verified.
- 신뢰도 B.
- Overlap with [[AI 모델 사후 편집 도구 (Post-editing Tools)|Post-editing-Tools]] / [[AI Image Generation]].
## 🕓 Changelog
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-09 | Manual cleanup — defect catalog + negative strategy + ControlNet + code |