def read_image( self, itype, image_id, frame='example', # int, 'all', 'example'(0) #'all_labeled' --> only if training read_targets=False, use_cache=None, verbose=False): '''Custom read_image function for this model. ''' start_time_L1 = time.time() targets = None # Read image. vidD = self.Data.load_vidDATA(itype, image_id) # Read annotations df = self.Data.annotations mini_df = df[df.video_id == image_id] mini_df = mini_df[np.logical_not(np.isnan(mini_df.fish_number))] nb_frames = len(mini_df) # Create frames list if frame == 'all': frames = range(len(vidD.vi)) elif frame == 'example': frames = [ 0, ] elif frame == 'all_labeled' and nb_frames > 0: frames = mini_df.frame.values.tolist() else: frames = [ int(frame), ] # Start df cols = {} cols['itype'] = itype cols['image_id'] = image_id # Ax, no-fish prediction Model = self.PREV_Model[0] pred = Model.get_predictions(itype, image_id, return_imgs=False, use_cache=use_cache, verbose=verbose) pred = pred[:, 0] cols['frame'] = range(pred.shape[0]) cols['frames_left'] = pred.shape[0] - np.arange(pred.shape[0]) cols['AxPred'] = pred cols['AxM3'] = ld.mov_avg(pred, 1, 1) cols['AxM5'] = ld.mov_avg(pred, 2, 2) cols['AxM3i1'] = ld.mov_avg(pred, 3, 1) cols['AxM1i3'] = ld.mov_avg(pred, 1, 3) cols['AxM11'] = ld.mov_avg(pred, 5, 5) cols['AxM7i3'] = ld.mov_avg(pred, 7, 3) cols['AxM3i7'] = ld.mov_avg(pred, 3, 7) cols['AxM5max'] = ld.mov_func(pred, 2, 2, np.max) cols['AxM5min'] = ld.mov_func(pred, 2, 2, np.min) cols['AxM5std'] = ld.mov_func(pred, 2, 2, np.std) cols['AxM0i5max'] = ld.mov_func(pred, 0, 5, np.max) cols['AxM0i5min'] = ld.mov_func(pred, 0, 5, np.min) cols['AxM0i5std'] = ld.mov_func(pred, 0, 5, np.std) cols['AxM5i0max'] = ld.mov_func(pred, 5, 0, np.max) cols['AxM5i0min'] = ld.mov_func(pred, 5, 0, np.min) cols['AxM5i0std'] = ld.mov_func(pred, 5, 0, np.std) # Dx, best frame prediction Model = self.PREV_Model[1] pred = Model.get_predictions(itype, image_id, return_imgs=False, use_cache=use_cache, verbose=verbose) pred = pred[:, 0] cols['DxPred'] = pred cols['DxP1'] = np.concatenate([np.repeat(pred[0], 1), pred[:-1]]) cols['DxP2'] = np.concatenate([np.repeat(pred[0], 2), pred[:-2]]) cols['DxP3'] = np.concatenate([np.repeat(pred[0], 3), pred[:-3]]) cols['DxN1'] = np.concatenate([pred[1:], np.repeat(pred[-1], 1)]) cols['DxN2'] = np.concatenate([pred[2:], np.repeat(pred[-1], 2)]) cols['DxN3'] = np.concatenate([pred[3:], np.repeat(pred[-1], 3)]) cols['DxM3'] = ld.mov_avg(pred, 1, 1) cols['DxM5'] = ld.mov_avg(pred, 2, 2) cols['DxM3i1'] = ld.mov_avg(pred, 3, 1) cols['DxM1i3'] = ld.mov_avg(pred, 1, 3) # Ex, 4 frames after best frame prediction Model = self.PREV_Model[2] pred = Model.get_predictions(itype, image_id, return_imgs=False, use_cache=use_cache, verbose=verbose) pred = pred[:, 0] cols['FxPred'] = pred cols['FxP1'] = np.concatenate([np.repeat(pred[0], 1), pred[:-1]]) cols['FxP2'] = np.concatenate([np.repeat(pred[0], 2), pred[:-2]]) cols['FxP3'] = np.concatenate([np.repeat(pred[0], 3), pred[:-3]]) cols['FxP4'] = np.concatenate([np.repeat(pred[0], 4), pred[:-4]]) cols['FxP5'] = np.concatenate([np.repeat(pred[0], 5), pred[:-5]]) cols['FxP6'] = np.concatenate([np.repeat(pred[0], 6), pred[:-6]]) cols['FxM3'] = ld.mov_avg(pred, 1, 1) cols['FxM5'] = ld.mov_avg(pred, 2, 2) cols['FxM5i1'] = ld.mov_avg(pred, 5, 1) cols['FxM1i5'] = ld.mov_avg(pred, 1, 5) # Data Frame dset_df = pd.DataFrame(cols) init_dset = dset_df.loc[:,[s for s in dset_df.columns if s not in \ ['itype', 'image_id', 'frames_left', 'target']]].copy() tmp_dset = init_dset.copy() tmp_dset['frame'] = tmp_dset['frame'].values - 5 tmp_dset.columns = [ s + '_p5' if s != 'frame' else s for s in tmp_dset.columns ] dset_df = pd.merge(dset_df, tmp_dset, how='left', on='frame') tmp_dset = init_dset.copy() tmp_dset['frame'] = tmp_dset['frame'].values - 5 tmp_dset.columns = [ s + '_p10' if s != 'frame' else s for s in tmp_dset.columns ] dset_df = pd.merge(dset_df, tmp_dset, how='left', on='frame') tmp_dset = init_dset.copy() tmp_dset['frame'] = tmp_dset['frame'].values + 5 tmp_dset.columns = [ s + '_n5' if s != 'frame' else s for s in tmp_dset.columns ] dset_df = pd.merge(dset_df, tmp_dset, how='left', on='frame') tmp_dset = init_dset.copy() tmp_dset['frame'] = tmp_dset['frame'].values + 5 tmp_dset.columns = [ s + '_n10' if s != 'frame' else s for s in tmp_dset.columns ] dset_df = pd.merge(dset_df, tmp_dset, how='left', on='frame') # Add target if read_targets: targets = mini_df[['frame']] targets = targets.assign(target=1) if targets is None: dset_df = dset_df.assign(target=0) else: dset_df = pd.merge(dset_df, targets, how='left', on='frame') dset_df = dset_df.assign( target=np.nan_to_num(dset_df.target.values)) # Convert infinites and nans dset_df = dset_df.replace([np.inf, -np.inf, np.nan], 0) # Filter frames dset_df = dset_df.iloc[[s in frames for s in dset_df.frame], :] if verbose: print("Read image {} dataset in {:.2f} s".format( image_id, (time.time() - start_time_L1) / 1)) return dset_df
def read_image( self, itype, image_id, frame='example', # int, 'all', 'example'(0) #'all_labeled' --> only if training #'all_train' --> only if training read_targets=False, use_cache=None, verbose=False): '''Custom read_image function for this model. ''' start_time_L1 = time.time() targets = None # Read image. vidD = self.Data.load_vidDATA(itype, image_id) # Read annotations df = self.Data.annotations mini_df = df[df.video_id == image_id] mini_df = mini_df[np.logical_not(np.isnan(mini_df.fish_number))] nb_frames = len(mini_df) # Create frames list if frame == 'all': frames = range(len(vidD.vi)) elif frame == 'example': frames = [ 0, ] elif frame == 'all_labeled' and nb_frames > 0: frames = mini_df.frame.values.tolist() elif frame == 'all_train' and nb_frames > 0: i_frames = mini_df.frame.values.tolist() frames = [[ s, ] for s in i_frames] frames = [s for ss in frames for s in ss] frames = np.unique(np.clip(frames, 0, len(vidD.vi) - 1)) else: frames = [ int(frame), ] # Start df cols = {} cols['itype'] = itype cols['image_id'] = image_id # Bx, fish_length i_model = -1 bx_models = 2 for i in range(bx_models): i_model += 1 Model = self.PREV_Model[i_model] pred = Model.get_predictions(itype, image_id, return_imgs=False, use_cache=use_cache, verbose=verbose) pred = pred[:, 0] cols['Bx{}_{}Pred'.format(i_model, i)] = pred cols['Bx{}_{}M3'.format(i_model, i)] = ld.mov_avg(pred, 1, 1) cols['Bx{}_{}M5'.format(i_model, i)] = ld.mov_avg(pred, 2, 2) cols['Bx{}_{}M11'.format(i_model, i)] = ld.mov_avg(pred, 5, 5) cols['Bx{}_{}M0i3max'.format(i_model, i)] = ld.mov_func( pred, 0, 3, np.nanmax) cols['Bx{}_{}M3i0max'.format(i_model, i)] = ld.mov_func( pred, 3, 0, np.nanmax) cols['Bx{}_{}M0i5max'.format(i_model, i)] = ld.mov_func( pred, 0, 5, np.nanmax) cols['Bx{}_{}M5i0max'.format(i_model, i)] = ld.mov_func( pred, 5, 0, np.nanmax) cols['Bx{}_{}M0i11max'.format(i_model, i)] = ld.mov_func( pred, 0, 11, np.nanmax) cols['Bx{}_{}M11i0max'.format(i_model, i)] = ld.mov_func( pred, 11, 0, np.nanmax) # Bx, fish_bbox i_model += 1 Model = self.PREV_Model[i_model] pred = Model.get_predictions(itype, image_id, return_imgs=False, use_cache=use_cache, verbose=verbose) pred = pred.iloc[:, 4:].values for i in range(pred.shape[1]): cols['Bx{}_{}Pred'.format(i_model, i)] = pred[:, i] cols['Bx{}_{}M3'.format(i_model, i)] = ld.mov_avg(pred[:, i], 1, 1) cols['Bx{}_{}M5'.format(i_model, i)] = ld.mov_avg(pred[:, i], 2, 2) cols['Bx{}_{}M11'.format(i_model, i)] = ld.mov_avg(pred[:, i], 5, 5) # Data Frame dset_df = pd.DataFrame(cols) # Convert infinites and nans dset_df = dset_df.replace([np.inf, -np.inf, np.nan], 0) # Add fetaures dset_df = dset_df.assign(frame=np.arange(len(dset_df))) dset_df = dset_df.assign(sample_weight=1 / float(len(dset_df))) dset_df = dset_df.assign(frames_left=len(dset_df) - dset_df.frame.values) # Add target if read_targets: targets = mini_df[[ 'frame', ] + [ 'length', ]] if targets is not None: dset_df = pd.merge(dset_df, targets, how='left', on='frame') # Filter frames dset_df = dset_df.iloc[[s in frames for s in dset_df.frame], :] if verbose: print("Read image {} dataset in {:.2f} s".format( image_id, (time.time() - start_time_L1) / 1)) return dset_df