File size: 3,585 Bytes
c4d7110
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#!/bin/bash

# Define directories and files
TRAIN_DIR="benchmark_data/lora_format_test"
OUTPUT_EXP="/cm/archive/trilq3/exps/sota_comparisons/lora_sdxl"
EVAL_OUTPUT_DIR="/cm/archive/trilq3/output/sota_comparisons/lora_sdxl_fix_placeholder_fix_fix"
EVALUATION_PROMPT_FILE="benchmark_data/benchmark_prompts.json"

# Get list of directories and count them
FOLDERS=("$TRAIN_DIR"/*)
TOTAL_DIRS=${#FOLDERS[@]}
HALF=$((TOTAL_DIRS / 2))

echo "Processing second half: $HALF to $((TOTAL_DIRS-1))"

# Loop through second half of directories
for ((i = HALF; i < TOTAL_DIRS; i++)); do
    folder="${FOLDERS[$i]}"
    if [[ -d "$folder" ]]; then
        echo "Processing: $folder"

        FOLDER_NAME=$(basename "$folder")
        INSTANCE_DATA_DIR="$folder/imgs"

        PLACEHOLDER_STYLE=""
        PLACEHOLDER_CONTENT=""

        for type in "content" "style"; do
            OUTPUT_DIR="$OUTPUT_EXP/$type/$FOLDER_NAME"


            PROMPT_FILE="$folder/instance_prompt_$type.txt"
            if [[ ! -f "$PROMPT_FILE" ]]; then
                echo "Warning: Prompt file not found for $FOLDER_NAME, skipping..."
                continue
            fi

            INSTANCE_PROMPT=$(<"$PROMPT_FILE")
            echo "INSTANCE_PROMPT: $INSTANCE_PROMPT"

            PLACEHOLDER=$(echo "$INSTANCE_PROMPT" | cut -d' ' -f2-)
            echo "PLACEHOLDER: $PLACEHOLDER"

            if [[ "$type" == "content" ]]; then
                PLACEHOLDER_CONTENT="$PLACEHOLDER"
            else
                PLACEHOLDER_STYLE="$PLACEHOLDER"
            fi


            if [[ -d "$OUTPUT_DIR" ]]; then
                echo "Output directory exists for $FOLDER_NAME, skipping training..."
                continue
            fi

            mkdir -p "$OUTPUT_DIR"

            

            

            CUDA_VISIBLE_DEVICES=3 accelerate launch --num_processes=1 --gpu_ids="all" train_dreambooth_lora_sdxl.py \
                --pretrained_model_name_or_path="stabilityai/stable-diffusion-xl-base-1.0" \
                --instance_data_dir="$INSTANCE_DATA_DIR" \
                --output_dir="$OUTPUT_DIR" \
                --instance_prompt="$INSTANCE_PROMPT" \
                --resolution=1024 \
                --rank=64 \
                --train_batch_size=1 \
                --learning_rate=1e-4 \
                --lr_scheduler="constant" \
                --lr_warmup_steps=0 \
                --max_train_steps=200 \
                --checkpointing_steps=200 \
                --seed=0 \
                --gradient_checkpointing \
                --use_8bit_adam \
                --mixed_precision="fp16" \
                --enable_xformers_memory_efficient_attention
        done

        OUTPUT_RESULT_DIR="$EVAL_OUTPUT_DIR"
        mkdir -p "$OUTPUT_RESULT_DIR"

        start_time=$(date +%s)
        CUDA_VISIBLE_DEVICES=3 python infer_lora.py \
            --output_path="$OUTPUT_RESULT_DIR" \
            --content_LoRA="$OUTPUT_EXP/content/$FOLDER_NAME" \
            --content_alpha=1.0 \
            --style_LoRA="$OUTPUT_EXP/style/$FOLDER_NAME" \
            --style_alpha=1.0 \
            --num_images_per_prompt=8 \
            --name_concept="$FOLDER_NAME" \
            --placeholder_style="$PLACEHOLDER_STYLE" \
            --placeholder_content="$PLACEHOLDER_CONTENT" \
            --evaluation_prompt_file="$EVALUATION_PROMPT_FILE"
        end_time=$(date +%s)
        echo "Time taken for inference: $((end_time - start_time)) seconds"
    fi
done

# Run evaluation metrics script
python evaluate_with_metrics.py --result_dir "$EVAL_OUTPUT_DIR" --data_dir "$TRAIN_DIR"