Home [논문 코드 구현] PointCNN: Convolution on X-transformed points
Post
Cancel

[논문 코드 구현] PointCNN: Convolution on X-transformed points

pointCNN 깃허브에 올라와 있는 코드를 직접 실행하고 리뷰한 내용입니다. 모든 코드는 colab에서 진행하였습니다.

논문에 대한 리뷰가 궁금하신 분들은 이 링크를 참고해주세요.

PointCNN 깃허브 주소: https://github.com/yangyanli/PointCNN


Classification

ModelNet40

먼저 분류 모델 중 ModelNet40에 대해서 코드를 실행해볼 것이다.


전체 코드

1
2
3
4
cd data_conversions
python3 ./download_datasets.py -d modelnet
cd ../pointcnn_cls
./train_val_modelnet.sh -g 0 -x modelnet_x3_l4
  1. 가장 먼저 pointcnn 깃허브를 클론한다.
1
!git clone https://github.com/yangyanli/PointCNN.git
  1. 그 후 블로그에 설명을 따라 data_conversions 경로로 들어간다.
1
!cd PointCNN/data_conversions/
  1. 지정되어 있는 argment를 따라 호출해준다.
1
!python3 /content/PointCNN/data_conversions/download_datasets.py -d modelnet 

주소는 깃허브에는 상대적 주소를 넣어놨는데, 실행해보니 안되서 절대주소로 넣었다. download_datasets.py를 실행시키는데, -d는 데이터셋 arg를 의미하고 modelnet에 대한 데이터셋을 다운받는다. 여기서 SSL 인증서에 대한 오류가 발생할 수도 있는데, 나의 경우 urllib3에 대한 오류와 request에 대한 오류 두 가지가 있었다.


urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host=’shapenet.cs.stanford.edu’, port=443): Max retries exceeded with url: /media/modelnet40_ply_hdf5_2048.zip (Caused by SSLError(SSLCertVerificationError(1, ‘[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1091)’)))

먼저 위와 같이 출력되는 urllib3에 대한 오류는 urllib3 라이브러리를 업데이트하면 해결된다.

1
!pip install urllib3==1.24.1


requests.exceptions.sslerror httpsconnectionpool(host=’’ port=443) max retries exceeded with url

그리고 위와 같이 출력되는 request에 대한 오류는 신뢰할 수 없는 SSL 인증서로 인해 발생되는거라고 한다. 이때는 코드에 verify=False 라고만 추가해주면 된다.

1
2
3
request.get(url)
#=====>
request.get(url,verify=False)
  1. train/val을 위한 세팅을 한다.

먼저 경로를 변경시켜준다.

1
2
!cd ..
!cd PointCNN/pointcnn_cls
1
2
3
!sh /content/PointCNN/pointcnn_cls/train_val_modelnet.sh -g 0 -x modelnet_x3_l4

# Train/Val with setting modelnet_x3_l4 on GPU 0!

이때도, 경로를 수정하여 실행했다.

  1. evaluation 진행

일단 가지고 있는 이미지 파일인 caltech_10을 사용하여 돌려보니

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
>>> python3 /content/PointCNN/evaluation/eval_s3dis.py -d /content/drive/MyDrive/data/caltech_10/
/content/drive/MyDrive/data/caltech_10/valid/bear/label.npy does not exist, skipping
/content/drive/MyDrive/data/caltech_10/valid/giraffe/label.npy does not exist, skipping
/content/drive/MyDrive/data/caltech_10/valid/ostrich/label.npy does not exist, skipping
/content/drive/MyDrive/data/caltech_10/valid/skunk/label.npy does not exist, skipping
/content/drive/MyDrive/data/caltech_10/valid/porcupine/label.npy does not exist, skipping
/content/drive/MyDrive/data/caltech_10/valid/.ipynb_checkpoints/label.npy does not exist, skipping
Found 0 predictions
Evaluating predictions:
Classes:	0	0	0	0	0	0	0	0	0	0	0	0	0
Positive:	0	0	0	0	0	0	0	0	0	0	0	0	0
True positive:	0	0	0	0	0	0	0	0	0	0	0	0	0
Traceback (most recent call last):
  File "/content/PointCNN/evaluation/eval_s3dis.py", line 72, in <module>
    print("Overall accuracy: {0}".format(sum(true_positive_classes)/float(sum(positive_classes))))
ZeroDivisionError: float division by zero

이미지 파일과 npy 파일을 가지고 있어야 eval을 진행할 수 있는 듯 했다.

This post is licensed under CC BY 4.0 by the author.