在不同的目标检测算法中有不同的上采样技术,但我想了解YOLO架构是如何工作的,为了可视化每一层的输出,当我到达上采样层时,我遇到了麻烦?
发布于 2020-02-21 22:36:30
我认为最好的做法是查看所使用的确切代码。
https://github.com/pjreddie/darknet/blob/f6d861736038da22c9eb0739dca84003c5a5e275/src/blas.c#L334
void upsample_cpu(float *in, int w, int h, int c, int batch, int stride, int forward, float scale, float *out)
{
int i, j, k, b;
for(b = 0; b < batch; ++b){
for(k = 0; k < c; ++k){
for(j = 0; j < h*stride; ++j){
for(i = 0; i < w*stride; ++i){
int in_index = b*w*h*c + k*w*h + (j/stride)*w + i/stride;
int out_index = b*w*h*c*stride*stride + k*w*h*stride*stride + j*w*stride + i;
if(forward) out[out_index] = scale*in[in_index];
else in[in_index] += scale*out[out_index];
}
}
}
}
}float*是输入和输出图像。stride控制上采样的大小,对于值2,它在config中的使用方式是宽度和高度的两倍。如果配置(for reference)中未提供任何值,则scale为1,这是默认参数。所有其他参数都应该是清晰的。
据我所知,它只需要在输入中使用1个像素,而对于stride = 2,则将其写入输出中的4个像素(从j/stride和i/stride判断)。因此,一个像素被转换为2x2区域中的4个像素。这可能是人们可以实现的最天真的上采样变体,没有任何额外的逻辑,如插值。
https://stackoverflow.com/questions/60333349
复制相似问题