torchvision庫

torchvision是獨(dú)立于pytorch的關(guān)于圖像操作的一些方便工具庫铝宵。

torchvision主要包括一下幾個(gè)包:

vision.datasets: 幾個(gè)常用視覺數(shù)據(jù)集,可以下載和加載庇谆,這里主要的高級(jí)用法就是可以看源碼如何自己寫自己的Dataset的子類

vision.models: 流行的模型厉亏,例如 AlexNet, VGG, ResNet 和 Densenet 以及 與訓(xùn)練好的參數(shù)企巢。

vision.transforms: 常用的圖像操作,例如:隨機(jī)切割丑念,旋轉(zhuǎn)涡戳,數(shù)據(jù)類型轉(zhuǎn)換,圖像到tensor ,numpy 數(shù)組到tensor , tensor 到 圖像等脯倚。

vision.utils: 用于把形似 (3 x H x W) 的張量保存到硬盤中渔彰,給一個(gè)mini-batch的圖像可以產(chǎn)生一個(gè)圖像格網(wǎng)。


數(shù)據(jù)集 torchvision.datasets

包括以下數(shù)據(jù)集:

MNIST

Fashion-MNIST

KMNIST

EMNIST

FakeData

COCO

Captions

Detection

LSUN

ImageFolder

DatasetFolder

Imagenet-12

CIFAR

STL10

SVHN

PhotoTour

SBU

Flickr

VOC

Cityscapes

SBD

數(shù)據(jù)集有 API: -__getitem__-__len__他們都是torch.utils.data.Dataset的子類挠将。這樣我們?cè)趯?shí)現(xiàn)我們自己的Dataset數(shù)據(jù)集的時(shí)候至少要實(shí)現(xiàn)上邊兩個(gè)方法胳岂。

因此,他們可以使用torch.utils.data.DataLoader里的多線程 (python multiprocessing) 舔稀。

MNIST

dset.MNIST(root, train=True, transform=None, target_transform=None, download=False)

root:數(shù)據(jù)的目錄乳丰,里邊有processed/training.pt和processed/test.pt的內(nèi)容

train:True-使用訓(xùn)練集,False-使用測試集.

transform: 給輸入圖像施加變換

target_transform:給目標(biāo)值(類別標(biāo)簽)施加的變換

download: 是否下載mnist數(shù)據(jù)集

COCO

This requires theCOCO API to be installed

Captions:

dset.CocoCaptions(root="dir where images are",annFile="json annotation file", [transform, target_transform])

Example:

importtorchvision.datasetsasdsetimporttorchvision.transformsastransformscap=dset.CocoCaptions(root='dir where images are',annFile='json annotation file',transform=transforms.ToTensor())print('Number of samples: ',len(cap))img,target=cap[3]# load 4th sampleprint("Image Size: ",img.size())print(target)

Output:

Number of samples: 82783

Image Size: (3L, 427L, 640L)

[u'A plane emitting smoke stream flying over a mountain.',

u'A plane darts across a bright blue sky behind a mountain covered in snow',

u'A plane leaves a contrail above the snowy mountain top.',

u'A mountain that has a plane flying overheard in the distance.',

u'A mountain view with a plume of smoke in the background']

Detection:

dset.CocoDetection(root="dir where images are",annFile="json annotation file", [transform, target_transform])

LSUN

dset.LSUN(db_path,classes='train', [transform, target_transform])

db_path= root directory for the database files

classes=

'train'- all categories, training set

'val'- all categories, validation set

'test'- all categories, test set

['bedroom_train','church_train', …] : a list of categories to load

CIFAR

dset.CIFAR10(root, train=True, transform=None, target_transform=None, download=False)

dset.CIFAR100(root, train=True, transform=None, target_transform=None, download=False)

root: root directory of dataset where there is foldercifar-10-batches-py

train:True= Training set,False= Test set

download:True= downloads the dataset from the internet and puts it in root directory. If dataset is already downloaded, does not do anything.

STL10

dset.STL10(root,split='train', transform=None, target_transform=None, download=False)

root: root directory of dataset where there is folderstl10_binary

split:'train'= Training set,'test'= Test set,'unlabeled'= Unlabeled set,

'train+unlabeled'= Training + Unlabeled set (missing label marked as-1)

download:True= downloads the dataset from the internet and

puts it in root directory. If dataset is already downloaded, does not do anything.

SVHN

dset.SVHN(root,split='train', transform=None, target_transform=None, download=False)

root: root directory of dataset where there is folderSVHN

split:'train'= Training set,'test'= Test set,'extra'= Extra training set

download:True= downloads the dataset from the internet and

puts it in root directory. If dataset is already downloaded, does not do anything.

ImageFolder

