批量处理多个模型的预测任务
#!/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),则会提示用法并退出。
- 脚本首先检查是否传入了正确的参数。如果没有传入参数(即
-
设置路径变量:
file_path
:传入的包含模型路径的文件。image_path
:用于预测的图像路径。save_dir
:存放预测结果的文件夹路径。config_base_dir
:存放配置文件的基础路径。
-
检查文件是否存在:
- 脚本会检查输入的文件路径(
$file_path
)是否存在。如果不存在,则会输出错误并退出。
- 脚本会检查输入的文件路径(
-
遍历配置文件夹:
- 使用
ls -d $config_base_dir/*/
获取configs
目录下的所有子文件夹(每个文件夹代表一个模型核心名称)。例如,如果文件夹名为ginet
,则模型核心名称就是ginet
。 - 对每个模型核心名称(文件夹名),脚本都会提取该模型的完整名称,并根据模型路径和完整名称生成相应的配置文件路径。
- 使用
-
读取模型路径并执行预测:
- 脚本会读取输入文件(
$file_path
)中的每一行,检查每行是否是以model.pdparams
结尾的有效模型路径。 - 对于有效路径,生成对应的配置文件路径,组合成预测命令,并执行该命令。
- 脚本会读取输入文件(
-
生成并执行预测命令:
- 使用
eval
执行构建的 Python 命令。该命令会调用predict.py
脚本,传入配置文件、模型路径、图像路径等参数进行预测。 - 如果命令执行失败,脚本会打印错误信息并退出。
- 使用
-
输出调试信息:
- 在执行命令前,会输出当前的预测命令,帮助调试。
- 每个模型的预测执行完成后,输出一个空行以便区分不同模型的结果。
适用场景:
此脚本适用于批量处理多个模型的预测任务。每个模型的配置文件、模型文件和其他参数都会从输入的文件和目录结构中自动生成,适合需要自动化批量预测的场景。