name: data-and-alignment
description: "Prepare Facenet class-folder datasets, validate LFW pair inputs,
and build safe MTCNN alignment workflows."
metadata:
disco-role: operating
disable-model-invocation: true
license: MIT
Facenet Data and Alignment
Use this sub-skill when the user needs to prepare or check face image data before embedding, evaluation, or training. This includes class-folder dataset layout, LFW pair files, image preprocessing assumptions, and MTCNN alignment commands.
When to read
- The user asks how to structure a Facenet dataset or why labels/classes are wrong.
- A workflow needs aligned face thumbnails before
compare, classifier training, LFW validation, or training.
- The task mentions
align_dataset_mtcnn, MTCNN thresholds, margin, image size, multiple faces, or bounding-box output.
- The user has an LFW-style
pairs.txt file and missing-image or skipped-pair issues.
Core conventions
- Facenet datasets use
data_dir/class_name/image_file directories. facenet.get_dataset() sorts class directories and assigns integer labels by sorted class order.
facenet.load_data() reads images, converts grayscale to RGB, optionally prewhitens, then crops/flips to the requested image size.
- MTCNN alignment writes class subdirectories under an output directory and records bounding boxes in
bounding_boxes_<random>.txt.
- For pretrained 2018 models, later inference/evaluation often needs fixed image standardization; route to
../evaluation/SKILL.md before LFW evaluation.
Practical workflow
- Validate source layout with
scripts/validate_facenet_dataset.py. It checks class directories, image extensions, minimum images per class, and optional LFW pair references without importing TensorFlow.
- Read
references/data-formats.md for class-folder, LFW pair, learning-rate schedule, and large dataset conversion formats.
- If images are unaligned, read
references/alignment-workflows.md, then build a command with scripts/build_alignment_command.py.
- Choose
--image_size and --margin based on the downstream workflow. README-era examples commonly use 182 aligned output for training and 160 for model input.
- Decide whether multiple detected faces should be saved. The default behavior picks one centered/large face;
--detect_multiple_faces changes output naming and class counts.
- After alignment, validate the output dataset again before training or classifier workflows.
Decision points
- Unaligned vs aligned input:
compare and contributed clustering can align internally, but training and LFW evaluation expect prepared aligned face patches.
- Random order: use
--random_order only to help multiple alignment jobs split work; it makes logs harder to compare.
- Multiple faces: enable only when each input image may legitimately contain more than one identity; otherwise it can pollute class folders.
- Skipped images: alignment records output filenames without boxes when no face is found. Treat a high skip rate as detector/quality/data issue, not a training issue.
Output contract
A successful preparation pass should leave:
- a validated source or aligned class-folder directory;
- a recorded image size and margin;
- a bounding-box/no-face log from alignment when alignment was run;
- a second validation report showing class counts after alignment.
Keep raw photos and aligned outputs in separate directories so a failed detector run can be discarded without data loss.
Route onward
Troubleshooting
Read references/troubleshooting.md for invalid class-folder layouts, missing pairs, MTCNN import errors, deprecated SciPy image I/O, and unexpected face counts.