[G1-Sync] Manual knowledge update
This commit is contained in:
@@ -2,89 +2,166 @@
|
||||
id: wiki-2026-0508-resnet-architectures
|
||||
title: ResNet Architectures
|
||||
category: 10_Wiki/Topics
|
||||
status: needs_review
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: [DL-RES-ARCH-001]
|
||||
aliases: [ResNet, Residual Networks, Skip Connection]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 1.0
|
||||
tags: [ai, Deep-Learning, resnet, neural-Architecture, Computer-Vision, bottleneck-layer, model-design]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [resnet, cnn, skip-connection, deep-learning, vision]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-04-26
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: unspecified
|
||||
framework: unspecified
|
||||
language: python
|
||||
framework: pytorch
|
||||
---
|
||||
|
||||
# ResNet Architectures (ResNet 아키텍처)
|
||||
# ResNet Architectures
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> "작은 망(18, 34)은 정직한 결합(Basic Block)으로, 거대한 망(50, 101, 152)은 압축된 결합(Bottleneck)으로 설계하여 성능과 연산 효율의 정교한 밸런스를 달성하라" — 잔차 학습 원리를 바탕으로 층의 깊이와 복잡도를 체계적으로 설계한 ResNet 시리즈의 구체적 명세와 변형 모델들.
|
||||
## 매 한 줄
|
||||
> **"매 identity shortcut 의 deep network 의 가능"**. ResNet (He et al. 2015) 의 skip connection 으로 152-layer training 의 enable, ImageNet 우승. 2026 의 ConvNeXt-V2/Hiera 의 ResNet idea 의 Vision Transformer 의 hybrid.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
- **추출된 패턴:** "Structural Scaling and Resource [[Optimization|Optimization]]" — 얕은 층에서는 연산 성능을 위해 단순한 2층 구조를 사용하고, 깊은 층에서는 연산 비용을 줄이기 위해 $1 \times 1$ 컨볼루션을 활용한 3층 보틀넥 구조를 채택하여 전체 파라미터 수를 관리하는 패턴.
|
||||
- **주요 아키텍처 명세:**
|
||||
- **ResNet-18 / 34:** Basic Block ($3 \times 3$ Conv 위주) 사용. 중소규모 데이터셋에 적합.
|
||||
- **ResNet-50 / 101 / 152:** Bottleneck Block ($1 \times 1, 3 \times 3, 1 \times 1$ Conv) 사용. 대규모 데이터셋과 복잡한 특징 추출에 강점.
|
||||
- **Wide ResNet:** 깊이 대신 너비(Channel)를 키워 성능 향상.
|
||||
- **ResNeXt:** 그룹 컨볼루션(Grouped Conv)을 도입하여 '기수(Cardinality)'라는 새로운 차원의 확장 제시.
|
||||
- **의의:** 정형화된 아키텍처 설계 공식을 제공함으로써 연구자와 엔지니어들이 각자의 하드웨어 자원과 문제 난이도에 맞는 최적의 모델을 손쉽게 선택할 수 있게 함.
|
||||
## 매 핵심
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
- **과거 데이터와의 충돌:** 단순히 레이어를 쌓기만 하면 성능이 좋아진다는 초기 기대와 달리, 일정 깊이 이상에서는 모델의 너비나 기수를 키우는 것이 하드웨어 효율과 정확도 측면에서 더 유리하다는 사실이 밝혀지며 모델 설계 트렌드가 변화함.
|
||||
- **정책 변화:** Antigravity 프로젝트는 비전 서비스의 요구 성능에 따라 엣지 기기용(ResNet-18)부터 고성능 서버용(ResNet-101/152)까지 최적화된 아키텍처 프리셋을 제공함.
|
||||
### 매 핵심 idea
|
||||
- **Residual block**: `y = F(x) + x` — 매 identity 의 default.
|
||||
- **Vanishing gradient 의 mitigate**: gradient 의 skip 의 통해 직접 flow.
|
||||
- **Deeper = better** (until 1000+ where diminishing).
|
||||
- **Bottleneck (1x1 → 3x3 → 1x1)**: ResNet-50+ 의 efficiency.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
- [[Residual-Networks|Residual-Networks]], Deep-Learning-Foundations, [[Convolutional-Neural-Networks|Convolutional-Neural-Networks]]-CNN, [[Model-Compression|Model-Compression]]-and-Deployment
|
||||
- **Raw Source:** 10_Wiki/Topics/AI/ResNet-Architectures.md
|
||||
### 매 Variants
|
||||
- **ResNet-18 / 34**: basic block (no bottleneck).
|
||||
- **ResNet-50 / 101 / 152**: bottleneck — 매 default backbone.
|
||||
- **Wide ResNet**: wider, shallower.
|
||||
- **ResNeXt**: grouped conv (cardinality).
|
||||
- **DenseNet**: 매 모든 prev layer 의 concat (vs sum).
|
||||
- **ConvNeXt (2022) / V2 (2023)**: ResNet 의 ViT-style modernize — depthwise conv, LayerNorm, GELU, 매 ImageNet SOTA 의 ViT 의 match.
|
||||
- **Hiera (Meta, 2023)**: hierarchical ViT, ResNet 의 spirit.
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### 매 응용
|
||||
1. Image classification backbone (ImageNet, medical imaging).
|
||||
2. Object detection (Faster R-CNN, RetinaNet 의 ResNet backbone).
|
||||
3. Segmentation (U-Net + ResNet encoder).
|
||||
4. Feature extraction for downstream (CLIP image encoder origin).
|
||||
5. Diffusion model U-Net (residual 의 everywhere).
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
## 💻 패턴
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Residual block (PyTorch)
|
||||
```python
|
||||
import torch.nn as nn
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** needs_review
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
|
||||
## 💻 코드 패턴 (Code Patterns)
|
||||
|
||||
**패턴 1:** *(TODO: 이 프로젝트 컨벤션 반영한 구조 스켈레톤)*
|
||||
|
||||
```text
|
||||
# TODO
|
||||
class BasicBlock(nn.Module):
|
||||
expansion = 1
|
||||
def __init__(self, in_c, out_c, stride=1):
|
||||
super().__init__()
|
||||
self.conv1 = nn.Conv2d(in_c, out_c, 3, stride, 1, bias=False)
|
||||
self.bn1 = nn.BatchNorm2d(out_c)
|
||||
self.conv2 = nn.Conv2d(out_c, out_c, 3, 1, 1, bias=False)
|
||||
self.bn2 = nn.BatchNorm2d(out_c)
|
||||
self.shortcut = nn.Identity()
|
||||
if stride != 1 or in_c != out_c:
|
||||
self.shortcut = nn.Sequential(
|
||||
nn.Conv2d(in_c, out_c, 1, stride, bias=False),
|
||||
nn.BatchNorm2d(out_c),
|
||||
)
|
||||
def forward(self, x):
|
||||
out = torch.relu(self.bn1(self.conv1(x)))
|
||||
out = self.bn2(self.conv2(out))
|
||||
out = out + self.shortcut(x) # 매 핵심
|
||||
return torch.relu(out)
|
||||
```
|
||||
|
||||
## 🤔 의사결정 기준 (Decision Criteria)
|
||||
### Bottleneck block (ResNet-50+)
|
||||
```python
|
||||
class Bottleneck(nn.Module):
|
||||
expansion = 4
|
||||
def __init__(self, in_c, mid_c, stride=1):
|
||||
super().__init__()
|
||||
out_c = mid_c * self.expansion
|
||||
self.conv1 = nn.Conv2d(in_c, mid_c, 1, bias=False)
|
||||
self.bn1 = nn.BatchNorm2d(mid_c)
|
||||
self.conv2 = nn.Conv2d(mid_c, mid_c, 3, stride, 1, bias=False)
|
||||
self.bn2 = nn.BatchNorm2d(mid_c)
|
||||
self.conv3 = nn.Conv2d(mid_c, out_c, 1, bias=False)
|
||||
self.bn3 = nn.BatchNorm2d(out_c)
|
||||
self.shortcut = nn.Identity()
|
||||
if stride != 1 or in_c != out_c:
|
||||
self.shortcut = nn.Sequential(
|
||||
nn.Conv2d(in_c, out_c, 1, stride, bias=False),
|
||||
nn.BatchNorm2d(out_c))
|
||||
def forward(self, x):
|
||||
out = torch.relu(self.bn1(self.conv1(x)))
|
||||
out = torch.relu(self.bn2(self.conv2(out)))
|
||||
out = self.bn3(self.conv3(out))
|
||||
return torch.relu(out + self.shortcut(x))
|
||||
```
|
||||
|
||||
**선택 A를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
### Pretrained ResNet-50 (torchvision)
|
||||
```python
|
||||
import torch
|
||||
from torchvision.models import resnet50, ResNet50_Weights
|
||||
|
||||
**선택 B를 써야 할 때:**
|
||||
- *(TODO)*
|
||||
weights = ResNet50_Weights.IMAGENET1K_V2
|
||||
model = resnet50(weights=weights).eval().cuda()
|
||||
preprocess = weights.transforms()
|
||||
|
||||
**기본값:**
|
||||
> *(TODO)*
|
||||
img = preprocess(load_image("cat.jpg")).unsqueeze(0).cuda()
|
||||
with torch.no_grad():
|
||||
logits = model(img)
|
||||
print(weights.meta["categories"][logits.argmax(1).item()])
|
||||
```
|
||||
|
||||
## ❌ 안티패턴 (Anti-Patterns)
|
||||
### ConvNeXt (2026 modern alt)
|
||||
```python
|
||||
from torchvision.models import convnext_base, ConvNeXt_Base_Weights
|
||||
model = convnext_base(weights=ConvNeXt_Base_Weights.IMAGENET1K_V1)
|
||||
# 매 ResNet 의 spirit, ViT-grade accuracy
|
||||
```
|
||||
|
||||
- **[안티패턴]:** *(TODO: 무엇을 하면 안 되는가 + 이유 + 대신 무엇을)*
|
||||
### Fine-tune for custom task
|
||||
```python
|
||||
model = resnet50(weights=ResNet50_Weights.IMAGENET1K_V2)
|
||||
for p in model.parameters(): p.requires_grad = False
|
||||
model.fc = nn.Linear(model.fc.in_features, num_classes) # train only head
|
||||
```
|
||||
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Quick CV baseline | ResNet-50 pretrained |
|
||||
| SOTA accuracy | ConvNeXt-V2 / ViT-L / Hiera |
|
||||
| Edge / mobile | MobileNetV3 / EfficientNet-Lite |
|
||||
| Detection backbone | ResNet-50 + FPN, ConvNeXt for SOTA |
|
||||
| Diffusion U-Net | Residual blocks (ResNet-style) |
|
||||
|
||||
**기본값**: ResNet-50 의 baseline, ConvNeXt-Base 의 production target.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[CNN]] · [[Deep-Learning]]
|
||||
- 변형: [[ConvNeXt]] · [[ResNeXt]] · [[Wide-ResNet]] · [[DenseNet]]
|
||||
- 응용: [[Image-Classification]] · [[Object-Detection]] · [[Diffusion-Models]]
|
||||
- Adjacent: [[Skip-Connection]] · [[Vision-Transformer]] · [[Batch-Normalization]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: ResNet implementation 의 explain, paper summarization (He 2015), debugging gradient flow.
|
||||
**언제 X**: actual training (use PyTorch + GPU), benchmark numbers (verify on Papers with Code).
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **No skip connection 매 deep**: 매 50+ layers 의 vanishing gradient.
|
||||
- **BatchNorm 의 small batch**: <16 의 broken — GroupNorm/LayerNorm 의 use.
|
||||
- **Train from scratch 매 small data**: 매 pretrain 의 always.
|
||||
- **Skip connection 의 add 의 다른 shape**: 매 1x1 conv projection 의 needed.
|
||||
- **ResNet-152 매 mobile**: 60M params — MobileNet/EfficientNet 의 use.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (He et al. 2015 ResNet, Liu et al. 2022 ConvNeXt, torchvision docs).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — ResNet 매 ConvNeXt revival 의 connect |
|
||||
|
||||
Reference in New Issue
Block a user