Nantes Université

Skip to content
Extraits de code Groupes Projets
Valider 33cba8da rédigé par rlaz's avatar rlaz
Parcourir les fichiers

Evaluate script improved

parent d060e2b4
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -35,7 +35,6 @@ then ...@@ -35,7 +35,6 @@ then
echo " labelsGT.txt: list of node and edge labels in ground truth" echo " labelsGT.txt: list of node and edge labels in ground truth"
echo " labelsOutput.txt: list of node and edge labels in output files" echo " labelsOutput.txt: list of node and edge labels in output files"
echo "" echo ""
echo " Metrics/: directory with .csv (metric) and .diff (difference) files"
echo " graphErrors/: if dot output requested, visualizations for files with" echo " graphErrors/: if dot output requested, visualizations for files with"
echo -e "\t\t errors are stored here (.dot and .pdf[default] or .png or both as specified)." echo -e "\t\t errors are stored here (.dot and .pdf[default] or .png or both as specified)."
echo "" echo ""
...@@ -53,6 +52,10 @@ FORMAT="pdf" ...@@ -53,6 +52,10 @@ FORMAT="pdf"
TARGETS="" TARGETS=""
TARGET_COUNT=0 TARGET_COUNT=0
OUTPUTS="" OUTPUTS=""
NL=$'\n'
OUTCOME_LIST=""
ResultsDir=Results_$BNAME
################################################################ ################################################################
# Compile the list of output files and ground truth files. # Compile the list of output files and ground truth files.
...@@ -61,6 +64,8 @@ OUTPUTS="" ...@@ -61,6 +64,8 @@ OUTPUTS=""
# output files are ignored. # output files are ignored.
################################################################ ################################################################
echo "[ LgEval evaluate ]"
# Case 1: Passed a list of file pairs # Case 1: Passed a list of file pairs
if ! [ -d $1 ] if ! [ -d $1 ]
then then
...@@ -107,13 +112,13 @@ else ...@@ -107,13 +112,13 @@ else
FORMAT=$4 FORMAT=$4
fi fi
fi fi
echo "* LgEval Results Directory: $ResultsDir"
TARGET_COUNT=$((`echo $TARGETS | wc -w`)) TARGET_COUNT=$((`echo $TARGETS | wc -w`))
################################################################ ################################################################
# Create output directory structure, compile class labels # Create output directory structure, compile class labels
################################################################ ################################################################
ResultsDir=Results_$BNAME
if ! [ -d $ResultsDir ] if ! [ -d $ResultsDir ]
then then
mkdir $ResultsDir mkdir $ResultsDir
...@@ -136,14 +141,13 @@ then ...@@ -136,14 +141,13 @@ then
fi fi
fi fi
# Compile labels from ground truth. This is needed for confusion matrices to # Compile labels from ground truth. This is needed for confusion matrices to
# be properly defined, and for sanity checking results. # be properly defined, and for sanity checking results.
echo "$TARGETS" > $ResultsDir/tfileTarget echo "$TARGETS" > $ResultsDir/temp_file_list
python3 $LgEvalDir/src/compileLabels.py "$ResultsDir/tfileTarget" > "$ResultsDir/labelsGT.txt" python3 $LgEvalDir/src/compileLabels.py "$ResultsDir/temp_file_list" > "$ResultsDir/labelsGT.txt"
echo "$OUTPUTS" > $ResultsDir/tfileTarget echo "$OUTPUTS" > $ResultsDir/temp_file_list
python3 $LgEvalDir/src/compileLabels.py "$ResultsDir/tfileTarget" > "$ResultsDir/labelsOutput.txt" python3 $LgEvalDir/src/compileLabels.py "$ResultsDir/temp_file_list" > "$ResultsDir/labelsOutput.txt"
rm $ResultsDir/tfileTarget rm $ResultsDir/temp_file_list
################################################################ ################################################################
...@@ -174,23 +178,20 @@ do ...@@ -174,23 +178,20 @@ do
# NOTE: the script convertCrohmeLg can be used to convert # NOTE: the script convertCrohmeLg can be used to convert
# crohme .inkml files to .lg files. # crohme .inkml files to .lg files.
CORRECT="Correct" CORRECT="Correct"
#echo -ne " >> Comparing $FNAME.lg"
# RZ: Run evaluation once vs. twice
# RZ: Repairing to avoid running evaluation twice. OUT=`python3 $LgEvalDir/src/evallg.py $nextFile $file INTER`
python3 $LgEvalDir/src/evallg.py $nextFile $file INTER > $ResultsDir/Metrics/$FNAME.csv
METRICS=`grep -v "\*" $ResultsDir/Metrics/$FNAME.csv` # Match asterisk at beginning of line to select differences/errors
echo $METRICS > $ResultsDir/Metrics/$FNAME.csv # WARNING: Double quotes are important to preserve newlines!
DIFF=`grep "\*" $ResultsDir/Metrics/$FNAME.csv` DIFF=`echo "$OUT" | grep "\*"`
#echo "$METRICS" echo "$DIFF" > $ResultsDir/Metrics/$FNAME.diff
#read V echo "$OUT" | grep -v "\*" > $ResultsDir/Metrics/$FNAME.csv
#echo "$DIFF"
#read V # If differences reported, record files with errors, generate visualizations
if [ "$DIFF" != "" ]
# If differences reported, record them
if [ -n "$DIFF" ]
then then
CORRECT="Incorrect" CORRECT="Incorrect"
echo "$DIFF" > $ResultsDir/Metrics/$FNAME.diff
# If a third argument is provided, generate a .pdf file to visualize # If a third argument is provided, generate a .pdf file to visualize
# differences between graphs. # differences between graphs.
...@@ -202,6 +203,7 @@ do ...@@ -202,6 +203,7 @@ do
else else
lg2dot $nextFile $file --graph_type "$DOTARG" --format $FORMAT lg2dot $nextFile $file --graph_type "$DOTARG" --format $FORMAT
fi fi
mv $FNAME.dot $ResultsDir/errorGraphs/dot mv $FNAME.dot $ResultsDir/errorGraphs/dot
if [ "$FORMAT" == "pdf" ]; then if [ "$FORMAT" == "pdf" ]; then
mv $FNAME.pdf $ResultsDir/errorGraphs/pdf mv $FNAME.pdf $ResultsDir/errorGraphs/pdf
...@@ -212,14 +214,12 @@ do ...@@ -212,14 +214,12 @@ do
mv $FNAME.png $ResultsDir/errorGraphs/png mv $FNAME.png $ResultsDir/errorGraphs/png
fi fi
fi fi
else
rm -f $ResultsDir/Metrics/$FNAME.diff
fi fi
# Add record of evaluating the file. # Add record of evaluating the file.
echo "$nextFile, $CORRECT" >> $ResultsDir/FileResults.csv OUTCOME_LIST=`printf "%s\n%s" "$OUTCOME_LIST" "$nextFile, $CORRECT"`
else else
echo " Already processed: $file" echo " * Already processed: $file"
fi fi
INDEX=$((INDEX+1)) INDEX=$((INDEX+1))
...@@ -231,9 +231,12 @@ done ...@@ -231,9 +231,12 @@ done
################################################################ ################################################################
# Compile metrics # Compile metrics
# Including summaries and confusion matrices # Including summaries and confusion matrices
#
# Stored as individual files to prevent re-computation for user
################################################################ ################################################################
echo "$OUTCOME_LIST" >> $ResultsDir/FileResults.csv
cat $ResultsDir/Metrics/*.csv > $ResultsDir/$BNAME.csv cat $ResultsDir/Metrics/*.csv > $ResultsDir/$BNAME.csv
ALLDIFFS=`ls $ResultsDir/Metrics | grep .diff` ALLDIFFS=`ls $ResultsDir/Metrics | grep .diff`
if [ -n "$ALLDIFFS" ] if [ -n "$ALLDIFFS" ]
then then
...@@ -243,6 +246,8 @@ else ...@@ -243,6 +246,8 @@ else
touch $ResultsDir/$BNAME.diff # empty - no errors. touch $ResultsDir/$BNAME.diff # empty - no errors.
fi fi
# Compute summaries
python3 $LgEvalDir/src/sumMetric.py "$LABEL_STRING" $ResultsDir/$BNAME.csv > $ResultsDir/Summary.txt python3 $LgEvalDir/src/sumMetric.py "$LABEL_STRING" $ResultsDir/$BNAME.csv > $ResultsDir/Summary.txt
python3 $LgEvalDir/src/sumDiff.py $ResultsDir/$BNAME.diff $ResultsDir/labelsGT.txt html > $ResultsDir/ConfusionMatrices.html python3 $LgEvalDir/src/sumDiff.py $ResultsDir/$BNAME.diff $ResultsDir/labelsGT.txt html > $ResultsDir/ConfusionMatrices.html
python3 $LgEvalDir/src/sumDiff.py $ResultsDir/$BNAME.diff $ResultsDir/labelsGT.txt > $ResultsDir/ConfusionMatrices.csv python3 $LgEvalDir/src/sumDiff.py $ResultsDir/$BNAME.diff $ResultsDir/labelsGT.txt > $ResultsDir/ConfusionMatrices.csv
...@@ -267,11 +272,23 @@ awk -F',' '{ for (i=2;i<=NF;i+=2) printf ("%s%c", $i, i + 2 <= NF ? "," : "\n")} ...@@ -267,11 +272,23 @@ awk -F',' '{ for (i=2;i<=NF;i+=2) printf ("%s%c", $i, i + 2 <= NF ? "," : "\n")}
paste -d , $ResultsDir/FileResults.csv $ResultsDir/Data.csv > $ResultsDir/DataNew.csv paste -d , $ResultsDir/FileResults.csv $ResultsDir/Data.csv > $ResultsDir/DataNew.csv
cat $ResultsDir/HeaderRow.csv $ResultsDir/DataNew.csv > $ResultsDir/FileMetrics.csv cat $ResultsDir/HeaderRow.csv $ResultsDir/DataNew.csv > $ResultsDir/FileMetrics.csv
# Clean up ##################################
# Clean up
##################################
rm -f $ResultsDir/Headers.csv $ResultsDir/HeaderRow.csv $ResultsDir/Data.csv rm -f $ResultsDir/Headers.csv $ResultsDir/HeaderRow.csv $ResultsDir/Data.csv
rm -f $ResultsDir/DataNew.csv $ResultsDir/FileResults.csv rm -f $ResultsDir/DataNew.csv $ResultsDir/FileResults.csv
rm -f $ResultsDir/$BNAME.csv $ResultsDir/$BNAME.diff rm -f $ResultsDir/$BNAME.csv $ResultsDir/$BNAME.diff
echo "" echo ""
echo "done." echo "done."
echo ""
echo "$ResultsDir/ contents:"
echo " Summary.txt -- Evaluation metrics summary"
echo " FileMetrics.csv -- Raw metrics file"
echo " labelsOut.txt -- Node & edge labels in output files"
echo " labelsGT.txt -- Node & edge labels in ground truth files"
echo " ConfusionMatrices.html -- Readable web page with confusion matrices (HTML)"
echo " ConfusionMatrices.csv -- Confusion matrix (CSV format)"
echo " Metrics/ -- Individual file metrics (.csv) & differences (.diff)"
echo ""
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter