Ejemplo n.º 1
0
                                   isTheanoShape=parIsTheanoShape)
 batcherVal = BatcherOnImageCT3D(pathDataIdx=fidxVal,
                                 pathMeanData=batcherTrain.pathMeanData,
                                 isTheanoShape=parIsTheanoShape)
 print (':: Train data: %s' % batcherTrain)
 print (':: Val   data: %s' % batcherVal)
 #
 wdir = os.path.dirname(fidxTrain)
 # modelTrained = BatcherOnImageCT3D.loadModelFromDir(wdir, paramFilter='950')
 # modelTrained = BatcherOnImageCT3D.loadModelFromDir(wdir)
 # modelTrained = BatcherOnImageCT3D.loadModelFromDir(wdir, paramFilter='adagrad')
 modelTrained = BatcherOnImageCT3D().loadModelFromDir(wdir, paramFilter='adam')
 modelTrained.summary()
 #
 t0 = time.time()
 lstIdxSplit = split_list_by_blocks(range(batcherVal.numImg), parBatchSizeVal)
 numSplit = len(lstIdxSplit)
 for ii,ll in enumerate(lstIdxSplit):
     print ('[%d/%d] process batch size [%d]' % (ii, numSplit, len(ll)))
     dataX, dataY = batcherVal.getBatchDataByIdx(parBatchIdx=ll)
     tret = modelTrained.predict_on_batch(dataX)
     # convert to 3D-data
     if batcherVal.isTheanoShape:
         tshape3D = list(dataX.shape[2:])
         tret3D = tret.reshape([dataX.shape[0]] + tshape3D + [tret.shape[-1]])
         dataY3D = dataY.reshape([dataX.shape[0]] + tshape3D + [tret.shape[-1]])
     else:
         tret3D = tret
         dataY3D = dataY
     sizSplit = len(ll)
     for iidx,idx in enumerate(ll):
     dataX, dataY = batcherTrn.getBatchDataSliced(
         parNumImages=parBatchNumImgTrn,
         parNumSlices=parBatchNumSlcTrn,
         isReturnDict=False)
     tret = model.train_on_batch(dataX, dataY)
     if (ii % stepPrintTrn) == 0:
         print(
             '\t[train] epoch [%d/%d], iter = [%d/%d] : loss[iter]/acc[iter] = %0.3f/%0.2f%%'
             % (eei, parNumEpoch, ii, parNumIterPerEpochTrn, tret[0],
                100. * tret[1]))
 tmpDT = time.time() - tmpT1
 print('\t*** train-time for epoch #%d is %0.2fs' % (eei, tmpDT))
 # (2) model validation step
 if ((eei + 1) % 3) == 0:
     tmpIdxListSclices = split_list_by_blocks(
         range(batcherTrn.numSlices,
               batcherTrn.sizeZ - batcherTrn.numSlices),
         parBatchNumSlcVal)
     tmpIdxList = range(batcherVal.numImg)
     # lstIdxSplit = split_list_by_blocks(tmpIdxList, parBatchSizeVal)
     tmpVal = []
     for imgIdx in tmpIdxList:
         for tlistSliceIdx in tmpIdxListSclices:
             dataX, dataY = batcherTrn.getBatchDataSlicedByIdx(
                 dictImg2SliceIdx={imgIdx: tlistSliceIdx},
                 isReturnDict=False)
             tret = model.evaluate(dataX, dataY, verbose=False)
             tmpVal.append(tret)
         if (imgIdx % stepPrintVal) == 0:
             print(
                 '\t\t[val] epoch [%d/%d], iter = [%d/%d] : loss[iter]/acc[iter] = %0.3f/%0.2f%%'
                 % (eei, parNumEpoch, imgIdx, parNumIterPerEpochVal,
Ejemplo n.º 3
0
                          numSlicesProc) / parBatchSizeVal
 stepPrintVal = int(parNumIterPerEpochVal / 5)
 #
 model = batcherTrn.loadModelFromDir(dir_with_models=batcherTrn.wdir,
                                     paramFilter=parExportInfo)
 # model.compile(loss='categorical_crossentropy', optimizer=parOptimizer, metrics=['accuracy'])
 # model.summary()
 for ii in range(batcherVal.numImg):
     tpathMsk = batcherVal.arrPathDataMsk[ii]
     if K.image_dim_ordering() == 'th':
         raise NotImplementedError
     else:
         tsegm3D = np.zeros(batcherVal.shapeImg[:-1], np.float)
     lstIdxScl = range(batcherVal.numSlices,
                       batcherVal.sizeZ - batcherVal.numSlices)
     lstIdxScl = split_list_by_blocks(lstIdxScl, parBatchNumSlcVal)
     for ss, sslst in enumerate(lstIdxScl):
         dataX, dataY = batcherVal.getBatchDataSlicedByIdx(
             {ii: sslst}, isReturnDict=False)
         tret = model.predict_on_batch(dataX)
         if K.image_dim_ordering() == 'th':
             raise NotImplementedError
         else:
             sizXY = batcherVal.shapeImg[:2]
             tret = tret.transpose((1, 0, 2))
             tret = tret.reshape(list(sizXY) + list(tret.shape[1:]))
             tmskSlc = (tret[:, :, :, 1] > 0.5).astype(np.float)
             tsegm3D[:, :, sslst] = tmskSlc
     tmsk = nib.load(tpathMsk)
     tsegm = nib.Nifti1Image(tsegm3D.copy().astype(np.float16),
                             tmsk.affine,
Ejemplo n.º 4
0
 tmpT1 = time.time()
 for ii in range(parNumIterPerEpochTrn):
     dataX, dataY = batcherTrn.getBatchData(
         parBatchSize=parBatchSizeTrn, isRemoveMean=True)
     tret = model.train_on_batch(dataX, dataY)
     if (ii % stepPrintTrn) == 0:
         print(
             '\t[train] epoch [%d/%d], iter = [%d/%d] : loss[iter]/acc[iter] = %0.3f/%0.2f%%'
             % (eei, parNumEpoch, ii, parNumIterPerEpochTrn, tret[0],
                100. * tret[1]))
 tmpDT = time.time() - tmpT1
 print('\t*** train-time for epoch #%d is %0.2fs' % (eei, tmpDT))
 # (2) model validation step
 if ((eei + 1) % 3) == 0:
     tmpIdxList = range(batcherVal.numImg)
     lstIdxSplit = split_list_by_blocks(tmpIdxList, parBatchSizeVal)
     tmpVal = []
     for ii, ll in enumerate(lstIdxSplit):
         dataX, dataY = batcherVal.getBatchDataByIdx(parBatchIdx=ll,
                                                     isRemoveMean=True)
         tret = model.evaluate(dataX, dataY, verbose=False)
         tmpVal.append(tret)
         if (ii % stepPrintVal) == 0:
             print(
                 '\t\t[val] epoch [%d/%d], iter = [%d/%d] : loss[iter]/acc[iter] = %0.3f/%0.2f%%'
                 % (eei, parNumEpoch, ii, parNumIterPerEpochVal,
                    tret[0], 100. * tret[1]))
     tmpVal = np.array(tmpVal)
     tmeanValLoss = float(np.mean(tmpVal[:, 0]))
     tmeanValAcc = float(np.mean(tmpVal[:, 1]))
     print('\t::validation: mean-losss/mean-acc = %0.3f/%0.3f' %