layout | background-class | body-class | title | summary | category | image | author | tags | github-link | github-id | featured_image_1 | featured_image_2 | accelerator | order | demo-model-link | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
hub_detail |
hub-background |
hub |
SSD |
Single Shot MultiBox Detector model for object detection |
researchers |
nvidia_logo.png |
NVIDIA |
|
NVIDIA/DeepLearningExamples |
ssd_diagram.png |
ssd.png |
cuda |
10 |
SSD300 ๋ชจ๋ธ์ "๋จ์ผ ์ฌ์ธต ์ ๊ฒฝ๋ง์ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง์์ ๋ฌผ์ฒด๋ฅผ ๊ฐ์งํ๋ ๋ฐฉ๋ฒ"์ ์ค๋ช ํ๋ SSD: Single Shot MultiBox Detector ๋ ผ๋ฌธ์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ์ ๋ ฅ ํฌ๊ธฐ๋ 300x300์ผ๋ก ๊ณ ์ ๋์ด ์์ต๋๋ค.
์ด ๋ชจ๋ธ๊ณผ ๋ ผ๋ฌธ์ ์ค๋ช ๋ ๋ชจ๋ธ์ ํฐ ์ฐจ์ด์ ์ ๋ฐฑ๋ณธ(backbone)์ ์์ต๋๋ค. ํนํ, ๋ ผ๋ฌธ์์ ์ฌ์ฉํ VGG ๋ชจ๋ธ์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฉฐ ResNet-50 ๋ชจ๋ธ๋ก ๋์ฒด๋์์ต๋๋ค.
Speed/accuracy trade-offs for modern convolutional object detectors ๋ ผ๋ฌธ์์, ๋ฐฑ๋ณธ์ ๋ํด ๋ค์๊ณผ ๊ฐ์ ๊ฐ์ ์ด ์ด๋ฃจ์ด์ก์ต๋๋ค.
- conv5_x, avgpool, fc ๋ฐ softmax ๋ ์ด์ด๋ ๊ธฐ์กด์ ๋ถ๋ฅ ๋ชจ๋ธ์์ ์ ๊ฑฐ๋์์ต๋๋ค.
- conv4_x์ ๋ชจ๋ strides๋ 1x1๋ก ์ค์ ๋ฉ๋๋ค.
๋ฐฑ๋ณธ ๋ค์๋ 5๊ฐ์ ํฉ์ฑ๊ณฑ ๋ ์ด์ด๊ฐ ์ถ๊ฐ๋ฉ๋๋ค. ๋ํ ํฉ์ฑ๊ณฑ ๋ ์ด์ด ์ธ์๋ 6๊ฐ์ detection heads๋ฅผ ์ถ๊ฐํ์ต๋๋ค. The backbone is followed by 5 additional convolutional layers. In addition to the convolutional layers, we attached 6 detection heads:
- ์ฒซ ๋ฒ์งธ detection head๋ ๋ง์ง๋ง conv4_x ๋ ์ด์ด์ ์ฐ๊ฒฐ๋ฉ๋๋ค.
- ๋๋จธ์ง 5๊ฐ์ detection head๋ ์ถ๊ฐ๋๋ 5๊ฐ์ ํฉ์ฑ๊ณฑ ๋ ์ด์ด์ ๋ถ์ฐฉ๋ฉ๋๋ค.
Detector heads๋ ๋ ผ๋ฌธ์์ ์ธ๊ธ๋ ๊ฒ๊ณผ ์ ์ฌํ์ง๋ง, ๊ฐ๊ฐ์ ํฉ์ฑ๊ณฑ ๋ ์ด์ด ๋ค์ BatchNorm ๋ ์ด์ด๋ฅผ ์ถ๊ฐํจ์ผ๋ก์จ ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค.
์๋ ์์์๋ ์ฌ์ ์ ํ์ต๋ SSD ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ์ํ ์ด๋ฏธ์ง์์ ๊ฐ์ฒด๋ฅผ ํ์งํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์๊ฐํํฉ๋๋ค.
์์ ๋ฅผ ์คํํ๋ ค๋ฉด ๋ช ๊ฐ์ง ์ถ๊ฐ์ ์ธ ํ์ด์ฌ ํจํค์ง๊ฐ ์ค์น๋์ด ์์ด์ผ ํฉ๋๋ค. ์ด๋ ์ด๋ฏธ์ง ์ ์ฒ๋ฆฌ ๋ฐ ์๊ฐํ์ ํ์ํฉ๋๋ค.
pip install numpy scipy scikit-image matplotlib
COCO ๋ฐ์ดํฐ์ ์ ๋ํด ์ฌ์ ์ ํ์ต๋ SSD ๋ชจ๋ธ๊ณผ, ๋ชจ๋ธ์ ์ ๋ ฅ ๋ฐ ์ถ๋ ฅ์ ๋ํ ํธ๋ฆฌํ๊ณ ํฌ๊ด์ ์ธ ํ์ ์ง์ ์ ์ํ ์ ํธ๋ฆฌํฐ๋ฅผ ๋ถ๋ฌ์ต๋๋ค.
import torch
ssd_model = torch.hub.load('NVIDIA/DeepLearningExamples:torchhub', 'nvidia_ssd')
utils = torch.hub.load('NVIDIA/DeepLearningExamples:torchhub', 'nvidia_ssd_processing_utils')
์ถ๋ก ์ ์ํด ๋ถ๋ฌ์จ ๋ชจ๋ธ์ ์ค๋นํฉ๋๋ค.
ssd_model.to('cuda')
ssd_model.eval()
๊ฐ์ฒด ํ์ง๋ฅผ ์ํ ์ ๋ ฅ ์ด๋ฏธ์ง๋ฅผ ์ค๋นํฉ๋๋ค. (์๋ ์์ ๋งํฌ๋ COCO ๋ฐ์ดํฐ์ ์ ์ฒ์ ๋ช ๊ฐ์ ํ ์คํธ ์ด๋ฏธ์ง์ ํด๋นํ์ง๋ง, ๋ก์ปฌ ์ด๋ฏธ์ง์ ๋ํ ๊ฒฝ๋ก๋ฅผ ์ง์ ํ ์๋ ์์ต๋๋ค.)
uris = [
'http://images.cocodataset.org/val2017/000000397133.jpg',
'http://images.cocodataset.org/val2017/000000037777.jpg',
'http://images.cocodataset.org/val2017/000000252219.jpg'
]
๋คํธ์ํฌ ์ ๋ ฅ์ ๋ง๊ฒ ์ด๋ฏธ์ง๋ฅผ ํฌ๋งทํ๊ณ ํ ์๋ก ๋ณํํฉ๋๋ค.
inputs = [utils.prepare_input(uri) for uri in uris]
tensor = utils.prepare_tensor(inputs)
๊ฐ์ฒด๋ฅผ ํ์งํ๊ธฐ ์ํด SSD ๋คํธ์ํฌ๋ฅผ ์คํํฉ๋๋ค.
with torch.no_grad():
detections_batch = ssd_model(tensor)
SSD ๋คํธ์ํฌ์ ๊ธฐ๋ณธ ์ถ๋ ฅ๊ฐ์ ๊ฐ์ฒด์ ์์น๋ฅผ ์๋ณํ๋ 8732๊ฐ์ box์ ํด๋์ค ํ๋ฅ ๋ถํฌ๋ฅผ ๋ด๊ณ ์์ต๋๋ค. ๋ณด๋ค ์๋ฏธ์๋ ๊ฒฐ๊ณผ(์ ๋ขฐ๋>40%)๋ง ํํฐ๋ง ํด ๋ณด๊ฒ ์ต๋๋ค.
results_per_input = utils.decode_results(detections_batch)
best_results_per_input = [utils.pick_best(results, 0.40) for results in results_per_input]
์ด ๋ชจ๋ธ์ COCO ๋ฐ์ดํฐ์ ์ ๋ํด ํ์ต๋์๊ณ , ํด๋์ค ID๋ฅผ (์ฌ๋์ด ์๋ณํ ์ ์๋) ๊ฐ์ฒด ์ด๋ฆ์ผ๋ก ๋ฐ๊พธ๊ธฐ ์ํด coco ๋ฐ์ดํฐ์ ์ ์ ๊ทผ์ด ํ์ํฉ๋๋ค. ์ฒ์์ ๋ค์ด๋ก๋ํ ๋๋ ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์์ต๋๋ค.
classes_to_labels = utils.get_coco_object_dictionary()
๋์ผ๋ก, ํ์งํ ๊ฒฐ๊ณผ๋ฅผ ์๊ฐํํด ๋ณด๊ฒ ์ต๋๋ค.
from matplotlib import pyplot as plt
import matplotlib.patches as patches
for image_idx in range(len(best_results_per_input)):
fig, ax = plt.subplots(1)
# Show original, denormalized image...
image = inputs[image_idx] / 2 + 0.5
ax.imshow(image)
# ...with detections
bboxes, classes, confidences = best_results_per_input[image_idx]
for idx in range(len(bboxes)):
left, bot, right, top = bboxes[idx]
x, y, w, h = [val * 300 for val in [left, bot, right - left, top - bot]]
rect = patches.Rectangle((x, y), w, h, linewidth=1, edgecolor='r', facecolor='none')
ax.add_patch(rect)
ax.text(x, y, "{} {:.0f}%".format(classes_to_labels[classes[idx] - 1], confidences[idx]*100), bbox=dict(facecolor='white', alpha=0.5))
plt.show()
๋ชจ๋ธ ์ ๋ ฅ ๋ฐ ์ถ๋ ฅ, ํ์ต ๋ฐฉ๋ฒ, ์ถ๋ก ๋ฐ ์ฑ๋ฅ ๋ฑ์ ๋ํ ๋ ์์ธํ ์ ๋ณด๋ github ๋ฐ NGC์์ ๋ณผ ์ ์์ต๋๋ค.