一個(gè)通用的數(shù)據(jù)加載器,圖像應(yīng)該按照以下方式放置:

root/dog/xxx.png

root/dog/xxy.png

root/dog/xxz.png

root/cat/123.png

root/cat/nsdf3.png

root/cat/asd932_.png

dset.ImageFolder(root="root folder path", [transform, target_transform])

ImageFolder有以下成員:

self.classes- 類別名列表

self.class_to_idx- 類別名到標(biāo)簽内贮,例如 “狗”-->[1,0,0]

self.imgs- 一個(gè)包括 (image path, class-index) 元組的列表产园。

Imagenet-12

This is simply implemented with an ImageFolder dataset.

The data is preprocessedas described here

Here is an example.

PhotoTour

Learning Local Image Descriptors Datahttp://phototour.cs.washington.edu/patches/default.htm

importtorchvision.datasetsasdsetimporttorchvision.transformsastransformsdataset=dset.PhotoTour(root='dir where images are',name='name of the dataset to load',transform=transforms.ToTensor())print('Loaded PhotoTour: {} with {} images.'.format(dataset.name,len(dataset.data)))



模型

models 子包含了以下的模型框架:

AlexNet?

VGG

ResNet

SqueezeNet

DenseNet

Inceptionv3

GoogLeNet

這里對(duì)于每種模型里可能包含很多子模型,比如Resnet就有 34夜郁,51什燕,101,152不同層數(shù)竞端。

這些成熟的模型的意義就是你可以在torchvision的安裝路徑下找到 可以通過命令

print(torchvision.models.__file__)??

#'d:\\Anaconda3\\lib\\site-packages\\torchvision\\models\\__init__.py'

學(xué)習(xí)這些優(yōu)秀的模型是如何搭建的屎即。

你可以用隨機(jī)參數(shù)初始化一個(gè)模型:

importtorchvision.modelsasmodelsresnet18=models.resnet18()alexnet=models.alexnet()vgg16=models.vgg16()squeezenet=models.squeezenet1_0()

我們提供了預(yù)訓(xùn)練的ResNet的模型參數(shù),以及 SqueezeNet 1.0 and 1.1, and AlexNet, 使用 PyTorchmodel zoo. 可以在構(gòu)造函數(shù)里添加pretrained=True:

importtorchvision.modelsasmodelsresnet18=models.resnet18(pretrained=True)alexnet=models.alexnet(pretrained=True)squeezenet=models.squeezenet1_0(pretrained=True)

所有的預(yù)訓(xùn)練模型期待輸入同樣標(biāo)準(zhǔn)化的數(shù)據(jù),例如mini-baches 包括形似(3*H*W)的3通道的RGB圖像技俐,H,W最少是224乘陪。

圖像的范圍必須在[0,1]之間,然后使用mean=[0.485, 0.456, 0.406]andstd=[0.229, 0.224, 0.225]? 進(jìn)行標(biāo)準(zhǔn)化雕擂。

相關(guān)的例子在:the imagenet example here<https://github.com/pytorch/examples/blob/42e5b996718797e45c46a25c55b031e6768f8440/imagenet/main.py#L89-L101>




變換

變換(Transforms)是常用的圖像變換啡邑。可以通過transforms.Compose進(jìn)行連續(xù)操作:

transforms.Compose

你可以組合幾個(gè)變換在一起井赌,例如:

transform=transforms.Compose([transforms.RandomSizedCrop(224),transforms.RandomHorizontalFlip(),transforms.ToTensor(),transforms.Normalize(mean=[0.485,0.456,0.406],std=[0.229,0.224,0.225]),])

PIL.Image支持的變換

Scale(size, interpolation=Image.BILINEAR)

縮放輸入的 PIL.Image到給定的“尺寸”谤逼。 ‘尺寸’ 指的是較短邊的尺寸.

例如,如果 height > width, 那么圖像將被縮放為 (size * height / width, size) - size: 圖像較短邊的尺寸- interpolation: Default: PIL.Image.BILINEAR

CenterCrop(size)- 從中間裁剪圖像到指定大小

從中間裁剪一個(gè) PIL.Image 到給定尺寸. 尺寸可以是一個(gè)元組 (target_height, target_width) 或一個(gè)整數(shù),整數(shù)將被認(rèn)為是正方形的尺寸 (size, size)

RandomCrop(size, padding=0)

Crops the given PIL.Image at a random location to have a region of the given size. size can be a tuple (target_height, target_width) or an integer, in which case the target will be of a square shape (size, size) Ifpaddingis non-zero, then the image is first zero-padded on each side withpaddingpixels.

RandomHorizontalFlip()

隨機(jī)進(jìn)行PIL.Image圖像的水平翻轉(zhuǎn)仇穗,概率是0.5.

