はじめに
前回までは 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 をテストしました。
今後は、点群を使用した物体認識やセグメンテーションに関して調査していければと思います。
コメント