Home > Projects > microservice project > week1 > 2차 회의 - 추가 요구사항 발생

2차 회의 - 추가 요구사항 발생
tech BE microservice project

추가 요구사항


현 진행상황

  1. 백엔드 서버를 구성하기 위해, 어떠한 백엔드 구성요소가 있고, 우리가 유지/보수, 최적화, 인수인계 가능성을 고려하여
    어떠한 프레임워크들을 각 백엔드 구조에 활용할지 조사를 진행중
  2. 각 연구 프로젝트를 공유가 용이하기 위해 Docker로 구성을 변경

문제상황

백엔드 서버를 구성하기 위해, 어떤 프레임워크를 사용해야 하는가에 대한 조사를 수행하던 중,
2주 내로 각 연구의 결과물인 기능들을 통합하고, 하나의 제품으로 기능할 수 있도록하는 클라이언트의 요구사항이 발생

데드라인 이내에 해당 기능을 만들 수 있도록, 기존에 조사한 내용인 gRPC 기반의 microservice로 백엔드를 구성하는
인공지능 + 알고리즘 부분을 마이크로 서비스로 구현해, 기존의 백엔드와 연결되도록 만들 필요가 발생

해결방안

기존의 백엔드 담당자와 이 문제를 어떻게 해결할지 논의를 수행한 후 결론을 아래와 같이 내렸다.

기존의 백엔드는 아래와 같이 기능이 수행된다.

1, 2 Model(각각 담당하는 mask가 다르다.)


N CT Image       |--------|      N mask
A CT Image       |        |      A mask
            ---> |  Model | ---> 
P CT Image       |        |      P mask
D CT Image       |________|      D mask

그러나 현재의 ai 알고리즘은 퀄리티 좋은 결과를 위해 각각의 담당하는 mask 별로 일부 mask만 생성이 가능하다.


vessel model 
                 |--------|      
A CT Image       |        |      
            ---> |  Model | ---> A mask 
P CT Image       |        |      
                 |________|      

ureter model
                 |--------|      
                 |        |      
D CT Image  ---> |  Model | ---> D mask 
                 |        |      
                 |________|      

kidney/tumor model
N CT Image       |--------|      N mask
A CT Image       |        |      A mask
            ---> |  Model | ---> 
P CT Image       |        |      P mask
D CT Image       |________|      D mask

해당 과정을 수행하기 위해서는 우리는 각 Phase CT가 존재하는 경우, 향상된 알고리즘을 적용해 퀄리티가 좋은 결과를
존재하지 않는 경우, 퀄리티는 낮더라도 일반화가 잘된 기존의 모델을 활용하여 알고리즘 서비스 부분 백엔드 컨테이너를 구성해야한다.

기존의 백엔드와 결합을 위한 요구사항

  1. image와 mask를 저장할 디렉토리의 절대경로가 함수의 입력값으로 주어질 것이다.
  2. 각 도커 컨테이너들은 공유된 하나의 볼륨을 마운트하여, 동일한 경로로 접근이 가능해야한다.
  3. 해당 알고리즘을 활용하여, 각 이미지 Phase에 해당하는 mask를 출력으로 줄 수 있어야 한다.
  4. 메모리 절약을 위해 인공지능이 필요한 정도의 spacing으로 이미지를 압축시켜 메모리 사용량을 줄여야한다.

따라서 아래와 같은 백엔드 컨테이너를 구성할 것이다.

Step 0. 각 컨테이너는 gRPC를 통해서 파일 경로를 주고 받을 수 있어야한다. 
그래서 예시 파일로 케이스 주소를 전달하는 Client Container, 해당 주소를 활용해 아래 Step을 실행하는 Server Container로 예시를 만든다.

Step 1. 입력 폴더에 존재하는 이미지를 ai의 조건들을 분석하여, 그 중 가장 high resolution으로 resample해 임시로 저장한다.(모든 작업이 종료된 후 삭제 필요)

Step 2. 아래의 조건에 따라 AI 알고리즘을 적용하여 결과값을 얻어낸다.

    Condition 1. A, P, D Phase가 존재할 때

        1. A mask에 혈관, 종양, 신장 mask를 ai결과로 생성
        2. D phase를 통해 생성된 요관 mask를 A phase로 옮겨 최종 결과 생성
        3. 최종 mask를 각각의 N, P, D 이미지로 옮겨 각각 CT에서 각 기관의 대략적인 위치를 확인할 수 있게 생성
        4. 각 Phase의 최종 마스크를 저장하고, 경로를 List로 저장해 반환

    Condition 2. Missing Phase가 존재할 때
        Condition 2-1. A or P Phase가 Missing Phase일 때
            1. N, A, P, D의 신장, 혈관에 관련된 기존의 알고리즘을 적용한다.(Model 1)
            2. obj를 만드는 이미지에 대한 prior를 기존의 내용을 활용한다.

        Condition 2-2. D Phase가 Missing Phase일 때
            1. 요관 관련 모델을 활용하지 않는다.
        

    해당 조건들에 따라 향상된 혈관을 RESAMPLE해 옮기던, 기존의 알고리즘으로 만든 것 + 요관 알고리즘 적용 여부를 최종 mask로 활용한다.
    다만 Resample 적용 여부는 추후 필요성이 없어질 수도 있으므로, on/off가 가능하게 파라매터 입력을 받을 수 있게 한다.

Step 3. 아래와 같은 입출력 구조를 가지도록 함수를 구성한다.
    input (case_directory : str, resample_condition : bool)
    중간 과정 속에서 result_paths에 각 mask 결과물 실제 저장도 필요.
    output (result_paths : List[str])