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 |
ResNext WSL |
ResNext models trained with billion scale weakly-supervised data. |
researchers |
wsl-image.png |
Facebook AI |
|
facebookresearch/WSL-Images |
wsl-image.png |
no-image |
cuda-optional |
10 |
import torch
model = torch.hub.load('facebookresearch/WSL-Images', 'resnext101_32x8d_wsl')
# ๋๋
# model = torch.hub.load('facebookresearch/WSL-Images', 'resnext101_32x16d_wsl')
# ๋๋
# model = torch.hub.load('facebookresearch/WSL-Images', 'resnext101_32x32d_wsl')
# ๋๋
#model = torch.hub.load('facebookresearch/WSL-Images', 'resnext101_32x48d_wsl')
model.eval()
๋ชจ๋ ์ฌ์ ํ์ต๋ ๋ชจ๋ธ์ ๋์ผํ ๋ฐฉ์์ผ๋ก ์ ๊ทํ๋ ์
๋ ฅ ์ด๋ฏธ์ง๋ฅผ ์๊ตฌํฉ๋๋ค.
์ฆ, H
์ W
๊ฐ ์ต์ 224
์ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๋ (3 x H x W)
ํํ์ 3์ฑ๋ RGB ์ด๋ฏธ์ง์ ๋ฏธ๋๋ฐฐ์น๊ฐ ํ์ํฉ๋๋ค.
์ด๋ฏธ์ง๋ [0, 1] ๋ฒ์๋ก ๋ถ๋ฌ์จ ๋ค์ mean = [0.485, 0.456, 0.406]
, std = [0.229, 0.224, 0.225]
๋ฅผ ์ด์ฉํ์ฌ ์ ๊ทํํด์ผ ํฉ๋๋ค.
๋ค์์ ์คํ ์์์ ๋๋ค.
# ํ์ดํ ์น ์น์ฌ์ดํธ์์ ์์ ์ด๋ฏธ์ง ๋ค์ด๋ก๋
import urllib
url, filename = ("https://github.com/pytorch/hub/raw/master/images/dog.jpg", "dog.jpg")
try: urllib.URLopener().retrieve(url, filename)
except: urllib.request.urlretrieve(url, filename)
# ์คํ ์์(torchvision์ด ์๊ตฌ๋ฉ๋๋ค.)
from PIL import Image
from torchvision import transforms
input_image = Image.open(filename)
preprocess = transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])
input_tensor = preprocess(input_image)
input_batch = input_tensor.unsqueeze(0) # create a mini-batch as expected by the model
# GPU๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ฉด, ์๋ ํฅ์์ ์ํด ์
๋ ฅ๊ณผ ๋ชจ๋ธ์ GPU๋ก ์ด๋
if torch.cuda.is_available():
input_batch = input_batch.to('cuda')
model.to('cuda')
with torch.no_grad():
output = model(input_batch)
# Imagenet์ 1000๊ฐ ํด๋์ค์ ๋ํ ์ ๋ขฐ๋ ์ ์๋ฅผ ๊ฐ์ง, shape์ด 1000์ธ ํ
์ ์ถ๋ ฅ
print(output[0])
# ์ถ๋ ฅ๊ฐ์ ์ ๊ทํ๋์ง ์์ ํํ์
๋๋ค. Softmax๋ฅผ ์คํํ๋ฉด ํ๋ฅ ์ ์ป์ ์ ์์ต๋๋ค.
print(torch.nn.functional.softmax(output[0], dim=0))
์ ๊ณต๋๋ ResNeXt ๋ชจ๋ธ๋ค์ 9์ต 4์ฒ๋ง๊ฐ์ ๊ณต๊ณต ์ด๋ฏธ์ง๋ฅผ weakly-supervised ๋ฐฉ์์ผ๋ก ์ฌ์ ํ์ตํ ํ ImageNet1K ๋ฐ์ดํฐ์ ์ ์ฌ์ฉํด ๋ฏธ์ธ ์กฐ์ (fine-tuning)ํฉ๋๋ค. ์ฌ๊ธฐ์ ์ฌ์ฉ๋๋ ๊ณต๊ณต ์ด๋ฏธ์ง๋ค์ 1000๊ฐ์ ImageNet1K ๋์์ด ์งํฉ(synset)์ ํด๋นํ๋ 1500๊ฐ์ ํด์ํ๊ทธ๋ฅผ ๊ฐ์ง๋๋ค. ๋ชจ๋ธ ํ์ต์ ๋ํ ์ธ๋ถ ์ฌํญ์ โExploring the Limits of Weakly Supervised Pretrainingโ์ ์ฐธ๊ณ ํด์ฃผ์ธ์.
์๋ก ๋ค๋ฅธ ์ฑ๋ฅ์ ๊ฐ์ง 4๊ฐ์ ResNeXt ๋ชจ๋ธ์ด ์ ๊ณต๋๊ณ ์์ต๋๋ค.
Model | #Parameters | FLOPS | Top-1 Acc. | Top-5 Acc. |
---|---|---|---|---|
ResNeXt-101 32x8d | 88M | 16B | 82.2 | 96.4 |
ResNeXt-101 32x16d | 193M | 36B | 84.2 | 97.2 |
ResNeXt-101 32x32d | 466M | 87B | 85.1 | 97.5 |
ResNeXt-101 32x48d | 829M | 153B | 85.4 | 97.6 |
ResNeXt ๋ชจ๋ธ์ ์ฌ์ฉํ๋ฉด ์ฌ์ ํ์ต๋ ๋ชจ๋ธ์ ์ฌ์ฉํ์ง ์๊ณ ์ฒ์๋ถํฐ ํ์ตํ๋ ๊ฒฝ์ฐ์ ๋นํด ImageNet ๋ฐ์ดํฐ์ ์์์ ํ์ต ์ ํ๋๊ฐ ํฌ๊ฒ ํฅ์๋ฉ๋๋ค. ResNext-101 32x48d ๋ชจ๋ธ์ ImageNet ๋ฐ์ดํฐ์ ์ ์ฌ์ฉํ์ ๋ 85.4%์ ๋ฌํ๋ ์ต๊ณ ์์ค์ ์ ํ๋๋ฅผ ๋ฌ์ฑํ์ต๋๋ค.