@@ -27,7 +27,8 @@ function bilinear_upsample(x::AbstractArray{<:Number,4}, k::NTuple{2,Int})
27
27
ihigh2_r = adjoint_of_idx (ilow2)[ihigh2]
28
28
29
29
@inbounds y = @view (x[ilow1,ilow2,:,:]) .* (1 .- wdiff1) .+ @view (x[ihigh1,ilow2,:,:]) .* wdiff1
30
- @inbounds y = y .* (1 .- wdiff2) .+ @view (y[:,ihigh2_r,:,:]) .* wdiff2
30
+ @inbounds y .= y .* (1 .- wdiff2) .+ y[:,ihigh2_r,:,:] .* wdiff2
31
+ # @inbounds y = y .* (1 .- wdiff2) .+ @view(y[:,ihigh2_r,:,:]) .* wdiff2 # equivalent to line above
31
32
return y
32
33
end
33
34
@@ -100,23 +101,22 @@ which have been corrected for manually.
100
101
"""
101
102
function ∇bilinear_upsample (Δ:: AbstractArray{<:Number, 4} , k:: NTuple{2,Int} )
102
103
# This function is gpu friendly
103
-
104
+
105
+ # Be more efficient on some corner cases
104
106
if size (Δ, 1 ) == k[1 ]
105
107
Δ = sum (Δ, dims= 1 )
106
108
k = (1 , k[2 ])
107
109
end
108
-
109
110
if size (Δ, 2 ) == k[2 ]
110
111
Δ = sum (Δ, dims= 2 )
111
112
k = (k[1 ], 1 )
112
113
end
113
-
114
- if (size (Δ, 1 ) == 1 ) & (size (Δ, 2 ) == 1 )
114
+ if (size (Δ, 1 ) == 1 ) && (size (Δ, 2 ) == 1 )
115
115
dx = Δ
116
116
return dx
117
117
end
118
118
119
- n_chan, n_batch = size (Δ,3 ), size (Δ,4 )
119
+ n_chan, n_batch = size (Δ, 3 ), size (Δ, 4 )
120
120
121
121
kern1 = get_downsamplekernel (k[1 ])
122
122
kern2 = get_downsamplekernel (k[2 ])
0 commit comments