关于vl_nnloss中类别标签到索引的转换

下面是基于MatConvNet框架的vl_nnloss中类别标签到索引的转换的代码实现:


在上述代码中,

Line 218 表示获取每个通道的像素数,inputSize(1:2)表示获取每个通道的 Feature Map或Score Map的Size(height and width)大小;

Line 219 表示获取一个batch的像素个数,其中inputSize(4)表示batch大小;

Line 220 表示获取所有通道总的像素数,其中inputSize(3)表示通道数(channel);

Line 222 表示把一个batch的像素数的索引表示成 labelSize,其中

labelSize = [size(c,1) size(c,2) size(c,3) size(c,4)] ; 其中c表示类别标签,是个四维的张量;

inputSize = [size(x,1) size(x,2) size(x,3) size(x,4)] ; 其中x表示the prediction scores x given the categorical labels c;

Line 223 的结果按理论推测,当inputSize(4)=1,也就是当batch或SubBatch等于1时,可以直接在Line 222一步完成,即:

offset = reshape(1:numPixels, labelSize) ;

示例:

A = randn(16,16,3);

B= reshape(1:256, [16 16]);

则:

C = A(B)即获取A(:,:,1)。

B = B + 256*ones(16,16),则C=A(B)即获取A(:,:,2)。

如果inputSize(4)不等于1,则如Line 223所示;此时:

n = reshape(0:numPixels-1,labelSize) ;

offset_pre = 1 + mod(n, numPixelsPerImage);

是为了把offset均clip在1:numPixelsPerImage之间,并且offset_pre(:, :, :, 1), ..., offset_pre(:, :, :, batch)均相等,然后利用

fix(n / numPixelsPerImage)定位inputSize(4),也就是batch中哪一张图片,而一个batch中的一张图片对应的总像素数为

imageVolume = numPixelsPerImage * inputSize(3) ;

故 Line 225可以索引到一个batch中一张图片的每个通道的Feature Map或Score Map的Spatial Location,此矩阵化操作避免了循环定位Spatial Location,加快了运行速度。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值