Esempio n. 1
0
    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)
Esempio n. 2
0
    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
Esempio n. 3
0
    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
Esempio n. 4
0
    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)
Esempio n. 5
0
    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)
Esempio n. 6
0
    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)
Esempio n. 7
0
    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)
Esempio n. 8
0
    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)
Esempio n. 9
0
    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
Esempio n. 10
0
    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
Esempio n. 11
0
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())