TensorFlow中的语义分割套件
TensorFlow中的語義分割套件
描述
該存儲庫用作語義細分套件。目標是輕松實現,訓練和測試新的語義細分模型!完成以下內容:
訓練和測試方式
資料擴充
幾種最先進的模型。輕松隨插即用
能夠使用任何數據集
評估包括準確性,召回率,f1得分,平均準確性,每類準確性和平均IoU
繪制損失函數和準確性
歡迎提出任何改進此存儲庫的建議,包括希望看到的任何新細分模型。
也可以簽出Transfer Learning Suite。
引用
如果發現此存儲庫有用,請考慮使用回購鏈接將其引用:)
前端
當前提供以下特征提取模型:
MobileNetV2,ResNet50 / 101/152和InceptionV4
模型
當前提供以下細分模型:
基于SegNet的編解碼器。該網絡使用VGG樣式的編碼器/解碼器,其中解碼器中的升采樣是使用轉置卷積完成的。
具有基于SegNet的跳過連接的編解碼器。該網絡使用VGG樣式的編碼器/解碼器,其中解碼器中的升采樣是使用轉置卷積完成的。另外,采用從編碼器到解碼器的附加跳過連接。
用于語義分割的移動UNet。將MobileNets深度可分離卷積與UNet的思想相結合,以建立一個高速,低參數的語義分割模型。
金字塔場景解析網絡。在本文中,通過金字塔池模塊以及所提出的金字塔場景解析網絡(PSPNet)來應用基于不同區域的上下文聚合的全局上下文信息的功能。請注意,原始的PSPNet使用具有擴展卷積的ResNet,但是一個是此存儲庫僅具有常規ResNet。
The One Hundred Layers Tiramisu:用于語義分割的完全卷積DenseNet。使用下采樣-上采樣樣式的編碼器-解碼器網絡。每個階段(即池化層之間的階段)都使用密集塊。此外,還連接了從編碼器到解碼器的跳過連接。在代碼中,這是FC-DenseNet模型。
對Atrous卷積語義圖像分割的再思考。這是DeepLabV3網絡。使用Atrous空間金字塔池通過使用多個atrous速率來捕獲多尺度上下文。這產生了一個大的接受場。
RefineNet:用于高分辨率語義分割的多路徑優化網絡。一個多路徑優化網絡,該網絡顯式地利用降采樣過程中的所有可用信息,以實現使用遠程殘差連接的高分辨率預測。這樣,可以使用早期卷積中的細粒度特征直接完善捕獲更深層的高級語義特征。
用于街道場景語義分割的全分辨率殘差網絡。通過使用網絡中的兩個處理流,將多尺度上下文與像素級精度結合在一起。殘留流以全圖像分辨率傳輸信息,從而可以精確地遵守分割邊界。池化流經過一系列池化操作以獲得可靠的功能以進行識別。兩個流使用殘差以全圖像分辨率耦合。在代碼中,這是FRRN模型。
大內核問題-通過全球卷積網絡改進語義分割。提出了一個全球卷積網絡來解決語義分割的分類和本地化問題。使用較大的可分離內核擴展接收場,并使用邊界細化塊進一步提高邊界附近的定位性能。
AdapNet:不利環境條件下的自適應語義分段通過使用具有無規則卷積的多尺度策略執行較低分辨率的處理,來修改ResNet50體系結構。這是使用雙線性放大而不是轉置卷積的稍微修改的版本,因為發現給出了更好的結果。
ICNet用于高分辨率圖像的實時語義分割。提出了一種基于壓縮PSPNet的圖像級聯網絡(ICNet),該網絡在適當的標簽指導下合并了多分辨率分支,以應對這一挑戰。大多數處理都是在低分辨率下高速完成的,多尺度輔助損耗有助于獲得準確的模型。請注意,對于此模型,已經實現了網絡,但尚未集成其訓練
帶有可分解卷積的編解碼器用于語義圖像分割。這是DeepLabV3 +網絡,在常規DeepLabV3模型的頂部添加了解碼器模塊。
DenseASPP在街道場景中的語義分割。使用膨脹卷積結合密集連接的多種不同尺度
用于單通語義分割的密集解碼器快捷連接。在細分模型的解碼器階段使用密集連接的密集解碼器快捷連接。注意:由于ResNeXt模塊的構造,該網絡需要花費一些額外的時間來加載
BiSeNet:用于實時語義分割的雙邊分割網絡。BiSeNet使用步幅較小的空間路徑來保存空間信息并生成高分辨率特征,同時使用具有快速下采樣策略的并行上下文路徑來獲得足夠的接收場。
或者自己制作并即插即用!
文件和目錄
train.py:對選擇的數據集進行訓練。默認為CamVid
test.py:在選擇的數據集上進行測試。默認為CamVid
predict.py:使用新近訓練的模型對單個圖像進行預測
helper.py:快速助手功能,用于數據準備和可視化
utils.py:用于打印,調試,測試和評估的實用程序
models:包含所有模型文件的文件夾。使用來構建模型,或使用預先構建的模型
CamVid:用于語義分割的CamVid數據集作為測試平臺。這是32類版本
checkpoints:訓練期間每個時期的檢查點文件
Test:測試結果包括圖像,每類準確性,準確性,召回率和f1分數
安裝
該項目具有以下依賴性:
Numpy的 sudo pip install numpy
OpenCV Python sudo apt-get install python-opencv
TensorFlow sudo pip install --upgrade tensorflow-gpu
用法
唯一要做的就是按照以下結構設置文件夾:
├── “dataset_name”
|
├── train
|
├── train_labels
|
├── val
|
├── val_labels
|
├── test
|
├── test_labels
將一個文本文件放在數據集目錄下,稱為“class_dict.csv”,其中包含類列表以及R,G,B顏色標簽,以可視化分割結果。這種字典通常隨數據集一起提供。這是CamVid數據集的示例:
name,r,g,b
Animal,64,128,64
Archway,192,0,128
Bicyclist,0,128, 192
Bridge,0, 128, 64
Building,128, 0, 0
Car,64, 0, 128
CartLuggagePram,64, 0, 192
Child,192, 128, 64
Column_Pole,192, 192, 128
Fence,64, 64, 128
LaneMkgsDriv,128, 0, 192
LaneMkgsNonDriv,192, 0, 64
Misc_Text,128, 128, 64
MotorcycleScooter,192, 0, 192
OtherMoving,128, 64, 64
ParkingBlock,64, 192, 128
Pedestrian,64, 64, 0
Road,128, 64, 128
RoadShoulder,128, 128, 192
Sidewalk,0, 0, 192
SignSymbol,192, 128, 128
Sky,128, 128, 128
SUVPickupTruck,64, 128,192
TrafficCone,0, 0, 64
TrafficLight,0, 64, 64
Train,192, 64, 128
Tree,128, 128, 0
Truck_Bus,192, 128, 192
Tunnel,64, 0, 64
VegetationMisc,192, 192, 0
Void,0, 0, 0
Wall,64, 192, 0
注意:如果使用的是依賴于預訓練的ResNet的任何網絡,則需要使用提供的腳本下載預訓練的權重。當前是:PSPNet,RefineNet,DeepLabV3,DeepLabV3 +,GCN。
然后,可以簡單地運行train.py!查看可選的命令行參數:
usage: train.py [-h] [–num_epochs NUM_EPOCHS]
[–checkpoint_step CHECKPOINT_STEP]
[–validation_step VALIDATION_STEP] [–image IMAGE]
[–continue_training CONTINUE_TRAINING] [–dataset DATASET]
[–crop_height CROP_HEIGHT] [–crop_width CROP_WIDTH]
[–batch_size BATCH_SIZE] [–num_val_images NUM_VAL_IMAGES]
[–h_flip H_FLIP] [–v_flip V_FLIP] [–brightness BRIGHTNESS]
[–rotation ROTATION] [–model MODEL] [–frontend FRONTEND]
optional arguments:
-h, --help show this help message and exit
–num_epochs NUM_EPOCHS Number of epochs to train for
–checkpoint_step CHECKPOINT_STEP How often to save checkpoints (epochs)
–validation_step VALIDATION_STEP How often to perform validation (epochs)
–image IMAGE The image you want to predict on. Only valid in “predict” mode.
–continue_training CONTINUE_TRAINING Whether to continue training from a checkpoint
–dataset DATASET Dataset you are using.
–crop_height CROP_HEIGHT Height of cropped input image to network
–crop_width CROP_WIDTH Width of cropped input image to network
–batch_size BATCH_SIZE Number of images in each batch
–num_val_images NUM_VAL_IMAGES
The number of images to used for validations
–h_flip H_FLIP Whether to randomly flip the image horizontally for data augmentation
–v_flip V_FLIP Whether to
randomly flip the image vertically for data augmentation
=–brightness BRIGHTNESS Whether to randomly
change the image brightness for data augmentation.
Specifies the max bightness change as a factor between 0.0
and 1.0. For example, 0.1 represents a max brightness change of
10% (±).
–rotation ROTATION Whether to randomly rotate the image for data augmentation. Specifies the max rotation angle in degrees.
–model MODEL The model you are using. See model_builder.py
for supported models
–frontend FRONTEND The frontend you are using. See frontend_builder.py for supported models
結果
這些是帶有11個類的CamVid數據集的一些示例結果(先前的研究版本)。
在訓練中,使用的批處理大小為1,圖像大小為352x480。以下結果適用于訓練了300個紀元的FC-DenseNet103模型。使用RMSProp的學習速率為0.001,衰減率為0.995。沒有像本文中那樣使用任何數據增強。也沒有使用任何類平衡。這些只是一些快速而骯臟的示例結果。
請注意,檢查點文件未上傳到此存儲庫,因為對于GitHub太大(大于100 MB)
總結
以上是生活随笔為你收集整理的TensorFlow中的语义分割套件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PyTorch中的MIT ADE20K数
- 下一篇: Json文件解析(上)