Faster-rcnn训练及测试2

Faster-rcnn训练及测试2

数据前期的处理很重要,仔细研究了一下faster-rcnn的代码之后更是验证了这一点,上一个周看的,再不复习的话就全部忘光了。

resize

我在retinaNet的相关代码中也发现了这一点,即会把图片的一边resize到一个尺度, 比如把最小的那个边resize到600,然后另外一个边做对应的resize, 或者把最大的那个边resize到多少多少,然后另外一个边做相应的变化。

还有的是先把图片resize到一个尺度,然后再从其中crop出一块出来,我觉得这实际上是和任务有关系的,有的是不能够随便进行crop的,比如在检测bbox的任务中,因为crop之后可能有些目标就不在图上面了,或者不完全在图上面了。而分类任务或者关键点检测的任务不需要那么全的图片的信息的倒是可以这样弄,或者说选把图resize到小一点的,然后crop出大一点的,为了弄出一个方形的进网络,这时候进行crop也是可以的。

flipped

这个是做数据增强的手段,这里当然也是用到了的,不过感觉目前的bbox的检测有个缺点是数据不能够旋转,其实个人感觉是可以加上旋转的,这样数据又会增加很多,不过我还没有在检测任务上面看到过加了旋转进行增强的,不过这个代码中只进行了水平的反转,没有进行竖直的翻转,我理解这和没有加上旋转是同一个道理,即这些场景可能在自然界见到的不太多,加多了可能也用不到。 这里面加的flipped并不是物理生成的,而是在线直接把图片对应的张量进行了翻转,把gtbbox对应的换了一下,就变成了一个新的数据,还是挺方便的。

normalize

这个normalize指的是对图片,一般见到的几乎都进行了normalize, 应该是更好地做训练,但是不知道如果不经过normalize会发生什么,有可能会增加很多的计算量。

最容易想到的是每个像素点的值都减去128.0然后除以256.0,比如我在一些做keypoints的代码里看到的就是这样的。

这里只是做了减法,但是并没有做其它的处理,而且RGB三个通道上减去的数字还是不一样的。

在这里是这个

__C.PIXEL_MEANS = np.array([[[102.9801, 115.9465, 122.7717]]])

顺序是BGR。

ratio排序

关于ratio排序我在retinaNet中也见到了,就是先把所有图的高宽比值作为ratio算出来, 然后如果太小或者是太大都不行,比如这里就是如果ratio小于0.5就把它记成是需要crop的,并且把它的ratio强记成是0.5, 如果ratio大于2的话,也把它记成是需要crop的,然后也标记成是需要crop的。 最后确实是crop了。暂时不知道不这样做会有什么不好

最让我不理解的是,竟然把ratio也排了个顺序,按照从小到大的序号,并且采样的时候,就按照这个顺序来,而且每一批的不是弄成这一批的第一个ratio就是这一批的最后一个ratio,然后都按照这个ratio进行其他的处理,

其实如果batch是1的话,可能也无所谓了,这里主要是考虑到会用batch的去训练,那么不管处理前图的大小是怎么样的,但是处理完了之后进入网络的肯定是一样的。我觉得对这个ratio进行一个排序目的就是为了处理batch的情况。

imdb

这一系列的总是喜欢写一个类imdb,叫image database, 然后处理的绕来绕去的弄的非常复杂,感觉可读性不是太好,我准备把这里面的理清晰,然后自已写一个看着舒服一点的。目标是最后找到一个数据集,或者是自己制作的,或者是官方的。

其实这就有两种方案,一是把数据和gt制作成像pasvoc处理的那样,这样自己可能就不用改得太多了,但是还是想自己动手写一个新的,能够摆脱pasvoc。

最好能摆脱imdb.

打赏,谢谢~~

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,多谢支持~

打开微信扫一扫,即可进行扫码打赏哦