数据输入方面:1.image pyramid 图像金字塔.目前代码里是先选取一个scale,然后在每个GPU上按照scale读图片,相应的gt也更改."scales":[440, 520, 600, 680, 760] 使用的是短边的缩放到的尺寸,还用个maxsize限制了你的scale必须小于一个值
wk的代码和原本的sensenet很大不一样,重新看,好像加了很多trick
deformable convolution是同时训练多个scale,然后每个网络训练出来的乘以一个权重
但这样不同scale的网络结构不应该不一样不是吗?
2.flip,老版的sensenet里面仅仅是使用flip之后的,cv::flip(img, img, 1);,即只使用了沿y轴翻转,且没有用原图.个人觉得这里翻转的角度应该还可以很多.据说还有只rotate20度,然后剪裁补0这种数据增强,在分割中用的比较多.
3."pixel_means":[103.939, 116.779, 123.68],3个通道不同的mean值,然后图像原始的每个值减去这些值
有什么作用?
4.anchor_scales,anchor_ratios
5.gaussian_noise 输入图片加高斯噪声
6.FrcnnTrainData的参数,自己的caffe目录中总结了这些
distort_param { brightness_prob: 0.5 brightness_delta: 32 contrast_prob: 0.5 contrast_lower: 0.5 contrast_upper: 1.5 hue_prob: 0.5 hue_delta: 18 saturation_prob: 0.5 saturation_lower: 0.5 saturation_upper: 1.5 random_order_prob: 0.0 }
7.加高斯噪声或者resize的时候换插值的方法,这两个在v系列中都没有使用
8.
多GPU训练,这个很重要,每个GPU一张图
v9、v7:经过4个降采样,第一个是通过一个尺寸为3,stride为2,pad为1,后面是3个pool,并且pool层主要集中在前面那些没有block堆积的层
9是有5个block,7有6个block,并且7的block的4个分支的channel比9的4个分支的channel多(当然是第一个block对应第一个block)。并且两者都是的 block越往后面每个分支对应的channel数增加。block内部的分支是通过concat连接的channel层。
其实D2就是把v7每个分支的channel然后把层增加了。(就用这个讲)
rfcn相对于faster:用了全卷积替代fc,增加了平移不变性