物体检测yolo3 学习笔记3

举报
tengyun 发表于 2020/03/31 23:49:59 2020/03/31
【摘要】 我们继续来看yolo3的实现细节,如何随机生成图片数据:在训练过程中,模型调用fit_generator方法,按批次创建数据,输入模型,进行训练。其中,数据生成器wrapper是data_generator_wrapper,用于验证数据格式,最终调用data_generator,data_generator输入参数是:annotation_lines:标注数据的行,每行数据包含图片路径,和框...

我们继续来看yolo3的实现细节,如何随机生成图片数据:

1585669292742862.png

在训练过程中,模型调用fit_generator方法,按批次创建数据,输入模型,进行训练。其中,数据生成器wrapper是data_generator_wrapper,用于验证数据格式,最终调用data_generator

1585669374105058.png

data_generator输入参数是:

  • annotation_lines:标注数据的行,每行数据包含图片路径,和框的位置信息

  • batch_size:批次数,每批生成的数据个数;

  • input_shape:图像输入尺寸,如(416, 416);

  • data_path:  数据文件路径

  • anchors:anchor box列表,9个宽高值;

  • num_classes:类别的数量;

在数据生成器data_generator中,数据的总行数是n,循环输出固定批次数batch_size的图片数据image_data和标注框数据box_data

在第0次时,将数据洗牌shuffle,调用get_random_data解析annotation_lines[i],生成图片image和标注框box,添加至各自的列表image_databox_data中。

索引值递增i+1,当完成n个一轮之后,重新将i置0,再次调用shuffle洗牌数据。

image_databox_data都转换为np数组,其中:

#batch_size = 16

image_data: (16, 416, 416, 3) box_data: (16, 20, 5) # 每个图片最多含有20个框

接着,将框的数据box_data、输入图片尺寸input_shape、anchor box列表anchors和类别数num_classes转换为真值y_true,其中y_true是3个预测特征的列表:

[(16, 13, 13, 3, 6), (16, 26, 26, 3, 6), (16, 52, 52, 3, 6)]

最终输出:图片数据image_data、真值y_true、每个图片的损失值np.zeros(batch_size)。不断循环while True,生成的批次数据,与epoch步数相同,即steps_per_epoch

get_random_data中,分离图片image和标注框box,输入:

  • 数据annotation_line:图片地址和框的位置类别;

  • 图片尺寸input_shape:如(416, 416);

  • 数据random:随机开关;

image, box = get_random_data(annotation_lines[i], input_shape, random=True)

我们具体看一下get_random_data 函数,它是从yolo3.utils文件中import:

from yolo3.utils import get_random_data

1585669410434386.png

第1步,解析annotation_line数据:

  • 将annotation_line按空格分割为line列表;

  • 使用PIL读取图片image路径;

  • 图片的宽和高,iw和ih;

  • 输入尺寸的高和宽,h和w;

  • 图片中的标注框box,box是5维,4个点和1个类别;

1585669436727566.png

第2步,如果是非随机,即if not random:

  • 将图片等比例转换为416x416的图片,其余用灰色填充,即(128, 128, 128),同时颜色值转换为0~1之间,即每个颜色值除以255;

  • 将边界框box等比例缩小,再加上填充的偏移量dx和dy,因为新的图片部分用灰色填充,影响box的坐标系,box最多有max_boxes个,即20个。

1585669466199778.png

第3步,如果是随机:

通过jitter参数,随机计算new_ar和scale,生成新的nh和nw,将原始图像随机转换为nw和nh尺寸的图像,即非等比例变换图像。

1585669495810622.png

将变换后的图像,转换为416x416的图像,其余部分用灰色值填充。

1585669540991132.png

根据随机数flip,随机左右翻转FLIP_LEFT_RIGHT图片。

1585669602795245.png

在HSV坐标域中,改变图片的颜色范围,hue值相加,sat和vat相乘,先由RGB转为HSV,再由HSV转为RGB,添加若干错误判断,避免范围过大。



1585669626566836.png

将所有的图片变换,增加至检测框中,并且包含若干异常处理,避免变换之后的值过大或过小,去除异常的box。

1585669665561564.png

最终,返回图像数据image_data和边框数据box_data。box的4个值是(xmin, ymin, xmax, ymax),第5位不变,是标注框的类别,如0~n。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。