YMmim commited on
Commit
a3a92f1
ยท
verified ยท
1 Parent(s): 017c046

Object detection from scratch: Faster R-CNN + YOLO comparison

Browse files
Files changed (1) hide show
  1. README.md +125 -0
README.md ADDED
@@ -0,0 +1,125 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: mit
3
+ tags:
4
+ - object-detection
5
+ - faster-rcnn
6
+ - yolo
7
+ - pascal-voc
8
+ - pytorch
9
+ - educational
10
+ - from-scratch
11
+ library_name: pytorch
12
+ pipeline_tag: object-detection
13
+ datasets:
14
+ - pascal-voc-2007
15
+ language:
16
+ - en
17
+ ---
18
+
19
+ # Object Detection from Scratch โ€” Faster R-CNN vs YOLO
20
+
21
+ ๊ฐ์ฒดํƒ์ง€๋ฅผ **๋ฐ‘๋ฐ”๋‹ฅ๋ถ€ํ„ฐ ์ง์ ‘ ๊ตฌํ˜„**(Faster R-CNN)ํ•˜๊ณ , ์ด๋ฅผ ์‹ค๋ฌด ํ‘œ์ค€์ธ
22
+ **YOLO์™€ ๋น„๊ต**ํ•˜๋ฉฐ ํ•™์Šตํ•˜๋Š” ๊ต์œก์šฉ ์ €์žฅ์†Œ์ž…๋‹ˆ๋‹ค.
23
+ 2-stage ํƒ์ง€๊ธฐ์˜ ๋‚ด๋ถ€ ์›๋ฆฌ๋ฅผ ์†์œผ๋กœ ๊ตฌํ˜„ํ•ด๋ณด๊ณ , 1-stage ํƒ์ง€๊ธฐ(YOLO)์™€
24
+ ๊ฒฐ๊ณผยท์ฒ ํ•™์„ ๋Œ€์กฐํ•ฉ๋‹ˆ๋‹ค.
25
+
26
+ > โš ๏ธ **์„ฑ๋Šฅ ๊ฒฝ๊ณ **: ์ด ์ €์žฅ์†Œ์˜ Faster R-CNN ๊ฐ€์ค‘์น˜(`frcnn.pth`)๋Š”
27
+ > **1 ์—ํญ๋งŒ ํ•™์Šตํ•œ ๋ฐ๋ชจ์šฉ**์ž…๋‹ˆ๋‹ค. ์‹ค์‚ฌ์šฉ ๋ชฉ์ ์ด ์•„๋‹ˆ๋ผ "๊ตฌํ˜„์ด ์˜ฌ๋ฐ”๋ฅธ๊ฐ€"๋ฅผ
28
+ > ๊ฒ€์ฆํ•˜๊ณ  ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•œ **๊ต์œก ์ž๋ฃŒ**์ž…๋‹ˆ๋‹ค.
29
+
30
+ ## ๋‘ ๊ฐ€์ง€ ์ ‘๊ทผ์˜ ๋Œ€์กฐ
31
+
32
+ | | Faster R-CNN (์ง์ ‘ ๊ตฌํ˜„) | YOLOv8 (Ultralytics) |
33
+ |---|---|---|
34
+ | ๋ฐฉ์‹ | 2-stage (ํ›„๋ณด์˜์—ญ โ†’ ๋ถ„๋ฅ˜) | 1-stage (ํ•œ ๋ฒˆ์— ์˜ˆ์ธก) |
35
+ | ์†๋„ | ๋А๋ฆผ | ๋งค์šฐ ๋น ๋ฆ„ (์‹ค์‹œ๊ฐ„) |
36
+ | ๊ตฌํ˜„ | ๋ฐ‘๋ฐ”๋‹ฅ๋ถ€ํ„ฐ (๊ต์œก์ ) | ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜ธ์ถœ |
37
+ | ํ•™์Šต ๋ฐ์ดํ„ฐ | Pascal VOC (20 ํด๋ž˜์Šค) | COCO (80 ํด๋ž˜์Šค) |
38
+ | ์ด ์ €์žฅ์†Œ์˜ ์—ญํ•  | **์›๋ฆฌ ํ•™์Šต** | **์‹ค๋ฌด ํ‘œ์ค€๊ณผ ๋น„๊ต** |
39
+
40
+ ## ํŒŒ์ผ ๊ตฌ์„ฑ
41
+
42
+ **Faster R-CNN ์ง์ ‘ ๊ตฌํ˜„**
43
+ | ํŒŒ์ผ | ๋‚ด์šฉ |
44
+ |------|------|
45
+ | `dataset.py` | VOC XML ํŒŒ์‹ฑ, ๋ฆฌ์‚ฌ์ด์ฆˆ, ์ •๊ทœํ™” |
46
+ | `box_utils.py` | ์•ต์ปค ์ƒ์„ฑ, IoU, ์ธ์ฝ”๋”ฉ/๋””์ฝ”๋”ฉ, NMS |
47
+ | `model.py` | ResNet50 ๋ฐฑ๋ณธ + RPN + RoI Align + RoI Head |
48
+ | `losses.py` | IoU ๊ธฐ๋ฐ˜ ํƒ€๊นƒ ํ• ๋‹น + RPN/RoI ์†์‹ค |
49
+ | `train.py` | ํ•™์Šต ๋ฃจํ”„ + VOC mAP@0.5 |
50
+ | `infer.py` | ์ถ”๋ก  + ๋ฐ•์Šค ์‹œ๊ฐํ™” |
51
+
52
+ **YOLO ๋น„๊ต**
53
+ | ํŒŒ์ผ | ๋‚ด์šฉ |
54
+ |------|------|
55
+ | `yolo_infer.py` | YOLOv8(COCO ์‚ฌ์ „ํ•™์Šต) ์ถ”๋ก  โ€” ๊ฐ™์€ ์ด๋ฏธ์ง€ ๋น„๊ต์šฉ |
56
+
57
+ ## ์‚ฌ์šฉ๋ฒ•
58
+
59
+ ### Faster R-CNN (์ง์ ‘ ๊ตฌํ˜„)
60
+
61
+ ```bash
62
+ pip install torch torchvision pillow
63
+
64
+ # VOC 2007 ๋‹ค์šด๋กœ๋“œ (torchvision ์ž๋™)
65
+ python -c "import torchvision; torchvision.datasets.VOCDetection(root='./data', year='2007', image_set='trainval', download=True)"
66
+
67
+ # ํ•™์Šต
68
+ python train.py --voc_root ./data/VOCdevkit/VOC2007 --epochs 12
69
+
70
+ # ์ถ”๋ก 
71
+ python infer.py --ckpt frcnn.pth --image ./sample.jpg --score_thresh 0.5
72
+ ```
73
+
74
+ ### YOLOv8 (๋น„๊ต)
75
+
76
+ ```bash
77
+ pip install ultralytics
78
+
79
+ # ๊ฐ™์€ ์ด๋ฏธ์ง€๋กœ ์ถ”๋ก  (๊ฒฐ๊ณผ๋ฅผ Faster R-CNN๊ณผ ๋น„๊ต)
80
+ python yolo_infer.py --image ./sample.jpg
81
+ ```
82
+
83
+ ## ์•„ํ‚คํ…์ฒ˜ (Faster R-CNN)
84
+
85
+ ```
86
+ ์ด๋ฏธ์ง€
87
+ โ”‚ ResNet50 (conv1~layer3, stride 16)
88
+ โ–ผ
89
+ ํŠน์ง•๋งต
90
+ โ”œโ”€โ–ถ RPN โ”€โ”€ ์•ต์ปค๋ณ„ (๊ฐ์ฒด์—ฌ๋ถ€ + ๋ฐ•์Šค๋ณด์ •) โ”€โ”€ ํ›„๋ณด์˜์—ญ(proposal)
91
+ โ”‚
92
+ โ–ผ RoI Align (7x7)
93
+ RoI Head โ”€โ”€ (ํด๋ž˜์Šค ๋ถ„๋ฅ˜ + ํด๋ž˜์Šค๋ณ„ ๋ฐ•์Šค๋ณด์ •) โ”€โ”€ ์ตœ์ข… ํƒ์ง€
94
+ ```
95
+
96
+ ## ํ•™์Šต ์›๋ฆฌ (์ฝ”๋“œ์™€ ๋Œ€์‘)
97
+
98
+ 1. **์•ต์ปค** (`box_utils.generate_anchors`): ๊ฒฉ์ž๋งˆ๋‹ค 9๊ฐœ ๊ธฐ์ค€ ๋ฐ•์Šค
99
+ 2. **RPN ํƒ€๊นƒ ํ• ๋‹น** (`losses.rpn_loss`): IoUโ‰ฅ0.7 ๊ฐ์ฒด / <0.3 ๋ฐฐ๊ฒฝ
100
+ 3. **ํ›„๋ณด์˜์—ญ ์ƒ์„ฑ** (`model._proposals`): RPN ์ถœ๋ ฅ โ†’ NMS
101
+ 4. **RoI ํƒ€๊นƒ ํ• ๋‹น** (`losses.assign_roi_targets`): IoUโ‰ฅ0.5 positive
102
+ 5. **RoI Align** (`model.RoIHead`): ํ›„๋ณด์˜์—ญ โ†’ 7ร—7 ๊ณ ์ • ํŠน์ง•
103
+ 6. **์†์‹ค**: ๋ถ„๋ฅ˜(CE/BCE) + ํšŒ๊ท€(smooth L1), positive์—๋งŒ ํšŒ๊ท€
104
+
105
+ ## ๋‹จ์ˆœํ™”ํ•œ ๋ถ€๋ถ„ (์›๋…ผ๋ฌธ ๋Œ€๋น„)
106
+
107
+ - `batch_size=1` ๊ณ ์ •
108
+ - RPN objectness๋ฅผ 1-logit(BCE)์œผ๋กœ ์ฒ˜๋ฆฌ
109
+ - RoI Head๋ฅผ layer4 ๋Œ€์‹  FC๋กœ ๊ตฌ์„ฑ
110
+ - FPN ๋ฏธ์ ์šฉ โ†’ ์ž‘์€ ๊ฐ์ฒด์— ์•ฝํ•จ
111
+
112
+ ## ๋ผ์ด์„ ์Šค
113
+
114
+ - **์ด ์ €์žฅ์†Œ์˜ ์ฝ”๋“œ**: MIT License
115
+ - **YOLOv8** (`yolo_infer.py`๊ฐ€ ์‚ฌ์šฉ): Ultralytics YOLO๋Š” **AGPL-3.0**.
116
+ `yolo_infer.py`๋Š” Ultralytics๋ฅผ *ํ˜ธ์ถœ*๋งŒ ํ•˜๋ฉฐ, YOLO ๊ฐ€์ค‘์น˜๋Š” ํฌํ•จํ•˜์ง€
117
+ ์•Š์Šต๋‹ˆ๋‹ค(์‚ฌ์šฉ์ž๊ฐ€ ์‹คํ–‰ ์‹œ ์ž๋™ ๋‹ค์šด๋กœ๋“œ). ์ƒ์—…์  ํ์‡„์†Œ์Šค ์‚ฌ์šฉ ์‹œ
118
+ Ultralytics ์ƒ์šฉ ๋ผ์ด์„ ์Šค๊ฐ€ ๋ณ„๋„๋กœ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
119
+ - Pascal VOC ๋ฐ์ดํ„ฐ์…‹์€ ๊ณต์‹ ๋ผ์ด์„ ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.
120
+
121
+ ## ๋ฉด์ฑ…
122
+
123
+ ๊ต์œก ๋ชฉ์  ๊ตฌํ˜„์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ๊ฐ€ ํ•„์š”ํ•˜๋ฉด torchvision ๊ณต์‹
124
+ Faster R-CNN(`fasterrcnn_resnet50_fpn_v2`) ๋˜๋Š” Ultralytics YOLO๋ฅผ
125
+ ์ •์‹ ๋ผ์ด์„ ์Šค ํ•˜์— ์‚ฌ์šฉํ•˜์„ธ์š”.