예선에 참가하시는동안 팀원을 증원하셔도 괜찮으니 언제든지 mediai@cau.ac.kr 로 연락주시길 바랍니다
📝주제: 의료 영상의 다각도 인지: 퓨샷 도메인 일반화 챌린지 (Multi-View Perception in Medical Imaging: Few-Shot Domain Generalization Challenge) Hackathon Guide
참가자는 제공된 inference.py를 수정하여 최종 모델 가중치와 함께 제출해야 합니다.
/submission
├── inference.py # 모델 정의 및 추론 로직이 포함된 코드
├── model.pth # 학습 완료된 모델 가중치 파일 (pt 또는 pth)
├── requirements.txt # (선택) 추가 사용 라이브러리 목록
└── log.txt # 부정행위 방지용 로그파일
Input Directory: /images
Image Format: GrayScale (1-channel)
Classes: 총 11개 클래스
① 모델 아키텍처 정의 class MyModel(nn.Module): 부분에 학습 시 사용한 모델의 구조를 그대로 복사하여 붙여넣으세요. 외부 라이브러리(예: timm)를 사용했다면 해당 호출 코드를 넣어야 합니다.
② 가중치 로드 로직torch.save 방식에 따라 state_dict를 불러오는 방식이 다를 수 있습니다.checkpoint['net'] 형태인지, 아니면 바로 checkpoint 자체가 가중치인지 확인하여 로드 로직을 수정하세요.
③ 전처리 (Transforms)제공된 코드의 기본 전처리는 다음과 같습니다. 학습 시 다른 전처리를 사용했다면 이 부분을 수정하십시오.
Pythontransforms.Compose([
transforms.ToTensor(),
transforms.Normalize(mean=[0.5], std=[0.5])
])
본 해커톤은 Macro F1-Score를 기준으로 채점하며, 결과 파일은 반드시 원핫 인코딩(One-hot Encoding) 형식을 준수해야 합니다.
Index bladder femur-left femur-right ... spleen
image_00000 1 0 0 ... 0
image_00001 0 0 1 ... 0
Index: 확장자를 포함하지 않은 이미지 파일명
bladder~spleen: 모델이 예측한 결과 (해당되는 클래스에만 '1', 나머지는 '0')
컬럼명 순서: bladder, femur-left, femur-right, heart, kidney-left, kidney-right, liver, lung-left, lung-right, pancreas, spleen
python inference.py --input_dir ./images --weight_path ./model.pth --output_csv ./submission.csv
라이브러리: 표준 라이브러리(PyTorch, Torchvision, Pandas, Pillow) 외의 특수한 패키지를 사용한 경우 반드시 requirements.txt를 동봉하세요.
오류 처리: 이미지 로딩 실패 시 해당 이미지는 skip 하도록 구성되어 있으나, 가급적 모든 테스트 데이터에 대해 결과가 도출되도록 확인 바랍니다.
🚫 제한 조건 (Strict Constraints - Zero Tolerance)
사전 학습 가중치 사용 불가: ImageNet 등으로 사전 학습된 가중치(Pre-trained weights) 사용은 허용되지 않습니다. 반드시 무작위 초기화(Random Initialization) 상태에서 제공된 의료 영상 데이터만으로 학습해야 합니다.
필수 제출 의무: 모든 참가자는 최종 모델 제출 시 배포된 train 폴더와 가중치 파일(.pth/.pt 등)의 고유 해시값(Hash) 및 학습 진행 로그(Log)를 함께 제출해야 합니다.
재학습 검증(Retraining Verification): 주최 측은 모델의 무결성 검증을 위해 참가자에게 전처리 및 학습 코드 전체를 요구할 수 있습니다.
실격 규정: 제출된 코드를 주최 측 환경에서 재학습했을 때 성능이 재현되지 않거나, 제출된 로그/해시값이 조작된 것으로 확인될 경우 사전 경고 없이 실격 처리됩니다.
train 폴더와 가중치 파일의 고유 해시값 체크 방법
파일경로 부분을 train폴더와 가중치파일 주소로 넣고 실행하면 hash값이 생성됩니다. 그 해시값을 log에 남겨주세요.
import hashlib
import os
def get_official_hash(folder_path):
file_hashes = []
for root, dirs, files in os.walk(folder_path):
for file in sorted(files):
if file.startswith('.'): continue
file_path = os.path.join(root, file)
hasher = hashlib.md5()
with open(file_path, 'rb') as f:
for chunk in iter(lambda: f.read(4096), b""):
hasher.update(chunk)
file_hashes.append(hasher.hexdigest().upper())
combined = "".join(file_hashes)
final_hash = hashlib.md5(combined.encode()).hexdigest().upper()
return final_hash
print(get_official_hash('train 폴더경로'))
print(get_official_hash('가중치 파일경로'))