def testref(self, iter, definition=None, vars={}, num_iter=-1): modelFile, iter = self.getModelFile(iter) vars['output'] = True vars['prefix'] = 'ref_%d' % iter vars['lowres'] = True self.makeScratchDir() if definition is None: definition = 'test' proto = self.findProto(definition) outPath = '%s/output_%d_%s' % (self._path, iter, vars['dataset']) if os.path.isdir(outPath): if self._unattended or tb.queryYesNo( 'Output folder %s exists, do you want to delete it first?' % os.path.basename(outPath)): os.system('rm -rf %s' % outPath) finalProto = self.makeScratchPrototxt(proto, vars) solverProto = self.makeScratchPrototxt(self._solverProto, vars) self.notice( 'testing snapshot iteration %d for %d iterations...' % (iter, num_iter), 'notice') os.chdir(self._path) self._backend.test(caffemodelFilename=modelFile, protoFilename=finalProto, iterations=num_iter, logFile=self._scratchLogFile)
def testFiles(self, filelist, iter, output=False, definition=None, vars={}): modelFile, iter = self.getModelFile(iter) assert(output) vars['output'] = True vars['prefix'] = iter vars['dataset'] = os.path.splitext(os.path.basename(filelist))[0] self.makeScratchDir() if definition is None: definition = 'testsingle' proto = self.findProto(definition) if output and 'dataset' in vars: outPath = '%s/output_%d_%s' % (self._path, iter, vars['dataset']) if os.path.isdir(outPath): if self._unattended or tb.queryYesNo('Output folder %s exists, do you want to delete it first?' % os.path.basename(outPath)): os.system('rm -rf %s' % outPath) data_list = IO.readTupleList(filelist) print data_list # Run a new net for every sample: for idx, line in enumerate(data_list): num_blobs = len(line) input_data = [] for blob_idx in range(num_blobs): img = IO.readImage(line[blob_idx]) #print(img.shape) input_data.append(img[np.newaxis, :, :, :].transpose(0, 3, 1, 2)[:,[2,1,0],:,:]) #print(input_data[-1].shape) vars['width'] = input_data[0].shape[3] vars['height'] = input_data[0].shape[2] vars['basename'] = 'b%03d' % idx finalProto = self.makeScratchPrototxt(proto, vars) caffe.set_logging_disabled() caffe.set_mode_gpu() net = caffe.Net(finalProto, modelFile,caffe.TEST) print 'Network forward pass (%d of %d). %d inputs of shapes:' % (idx+1, len(data_list), num_blobs) for blob_idx in range(num_blobs): print(" " + str(input_data[blob_idx].shape)) if not len(net.inputs) == len(line): raise Exception('Net has %d inputs and in file list there are %d' % (len(net.inputs), len(line))) input_dict = {} for blob_idx in range(num_blobs): input_dict[net.inputs[blob_idx]] = input_data[blob_idx] net.forward(**input_dict) print 'Iteration was %d' %iter
def test(self, iter, output=False, definition=None, vars={}, num_iter=-1, discard=False): modelFile, iter = self.getModelFile(iter) if output: vars['output'] = True vars['prefix'] = iter self.makeScratchDir() if definition is None: definition = 'test' proto = self.findProto(definition) if output and 'dataset' in vars: outPath = '%s/output_%d_%s' % (self._path, iter, vars['dataset']) if os.path.isdir(outPath): if self._unattended or tb.queryYesNo( 'Output folder %s exists, do you want to delete it first?' % os.path.basename(outPath)): os.system('rm -rf %s' % outPath) finalProto = self.makeScratchPrototxt(proto, vars) solverProto = self.makeScratchPrototxt(self._solverProto, vars) self.notice( 'testing snapshot iteration %d for %d iterations...' % (iter, num_iter), 'notice') os.chdir(self._path) self._backend.test(caffemodelFilename=modelFile, protoFilename=finalProto, iterations=num_iter, logFile=self._scratchLogFile) if output and 'dataset' in vars and num_iter == -1: outPath = '%s/output_%d_%s' % (self._path, iter, vars['dataset']) if os.path.isdir(outPath): logFile = '%s/log.txt' % outPath print 'saving log to %s', logFile os.system('cp %s %s' % (self._scratchLogFile, logFile)) if 'dataset' in vars: self._saveTestResults(iter, vars['dataset'], not discard) print 'Iteration was %d' % iter
def resume(self, iter=-1): if not len(self._stateFiles): raise Exception('no .solverstate files to continue from') stateFile, iter = self.getStateFile(iter) if self.existingData(iter) and not self._unattended: if not tb.queryYesNo( 'Existing data beyond iteration %d found. Do you want to delete it and continue?' % iter): return self.clean(iter) solverFilename = self.prepareTraining() self.notice('continuing from iteration %d ...' % iter, 'notice') os.chdir(self._trainDir) self._backend.resume(solverFilename=solverFilename, solverstateFilename=stateFile, logFile=self._logFile)
def train(self, weights=None, blobSummary=False): if self.existingData() and not self._unattended: if not tb.queryYesNo('Existing data found. Do you want to delete it and start from scratch?'): return self.clean() solverFilename = self.prepareTraining() self.notice('training...') os.chdir(self._trainDir) if weights != '': self._backend.train(solverFilename=solverFilename, logFile=self._logFile, weights=weights) else: self._backend.train(solverFilename=solverFilename, logFile=self._logFile) if blobSummary: self.displayBlobSummary(self._logFile)
def resume(self, iter=-1): if not len(self._stateFiles): raise Exception('no .solverstate files to continue from') stateFile, iter = self.getStateFile(iter) if self.existingData(iter) and not self._unattended: if not tb.queryYesNo( 'Existing data beyond iteration %d found. Do you want to delete it and continue?' % iter): return self.clean(iter) solverFilename = self.prepareTraining() self.notice('continuing from iteration %d ...' % iter, 'notice') os.chdir(self._trainDir) self._backend.resume(solverFilename=solverFilename, solverstateFilename=stateFile, logFile=self._logFile)
def train(self, weights=None, blobSummary=False): if self.existingData() and not self._unattended: if not tb.queryYesNo( 'Existing data found. Do you want to delete it and start from scratch?' ): return self.clean() solverFilename = self.prepareTraining() self.notice('training...') os.chdir(self._trainDir) if weights != '': self._backend.train(solverFilename=solverFilename, logFile=self._logFile, weights=weights) else: self._backend.train(solverFilename=solverFilename, logFile=self._logFile) if blobSummary: self.displayBlobSummary(self._logFile)
def testref(self, iter, definition=None, vars={}, num_iter=-1): modelFile, iter = self.getModelFile(iter) vars['output'] = True vars['prefix'] = 'ref_%d' % iter vars['lowres'] = True self.makeScratchDir() if definition is None: definition = 'test' proto = self.findProto(definition) outPath = '%s/output_%d_%s' % (self._path, iter, vars['dataset']) if os.path.isdir(outPath): if self._unattended or tb.queryYesNo('Output folder %s exists, do you want to delete it first?' % os.path.basename(outPath)): os.system('rm -rf %s' % outPath) finalProto = self.makeScratchPrototxt(proto, vars) solverProto = self.makeScratchPrototxt(self._solverProto, vars) self.notice('testing snapshot iteration %d for %d iterations...' % (iter, num_iter), 'notice') os.chdir(self._path) self._backend.test(caffemodelFilename=modelFile, protoFilename=finalProto, iterations=num_iter, logFile=self._scratchLogFile)
def test(self, iter, output=False, definition=None, vars={}, num_iter=-1, discard=False): modelFile, iter = self.getModelFile(iter) if output: vars['output'] = True vars['prefix'] = iter self.makeScratchDir() if definition is None: definition = 'test' proto = self.findProto(definition) if output and 'dataset' in vars: outPath = '%s/output_%d_%s' % (self._path, iter, vars['dataset']) if os.path.isdir(outPath): if self._unattended or tb.queryYesNo('Output folder %s exists, do you want to delete it first?' % os.path.basename(outPath)): os.system('rm -rf %s' % outPath) finalProto = self.makeScratchPrototxt(proto, vars) solverProto = self.makeScratchPrototxt(self._solverProto, vars) self.notice('testing snapshot iteration %d for %d iterations...' % (iter, num_iter), 'notice') os.chdir(self._path) self._backend.test(caffemodelFilename=modelFile, protoFilename=finalProto, iterations=num_iter, logFile=self._scratchLogFile) if output and 'dataset' in vars and num_iter==-1: outPath = '%s/output_%d_%s' % (self._path, iter, vars['dataset']) if os.path.isdir(outPath): logFile = '%s/log.txt' % outPath print 'saving log to %s', logFile os.system('cp %s %s' % (self._scratchLogFile, logFile)) if 'dataset' in vars: self._saveTestResults(iter,vars['dataset'], not discard) print 'Iteration was %d' %iter
def testFiles(self, filelist, iter, output=False, definition=None, vars={}): modelFile, iter = self.getModelFile(iter) assert (output) vars['output'] = True vars['prefix'] = iter vars['dataset'] = os.path.splitext(os.path.basename(filelist))[0] self.makeScratchDir() if definition is None: definition = 'testsingle' proto = self.findProto(definition) if output and 'dataset' in vars: outPath = '%s/output_%d_%s' % (self._path, iter, vars['dataset']) if os.path.isdir(outPath): if self._unattended or tb.queryYesNo( 'Output folder %s exists, do you want to delete it first?' % os.path.basename(outPath)): os.system('rm -rf %s' % outPath) data_list = IO.readTupleList(filelist) print data_list # Run a new net for every sample: for idx, line in enumerate(data_list): num_blobs = len(line) input_data = [] for blob_idx in range(num_blobs): img = IO.readImage(line[blob_idx]) #print(img.shape) input_data.append(img[np.newaxis, :, :, :].transpose( 0, 3, 1, 2)[:, [2, 1, 0], :, :]) #print(input_data[-1].shape) vars['width'] = input_data[0].shape[3] vars['height'] = input_data[0].shape[2] vars['basename'] = 'b%03d' % idx finalProto = self.makeScratchPrototxt(proto, vars) caffe.set_logging_disabled() caffe.set_mode_gpu() net = caffe.Net(finalProto, modelFile, caffe.TEST) print 'Network forward pass (%d of %d). %d inputs of shapes:' % ( idx + 1, len(data_list), num_blobs) for blob_idx in range(num_blobs): print(" " + str(input_data[blob_idx].shape)) if not len(net.inputs) == len(line): raise Exception( 'Net has %d inputs and in file list there are %d' % (len(net.inputs), len(line))) input_dict = {} for blob_idx in range(num_blobs): input_dict[net.inputs[blob_idx]] = input_data[blob_idx] net.forward(**input_dict) print 'Iteration was %d' % iter
def createBinDB(resolution, subpath, collectionName, clips, entryTypes=None, downsample=1, skipIfExists=False, overwrite=True): if entryTypes is None: entryTypes = ['cleanImageL', 'finalImageL', 'cleanImageR', 'finalImageR', 'forwardFlowL', 'forwardFlowR', 'backwardFlowL', 'backwardFlowR', 'dispL', 'dispR', 'forwardDispChangeL', 'forwardDispChangeR', 'backwardDispChangeL', 'backwardDispChangeR'] def entryProto(name, type, channels): txt = '' txt += ' entry_format: {\n' txt += ' name: "%s"\n' % name txt += ' data_encoding: %s \n' % type txt += ' width: %d\n' % width txt += ' height: %d\n' % height txt += ' channels: %d\n' % channels txt += ' }\n' return txt def fileProto(filename, entries): txt = '' txt += 'file {\n' txt += ' filename: "%s"\n' % filename txt += ' content: {\n' for entry in entries: txt += entry txt += ' }\n' txt += '}\n' txt += '\n' return txt def writeCleanImage(path): if path is 0 or path is None: np.array([0], dtype=np.int32).tofile(fCleanImage) np.zeros((3,height,width)).astype(np.uint8).tofile(fCleanImage) else: np.array([1], dtype=np.int32).tofile(fCleanImage) Entry('image',path=path).data(downsample=downsample).tofile(fCleanImage) def writeFinalImage(path): if path is 0 or path is None: np.array([0], dtype=np.int32).tofile(fFinalImage) np.zeros((3,height,width)).astype(np.uint8).tofile(fFinalImage) else: np.array([1], dtype=np.int32).tofile(fFinalImage) Entry('image',path=path).data(downsample=downsample).tofile(fFinalImage) def writeFlow(path): if path is 0 or path is None: np.array([0], dtype=np.int32).tofile(fFlow) np.zeros((2,height,width)).astype(np.uint16).tofile(fFlow) else: np.array([1], dtype=np.int32).tofile(fFlow) Entry('flow',path=path).data(downsample=downsample).tofile(fFlow) def writeDispL(path): if path is 0 or path is None: np.array([0], dtype=np.int32).tofile(fDisp) np.zeros((1,height,width)).astype(np.uint16).tofile(fDisp) else: np.array([1], dtype=np.int32).tofile(fDisp) Entry('leftdisparity',path=path).data(downsample=downsample).tofile(fDisp) def writeDispR(path): if path is 0 or path is None: np.array([0], dtype=np.int32).tofile(fDisp) np.zeros((1,height,width)).astype(np.uint16).tofile(fDisp) else: np.array([1], dtype=np.int32).tofile(fDisp) Entry('rightdisparity',path=path).data(downsample=downsample).tofile(fDisp) def writeDispChangeL(path): if path is 0 or path is None: np.array([0], dtype=np.int32).tofile(fDispChange) np.zeros((1,height,width)).astype(np.uint16).tofile(fDispChange) else: np.array([1], dtype=np.int32).tofile(fDispChange) Entry('leftdisparitychange',path=path).data(downsample=downsample).tofile(fDispChange) def writeDispChangeR(path): if path is 0 or path is None: np.array([0], dtype=np.int32).tofile(fDispChange) np.zeros((1,height,width)).astype(np.uint16).tofile(fDispChange) else: np.array([1], dtype=np.int32).tofile(fDispChange) Entry('rightdisparitychange',path=path).data(downsample=downsample).tofile(fDispChange) dataPath = '/misc/lmbraid17/sceneflownet/common/data/4_bin-db' path = '%s/%s/%s/%s' % (dataPath, resolution, subpath, collectionName) if os.path.exists(path): if not overwrite and (skipIfExists or not tb.queryYesNo('The collection %s already exists. Do you want to delete it and create a new one?' % collectionName)): return else: os.system('rm -rf %s' % path) print path os.system('mkdir -p %s' % path) num = 0 width = -1 height = -1 slice_points = [] print 'collection', collectionName, path for clip in clips: frame = clip.frame(clip.startFrame()) if frame.hasCleanImageL(): image = misc.imread(frame.cleanImageL()) else: image = misc.imread(frame.finalImageL()) if width==-1 and height==-1: width = image.shape[1] height = image.shape[0] if width!= image.shape[1] or height!=image.shape[0]: raise Exception('clips in collection %s have different resolutions' % collection) length = clip.endFrame() - clip.startFrame() + 1 print 'adding clip %d %d (%d)' % (clip.startFrame(), clip.endFrame(), length) num += length print 'slice_point %d' % num slice_points.append(num) txt = '' txt += 'num: %d\n' % num for point in slice_points[:-1]: txt += 'slice_before: %d\n' % point txt += '\n' cleanImageDefs = [] if 'cleanImageL' in entryTypes: cleanImageDefs.append(entryProto('cleanImageL','UINT8',3)) if 'cleanImageR' in entryTypes: cleanImageDefs.append(entryProto('cleanImageR','UINT8',3)) if len(cleanImageDefs): txt += fileProto('image_clean.bin', cleanImageDefs) finalImageDefs = [] if 'finalImageL' in entryTypes: finalImageDefs.append(entryProto('finalImageL','UINT8',3)) if 'finalImageR' in entryTypes: finalImageDefs.append(entryProto('finalImageR','UINT8',3)) if len(finalImageDefs): txt += fileProto('image_final.bin', finalImageDefs) flowDefs = [] if 'forwardFlowL' in entryTypes: flowDefs.append(entryProto('forwardFlowL', 'FIXED16DIV32', 2)) if 'forwardFlowR' in entryTypes: flowDefs.append(entryProto('forwardFlowR', 'FIXED16DIV32', 2)) if 'backwardFlowL' in entryTypes: flowDefs.append(entryProto('backwardFlowL', 'FIXED16DIV32', 2)) if 'backwardFlowR' in entryTypes: flowDefs.append(entryProto('backwardFlowR', 'FIXED16DIV32', 2)) if len(flowDefs): txt += fileProto('flow.bin', flowDefs) disparityDefs = [] if 'dispL' in entryTypes: disparityDefs.append(entryProto('dispL', 'FIXED16DIV32', 1)) if 'dispR' in entryTypes: disparityDefs.append(entryProto('dispR', 'FIXED16DIV32', 1)) if len(disparityDefs): txt += fileProto('disparity.bin', disparityDefs) disparityChangeDefs = [] if 'forwardDispChangeL' in entryTypes: disparityChangeDefs.append(entryProto('forwardDispChangeL', 'FIXED16DIV32', 1)) if 'forwardDispChangeR' in entryTypes: disparityChangeDefs.append(entryProto('forwardDispChangeR', 'FIXED16DIV32', 1)) if 'backwardDispChangeL' in entryTypes: disparityChangeDefs.append(entryProto('backwardDispChangeL', 'FIXED16DIV32', 1)) if 'backwardDispChangeR' in entryTypes: disparityChangeDefs.append(entryProto('backwardDispChangeR', 'FIXED16DIV32', 1)) if len(disparityChangeDefs): txt += fileProto('disparity_change.bin', disparityChangeDefs) txt += '\n' open('%s/index.prototxt' % path, 'w').write(txt) if len(cleanImageDefs): fCleanImage = open('%s/image_clean.bin' % path, 'w') if len(finalImageDefs): fFinalImage = open('%s/image_final.bin' % path, 'w') if len(flowDefs): fFlow = open('%s/flow.bin' % path, 'w') if len(disparityDefs): fDisp = open('%s/disparity.bin' % path, 'w') if len(disparityChangeDefs): fDispChange = open('%s/disparity_change.bin' % path, 'w') for clip in clips: for i in range(clip.startFrame(), clip.endFrame()+1): frame = clip.frame(i) print '%d:' % i if 'cleanImageL' in entryTypes: print 'cleanImageL:', frame.cleanImageL() writeCleanImage(frame.cleanImageL()) if 'cleanImageR' in entryTypes: print 'cleanImageR:', frame.cleanImageR() writeCleanImage(frame.cleanImageR()) if 'finalImageL' in entryTypes: print 'finalImageL:', frame.finalImageL() writeFinalImage(frame.finalImageL()) if 'finalImageR' in entryTypes: print 'finalImageR:', frame.finalImageR() writeFinalImage(frame.finalImageR()) if not frame.last(): if 'forwardFlowL' in entryTypes: print 'forwardFlowL:', frame.forwardFlowL() writeFlow(frame.forwardFlowL()) if 'forwardFlowR' in entryTypes: print 'forwardFlowR:', frame.forwardFlowR() writeFlow(frame.forwardFlowR()) if 'forwardDispChangeL' in entryTypes: print 'forwardDispChangeL', frame.forwardDispChangeL() writeDispChangeL(frame.forwardDispChangeL()) if 'forwardDispChangeR' in entryTypes: print 'forwardDispChangeR', frame.forwardDispChangeR() writeDispChangeR(frame.forwardDispChangeR()) else: if 'forwardFlowL' in entryTypes: print 'forwardFlowL:', 0 writeFlow(0) if 'forwardFlowR' in entryTypes: print 'forwardFlowR:', 0 writeFlow(0) if 'forwardDispChangeL' in entryTypes: print 'forwardDispChangeL', 0 writeDispChangeL(0) if 'forwardDispChangeL' in entryTypes: print 'forwardDispChangeL', 0 writeDispChangeR(0) if not frame.first(): if 'backwardFlowL' in entryTypes: print 'backwardFlowL:', frame.backwardFlowL() writeFlow(frame.backwardFlowL()) if 'backwardFlowR' in entryTypes: print 'backwardFlowR:', frame.backwardFlowR() writeFlow(frame.backwardFlowR()) if 'backwardDispChangeL' in entryTypes: print 'backwardDispChangeL', frame.backwardDispChangeL() writeDispChangeL(frame.backwardDispChangeL()) if 'backwardDispChangeR' in entryTypes: print 'backwardDispChangeR', frame.backwardDispChangeR() writeDispChangeR(frame.backwardDispChangeR()) else: if 'backwardFlowL' in entryTypes: print 'backwardFlowL:', 0 writeFlow(0) if 'backwardFlowR' in entryTypes: print 'backwardFlowR:', 0 writeFlow(0) if 'backwardDispChangeL' in entryTypes: print 'backwardDispChangeL', 0 writeDispChangeL(0) if 'backwardDispChangeL' in entryTypes: print 'backwardDispChangeL', 0 writeDispChangeR(0) if 'dispL' in entryTypes: print 'dispL:', frame.dispL() writeDispL(frame.dispL()) if 'dispR' in entryTypes: print 'dispR:', frame.dispR() writeDispR(frame.dispR())