TensorFlow中的語義分割套件
描述
該存儲庫用作語義細分套件。目標是輕松實現,訓練和測試新的語義細分模型!完成以下內容:
- 訓練和測試方式
- 資料擴充
- 幾種最先進的模型。輕松隨插即用
- 能夠使用任何數據集
- 評估包括准確性,召回率,f1得分,平均准確性,每類准確性和平均IoU
- 繪制損失函數和准確性
歡迎提出任何改進此存儲庫的建議,包括希望看到的任何新細分模型。
也可以簽出Transfer Learning Suite。
引用
如果發現此存儲庫有用,請考慮使用回購鏈接將其引用:)
前端
當前提供以下特征提取模型:
模型
當前提供以下細分模型:
- 基於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)
類 |
原始精度 |
准確性 |
天空 |
93.0 |
94.1 |
建造 |
83.0 |
81.2 |
極 |
37.8 |
38.3 |
路 |
94.5 |
97.5 |
路面 |
82.2 |
87.9 |
樹 |
77.3 |
75.5 |
標志符號 |
43.9 |
49.7 |
圍欄 |
37.1 |
69.0 |
汽車 |
77.3 |
87.0 |
行人 |
59.6 |
60.3 |
單車 |
50.5 |
75.3 |
未貼標簽 |
不適用 |
40.9 |
全球 |
91.5 |
89.6 |
損失與時代 |
值 累積 vs時代 |