三次元点群インスタンスセグメンテーション Mask3D   -デモ編-【Python】

スポンサーリンク
スポンサーリンク

はじめに

前回までは CenterSnap をカスタムデータで推論する方法について説明しました。
リアルデータでは推論できませんでしたが…。

今回は、Mask3D を動かすための環境を構築し、デモを動かすまでの方法について説明します。

Mask3D の github はこちらです。

前提条件

前提条件は以下の通りです。

  • Ubuntu22.04
  • こちらの記事を参考に Docker がインストールされていること

データセットの準備

Stanford データセットはこちらの github からダウンロードできます。

こちらの issues でエラーが報告されています。

The unnormal number occurs in Line 323474 of the file S3DIS/Stanford3dDataset_v1.2/Area_5/office_19/Annotations/ceiling_1.txt
Correct the number 103.0�0000 to 103.000000.

なので、データをダウンロードしたら手動で修正する必要があります。

S3DIS/Stanford3dDataset_v1.2/Area_5/office_19/Annotations/ceiling_1.txt
の 323474 行目を修正してください。

NVIDIA image の pull

docker pull nvidia/cuda:11.3.1-cudnn8-devel-ubuntu20.04

image を指定して Docker を起動

docker images

docker images で表示される IMAGE ID を控えておきます。

docker run -it --gpus all --name "mask3d" -p 8888:8888 --shm-size 12G <IMAGE ID>

–shm-size は PC に合わせて設定してください。

環境構築

apt update
apt upgrade
apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev wget libbz2-dev git nano wget 

apt install python3-dev python3-setuptools python3-pip

apt install build-essential libopenblas-dev
python3 -m pip install -U pip
pip3 install ninja python-dotenv
pip3 install torch==1.12.1+cu113 torchvision==0.13.1+cu113 --extra-index-url https://download.pytorch.org/whl/cu113
pip3 install torch-scatter -f https://data.pyg.org/whl/torch-1.12.1+cu113.html
pip3 install 'git+https://github.com/facebookresearch/detectron2.git@710e7795d0eeadf9def0e7ef957eea13532e34cf' --no-deps

git clone --recursive https://github.com/JonasSchult/Mask3D.git

cd Mask3D\third_party

git clone --recursive "https://github.com/NVIDIA/MinkowskiEngine"
cd MinkowskiEngine
git checkout 02fc608bea4c0549b0a7b00ca1bf15dee4a0b228
MAX_JOBS=1
python setup.py install --force_cuda --blas=openblas

cd ..
git clone https://github.com/ScanNet/ScanNet.git
cd ScanNet/Segmentator
git checkout 3e5726500896748521a6ceb81271b0f5b2c0e7d2
make

cd Mask3D/pointnet2
python setup.py install

cd ../../
pip3 install pytorch-lightning==1.7.2


python3 -m pip install iopath==0.1.9 pycocotools hydra-core>1.1 scipy>1.5.1 pydot matplotlib future cloudpickle fvcore==0.1.5.post20221221 black==21.4b2 

python3 -m pip install fire loguru natsort scikit-learn plyfile pyviz3d trimesh torchmetrics==0.11.4 pillow==9.5.0 albumentations volumentations wandb
python3 -m pip uninstall opencv-python-headless opencv-python
python3 -m pip cache purge
python3 -m pip install opencv-python

apt-get install libgl1-mesa-dev 
apt-get install libglib2.0-0

これで環境構築は終わりです。

コード変更

Mask3d.py 71行目

self.backbone = hydra.utils.instantiate(config.backbone)
↓
self.backbone = hydra.utils.instantiate(config).backbone

上記を変更しないと、

Error in call to target 'models.mask3d.Mask3D':
InstantiationException('Cannot instantiate config of type Res16UNet34C.\nTop level config must be an OmegaConf DictConfig/ListConfig object,\na plain dict/list, or a Structured Config class or instance.')
full_key: model

といったエラーが出力されます。

データセットの前処理

python3 -m datasets.preprocessing.s3dis_preprocessing preprocess --data_dir="../s3dis/Stanford3dDataset_v1.2" --save_dir="data/processed/s3dis"
export HYDRA_FULL_ERROR=1
python3 -m pip install numpy==1.20.3

学習コマンド

CURR_AREA=1
CURR_DBSCAN=0.6
CURR_TOPK=10
CURR_QUERY=10
python3 main_instance_segmentation.py   general.project_name="s3dis"   general.experiment_name="area${CURR_AREA}_from_scratch"   data.batch_size=4   data/datasets=s3dis   general.num_targets=14   data.num_labels=13   trainer.max_epochs=1001   general.area=${CURR_AREA} trainer.check_val_every_n_epoch=10

学習済みモデルのダウンロード

wget https://omnomnom.vision.rwth-aachen.de/data/mask3d/checkpoints/s3dis/from_scratch/area1_from_scratch.ckpt

学習済みモデルをテスト

python3 main_instance_segmentation.py \
general.project_name="s3dis_eval" \
general.experiment_name="area${CURR_AREA}_from_scratch_eps_${CURR_DBSCAN}_topk_${CURR_TOPK}_q_${CURR_QUERY}" \
general.checkpoint="checkpoints/s3dis/from_scratch/area${CURR_AREA}.ckpt" \
general.train_mode=false \
data.batch_size=2 \
data/datasets=s3dis \
general.num_targets=14 \
data.num_labels=13 \
general.area=${CURR_AREA} \
model.num_queries=${CURR_QUERY} \
general.topk_per_image=${CURR_TOPK} \
general.use_dbscan=true \
general.dbscan_eps=${CURR_DBSCAN}

出力される結果は以下のようになります。

################################################################
what           :             AP         AP_50%         AP_25%
################################################################
ceiling        :          0.050          0.057          0.057
floor          :          0.056          0.056          0.056
wall           :          0.075          0.101          0.108
beam           :          0.245          0.283          0.283
column         :          0.050          0.053          0.053
window         :          0.615          0.690          0.690
door           :          0.294          0.301          0.314
table          :          0.063          0.088          0.100
chair          :          0.141          0.164          0.209
sofa           :          0.352          0.500          0.500
bookcase       :          0.108          0.149          0.188
board          :          0.185          0.185          0.259
clutter        :          0.056          0.098          0.136
----------------------------------------------------------------
average        :          0.176          0.210          0.227

多分再現できていませんね…。

おわりに

今回は Mask3D をテストしました。

今後は、点群を使用した物体認識やセグメンテーションに関して調査していければと思います。

コメント

タイトルとURLをコピーしました