天天看点

基于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,内容不是非常详尽,如果有问题给我留言,如果我能够解答的话,必定知无不言。

继续阅读