#!/bin/bash set -e GPUID1=0 export CUDA_VISIBLE_DEVICES=$GPUID1 MODE=$1 if [ $MODE != "validation" ] && [ $MODE != "training" ] then echo "mode must be either validation or training" exit 1 fi # get modality as arg MODALITY=$2 # make sure modality is either ct or mri if [ $MODALITY != "ct" ] && [ $MODALITY != "mri" ] then echo "modality must be either ct or mri" exit 1 fi ####### Shared configs ###### PROTO_GRID=8 # using 32 / 8 = 4, 4-by-4 prototype pooling window during training INPUT_SIZE=256 ALL_EV=( 0 ) # 5-fold cross validation (0, 1, 2, 3, 4) if [ $MODALITY == "ct" ] then DATASET='SABS_Superpix' else DATASET='CHAOST2_Superpix' fi if [ $INPUT_SIZE -gt 256 ] then DATASET=${DATASET}'_672' fi NWORKER=4 MODEL_NAME='dinov2_l14' LORA=0 RELOAD_PATH=( "None" ) SKIP_SLICES="True" DO_CCA="True" TTT="False" NSTEP=100000 RESET_AFTER_SLICE="True" FINETUNE_ON_SUPPORT="False" USE_SLICE_ADAPTER="False" ADAPTER_LAYERS=1 CLAHE=False ALL_SCALE=( "MIDDLE") # config of pseudolabels LABEL_SETS=$3 EXCLU='[2,3]' if [[ $MODALITY == "mri" && $LABEL_SETS -eq 1 ]] then echo "exluding 1, 4" EXCLU='[1,4]' # liver(1), spleen(4) fi ORGANS='kidneys' if [ $LABEL_SETS -eq 1 ] then ORGANS='liver_spleen' fi FREE_DESC="" CPT="${MODE}_${MODEL_NAME}_${MODALITY}" if [ -n "$FREE_DESC" ] then CPT="${CPT}_${FREE_DESC}" fi if [[ $TTT == "True" ]] then CPT="${CPT}_ttt_nstep_${NSTEP}" if [ $RESET_AFTER_SLICE == "True" ] then CPT="${CPT}_reset_after_slice" fi fi if [ $USE_SLICE_ADAPTER == "True" ] then CPT="${CPT}_w_adapter_${ADAPTER_LAYERS}_layers" fi if [ $LORA -ne 0 ] then CPT="${CPT}_lora_${LORA}" fi if [ $CLAHE == "True" ] then CPT="${CPT}_w_clahe" fi if [ $DO_CCA = "True" ] then CPT="${CPT}_cca" fi CPT="${CPT}_grid_${PROTO_GRID}_res_${INPUT_SIZE}" if [ ${EXCLU} = "[]" ] then CPT="${CPT}_setting1" else CPT="${CPT}_setting2" fi CPT="${CPT}_${ORGANS}_fold" ###### Training configs (irrelavent in testing) ###### DECAY=0.95 MAX_ITER=1000 # defines the size of an epoch SNAPSHOT_INTERVAL=25000 # interval for saving snapshot SEED='1234' ###### Validation configs ###### SUPP_ID='[6]' # using the additionally loaded scan as support if [ $MODALITY == "mri" ] then SUPP_ID='[4]' fi echo =================================== for ((i=0; i<${#ALL_EV[@]}; i++)) do EVAL_FOLD=${ALL_EV[i]} CPT_W_FOLD="${CPT}_${EVAL_FOLD}" echo $CPT_W_FOLD on GPU $GPUID1 for SUPERPIX_SCALE in "${ALL_SCALE[@]}" do PREFIX="test_vfold${EVAL_FOLD}" echo $PREFIX LOGDIR="./test_${MODALITY}/${CPT_W_FOLD}" if [ ! -d $LOGDIR ] then mkdir -p $LOGDIR fi python3 $MODE.py with \ "modelname=$MODEL_NAME" \ 'usealign=True' \ 'optim_type=sgd' \ reload_model_path=${RELOAD_PATH[i]} \ num_workers=$NWORKER \ scan_per_load=-1 \ label_sets=$LABEL_SETS \ 'use_wce=True' \ exp_prefix=$PREFIX \ 'clsname=grid_proto' \ n_steps=$NSTEP \ exclude_cls_list=$EXCLU \ eval_fold=$EVAL_FOLD \ dataset=$DATASET \ proto_grid_size=$PROTO_GRID \ max_iters_per_load=$MAX_ITER \ min_fg_data=1 seed=$SEED \ save_snapshot_every=$SNAPSHOT_INTERVAL \ superpix_scale=$SUPERPIX_SCALE \ lr_step_gamma=$DECAY \ path.log_dir=$LOGDIR \ support_idx=$SUPP_ID \ lora=$LORA \ do_cca=$DO_CCA \ ttt=$TTT \ adapter_layers=$ADAPTER_LAYERS \ use_slice_adapter=$USE_SLICE_ADAPTER \ reset_after_slice=$RESET_AFTER_SLICE \ "input_size=($INPUT_SIZE, $INPUT_SIZE)" done done