[CodeExecution] DMRDenoise Pre-trained model

Eunseo Jeong·2022년 9월 28일
0

3D data

목록 보기
2/4
post-thumbnail

본 글은 https://github.com/luost26/DMRDenoise 에 업로드 되어있는 DMRDenoise의 Pre-trained model을 직접 실행해보고 결과값을 검증해보는 과정이 기록되어 있는 글입니다.

잘못 이해한 개념이나 부적절하게 사용된 자료가 있다면 댓글로 알려주시면 감사하겠습니다!


Mac에서 실행

M1에서 실행을 시도했지만, NVIDIA계열이 아닌 apple 자체 생산 그래픽카드를 사용하는 M1의 특성 상 실패했다.

모델에서는 NVCC (NVIDIA CUDA Compiler) 설치를 필요로 하기 때문이다.

소유 중인 pc의 그래픽 관련 사양


Windows에서 실행

우선, 해당 PC의 그래픽 카드는 RTX 3090이다.

1. Virtual Environment 생성하기

DMRDenoise 라는 이름의 venv 생성.

conda create --name DMRDenoise python=3.6

🚨문제 발생

  • 환경 생성 과정에서 SSL verify 불안정으로 인한 문제가 발생했다.

CondaHTTPError: HTTP 000 CONNECTION FAILED

  • solution

    ./Anaconda3/Library/bin 경로에서 아래 파일들을 복사하여

    • libcrypto-1_1-x64.dll
    • libcrypto-1_1-x64.pdb
    • libssl-1_1-x64.dll
    • libssl-1_1-x64.pdb

    ./Anaconda3/DLLs 경로에 붙여넣기 하면 해결이 된다.

2. Virtual Environment activate

DMRDenoise를 activate하기

conda activate DMRDenoise

3. Packages install

모델링에 필요한 패키지들 : pytorch, scikit-learn, cudatoolkit, torchvision, pytorch lightning, h5py

conda install -y pytorch=1.5.1 torchvision=0.6.1 cudatoolkit=9.2 -c pytorch
conda install -y scikit-learn=0.23.1
conda install -y -c conda-forge h5py=2.10.0 pytorch-lightning=0.7.6

🚨두가지 문제가 발생했다.

  1. cudatoolkit을 설치했지만, 환경변수 PATH로 설정되지 않아 setup.py install 시 error 발생

OSError: CUDA_HOME environment variable is not set. Please set it to your CUDA install root

  • solution
    1. conda deactivate 후에 original PC에 cudatoolkit을 깔아보기
    2. 여전히 환경 변수 설정이 안되어 있어서 고급시스템에 접근하여 직접 설정함 (./CUDA)
      1. PATH 설정은 terminal로 하는 방법이 있는 것 같기도 하다 (추후 다시 알아보기)
      2. 환경 변수는 PC 재시동 후에 적용된다는 것을 이후에 알게 되었다. 이것 역시 해결책이 될 수 있을 것 같다.
  1. 깃허브에서 제안하는 cudatoolkit 10.0에게는 RTX 3090이 너무 최신이라 장치를 지원하지 못해서 setup.py install 시 error 발생

ValueError: Unknown CUDA arch (8.6) or GPU not supported

  • solution
    1. packages install 과정에서 cudatoolkit=11.0으로 다시 설정해서 install을 시도해보았다.

    2. 그러자 다른 package들에 비해 cudatoolkit=11.0의 버전이 너무 높아 conflict가 발생했다.

    3. 다른 package의 버전은 default로 설정한 후 모든 package들을 재설치했다.

      1. default로 설정했다는 것은, pytorch=1.5.1이 아니라 그냥 pytorch라고만 입력했다는 것.
      2. 그러고 나니, pytorch=1.7.1, pytorch-lightning=1.4.5, h5py=2.10.0, scikit-learn=0.23.1, torchvision=0.8.2, cudatoolkit=11.0 가 되었다.
      conda install -y pytorch torchvision cudatoolkit=11.4 -c pytorch
      conda install -y scikit-learn=0.23.1
      conda install -y -c conda-forge h5py pytorch-lightning
    4. cudatoolkit=11.0에 맞춘 패키지 버전들을 설치한 채로 진행하니 setup.py install에 성공했다.

4. Point cloud data denoising하기

  1. 깃허브에서 제공된 pre-trained 모델 중 supervised model을 이용해 denoising을 시도하였다.
  2. 우선, 내가 LiDAR 센서로부터 얻은 데이터를 입력하기 전에, 깃허브에서 제공하는 test data를 입력해보고 어떤 파일형식을 input하고 output하는 지 살펴볼 필요가 있었다.
  3. airplane_0016.obj.xyz 이라는 파일을 우선 meshlab을 통해 어떤 data인지 확인해보았다.

