              points = np.reshape(points, (-1, 2))
              points *= (roi[2] - roi[0])
              points[:, 0] += roi[0]
              points[:, 1] += roi[1]
              landmarks = np.rint(points).astype("uint").tolist()
              batch.setdefault("landmarks", []).append(landmarks)
          logger.trace("Predicted Landmarks: %s", batch["landmarks"])
 
</s> remove         generator = zip(batch["detected_faces"],
                        batch["filename"],
                        batch["image"],
                        batch["landmarks"])
        for face, filename, image, landmarks in generator:
            face.landmarks_xy = [(int(round(pt[0])), int(round(pt[1]))) for pt in landmarks]
            face.image = image
            face.filename = filename
 </s> add         for face, landmarks in zip(batch["detected_faces"], batch["landmarks"]):
            if not isinstance(landmarks, np.ndarray):
                landmarks = np.array(landmarks)
            face.landmarks_xy = np.rint(landmarks).astype("int32") </s> remove     test_count += 1
 </s> add     TEST_COUNT += 1 </s> remove     except CalledProcessError as e:
        print_fail("[-] Test failed with %s" % e)
        fail_count += 1
 </s> add     except CalledProcessError as err:
        print_fail("[-] Test failed with %s" % err)
        FAIL_COUNT += 1 </s> remove def train_args(model, model_path, faces, alignments, iterations=5, bs=8, extra_args=""):
 </s> add def train_args(model, model_path, faces, alignments, iterations=5, batchsize=8, extra_args=""):
    """ Train command """
            batch.setdefault("landmarks", []).append(points)
              points = np.reshape(points, (-1, 2))
              points *= (roi[2] - roi[0])
              points[:, 0] += roi[0]
              points[:, 1] += roi[1]
            batch.setdefault("landmarks", []).append(points)
            batch.setdefault("landmarks", []).append(points)
          logger.trace("Predicted Landmarks: %s", batch["landmarks"])
keep keep keep keep replace replace keep
 Smart Mask - Extract code review

- Lint simple_tests.py
- Only reformat alignments file if it exists otherwise change filename
- Update legacy alignments to new format at all stages
- faces_detect.Mask.from_dict - logging format fix
- convert.py fix otf for new pipeline
- cli.py - Add note that masks not used. Revert convert masks
- faces_detect.py - Revert non-extract code
- Add .p and .pickle extensions for serializer
- plugins/extract revert some changes
- scripts/fsmedia - Revert code changes
- Pipeline - cleanup
- Consistant alpha channel stripping (fixes single-process)
- Store landmarks as numpy array
- Code attribution
- Normalize feed face and reference face to 0.0 - 1.0 in convert
- Lock in mask VRAM sized
- Add documentation to plugin_loader
- Update alignments tool to work with new format 
plugins/extract/align/cv2_dnn.py