Mercurial Hosting > traffic-intelligence
changeset 730:a850a4f92735 dev
added performance script comparing lcss using cdist with default
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Tue, 11 Aug 2015 10:52:04 -0400 |
parents | dad99b86a104 |
children | b02431a8234c |
files | samples/performances.txt scripts/performance-db.py scripts/performance-db.sh scripts/performance-lcss.py scripts/performance.py scripts/performance.sh |
diffstat | 6 files changed, 173 insertions(+), 155 deletions(-) [+] |
line wrap: on
line diff
--- a/samples/performances.txt Mon Aug 10 17:52:19 2015 -0400 +++ b/samples/performances.txt Tue Aug 11 10:52:04 2015 -0400 @@ -1,3 +1,9 @@ +python -m timeit 'from utils import LCSS; from numpy.random import random_sample; lcss = LCSS(metric = "cityblock", epsilon = 0.1); lcss.compute(random_sample((1000,2)), random_sample((2000, 2)))' +10 loops, best of 3: 1.6 sec per loop + +python -m timeit 'from utils import LCSS; from numpy.random import random_sample; lcss = LCSS(similarityFunc = lambda x,y: (abs(x[0]-y[0]) <= 0.1) and (abs(x[1]-y[1]) <= 0.1)); lcss.compute(random_sample((1000,2)), random_sample((2000, 2)))' +10 loops, best of 3: 3.48 sec per loop +######## Performance report using ../../Data/norway/2_video/20130606-0830.sqlite #### test query positions
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/performance-db.py Tue Aug 11 10:52:04 2015 -0400 @@ -0,0 +1,72 @@ +#! /usr/bin/env python + +import sys, shutil, os, sqlite3, timeit#, argparse + +import storage + +if len(sys.argv) >= 2: + dbFilename = sys.argv[1] +else: + dbFilename="./samples/laurier.sqlite" + +print("Performance report using {}".format(dbFilename)) +shutil.copy(dbFilename, dbFilename+'.test') +dbFilename=dbFilename+'.test' +connection = sqlite3.connect(dbFilename) + +nFeatures=storage.getNumberRowsTable(connection, "positions", "trajectory_id") +print dbFilename, nFeatures + +#### +# test query tmp trajectory instant table +#### +def selectTrajectoryIdInstant(connection, lastInstant): + cursor = connection.cursor() + for i in xrange(lastInstant): + cursor.execute("select trajectory_id from trajectory_instants where last_instant = {}".format(lastInstant)) + cursor.fetchall() + +def test2Setup(connection): + cursor = connection.cursor() + cursor.execute("CREATE TEMP TABLE IF NOT EXISTS trajectory_instants AS select trajectory_id, min(frame_number) as first_instant, max(frame_number) as last_instant, max(frame_number)-min(frame_number)+1 as length from positions group by trajectory_id") + return storage.getMinMax(connection, "trajectory_instants", "last_instant", "max") + +# lastInstant = test2Setup(connection) +# print timeit.timeit("selectTrajectoryIdInstant(connection, lastInstant)", setup="from __main__ import selectTrajectoryIdInstant, connection, lastInstant", number = 100) +# storage.createIndex(connection, "trajectory_instants", "last_instant") +# print timeit.timeit("selectTrajectoryIdInstant(connection, lastInstant)", setup="from __main__ import selectTrajectoryIdInstant, connection, lastInstant", number = 100) +# storage.createIndex(connection, "trajectory_instants", "trajectory_id", True) +# print timeit.timeit("selectTrajectoryIdInstant(connection, lastInstant)", setup="from __main__ import selectTrajectoryIdInstant, connection, lastInstant", number = 100) + + +#### +# test query positions/velocities in feature grouping +#### +def selectTrajectories(connection, nFeatures): + cursor = connection.cursor() + for i in xrange(nFeatures): + cursor.execute("select * from positions where trajectory_id = {} order by frame_number".format(i)) + cursor.fetchall() + +def dropIndices(connection): + cursor = connection.cursor() + cursor.execute("drop index if exists positions_trajectory_id_index") + #sqlite3 $dbFilename "drop index if exists frame_number_index" + #sqlite3 $dbFilename "drop index if exists tid_frame_index" + #sqlite3 $dbFilename "drop index if exists of_trajectory_id_index" + connection.commit() + +def test1Positions(): + print('''#### + test query positions + ####''') + print("no index") + dropIndices(connection) + print timeit.timeit("selectTrajectories(connection, nFeatures)", setup="from __main__ import selectTrajectories, connection, nFeatures", number = 100) + #### + print("with index on trajectory_id") + storage.createIndex(connection, "positions", "trajectory_id")#sqlite3 $dbFilename "create index trajectory_id_index on positions(trajectory_id)" + print timeit.timeit("selectTrajectories(connection, nFeatures)", setup="from __main__ import selectTrajectories, connection, nFeatures", number = 100) + +#### Cleanup +os.remove(dbFilename)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/performance-db.sh Tue Aug 11 10:52:04 2015 -0400 @@ -0,0 +1,83 @@ +#!/bin/bash +if [ $# -ge 1 ]; +then + dbFilename=$1 +else + dbFilename="./samples/laurier.sqlite" +fi +echo "Performance report using "$dbFilename +cp $dbFilename $dbFilename.test +dbFilename=$dbFilename.test +nFeatures=`sqlite3 $dbFilename "select count(distinct trajectory_id) from positions"` + +#### +# test query positions/velocities in feature grouping +#### +echo "####" +echo "test query positions" +echo "####" + +selectTrajectories() { + for (( i=1; i<=$nFeatures; i++ )) + do + sqlite3 $dbFilename "select * from positions where trajectory_id = ${i} order by frame_number" > /dev/null + done +} + +dropIndices() { + sqlite3 $dbFilename "drop index if exists trajectory_id_index" + sqlite3 $dbFilename "drop index if exists frame_number_index" + sqlite3 $dbFilename "drop index if exists tid_frame_index" + sqlite3 $dbFilename "drop index if exists of_trajectory_id_index" +} + +echo "no index" +dropIndices +time selectTrajectories +#### +echo "with index on trajectory_id" +sqlite3 $dbFilename "create index trajectory_id_index on positions(trajectory_id)" +time selectTrajectories +#### +echo "with index on trajectory_id and frame_number" +sqlite3 $dbFilename "create index frame_number_index on positions(frame_number)" +time selectTrajectories +#### +echo "with index on the 2 columns trajectory_id" +dropIndices +sqlite3 $dbFilename "create index tid_frame_index on positions(trajectory_id,frame_number)" +time selectTrajectories +#### +echo "query all feature positions, order by id and frame_number (index/no index)" +time (sqlite3 $dbFilename "select * from positions order by trajectory_id, frame_number" > /dev/null) +dropIndices +time (sqlite3 $dbFilename "select * from positions order by trajectory_id, frame_number" > /dev/null) +# no effect: probably because already ordered + +#### +# test query positions/velocities in feature grouping +#### +echo "####" +echo "test query object positions" +echo "####" + +selectObjectTrajectories() { + sqlite3 $dbFilename "SELECT OF.object_id, P.frame_number, avg(P.x_coordinate), avg(P.y_coordinate) from positions P, objects_features OF where P.trajectory_id = OF.trajectory_id group by OF.object_id, P.frame_number ORDER BY OF.object_id, P.frame_number" > /dev/null +} +echo "no index" +dropIndices +time selectObjectTrajectories +#### +echo "index on trajectory_id" +sqlite3 $dbFilename "create index trajectory_id_index on positions(trajectory_id)" +time selectObjectTrajectories +#### +echo "index on trajectory_id in positions and objects_features" +sqlite3 $dbFilename "create index of_trajectory_id_index on objects_features(trajectory_id)" +time selectObjectTrajectories + + +### +echo "Cleaning up!" +#dropIndices +rm $dbFilename
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/performance-lcss.py Tue Aug 11 10:52:04 2015 -0400 @@ -0,0 +1,12 @@ +#! /usr/bin/env python + +import timeit + +vectorLength = 10 +number = 10 + +print('Default Python implementation with lambda') +print timeit.timeit('lcss.compute(random_sample(({},2)), random_sample(({}, 2)))'.format(vectorLength, vectorLength*2), setup = 'from utils import LCSS; from numpy.random import random_sample; lcss = LCSS(similarityFunc = lambda x,y: (abs(x[0]-y[0]) <= 0.1) and (abs(x[1]-y[1]) <= 0.1));', number = number) + +print('Using scipy distance.cdist') +print timeit.timeit('lcss.compute(random_sample(({},2)), random_sample(({}, 2)))'.format(vectorLength, vectorLength*2), setup = 'from utils import LCSS; from numpy.random import random_sample; lcss = LCSS(metric = "cityblock", epsilon = 0.1);', number = number)
--- a/scripts/performance.py Mon Aug 10 17:52:19 2015 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,72 +0,0 @@ -#! /usr/bin/env python - -import sys, shutil, os, sqlite3, timeit#, argparse - -import storage - -if len(sys.argv) >= 2: - dbFilename = sys.argv[1] -else: - dbFilename="./samples/laurier.sqlite" - -print("Performance report using {}".format(dbFilename)) -shutil.copy(dbFilename, dbFilename+'.test') -dbFilename=dbFilename+'.test' -connection = sqlite3.connect(dbFilename) - -nFeatures=storage.getNumberRowsTable(connection, "positions", "trajectory_id") -print dbFilename, nFeatures - -#### -# test query tmp trajectory instant table -#### -def selectTrajectoryIdInstant(connection, lastInstant): - cursor = connection.cursor() - for i in xrange(lastInstant): - cursor.execute("select trajectory_id from trajectory_instants where last_instant = {}".format(lastInstant)) - cursor.fetchall() - -def test2Setup(connection): - cursor = connection.cursor() - cursor.execute("CREATE TEMP TABLE IF NOT EXISTS trajectory_instants AS select trajectory_id, min(frame_number) as first_instant, max(frame_number) as last_instant, max(frame_number)-min(frame_number)+1 as length from positions group by trajectory_id") - return storage.getMinMax(connection, "trajectory_instants", "last_instant", "max") - -# lastInstant = test2Setup(connection) -# print timeit.timeit("selectTrajectoryIdInstant(connection, lastInstant)", setup="from __main__ import selectTrajectoryIdInstant, connection, lastInstant", number = 100) -# storage.createIndex(connection, "trajectory_instants", "last_instant") -# print timeit.timeit("selectTrajectoryIdInstant(connection, lastInstant)", setup="from __main__ import selectTrajectoryIdInstant, connection, lastInstant", number = 100) -# storage.createIndex(connection, "trajectory_instants", "trajectory_id", True) -# print timeit.timeit("selectTrajectoryIdInstant(connection, lastInstant)", setup="from __main__ import selectTrajectoryIdInstant, connection, lastInstant", number = 100) - - -#### -# test query positions/velocities in feature grouping -#### -def selectTrajectories(connection, nFeatures): - cursor = connection.cursor() - for i in xrange(nFeatures): - cursor.execute("select * from positions where trajectory_id = {} order by frame_number".format(i)) - cursor.fetchall() - -def dropIndices(connection): - cursor = connection.cursor() - cursor.execute("drop index if exists positions_trajectory_id_index") - #sqlite3 $dbFilename "drop index if exists frame_number_index" - #sqlite3 $dbFilename "drop index if exists tid_frame_index" - #sqlite3 $dbFilename "drop index if exists of_trajectory_id_index" - connection.commit() - -def test1Positions(): - print('''#### - test query positions - ####''') - print("no index") - dropIndices(connection) - print timeit.timeit("selectTrajectories(connection, nFeatures)", setup="from __main__ import selectTrajectories, connection, nFeatures", number = 100) - #### - print("with index on trajectory_id") - storage.createIndex(connection, "positions", "trajectory_id")#sqlite3 $dbFilename "create index trajectory_id_index on positions(trajectory_id)" - print timeit.timeit("selectTrajectories(connection, nFeatures)", setup="from __main__ import selectTrajectories, connection, nFeatures", number = 100) - -#### Cleanup -os.remove(dbFilename)
--- a/scripts/performance.sh Mon Aug 10 17:52:19 2015 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,83 +0,0 @@ -#!/bin/bash -if [ $# -ge 1 ]; -then - dbFilename=$1 -else - dbFilename="./samples/laurier.sqlite" -fi -echo "Performance report using "$dbFilename -cp $dbFilename $dbFilename.test -dbFilename=$dbFilename.test -nFeatures=`sqlite3 $dbFilename "select count(distinct trajectory_id) from positions"` - -#### -# test query positions/velocities in feature grouping -#### -echo "####" -echo "test query positions" -echo "####" - -selectTrajectories() { - for (( i=1; i<=$nFeatures; i++ )) - do - sqlite3 $dbFilename "select * from positions where trajectory_id = ${i} order by frame_number" > /dev/null - done -} - -dropIndices() { - sqlite3 $dbFilename "drop index if exists trajectory_id_index" - sqlite3 $dbFilename "drop index if exists frame_number_index" - sqlite3 $dbFilename "drop index if exists tid_frame_index" - sqlite3 $dbFilename "drop index if exists of_trajectory_id_index" -} - -echo "no index" -dropIndices -time selectTrajectories -#### -echo "with index on trajectory_id" -sqlite3 $dbFilename "create index trajectory_id_index on positions(trajectory_id)" -time selectTrajectories -#### -echo "with index on trajectory_id and frame_number" -sqlite3 $dbFilename "create index frame_number_index on positions(frame_number)" -time selectTrajectories -#### -echo "with index on the 2 columns trajectory_id" -dropIndices -sqlite3 $dbFilename "create index tid_frame_index on positions(trajectory_id,frame_number)" -time selectTrajectories -#### -echo "query all feature positions, order by id and frame_number (index/no index)" -time (sqlite3 $dbFilename "select * from positions order by trajectory_id, frame_number" > /dev/null) -dropIndices -time (sqlite3 $dbFilename "select * from positions order by trajectory_id, frame_number" > /dev/null) -# no effect: probably because already ordered - -#### -# test query positions/velocities in feature grouping -#### -echo "####" -echo "test query object positions" -echo "####" - -selectObjectTrajectories() { - sqlite3 $dbFilename "SELECT OF.object_id, P.frame_number, avg(P.x_coordinate), avg(P.y_coordinate) from positions P, objects_features OF where P.trajectory_id = OF.trajectory_id group by OF.object_id, P.frame_number ORDER BY OF.object_id, P.frame_number" > /dev/null -} -echo "no index" -dropIndices -time selectObjectTrajectories -#### -echo "index on trajectory_id" -sqlite3 $dbFilename "create index trajectory_id_index on positions(trajectory_id)" -time selectObjectTrajectories -#### -echo "index on trajectory_id in positions and objects_features" -sqlite3 $dbFilename "create index of_trajectory_id_index on objects_features(trajectory_id)" -time selectObjectTrajectories - - -### -echo "Cleaning up!" -#dropIndices -rm $dbFilename