NERF 코드 분석 5.run_nerf

코드짜는침팬지·2023년 9월 18일
0

학부 연구생

목록 보기
5/10

5개 파트중 마지막 부분인 run_nerf 인데
1000줄 가까이 되는 코드를 올리는건 좀 그렇고

각 클래스나 함수들의 역할만 정리해서 올리는 식으로 하겠다.

  1. Import Statements:

    • 필요한 라이브러리와 모듈 임포트.
  2. Global Variables:

    • device: 현재 사용 가능한 디바이스 (CUDA GPU 또는 CPU) 설정
    • np.random.seed(0): 랜덤 시드 설정
    • DEBUG: 디버깅 모드를 위한 플래그
  3. Utility Functions:

    • batchify(fn, chunk):메모리 사용량을 줄이기 위해 주어진 함수 fn을 작은 배치로 적용하는 함수를 반환한다.

    • run_network(...): 주어진 입력과 네트워크 함수에 대해 네트워크를 실행한다.
      필요한 경우 view directions도 포함된다.

    • batchify_rays(...): 레이를 작은 미니배치로 렌더링하여 OOM (Out of Memory) 오류를 방지한다.

    • render(...): 주어진 카메라 설정과 레이를 사용하여 이미지를 렌더링 한다.

    • render_path(...): 주어진 카메라 경로를 따라 이미지 시퀀스를 렌더링 한다.

    • create_nerf(args): NeRF의 MLP 모델을 인스턴스화하고, 필요한 경우 체크포인트에서 가중치를 로드하며, 렌더링에 필요한 인수를 반환한다.

  4. raw2outputs 함수:

    • 모델의 원시 예측을 의미 있는 출력 값으로 변환
    • 주요 출력은 레이의 RGB 색상, 깊이와 관련된 지도 (disp_map 및 depth_map) 및 레이를 따라 누적 된 불투명도 (acc_map)
  5. render_rays 함수:

    • 볼륨 렌더링을 수행한다.
    • 주어진 레이 배치를 사용하여 신경망을 통해 레이를 렌더링하고, 결과 RGB 맵, 깊이 맵, 누적 불투명도 맵 등을 반환
    • 필요한 경우, 더 높은 해상도의 세밀한 네트워크를 사용하여 추가적인 샘플링을 수행
  6. config_parser 함수:

    • 설정 및 인수를 파싱하는 함수
    • 사용자가 제공하는 다양한 인수와 플래그를 처리하여 NeRF 학습 및 렌더링에 사용한다.
    • 명령 줄에서 스크립트를 실행할 때 사용되는 인수를 처리하는 함수
  7. 훈련 함수 (train): NeRF 모델을 훈련하는 주요 훈련 루프다.

    • 데이터 로딩: 데이터셋 유형 (llff, blender, LINEMOD, deepvoxels)에 따라 데이터셋을 로드한다.
      이는 이미지, 포즈 및 기타 필요한 데이터가 포함된다.

    • 훈련 설정: 코드는 훈련 환경을 설정한다.
      모델, 최적화 도구 및 기타 훈련 매개변수 정의가 포함된다.

    • 훈련 루프: 모델이 훈련되는 주요 루프이며, 다음과 같은 순서로 진행된다:

      • 1.장면(scene)에서 광선(ray)이 샘플링됩니다.
      • 2.NeRF 모델은 이러한 광선을 렌더링하여 이미지를 생성하는 데 사용된다.
      • 3.렌더링된 이미지는 기준 이미지와 비교하여 손실을 계산한다.
      • 4.역전파를 사용하여 모델의 가중치가 업데이트된다.
      • 5.주기적으로 모델의 성능이 검증 데이터에서 평가되며, 지정된 간격으로 가중치가 저장된다.
    • 로그 및 저장: 훈련 중에 코드는 다양한 메트릭 (PSNR 및 손실과 같은)을 로그로 기록하고 지정된 간격으로 모델 가중치를 저장한다.

  8. 주 실행: 스크립트가 주 프로그램으로 실행되면 기본 텐서 유형을 CUDA 텐서로 설정하고 (GPU에서 실행하도록 지시) train 함수를 호출하여 훈련을 시작하게 된다.

profile
학과 꼴찌 공대 호소인

0개의 댓글