基于darknet的圖像語義分割算法
- 1、資料集
- 2、網絡架構
- 3、網絡訓練
- 4、結果檢測
本文介紹基于darknet的語義分割,語義分割,顧名思義是将目标圖檔進行區域劃分,具體操作是對圖檔進行像素級别的分類,使用darknet的原因是架構本身由标準c所寫,對嵌入式更友好,同時在底層代碼的修改上更加友善。
代碼開源位址: https://github.com/zhengshoujian/darknet-yolo-segmentation, 有做相關研究的同學看到開源代碼,表示感興趣并邀我寫一篇blog以作分享,如果覺得我的blog有用,請給我的github項目點star,謝謝!!!
1、資料集
這裡使用的分割算法應用場景是車輛的語義分割,資料集選擇了奔馳公司所開源的cityscapes資料集,網址:https://www.cityscapes-dataset.com/, 使用學生賬号(學校提供的郵箱)是可以直接注冊下載下傳,本文使用的是資料集中精細标注的5000張圖檔。
2、網絡架構
網絡結構類似于segnet,結構如下圖:
3、網絡訓練
訓練部分後續再進行更新。
4、結果檢測
原圖如下:
使用指令行進行二值圖輸出:"./darknet segmenter test the/path/to/cfg/data the/path/to/cfg/file the/path/to/weights/files the/path/to/image "
擷取結果如下圖:
擷取mask方法: 1、對輸出二值圖周遊 2、設定門檻值 3、輸出二值圖中結果超過門檻值的點,在原圖中綠色通達值增加100後擷取得到綠色的mask.
代碼如下:
import cv2
def mask(img,img1):
height,width, c = img1.shape
for c in range(c):
for i in range(0, height):
for j in range(0, width):
if(img[i,j] >90):
#here 90 is Threshold for heatmap
#print im1[i,j]
img1[i,j,1] = 100+img1[i,j,1]
cv2.imwrite("result.png",img1)
return img1
im = cv2.imread("pred.png",cv2.IMREAD_GRAYSCALE)
im1 = cv2.imread("orig.png")
if __name__ == '__main__':
mask(im,im1)
運作上述代碼擷取結果如下:
本文是初版,第一次寫blog,内容不是非常詳盡,如果有問題給我留言,如果我能夠解答的話,必定知無不言。