torchvision中有哪些东西?
>>> print(dir(torchvision))
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', '_image_backend', 'datasets', 'get_image_backend', 'models', 'set_image_backend', 'transforms', 'utils']
有数据集datasets
>>> print(dir(torchvision.datasets))
['CIFAR10', 'CIFAR100', 'CocoCaptions', 'CocoDetection', 'DatasetFolder', 'EMNIST', 'FakeData', 'FashionMNIST', 'ImageFolder', 'LSUN', 'LSUNClass', 'MNIST', 'Omniglot', 'PhotoTour', 'SEMEION', 'STL10', 'SVHN', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'cifar', 'coco', 'fakedata', 'folder', 'lsun', 'mnist', 'omniglot', 'phototour', 'semeion', 'stl10', 'svhn', 'utils']
有各种模型models
>>> print(dir(torchvision.models))
['AlexNet', 'DenseNet', 'Inception3', 'ResNet', 'SqueezeNet', 'VGG', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'alexnet', 'densenet', 'densenet121', 'densenet161', 'densenet169', 'densenet201', 'inception', 'inception_v3', 'resnet', 'resnet101', 'resnet152', 'resnet18', 'resnet34', 'resnet50', 'squeezenet', 'squeezenet1_0', 'squeezenet1_1', 'vgg', 'vgg11', 'vgg11_bn', 'vgg13', 'vgg13_bn', 'vgg16', 'vgg16_bn', 'vgg19', 'vgg19_bn']
get_image_backend是用来干嘛的?
>>> print(help(torchvision.get_image_backend))
Help on function get_image_backend in module torchvision:
get_image_backend()
Gets the name of the package used to load images
transforms是用来干嘛的?
>>> print(help(torchvision.transforms))
Help on package torchvision.transforms in torchvision:
NAME
torchvision.transforms
PACKAGE CONTENTS
functional
transforms
FILE
/Users/andy/anaconda3/lib/python3.6/site-packages/torchvision/transforms/__init__.py
utils是用来干嘛的?
>>> print(help(torchvision.utils))
are computed from the tensor.
scale_each (bool, optional): If True, scale each image in the batch of
images separately rather than the (min, max) over all images.
pad_value (float, optional): Value for the padded pixels.
Example:
See this notebook `here <https://gist.github.com/anonymous/bf16430f7750c023141c562f3e9f2a91>`_
save_image(tensor, filename, nrow=8, padding=2, normalize=False, range=None, scale_each=False, pad_value=0)
Save a given Tensor into an image file.
Args:
tensor (Tensor or list): Image to be saved. If given a mini-batch tensor,
saves the tensor as a grid of images by calling ``make_grid``.
**kwargs: Other arguments are documented in ``make_grid``.
FILE
/Users/andy/anaconda3/lib/python3.6/site-packages/torchvision/utils.py
=====================================================================================================================================================================
重点看一下transforms的用法
>>> import torchvision
>>> print(dir(torchvision.transforms))
['CenterCrop', 'ColorJitter', 'Compose', 'FiveCrop', 'Grayscale', 'Lambda', 'LinearTransformation', 'Normalize', 'Pad', 'RandomAffine', 'RandomApply', 'RandomChoice', 'RandomCrop', 'RandomGrayscale', 'RandomHorizontalFlip', 'RandomOrder', 'RandomResizedCrop', 'RandomRotation', 'RandomSizedCrop', 'RandomVerticalFlip', 'Resize', 'Scale', 'TenCrop', 'ToPILImage', 'ToTensor', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'functional', 'transforms']
>>> print(help(torchvision.transforms))
""" Help on package torchvision.transforms in torchvision: NAME torchvision.transforms PACKAGE CONTENTS functional transforms """
=====================================================================================================================================================================
查看一下transforms.transforms里面有哪些方法
>>> print(dir(torchvision.transforms.transforms))
['CenterCrop', 'ColorJitter', 'Compose', 'F', 'FiveCrop', 'Grayscale', 'Image', 'ImageEnhance', 'ImageOps', 'Lambda', 'LinearTransformation', 'Normalize', 'Pad', 'RandomAffine', 'RandomApply', 'RandomChoice', 'RandomCrop', 'RandomGrayscale', 'RandomHorizontalFlip', 'RandomOrder', 'RandomResizedCrop', 'RandomRotation', 'RandomSizedCrop', 'RandomTransforms', 'RandomVerticalFlip', 'Resize', 'Scale', 'TenCrop', 'ToPILImage', 'ToTensor', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_pil_interpolation_to_str', 'accimage', 'collections', 'division', 'math', 'np', 'numbers', 'random', 'torch', 'types', 'warnings']
===================================================================================================================================================================================================
transfoms各种方法解析
Transfoms 是很常用的图片变换方式,可以通过Compose将多个变换方式结合在一起
参数:各个变换的实例对象
transforms.Compose([
transforms.CenterCrop(10),
transforms.ToTensor(),
])
>>>1、在PIL格式图片上的转换【Python Imaging Library (PIL)】
1.class torchvision.transforms.CenterCrop(size)
剪切并返回PIL图片上中心区域
参数:size (序列或者整型) — 输出的中心区域的大小。如果输入的size是整型而不是类似于 (h,w)的序列,那么将会转成类似(size, size)的序列。
2.class torchvision.transforms.ColorJitter(brightness=0, contrast=0, saturation=0, hue=0)
随机改变图片的亮度、对比度和饱和度
参数:
brightness(亮度,float类型)——调整亮度的程度,亮度因子(brightness_factor)从 [max(0,1-brightness), 1+brightness] 中均匀选取。
contrast(对比度,float类型)——调整对比度的程度,对比度因子(contrast_factor)从 [max(0,1-contrast),1+contrast] 中均匀选取。
saturation(饱和度,float类型)——调整饱和度的程度,饱和度因子(saturation_factor) [max(0,1-saturation),1+saturation] 中均匀选取。
hue(色相,float类型) —— 调整色相的程度,色相因子(hue_factor)从 [-hue,hue] 等均匀选择, 其中hue的大小为 [0, 0.5]。
对比度: 对比度指不同颜色之间的差别。对比度越大,不同颜色之间的反差越大,所谓黑白分明,对比度过大,图像就会显得很刺眼。对比度越小,不同颜色之间的反差就越小。
亮度: 亮度是指照射在景物或者图像上光线的明暗程度,图像亮度增加时,会显得刺眼或耀眼,亮度越小,会显得灰暗。
色相: 色相就是颜色,调整色相就是调整景物的颜色。
饱和度: 饱和度指图像颜色的浓度。饱和度越高,颜色越饱满,所谓的青翠欲滴的感觉。饱和度越低,颜色就会越陈旧,惨淡,饱和度为0时,图像就为灰度图像。
3. class torchvision.transforms.FiveCrop(size)
将给定的PIL图像剪裁成四个角落区域和中心区域
注意:这个变换返回的是一个图像元组(tuple of images), 因此其输出跟输出的数量会不匹配。
参数:size(序列或者整型) —— 需要返回的剪裁区域的尺寸。如果输入的是整型,那么会被转成(size,size)序列。
4. class torchvision.transforms.Grayscale(num_output_channels=1)
将图片转成灰度图
参数: num_output_channels(int) —— (1或者3),输出图片的通道数量
返回: 输入图片的灰度图,如果num_output_channels=1, 返回的图片为单通道. 如果 num_output_channels=3, 返回的图片为3通道图片,且r=g=b
返回类型:PIL图片类型
5. class torchvision.transforms.Pad(padding, fill=0, padding_mode=‘constant’)
对给定的PIL图像的边缘进行填充,填充的数值为给定填充数值
参数:
padding(int或者tuple)——填充每一个边界。如果只输入了一个int类型的数值,那么这个数值会被用来填充所有的边界。如果输入的是tuple且长度为2,那么俩个数值分别被用于填充left/right 和 top/bottom。如果输入的数组为4,那么分别被用来填充left, top ,right 和 bottom边界。
fill (int 或者 tuple) —— 填充的像素的数值为fill。默认为0,如果输入的元组的长度为3,那么分别被用来填充R,G,B通道。这个数值当padding_mode 等于‘constant’ 的时候才会被使用。
padding_mode (string) —— 填充的类型,必须为:constant, edge, reflect or symmetric,默认为 constant.
constant: 以常量值进行填充,常量值由 fill 确定。
edge: 用图片边界最后一个值进行填充
reflect: pads with reflection of image without repeating the last value on the edge (这句不知怎么翻译,看下面例子)
例子: 用俩个元素填充[1,2,3,4], 将会返回[3,2,1,2,3,4,3,2]
symmetric: pads with reflection of image repeating the last value on the edge
例子:用俩个函数元素填充 [1,2,3,4],将会返回[2,1,1,2,3,4,4,3]
6. class torchvision.transforms.RandomAffine(degrees, translate=None, scale=None)
保持中心不变的对图片进行随机仿射变化
参数:添加链接描述
degree (旋转,squence或者float或者int) —— 旋转的角度范围。如果角度是数值而不是类似于(min,max)的序列,那么将会转换成(-degree, +degree)序列。设为0则取消旋转。
transalate (平移,tuple,可选) —— 数组,其中元素为代表水平和垂直变换的最大绝对分数。例如translate=(a,b),那么水平位移数值为从 -image_widtha<dx<image_widtha 随机采样的,同时垂直位移是从 -img_heightb<dy<image_heightb 随机采样的。默认情况下没有平移。
scale (缩放,tuple, 可选) —— 缩放因子区间。若scale=(a,b), 则缩放的值在a<=scale<=b 随机采样。默认情况下没有缩放。
shear (错切,sequence 或者 float 或者 int, 可选) —— 错切的程度。如果错切的程度是一个值,那么将会转换为序列即(—degree, +degree)。默认情况下不使用错切。
resample ({PIL.Image.NEAREST, PIL.Image.BILINEAR, PIL.Image.BICUBIC}, 可选)。
fillcolor(整型) —— 可选择的在输出图片中填充变换以外的区域。(Pillow>=5.0.0)
7.torchvision.transforms.RandomApply(transforms, p=0.5)
随机选取变换中(各种变换存储在列表中)的其中一个,同时给定一定的概率
参数:
变换(list或者tuple) —— 转换的列表
p (float 类型) —— 概率,选取某个变化需要的概率
8.transforms.RandomSizedCrop() RandomApply() RandomChoice() RadomCrop RamdomGrayscale() RamdomHorizontalFlip(p=0.5) RamdomRotation() … 还有各种Random,详细请查看torch.transforms
9.torchvision.transforms.Resize(size,interpolation=2)
将输入的PIL图片转换成给定的尺寸的大小
参数:
size(sequence 或者 int) —— 需要输出的图片的大小。如果size是类似于(h,w)的序列,输出的尺寸将会跟(h,w)一致。如果size是整型,图片较小的边界将会被置为这个尺寸。例如,如果height->width, 图片将会被置为 (size*height/width, size)
Interpolation (int, 可选) —— 默认为 PIL.Image.BILINEAR
>>>2、在torch.Tensor上的转换
1. class torchvision.transforms.Normalize(mean,std)
用均值和标准差对张量图像进行标准化处理。给定n通道的均值(M1, … , Mn) 和标准差(S1, … ,Sn), 这个变化将会归一化根据均值和标准差归一化每个通道值。例如,input[channel] = (input[channel]-mean[channel])/std(channel)
参数:
mean (squence) —— 每个通道的均值
std (sequence) —— 每个通道的标准差
__call__(tensor) 参数:tensor(Tensor) , 尺寸为(C,H,W)的图片将会被归一化 ; 返回:归一化后的Tensor类型图片 ; 返回类型:Tensor
>>>3、类型转换变换 (Conversion Transforms)
1. class torchvision.transforms.ToPILImage(mode=None)
将tensor类型或者ndarray转换成PIL图片
将 CxHxW大小的torch.*Tensor或者HxWxC 大小的numpy 矩阵转成PIL图片
参数:如果model为None,那么如果输入有三个通道,那么mode为RGB; 如果input有4个通道,mode为RGBA. 如果输入是1通道,mode为数据类型,如int, float, short
2. torchvision.transforms.ToTensor
将PIL图片或者numpy.ndarray转成Tensor类型的
将PIL图片或者numpy.ndarray(HxWxC) (范围在0-255) 转成torch.FloatTensor (CxHxW) (范围为0.0-1.0)
functional各种方法解析
>>>4、一般变换 (Generic Transforms)
1. torchvision.transforms.Lambda(lambd)
使用用户定义的lambda作为转换
参数:lambd(function) —— 用Lambda/funtion 作为变换
2. torchvision.transforms.functional.adjust_brightness(img, brightness_factor)
调整图片的亮度
参数:
img(PIL 图片)——PIL图片
brightness_factor(float)——亮度调整程度。不能为负数, 0代表黑色图片,1代表原始图片,2代表增加了2个因子的亮度。
returns: 返回调整完的图片
3.torchvision.transforms.functional.adjust_contrast(img,contrast_factor)
调整图片的对比度
参数:
img —— 需要调整的PIL 图片
constrast_factor(float) —— 调整对比度的程度。可以是非负的数。0为灰度图,1为原图,2为增加图片2个对比因子的图片。
returns —— 返回调整后的对比度图片
4. torchvison.transforms.function.adjust_gamma(img, gamma, gain=1)
对图片进行gamma校正,gamma校正详情
5.torchvision.transforms.functional.ajust_hue (img,hue_factor)
调整图片的色相
通过将图像转换为HSV来调整图像的色调,并在色调通道(H)中循环移动强度,然后将图像转换回原始图像模式。
色相因子是H通道平移量,其必须在区间[-0.5,0.5]中。
参数
img (PIL 图片) —— 需要调整的PIL图片
hue_factor (float类型) —— 色相通道平移的量,必须在[-0.5,0.5]之间。0.5和-0.5分别代表在HSV空间中正负方向完全相反的色相通道。0代表没有平移。
5. tochvision.transforms.functional.adjust_saturation(img, hue_factor)
调整图片的颜色饱和度
参数:
img (PIL图片)——需要调整的PIL图片
饱和度因子(float类型)——调整饱和度的程度。0将会输出黑白图片,1将会输出原始图片,2将会增强2个因子的饱和度。
返回调整后的图片。
6. torchvision.transforms.functional.affine(img, angle, translate, scale, shear, resample=0, fillcolor=None)
对图片进行放射变换,保持中心不变。
参数:
img (PIL图片)——需要变换的PIL图片
angle(float 或者 int)——旋转的的角度,角度范围为 (-180,180), 正方向为顺时针方向。
translate(list 或者 tuple)——水平或者垂直平移
scale(float)——总体缩放
shear(错切,float)——错切的角度位于(-180,180),顺时针方向。
resample(这个有点看不懂,应该比较少用到——PIL.Image.NEAREST or PIL.Image.BILINEAR or PIL.Image.BICUBIC, optional
fillcolor (int) —— 填充输出图片中超过变换的区域(Pillow>=5.0)
7.torchvision.transforms.functional.crop(img,i,j,h,w)
剪裁给定的PIL图片
参数:
img(PIL图片)——被剪裁的图片
(i, j) ——左上角图片坐标
(h,w)——剪裁的图片的高和宽
returns: 返回剪彩的图片
8. torchvision.transforms.functional.normalize(tensor, mean, std)
根据给定的标准差和方差归一化tensor图片
参数:
tensor(Tensor)—— 形状为(C,H,W)的Tensor图片
mean(squence) —— 每个通道的均值,序列
std (sequence) —— 每个通道的标准差,序列
返回:返回归一化后的Tensor图片。
9.
torchvision.transforms.functional.pad(img, padding, fill=0, padding_mode=‘constant’)、torchvision.transforms.functional.resize(img, size, interpolation=2)、
torchvision.transforms.functional.rotate(img, angle, resample=False, expand=False, center=None)、torchvision.transforms.functional.to_grayscale(img, num_output_channels=1)
等均与上述函数类似,这里不再重复。
10.
torchvision.transforms.functional.to_pil_image(pic, mode=None) 将tensor或者numpy.ndarray转成PIL图片
torchvision.transforms.functional.to_tensor(pic) 将PIL图片或者numpy.ndarray转成tensor