#!/bin/bash# 檢查是否傳入必要的參數,若未傳入參數則打印用法并退出
if [ "$#" -lt 1 ]; thenecho "用法: $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" ]; thenecho "文件 $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" ]; thenecho "配置文件 $config_path 不存在"continuefi# 生成預測命令,執行預測操作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 ""fidone < "$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
腳本,傳入配置文件、模型路徑、圖像路徑等參數進行預測。 - 如果命令執行失敗,腳本會打印錯誤信息并退出。
- 使用
-
輸出調試信息:
- 在執行命令前,會輸出當前的預測命令,幫助調試。
- 每個模型的預測執行完成后,輸出一個空行以便區分不同模型的結果。
適用場景:
此腳本適用于批量處理多個模型的預測任務。每個模型的配置文件、模型文件和其他參數都會從輸入的文件和目錄結構中自動生成,適合需要自動化批量預測的場景。