본문 바로가기

프로그래밍/종합설계 딥러닝 프로젝트

SUNRGBD 데이터셋으로 FCAF3D(딥러닝)모델 학습하기

SUNRGBD 데이터란?

4개의 서로 다른 센서로 캡처되며 PASCAL VOC와 비슷한 규모로 10,000개의 RGB-D (D는 Depth 정보)이미지를 포함합니다. 전체 데이터 세트는 조밀하게 주석이 달려 있으며 정확한 객체 방향이 있는 146,617개의 2D 사각형과 58,657개의 3D 바운딩 박스, 장면에 대한 3D 공간 레이아웃 및 범주를 포함합니다.

이 데이터 세트를 사용하면 검출작업을 위해 데이터가 많이 필요한 알고리즘을 훈련하고, 직접적이고 의미 있는 3D 매트릭을 사용하여 평가하고, 소규모 테스트 세트에 대한 과적합(overfitting)을 방지할수 있습니다.

그래서 실내 딥러닝 3D Detection 을 할때 가장 많이 사용되는 데이터셋중 하나입니다. 오늘은 이 데이터셋을 다루는 법을 확인해보고 추후에는 내가 직접만든 데이터를 사용하여 딥러닝 모델을 학습시키기 위해 SUNRGBD 데이터 형식으로 바꾸는방법을 리뷰하겠습니다.

 

이 프로젝트는 GPU사용이 가능한 우분투 환경에서 작업하였습니다.

 

아래 링크를 통해 SUNRGBD V1 압축파일을 다운로드 받아주세요.

https://rgbd.cs.princeton.edu/ 

 

SUN RGB-D: A RGB-D Scene Understanding Benchmark Suite

Although RGB-D sensors have enabled major breakthroughs for several vision tasks, such as 3D reconstruction, we haven not achieved a similar performance jump for high-level scene understanding. Perhaps one of the main reasons for this is the lack of a benc

rgbd.cs.princeton.edu

 

그리고 PC에 FCAF3D 파일을 다운받습니다.

https://github.com/SamsungLabs/fcaf3d

 

GitHub - SamsungLabs/fcaf3d: [ECCV2022] FCAF3D: Fully Convolutional Anchor-Free 3D Object Detection

[ECCV2022] FCAF3D: Fully Convolutional Anchor-Free 3D Object Detection - GitHub - SamsungLabs/fcaf3d: [ECCV2022] FCAF3D: Fully Convolutional Anchor-Free 3D Object Detection

github.com

 

다운받은 SUNRGBD 데이터.

SUNRGBD V1 압출 파일을 풀고 나온

SUNRGBD, SUNRGBDMeta2DBB_v2.mat, SUNRGBDMeta3DBB_v2.mat, SUNRGBDtoolbox 파일을 FCAF3D 폴더내의 OFFICIAL_SUNRGBD 폴더로 옮겨줍니다.

 

FCAF3D 폴더에서 Matlab 폴더에 있는 3개의 matlab 코드를 돌리면 오른쪽과 같이 sunrgbd_trainval폴더가 만들어지고
Calib,depth,image,label 폴더와 idx.txt(인덱스) 파일이 만들어집니다. 여기서 중요한것이 이 데이터 형식대로만 만들면

내가 만든 데이터를 딥러닝 모델로 학습시킬수 있다는 것입니다.

Calib 데이터 형식부터 보겠습니다.

 

Calib 데이터 형식

 

Calib폴더에 txt파일은 카메라에 대한 정보가 들어있습니다.

1번줄:R’tilt( 카메라의 오른쪽으로 기운정도)
2번줄:카메라 내부 intrinsic 값

 

 

depth 데이터 형식

depth폴더에는 mat파일은 pointcloud 정보가 들어있습니다.( 순서대로 x,y,z,r,g,b 값 )

 

image 데이터 형식

image폴더에 파일은 jpg 파일이 있습니다.

 

label 데이터 형식

label폴더에 txt파일은 물체에대한 annotation값이 들어있고 이 정보로 모델은 학습을 합니다. (정답지라고 보시면 됩니다.)

순서대로 라벨이름 2D bounding box 정보, x좌표,y좌표,z좌표,length,width,height,cos,sin 값입니다.

 

idx.txt 데이터 형식

id.x.txt파일은 train,evaluation을 할 데이터를 나누는 파일이고 해당 데이터의 인덱스가 나열돼 있네요.

 

이제 python tools/create_data.py sunrgbd --root-path ./data/sunrgbd --out-dir ./data/sunrgbd --extra-tag sunrgbd

명령어를 터미널에 입력하면 index한 정보에 대해서 train,val 정보를 담은 pickle파일과 points폴더가 만들어집니다.

 

python tools/create_data.py 실행시킨 모습

Points폴더에는 binary파일이 저장되는데 이것은 depth정보를 압축한 형태입니다.(용량이 반으로 줍니다.)

pkl파일은 학습에 필요한 annotation정보들이(label) 담기게 되고 앞서 points(depth)정보와 같이 모델로 불러와서 학습을 진행하게 되는 것입니다.

 

이제 드디어 FCAF3D 모델을 학습할 준비가 끝났습니다.

 

tools/train.py configs/fcaf3d/fcaf3d_sunrgbd-3d-10class.py 명령을 터미널에 입력하여 모델을 학습시켜 봅시다.

tools/train.py을 실행 시킨모습

학습이 잘 진행되는 모습이네요. 저는 처음은 SUNRGBD 대표 데이터인 책상, 침대, 테이블 등 10가지 클래스에 대해서 학습 시켜보았고 그결과는 논문과 거의 일치하는 값이 나왔습니다. 그런데 저는 사과를 학습시킬 것이기 때문에 작은 물체에 대한 Precision값이 중요했습니다. 그래서 작은 물체들을 10개 뽑아서 돌려보았는데요. 결과는 다음과 같습니다.

 

small object의 낮은 AP(average precision)

작은 물체에 대해서는 0.1AP 밖에 되지 않네요.

이문제를 어떻게 해결하였는지와 내가 만든 데이터를 SUNRGBD화 시키는 것에 대해서는 다음 포스팅에서 리뷰하겠습니다.

감사합니다.