当前位置: 首页 > article >正文

批量处理多个模型的预测任务

#!/bin/bash

# 检查是否传入必要的参数,若未传入参数则打印用法并退出
if [ "$#" -lt 1 ]; then
  echo "用法: $0 <file_path>"
  echo "示例: $0 /home/aistudio/work/PaddleSeg/city/cityscapes_urls_extracted.txt"
  exit 1
fi

# 读取命令行传入的文件路径作为第一个参数
file_path="$1"
# 设置图片路径(用于预测时加载图像)
image_path="/home/aistudio/work/PaddleSeg/val"
# 设置结果保存路径
save_dir="/home/aistudio/work/PaddleSeg/output1"
# 设置配置文件基础路径
config_base_dir="/home/aistudio/work/PaddleSeg/configs"

# 检查输入的文件路径是否存在,如果文件不存在则打印错误并退出
if [ ! -f "$file_path" ]; then
  echo "文件 $file_path 不存在"
  exit 1
fi

# 获取 configs 目录下的所有子文件夹(每个文件夹的名字作为模型核心名称)
for model_core_name in $(ls -d $config_base_dir/*/); do
  # 提取文件夹名称作为模型核心名称
  model_core_name=$(basename $model_core_name)

  # 输出当前模型核心名称,帮助调试
  echo "模型核心名称: $model_core_name"

  # 遍历指定的文件($file_path),读取每一行内容
  while IFS= read -r url; do
    # 检查该行是否包含 "model.pdparams",以确认是有效的模型路径
    if [[ "$url" == *"model.pdparams" ]]; then
      # 提取模型完整名称(即倒数第一层目录名作为模型名称)
      model_full_name=$(basename "$(dirname "$url")")

      # 根据模型核心名称和完整名称,组合出配置文件的路径
      config_path="${config_base_dir}/${model_core_name}/${model_full_name}.yml"

      # 检查对应的配置文件是否存在,如果不存在则跳过当前模型
      if [ ! -f "$config_path" ]; then
        echo "配置文件 $config_path 不存在"
        continue
      fi

      # 生成预测命令,执行预测操作
      command="python predict.py \
        --config $config_path \
        --model_path $url \
        --image_path $image_path \
        --save_dir $save_dir/$model_full_name"

      # 打印生成的命令,方便调试
      echo "执行命令: $command"

      # 执行预测命令
      eval $command || { echo "命令执行失败: $command"; exit 1; }

      # 输出空行,便于分隔每个模型的预测结果
      echo ""
    fi
  done < "$file_path"
done

代码逻辑及注释说明:

  1. 检查输入参数

    • 脚本首先检查是否传入了正确的参数。如果没有传入参数(即 "$#" 小于 1),则会提示用法并退出。
  2. 设置路径变量

    • file_path:传入的包含模型路径的文件。
    • image_path:用于预测的图像路径。
    • save_dir:存放预测结果的文件夹路径。
    • config_base_dir:存放配置文件的基础路径。
  3. 检查文件是否存在

    • 脚本会检查输入的文件路径($file_path)是否存在。如果不存在,则会输出错误并退出。
  4. 遍历配置文件夹

    • 使用 ls -d $config_base_dir/*/ 获取 configs 目录下的所有子文件夹(每个文件夹代表一个模型核心名称)。例如,如果文件夹名为 ginet,则模型核心名称就是 ginet
    • 对每个模型核心名称(文件夹名),脚本都会提取该模型的完整名称,并根据模型路径和完整名称生成相应的配置文件路径。
  5. 读取模型路径并执行预测

    • 脚本会读取输入文件($file_path)中的每一行,检查每行是否是以 model.pdparams 结尾的有效模型路径。
    • 对于有效路径,生成对应的配置文件路径,组合成预测命令,并执行该命令。
  6. 生成并执行预测命令

    • 使用 eval 执行构建的 Python 命令。该命令会调用 predict.py 脚本,传入配置文件、模型路径、图像路径等参数进行预测。
    • 如果命令执行失败,脚本会打印错误信息并退出。
  7. 输出调试信息

    • 在执行命令前,会输出当前的预测命令,帮助调试。
    • 每个模型的预测执行完成后,输出一个空行以便区分不同模型的结果。

适用场景:

此脚本适用于批量处理多个模型的预测任务。每个模型的配置文件、模型文件和其他参数都会从输入的文件和目录结构中自动生成,适合需要自动化批量预测的场景。


http://www.kler.cn/a/522224.html

相关文章:

  • typescript 简介
  • 数据分析系列--①RapidMiner软件安装
  • 省市区三级联动
  • Android Studio安装配置
  • 【反悔堆】【hard】力扣871. 最低加油次数
  • RKNN_C++版本-YOLOV5
  • 甘油单油酸酯行业分析
  • 常见的多媒体框架(FFmpeg GStreamer DirectShow AVFoundation OpenMax)
  • Autogen_core: Tool Use
  • 团体程序设计天梯赛-练习集——L1-023 输出GPLT
  • PyTorch API 详细中文文档,基于PyTorch2.5
  • 【PySide6快速入门】QFileDialog 文件选择对话框
  • RAG与CAG的较量与融合
  • python接口测试:2.8 Pytest之pytest-html报告生成
  • 【Rust自学】15.6. RefCell与内部可变性:“摆脱”安全性限制
  • 计算生物学与生物信息学:一周年创作纪念
  • 系统思考—转型
  • Lucene常用的字段类型lucene检索打分原理
  • Go-并行编程新手指南
  • 【深度学习】搭建卷积神经网络并进行参数解读
  • ROS应用之SwarmSim在ROS 中的协同路径规划
  • obsidian插件——Metadata Hider
  • 软工_软件工程
  • Dest1ny漏洞库:用友 U8-CRM 系统 ajaxgetborrowdata.php 存在 SQL 注入漏洞
  • EtherCAT主站IGH-- 18 -- IGH之fsm_mbox_gateway.h/c文件解析
  • 使用Python Dotenv库管理环境变量