版权声明:本文首发于本人CSDN博客。
前言:经过将近一个月的陆续学习研究,在神经网络中训练多分类任务识别Cityscapes数据集,终于在最近得到了理想中的实验结果。在我陷入对细节参数调整不当及诸多问题时,苦于没有一篇能够“面向新手编程”的博客。因而我在能够在解决一系列问题到达终点后总结这一路踩过的坑,希望对后来者有所帮助。
接下来就是用我得到的神经网络模型结合我所学专业(风景园林)完成小论文,希望能投稿核心成功。^ _^
我所提供的代码及讲解均是基于Cityscapes这一数据集默认19分类的基础上完成,若有朋友想要训练其他数量分类及其他用处,可参考思路并自行修改代码。
放一组训练完成模型进行识别出来的图,激励各位朋友和我自己在深度学习的路上坚持下去。
我使用百度地图API获取了天津大学门口的一处坐标点图片进行识别测试。
1.图片数据获取
需要使用Cityscapes这一数据集训练的主要目的:
用来做汽车自动驾驶识别,要么是像我用来做城市街道元素的相关识别。模型训练出来后,识别数据的获取就至关重要,在我的另一篇博客中:
详细讲解了如何通过百度地图官方API,通过Python简单的爬虫代码批量获取图片。
2.数据集预处理
我们知道,在深度学习图像语意分割的训练过程中,需要有数据集及分好类的标签,这样才可以让你的神经网络进行学习,进而训练出模型,用来识别你想要识别的图片场景等。Cityscapes便是包含大量街道图片、视频用来训练识别的数据集。
在我另一篇博客中对数据集的下载、处理都进行了详细的解释,这里就不做过多解释。
3.图像语意分割神经网络列举
这里还是要感谢博主:
提供的神经网络合集及博文讲解。
博主提供的神经网络代码均是基于2分类的斑马线图像分割,而我在这基础上改为多分类的数据识别,各位朋友在学习时可以仔细对照修改前与修改后的网络,会对网络细节需要修改的参数有自己的理解。
我将博主共享的模型代码做了一份整理(下图),我将分两篇博文选取其中两个进行讲解。
分别是SenNet-ConvNet(简单)和DeepLabNet-XceptionNet(复杂)。
4.Make_Dataset
神经网络通过图片进行网络参数训练时,图片的获取需要从电脑异步读取,例如读取2张训练2张,如果读取所有上千张图片再抽取训练这样并不可行。
通过将图片和标签名称写入txt文件,在网络中读取txt文件合成完整的图片路径,进行读取。
import os
left = os.listdir(r"F:\202006Practice\cityscapesScripts-master\leftImg8bit\val")
gtfine = os.listdir(r"F:\202006Practice\cityscapesScripts-master\gtFine\val")
with open("read_data/val_data0.txt","w") as f:
for name in left:
png = name.replace("leftImg8bit","gtFine_labelTrainIds")
# 判断left是否存在对应的gtfine
if png in gtfine:
f.write(name+";"+png+"\n")
我将leftImg8bit和gtFine下的train和val数据集