天天看點

基于darknet的圖像語義分割算法1、資料集2、網絡架構3、網絡訓練4、結果檢測

基于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,結構如下圖:

基于darknet的圖像語義分割算法1、資料集2、網絡架構3、網絡訓練4、結果檢測

3、網絡訓練

訓練部分後續再進行更新。

4、結果檢測

原圖如下:

基于darknet的圖像語義分割算法1、資料集2、網絡架構3、網絡訓練4、結果檢測

使用指令行進行二值圖輸出:"./darknet segmenter test the/path/to/cfg/data the/path/to/cfg/file the/path/to/weights/files the/path/to/image "

擷取結果如下圖:

基于darknet的圖像語義分割算法1、資料集2、網絡架構3、網絡訓練4、結果檢測

擷取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)
           

運作上述代碼擷取結果如下:

基于darknet的圖像語義分割算法1、資料集2、網絡架構3、網絡訓練4、結果檢測

本文是初版,第一次寫blog,内容不是非常詳盡,如果有問題給我留言,如果我能夠解答的話,必定知無不言。

繼續閱讀