一、制作图像分割数据集
1、ubuntu首先安装使用做标签的软件:sudo pip install labelImg ,接着调用labelImg软件,在终端中输入:labelImg
2、使用labelimg制作图像分割的标签
这里贴两个链接:https://www.cnblogs.com/kekeoutlook/p/8063077.html
https://blog.youkuaiyun.com/xunan003/article/details/78720189
大家可以根据自己的需要制作自己的标签:
如上图所示从左到右分别是:img:自己找的图片数据集以及其中的内容,label:自己制作的图片的标签的内容
3、制作基于mxnet的图像数据集
主要参考该链接:https://github.com/secretdragon/SSD_Demo
由于笔者是基于MXNET框架构建模型图像检测模型的,所以需要制作该模型能够读取的数据类型。其中需要调用的包已经上传,参见:https://download.youkuaiyun.com/download/shouhan6396/10557450
#首先导入一些必要的库
import os
from PIL import Image
import sys
#这边导入parse_voc_xml:读取xml的文件,导入mkdir_if_not_exist:制作文件夹
sys.path.append('/home/xm/桌面/图像检测/SSD_Demo-master')
from utils import parse_voc_xml,mkdir_if_not_exist
class_names = ['seadan']
#这边是我存放图片文件夹(img)以及标签文件夹(labels)的总路径
os.environ['data_root'] = data_root = '/home/xm/桌面/newdataset/dataset/data'
os.environ['im2rec']= "python /home/xm/桌面/图像检测/SSD_Demo-master/im2rec.py"
resize = (512,512)#尺寸统一为512×512
os.environ['resize'] = resize_str = str(resize[0]) + '_' + str(resize[1])
mkdir_if_not_exist(data_root+'/rec')
#读取图片数据集所有图片,并对图片尺寸进行统一
for imgName in os.listdir(data_root+'/img'):
imgPath = data_root + '/img/' + imgName
img = Image.open(imgPath)
img = img.resize(resize,Image.BILINEAR)
print(data_root+'/'+'img%d_%d'%(resize[0],resize[1]))
mkdir_if_not_exist(data_root+'/'+'img%d_%d'%(resize[0],resize[1]))
img.save(data_root + '/'+'img%d_%d'%(resize[0],resize[1]) + '/' + imgName)
#这一行代码极为关键,主要是生成lst文件,lst文件就相当于图片的身份信息,并且将数据集的90%作为训练集,10%作为测试集
os.system('$im2rec --list --train-ratio 0.9 ${data_root}/rec/img_$resize ${data_root}/img%d_%d'%(resize[0],resize[1]))
#接下来的代码主要根据train.lst文件来制作有标签.lst文件,其实此次.lst文件就是train.lst文件的扩充,根据train.lst文件的将图片的身份信息与标签文件夹labels结合,从而生成.lst文件,此次生成的.lst文件即是根据之前的图片身份信息的.lst文件形成的,只不过此次的.lst文件不仅包含了图片的身份信息,还有图片的标签信息。
new_lst_content = ''
with open(data_root + '/rec/img_%s_train.lst'%(resize_str)) as f:
contents = f.read().split('\n')
for content in contents:
if content == '':
break
content = content.split('\t')
idx = content[0]
file = content[-1][:-3] + 'xml'
# analyse .xml files
bndboxs, names, filename = parse_voc_xml(data_root + '/labels/' + file)
data = idx + '\t2\t5\t'
for bndbox, name in zip(bndboxs,names):
data += '%d\t%f\t%f\t%f\t%f\t'%(1,bndbox[0],bndbox[1],bndbox[2],bndbox[3])
# data += filename + '\t'
print(data)
new_lst_content += data + filename + '\n'
with open(data_root+'/rec/img_%s_train.lst'%(resize_str),'w') as f:
f.write(new_lst_content)
#接下来主要是生成.rec文件,有利于mxnet对于图片的读取
os.system('$im2rec --num-thread 10 --pass-through --pack-label $data_root/rec/img_$resize $data_root/img$resize --encoding=.jpg --quality 100')
如果不出错的话,会生成如下前6个文件:
二、模型的训练以及预测:
模型的训练以及预测,主要参照https://zhuanlan.zhihu.com/p/28867241,将相应的数据集进行替换就可以完成自己图像检测的小任务啦、撒花
本文所有参考都给出相应链接,如有未经允许擅自引用的,联系笔者,笔者会立即作出修改。如果读者有任何问题欢迎留言,大家一起讨论进步。