히비스서커스의 블로그

[CellPin] 프로젝트 설명 및 추진 계획 본문

ETC/개발 로그

[CellPin] 프로젝트 설명 및 추진 계획

HibisCircus 2021. 6. 2. 20:22
728x90

Aiffel의 교육과정이 마무리가 되가며 해커톤 3로 개인프로젝트를 진행하고 있는 중이다. 현재 3주가 지나고 4주차째 진행중에 있다. 90%가 마무리되었다고 생각했었으나 데이터 라벨링 관련된 문제가 발생하여 이 시점을 기점으로 다시 라벨링 및 모델링을 다시해야 한다. 처음에는 굉장히 난감하였으나 3주간 진행하며 하나의 프로세스를 완성해 두었기에 다시 진행하면 되었고, 조급한 마음을 가지기 보다는 다시금 절차를 확인해가며 정리해보기로 하였다.

 

 

프로젝트 목표

세포의 이미지를 올려주면 세포의 CPE(Cytopathic Effect) 여부를 통해 바이러스 감염여부를 구별해주고, 바이러스의 양을 의미하는 TCID 50(Tissue Culture Infective Dose 50%)을 구해주는 웹페이지를 만들어보자.

 

추진 계기

작년 초를 시작으로 현재까지 이슈가 되고 있는 SARS-CoV2는 매개체가 야생동물(박쥐)인 것으로 알려져 있다. 즉, 야생동물로부터 인간으로의 바이러스 감염 장벽이 점점 무너져 가고 있다. 이를 위해서는 신종바이러스에 대한 신속한 연구가 이루어져야 야생동물로의 감염예방이 필요한 것이다. 신종바이러스에 대한 연구를 위해서는 신종바이러스를 키워야(growth)하고 수확(harvest)하여 여러 실험을 해봐야 할 것이다. 이때, 연구자가 자신이 키운 바이러스의 양을 대략적으로 알기 위해서 간단하게 구하는 방법 TCID 50이다. 또한, TCID 50을 구하기 위해서 CPE를 구별해야 한다. 하지만 신종 바이러스의 CPE를 구별하는 것은 숙련된 연구자도 어려운 일이다. 이를 위해 객관적으로 CPE를 판별할 수 있는 image classifier를 만들어 이런 어려움을 덜어주고자 한다. 또한, TCID 50을 직접 구하는 것은 꽤나 계산시간이 소요되는데 이에 대한 수고를 줄여주도록 TCID50 calculator를 만들어보고자 한다.

 

CPE 와 TCID50의 자세한 내용이 궁금하다면 참고

 

기능 

- 여러 바이러스와 세포 중 하나를 선택하면 (ex. virus: PRRSV, cell: MARC) 이에 맞게 훈련된 CNN모델 (image classifier 모델)이 선택되어 세포의 이미지를 올려주면 CPE를 찾아 바이러스의 감염여부를 알려주는 기능

 

- 테스트하는 unit의 개수(한 희석배수 당 몇 개의 well에 대해 실험하는지)와 각 희석배수일 때의 CPE가 나온 well의 개수를 입력하면 TCID 50를 계산해주는 기능

 

 

CellPIn팀

CellPin팀 트레이드 마크, 출처 : notion

세포(cell)를 고정(pin)시키면 감염여부를 알려주겠다.

 

멤버 (역할)

  • 팀장 : 이혜성 (Data labeling, Data Preprocessing)
  • 팀원

다짐

  • 어찌보면 간단한 프로젝트이나 데이터를 직접 얻어서 labeling, preprocessing한 것을 토대로 직접 Augmenation, Modeling을 하고 이를 Flask로 하여 웹페이지를 만들어 직접 배포하기까지의 일련의 과정들을 전부 경험해보자!

 

프로젝트 계획

 

데이터

- Total: 1300개의 세포 이미지 (virus: PRRSV, cell: MARC)

  • Train Data: 780개(Normal: 429개, CPE: 351개)
  • Validation Data: 260개(Normal: 117개, CPE: 143개)
  • Test Data: 260개(Normal: 117개, CPE: 143개)
  •  

- 배율: 40배, 100배, 200배, 400배 중 100배 채택

  • 채택 보통 실험자는 40배로 확인하나 음염이 진 곳에 영향을 받을 것이라 예상하여 100배로 하였다. 또한, 배율이 커질수록 화질이 낮아져 좋지 않음을 확인하였다.

중간발표 자료 중 10 페이지 (오른쪽: 이미지, 왼쪽: U-net Prediction)

- reshape: 원본(2048, 3072, 3) -> 크기교정 후(256, 256, 3)

  • 여러모델을 학습시키기에 최대 크기가 256X256이기에 resize를 하였다. 
  • 여러 개로 자른 후 학습하고 합쳐서 예측하는 patchwise 방법도 고려하였으나 프로젝트 진행 도중 문제가 발생하여 시간이 남을 경우 고려하는 것으로 하였다.

- Augmentation: 좌우반전, 상하반전

 

 

모델링

- 대표적인 VGG19, ResNet152, DenseNet201 모델에 Imagenet의 가중치를 가지고 Transfer Leaning을 하기로 하였다.

  • FC layer를 제외한 나머지 layer를 Freeze(학습 불가능)를 해준 후 학습한다.
  • 이후 Freeze된 layer를 풀어주어(학습 가능하게 해주어) learning rate를 (1e-5, resnet152만 1e-6)정도로 줄여서 학습하여 최종 결과를 확인한다. 
  FC layer만 학습 (with Aug) 전체 layer 학습 (with Aug)
VGG19 Accuracy :: 0.9231(0.9308)
Precision :: 0.9217(0.9304)
Recall :: 0.9060(0.9145)
Accuracy :: 0.9731(0.9615)
Precision :: 0.9911(1.0000)
Recall :: 0.9487(0.9316)
ResNet152 Accuracy :: 0.9500(0.9538)
Precision :: 0.9483(0.9487)
Recall :: 0.9402(0.9487)
Accuracy :: 0.9115(0.8808)
Precision :: 0.9273(0.8468)
Recall :: 0.8808(0.8974)
DenseNet201 Accuracy :: 0.9769(0.9692)
Precision :: 0.9826(0.9910)
Recall :: 0.9658(0.9402)
Accuracy :: 0.9615(0.9577)
Precision :: 1.0000(0.9649)
Recall :: 0.9145(0.9402)

 

 

 WebSite

1. CPE Classifier 페이지

- 바이러스와 세포의 종류를 선택한 후 CPE 여부를 알고 싶은 세포사진을 올리고 Run을 누르면 CPE의 여부를 판단해준다.

- 이후 TCID50을 구하고 싶다면 넘어가는 버튼이 있다.

 

2. TCID50 calculator 페이지

- 한 열(희석배수)에 바이러스를 감염시킨 well의 개수 (W)와 $10^{-1} ~ 10^{-8}$에서 나온 CPE의 수를 입력해주면 TCID50을 구해주는 기능을 만들었다.

- 다시 CPE를 구별해주는 페이지로 돌아가는 버튼이 있다.

 

 

시연영상은 아래의 링크에서 확인할 수 있다.

https://www.youtube.com/watch?v=yzHPEwOc6MA 

 

 

다음 포스팅에서는 labeling 방식의 차이로 인해 우리 팀이 맞이했던 Accuracy, Precision, Recall값이 똑같이 나오는 상황에 대해서 분석해본 글을 이어가보겠다.

 

 

-히비스서커스-

728x90