RandomSizedCrop(size, interpolation=Image.BILINEAR)

Random crop the given PIL.Image to a random size of (0.08 to 1.0) of

the original size and and a random aspect ratio of 3/4 to 4/3 of the

original aspect ratio

This is popularly used to train the Inception networks - size: size

of the smaller edge - interpolation: Default: PIL.Image.BILINEAR

Pad(padding, fill=0)

Pads the given image on each side withpaddingnumber of pixels, and the padding pixels are filled with pixel valuefill. If a5x5image is padded withpadding=1then it becomes7x7

對(duì)于 torch.*Tensor 的變換

Normalize(mean, std)

Given mean: (R, G, B) and std: (R, G, B), will normalize each channel

of the torch.*Tensor, i.e. channel = (channel - mean) / std

轉(zhuǎn)換變換

ToTensor()- Converts a PIL.Image (RGB) or numpy.ndarray (H x W x C) in the range [0, 255] to a torch.FloatTensor of shape (C x H x W) in the range [0.0, 1.0]

ToPILImage()- Converts a torch.*Tensor of range [0, 1] and shape C x H x W or numpy ndarray of dtype=uint8, range[0, 255] and shape H x W x C to a PIL.Image of range [0, 255]

廣義變換

Lambda(lambda)

Given a Python lambda, applies it to the inputimgand returns it. For example:

transforms.Lambda(lambdax:x.add(10))

便利函數(shù)

make_grid(tensor, nrow=8, padding=2, normalize=False, range=None, scale_each=False)

Given a 4D mini-batch Tensor of shape (B x C x H x W), or a list of images all of the same size, makes a grid of images

normalize=True will shift the image to the range (0, 1), by subtracting the minimum and dividing by the maximum pixel value.

if range=(min, max) where min and max are numbers, then these numbers are used to normalize the image.

scale_each=True will scale each image in the batch of images separately rather than computing the (min, max) over all images.

Example usage is given in this notebook<https://gist.github.com/anonymous/bf16430f7750c023141c562f3e9f2a91>

save_image(tensor, filename, nrow=8, padding=2, normalize=False, range=None, scale_each=False)

Saves a given Tensor into an image file.

If given a mini-batch tensor, will save the tensor as a grid of images.

All options afterfilenameare passed through tomake_grid. Refer to it’s documentation for more details

用以輸出圖像的拼接流部,很方便。

沒想到這篇文章閱讀量這么大仪缸,考慮跟新下贵涵。

圖像引擎:由于需要讀取處理圖片所以需要相關(guān)的圖像庫×兄現(xiàn)在torchvision可以支持多個(gè)圖像讀取庫恰画,可以切換。

使用的函數(shù)是:

torchvision.get_image_backend()#獲取圖像存取引擎

torchvision.set_image_backend(backend)?? #改變圖像讀取引擎

#backend(string) –圖像引擎的名字:是? {‘PIL’, ‘a(chǎn)ccimage’}其中之一瓷马。accimage包使用的是因特爾(Intel) IPP 庫拴还。它的速度快于PIL,但是并不支持很多的圖像操作。

由于這個(gè)是后邊的欧聘,普通用處不大片林,知道即可。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末怀骤,一起剝皮案震驚了整個(gè)濱河市费封,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蒋伦,老刑警劉巖弓摘,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異痕届,居然都是意外死亡韧献,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門研叫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锤窑,“玉大人,你說我怎么就攤上這事嚷炉≡▎” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵申屹,是天一觀的道長绘证。 經(jīng)常有香客問我走搁,道長,這世上最難降的妖魔是什么迈窟? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任私植,我火速辦了婚禮,結(jié)果婚禮上车酣,老公的妹妹穿的比我還像新娘曲稼。我一直安慰自己,他們只是感情好湖员,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布贫悄。 她就那樣靜靜地躺著,像睡著了一般娘摔。 火紅的嫁衣襯著肌膚如雪窄坦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天凳寺,我揣著相機(jī)與錄音鸭津,去河邊找鬼。 笑死肠缨,一個(gè)胖子當(dāng)著我的面吹牛逆趋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播晒奕,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼闻书,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了脑慧?” 一聲冷哼從身側(cè)響起魄眉,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎闷袒,沒想到半個(gè)月后坑律,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡霜运,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年脾歇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片淘捡。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡藕各,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出焦除,到底是詐尸還是另有隱情激况,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站乌逐,受9級(jí)特大地震影響竭讳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜浙踢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一绢慢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧洛波,春花似錦胰舆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至焰扳,卻和暖如春倦零,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吨悍。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來泰國打工扫茅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人畜份。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓诞帐,卻偏偏與公主長得像欣尼,于是被迫代替她去往敵國和親爆雹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容