Origin Dataset
개요
- “HER2-IHC-40x” 및 “HER2-IHC-40x-WSI” 데이터셋은 유방암(HER2 immunohistochemistry, IHC) 병리 조직 슬라이드의 whole-slide image(WSI)와, 이로부터 추출한 패치(patch, 일정 크기 이미지 조각)들을 포함함.
- 목적은 HER2 IHC 점수 (0, 1+, 2+, 3+)을 자동 또는 딥러닝 기반으로 판단(soring)하는 계산 병리학(computational pathology) 연구를 지원하기 위함.
구성 및 스펙
항목 |
내용 |
총 WSIs 수 |
107 장. DOAJ |
배율 / 해상도 |
40× (즉 고배율 스캔) DOAJ+1 |
ROI (Region of Interest) |
전문가 병리학자들이 슬라이드 상에서 관심(region) 지정됨. 병소 부위 및 유의미한 조직 영역 중심. DOAJ |
Patch 크기 |
1024 × 1024 픽셀 패치들이 ROI에서 추출됨. DOAJ |
클래스 (HER2 점수) |
4개 클래스: 0, 1+, 2+, 3+ DOAJ |
데이터 정제 (filtering) |
색상 히스토그램(color histogram) 기반 필터링 → tumor/non-tumour 영역 및 artifacts 제거됨. DOAJ |
Preprocessing Dataset
개요
- 개발하려는 모델은 cell에 대한 Her2 계산 모델로 Origin 데이터와 달리 패치 단위 분류가 아닌 cell 검출 후 그에 대한 클래스 및 최종 Her2 계수 확인 모델임.
- 기존 origin 데이터셋의 패치별 her2 score 분류와 positive tumor와 negative tumor 검출 모델을 통하여 가공하여 새로운 데이터셋 추출

Code
- 내부 라이브러리 및 전체 코드는 github참고
- 본내용은 her2 cell level class에 대하여 어떻게 진행하였는지에 대한 코드임
class_list=['class_0','class_1+','class_2+','class_3+']
img_size=256
save_path='../../data/her2_cell_level_dataset/'
create_directory(save_path+'images/')
create_directory(save_path+'labels/')
create_directory(save_path+'xml/')
color_list=['#00FF00','#FFFF00','#0000FF','#FF0000'] # 각 클래스별 색상 리스트
model.eval()
for i in range(len(class_list)):
image_list=glob(f'../../data/Patch-based-dataset/**/{class_list[i]}/*.png')
for j in tqdm(range(len(image_list))):
with torch.no_grad():
img=Image.open(image_list[j])
torch_img=torch.from_numpy(np.array(img.resize((img_size,img_size)))[:,:,:3]).permute(2,0,1).unsqueeze(0).float()/255.
torch_img=torch_img.to(device)
outputs=pred_patch(torch_img, model, 0, 0, 2)
negative_tumor, positive_tumor, non_tumor = outputs
temp_label=[]
# XML 파일로 저장
if len(negative_tumor)+len(positive_tumor)==0:
continue
if i==0:
create_asap_xml(negative_tumor, positive_tumor, "class_0", "class_0", color_list[0], color_list[0], f'{save_path}xml/{class_list[i]}_{j}.xml')
for k in range(len(outputs)):
for cell in outputs[k]:
cell['cls_id']=0
temp_label.append(cell)
elif i==1:
create_asap_xml(negative_tumor, positive_tumor, "class_1+", "class_1+", color_list[1], color_list[1], f'{save_path}xml/{class_list[i]}_{j}.xml')
for k in range(len(outputs)):
for cell in outputs[k]:
cell['cls_id']=1
temp_label.append(cell)
elif i==2:
create_asap_xml(negative_tumor, positive_tumor, "class_0", "class_2+", color_list[0], color_list[2], f'{save_path}xml/{class_list[i]}_{j}.xml')
for k in range(len(outputs)):
for cell in outputs[k]:
if cell['cls_id']==0:
cell['cls_id']=0
else:
cell['cls_id']=2
temp_label.append(cell)
elif i==3:
create_asap_xml(negative_tumor, positive_tumor, "class_0", "class_3+", color_list[0], color_list[3], f'{save_path}xml/{class_list[i]}_{j}.xml')
for k in range(len(outputs)):
for cell in outputs[k]:
if cell['cls_id']==0:
cell['cls_id']=0
else:
cell['cls_id']=3
temp_label.append(cell)
with open(f'{save_path}labels/{class_list[i]}_{j}.json', 'w', encoding='utf-8') as f:
json.dump(temp_label, f, indent=4)
img.save(f'{save_path}images/{class_list[i]}_{j}.png')
추후 예정사항
- 전문의의 검수를 통하여 데이터 검수 진행 예정
- 검수 전과 검수 후의 결과를 비교하여 병원의 데이터에 대한 성능 측정
- 성능 상승을 위한 데이터 2차검수 진행