1.参考资料
在(2)基础上添加了一些注释,做了一些修改,方便理解。
2.论文解读
2.1 动作
2.1.1 8+1: 8个用于标注框的转换, 1个用于终止搜索
1-4号动作表示标注框位置的变化; 5、6号动作表示长宽比不变的边界框大小变化; 7、8号动作表示竖直和水平方向的拉伸和压缩变化; 9号动作表示搜索终止,即不再继续调整一张图片的一个类别的边界框。
2.1.2 修改尺度
alpha_h = alpha * ( ymax - ymin ) alpha_w = alpha * ( xmax - xmin ) 其中 alpha是一个[0,1]之间的超参数,实验中设置为0.2(平衡速度和定位精度方面效果较好);(xmin, ymin)和(xmax, ymax)代表标注框左上角和右下角的位置坐标。
2.2 状态
2.2.1 图片大小调整
网络的输入为(224*224);在预处理阶段会将图片全部调整为这一大小;每次找到一个标注框后会取出标注框内的图像并调整为这一大小作为一张新的图片。
2.2.2 状态表示
状态由两部分组成。 第一部分是图片的特征向量,通过vgg16提取图片特征; 第二部分是历史动作集,共保存10组动作,每组动作包括9个值,对应9种动作,选择的动作值为1,其余动作值为0。在pytorch实现代码中,使用20组动作,初始值使用100占位([[100]*9]*20)。
2.3 奖励
参考第一部分中的参考论文解读,里面介绍的很清楚。
3.代码解读(参考资料(4)文件解读)
3.1 数据集
使用VOC2007和VOC2012两个年份的数据,综合两个年份的训练集作为最终的训练集,综合两个年份的测试集作为最终的测试集。 由于图片数量很大,每次训练或测试之前都需要执行相同的操作处理数据。这里我将数据处理后的字典保存,在训练或测试之前直接调用保存的字典,这样可以节省一些时间。 数据的处理首先将图片的尺寸调整为224*224,然后调用torchvision.datasets.VOCDetection方法提取数据;在整理数据环境,将数据做出一个字典的形式,键为类别,值也是一个字典,值字典的键是图片的文件名,值字典的值是图片信息(图片、标注框和图片尺寸)。
3.2 训练的流程和关键步骤
- 依次选择类别进行训练:在VOC中,共有20个类别,即依次对20个类别进行训练;
- 创建智能体Agent对象,需要设置参数如下:
??训练中用到的数据批次batch ??计算近似回报用到的折扣率gamma ??使用ε-greedy时epsilon值得初始设定(训练中采用前五次依次递减0.18的策略,不断提高获得最优动作选择的概率) ??训练好的模型的保存路径save_path ??动作数n_actions(这里为9,共九种动作) ??提取特征的方式,这里使用vgg16的第一层–倒数第二层的结构,不使用dropout优化 ??优化器使用常用的Adam,学习率设置为1e-6 ??构建初始状态的历史动作集,并附初值 ??三个超参数的设置 - 对当前所选类别的数据字典进行训练。每个类别训练15次,每个标注框最多训练20次,如果选中终止操作的动作,提前结束这一标注框的训练
- 如何选择动作?ε-greedy
(1-epsilon)的概率 根据策略网络选择最优动作 epsilon的概率选择另一种策略。第一种是一般的随机选择动作的方法;另一种是衡量每一个动作添加到历史动作集后标注框的好坏(iou比未添加动作前的标注框的iou大则为好动作),如果存在好的动作就从好动作中选一个,否则就任选一个动作。 - 如何计算奖励值?
比较采取动作后的新标注框和未采取动作之前的标注框的iou,如果iou增大,则给予一个正奖励,否则给予一个负奖励值。
注:如果有任何问题,欢迎大家批评指正。
|