--- license: mit language: - en metrics: - f1 pipeline_tag: image-classification library_name: keras tags: - biology - medical --- # ๐Ÿฆด Knee Osteoarthritis X-ray Classifier This model classifies grayscale knee X-ray images into 5 severity classes: - **Normal** - **Doubtful** - **Mild** - **Moderate** - **Severe** ## ๐Ÿ“Š Model Details - Model: CNN built with Keras - Input shape: (162, 300, 1) - Preprocessing: Grayscale conversion, resizing, internal normalization (`Rescaling(1./255)`) - Data Augmentation: Flip, rotation, zoom - Output: Softmax probability over 5 classes ## ๐Ÿงพ Dataset Description This model was trained on the Digital Knee X-ray Images dataset available on Kaggle. The dataset contains labeled grayscale knee X-ray images categorized into: 1. Normal 2. Doubtful 3. Mild 4. Moderate 5. Severe These categories represent the Kellgren and Lawrence grading system for osteoarthritis severity. The images are organized into corresponding folders and include both healthy and osteoarthritic knee conditions. Link to dataset: [Digital Knee X-ray Images (Kaggle)](https://www.kaggle.com/datasets/orvile/digital-knee-x-ray-images/data) ## ๐Ÿ“ˆ Training Summary - Epochs: 100 with early stopping (83) - Optimizer: Adam - Loss: Sparse Categorical Crossentropy - Metric: F1 Score ## ๐Ÿš€ Usage ```python from keras.models import load_model model = load_model("knee_oa_classifier.keras") # Preprocess and predict (image should be (162, 300, 1) when using a url to an image response = requests.get(url) img = Image.open(BytesIO(response.content)) img = img.convert('L').resize((162, 300)) display(img) img_array = np.array(img) img_array = img_array.reshape((1, 162, 300, 1)) # Add batch and channel dimensions pred_probs = model.predict(img_array) pred_class_index = np.argmax(pred_probs) pred_class_label = train_ds.class_names[pred_class_index] for pred_prob in pred_probs: for i, class_name in enumerate(train_ds.class_names): display(f'{class_name} -> {pred_prob[i]*100}') display('') ``` ## ๐Ÿ–ผ Example Prediction Image [link]("https://storage.googleapis.com/kagglesdsdata/datasets/5697473/9389485/OS%20Collected%20Data/Osteopenia/Osteopenia%2010.jpg?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=gcp-kaggle-com%40kaggle-161607.iam.gserviceaccount.com%2F20250513%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20250513T112322Z&X-Goog-Expires=259200&X-Goog-SignedHeaders=host&X-Goog-Signature=9e41a414c2260b2090ef9c53e4d37a543e6075779074aa5a38e756c299147309380ee57f591f224fb8d992c63ce7f797655f647fc57ff4dca602997ff7efd1bf944e2737782cb2812a2da1f8d8c5f93ed33066df3b7983701e0fdd87c5d96395c45b4ea5be14fe7fab58495c99772e814e42f83a6db24d8b8760eeac2cd58c4581fc57cccbb2fb46a2040c521ef8b332105e6b43de0f0a6c23d5324102349bc13ecefb93d1d1cd8881fadb3d29f49d8662c8f70190c8e5903672c56d9c1ad4cead65f267dbec4774d682772d2afe9d1a8f003899ac931c4698649365be9c9170d8e5336c13e29584508c1c4b1b2dc928ac64ac763b4c1579e8eee9c265a2c644") Class probabilities: - 0Normal -> 0.0 - 1Doubtful -> 0.0 - 2Mild -> 100.0 - 3Moderate -> 0.0 - 4Severe -> 0.0