|
@@ -44,7 +44,8 @@ function srcnn.channels(model)
|
|
end
|
|
end
|
|
function srcnn.backend(model)
|
|
function srcnn.backend(model)
|
|
local conv = model:findModules("cudnn.SpatialConvolution")
|
|
local conv = model:findModules("cudnn.SpatialConvolution")
|
|
- if #conv > 0 then
|
|
|
|
|
|
+ local fullconv = model:findModules("cudnn.SpatialFullConvolution")
|
|
|
|
+ if #conv > 0 or #fullconv > 0 then
|
|
return "cudnn"
|
|
return "cudnn"
|
|
else
|
|
else
|
|
return "cunn"
|
|
return "cunn"
|
|
@@ -132,17 +133,17 @@ end
|
|
function srcnn.vgg_7(backend, ch)
|
|
function srcnn.vgg_7(backend, ch)
|
|
local model = nn.Sequential()
|
|
local model = nn.Sequential()
|
|
model:add(SpatialConvolution(backend, ch, 32, 3, 3, 1, 1, 0, 0))
|
|
model:add(SpatialConvolution(backend, ch, 32, 3, 3, 1, 1, 0, 0))
|
|
- model:add(w2nn.LeakyReLU(0.1))
|
|
|
|
|
|
+ model:add(nn.LeakyReLU(0.1, true))
|
|
model:add(SpatialConvolution(backend, 32, 32, 3, 3, 1, 1, 0, 0))
|
|
model:add(SpatialConvolution(backend, 32, 32, 3, 3, 1, 1, 0, 0))
|
|
- model:add(w2nn.LeakyReLU(0.1))
|
|
|
|
|
|
+ model:add(nn.LeakyReLU(0.1, true))
|
|
model:add(SpatialConvolution(backend, 32, 64, 3, 3, 1, 1, 0, 0))
|
|
model:add(SpatialConvolution(backend, 32, 64, 3, 3, 1, 1, 0, 0))
|
|
- model:add(w2nn.LeakyReLU(0.1))
|
|
|
|
|
|
+ model:add(nn.LeakyReLU(0.1, true))
|
|
model:add(SpatialConvolution(backend, 64, 64, 3, 3, 1, 1, 0, 0))
|
|
model:add(SpatialConvolution(backend, 64, 64, 3, 3, 1, 1, 0, 0))
|
|
- model:add(w2nn.LeakyReLU(0.1))
|
|
|
|
|
|
+ model:add(nn.LeakyReLU(0.1, true))
|
|
model:add(SpatialConvolution(backend, 64, 128, 3, 3, 1, 1, 0, 0))
|
|
model:add(SpatialConvolution(backend, 64, 128, 3, 3, 1, 1, 0, 0))
|
|
- model:add(w2nn.LeakyReLU(0.1))
|
|
|
|
|
|
+ model:add(nn.LeakyReLU(0.1, true))
|
|
model:add(SpatialConvolution(backend, 128, 128, 3, 3, 1, 1, 0, 0))
|
|
model:add(SpatialConvolution(backend, 128, 128, 3, 3, 1, 1, 0, 0))
|
|
- model:add(w2nn.LeakyReLU(0.1))
|
|
|
|
|
|
+ model:add(nn.LeakyReLU(0.1, true))
|
|
model:add(SpatialConvolution(backend, 128, ch, 3, 3, 1, 1, 0, 0))
|
|
model:add(SpatialConvolution(backend, 128, ch, 3, 3, 1, 1, 0, 0))
|
|
model:add(nn.View(-1):setNumInputDims(3))
|
|
model:add(nn.View(-1):setNumInputDims(3))
|
|
|
|
|
|
@@ -159,27 +160,27 @@ end
|
|
function srcnn.vgg_12(backend, ch)
|
|
function srcnn.vgg_12(backend, ch)
|
|
local model = nn.Sequential()
|
|
local model = nn.Sequential()
|
|
model:add(SpatialConvolution(backend, ch, 32, 3, 3, 1, 1, 0, 0))
|
|
model:add(SpatialConvolution(backend, ch, 32, 3, 3, 1, 1, 0, 0))
|
|
- model:add(w2nn.LeakyReLU(0.1))
|
|
|
|
|
|
+ model:add(nn.LeakyReLU(0.1, true))
|
|
model:add(SpatialConvolution(backend, 32, 32, 3, 3, 1, 1, 0, 0))
|
|
model:add(SpatialConvolution(backend, 32, 32, 3, 3, 1, 1, 0, 0))
|
|
- model:add(w2nn.LeakyReLU(0.1))
|
|
|
|
|
|
+ model:add(nn.LeakyReLU(0.1, true))
|
|
model:add(SpatialConvolution(backend, 32, 64, 3, 3, 1, 1, 0, 0))
|
|
model:add(SpatialConvolution(backend, 32, 64, 3, 3, 1, 1, 0, 0))
|
|
- model:add(w2nn.LeakyReLU(0.1))
|
|
|
|
|
|
+ model:add(nn.LeakyReLU(0.1, true))
|
|
model:add(SpatialConvolution(backend, 64, 64, 3, 3, 1, 1, 0, 0))
|
|
model:add(SpatialConvolution(backend, 64, 64, 3, 3, 1, 1, 0, 0))
|
|
- model:add(w2nn.LeakyReLU(0.1))
|
|
|
|
|
|
+ model:add(nn.LeakyReLU(0.1, true))
|
|
model:add(SpatialConvolution(backend, 64, 64, 3, 3, 1, 1, 0, 0))
|
|
model:add(SpatialConvolution(backend, 64, 64, 3, 3, 1, 1, 0, 0))
|
|
- model:add(w2nn.LeakyReLU(0.1))
|
|
|
|
|
|
+ model:add(nn.LeakyReLU(0.1, true))
|
|
model:add(SpatialConvolution(backend, 64, 64, 3, 3, 1, 1, 0, 0))
|
|
model:add(SpatialConvolution(backend, 64, 64, 3, 3, 1, 1, 0, 0))
|
|
- model:add(w2nn.LeakyReLU(0.1))
|
|
|
|
|
|
+ model:add(nn.LeakyReLU(0.1, true))
|
|
model:add(SpatialConvolution(backend, 64, 64, 3, 3, 1, 1, 0, 0))
|
|
model:add(SpatialConvolution(backend, 64, 64, 3, 3, 1, 1, 0, 0))
|
|
- model:add(w2nn.LeakyReLU(0.1))
|
|
|
|
|
|
+ model:add(nn.LeakyReLU(0.1, true))
|
|
model:add(SpatialConvolution(backend, 64, 64, 3, 3, 1, 1, 0, 0))
|
|
model:add(SpatialConvolution(backend, 64, 64, 3, 3, 1, 1, 0, 0))
|
|
- model:add(w2nn.LeakyReLU(0.1))
|
|
|
|
|
|
+ model:add(nn.LeakyReLU(0.1, true))
|
|
model:add(SpatialConvolution(backend, 64, 64, 3, 3, 1, 1, 0, 0))
|
|
model:add(SpatialConvolution(backend, 64, 64, 3, 3, 1, 1, 0, 0))
|
|
- model:add(w2nn.LeakyReLU(0.1))
|
|
|
|
|
|
+ model:add(nn.LeakyReLU(0.1, true))
|
|
model:add(SpatialConvolution(backend, 64, 128, 3, 3, 1, 1, 0, 0))
|
|
model:add(SpatialConvolution(backend, 64, 128, 3, 3, 1, 1, 0, 0))
|
|
- model:add(w2nn.LeakyReLU(0.1))
|
|
|
|
|
|
+ model:add(nn.LeakyReLU(0.1, true))
|
|
model:add(SpatialConvolution(backend, 128, 128, 3, 3, 1, 1, 0, 0))
|
|
model:add(SpatialConvolution(backend, 128, 128, 3, 3, 1, 1, 0, 0))
|
|
- model:add(w2nn.LeakyReLU(0.1))
|
|
|
|
|
|
+ model:add(nn.LeakyReLU(0.1, true))
|
|
model:add(SpatialConvolution(backend, 128, ch, 3, 3, 1, 1, 0, 0))
|
|
model:add(SpatialConvolution(backend, 128, ch, 3, 3, 1, 1, 0, 0))
|
|
model:add(nn.View(-1):setNumInputDims(3))
|
|
model:add(nn.View(-1):setNumInputDims(3))
|
|
|
|
|
|
@@ -198,17 +199,17 @@ end
|
|
function srcnn.dilated_7(backend, ch)
|
|
function srcnn.dilated_7(backend, ch)
|
|
local model = nn.Sequential()
|
|
local model = nn.Sequential()
|
|
model:add(SpatialConvolution(backend, ch, 32, 3, 3, 1, 1, 0, 0))
|
|
model:add(SpatialConvolution(backend, ch, 32, 3, 3, 1, 1, 0, 0))
|
|
- model:add(w2nn.LeakyReLU(0.1))
|
|
|
|
|
|
+ model:add(nn.LeakyReLU(0.1, true))
|
|
model:add(SpatialConvolution(backend, 32, 32, 3, 3, 1, 1, 0, 0))
|
|
model:add(SpatialConvolution(backend, 32, 32, 3, 3, 1, 1, 0, 0))
|
|
- model:add(w2nn.LeakyReLU(0.1))
|
|
|
|
|
|
+ model:add(nn.LeakyReLU(0.1, true))
|
|
model:add(nn.SpatialDilatedConvolution(32, 64, 3, 3, 1, 1, 0, 0, 2, 2))
|
|
model:add(nn.SpatialDilatedConvolution(32, 64, 3, 3, 1, 1, 0, 0, 2, 2))
|
|
- model:add(w2nn.LeakyReLU(0.1))
|
|
|
|
|
|
+ model:add(nn.LeakyReLU(0.1, true))
|
|
model:add(nn.SpatialDilatedConvolution(64, 64, 3, 3, 1, 1, 0, 0, 2, 2))
|
|
model:add(nn.SpatialDilatedConvolution(64, 64, 3, 3, 1, 1, 0, 0, 2, 2))
|
|
- model:add(w2nn.LeakyReLU(0.1))
|
|
|
|
|
|
+ model:add(nn.LeakyReLU(0.1, true))
|
|
model:add(nn.SpatialDilatedConvolution(64, 128, 3, 3, 1, 1, 0, 0, 4, 4))
|
|
model:add(nn.SpatialDilatedConvolution(64, 128, 3, 3, 1, 1, 0, 0, 4, 4))
|
|
- model:add(w2nn.LeakyReLU(0.1))
|
|
|
|
|
|
+ model:add(nn.LeakyReLU(0.1, true))
|
|
model:add(SpatialConvolution(backend, 128, 128, 3, 3, 1, 1, 0, 0))
|
|
model:add(SpatialConvolution(backend, 128, 128, 3, 3, 1, 1, 0, 0))
|
|
- model:add(w2nn.LeakyReLU(0.1))
|
|
|
|
|
|
+ model:add(nn.LeakyReLU(0.1, true))
|
|
model:add(SpatialConvolution(backend, 128, ch, 3, 3, 1, 1, 0, 0))
|
|
model:add(SpatialConvolution(backend, 128, ch, 3, 3, 1, 1, 0, 0))
|
|
model:add(nn.View(-1):setNumInputDims(3))
|
|
model:add(nn.View(-1):setNumInputDims(3))
|
|
|
|
|
|
@@ -229,17 +230,17 @@ function srcnn.upconv_7(backend, ch)
|
|
local model = nn.Sequential()
|
|
local model = nn.Sequential()
|
|
|
|
|
|
model:add(SpatialConvolution(backend, ch, 32, 3, 3, 1, 1, 0, 0))
|
|
model:add(SpatialConvolution(backend, ch, 32, 3, 3, 1, 1, 0, 0))
|
|
- model:add(w2nn.LeakyReLU(0.1))
|
|
|
|
|
|
+ model:add(nn.LeakyReLU(0.1, true))
|
|
model:add(SpatialConvolution(backend, 32, 32, 3, 3, 1, 1, 0, 0))
|
|
model:add(SpatialConvolution(backend, 32, 32, 3, 3, 1, 1, 0, 0))
|
|
- model:add(w2nn.LeakyReLU(0.1))
|
|
|
|
|
|
+ model:add(nn.LeakyReLU(0.1, true))
|
|
model:add(SpatialConvolution(backend, 32, 64, 3, 3, 1, 1, 0, 0))
|
|
model:add(SpatialConvolution(backend, 32, 64, 3, 3, 1, 1, 0, 0))
|
|
- model:add(w2nn.LeakyReLU(0.1))
|
|
|
|
|
|
+ model:add(nn.LeakyReLU(0.1, true))
|
|
model:add(SpatialConvolution(backend, 64, 64, 3, 3, 1, 1, 0, 0))
|
|
model:add(SpatialConvolution(backend, 64, 64, 3, 3, 1, 1, 0, 0))
|
|
- model:add(w2nn.LeakyReLU(0.1))
|
|
|
|
|
|
+ model:add(nn.LeakyReLU(0.1, true))
|
|
model:add(SpatialConvolution(backend, 64, 128, 3, 3, 1, 1, 0, 0))
|
|
model:add(SpatialConvolution(backend, 64, 128, 3, 3, 1, 1, 0, 0))
|
|
- model:add(w2nn.LeakyReLU(0.1))
|
|
|
|
|
|
+ model:add(nn.LeakyReLU(0.1, true))
|
|
model:add(SpatialConvolution(backend, 128, 128, 3, 3, 1, 1, 0, 0))
|
|
model:add(SpatialConvolution(backend, 128, 128, 3, 3, 1, 1, 0, 0))
|
|
- model:add(w2nn.LeakyReLU(0.1))
|
|
|
|
|
|
+ model:add(nn.LeakyReLU(0.1, true))
|
|
model:add(SpatialFullConvolution(backend, 128, ch, 4, 4, 2, 2, 1, 1))
|
|
model:add(SpatialFullConvolution(backend, 128, ch, 4, 4, 2, 2, 1, 1))
|
|
|
|
|
|
model.w2nn_arch_name = "upconv_7"
|
|
model.w2nn_arch_name = "upconv_7"
|
|
@@ -257,19 +258,19 @@ function srcnn.upconv_8_4x(backend, ch)
|
|
local model = nn.Sequential()
|
|
local model = nn.Sequential()
|
|
|
|
|
|
model:add(SpatialFullConvolution(backend, ch, 32, 4, 4, 2, 2, 1, 1))
|
|
model:add(SpatialFullConvolution(backend, ch, 32, 4, 4, 2, 2, 1, 1))
|
|
- model:add(w2nn.LeakyReLU(0.1))
|
|
|
|
|
|
+ model:add(nn.LeakyReLU(0.1, true))
|
|
model:add(SpatialConvolution(backend, 32, 32, 3, 3, 1, 1, 0, 0))
|
|
model:add(SpatialConvolution(backend, 32, 32, 3, 3, 1, 1, 0, 0))
|
|
- model:add(w2nn.LeakyReLU(0.1))
|
|
|
|
|
|
+ model:add(nn.LeakyReLU(0.1, true))
|
|
model:add(SpatialConvolution(backend, 32, 32, 3, 3, 1, 1, 0, 0))
|
|
model:add(SpatialConvolution(backend, 32, 32, 3, 3, 1, 1, 0, 0))
|
|
- model:add(w2nn.LeakyReLU(0.1))
|
|
|
|
|
|
+ model:add(nn.LeakyReLU(0.1, true))
|
|
model:add(SpatialConvolution(backend, 32, 64, 3, 3, 1, 1, 0, 0))
|
|
model:add(SpatialConvolution(backend, 32, 64, 3, 3, 1, 1, 0, 0))
|
|
- model:add(w2nn.LeakyReLU(0.1))
|
|
|
|
|
|
+ model:add(nn.LeakyReLU(0.1, true))
|
|
model:add(SpatialConvolution(backend, 64, 64, 3, 3, 1, 1, 0, 0))
|
|
model:add(SpatialConvolution(backend, 64, 64, 3, 3, 1, 1, 0, 0))
|
|
- model:add(w2nn.LeakyReLU(0.1))
|
|
|
|
|
|
+ model:add(nn.LeakyReLU(0.1, true))
|
|
model:add(SpatialConvolution(backend, 64, 64, 3, 3, 1, 1, 0, 0))
|
|
model:add(SpatialConvolution(backend, 64, 64, 3, 3, 1, 1, 0, 0))
|
|
- model:add(w2nn.LeakyReLU(0.1))
|
|
|
|
|
|
+ model:add(nn.LeakyReLU(0.1, true))
|
|
model:add(SpatialConvolution(backend, 64, 64, 3, 3, 1, 1, 0, 0))
|
|
model:add(SpatialConvolution(backend, 64, 64, 3, 3, 1, 1, 0, 0))
|
|
- model:add(w2nn.LeakyReLU(0.1))
|
|
|
|
|
|
+ model:add(nn.LeakyReLU(0.1, true))
|
|
model:add(SpatialFullConvolution(backend, 64, 3, 4, 4, 2, 2, 1, 1))
|
|
model:add(SpatialFullConvolution(backend, 64, 3, 4, 4, 2, 2, 1, 1))
|
|
|
|
|
|
model.w2nn_arch_name = "upconv_8_4x"
|
|
model.w2nn_arch_name = "upconv_8_4x"
|
|
@@ -296,7 +297,9 @@ function srcnn.create(model_name, backend, color)
|
|
error("unsupported color: " .. color)
|
|
error("unsupported color: " .. color)
|
|
end
|
|
end
|
|
if srcnn[model_name] then
|
|
if srcnn[model_name] then
|
|
- return srcnn[model_name](backend, ch)
|
|
|
|
|
|
+ local model = srcnn[model_name](backend, ch)
|
|
|
|
+ assert(model.w2nn_offset == (model.w2nn_offset / model.w2nn_scale_factor) * model.w2nn_scale_factor)
|
|
|
|
+ return model
|
|
else
|
|
else
|
|
error("unsupported model_name: " .. model_name)
|
|
error("unsupported model_name: " .. model_name)
|
|
end
|
|
end
|