normal vectors가 포함되지 않은 .xyz 파일이므로 normals를 이용한 screened poisson reconstruction은 진행하지 못했고, 대신 Ball Pivoting을 함
  1. 해당 파일을 command에서 input으로 입력했다.

    python denoise.py --input ../dataset_test/input_full_test_50k_0.010/airplane_0016.obj.xyz --output ./output_airplane.obj.xyz --ckpt ./pretrained/supervised/epoch=153.ckpt

    🚨 문제발생

    • 앞서 cudatoolkit=11.0에 맞춰서 설치된 pytorch-lightning=1.4.5가 문제가 된 모양이다.

    TypeError: init() missing 1 required positional argument: 'hparams'

  • solution
    1. 찾아보니, pytorch-lightning 패키지 파일에 들어있는 saving.py(정확히 기억안남)에서 hyper parameter를 모델 학습시킨 후 check point에서 load를 해주지 않아서 생긴 문제라고 한다.
    2. 그러나, 깃허브에서 pytorch-lightning=0.7.6을 권장했으며 issue를 찾아봐도 동일한 문제가 발생한 사람들은 없었기에 GPU 버전으로 인해 불가피하게 pytorch-lightning=1.4.5를 설치하면서 hparams가 필요한 패키지로 실행해버린 것이 아닌가라는 추측이다.
    3. 이에 대한 해답을 찾기에 큰 어려움이 있다고 판단한 후, 이 문제에 대해서 깃허브에 issue로 올린 상태이다. 따라서 해당 solution은 논문 저자의 답변이 올 때까지 대기 상태이다. (https://github.com/luost26/DMRDenoise/issues/13)
      1. GPU 버전 문제를 해결하기 위해서 온라인 가상머신의 역할을 하는 gradient 사용도 고려 중이다. ( https://gradient.paperspace.com/ )
    4. 답변은 오지 않았지만 다시 에러를 해결하기 위해 여기저기 찾다보니 발견한 pytorch 공식 홈페이지에서 해결책을 찾을 수 있었다.(https://pytorch.org/get-started/locally/) conda install pytorch torchvision torchaudio cudatoolkit=11.1 -c pytorch -c conda-forge
    5. cudatoolkit=11.1을 설치하려면 conda-forge가 추가되야한다고 한다.
    6. 이 command로 설치를 하니 pytorch-lightning=0.7.6 설치도 문제 없이 설치가 되었다.
  1. 해당 모델 추론 결과는 다음과 같이 나왔다.

    Ball Pivoting 결과

  2. 50k에서 67k로 늘어난 것을 확인 할 수 있었고, 이는 reconstructed manifold에서 resampling과정을 거쳤기 때문이라고 보고있다. 80k data를 입력했을 때도 60k 대 points가 되는 것으로 보아 points가 늘어날 지 감소할 지 예측할 수 없다.

5. Problems

  1. normals estimation
    1. 이 모델은 기존의 point cloud set에서 단순히 noise point만 제거하는 것이 아니라 surface를 가장 잘 표현할 수 있도록 point 제거 및 재생성을 진행하므로 기존의 normal값을 후에 matching할 수가 없다.
    2. normal estimation을 진행하더라도 view point와 같이 SLAM과 관련된 parameter들을 소실한 채로 진행해야하므로 normal vector들이 부정확하다.
  2. reconstruction
    1. normals estimation에서 파생되는 문제로, normals가 정확하지 않아서 poisson reconstruction을 시행해도 다음과 같이 부정확한 형태로 출력이 된다.
    2. 그나마 다행인 것은, denoise 전과 후의 reconstruction 결과가 눈에 띄게 다르다는 것인데 후의 결과를 보면 모양은 이상하지만 normals estimation이 양쪽 날개와 꼬리에 대해 대칭으로 진행되어 reconstruction도 대칭으로 진행된 것을 확인할 수 있다.

noisy airplane

denoised airplane

6. Tasks

  1. normals vector를 어떻게 하면 기존의 정보를 최대한 소실하지 않고 계속 보존할 수 있을 지 고민하기
  2. 해당 모델을 CoreML을 이용해 ios device에서 실행시킬 수 있도록 swift 이식하기.
profile
ML & iOS 공부하는 학생입니다

0개의 댓글