Home >Technology peripherals >AI >A super powerful Pytorch operation! !
Hi, Xiaozhuang! Nice to meet you! Is there anything I can do to help you?
I have shared some content about deep learning over the past few days.
In addition, there are some common data processing functions similar to numpy and pandas in Pytorch, which are equally important and interesting!
Similarly, PyTorch also provides many functions for data processing and conversion.
Now let’s take a look at the most important necessary functions.
In PyTorch, torch.Tensor is a basic data structure used to represent tensors. A tensor is a multi-dimensional array that can contain different types of data such as numbers and Boolean values. You can use the constructor of torch.Tensor to create a tensor, or you can use other functions to create it.
import torch# 创建一个空的张量empty_tensor = torch.Tensor()# 从列表创建张量data = [1, 2, 3, 4]tensor_from_list = torch.Tensor(data)
is used to convert NumPy arrays to PyTorch tensors.
import numpy as npnumpy_array = np.array([1, 2, 3, 4])torch_tensor = torch.from_numpy(numpy_array)
Used to extract Python values from a tensor containing only one element. Applies to scalar tensors.
scalar_tensor = torch.tensor(5)scalar_value = scalar_tensor.item()
is used to change the shape of the tensor.
original_tensor = torch.randn(2, 3)# 2x3的随机张量reshaped_tensor = original_tensor.view(3, 2)# 将形状改变为3x2
is used to convert tensors to a specified device (such as CPU or GPU).
cpu_tensor = torch.randn(3)gpu_tensor = cpu_tensor.to("cuda")# 将张量移动到GPU
Convert a tensor to a NumPy array.
pytorch_tensor = torch.tensor([1, 2, 3])numpy_array = pytorch_tensor.numpy()
Used for one-hot encoding of integer tensors.
import torch.nn.functional as Finteger_tensor = torch.tensor([0, 2, 1])one_hot_encoded = F.one_hot(integer_tensor)
are used to load and process data sets. These two classes are typically used together with custom dataset classes.
from torch.utils.data import Dataset, DataLoaderclass CustomDataset(Dataset):def __init__(self, data):self.data = datadef __len__(self):return len(self.data)def __getitem__(self, index):return self.data[index]dataset = CustomDataset([1, 2, 3, 4, 5])dataloader = DataLoader(dataset, batch_size=2, shuffle=True)
The above are some important data conversion functions in PyTorch, which are simply used.
They are very, very helpful for processing and preparing data in deep learning tasks.
Next, we make an image segmentation case.
In this case, we will use PyTorch and torchvision library for image segmentation, using the pre-trained DeepLabV3 model and PASCAL VOC dataset.
In the entire code, it involves the content learned above, resizing, cropping, standardization, etc.
import torchimport torchvision.transforms as transformsfrom torchvision import modelsfrom PIL import Imageimport matplotlib.pyplot as plt# 下载示例图像!wget -O example_image.jpg https://pytorch.org/assets/deeplab/deeplab1.jpg# 定义图像转换transform = transforms.Compose([transforms.Resize((256, 256)),# 调整大小transforms.ToTensor(), # 转换为张量transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])# 标准化])# 加载并转换图像image_path = 'example_image.jpg'image = Image.open(image_path).convert("RGB")input_tensor = transform(image).unsqueeze(0)# 添加批次维度# 加载预训练的DeepLabV3模型model = models.segmentation.deeplabv3_resnet101(pretrained=True)model.eval()# 进行图像分割with torch.no_grad():output = model(input_tensor)['out'][0]output_predictions = output.argmax(0)# 将预测结果转换为彩色图像def decode_segmap(image, nc=21):label_colors = np.array([(0, 0, 0),# 0: 背景 (128, 0, 0), (0, 128, 0), (128, 128, 0), (0, 0, 128), (128, 0, 128),# 1-5: 物体 (0, 128, 128), (128, 128, 128), (64, 0, 0), (192, 0, 0),# 6-9: 道路 (64, 128, 0), (192, 128, 0), (64, 0, 128), (192, 0, 128),# 10-13: 面部 (64, 128, 128), (192, 128, 128), (0, 64, 0), (128, 64, 0),# 14-17: 植物 (0, 192, 0), (128, 192, 0), (0, 64, 128)])# 18-20: 建筑r = np.zeros_like(image).astype(np.uint8)g = np.zeros_like(image).astype(np.uint8)b = np.zeros_like(image).astype(np.uint8)for l in range(0, nc):idx = image == lr[idx] = label_colors[l, 0]g[idx] = label_colors[l, 1]b[idx] = label_colors[l, 2]rgb = np.stack([r, g, b], axis=2)return rgb# 将预测结果转换为彩色图像output_rgb = decode_segmap(output_predictions.numpy())# 可视化原始图像和分割结果plt.figure(figsize=(12, 6))plt.subplot(1, 2, 1)plt.imshow(image)plt.title('Original Image')plt.subplot(1, 2, 2)plt.imshow(output_rgb)plt.title('Segmentation Result')plt.show()
In this case, we first define a series of image transformation functions, including resize, convert to tensor and normalize. These transformations ensure that the input image meets the model's needs.
Then, a sample image was loaded and these transformations were applied.
Next, we used the pre-trained DeepLabV3 model in torchvision for image segmentation. For the output, we extracted the maximum index of the prediction results to obtain the predicted class for each pixel.
Finally, we convert the prediction results into color images and visualize the original images and segmentation results.
This case highlights the important role of the image transformation function in the image segmentation task, ensuring that the input image meets the input requirements of the model and that the output result is easy to visualize.
The above is the detailed content of A super powerful Pytorch operation! !. For more information, please follow other related articles on the PHP Chinese website!