pytroch函数介绍(一)---transform

transform函数是PyTorch中的图像预处理工具,包括Compose用于组合多个变换,ToTensor用于将图片转化为张量,ToPILImage则用于转化回PIL图像,Normalize进行归一化处理,Resize调整图像大小,RandomCrop实现随机裁剪。这些函数在深度学习模型的训练中经常使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

transform函数介绍

学习pytroch中遇到了许多函数,为了以后方便复习,记录一下,如果想要进一步了解可以去看官方文档https://pytorch.org/vision/stable/transforms.html
有大佬写了中文版https://github.com/zergtant/pytorch-handbook

transform函数提供对图像的变换,包括尺寸裁剪(resize),归一化等.
pytroch中提供函数transform,只需要从torchision导入即可使用。 torchvision 工具库是 pytorch 框架下常用的图像处理包,可以用来生成图片和视频数据集(torchvision.datasets),做一些图像预处理(torchvision.transforms),导入预训练模型(torchvision.models),以及生成图和保存图像(torchvision.utils)

from torchvision import transforms

1.Compose()

功能作用:
将不同的transforms变换结合在一起,先进行第一个transform变换,后进行第二个transforms变换

transform1 = transforms.Compose([
    transforms.Resize(256),
    transforms.CenterCrop(224),
    transforms.ToTensor()]
)

2.ToTensor()

功能作用:
将图片转化为tensor张量

# ToTensor() 的使用
trans_totensor = transforms.ToTensor()      # 返回一个ToTensor 对象
img_tensor = trans_totensor(img)            # 将传入的图片转换成Tensor类型的图片并返回
writer.add_image("Tensor_img", img_tensor)

3. ToPILImage

功能作用:
Convert a tensor or an ndarray to PIL Image
调用方法:同上

4.Normalize

功能作用:
根据给定的均值和标准差归一化tensor图像
输入:mean: (mean[1],…,mean[n]) and std: (std[1],…,std[n]) for n
输出:output[channel] = (input[channel] - mean[channel]) / std[channel]

trans_norm = transforms.Normalize([0, 2, 1], [7, 6, 6])
img_norm = trans_norm(img_tensor)

5. Resize

功能作用:
调整图片大小

trans_resize = transforms.Resize((512, 512)) #创建Resize对象,输入参数
img_resize = trans_resize(img) #输入PIL image

6.RandomCrop()

功能作用:随机裁剪

# 6. RandomCrop() 随机裁剪   输入:PIL image  输出:PIL Image
trans_random = transforms.RandomCrop(200)
trans_compose_2 = transforms.Compose([trans_random, trans_totensor])
for i in range(10):
    img_crop = trans_compose_2(img)
    writer.add_image("trans_crop", img_crop, i)

参考资料
https://blog.youkuaiyun.com/qq_42806080/article/details/122662532

### 如何使用 PyTorch 部署 Faster R-CNN 模型 为了在生产环境中部署基于 PyTorch 的 Faster R-CNN 模型,通常会采用 RESTful API 或者 gRPC 等方式将其封装成服务。以下是具体方法以及示例代码。 #### 使用 Flask 构建 RESTful API Flask 是种轻量级的 Python Web 框架,适合用于构建简单的 HTTP 接口。通过它,可以将 Faster R-CNN 模型暴露给外部应用程序调用。 ```python from flask import Flask, request, jsonify import torch from torchvision.models.detection import fasterrcnn_resnet50_fpn from PIL import Image import torchvision.transforms as T app = Flask(__name__) # 加载预训练模型 model = fasterrcnn_resnet50_fpn(pretrained=True) model.eval() # 定义图像转换函数 transform = T.Compose([T.ToTensor()]) @app.route('/predict', methods=['POST']) def predict(): if 'file' not in request.files: return jsonify({'error': 'No file part'}), 400 file = request.files['file'] image = Image.open(file).convert('RGB') # 转换为张量 img_tensor = transform(image) img_tensor = img_tensor.unsqueeze(0) # 添加 batch 维度 with torch.no_grad(): predictions = model(img_tensor)[0] boxes = predictions["boxes"].tolist() labels = predictions["labels"].tolist() scores = predictions["scores"].tolist() result = [] for box, label, score in zip(boxes, labels, scores): if score > 0.8: # 只返回置信度大于 0.8 的预测框 result.append({ "box": box, "label": label, "score": score }) return jsonify(result) if __name__ == '__main__': app.run(host='0.0.0.0', port=5000) ``` 上述代码展示了如何加载 `fasterrcnn_resnet50_fpn` 并创建个 POST 请求接口 `/predict`,该接口接受文件上传并返回目标检测的结果[^2]。 #### 使用 TorchScript 和 C++ 部署 如果需要更高的性能或者跨平台支持,则可以通过 TorchScript 将模型导出为序列化格式,并在其他编程语言(如 C++)中运行推理过程。 ##### 导出模型到 TorchScript ```python import torch from torchvision.models.detection import fasterrcnn_resnet50_fpn # 创建模型实例 model = fasterrcnn_resnet50_fpn(pretrained=True) model.eval() # 假设输入大小为 (3, 640, 640),即三通道 RGB 图像 example_input = torch.rand(1, 3, 640, 640) # 导出为脚本模块 traced_model = torch.jit.trace(model, example_input) traced_model.save("faster_rcnn_traced.pt") ``` 此部分实现了将 Faster R-CNN 模型保存为 `.pt` 文件的功能,便于后续在不同环境下加载和执行推理操作。 #### TensorFlow Serving 替代方案 尽管 TensorFlow Serving 主要针对 TensorFlow 模型设计,但在某些情况下也可以考虑类似的工具链来管理 PyTorch 模型的服务端逻辑。不过推荐优先尝试 ONNX Runtime 或 Triton Inference Server 等更适合多框架兼容性的解决方案[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值