红绿灯目标检测项目
一、简概
1.1流程
1.2数据集结构
xml文件示例:
<annotation>
<folder>Images</folder>
<filename>102.jpg</filename> // 图片名
<source>
<database>Unknown</database>
</source>
<size> // 图片尺寸
<width>424</width>
<height>240</height>
<depth>3</depth>
</size>
<segmented>0</segmented>
<object>
<name>green</name> // 目标名称(类别)
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<occluded>0</occluded>
<bndbox> // bound_box
<xmin>196</xmin>
<ymin>46</ymin>
<xmax>232</xmax>
<ymax>77</ymax>
</bndbox>
</object>
</annotation>
1.3 关键包
深度学习框架: paddle(百度飞桨)
图片处理包: cv2
xml解析:xml
数据增广:imgaug
二、详细流程
1. 数据处理
1.1 载入图片、标签
直接加载train文件夹下的xml文件,通过xml文件中的filename找到图片。
功能:读取一个xml文件,返回归一化后的图片和标签
函数名:
def get_image_and_annotation()
输入参数:
(
xml_filepath='work/data_set/train/xml/102.xml' // xml文件路径
image_dir='work/data/train/img', // 图片存储的文件夹
image_shape=(256, 256) // 返回出来的图片的宽高
)
输出格式:
{
"image" : , // cv2读取出来的图片,归一化
"objects" : // 一个object列表(列表中嵌套字典)
[
{
"name" : 1, // 目标名称 (0为绿灯,1为红灯)
"xmin" : 0.1,
"ymin" : 0.1,
"xmax" : 0.2,
"ymax" : 0.2
}
···
]
}
1.2 数据增广
功能:输入一组原始图片、标签,返回增广后的图片、标签
函数名:
def augmentPipe()
输入参数:
(
image = , // cv2格式的图片
objects = // 一个object列表(列表中嵌套字典)
[
{
"name" : 1, // 目标名称 (0为绿灯,1为红灯)
"xmin" : 0.1,
"ymin" : 0.1,
"xmax" : 0.2,
"ymax" : 0.2
}
···
]
)
输出格式:
{
"aug_image" : , // 数据增广后的图片,cv2格式
"objects" : // 变换后的object列表
[
{
"name" : 1, // 目标名称 (0为绿灯,1为红灯)
"xmin" : 0.1,
"ymin" : 0.1,
"xmax" : 0.2,
"ymax" : 0.2
}
···
]
}
1.3 预处理
功能:①预处理图片、修改图片大小 ②修改标签为向量、使之符合网络
函数名:
def preprocessing()
输入参数:
(
image = , # cv2格式的图片
objects = # object列表
[
{
"name" : 1, # 目标名称 (0为绿灯,1为红灯)
"xmin" : 0.1,
"ymin" : 0.1,
"xmax" : 0.2,
"ymax" : 0.2
}
···
]
output_image_shape = (256, 256) , # 期望输出的shape (输入网络)
)
输出格式:
{
"X" : np.array(), // 预处理后的图片, 归一化
"Y" : np.array() // object变为数组
}