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 |
ResNeXt101 |
ResNet with bottleneck 3x3 Convolutions substituted by 3x3 Grouped Convolutions, trained with mixed precision using Tensor Cores. |
researchers |
nvidia_logo.png |
NVIDIA |
|
NVIDIA/DeepLearningExamples |
ResNeXtArch.png |
classification.jpg |
cuda |
10 |
ResNeXt101-32x4d๋ Aggregated Residual Transformations for Deep Neural Networks ๋ ผ๋ฌธ์ ์๊ฐ๋ ๋ชจ๋ธ์ ๋๋ค.
์ด ๋ชจ๋ธ์ ์ผ๋ฐ์ ์ธ ResNet ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ ๋๊ณ ์์ผ๋ฉฐ ResNet์ 3x3 ๊ทธ๋ฃน ํฉ์ฑ๊ณฑ(Grouped Convolution) ๊ณ์ธต์ ๋ณ๋ชฉ ๋ธ๋ก(Bottleneck Block) ๋ด๋ถ์ 3x3 ํฉ์ฑ๊ณฑ ๊ณ์ธต์ผ๋ก ๋์ฒดํฉ๋๋ค.
ResNeXt101 ๋ชจ๋ธ์ Volta, Turing ๋ฐ NVIDIA Ampere ์ํคํ ์ฒ์์ Tensor Core๋ฅผ ์ฌ์ฉํ์ฌ ํผํฉ ์ ๋ฐ๋(Mixed Precision) ๋ฐฉ์[1]์ผ๋ก ํ์ต๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ฐ๊ตฌ์๋ค์ ํผํฉ ์ ๋ฐ๋ ํ์ต์ ์ฅ์ ์ ๊ฒฝํํ๋ ๋์์ Tensor Cores๋ฅผ ์ฌ์ฉํ์ง ์์ ๋๋ณด๋ค ๊ฒฐ๊ณผ๋ฅผ 3๋ฐฐ ๋น ๋ฅด๊ฒ ์ป์ ์ ์์ต๋๋ค. ์ด ๋ชจ๋ธ์ ์๊ฐ์ด ์ง๋จ์๋ ์ง์์ ์ธ ์ ํ๋์ ์ฑ๋ฅ์ ์ ์งํ๊ธฐ ์ํด ์๋ณ NGC ์ปจํ ์ด๋ ์ถ์์ ๋ํด ํ ์คํธ๋๊ณ ์์ต๋๋ค.
ํผํฉ ์ ๋ฐ๋ ํ์ต์๋ NHWC ๋ฐ์ดํฐ ๋ ์ด์์์ด ์ฌ์ฉ๋ฉ๋๋ค.
ResNeXt101-32x4d ๋ชจ๋ธ์ ์ถ๋ก ์ ์ํด TorchScript, ONNX Runtime ๋๋ TensorRT๋ฅผ ์คํ ๋ฐฑ์๋๋ก ์ฌ์ฉํ๊ณ NVIDIA Triton Inference Server์ ๋ฐฐํฌํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ NGC์์ ํ์ธํ์ธ์.
์ด๋ฏธ์ง ์ถ์ฒ: Aggregated Residual Transformations for Deep Neural Networks](https://arxiv.org/pdf/1611.05431.pdf)
์์ ์ด๋ฏธ์ง๋ ResNet ๋ชจ๋ธ์ ๋ณ๋ชฉ ๋ธ๋ก๊ณผ ResNeXt ๋ชจ๋ธ์ ๋ณ๋ชฉ ๋ธ๋ก์ ์ฐจ์ด๋ฅผ ๋ํ๋ ๋๋ค.
ResNeXt101-32x4d ๋ชจ๋ธ์ ์นด๋๋๋ฆฌํฐ(Cardinality)๋ 32์ด๊ณ ๋ณ๋ชฉ ๋ธ๋ก์ Width๋ 4์ ๋๋ค.
์๋ ์์์์ ์ฌ์ ํ์ต๋ ResNeXt101-32x4d๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง๋ค์ ๋ํ ์ถ๋ก ์ ์งํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ ์ํฉ๋๋ค.
์์๋ฅผ ์คํํ๋ ค๋ฉด ์ถ๊ฐ์ ์ธ ํ์ด์ฌ ํจํค์ง๋ค์ด ์ค์น๋์ด์ผ ํฉ๋๋ค. ์ด ํจํค์ง๋ค์ ์ด๋ฏธ์ง ์ ์ฒ๋ฆฌ ๋ฐ ์๊ฐํ์ ํ์ํฉ๋๋ค.
!pip install validators matplotlib
import torch
from PIL import Image
import torchvision.transforms as transforms
import numpy as np
import json
import requests
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')
%matplotlib inline
device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
print(f'Using {device} for inference')
IMAGENET ๋ฐ์ดํฐ์ ์ผ๋ก ์ฌ์ ํ์ต๋ ๋ชจ๋ธ์ ๋ถ๋ฌ์ต๋๋ค.
resneXt = torch.hub.load('NVIDIA/DeepLearningExamples:torchhub', 'nvidia_resneXt')
utils = torch.hub.load('NVIDIA/DeepLearningExamples:torchhub', 'nvidia_convnets_processing_utils')
resneXt.eval().to(device)
์ํ ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ์ค๋นํฉ๋๋ค.
uris = [
'http://images.cocodataset.org/test-stuff2017/000000024309.jpg',
'http://images.cocodataset.org/test-stuff2017/000000028117.jpg',
'http://images.cocodataset.org/test-stuff2017/000000006149.jpg',
'http://images.cocodataset.org/test-stuff2017/000000004954.jpg',
]
batch = torch.cat(
[utils.prepare_input_from_uri(uri) for uri in uris]
).to(device)
์ถ๋ก ์ ์์ํฉ๋๋ค. ํฌํผ ํจ์ pick_n_best(predictions=output, n=topN)
๋ฅผ ์ฌ์ฉํด ๋ชจ๋ธ์ ๋ํ N๊ฐ์ ๊ฐ์ฅ ๊ฐ๋ฅ์ฑ์ด ๋์ ๊ฐ์ค์ ์ ํํฉ๋๋ค.
with torch.no_grad():
output = torch.nn.functional.softmax(resneXt(batch), dim=1)
results = utils.pick_n_best(predictions=output, n=5)
๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
for uri, result in zip(uris, results):
img = Image.open(requests.get(uri, stream=True).raw)
img.thumbnail((256,256), Image.ANTIALIAS)
plt.imshow(img)
plt.show()
print(result)
๋ชจ๋ธ ์ ๋ ฅ ๋ฐ ์ถ๋ ฅ, ํ์ต ๋ฐฉ๋ฒ, ์ถ๋ก ๋ฐ ์ฑ๋ฅ์ ๋ํ ์์ธํ ๋ด์ฉ์ github์ด๋ NGC์์ ํ์ธํ ์ ์์ต๋๋ค.
- Aggregated Residual Transformations for Deep Neural Networks
- model on github
- model on NGC
- pretrained model on NGC
[1]: ๋น ๋ฅด๊ณ ํจ์จ์ ์ธ ์ฒ๋ฆฌ๋ฅผ ์ํด 16๋นํธ ๋ถ๋์์์ ๊ณผ 32๋นํธ ๋ถ๋์์์ ์ ํจ๊ป ์ฌ์ฉํด ํ์ตํ๋ ๋ฐฉ์.