UNet应用于轮毂背景分割
背景介绍
语义分割
图像语义分割(Semantic Segmentation)是指让计算机根据图像的语义来进行分割。语义分割有很多应用,例如在自动驾驶领域如何去识别汽车、行人、信号灯、车道线等具有特殊意义的道路标志是实现自动驾驶的前提。同时在OCR即文字的识别上也有广泛的应用。
UNet
UNet网络是一种首先应用在医学上,识别细胞等组织结构的一种深度学习网络,因为其效果较好,故在分割图像上应用很多,UNet自从2015年问世以来,已经成为多种场合的使用网络其中包括地质勘探,深海云层分析等,本文首次实现将UNet应用在汽车轮毂的背景去除,经过40张标记模型的训练其效果较好,故在此分享。
代码分析
数据集处理
1 | from torch.utils.data import Dataset |
对于一般的语义识别数据集处理主要分为两个部分,分别是原始图片的处理,标签的生成及输入。对于原始图片由于现成的汽车轮毂图片并没有相对应的标签,第一步是使用photoshop等软件将原始图片的数据转为背景和本体分别为黑白的标记图及其灰度图的灰度值分别为255和0,并将这些原始图片和标签图片的名称相对应以便使用Dataloader读入。
在这里主要是要是用transfer 函数进行数据集的转换其中包括,图片大小的缩放,对图片的随机剪裁和归一化处理等,主要是为了加强数据集的数据效果。其中主要的图片部分包括,这一部分在以后可以详细了解。
UNet网络
1 | import torch |
UNet的网络并不复杂,主要是将其的高分辨率部分和低分辨率部分相结合故能取得不错的训练效果。
UNet的网络结构先对原始图像进行下采样然后进行上采样。
训练
1 | def train_model(model, criterion, optimizer, dataload, num_epochs=20): #num_epoch为训练的轮数 |
这里讲图片缩放的大小为448*448同时batch_size设置为2,这样在P1000这样显卡内存为4G的机器上训练师显存能够得到充分的利用。同时由于batch_size和图片的分辨率都会对训练结构产生影响,且两者的数值都应该保持一个相对较大的值。
在显存较大的机器上进行训练师最好将图片的分辨率和batch_size设置为较大的值。
验证
1 | def test(): |
验证的过程比较简单,即将模型信息导入后直接使用