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