摘要:介紹是谷歌使用基于開發的語義分割模型,至今已更新個版本。最新版本是,在此模型中進一步將深度可分離卷積應用到孔空間金字塔池化和解碼器模塊,從而形成更快,更強大的語義分割編碼器解碼器網絡。
介紹
DeepLab是谷歌使用tensorflow基于CNN開發的語義分割模型,至今已更新4個版本。最新版本是DeepLabv3+,在此模型中進一步將深度可分離卷積應用到孔空間金字塔池化和解碼器模塊,從而形成更快,更強大的語義分割編碼器-解碼器網絡。本文從官方案例出發,介紹如何訓練以及使用DeepLabv3+模型。
模型安裝1,下載tensorflow model,然后將解壓后的文件重命名為”models“并移動到tensorflow文件夾下。
2,添加環境變量
cd /anaconda3/lib/python3.6/site-packages/tensorflow/models/research
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim
3,測試是否安裝成功
cd /anaconda3/lib/python3.6/site-packages/tensorflow/models/research
python deeplab/model_test.py
結果出現如下錯誤:
解決方法如下:
下載數據:
cd /anaconda3/lib/python3.6/site-packages/tensorflow/models/research/deeplab/datasets/
sh download_and_convert_voc2012.sh
具體執行步驟:
下載并解壓VOC2012數據集
移除colormap
在數據集中創建TFRecord文件
下載預訓練模型官方提供了多種模型,可以根據自己的實際需求下載安裝。
使用PASCAL VOC2012數據集訓練文件結構:
tensorflow deeplab文件夾:
訓練:
cd /anaconda3/lib/python3.6/site-packages/tensorflow/models/research
填寫相關路徑,執行訓練
python deeplab/train.py --logtostderr --training_number_of_steps=30000 --train_split="train" --model_variant="xception_65" --atrous_rates=6 --atrous_rates=12 --atrous_rates=18 --output_stride=16 --decoder_output_stride=4 --train_crop_size=513 --train_crop_size=513 --train_batch_size=1 --dataset="pascal_voc_seg" --tf_initial_checkpoint=${PATH_TO_INITIAL_CHECKPOINT} --train_logdir=${PATH_TO_TRAIN_DIR} --dataset_dir=${PATH_TO_DATASET}
PATH_TO_INITIAL_CHECKPOINT:初始checkpoint文件路徑(遷移學習)
PATH_TO_TRAIN_DIR:訓練模型保存路徑
PATH_TO_DATASET:數據集路徑
需要注意的問題:
當GPU顯存不夠,使用遷移學習方式進行訓練并減少學習率大小,設置”fine_tune_batch_norm=False“
當設置”output_stride=8“,”atrous_rates“取值區間應由[6,12,18]改為[12,24,36]。
當不想使用解碼器結構,需要注釋掉”decoder_output_stride“。
驗證cd /anaconda3/lib/python3.6/site-packages/tensorflow/models/research
python deeplab/eval.py --logtostderr --eval_split="val" --model_variant="xception_65" --atrous_rates=6 --atrous_rates=12 --atrous_rates=18 --output_stride=16 --decoder_output_stride=4 --eval_crop_size=513 --eval_crop_size=513 --dataset="pascal_voc_seg" --checkpoint_dir=${PATH_TO_CHECKPOINT} --eval_logdir=${PATH_TO_EVAL_DIR} --dataset_dir=${PATH_TO_DATASET}
PATH_TO_CHECKPOINT:訓練階段checkpoint文件路徑
PATH_TO_EVAL_DIR:評估模型保存路徑
PATH_TO_DATASET:數據集路徑
cd /anaconda3/lib/python3.6/site-packages/tensorflow/models/research
python deeplab/vis.py --logtostderr --vis_split="val" --model_variant="xception_65" --atrous_rates=6 --atrous_rates=12 --atrous_rates=18 --output_stride=16 --decoder_output_stride=4 --vis_crop_size=513 --vis_crop_size=513 --dataset="pascal_voc_seg" --checkpoint_dir=${PATH_TO_CHECKPOINT} --vis_logdir=${PATH_TO_VIS_DIR} --dataset_dir=${PATH_TO_DATASET}
PATH_TO_CHECKPOINT:訓練階段checkpoint文件路徑
PATH_TO_VIS_DIR:評估模型保存路徑
PATH_TO_DATASET:數據集路徑
需要注意的問題:
當需要保存分割結果時,需要設置”also_save_raw_predictions = True“
tensorboard --logdir=${PATH_TO_LOG_DIRECTORY}
將同時顯示”train“,”eval“,”vis“結果,如需要多帶帶顯示一類,可以指定顯示類別,如:
tensorboard --logdir train/
對于voc2012這樣的數據集,Tensorboard顯示數據可能需要幾分鐘的時間。
模型導出cd /anaconda3/lib/python3.6/site-packages/tensorflow/models/research
python deeplab/export_model.py --logtostderr --checkpoint_path="${PATH_TO_CHECKPOINT}" --export_path="${PATH_TO_EXPORT_PD}" --model_variant="xception_65" --atrous_rates=6 --atrous_rates=12 --atrous_rates=18 --output_stride=16 --decoder_output_stride=4 --num_classes=21 --crop_size=513 --crop_size=513 --inference_scales=1.0
PATH_TO_CHECKPOINT:checkpoint文件路徑
PATH_TO_EXPORT_PD:導出PD文件路徑(加后綴.pd)
cd /anaconda3/lib/python3.6/site-packages/tensorflow/models/research/deeplab
sh local_test.sh
Google Colab在線測試地址,可選擇預訓練模型,測試分割照片來查看模型輸出結果。
總結基于深度學習的語義分割與傳統基于隨機森林的方法相比有了很大的進步,雖然目前基于深度學習的方法有多種思路,不過基本都是基于全卷積(FCN)衍變而來。FCN將網絡全連接層使用卷積替代,因此可以接受任意大小的輸入并且針對下采樣存在位置信息丟失等問題,采用轉置卷積用于恢復圖片尺寸,方便后續進行逐像素預測。
DeepLab模型為了改善分割效果,使用atrous卷積(空洞卷積),ASPP,全連接條件隨機場等技術。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/19926.html
閱讀 1378·2021-09-24 10:26
閱讀 1689·2019-08-30 14:14
閱讀 2098·2019-08-29 16:54
閱讀 362·2019-08-29 14:09
閱讀 1467·2019-08-29 12:55
閱讀 922·2019-08-28 18:13
閱讀 1572·2019-08-26 13:39
閱讀 2559·2019-08-26 11:43