# Centerfusion on Windows ###### tags: `Centerfusion` ```gherkin= conda create -n env1 python=3.7 conda activate env1 pip install torch==1.7.1+cu110 torchvision==0.8.2+cu110 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html pip install cython pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI git clone https://github.com/mrnabati/CenterFusion.git cd CenterFusion pip install -r requirements.txt git clone https://github.com/lbin/DCNv2.git # DCNv2 要放進 D:\CenterFusion\src\lib\model\networks cd D:\CenterFusion\src\lib\model\networks\DCNv2 sh make.sh ``` 最後出現 Finished processing dependencies for DCNv2==0.1 為成功 ## 數據下载 官網 : https://www.nuscenes.org/download ![](https://i.imgur.com/VngLM8v.png) CenterFusion/data 路徑下新建一個 【nuscenes】文件夾 把剛剛的資料解壓縮進去 ### 修改 在 CenterFusion/src/tools/convert_nuScenes.py 文件中要做以下修改 #### ( 1 ) splits改為剩這兩行 ![](https://i.imgur.com/eP41o7s.png) #### ( 2 ) num_sweeps=3 ![](https://i.imgur.com/KhpMzKB.png) 接著運行代碼 ```gherkin= cd D:\CenterFusion\src\tools python convert_nuScenes.py ``` 成功後如下 多了最上面那個資料夾 ![](https://i.imgur.com/jqbKJH8.png) ## DEBUG可視化 把剛剛的 convert_nuScenes.py 裡的 DEBUG 改成 True ![](https://i.imgur.com/iz72mzc.png) 還有這裡 **pc_3d 改為 radar_pc**,因為 image_info 沒有屬性 pc_3d,而是 radar_pc ![](https://i.imgur.com/ot5kpSf.png) 執行 convert_nuScenes.py 之後,會在同目錄下生成 3 張圖片, 一個是點雲圖,一個是 3D Box 框,還有一個是 nuscenes-devkit 庫生成的可視化圖片 ## 預訓練模型下載 下載兩個模型: ①centerfusion_e60:[載點](https://drive.google.com/uc?export=download&id=1XaYx7JJJmQ6TBjCJJster-Z7ERyqu4Ig) ②centernet_baseline_e170:[載點](https://drive.google.com/uc?export=download&id=1iFF7a5oueFfB5GnUoHFDnntFdTst-bVI) 然後將其解壓縮到 CenterFusion/models 文件夾中即可 ## Train CenterFusion/src/main.py 項目訓練執行文件詳解 : [可乐有点好喝](https://blog.csdn.net/ssj925319/article/details/124502583) 參數修改: 在訓練之前需要修改 train.sh 中的參數 (1)設置訓練集 train_split 的值,可選 train、mini_train 這兩個數據集,我選mini (2)設置測試集 val_split 的值,可選 val、mini_val、test 這三個數據集 (2)batch size 自行調整 (3)只配置了一個 gpu,所以參數由 gpu 0,1 改為 gpu 0 ,用了兩個 GPU 的話可以不用改 ![](https://i.imgur.com/xxK8YcR.png) ### debug 打開 envs/env1/lib/subprocess.py文件,修改第 410 行,將 check=True 改為 check=False 即可 (在你用的環境中找出subprocess.py來改,路徑不一定是這樣) ![](https://i.imgur.com/HQfHEHI.png) CenterFusion/src/tools/nuscenes-devkit 這個文件夾是空的,要自己手動去下載 ```gherkin= git clone https://github.com/nutonomy/nuscenes-devkit.git #取代原本的nuscenes-devkit ``` CenterFusion/src/lib/logger.py 文件中第 52 行 'w' 改為 'a' ```gherkin= self.log = open(log_dir + '/log.txt', 'w') ``` 這是是以寫的方式打開,每次寫的時候都會覆蓋原來文件中的內容,應該以追加的方式打開,應該將**參數 'w' 改為 'a'** 接下來開始訓練 ```gherkin= cd CenterFusion sh experiments/train.sh ``` **RuntimeError: cuDNN error: CUDNN_STATUS_EXECUTION_FAILED** 出現這個的話就是cuda cudnn pytorch不匹配 我的原因是雖然使用了下面的代碼 ```gherkin= pip install torch==1.7.1+cu110 torchvision==0.8.2+cu110 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html ``` 但是在環境中用下列代碼檢查後發現實際上下載到別的torchversion ```gherkin= cd\ python import torchvision torchvision.__version__#檢查torchversion版本 import torch torch.__version__#檢查pytorch版本 exit()#離開python ``` 使用以下代碼在環境中刪除並重新下載 ```gherkin= pip uninstall torchvision pip install torchvision==0.8.2+cu110 -f https://download.pytorch.org/whl/torch_stable.html ``` ### 訓練過程可視化 在 D:\CenterFusion\exp\ddd\centerfusion 中的 logs 文件可用來可視化 ![](https://i.imgur.com/K6fzwgx.png) ```gherkin= cd\ tensorboard --logdir=D:\CenterFusion\exp\ddd\centerfusion\logs_2022-08-04-13-37 ``` 然後會出現如下圖所示,注意紅框內容,接入這個默認端口就可以看到可視化內容 ![](https://i.imgur.com/by271MA.png) 複製網址貼到網頁就能看到訓練的各項變化 ![](https://i.imgur.com/ZpZ4zxR.png) AP:平均精度(平均檢測正確率) LR:學習率 Scores: NDS:mAP和錯誤度量的加權和 attr_err:平均屬性誤差 orient_err:平均方向誤差 scale_err:平均尺度誤差 trans_err:平均平移誤差 vel_err:平均速度誤差 ## Test CenterFusion/src/test.py 項目驗證執行文件詳解 : [可乐有点好喝](https://blog.csdn.net/ssj925319/article/details/124640954) :+1: **( 1 ) 第一行的值要和你設定的 gpus 一樣** **( 2 ) 設置驗證集 val_split 的值,可選 val、mini_val、test** ### 可視化 ( 選擇性,會降低 test 速度 ) D:\CenterFusion\experiments\test.sh 最後一行新增 `-- debug 4 \` ![](https://i.imgur.com/aLqAf3d.png) 修改 CenterFusion/src/lib/utils/debugger.py 第 424 行,如下,把四個 rect 值轉成 int ![](https://i.imgur.com/qOcOKDX.png) ### debug :::warning 在 Windows 中,多進程 multiprocessing 使用的是序列化 pickle 在多進程之間轉移數據,而 socket 對像是不能被序列化的,但是在 linux 操作系統上卻沒問題,因為在 linux 上多進程 multiprocessing 使用的是 fork,所以在 windows 上可以改用多線程。因為網絡通信屬於 io 密集型的操作,對 cpu 計算要求不高,**因此不用多進程,用多線程就行**。 ::: ``` TypeError: can't pickle module objects [W ..\torch\csrc\CudaIPCTypes.cpp:22] Producer process has been terminated before all shared CUDA tensors released. See Note [Sharing CUDA tensors] (env1) D:\CenterFusion>Using tensorboardX C:\Users\User\anaconda3\envs\env1\lib\site-packages\sklearn\utils\linear_assignment_.py:21: DeprecationWarning: The linear_assignment_ module is deprecated in 0.21 and will be removed from 0.23. Use scipy.optimize.linear_sum_assignment instead. DeprecationWarning) Traceback (most recent call last): File "<string>", line 1, in <module> File "C:\Users\User\anaconda3\envs\env1\lib\multiprocessing\spawn.py", line 105, in spawn_main exitcode = _main(fd) File "C:\Users\User\anaconda3\envs\env1\lib\multiprocessing\spawn.py", line 115, in _main self = reduction.pickle.load(from_parent) EOFError: Ran out of input ``` 作了以下修改 #### ( 1 ) test.sh 中的 num_workers 設 0 (單進程) #### ( 2 ) D:\CenterFusion\src\lib\opts.py 中的 num_workers 預設改為 0 ![](https://i.imgur.com/1m3lI1s.png) 做完這兩個一樣沒成功 後來發現還有這要改 #### ( 3 ) D:\CenterFusion\src\test.py 中的 num_workers = 0 ![](https://i.imgur.com/jPoADLH.png) 完成 debug #### 執行 test.sh ```gherkin= cd CenterFusion sh experiments\test.sh ``` ![](https://i.imgur.com/l5ARJv8.png) ![](https://i.imgur.com/1VgTqWz.png) ## 完整訓練 ### 下載 官網 : https://www.nuscenes.org/download 需要下載 Metadata,然後每個 part 只需要下載 Keyframe(關鍵幀數據)、Radar(毫米波雷達數據)、Camera(相機數據)這三個,Lidar(激光雷達數據)就不用下載,**共 10 個 part**。 ![](https://i.imgur.com/14hyInZ.png) ### Test 部分:下载 Metadata,再下载 Radar、Camera 即可 ![](https://i.imgur.com/nDfLnVb.png) 先在 CenterFusion/data 路徑下新建一個 【nuscenes】文件夾,然後將 tgz 壓縮包解壓到 nuscenes 文件夾中,它會自動分配到正確的位置。 ``` tar -zxvf .tgz壓縮包 -C 路徑 ``` **解壓完後 nuscenes 中的格式如下** ![](https://i.imgur.com/jZJ57ZQ.png) ### 源碼修改 在 CenterFusion/src/tools/convert_nuScenes.py 中 27 行要做以下修改 ``` SPLITS = { 'mini_val': 'v1.0-mini', 'mini_train': 'v1.0-mini', 'train': 'v1.0-trainval', 'val': 'v1.0-trainval', 'test': 'v1.0-test', } ``` 接著執行 convert_nuScenes.py 以完成轉換 最後會生成路徑 CenterFusion/data/nuscenes/annotations_3sweeps,該文件夾下存放著 COCO 格式的數據集 接著就可執行完整 datasets 的 train & test