cmuchancel/hw1-pool-balls
24-679 (Fall 2026): Pool Balls — Solid vs. Stripe cmuchancel/hw1-pool-balls Student-created photographs of pool balls from two physical sets, prepared as square RGB images with synthetic training variants. The image-classification task predicts whether a pool ball is solid or striped. Source and task I photographed 30 distinct physical pool balls from two sets, taking one original photograph of each ball on a blue pool-table background. Two balls may share the… See the full description on the dataset page: https://huggingface.co/datasets/cmuchancel/hw1-pool-balls.
24-679 (Fall 2026): Pool Balls — Solid vs. Stripe
cmuchancel/hw1-pool-balls
Student-created photographs of pool balls from two physical sets, prepared as square RGB images with synthetic training variants. The image-classification task predicts whether a pool ball is solid or striped.
Source and task
I photographed 30 distinct physical pool balls from two sets, taking one original photograph of each ball on a blue pool-table background. Two balls may share the same color and number because they belong to different sets; they are separate physical objects, not repeated photographs of the same ball.
The original dataset contains 16 solid-ball photographs and 14 striped-ball photographs. I organized the photographs into solid and stripe folders in the source ZIP. The preparation notebook reads those folders to assign the binary target:
0 = solid ball; 1 = striped ball.
Striped balls have a colored band with white regions outside the band. A solid ball may still have a small white number patch; that patch alone does not make it striped. Ball color, ball number, and set membership are not prediction targets.
Course: 24-679, Fall 2026, Carnegie Mellon University. Repository maintainer: the account shown above.
Fields
Each original source ID corresponds to one photograph of one distinct physical ball. The dataset does not store a separate set-membership field.
Splits and original-source counts
These counts are computed from the packaged splits for this run.
Class counts include synthetic rows in training only.
Original photographs are split before augmentation, with class stratification. Because each physical ball appears in exactly one original photograph, splitting the originals also keeps each physical ball in one partition.
Requested holdout fraction: 30%; test receives 50% of that holdout. This produces approximately 70% training, 15% validation, and 15% test originals. Small-sample rounding can change the realized proportions. The first split uses seed 24679, and the holdout split uses seed 24680.
Following the instructor's split clarification:
- train: training originals plus their augmented versions.
- validation: unaugmented prepared validation originals.
- test: unaugmented prepared test originals.
All synthetic samples are generated from training originals only. An original and its augmented descendants never cross split boundaries. There is no assumed pairing based on consecutive filenames, matching colors, or matching ball numbers.
The split is by individual original photograph, not by entire pool-ball set. It therefore does not provide an evaluation on a completely held-out ball set.
Augmentation and preprocessing
Prepared image size in this run: 224 × 224 RGB. Padding color is (128, 128, 128).
All splits receive the same deterministic preparation: apply EXIF orientation, convert to RGB, resize while preserving aspect ratio, and pad to the configured square size. This preparation does not stretch the image or crop away its original content. Working copies discard camera metadata; native source files remain separate.
Each original training image contributes its prepared parent and 4 independently generated variants from each of four methods. Each transformation starts from the prepared original; transformations are not stacked.
- Brightness: factors 0.4–0.7 or 1.4–2.0.
- Rotation: 15–30 degrees in either direction on a fixed canvas.
- Contrast: factors 0.35–0.65 or 1.5–2.2.
- Gaussian blur: radius 2.0–4.5 pixels.
The stored identifiers mild_brightness, small_rotation, mild_contrast, and mild_gaussian_blur are retained from the classroom notebook; the actual strengths are the values listed above.
Each variant inherits its original ball's solid/striped target. The intended justification is that lighting changes, rotation, and blur do not change the physical ball's class. However, an overly strong transformation can obscure the visible evidence needed to identify that class.
The notebook includes a parent/variant gallery for visual inspection and automated checks for training-only ancestry, inherited labels, unique IDs, and image dimensions. Those automated checks establish structural consistency, not visual label preservation.
Intended use and limitations
Use for teaching image preparation, augmentation inspection, provenance, and binary image classification.
The collection contains only two pool-ball sets photographed in a controlled setting. Similar ball designs, the blue background, lighting, and camera position limit the variety represented. Distinct physical balls can still look very similar, especially when they share a color and number across sets.
Synthetic variants do not add independent physical balls or newly captured photographs. Strong brightness or contrast changes can hide details, fixed-canvas rotation can clip image edges, and blur can make the solid/striped distinction harder to recognize.
The dataset should not be interpreted as measuring performance on arbitrary billiards photographs with different tables, lighting, camera angles, or ball designs. Compare original-only and augmented training using the same validation and test sets.
Privacy and licensing
The photographs show pool balls and are intended to contain no people, faces, or personally identifiable information. The packaged splits omit original upload filenames, and prepared images do not retain camera metadata.
The original ZIP remains a separate source artifact. No reuse license is granted with this dataset; contact the creator for permission before reusing or redistributing the photographs.
AI usage disclosure
ChatGPT assisted with adapting the provided 24-679 lecture notebook and with code and documentation. I took all 30 original photographs myself; they were not generated by AI.
Synthetic images are produced only by the explicit programmatic transformations documented in the preparation notebook.
Load and compare
from datasets import load_dataset
ds = load_dataset("cmuchancel/hw1-pool-balls")
# Train with ds["train"], choose settings with ds["validation"],
# then evaluate ds["test"] after model settings have been chosen.For reproducible comparisons, record the dataset commit and model/environment versions. Regenerate this card after changing the data; its counts are calculated from the packaged splits.
