71. Simplify Path

本文介绍了一个简化路径字符串的算法实现,使用Java语言并通过链表来处理路径中的特殊符号,如'.'和'..',最终返回规范化的路径。

这道题,比较简单,主要用链表来对路径进行操作,”.”的话,list就直接跳过,”..”的话,list删除尾节点,其他的都是放入尾节点

public class Solution {
    public String simplifyPath(String path) {
        LinkedList<String > list = new LinkedList<String>();
        String[] paths = path.split("/");
        for (int i=0;i<paths.length;i++){
            String str = paths[i];
            if (str.equals("."))continue;
            else if (str.equals(".."))list.pollLast();
            else if ("".equals(str))continue;
            else list.add(str);
        }
        if (list.size()==0)return "/";
        String result = "";
        for (String word:list){
            result+="/";
            result+=word;
        }
        return result;
    }
}
### 将 PyTorch 生成的 PT 模型文件转换为 ONNX 格式并使用 onnxsim.simplify 进行优化 以下是将 PyTorch 生成的 `.pt` 模型文件转换为 ONNX 格式,并使用 `onnxsim.simplify` 对 ONNX 文件进行简化的完整方法。 #### 转换 PyTorch 模型为 ONNX 格式 首先,确保安装了必要的依赖库: ```bash pip install torch onnx onnx-simplifier ``` 接下来,编写代码以将 PyTorch 模型导出为 ONNX 格式。以下是一个示例代码[^1]: ```python import torch from yolov5.models.common import DetectMultiBackend # 加载 PyTorch 模型 model_path = r"D:\pychenshi\v56\yolov5-v6.0\runs\train\exp42\weights\best.pt" device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model = DetectMultiBackend(model_path, device=device, dnn=False) # 设置模型为评估模式 model.eval() # 定义输入张量的形状 dummy_input = torch.randn(1, 3, 640, 640, device=device) # 输入形状应与模型训练时一致 # 导出为 ONNX 格式 onnx_path = "best.onnx" torch.onnx.export( model, dummy_input, onnx_path, input_names=['images'], # 输入名称 output_names=['output'], # 输出名称 opset_version=12, # ONNX 版本 do_constant_folding=True, # 是否执行常量折叠优化 dynamic_axes={'images': {0: 'batch_size', 2: 'height', 3: 'width'}} # 动态轴定义 ) ``` 上述代码中,`torch.onnx.export` 函数用于将 PyTorch 模型导出为 ONNX 格式。`dynamic_axes` 参数允许定义动态输入形状[^2]。 #### 使用 onnxsim.simplify 简化 ONNX 模型 简化 ONNX 模型可以减少冗余操作,提高推理效率。以下是简化 ONNX 模型的命令[^3]: ```bash python -m onnxsim best.onnx best-sim.onnx --input-shape images:1,3,640,640 ``` 如果需要指定输入名称或形状,可以通过 `--input-shape` 参数实现。例如,对于 YOLOv5 模型,输入名称通常为 `images`,形状为 `[1, 3, 640, 640]`。 #### 验证和可视化 ONNX 模型 为了验证和可视化生成的 ONNX 模型结构,可以使用 Netron 工具[^4]。以下是安装和启动 Netron 的方法: ```bash pip install netron -i https://pypi.douban.com/simple ``` 启动 Netron 并加载 ONNX 模型: ```python import netron netron.start('best-sim.onnx') ``` Netron 提供了一个直观的界面来查看模型的结构、层信息和输入输出形状。 --- ### 注意事项 - 在导出 ONNX 模型时,确保输入张量的形状与模型训练时一致。 - 如果模型包含自定义操作或模块,可能需要额外的处理以确保兼容性。 - 简化后的 ONNX 模型可能不完全等价于原始模型,因此建议在实际应用前进行充分测试。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值