Пример #1
0
    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
Пример #2
0
    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