scoredDetections = bse.loadScores(config.get('testMemory'), catI) groundTruthFile = config.get('testGroundTruth') #ps,rs = bse.evaluateCategory(scoredDetections, 'scores', groundTruthFile) pl,rl = bse.evaluateCategory(scoredDetections, 'landmarks', groundTruthFile) line = lambda x,y,z: x + '\t{:5.3f}\t{:5.3f}\n'.format(y,z) #print line('Validation Scores:',ps,rs) print line('Validation Landmarks:',pl,rl) if __name__ == "__main__": if len(sys.argv) < 2: print 'Use: ReinforcementLearningRunner.py configFile' sys.exit() ## Load Global Configuration config.readConfiguration(sys.argv[1]) from QNetwork import QNetwork from QLearning import QLearning from BoxSearchEnvironment import BoxSearchEnvironment from BoxSearchTask import BoxSearchTask from BoxSearchAgent import BoxSearchAgent import BoxSearchEvaluation as bse ## Run Training and Testing rl = BoxSearchRunner('train') rl.run() rl = BoxSearchRunner('test') rl.run()
import os, sys import RLConfig as config if len(sys.argv) < 2: print 'Use: trainRLObjectLocalizer.py configFile' sys.exit() def adjustEpsilon(totalEpochs, currentEpoch, epsilon): maxAnnealingEpoch = totalEpochs * 0.2 if currentEpoch > maxAnnealingEpoch or epsilon <= 0.1: return 0.1 else: return epsilon - 1 / maxAnnealingEpoch config.readConfiguration(sys.argv[1]) from pybrain.rl.agents import LearningAgent from pybrain.rl.learners import Q, SARSA from pybrain.rl.experiments import Experiment from ObjectLocalizerEnvironment import ObjectLocalizerEnvironment from DeepQNetwork import DeepQNetwork from DeepQLearning import DeepQLearning from MDPObjectLocalizerTask import MDPObjectLocalizerTask from ObjectLocalizationAgent import ObjectLocalizationAgent print 'Starting Environment' epsilon = 1.0 environment = ObjectLocalizerEnvironment(config.get('imageDir'), config.get('candidatesFile'),
for trainingBatchSize in trainingBatchSizes: parametersDict = {'learningRate': learningRate, 'explorationEpochs': explorationEpochs, 'epsilonGreedyEpochs': epsilonGreedyEpochs, 'exploitLearningEpochs': exploitLearningEpochs, 'category': category, 'trainingIterationsPerBatch': trainingIterationsPerBatch, 'trainingBatchSize': trainingBatchSize} aConfig = configTemplate.format(basePath=basePath, **parametersDict) configName = 'rl{}.config'.format('_'.join(['{key}{value}'.format(key=key, value=value) for key, value in parametersDict.iteritems()])) configPath = os.path.join(configDir, configName) print 'Generating config file {}'.format(configPath) outputConfig = open(configPath, 'w') outputConfig.write(aConfig) outputConfig.close() #run experiments configNames = os.listdir(configDir) for configName in configNames: configPath = os.path.join(configDir, configName) print 'Reading {} config'.format(configPath) config.readConfiguration(configPath) #erase models and memory networkDir = config.get('networkDir') snapshotPrefix = config.get('snapshotPrefix') testMemory = config.get('testMemory') if os.path.exists(testMemory): print 'Removing {}'.format(testMemory) shutil.rmtree(testMemory) os.mkdir(testMemory) for fileName in os.listdir(networkDir): if fileName.startswith(snapshotPrefix): print 'Removing {}'.format(fileName) os.remove(os.path.join(networkDir, fileName)) outFile = open(os.path.join(outputDir, configName + '.out'), 'w') errFile = open(os.path.join(outputDir, configName + '.err'), 'w') process = subprocess.Popen(['time', 'python', 'BoxSearchRunner.py', configPath], stdout=outFile, stderr=errFile)
import os,sys import matplotlib as mpl mpl.use('Agg') import matplotlib.pyplot as plt import numpy as np import utils as cu import RLConfig as config params = cu.loadParams("config caffeLog rlLog outdir") config.readConfiguration(params["config"]) fig, ax = plt.subplots(nrows=2, ncols=3) fig.set_size_inches(18.5,10.5) # Parse Caffe Log loss = [] for l in open(params['caffeLog']): if l.find('loss =') != -1: loss.append( float(l.split()[-1]) ) i = np.argmax(loss) loss[i] = np.average(loss) ax[0,0].plot(range(len(loss)), loss) ax[0,0].set_title('QNetwork Loss') # Parse RL output avgRewards = [] epochRewards = [] epochRecall = [] epochIoU = [] epochLandmarks = []
parametersDict.iteritems() ])) configPath = os.path.join( configDir, configName) print 'Generating config file {}'.format( configPath) outputConfig = open(configPath, 'w') outputConfig.write(aConfig) outputConfig.close() #run experiments configNames = os.listdir(configDir) for configName in configNames: configPath = os.path.join(configDir, configName) print 'Reading {} config'.format(configPath) config.readConfiguration(configPath) #erase models and memory networkDir = config.get('networkDir') snapshotPrefix = config.get('snapshotPrefix') testMemory = config.get('testMemory') if os.path.exists(testMemory): print 'Removing {}'.format(testMemory) shutil.rmtree(testMemory) os.mkdir(testMemory) for fileName in os.listdir(networkDir): if fileName.startswith(snapshotPrefix): print 'Removing {}'.format(fileName) os.remove(os.path.join(networkDir, fileName)) outFile = open(os.path.join(outputDir, configName + '.out'), 'w') errFile = open(os.path.join(outputDir, configName + '.err'), 'w') process = subprocess.Popen(
import os, sys import matplotlib as mpl mpl.use('Agg') import matplotlib.pyplot as plt import numpy as np import utils as cu import RLConfig as config params = cu.loadParams("config caffeLog rlLog outdir") config.readConfiguration(params["config"]) fig, ax = plt.subplots(nrows=2, ncols=3) fig.set_size_inches(18.5, 10.5) # Parse Caffe Log loss = [] for l in open(params['caffeLog']): if l.find('loss =') != -1: loss.append(float(l.split()[-1])) i = np.argmax(loss) loss[i] = np.average(loss) ax[0, 0].plot(range(len(loss)), loss) ax[0, 0].set_title('QNetwork Loss') # Parse RL output avgRewards = [] epochRewards = [] epochRecall = [] epochIoU = [] epochLandmarks = []