Rheumatoid arthritis (RA) is a chronic autoimmune disease characterized by inflammation, joint destruction, and extra-articular manifestations. Radiography is the standard imaging modality for diagnosing and monitoring joint damage in RA. However, traditional methods for evaluating radiographic progression, such as the Sharp method and its variants, are time-consuming and subjective. This hackathon focuses on developing automated solutions for joint assessment in RA using computer vision techniques.
Participants will build models to automatically score hand joints affected by RA. The task involves two key components:
- Joint Localization: Accurately localize hand joints in radiographic images.
- Pathology Assessment: Evaluate the severity of joint damage, specifically focusing on erosion and joint space narrowing (JSN) and predict damage scores (0-4 for JSN and 0-5 for erosion).
The goal is to develop a robust and efficient pipeline that can assist clinicians in diagnosing and monitoring RA progression, reducing subjectivity and manual effort.
Participants will work with a clinical collection of radiographic images annotated for joint localization, erosion, and JSN. The dataset includes:
- Images: High-resolution radiographic images of hand joints.
- Annotations: Bounding boxes for joint localization and severity scores for erosion and JSN.
- Description: This file contains expert scores for joint pathology assessment.
- Columns:
- Unnamed Column (Index 0): Represents the
joint_id. This column is not named in the file but serves as the joint identifier. - patient_id: Unique identifier for the patient.
- hand: Specifies the hand (e.g.,
leftorright). - joint: Specifies the joint type (e.g.,
DIP,PIP,MCP, etc.). - disease: Specifies type of disease (JSN/erosion)
- score: Disease score. (For JSN 0-4 and for erosion 0-5)
- expert_id: Expert ID who scored this joint.
- Unnamed Column (Index 0): Represents the
- Key Notes:
- For each joint, there are 3 rows corresponding to predictions from 3 different experts.
- To create ground truth scores, average the scores from the 3 experts for each joint.
- If a score is missing (e.g.,
NaN), it means the expert did not provide a score for that joint. These rows can be dropped during preprocessing.
- Description: This file contains bounding box coordinates for joint localization.
- Columns:
- Unnamed Column (Index 0): This column does not represent
joint_id. It is simply a placeholder and should be redefined. - xcenter: X-coordinate of the bounding box center.
- ycenter: Y-coordinate of the bounding box center.
- dx: Width of the bounding box.
- dy: Height of the bounding box.
- Unnamed Column (Index 0): This column does not represent
- Key Notes:
- The bounding box coordinates are not normalized and should be normalized to the image dimensions (values between 0 and 1).
- The rows are already sorted in the required order. You need to recursively number each row from
0to41to create thejoint_idcolumn.
If you encounter import problems, ensure that the project directory is added to your PYTHONPATH. Run the following command in your terminal:
export PYTHONPATH=$PYTHONPATH:/path/to/arise-2025Replace /path/to/arise-2025 with the absolute path to the root directory of the project. This ensures that Python can locate and import the necessary modules.
As a baseline, we present a pipeline combining YOLOv12s for joint localization and ConvNeXT-small for pathology assessment.
chmod +x preprocess_for_yolo.sh
./preprocess_for_yolo.sh --csv /path/to/csv --img_dir /path/to/images --split_info_path /path/to/split_info.json- Add your
yolo_datasetpath to the detection config. - Run the training script:
python detection/model/yolo/train.pyThe classifier (ResNet50) is trained on ground-truth bounding boxes. The preprocessing steps include:
- Averaging expert scores.
- Merging scores and bounding box files.
- Normalizing bounding box coordinates and cropping images.
chmod +x preprocess_for_classifier.sh
./preprocess_for_classifier.sh --scores_csv /path/to/scores.csv --bbox_file /path/to/bboxes.csv --image_dir /path/to/jpeg --split_subsets_by_id /path/to/train_val_split.json- Add your Weights & Biases (wandb) key to
config/classifier/train.yaml. - Configure the model in the config file (any model can be initialized via Hydra).
- Run the training script:
chmod +x train.sh
./train.shTo get access to pretrained models download checkpoints and unzip it to checkpoints directory.
- Detect joints on evaluation data:
python detection/model/yolo/infer.py --model /path/to/model_weights --img_dir /path/to/eval_data --output_dir /path/to/output_dir --imgsz pretrained_model_image_size- Crop images using the generated bounding boxes:
python data_utils/crop_eval.py --image_dir /path/to/image/jpeg --bbox_txt /path/to/detection/all_bboxes.txt --output_dir data/eval_cropped_images-
Predict labels for cropped images (edit
config/classification/submit.yaml):model_weights: Path to the best classification model checkpoint.bbox_csv: Path to predicted bounding boxes from the detection model.image_dir: Path to cropped images (data/eval_cropped_images).output_csv: Path to save the submission file (submit.csv).
-
Run the submission script:
python submit.py