AVOD代码复现
參考文獻:
https://zhuanlan.zhihu.com/p/86340957
https://zhuanlan.zhihu.com/p/354842740
https://www.guyuehome.com/39798
https://zhuanlan.zhihu.com/p/40271319
1,配置環境
conda create -n avod python=3.5 conda install tensorflow-gpu=1.3.0 conda install matplotlib conda install -c conda-forge opencv conda install pandas conda install pillow conda install scipy pip3 install -U scikit-learn1.1 解決conda install py-opencv 時出現 failed with initial frozen solve. Retrying with flexible solve 的問題
pip3 install --upgrade pippip install opencv-python1.2 import tensorflow TypeError: init() got an unexpected keyword argument 'serialized_options
conda remove tensorflow-gpu pip uninstall tensorflow conda install tensorflow-gpu=1.3.0重裝tensorflow,版本沖突
2,下載代碼編譯代碼
代碼地址:https://github.com/Qin-xs/avod_Re
2.1 wavedata依賴庫
它的目錄在 wavedata/wavedata/tools/core/lib 中,在lib文件夾下按順序執行下列指令
conda activate avod cd src cmake .. make2.2 protobuf文件
protobuf是google的一個開源的用來做數據通信的庫,關于它的介紹大家有興趣可以去網上查。在avod/protos文件中有很多.proto文件,這些文件定義了通信用的數據內容和格式,但是想在程序中使用他們,得使用protobuf對他們進行編譯,給每個.proto文件生成一個python文件。編譯也很簡單,執行下面一條指令就行.
protoc avod/protos/*.proto --python_out=執行中之后會提示你有語法錯誤,不用管他,看avod/protos文件中是否生成了python文件,只要生成了,這一步就可以結束了。
3 配置環境
工程是基于python編寫的,定義了很多模塊,這些模塊之間需要互相調用,但各個模塊又是相對獨立的,所以需要把各個模塊的路徑添加到python的環境變量中,以方便他們之間互相調用。
在終端輸入這條指令打開設置環境變量的文件
sudo vim ~/.bashrc在文件的最后輸入添加下面兩行(注意,這里面的路徑是絕對路徑,這是我電腦里的路徑,大家要根據自己電腦的存放路徑來改)
export PYTHONPATH=$PYTHONPATH:'/home/siat/project/project_detect/avod_Re/wavedata' export PYTHONPATH=$PYTHONPATH:'/home/siat/work/object_detection/avod_Re-master'配置環境變量以后,為了讓它生效,需要重新打開終端,然后再使用如下指令重新進入anaconda環境
source ~/.bashrc conda activate avod4, 準備數據集
4.1 下載數據集
https://www.cvlibs.net/datasets/kitti/eval_object.php?obj_benchmark=3d
4.2 下載附加文件
這個附加數據文件包括兩部分:
trainval.txt、train.txt、val.txt:這三個文件幫助程序把訓練數據又重新分為訓練集和驗證集
planes:這個是作者自己生成的路面平面擬合參數,它的用處等我們后面講詳細代碼時再講
下載地址為:https://drive.google.com/drive/folders/1yjCwlSOfAZoPNNqoMtWfEjPCfhRfJB-Z
4.3 整理數據目錄
程序讀取文件是按照一定的目錄結構讀取的,它們的目錄結構如下圖:
要注意的是,testing和training中都有image_2、velodyne兩個文件夾,但它們的內容是不同的,分別是測試集和訓練集中的內容,而它們都有的calib、label_2兩個文件夾中的內容是相同的。
object文件夾放在~/Kitti/文件夾中,這是程序默認的,如果不想放這個目錄里,得修改程序,所以我們先不找這個麻煩了,就先放這了。
mkdir -p ~/Kitti/object/5,生成Mini-batch
Mini-batch 是 RPN 所需要的東西,在終端中輸入如下指令即可生成
python scripts/preprocessing/gen_mini_batches.py執行過程需要幾分鐘,等一等吧。
如果成功,會在avod/data目錄下生成label_clusters和mini_batches兩個文件夾
終端會顯示下面的圖像
6,訓練
一條指令啟動訓練
python avod/experiments/run_training.py --pipeline_config=avod/configs/pyramid_cars_with_aug_example.config --device='0' --data_split='train'終端會顯示以下圖像:
在我的電腦配置下需要執行十幾個小時左右,跑一晚上就好了,我的電腦GPU型號是:GTX 3090
7,驗證
執行如下命令:
python avod/experiments/run_evaluation.py --pipeline_config=avod/configs/pyramid_cars_with_aug_example.config --device='0' --data_split='val'如果這時候會提示如下信息
INFO:tensorflow:No new checkpoints found in /home/avod/avod/data/outputs/pyramid_cars_with_aug_example/checkpoints. Will try again in 30 seconds
第一種解決方法:
在avod/configs/pyramid_cars_with_aug_example.config 里面將pyramid_cars_with_aug_example/改為pyramid_cars_with_aug_example/checkpoints/
失敗
第二種解決方法:
將avod/core/evaluator.py #449 pyramid_cars_with_aug_example,然后把它改成你自己outputs下的真實文件夾名字就行
在我的電腦配置下需要執行30小時左右
接著等吧
執行完以后使用下面的指令調用tensorboard畫出訓練過程中的各個指標的變化趨勢
conda install -c conda-forge tensorboard cd avod/data/outputs/pyramid_cars_with_aug_example tensorboard --logdir logs7.2 TensorFlow錯誤:TypeError: init() got an unexpected keyword argument ‘serialized_options’
問題其實很簡單,TensorFlow和protobuf的版本不匹配,
pip install -U protobuf7.3 AttributeError: module ‘tensorflow.python.estimator.estimator_lib’ has no attribute ‘SessionRunHook’
問題其實很簡單,TensorFlow和tensorboard的版本不匹配,
tensorboard 1.15.0
tensorflow 1.3.0
居然成功
注意,這只是調用了tensorboard,輸入指令以后終端會給出如下提示
這告訴我們,如果想看變化趨勢的曲線,需要在瀏覽器中打開終端提示的網址,我的曲線如下圖所示
我們可以看到,里面有rpn_loss、avod_loss等指標的變化趨勢(感覺跳動有點大)
8, Inference
執行run inference,執行這一步是干啥的,暫時還不清楚
python avod/experiments/run_inference.py --checkpoint_name='pyramid_cars_with_aug_example' --data_split='val' --ckpt_indices=120 --device='0'9, 查看結果
這一步是生成帶預測框的2d圖片,輸入指令
python demos/show_predictions_2d.py會生成圖片,自動存放在文件夾avod/data/outputs/pyramid_cars_with_aug_example/predictions/images_2d/predictions/val/120000/0.1中
這里放幾張圖片看下效果吧
到這里,就完成網絡所有的訓練和使用流程了。
總結
- 上一篇: HTTP防病毒网关(包括UTM)存在的问
- 下一篇: linux串口驱动