yolov2的reorg数据理解
![]() |
以上是yolov2的reorg层在整个yolov2网络的示意图。yolov2的reorg层的输入是38x38x64=92416,通过reorg重组得到输出19x19x256。本文需要理解的是reorg是如何重组的。
1.reorg的darknet代码
2. 根据程序理解矩阵重组
本文只考虑长、宽、通道维度上的变化过程。
(1) 根据yolov2中的参数,可以得到reorg层:stride=2, in_c=64, [out_w, out_h, out_c]=[19, 19, 256]。下图中的14x14代表yolov2的输入38x38, 7x7代表yolov2的19x19。
1) 假设k=0, j=0, 则c2=0, offset=0
i=0 | w2=0, h2=0 | |||
i=1 | w2=2, h2=0 | |||
i=2 | w2=4, h2=0 | |||
i=3 | w2=6, h2=0 | |||
... |
2) k=0,j=1,则c2=0,offset=0
i=0 | w2=0, h2=2 | |||
i=1 | w2=2, h2=2 | |||
i=2 | w2=4, h2=2 | |||
i=3 | w2=6, h2=2 | |||
... |
![]() | ![]() |
j=0,1 | 填充输出的一个通道结果 |
(2) 第二部分的推导,stride=2, in_c=64, [out_w, out_h, out_c]=[19, 19, 256]
1) k=64, j=0, 则c2=0, offset=1
i=0 | w2=1, h2=0 | |||
i=1 | w2=3, h2=0 | |||
i=2 | w2=5, h2=0 | |||
i=3 | w2=7, h2=0 | |||
... |
2)k=64,j=1, c2=0, offset=1
i=0 | w2=1, h2=2 | |||
i=1 | w2=3, h2=2 | |||
i=2 | w2=5, h2=2 | |||
i=3 | w2=7, h2=2 | |||
… |
![]() |
通道64的填充 |
(3) 第三部分推导,stride=2, in_c=64, [out_w, out_h, out_c]=[19, 19, 256]
1)k=128, j=0, 则c2=0, offset=2
i=0 | w2=0, h2=1 | |||
i=1 | w2=2, h2=1 | |||
i=2 | w2=4, h2=1 | |||
i=3 | w2=6, h2=1 | |||
… |
2) k=128, j=1, c2=0,offset=2
i=0 | w2=0, h2=3 | |||
i=1 | w2=2, h2=3 | |||
i=2 | w2=4, h2=3 | |||
i=3 | w2=6, h2=3 | |||
… |
![]() |
k=128通道的填充 |
3)k=192,j=0,则c2=0, offset=3
i=0 | w2=1, h2=1 | |||
i=1 | w2=3, h2=1 | |||
i=2 | w2=5, h2=1 | |||
i=3 | w2=7, h2=1 | |||
… |
4) k=192, j=1,则c2=0, offset=3
i=0 | w2=1, h2=3 | |||
i=1 | w2=3, h2=3 | |||
i=2 | w2=5, h2=3 | |||
i=3 | w2=7, h2=3 | |||
… |
![]() |
输入的第一个通道在输出中的数据分布 |