              batch = self._obtain_batch_item(function, in_queue, out_queue)
              if batch is None:
                  break
              try:
                  batch = function(batch)
              except tf_errors.UnknownError as err:
                  if "failed to get convolution algorithm" in str(err).lower():
 
</s> remove         for prediction, roi, offset in zip(batch.prediction,
                                           batch.data[0]["roi"],
                                           batch.data[0]["offsets"]):
            points = np.reshape(prediction, (-1, 2))
            points *= (roi[2] - roi[0])
            points[:, 0] += (roi[0] - offset[0])
            points[:, 1] += (roi[1] - offset[1])
            landmarks.append(points)
        batch.landmarks = np.array(landmarks)
 </s> add         if batch.second_pass:
            batch.landmarks = batch.prediction.reshape(self.batchsize, -1, 2) * self.input_size
        else:
            for prediction, roi, offset in zip(batch.prediction,
                                               batch.data[0]["roi"],
                                               batch.data[0]["offsets"]):
                points = np.reshape(prediction, (-1, 2))
                points *= (roi[2] - roi[0])
                points[:, 0] += (roi[0] - offset[0])
                points[:, 1] += (roi[1] - offset[1])
                landmarks.append(points)
            batch.landmarks = np.array(landmarks) </s> remove         faces, roi, offsets = self.align_image(batch)
        faces = self._normalize_faces(faces)
 </s> add         lfaces, roi, offsets = self.align_image(batch)
        batch.feed = np.array(lfaces)[..., :3] </s> remove         new_img = np.empty(new_dim, dtype=np.uint8)
 </s> add         new_img = np.zeros(new_dim, dtype=np.uint8)
            if not batch.filename:  # Batch not populated. Possible during re-aligns
                continue
              batch = self._obtain_batch_item(function, in_queue, out_queue)
              if batch is None:
                  break
            if not batch.filename:  # Batch not populated. Possible during re-aligns
                continue
              try:
                  batch = function(batch)
              except tf_errors.UnknownError as err:
                  if "failed to get convolution algorithm" in str(err).lower():
keep keep add keep keep keep keep
 Extract: Implement re-align/2nd pass
   - implement configurable re-align function in extract
  - update locales + documentation
  - re-factor align._base and split to separate modules
  - move normalization method to plugin parent
  - bugfix: FAN use zeros for pre-processing crop
  - lint AlignedFilter 
plugins/extract/_base.py