Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
s920243400
PaddleDetection
提交
7bb627d3
P
PaddleDetection
项目概览
s920243400
/
PaddleDetection
与 Fork 源项目一致
Fork自
PaddlePaddle / PaddleDetection
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleDetection
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
7bb627d3
编写于
12月 05, 2016
作者:
T
Tao Luo
提交者:
GitHub
12月 05, 2016
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #409 from luotao1/conv
Support rectangle input for CNN
上级
a0a87ac0
7830893a
变更
29
隐藏空白更改
内联
并排
Showing
29 changed file
with
387 addition
and
282 deletion
+387
-282
paddle/gserver/layers/BatchNormBaseLayer.cpp
paddle/gserver/layers/BatchNormBaseLayer.cpp
+5
-7
paddle/gserver/layers/BatchNormBaseLayer.h
paddle/gserver/layers/BatchNormBaseLayer.h
+2
-3
paddle/gserver/layers/BilinearInterpLayer.cpp
paddle/gserver/layers/BilinearInterpLayer.cpp
+3
-3
paddle/gserver/layers/ConvBaseLayer.cpp
paddle/gserver/layers/ConvBaseLayer.cpp
+10
-6
paddle/gserver/layers/ConvOperator.cpp
paddle/gserver/layers/ConvOperator.cpp
+9
-4
paddle/gserver/layers/ConvProjection.cpp
paddle/gserver/layers/ConvProjection.cpp
+6
-4
paddle/gserver/layers/DataLayer.cpp
paddle/gserver/layers/DataLayer.cpp
+7
-2
paddle/gserver/layers/ExpandConvBaseLayer.cpp
paddle/gserver/layers/ExpandConvBaseLayer.cpp
+15
-13
paddle/gserver/layers/MaxOutLayer.cpp
paddle/gserver/layers/MaxOutLayer.cpp
+3
-3
paddle/gserver/layers/NormLayer.cpp
paddle/gserver/layers/NormLayer.cpp
+3
-0
paddle/gserver/layers/NormLayer.h
paddle/gserver/layers/NormLayer.h
+1
-1
paddle/gserver/layers/NormProjectionLayer.cpp
paddle/gserver/layers/NormProjectionLayer.cpp
+1
-1
paddle/gserver/layers/SpatialPyramidPoolLayer.cpp
paddle/gserver/layers/SpatialPyramidPoolLayer.cpp
+7
-6
paddle/gserver/tests/img_pool_a.conf
paddle/gserver/tests/img_pool_a.conf
+0
-2
paddle/gserver/tests/test_LayerGrad.cpp
paddle/gserver/tests/test_LayerGrad.cpp
+53
-36
paddle/parameter/Argument.cpp
paddle/parameter/Argument.cpp
+2
-0
paddle/trainer/tests/test_config.conf
paddle/trainer/tests/test_config.conf
+0
-1
proto/ModelConfig.proto.m4
proto/ModelConfig.proto.m4
+24
-16
python/paddle/trainer/config_parser.py
python/paddle/trainer/config_parser.py
+117
-122
python/paddle/trainer_config_helpers/layers.py
python/paddle/trainer_config_helpers/layers.py
+12
-16
python/paddle/trainer_config_helpers/tests/configs/protostr/img_layers.protostr
...config_helpers/tests/configs/protostr/img_layers.protostr
+13
-0
python/paddle/trainer_config_helpers/tests/configs/protostr/img_trans_layers.protostr
..._helpers/tests/configs/protostr/img_trans_layers.protostr
+11
-0
python/paddle/trainer_config_helpers/tests/configs/protostr/projections.protostr
...onfig_helpers/tests/configs/protostr/projections.protostr
+2
-0
python/paddle/trainer_config_helpers/tests/configs/protostr/test_bilinear_interp.protostr
...pers/tests/configs/protostr/test_bilinear_interp.protostr
+20
-6
python/paddle/trainer_config_helpers/tests/configs/protostr/test_maxout.protostr
...onfig_helpers/tests/configs/protostr/test_maxout.protostr
+40
-16
python/paddle/trainer_config_helpers/tests/configs/protostr/test_spp_layer.protostr
...ig_helpers/tests/configs/protostr/test_spp_layer.protostr
+9
-3
python/paddle/trainer_config_helpers/tests/configs/test_bilinear_interp.py
...iner_config_helpers/tests/configs/test_bilinear_interp.py
+1
-1
python/paddle/trainer_config_helpers/tests/configs/test_maxout.py
...addle/trainer_config_helpers/tests/configs/test_maxout.py
+9
-4
python/paddle/trainer_config_helpers/tests/configs/test_spp_layer.py
...le/trainer_config_helpers/tests/configs/test_spp_layer.py
+2
-6
未找到文件。
paddle/gserver/layers/BatchNormBaseLayer.cpp
浏览文件 @
7bb627d3
...
...
@@ -60,14 +60,12 @@ bool BatchNormBaseLayer::init(const LayerMap& layerMap,
void
BatchNormBaseLayer
::
calFeatureMapSize
()
{
const
ImageConfig
&
conf
=
config_
.
inputs
(
0
).
image_conf
();
i
f
(
inputLayers_
[
0
]
->
getOutput
().
getFrameHeight
()
==
0
&&
inputLayers_
[
0
]
->
getOutput
().
getFrameWidth
()
==
0
)
{
imgSize_
=
conf
.
img_size
();
imageH_
=
imgSize_
;
imageW_
=
imgSize_
;
i
mageH_
=
inputLayers_
[
0
]
->
getOutput
().
getFrameHeight
();
imageW_
=
inputLayers_
[
0
]
->
getOutput
().
getFrameWidth
();
if
(
imageH_
==
0
&&
imageW_
==
0
)
{
imageH_
=
conf
.
has_img_size_y
()
?
conf
.
img_size_y
()
:
conf
.
img_size
()
;
imageW_
=
conf
.
img_size
()
;
}
else
{
imageH_
=
inputLayers_
[
0
]
->
getOutput
().
getFrameHeight
();
imageW_
=
inputLayers_
[
0
]
->
getOutput
().
getFrameWidth
();
getOutput
().
setFrameHeight
(
imageH_
);
getOutput
().
setFrameWidth
(
imageW_
);
}
...
...
paddle/gserver/layers/BatchNormBaseLayer.h
浏览文件 @
7bb627d3
...
...
@@ -77,9 +77,8 @@ protected:
MatrixPtr
savedMean_
;
MatrixPtr
savedInvVar_
;
/// Height or width of input image feature, now height is equal to width.
/// imgSize is 1 if the input is fully-connected layer.
int
imgSize_
;
/// Height or width of input image feature.
/// Both of them are 1 if the input is fully-connected layer.
int
imageH_
;
int
imageW_
;
/// Height * Width.
...
...
paddle/gserver/layers/BilinearInterpLayer.cpp
浏览文件 @
7bb627d3
...
...
@@ -26,15 +26,15 @@ size_t BilinearInterpLayer::getSize() {
const
BilinearInterpConfig
&
conf
=
config_
.
inputs
(
0
).
bilinear_interp_conf
();
if
(
inImgH_
==
0
)
{
inImgH_
=
conf
.
img_size_y
();
inImgH_
=
conf
.
im
age_conf
().
im
g_size_y
();
}
if
(
inImgW_
==
0
)
{
inImgW_
=
conf
.
im
g_size_x
();
inImgW_
=
conf
.
im
age_conf
().
img_size
();
}
outImgH_
=
conf
.
out_size_y
();
outImgW_
=
conf
.
out_size_x
();
numChannels_
=
conf
.
num_
channels
();
numChannels_
=
conf
.
image_conf
().
channels
();
CHECK
(
outImgH_
>
0
&&
outImgW_
>
0
);
CHECK
(
inImgH_
>
0
&&
inImgW_
>
0
);
...
...
paddle/gserver/layers/ConvBaseLayer.cpp
浏览文件 @
7bb627d3
...
...
@@ -38,11 +38,12 @@ bool ConvBaseLayer::init(const LayerMap& layerMap,
filterSizeY_
.
push_back
(
conf
.
filter_size_y
());
filterPixels_
.
push_back
(
filterSize_
.
back
()
*
filterSizeY_
.
back
());
channels_
.
push_back
(
conf
.
channels
());
imgSizeH_
.
push_back
(
conf
.
img_size
());
imgSizeH_
.
push_back
(
conf
.
has_img_size_y
()
?
conf
.
img_size_y
()
:
conf
.
img_size
());
imgSizeW_
.
push_back
(
conf
.
img_size
());
groups_
.
push_back
(
conf
.
groups
());
filterChannels_
.
push_back
(
conf
.
filter_channels
());
outputH_
.
push_back
(
conf
.
output_x
());
outputH_
.
push_back
(
conf
.
has_output_y
()
?
conf
.
output_y
()
:
conf
.
output_x
());
outputW_
.
push_back
(
conf
.
output_x
());
}
...
...
@@ -91,16 +92,19 @@ size_t ConvBaseLayer::calOutputSize() {
for
(
size_t
i
=
0
;
i
<
inputLayers_
.
size
();
i
++
)
{
inH
.
push_back
(
inputLayers_
[
i
]
->
getOutput
().
getFrameHeight
());
inW
.
push_back
(
inputLayers_
[
i
]
->
getOutput
().
getFrameWidth
());
const
ConvConfig
&
conf
=
config_
.
inputs
(
i
).
conv_conf
();
if
(
isDeconv_
)
{
if
(
inH
[
i
]
==
0
)
inH
[
i
]
=
config_
.
inputs
(
i
).
conv_conf
().
output_x
();
if
(
inW
[
i
]
==
0
)
inW
[
i
]
=
config_
.
inputs
(
i
).
conv_conf
().
output_x
();
if
(
inH
[
i
]
==
0
)
inH
[
i
]
=
conf
.
has_output_y
()
?
conf
.
output_y
()
:
conf
.
output_x
();
if
(
inW
[
i
]
==
0
)
inW
[
i
]
=
conf
.
output_x
();
outH
.
push_back
(
imageSize
(
inH
[
i
],
filterSizeY_
[
i
],
paddingY_
[
i
],
strideY_
[
i
],
caffeMode_
));
outW
.
push_back
(
imageSize
(
inW
[
i
],
filterSize_
[
i
],
padding_
[
i
],
stride_
[
i
],
caffeMode_
));
}
else
{
if
(
inH
[
i
]
==
0
)
inH
[
i
]
=
config_
.
inputs
(
i
).
conv_conf
().
img_size
();
if
(
inW
[
i
]
==
0
)
inW
[
i
]
=
config_
.
inputs
(
i
).
conv_conf
().
img_size
();
if
(
inH
[
i
]
==
0
)
inH
[
i
]
=
conf
.
has_img_size_y
()
?
conf
.
img_size_y
()
:
conf
.
img_size
();
if
(
inW
[
i
]
==
0
)
inW
[
i
]
=
conf
.
img_size
();
outH
.
push_back
(
outputSize
(
inH
[
i
],
filterSizeY_
[
i
],
paddingY_
[
i
],
strideY_
[
i
],
caffeMode_
));
outW
.
push_back
(
outputSize
(
...
...
paddle/gserver/layers/ConvOperator.cpp
浏览文件 @
7bb627d3
...
...
@@ -93,9 +93,9 @@ private:
bool
caffeMode_
;
int
inputOffset_
,
outputOffset_
,
weightOffset_
;
int
numFilters_
;
int
padding_
,
stride_
,
filterSize_
,
channels_
,
imgSize_
;
int
padding_
,
stride_
,
filterSize_
,
channels_
,
imgSize_
,
imgSizeY_
;
int
paddingY_
,
strideY_
,
filterSizeY_
;
int
imgPixels_
,
filterPixels_
,
filterChannels_
,
outputX_
,
outputs_
;
int
imgPixels_
,
filterPixels_
,
filterChannels_
,
outputX_
,
output
Y_
,
output
s_
;
/// Following member variables are same with CudnnConvLayer.
/// There is no explanation here.
...
...
@@ -144,7 +144,7 @@ void ConvOperator::allocConvWorkSpace(size_t maxWorkSpace) {
void
ConvOperator
::
reshape
(
int
batchSize
)
{
imageH_
=
ins_
[
0
]
->
getFrameHeight
();
imageW_
=
ins_
[
0
]
->
getFrameWidth
();
if
(
imageH_
==
0
)
imageH_
=
imgSize_
;
if
(
imageH_
==
0
)
imageH_
=
imgSize
Y
_
;
if
(
imageW_
==
0
)
imageW_
=
imgSize_
;
outputH_
=
outputSize
(
imageH_
,
filterSizeY_
,
paddingY_
,
strideY_
,
caffeMode_
);
outputW_
=
outputSize
(
imageW_
,
filterSize_
,
padding_
,
stride_
,
caffeMode_
);
...
...
@@ -182,7 +182,10 @@ void ConvOperator::computeConvSizes() {
hl_create_tensor_descriptor
(
&
inputDesc_
);
int
outputX
=
outputSize
(
imgSize_
,
filterSize_
,
padding_
,
stride_
,
caffeMode_
);
int
outputY
=
outputSize
(
imgSizeY_
,
filterSizeY_
,
paddingY_
,
strideY_
,
caffeMode_
);
CHECK_EQ
(
outputX
,
outputX_
);
CHECK_EQ
(
outputY
,
outputY_
);
hl_create_tensor_descriptor
(
&
outputDesc_
);
hl_create_convolution_descriptor
(
&
convDesc_
,
inputDesc_
,
...
...
@@ -236,10 +239,12 @@ void ConvOperator::getConvParams() {
filterPixels_
=
filterSize_
*
filterSizeY_
;
channels_
=
conf
.
channels
();
imgSize_
=
conf
.
img_size
();
imgPixels_
=
imgSize_
*
imgSize_
;
imgSizeY_
=
conf
.
has_img_size_y
()
?
conf
.
img_size_y
()
:
conf
.
img_size
();
imgPixels_
=
imgSize_
*
imgSizeY_
;
CHECK_EQ
(
conf
.
groups
(),
1U
);
filterChannels_
=
conf
.
filter_channels
();
outputX_
=
conf
.
output_x
();
outputY_
=
conf
.
has_output_y
()
?
conf
.
output_y
()
:
conf
.
output_x
();
outputs_
=
outputX_
*
outputX_
;
}
...
...
paddle/gserver/layers/ConvProjection.cpp
浏览文件 @
7bb627d3
...
...
@@ -46,7 +46,7 @@ void ConvProjection::getConvParams() {
filterH_
=
conf
.
filter_size_y
();
filterW_
=
conf
.
filter_size
();
configImgH_
=
conf
.
img_size
();
configImgH_
=
conf
.
has_img_size_y
()
?
conf
.
img_size_y
()
:
conf
.
img_size
();
configImgW_
=
conf
.
img_size
();
channels_
=
conf
.
channels
();
...
...
@@ -58,9 +58,11 @@ void ConvProjection::getConvParams() {
}
void
ConvProjection
::
initCudnn
()
{
hl_create_filter_descriptor
(
&
filterDesc_
,
channels_
/
groups_
,
numFilters_
/
groups_
,
filterH_
,
filterW_
);
hl_create_filter_descriptor
(
&
filterDesc_
,
channels_
/
groups_
,
numFilters_
/
groups_
,
filterH_
,
filterW_
);
hl_create_tensor_descriptor
(
&
inputDesc_
);
hl_create_tensor_descriptor
(
&
outputDesc_
);
hl_create_convolution_descriptor
(
&
convDesc_
,
...
...
paddle/gserver/layers/DataLayer.cpp
浏览文件 @
7bb627d3
...
...
@@ -49,8 +49,13 @@ void DataLayer::copyDataToOutput(Argument& output) {
output
.
ids
->
copyFrom
(
*
data_
.
ids
);
}
}
output
.
setFrameHeight
(
data_
.
getFrameHeight
());
output
.
setFrameWidth
(
data_
.
getFrameWidth
());
if
(
config_
.
height
()
&&
config_
.
width
())
{
output
.
setFrameHeight
(
config_
.
height
());
output
.
setFrameWidth
(
config_
.
width
());
}
else
{
output
.
setFrameHeight
(
data_
.
getFrameHeight
());
output
.
setFrameHeight
(
data_
.
getFrameHeight
());
}
output
.
cpuSequenceDims
=
data_
.
cpuSequenceDims
;
output
.
sequenceStartPositions
=
data_
.
sequenceStartPositions
;
output
.
subSequenceStartPositions
=
data_
.
subSequenceStartPositions
;
...
...
paddle/gserver/layers/ExpandConvBaseLayer.cpp
浏览文件 @
7bb627d3
...
...
@@ -29,17 +29,19 @@ bool ExpandConvBaseLayer::init(const LayerMap &layerMap,
* meaning as in conv, we need to swap channels_ and numFilters here for
* convTrans, and in other functions too.
* */
int
channel
;
int
numFilters
;
/* Initialize the projection */
for
(
auto
&
inputConfig
:
config_
.
inputs
())
{
const
ConvConfig
&
conf
=
inputConfig
.
conv_conf
();
numFilters
=
isDeconv_
?
conf
.
channels
()
:
numFilters_
;
int
numFilters
=
isDeconv_
?
conf
.
channels
()
:
numFilters_
;
subM_
.
push_back
(
numFilters
/
conf
.
groups
());
subN_
.
push_back
(
conf
.
output_x
()
*
conf
.
output_x
());
channel
=
isDeconv_
?
numFilters_
:
conf
.
channels
();
subK_
.
push_back
(
channel
*
conf
.
filter_size
()
*
conf
.
filter_size
()
/
conf
.
groups
());
subN_
.
push_back
(
conf
.
output_x
()
*
(
conf
.
has_output_y
()
?
conf
.
output_y
()
:
conf
.
output_x
()));
int
channel
=
isDeconv_
?
numFilters_
:
conf
.
channels
();
subK_
.
push_back
(
channel
*
conf
.
filter_size
()
*
(
conf
.
has_filter_size_y
()
?
conf
.
filter_size_y
()
:
conf
.
filter_size
())
/
conf
.
groups
());
/* Consistent caffe mode for multiple input */
caffeMode_
=
conf
.
caffe_mode
();
}
...
...
@@ -116,11 +118,11 @@ void ExpandConvBaseLayer::expandOneFrame(MatrixPtr image,
imgSizeH_
[
inIdx
],
imgSizeW_
[
inIdx
],
channel
,
filterSizeY_
[
inIdx
],
filterSize_
[
inIdx
],
filterSize
_
[
inIdx
],
strideY
_
[
inIdx
],
stride_
[
inIdx
],
stride_
[
inIdx
],
padding_
[
inIdx
],
paddingY_
[
inIdx
],
padding_
[
inIdx
],
outputH_
[
inIdx
],
outputW_
[
inIdx
]);
...
...
@@ -208,11 +210,11 @@ void ExpandConvBaseLayer::bpropActs(MatrixPtr out,
imgSizeH_
[
inpIdx
],
imgSizeW_
[
inpIdx
],
channel
,
filterSizeY_
[
inpIdx
],
filterSize_
[
inpIdx
],
filterSize_
[
inpIdx
],
stride_
[
inpIdx
],
strideY_
[
inpIdx
],
stride_
[
inpIdx
],
padding_
[
inpIdx
],
padding
Y
_
[
inpIdx
],
padding_
[
inpIdx
],
outputH_
[
inpIdx
],
outputW_
[
inpIdx
],
...
...
paddle/gserver/layers/MaxOutLayer.cpp
浏览文件 @
7bb627d3
...
...
@@ -25,10 +25,10 @@ size_t MaxOutLayer::getSize() {
imgSizeH_
=
inputLayers_
[
0
]
->
getOutput
().
getFrameHeight
();
imgSizeW_
=
inputLayers_
[
0
]
->
getOutput
().
getFrameWidth
();
if
(
imgSizeH_
==
0
)
{
imgSizeH_
=
maxoutConf
.
img_size_y
();
imgSizeH_
=
maxoutConf
.
im
age_conf
().
im
g_size_y
();
}
if
(
imgSizeW_
==
0
)
{
imgSizeW_
=
maxoutConf
.
im
g_size_x
();
imgSizeW_
=
maxoutConf
.
im
age_conf
().
img_size
();
}
featLen_
=
imgSizeH_
*
imgSizeW_
;
...
...
@@ -50,7 +50,7 @@ bool MaxOutLayer::init(const LayerMap& layerMap,
const
MaxOutConfig
&
conf
=
config_
.
inputs
(
0
).
maxout_conf
();
groups_
=
conf
.
groups
();
channels_
=
conf
.
channels
();
channels_
=
conf
.
image_conf
().
channels
();
CHECK_EQ
(
channels_
%
groups_
,
0UL
);
outputChannels_
=
channels_
/
groups_
;
...
...
paddle/gserver/layers/NormLayer.cpp
浏览文件 @
7bb627d3
...
...
@@ -48,6 +48,9 @@ bool ResponseNormLayer::init(const LayerMap& layerMap,
outputX_
=
conf
.
output_x
();
imgSize_
=
conf
.
img_size
();
denoms_
=
NULL
;
outputY_
=
conf
.
has_output_y
()
?
conf
.
output_y
()
:
conf
.
output_x
();
imgSizeY_
=
conf
.
has_img_size_y
()
?
conf
.
img_size_y
()
:
conf
.
img_size
();
return
true
;
}
...
...
paddle/gserver/layers/NormLayer.h
浏览文件 @
7bb627d3
...
...
@@ -49,7 +49,7 @@ public:
*/
class
ResponseNormLayer
:
public
NormLayer
{
protected:
size_t
channels_
,
size_
,
outputX_
,
imgSize_
;
size_t
channels_
,
size_
,
outputX_
,
imgSize_
,
outputY_
,
imgSizeY_
;
float
scale_
,
pow_
;
MatrixPtr
denoms_
;
...
...
paddle/gserver/layers/NormProjectionLayer.cpp
浏览文件 @
7bb627d3
...
...
@@ -23,7 +23,7 @@ size_t CMRProjectionNormLayer::getSize() {
imgSizeH_
=
inputLayers_
[
0
]
->
getOutput
().
getFrameHeight
();
imgSizeW_
=
inputLayers_
[
0
]
->
getOutput
().
getFrameWidth
();
if
(
imgSizeH_
==
0
)
{
imgSizeH_
=
imgSize_
;
imgSizeH_
=
imgSize
Y
_
;
}
if
(
imgSizeW_
==
0
)
{
imgSizeW_
=
imgSize_
;
...
...
paddle/gserver/layers/SpatialPyramidPoolLayer.cpp
浏览文件 @
7bb627d3
...
...
@@ -56,14 +56,14 @@ ProjectionConfig SpatialPyramidPoolLayer::getConfig(size_t imgSizeW,
size_t
SpatialPyramidPoolLayer
::
getSize
()
{
CHECK_EQ
(
inputLayers_
.
size
(),
1UL
);
size_t
layerSize
=
0
;
const
SppConfig
&
sppConf
=
config_
.
inputs
(
0
).
spp
_conf
();
const
ImageConfig
&
conf
=
config_
.
inputs
(
0
).
spp_conf
().
image
_conf
();
imgSizeH_
=
inputLayers_
[
0
]
->
getOutput
().
getFrameHeight
();
imgSizeW_
=
inputLayers_
[
0
]
->
getOutput
().
getFrameWidth
();
if
(
imgSizeH_
==
0
)
{
imgSizeH_
=
sppConf
.
has_img_size_y
()
?
sppConf
.
img_size_y
()
:
imgSizeW_
;
imgSizeH_
=
conf
.
has_img_size_y
()
?
conf
.
img_size_y
()
:
conf
.
img_size
()
;
}
if
(
imgSizeW_
==
0
)
{
imgSizeW_
=
sppC
onf
.
img_size
();
imgSizeW_
=
c
onf
.
img_size
();
}
size_t
outputH
=
1
;
...
...
@@ -82,9 +82,10 @@ bool SpatialPyramidPoolLayer::init(const LayerMap& layerMap,
pyramidHeight_
=
sppConf
.
pyramid_height
();
poolType_
=
sppConf
.
pool_type
();
channels_
=
sppConf
.
channels
();
imgSizeW_
=
sppConf
.
img_size
();
imgSizeH_
=
sppConf
.
has_img_size_y
()
?
sppConf
.
img_size_y
()
:
imgSizeW_
;
const
ImageConfig
&
imageConf
=
sppConf
.
image_conf
();
channels_
=
imageConf
.
channels
();
imgSizeW_
=
imageConf
.
img_size
();
imgSizeH_
=
imageConf
.
has_img_size_y
()
?
imageConf
.
img_size_y
()
:
imgSizeW_
;
poolProjections_
.
reserve
(
pyramidHeight_
);
projCol_
.
reserve
(
pyramidHeight_
);
projOutput_
.
resize
(
pyramidHeight_
);
...
...
paddle/gserver/tests/img_pool_a.conf
浏览文件 @
7bb627d3
...
...
@@ -28,7 +28,6 @@ maxpool = img_pool_layer(input=conv,
stride_y
=
2
,
padding
=
1
,
padding_y
=
2
,
img_width
=
16
,
pool_type
=
MaxPooling
(),
)
avgpool
=
img_pool_layer
(
input
=
conv
,
...
...
@@ -39,7 +38,6 @@ avgpool = img_pool_layer(input=conv,
stride_y
=
2
,
padding
=
1
,
padding_y
=
2
,
img_width
=
16
,
pool_type
=
AvgPooling
(),
)
...
...
paddle/gserver/tests/test_LayerGrad.cpp
浏览文件 @
7bb627d3
...
...
@@ -202,16 +202,15 @@ void testProjectionConv(size_t groups) {
conf
.
set_input_size
(
IMAGE_SIZE
*
IMAGE_SIZE
*
CHANNELS
);
conf
.
set_output_size
(
output_x
*
output_y
*
NUM_FILTERS
);
testProjectionGrad
(
conf
,
INPUT_DATA
,
/* parameterSize */
NUM_FILTERS
*
CHANNELS
*
FILTER_SIZE
*
FILTER_SIZE_Y
/
groups
,
/* batchSize */
100
,
true
,
false
,
NUM_FILTERS
,
true
);
testProjectionGrad
(
conf
,
INPUT_DATA
,
/* parameterSize */
NUM_FILTERS
*
CHANNELS
*
FILTER_SIZE
*
FILTER_SIZE_Y
/
groups
,
/* batchSize */
100
,
true
,
false
,
NUM_FILTERS
,
true
);
}
#ifndef PADDLE_ONLY_CPU
...
...
@@ -229,9 +228,10 @@ TEST(Layer, BilinearInterpLayer) {
LayerInputConfig
*
input
=
config
.
layerConfig
.
add_inputs
();
BilinearInterpConfig
*
bilinear
=
input
->
mutable_bilinear_interp_conf
();
bilinear
->
set_img_size_x
(
32
);
bilinear
->
set_img_size_y
(
32
);
bilinear
->
set_num_channels
(
4
);
ImageConfig
*
image
=
bilinear
->
mutable_image_conf
();
image
->
set_img_size
(
32
);
image
->
set_img_size_y
(
32
);
image
->
set_channels
(
4
);
for
(
auto
useGpu
:
{
false
,
true
})
{
for
(
auto
outSize
:
{
32
,
64
})
{
...
...
@@ -354,7 +354,7 @@ void testConvLayer(const string& type, bool trans, bool useGpu) {
config
.
layerConfig
.
set_partial_sum
(
1
);
config
.
layerConfig
.
set_shared_biases
(
true
);
config
.
inputDefs
.
push_back
({
INPUT_DATA
,
"layer_0"
,
768
,
288
});
config
.
inputDefs
.
push_back
({
INPUT_DATA
,
"layer_0"
,
384
,
288
});
LayerInputConfig
*
input
=
config
.
layerConfig
.
add_inputs
();
ConvConfig
*
conv
=
input
->
mutable_conv_conf
();
conv
->
set_filter_size
(
2
);
...
...
@@ -367,12 +367,18 @@ void testConvLayer(const string& type, bool trans, bool useGpu) {
conv
->
set_groups
(
1
);
conv
->
set_filter_channels
(
conv
->
channels
()
/
conv
->
groups
());
conv
->
set_img_size
(
16
);
conv
->
set_img_size_y
(
8
);
conv
->
set_output_x
(
outputSize
(
conv
->
img_size
(),
conv
->
filter_size
(),
conv
->
padding
(),
conv
->
stride
(),
/* caffeMode */
true
));
config
.
layerConfig
.
set_size
(
conv
->
output_x
()
*
conv
->
output_x
()
*
conv
->
set_output_y
(
outputSize
(
conv
->
img_size_y
(),
conv
->
filter_size_y
(),
conv
->
padding_y
(),
conv
->
stride_y
(),
/* caffeMode */
true
));
config
.
layerConfig
.
set_size
(
conv
->
output_x
()
*
conv
->
output_y
()
*
config
.
layerConfig
.
num_filters
());
testLayerGrad
(
config
,
"conv"
,
100
,
trans
,
useGpu
);
...
...
@@ -472,10 +478,11 @@ TEST(Layer, maxoutLayer) {
config
.
inputDefs
.
push_back
({
INPUT_DATA
,
"layer_0"
,
4096
,
0
});
LayerInputConfig
*
input
=
config
.
layerConfig
.
add_inputs
();
MaxOutConfig
*
maxout
=
input
->
mutable_maxout_conf
();
ImageConfig
*
image
=
maxout
->
mutable_image_conf
();
maxout
->
set_img_size_x
(
32
);
maxout
->
set_img_size_y
(
32
);
maxout
->
set_channels
(
4
);
image
->
set_img_size
(
32
);
image
->
set_img_size_y
(
32
);
image
->
set_channels
(
4
);
maxout
->
set_groups
(
2
);
for
(
auto
useGpu
:
{
false
,
true
})
{
...
...
@@ -987,7 +994,7 @@ void testNormLayer(const string& normType, bool trans, bool useGpu) {
config
.
layerConfig
.
set_type
(
"norm"
);
config
.
layerConfig
.
set_active_type
(
"relu"
);
config
.
inputDefs
.
push_back
({
INPUT_DATA
,
"layer_0"
,
3136
,
0
});
config
.
inputDefs
.
push_back
({
INPUT_DATA
,
"layer_0"
,
1568
,
0
});
LayerInputConfig
*
input
=
config
.
layerConfig
.
add_inputs
();
NormConfig
*
norm
=
input
->
mutable_norm_conf
();
norm
->
set_norm_type
(
normType
);
...
...
@@ -997,7 +1004,9 @@ void testNormLayer(const string& normType, bool trans, bool useGpu) {
norm
->
set_pow
(
0.75
);
norm
->
set_blocked
(
0
);
norm
->
set_img_size
(
14
);
norm
->
set_img_size_y
(
7
);
norm
->
set_output_x
(
norm
->
img_size
());
norm
->
set_output_y
(
norm
->
img_size_y
());
if
(
norm
->
norm_type
()
==
"cmrnorm"
||
norm
->
norm_type
()
==
"cmrnorm-projection"
)
{
norm
->
set_scale
(
norm
->
scale
()
/
norm
->
size
());
...
...
@@ -1005,7 +1014,7 @@ void testNormLayer(const string& normType, bool trans, bool useGpu) {
norm
->
set_scale
(
norm
->
scale
()
/
(
norm
->
size
()
*
norm
->
size
()));
}
config
.
layerConfig
.
set_size
(
norm
->
output_x
()
*
norm
->
output_
x
()
*
config
.
layerConfig
.
set_size
(
norm
->
output_x
()
*
norm
->
output_
y
()
*
norm
->
channels
());
config
.
biasSize
=
0
;
...
...
@@ -1106,11 +1115,12 @@ void testSppLayer(const string& poolType,
SppConfig
*
sppConfig
=
input
->
mutable_spp_conf
();
sppConfig
->
set_pool_type
(
poolType
);
sppConfig
->
set_pyramid_height
(
pyramidHeight
);
sppConfig
->
set_channels
(
16
);
sppConfig
->
set_img_size
(
10
);
sppConfig
->
set_img_size_y
(
20
);
ImageConfig
*
imageConfig
=
sppConfig
->
mutable_image_conf
();
imageConfig
->
set_channels
(
16
);
imageConfig
->
set_img_size
(
10
);
imageConfig
->
set_img_size_y
(
20
);
int
outputSize
=
(
std
::
pow
(
4
,
sppConfig
->
pyramid_height
())
-
1
)
/
(
4
-
1
);
config
.
layerConfig
.
set_size
(
outputSize
*
spp
Config
->
channels
());
config
.
layerConfig
.
set_size
(
outputSize
*
image
Config
->
channels
());
testLayerGrad
(
config
,
"spp"
,
100
,
trans
,
useGpu
);
}
...
...
@@ -1420,13 +1430,15 @@ void testBatchNormLayer(const string& type, bool trans, bool useGpu) {
TestConfig
config
;
const
int
CHANNELS
=
10
;
const
int
IMG_SIZE
=
16
;
const
int
IMG_SIZE_Y
=
8
;
size_t
size
=
CHANNELS
*
IMG_SIZE
*
IMG_SIZE_Y
;
config
.
layerConfig
.
set_type
(
type
);
config
.
layerConfig
.
set_size
(
CHANNELS
*
IMG_SIZE
*
IMG_SIZE
);
config
.
layerConfig
.
set_size
(
size
);
config
.
layerConfig
.
set_active_type
(
"sigmoid"
);
config
.
biasSize
=
CHANNELS
;
config
.
inputDefs
.
push_back
({
INPUT_DATA
,
"layer_0"
,
/* dim= */
IMG_SIZE
*
IMG_SIZE
*
CHANNELS
,
/* dim= */
size
,
/* paraSize= */
CHANNELS
});
config
.
inputDefs
.
push_back
({
INPUT_DATA
,
"layer_1_running_mean"
,
1
,
CHANNELS
});
...
...
@@ -1441,6 +1453,7 @@ void testBatchNormLayer(const string& type, bool trans, bool useGpu) {
ImageConfig
*
img_conf
=
input
->
mutable_image_conf
();
img_conf
->
set_channels
(
CHANNELS
);
img_conf
->
set_img_size
(
IMG_SIZE
);
img_conf
->
set_img_size_y
(
IMG_SIZE_Y
);
testLayerGrad
(
config
,
"batch_norm"
,
...
...
@@ -1467,6 +1480,7 @@ TEST(Operator, conv) {
const
int
FILTER_SIZE_Y
=
3
;
const
int
CHANNELS
=
3
;
const
int
IMAGE_SIZE
=
16
;
const
int
IMAGE_SIZE_Y
=
8
;
OperatorConfig
&
operatorConf
=
*
config
.
layerConfig
.
add_operator_confs
();
operatorConf
.
set_type
(
"conv"
);
ConvConfig
*
conv
=
operatorConf
.
mutable_conv_conf
();
...
...
@@ -1481,19 +1495,22 @@ TEST(Operator, conv) {
conv
->
set_groups
(
1
);
conv
->
set_filter_channels
(
conv
->
channels
()
/
conv
->
groups
());
conv
->
set_img_size
(
IMAGE_SIZE
);
int
output_x
=
outputSize
(
conv
->
img_size
(),
conv
->
filter_size
(),
conv
->
padding
(),
conv
->
stride
(),
/* caffeMode */
true
);
conv
->
set_output_x
(
output_x
);
config
.
layerConfig
.
set_size
(
output_x
*
output_x
*
config
.
layerConfig
.
num_filters
());
config
.
layerConfig
.
set_size
(
conv
->
output_x
()
*
conv
->
output_x
()
*
conv
->
set_img_size_y
(
IMAGE_SIZE_Y
);
conv
->
set_output_x
(
outputSize
(
conv
->
img_size
(),
conv
->
filter_size
(),
conv
->
padding
(),
conv
->
stride
(),
/* caffeMode */
true
));
conv
->
set_output_y
(
outputSize
(
conv
->
img_size_y
(),
conv
->
filter_size_y
(),
conv
->
padding_y
(),
conv
->
stride_y
(),
/* caffeMode */
true
));
config
.
layerConfig
.
set_size
(
conv
->
output_x
()
*
conv
->
output_y
()
*
NUM_FILTERS
);
config
.
inputDefs
.
push_back
(
{
INPUT_DATA
,
"layer_0"
,
IMAGE_SIZE
*
IMAGE_SIZE
*
CHANNELS
,
0
});
{
INPUT_DATA
,
"layer_0"
,
IMAGE_SIZE
*
IMAGE_SIZE
_Y
*
CHANNELS
,
0
});
config
.
inputDefs
.
push_back
(
{
INPUT_DATA
,
"layer_1"
,
...
...
paddle/parameter/Argument.cpp
浏览文件 @
7bb627d3
...
...
@@ -225,6 +225,8 @@ void Argument::resizeAndCopyFrom(const Argument& src,
}
resizeAndCopy
(
udp
,
src
.
udp
,
useGpu
,
stream
);
resizeAndCopy
(
strs
,
src
.
strs
,
useGpu
,
stream
);
frameWidth
=
src
.
frameWidth
;
frameHeight
=
src
.
frameHeight
;
}
int32_t
Argument
::
resizeAndCopyFrom
(
const
Argument
&
src
,
...
...
paddle/trainer/tests/test_config.conf
浏览文件 @
7bb627d3
...
...
@@ -59,7 +59,6 @@ pool = img_pool_layer(input=fc2,
padding_y
=
2
,
stride
=
2
,
stride_y
=
3
,
img_width
=
3
,
pool_type
=
CudnnAvgPooling
())
concat
=
concat_layer
(
input
=[
fc3
,
fc4
])
...
...
proto/ModelConfig.proto.m4
浏览文件 @
7bb627d3
...
...
@@ -77,6 +77,12 @@ message ConvConfig {
required uint32 filter_size_y = 10;
required uint32 padding_y = 11;
required uint32 stride_y = 12;
// if not set, use output_x
optional uint32 output_y = 13;
// if not set, use img_size
optional uint32 img_size_y = 14;
}
message PoolConfig {
...
...
@@ -122,11 +128,9 @@ message PoolConfig {
}
message SppConfig {
required string pool_type = 1;
required uint32 pyramid_height = 2;
required uint32 channels = 3;
required uint32 img_size = 4;
optional uint32 img_size_y = 5;
required ImageConfig image_conf = 1;
required string pool_type = 2;
required uint32 pyramid_height = 3;
}
message NormConfig {
...
...
@@ -156,6 +160,12 @@ message NormConfig {
// fixed window: shared a fixed window for each value
// sliding window: have a different window for each value
optional bool blocked = 8;
// if not set, use output_x
optional uint32 output_y = 9;
// if not set, use img_size
optional uint32 img_size_y = 10;
}
message BlockExpandConfig {
...
...
@@ -180,12 +190,8 @@ message BlockExpandConfig {
}
message MaxOutConfig {
required
uint32 channels
= 1;
required
ImageConfig image_conf
= 1;
required uint32 groups = 2;
// The size of input feature map.
required uint32 img_size_x = 3;
required uint32 img_size_y = 4;
}
message ProjectionConfig {
...
...
@@ -226,12 +232,10 @@ message OperatorConfig {
message BilinearInterpConfig {
// The size of input feature map.
optional uint32 img_size_x = 1;
optional uint32 img_size_y = 2;
required ImageConfig image_conf = 1;
// The size of output feature map.
required uint32 out_size_x = 3;
required uint32 out_size_y = 4;
required uint32 num_channels = 5;
required uint32 out_size_x = 2;
required uint32 out_size_y = 3;
}
message ImageConfig {
...
...
@@ -241,6 +245,7 @@ message ImageConfig {
// The size of input feature map.
required uint32 img_size = 8;
required uint32 img_size_y = 9;
}
message LayerInputConfig {
...
...
@@ -413,7 +418,10 @@ sinclude(`ModelConfigLayer.proto.m4')
//
string
type
is
used
for
flexibility
:
different
types
can
be
converted
//
to
string
and
reinterpreted
in
the
user
's own layer implementation.
optional string user_arg = 49;
// to indicate rectangle image data
optional uint64 height = 50;
optional uint64 width = 51;
}
message EvaluatorConfig {
...
...
python/paddle/trainer/config_parser.py
浏览文件 @
7bb627d3
...
...
@@ -138,7 +138,14 @@ def init_config_environment(
g_root_submodel
=
None
,
g_submodel_map
=
{},
g_submodel_stack
=
[],
g_add_submodel_suffix
=
False
,
):
g_add_submodel_suffix
=
False
,
# Whether current layer needs to pass the image height and width.
# Default value is true, but if it encounters recurrent_layer_group,
# it will be false. The reason is that image is converted to be sequence,
# image height will be sequence length, and image width will be feature
# length of each timestep.
g_pass_height_width
=
True
,
):
for
k
,
v
in
locals
().
iteritems
():
globals
()[
k
]
=
copy
.
deepcopy
(
v
)
...
...
@@ -686,9 +693,9 @@ class ConvProjection(Projection):
parse_conv
(
conv_conf
,
input_layer_name
,
self
.
proj_conf
.
conv_conf
,
num_filters
)
# TODO: support rectangle input
self
.
proj_conf
.
output_size
=
(
self
.
proj_conf
.
conv_conf
.
output_x
**
2
)
*
num_filters
self
.
proj_conf
.
output_size
=
self
.
proj_conf
.
conv_conf
.
output_x
*
\
self
.
proj_conf
.
conv_conf
.
output_y
*
\
num_filters
def
calc_output_size
(
self
,
input_layer_config
):
return
self
.
proj_conf
.
output_size
...
...
@@ -764,8 +771,9 @@ class ConvOperator(Operator):
parse_conv
(
conv_conf
,
MakeLayerNameInSubmodel
(
input_layer_names
[
0
]),
self
.
operator_conf
.
conv_conf
,
num_filters
)
self
.
operator_conf
.
output_size
=
(
self
.
operator_conf
.
conv_conf
.
output_x
**
2
)
*
num_filters
self
.
operator_conf
.
output_size
=
self
.
operator_conf
.
conv_conf
.
output_x
*
\
self
.
operator_conf
.
conv_conf
.
output_y
*
\
num_filters
config_assert
(
len
(
input_layer_names
)
==
2
,
"Conv is binary operator"
)
...
...
@@ -800,14 +808,12 @@ class Conv(Cfg):
config_assert
(
output_x
<=
0
)
# please refer to the comments in proto/ModelConfig.proto
@
config_class
class
BilinearInterp
(
Cfg
):
def
__init__
(
self
,
out_size_x
=
None
,
out_size_y
=
None
,
num_
channels
=
None
):
def
__init__
(
self
,
out_size_x
=
None
,
out_size_y
=
None
,
channels
=
None
):
self
.
add_keys
(
locals
())
# please refer to the comments in proto/ModelConfig.proto
@
config_class
class
Pool
(
Cfg
):
def
__init__
(
...
...
@@ -825,14 +831,12 @@ class Pool(Cfg):
self
.
add_keys
(
locals
())
# please refer to the comments in proto/ModelConfig.proto
@
config_class
class
SpatialPyramidPool
(
Cfg
):
def
__init__
(
self
,
pool_type
,
pyramid_height
,
channels
,
img_width
=
None
):
def
__init__
(
self
,
pool_type
,
pyramid_height
,
channels
):
self
.
add_keys
(
locals
())
# please refer to the comments in proto/ModelConfig.proto
@
config_class
class
Norm
(
Cfg
):
def
__init__
(
self
,
...
...
@@ -847,7 +851,6 @@ class Norm(Cfg):
self
.
add_keys
(
locals
())
# please refer to the comments in proto/ModelConfig.proto
@
config_class
class
Image
(
Cfg
):
def
__init__
(
self
,
channels
,
img_size
=
None
):
...
...
@@ -1054,18 +1057,8 @@ def TestData(data_config, async_load_data=None):
g_config
.
test_data_config
.
async_load_data
=
async_load_data
def
parse_bilinear
(
bilinear
,
input_layer_name
,
bilinear_conf
):
bilinear_conf
.
out_size_x
=
bilinear
.
out_size_x
bilinear_conf
.
out_size_y
=
bilinear
.
out_size_y
bilinear_conf
.
num_channels
=
bilinear
.
num_channels
'''
caffe_mode: compute the output size using floor instead of ceil,
which is consistent of caffe and CuDNN's convention.
'''
#caffe_mode: compute the output size using floor instead of ceil,
# which is consistent of caffe and CuDNN's convention.
def
cnn_output_size
(
img_size
,
filter_size
,
padding
,
stride
,
caffe_mode
):
output
=
(
2
*
padding
+
img_size
-
filter_size
)
/
float
(
stride
)
if
caffe_mode
:
...
...
@@ -1074,20 +1067,34 @@ def cnn_output_size(img_size, filter_size, padding, stride, caffe_mode):
return
1
+
int
(
math
.
ceil
(
output
))
'''
calcualte image_size based on output_size for convolution.
It is the reverse function of cnn_output_size
'''
#calcualte image_size based on output_size for de-convolution (ConvTransLayer).
#It is the reverse function of cnn_output_size
def
cnn_image_size
(
output_size
,
filter_size
,
padding
,
stride
,
caffe_mode
):
if
caffe_mode
:
img_size
=
(
output_size
-
1
)
*
stride
+
filter_size
-
2
*
padding
else
:
img_size
=
(
output_size
-
2
)
*
stride
+
filter_size
-
2
*
padding
+
1
img_size
=
(
output_size
-
1
)
*
stride
+
filter_size
-
2
*
padding
if
not
caffe_mode
:
img_size
=
img_size
+
1
return
img_size
def
get_img_size
(
input_layer_name
,
channels
):
input
=
g_layer_map
[
input_layer_name
]
img_pixels
=
input
.
size
/
channels
img_size
=
input
.
width
if
input
.
width
>
0
else
int
(
img_pixels
**
0.5
)
img_size_y
=
input
.
height
if
input
.
height
>
0
else
int
(
img_pixels
/
img_size
)
config_assert
(
img_size
*
img_size_y
==
img_pixels
,
"Input layer %s: Incorrect input image size %d * %d for input image pixels %d"
%
(
input_layer_name
,
img_size
,
img_size_y
,
img_pixels
))
return
img_size
,
img_size_y
def
parse_bilinear
(
bilinear
,
input_layer_name
,
bilinear_conf
):
parse_image
(
bilinear
,
input_layer_name
,
bilinear_conf
.
image_conf
)
bilinear_conf
.
out_size_x
=
bilinear
.
out_size_x
bilinear_conf
.
out_size_y
=
bilinear
.
out_size_y
def
parse_pool
(
pool
,
input_layer_name
,
pool_conf
):
pool_conf
.
pool_type
=
pool
.
pool_type
config_assert
(
pool
.
pool_type
in
[
...
...
@@ -1103,14 +1110,8 @@ def parse_pool(pool, input_layer_name, pool_conf):
pool_conf
.
size_y
=
default
(
pool
.
size_y
,
pool_conf
.
size_x
)
pool_conf
.
stride_y
=
default
(
pool
.
stride_y
,
pool_conf
.
stride
)
img_pixels
=
g_layer_map
[
input_layer_name
].
size
/
pool
.
channels
# the img_width may be removed,
# and it can be calculated automatically later.
pool_conf
.
img_size
=
default
(
pool
.
img_width
,
int
(
img_pixels
**
0.5
))
pool_conf
.
img_size_y
=
img_pixels
/
pool_conf
.
img_size
config_assert
(
pool_conf
.
img_size
*
pool_conf
.
img_size_y
==
img_pixels
,
"Incorrect input image size %d for input image pixels %d"
%
(
pool_conf
.
img_size
,
img_pixels
))
pool_conf
.
img_size
,
pool_conf
.
img_size_y
=
\
get_img_size
(
input_layer_name
,
pool
.
channels
)
config_assert
(
not
pool
.
start
,
"start is deprecated in pooling."
)
...
...
@@ -1126,29 +1127,18 @@ def parse_pool(pool, input_layer_name, pool_conf):
def
parse_spp
(
spp
,
input_layer_name
,
spp_conf
):
parse_image
(
spp
,
input_layer_name
,
spp_conf
.
image_conf
)
spp_conf
.
pool_type
=
spp
.
pool_type
config_assert
(
spp
.
pool_type
in
[
'max-projection'
,
'avg-projection'
],
"pool-type %s is not in "
"['max-projection', 'avg-projection']"
%
spp
.
pool_type
)
spp_conf
.
pyramid_height
=
spp
.
pyramid_height
spp_conf
.
channels
=
spp
.
channels
img_pixels
=
g_layer_map
[
input_layer_name
].
size
/
spp_conf
.
channels
spp_conf
.
img_size
=
default
(
spp
.
img_width
,
int
(
img_pixels
**
0.5
))
spp_conf
.
img_size_y
=
img_pixels
/
spp_conf
.
img_size
config_assert
(
spp_conf
.
img_size
*
spp_conf
.
img_size_y
==
img_pixels
,
"Incorrect input image size %d for input image pixels %d"
%
(
spp_conf
.
img_size
,
img_pixels
))
def
parse_image
(
image
,
input_layer_name
,
image_conf
):
image_conf
.
channels
=
image
.
channels
image_pixels
=
g_layer_map
[
input_layer_name
].
size
/
image_conf
.
channels
image_conf
.
img_size
=
int
(
image_pixels
**
0.5
)
config_assert
((
image_conf
.
img_size
**
2
)
==
image_pixels
,
"Incorrect input image size %d for input image pixels %d"
%
(
image_conf
.
img_size
,
image_pixels
))
image_conf
.
img_size
,
image_conf
.
img_size_y
=
\
get_img_size
(
input_layer_name
,
image_conf
.
channels
)
def
parse_norm
(
norm
,
input_layer_name
,
norm_conf
):
...
...
@@ -1162,24 +1152,18 @@ def parse_norm(norm, input_layer_name, norm_conf):
norm_conf
.
pow
=
norm
.
pow
norm_conf
.
blocked
=
norm
.
blocked
img_pixels
=
g_layer_map
[
input_layer_name
].
size
/
norm
.
channels
norm_conf
.
img_size
=
int
(
img_pixels
**
0.5
)
config_assert
((
norm_conf
.
img_size
**
2
)
==
img_pixels
,
"Incorrect input image size %d for input image pixels %d"
%
(
norm_conf
.
img_size
,
img_pixels
))
norm_conf
.
img_size
,
norm_conf
.
img_size_y
=
\
get_img_size
(
input_layer_name
,
norm
.
channels
)
norm_conf
.
output_x
=
norm_conf
.
img_size
norm_conf
.
output_y
=
norm_conf
.
img_size_y
if
norm
.
norm_type
in
[
'cmrnorm-projection'
]:
norm_conf
.
scale
/=
norm
.
size
else
:
norm_conf
.
scale
/=
norm
.
size
**
2
'''
caffe_mode: compute the output size using floor instead of ceil,
which is consistent of caffe and CuDNN's convention.
'''
#caffe_mode: compute the output size using floor instead of ceil,
# which is consistent of caffe and CuDNN's convention.
def
parse_conv
(
conv
,
input_layer_name
,
conv_conf
,
num_filters
,
trans
=
False
):
conv_conf
.
filter_size
=
conv
.
filter_size
conv_conf
.
filter_size_y
=
conv
.
filter_size_y
...
...
@@ -1193,33 +1177,24 @@ def parse_conv(conv, input_layer_name, conv_conf, num_filters, trans=False):
if
not
trans
:
conv_conf
.
filter_channels
=
conv
.
channels
/
conv
.
groups
img_pixels
=
g_layer_map
[
input_layer_name
].
size
/
conv
.
channels
print
(
'channels=%d size=%d'
%
(
conv
.
channels
,
g_layer_map
[
input_layer_name
].
size
))
conv_conf
.
img_size
=
int
(
img_pixels
**
0.5
)
config_assert
((
conv_conf
.
img_size
**
2
)
==
img_pixels
,
(
"Input layer %s: Incorrect input image size %d for input "
+
"image pixels %d"
)
%
(
input_layer_name
,
conv_conf
.
img_size
,
img_pixels
))
conv_conf
.
img_size
,
conv_conf
.
img_size_y
=
\
get_img_size
(
input_layer_name
,
conv
.
channels
)
conv_conf
.
output_x
=
cnn_output_size
(
conv_conf
.
img_size
,
conv_conf
.
filter_size
,
conv_conf
.
padding
,
conv_conf
.
stride
,
conv_conf
.
caffe_mode
)
conv_conf
.
output_y
=
cnn_output_size
(
conv_conf
.
img_size_y
,
conv_conf
.
filter_size_y
,
conv_conf
.
padding_y
,
conv_conf
.
stride_y
,
conv_conf
.
caffe_mode
)
else
:
conv_conf
.
filter_channels
=
num_filters
/
conv
.
groups
outputSize
=
g_layer_map
[
input_layer_name
].
size
/
conv
.
channels
print
(
'channels=%d size=%d'
%
(
conv
.
channels
,
g_layer_map
[
input_layer_name
].
size
))
conv_conf
.
output_x
=
int
(
outputSize
**
0.5
)
config_assert
((
conv_conf
.
output_x
**
2
)
==
outputSize
,
(
"Input layer %s: Incorrect input image size %d for input "
+
"image pixels %d"
)
%
(
input_layer_name
,
conv_conf
.
output_x
,
outputSize
))
conv_conf
.
output_x
,
conv_conf
.
output_y
=
\
get_img_size
(
input_layer_name
,
conv
.
channels
)
conv_conf
.
img_size
=
cnn_image_size
(
conv_conf
.
output_x
,
conv_conf
.
filter_size
,
conv_conf
.
padding
,
conv_conf
.
stride
,
conv_conf
.
caffe_mode
)
conv_conf
.
img_size_y
=
cnn_image_size
(
conv_conf
.
output_y
,
conv_conf
.
filter_size_y
,
conv_conf
.
padding_y
,
conv_conf
.
stride_y
,
conv_conf
.
caffe_mode
)
def
parse_block_expand
(
block_expand
,
input_layer_name
,
block_expand_conf
):
...
...
@@ -1248,10 +1223,8 @@ def parse_block_expand(block_expand, input_layer_name, block_expand_conf):
def
parse_maxout
(
maxout
,
input_layer_name
,
maxout_conf
):
maxout_conf
.
channels
=
maxout
.
channels
parse_image
(
maxout
,
input_layer_name
,
maxout_conf
.
image_conf
)
maxout_conf
.
groups
=
maxout
.
groups
maxout_conf
.
img_size_x
=
maxout
.
img_size_x
maxout_conf
.
img_size_y
=
maxout
.
img_size_y
# Define an evaluator
...
...
@@ -1378,6 +1351,12 @@ class LayerBase(object):
g_current_submodel
.
layer_names
.
append
(
self
.
config
.
name
)
if
self
.
config
.
type
!=
'data'
and
g_pass_height_width
:
height
=
self
.
get_input_layer
(
0
).
height
width
=
self
.
get_input_layer
(
0
).
width
if
height
and
width
:
self
.
set_layer_height_width
(
height
,
width
)
def
get_input_layer
(
self
,
input_index
):
return
g_layer_map
[
self
.
config
.
inputs
[
input_index
].
input_layer_name
]
...
...
@@ -1495,6 +1474,23 @@ class LayerBase(object):
'Different inputs result in'
+
'different layer size at layer %s'
%
self
.
config
.
name
)
def
set_layer_height_width
(
self
,
height
,
width
):
self
.
config
.
height
=
height
self
.
config
.
width
=
width
def
set_cnn_layer
(
self
,
input_layer_name
,
height
,
width
,
channels
,
is_print
=
True
):
size
=
height
*
width
*
channels
self
.
set_layer_size
(
size
)
self
.
set_layer_height_width
(
height
,
width
)
if
is_print
:
print
(
"output for %s: c = %d, h = %d, w = %d, size = %d"
%
(
input_layer_name
,
channels
,
height
,
width
,
size
))
@
config_layer
(
'multi_class_cross_entropy_with_selfnorm'
)
class
MultiClassCrossEntropySelfNormCostLayer
(
LayerBase
):
...
...
@@ -1584,9 +1580,11 @@ class PrintLayer(LayerBase):
@
config_layer
(
'data'
)
class
DataLayer
(
LayerBase
):
def
__init__
(
self
,
name
,
size
,
device
=
None
):
def
__init__
(
self
,
name
,
size
,
height
=
None
,
width
=
None
,
device
=
None
):
super
(
DataLayer
,
self
).
__init__
(
name
,
'data'
,
size
,
inputs
=
[],
device
=
device
)
if
height
and
width
:
self
.
set_layer_height_width
(
height
,
width
)
'''
...
...
@@ -1685,14 +1683,13 @@ class ConvLayerBase(LayerBase):
for
input_index
in
xrange
(
len
(
self
.
inputs
)):
input_layer
=
self
.
get_input_layer
(
input_index
)
parse_conv
(
self
.
inputs
[
input_index
].
conv
,
input_layer
.
name
,
self
.
config
.
inputs
[
input_index
].
conv_conf
,
num_filters
)
conv_conf
=
self
.
config
.
inputs
[
input_index
].
conv_conf
parse_conv
(
self
.
inputs
[
input_index
].
conv
,
input_layer
.
name
,
conv_conf
,
num_filters
)
psize
=
self
.
calc_parameter_size
(
conv_conf
)
print
(
"output size for %s is %d "
%
(
name
,
conv_conf
.
output_x
))
self
.
create_input_parameter
(
input_index
,
psize
)
self
.
set_
layer_size
(
(
conv_conf
.
output_x
**
2
)
*
self
.
config
.
num_filters
)
self
.
set_
cnn_layer
(
name
,
conv_conf
.
output_y
,
conv_conf
.
output_x
,
self
.
config
.
num_filters
)
psize
=
self
.
config
.
size
if
shared_biases
:
...
...
@@ -1779,10 +1776,11 @@ class NormLayer(LayerBase):
name
,
'norm'
,
0
,
inputs
=
inputs
,
device
=
device
)
for
input_index
in
xrange
(
len
(
self
.
inputs
)):
input_layer
=
self
.
get_input_layer
(
input_index
)
parse_norm
(
self
.
inputs
[
input_index
].
norm
,
input_layer
.
name
,
self
.
config
.
inputs
[
input_index
].
norm_conf
)
norm_conf
=
self
.
config
.
inputs
[
input_index
].
norm_conf
self
.
set_layer_size
((
norm_conf
.
output_x
**
2
)
*
norm_conf
.
channels
)
parse_norm
(
self
.
inputs
[
input_index
].
norm
,
input_layer
.
name
,
norm_conf
)
self
.
set_cnn_layer
(
name
,
norm_conf
.
output_y
,
norm_conf
.
output_x
,
norm_conf
.
channels
,
False
)
@
config_layer
(
'pool'
)
...
...
@@ -1792,13 +1790,11 @@ class PoolLayer(LayerBase):
name
,
'pool'
,
0
,
inputs
=
inputs
,
device
=
device
)
for
input_index
in
xrange
(
len
(
self
.
inputs
)):
input_layer
=
self
.
get_input_layer
(
input_index
)
parse_pool
(
self
.
inputs
[
input_index
].
pool
,
input_layer
.
name
,
self
.
config
.
inputs
[
input_index
].
pool_conf
)
pool_conf
=
self
.
config
.
inputs
[
input_index
].
pool_conf
p
rint
(
"output size for %s is %d*%d "
%
(
name
,
pool_conf
.
output_y
,
pool_conf
.
output_x
)
)
self
.
set_
layer_size
(
(
pool_conf
.
output_x
*
pool_conf
.
output_y
)
*
pool_conf
.
channels
)
p
arse_pool
(
self
.
inputs
[
input_index
].
pool
,
input_layer
.
name
,
pool_conf
)
self
.
set_
cnn_layer
(
name
,
pool_conf
.
output_y
,
pool_conf
.
output_x
,
pool_conf
.
channels
)
@
config_layer
(
'spp'
)
...
...
@@ -1808,12 +1804,10 @@ class SpatialPyramidPoolLayer(LayerBase):
name
,
'spp'
,
0
,
inputs
=
inputs
,
device
=
device
)
for
input_index
in
xrange
(
len
(
self
.
inputs
)):
input_layer
=
self
.
get_input_layer
(
input_index
)
parse_spp
(
self
.
inputs
[
input_index
].
spp
,
input_layer
.
name
,
self
.
config
.
inputs
[
input_index
].
spp_conf
)
spp_conf
=
self
.
config
.
inputs
[
input_index
].
spp_conf
output_size
=
(
pow
(
4
,
spp_conf
.
pyramid_height
)
-
1
)
/
(
4
-
1
)
print
(
"output size for %s is %d "
%
(
name
,
output_size
)
)
self
.
set_
layer_size
(
output_size
*
spp
_conf
.
channels
)
parse_spp
(
self
.
inputs
[
input_index
].
spp
,
input_layer
.
name
,
spp_conf
)
output_x
=
(
pow
(
4
,
spp_conf
.
pyramid_height
)
-
1
)
/
(
4
-
1
)
self
.
set_
cnn_layer
(
name
,
1
,
output_x
,
spp_conf
.
image
_conf
.
channels
)
@
config_layer
(
'batch_norm'
)
...
...
@@ -1875,10 +1869,10 @@ class BatchNormLayer(LayerBase):
self
.
config
.
moving_average_fraction
=
moving_average_fraction
input_layer
=
self
.
get_input_layer
(
0
)
parse_image
(
self
.
inputs
[
0
].
image
,
input_layer
.
name
,
self
.
config
.
inputs
[
0
].
image_conf
)
image_conf
=
self
.
config
.
inputs
[
0
].
image_conf
self
.
set_layer_size
((
image_conf
.
img_size
**
2
)
*
image_conf
.
channels
)
parse_image
(
self
.
inputs
[
0
].
image
,
input_layer
.
name
,
image_conf
)
self
.
set_cnn_layer
(
name
,
image_conf
.
img_size_y
,
image_conf
.
img_size
,
image_conf
.
channels
)
psize
=
self
.
calc_parameter_size
(
image_conf
)
dims
=
[
1
,
psize
]
...
...
@@ -1936,11 +1930,11 @@ class MaxOutLayer(LayerBase):
super
(
MaxOutLayer
,
self
).
__init__
(
name
,
'maxout'
,
0
,
inputs
=
inputs
,
**
xargs
)
input_layer
=
self
.
get_input_layer
(
0
)
parse_maxout
(
self
.
inputs
[
0
].
maxout
,
input_layer
.
name
,
self
.
config
.
inputs
[
0
].
maxout_conf
)
maxout_conf
=
self
.
config
.
inputs
[
0
].
maxout_conf
self
.
set_layer_size
(
g_layer_map
[
input_layer
.
name
].
size
/
maxout_conf
.
groups
)
parse_maxout
(
self
.
inputs
[
0
].
maxout
,
input_layer
.
name
,
maxout_conf
)
out_channels
=
maxout_conf
.
image_conf
.
channels
/
maxout_conf
.
groups
self
.
set_cnn_layer
(
name
,
g_layer_map
[
input_layer
.
name
].
height
,
g_layer_map
[
input_layer
.
name
].
width
,
out_channels
)
# key: cost type
...
...
@@ -2520,11 +2514,10 @@ class BilinearInterpLayer(LayerBase):
super
(
BilinearInterpLayer
,
self
).
__init__
(
name
,
'bilinear_interp'
,
0
,
inputs
=
inputs
,
**
xargs
)
input_layer
=
self
.
get_input_layer
(
0
)
parse_bilinear
(
self
.
inputs
[
0
].
bilinear_interp
,
input_layer
.
name
,
self
.
config
.
inputs
[
0
].
bilinear_interp_conf
)
conf
=
self
.
inputs
[
0
].
bilinear_interp
self
.
set_layer_size
(
conf
.
out_size_x
*
conf
.
out_size_y
*
conf
.
num_channels
)
conf
=
self
.
config
.
inputs
[
0
].
bilinear_interp_conf
parse_bilinear
(
self
.
inputs
[
0
].
bilinear_interp
,
input_layer
.
name
,
conf
)
self
.
set_cnn_layer
(
name
,
conf
.
out_size_y
,
conf
.
out_size_x
,
conf
.
image_conf
.
channels
)
@
config_layer
(
'sum_to_one_norm'
)
...
...
@@ -2997,6 +2990,8 @@ class CTCLayer(LayerBase):
@
config_layer
(
'recurrent_layer_group'
)
class
RecurrentLayerGroup
(
LayerBase
):
def
__init__
(
self
,
name
,
device
=
None
):
global
g_pass_height_width
g_pass_height_width
=
False
super
(
RecurrentLayerGroup
,
self
).
__init__
(
name
,
'recurrent_layer_group'
,
0
,
inputs
=
[],
device
=
device
)
...
...
python/paddle/trainer_config_helpers/layers.py
浏览文件 @
7bb627d3
...
...
@@ -766,7 +766,7 @@ def mixed_layer(size=0,
@
layer_support
()
def
data_layer
(
name
,
size
,
layer_attr
=
None
):
def
data_layer
(
name
,
size
,
height
=
None
,
width
=
None
,
layer_attr
=
None
):
"""
Define DataLayer For NeuralNetwork.
...
...
@@ -781,6 +781,10 @@ def data_layer(name, size, layer_attr=None):
:type name: basestring
:param size: Size of this data layer.
:type size: int
:param height: Height of this data layer, used for image
:type size: int|None
:param width: Width of this data layer, used for image
:type size: int|None
:param layer_attr: Extra Layer Attribute.
:type layer_attr: ExtraLayerAttribute.
:return: LayerOutput object.
...
...
@@ -790,6 +794,8 @@ def data_layer(name, size, layer_attr=None):
type
=
LayerType
.
DATA
,
name
=
name
,
size
=
size
,
height
=
height
,
width
=
width
,
**
ExtraLayerAttribute
.
to_kwargs
(
layer_attr
))
return
LayerOutput
(
name
,
LayerType
.
DATA
,
size
=
size
)
...
...
@@ -1483,7 +1489,7 @@ def bilinear_interp_layer(input,
bilinear_interp
=
BilinearInterp
(
out_size_x
=
out_size_x
,
out_size_y
=
out_size_y
,
num_
channels
=
num_channels
)),
channels
=
num_channels
)),
type
=
LayerType
.
BILINEAR_INTERP_LAYER
,
**
ExtraLayerAttribute
.
to_kwargs
(
layer_attr
))
return
LayerOutput
(
...
...
@@ -1872,7 +1878,7 @@ def img_conv_layer(input,
param_attr
.
attr
[
"initial_std"
]
=
init_w
param_attr
.
attr
[
"initial_strategy"
]
=
0
param_attr
.
attr
[
"initial_smart"
]
=
False
if
layer_type
:
if
trans
:
assert
layer_type
in
[
"exconvt"
]
...
...
@@ -1923,8 +1929,7 @@ def img_pool_layer(input,
layer_attr
=
None
,
pool_size_y
=
None
,
stride_y
=
None
,
padding_y
=
None
,
img_width
=
None
):
padding_y
=
None
):
"""
Image pooling Layer.
...
...
@@ -1955,9 +1960,6 @@ def img_pool_layer(input,
:type stride_y: int|None
:param layer_attr: Extra Layer attribute.
:type layer_attr: ExtraLayerAttribute
:param img_width: the width of input feature map. If it is None, the input feature
map should be square.
:type img_width: int|None
:return: LayerOutput object.
:rtype: LayerOutput
"""
...
...
@@ -1993,8 +1995,7 @@ def img_pool_layer(input,
padding
=
padding
,
size_y
=
pool_size_y
,
stride_y
=
stride_y
,
padding_y
=
padding_y
,
img_width
=
img_width
))
padding_y
=
padding_y
))
],
**
ExtraLayerAttribute
.
to_kwargs
(
layer_attr
))
return
LayerOutput
(
...
...
@@ -2012,7 +2013,6 @@ def spp_layer(input,
num_channels
=
None
,
pool_type
=
None
,
pyramid_height
=
None
,
img_width
=
None
,
layer_attr
=
None
):
"""
Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition.
...
...
@@ -2029,9 +2029,6 @@ def spp_layer(input,
:type scale: BasePoolingType
:param pyramid_height: pyramid height.
:type pyramid_height: int
:param img_width: the width of input feature map. If it is None, the input feature
map should be square.
:type img_width: int|None
:param layer_attr: Extra Layer Attribute.
:type layer_attr: ExtraLayerAttribute
:return: LayerOutput object.
...
...
@@ -2058,8 +2055,7 @@ def spp_layer(input,
spp
=
SpatialPyramidPool
(
pool_type
=
type_name
,
channels
=
num_channels
,
pyramid_height
=
pyramid_height
,
img_width
=
img_width
)),
pyramid_height
=
pyramid_height
)),
**
ExtraLayerAttribute
.
to_kwargs
(
layer_attr
))
return
LayerOutput
(
name
,
...
...
python/paddle/trainer_config_helpers/tests/configs/protostr/img_layers.protostr
浏览文件 @
7bb627d3
...
...
@@ -26,11 +26,15 @@ layers {
filter_size_y: 32
padding_y: 1
stride_y: 1
output_y: 227
img_size_y: 256
}
}
bias_parameter_name: "___conv_0__.wbias"
num_filters: 64
shared_biases: true
height: 227
width: 227
}
layers {
name: "__batch_norm_0__"
...
...
@@ -43,6 +47,7 @@ layers {
image_conf {
channels: 64
img_size: 227
img_size_y: 227
}
}
inputs {
...
...
@@ -55,6 +60,8 @@ layers {
}
bias_parameter_name: "___batch_norm_0__.wbias"
moving_average_fraction: 0.9
height: 227
width: 227
}
layers {
name: "__crmnorm_0__"
...
...
@@ -72,8 +79,12 @@ layers {
output_x: 227
img_size: 227
blocked: false
output_y: 227
img_size_y: 227
}
}
height: 227
width: 227
}
layers {
name: "__pool_0__"
...
...
@@ -97,6 +108,8 @@ layers {
padding_y: 0
}
}
height: 196
width: 196
}
parameters {
name: "___conv_0__.w0"
...
...
python/paddle/trainer_config_helpers/tests/configs/protostr/img_trans_layers.protostr
浏览文件 @
7bb627d3
...
...
@@ -26,6 +26,8 @@ layers {
filter_size_y: 32
padding_y: 1
stride_y: 1
output_y: 227
img_size_y: 256
}
}
bias_parameter_name: "___conv_0__.wbias"
...
...
@@ -43,6 +45,7 @@ layers {
image_conf {
channels: 64
img_size: 256
img_size_y: 256
}
}
inputs {
...
...
@@ -55,6 +58,8 @@ layers {
}
bias_parameter_name: "___batch_norm_0__.wbias"
moving_average_fraction: 0.9
height: 256
width: 256
}
layers {
name: "__crmnorm_0__"
...
...
@@ -72,8 +77,12 @@ layers {
output_x: 256
img_size: 256
blocked: false
output_y: 256
img_size_y: 256
}
}
height: 256
width: 256
}
layers {
name: "__pool_0__"
...
...
@@ -97,6 +106,8 @@ layers {
padding_y: 0
}
}
height: 225
width: 225
}
parameters {
name: "___conv_0__.w0"
...
...
python/paddle/trainer_config_helpers/tests/configs/protostr/projections.protostr
浏览文件 @
7bb627d3
...
...
@@ -177,6 +177,8 @@ layers {
filter_size_y: 3
padding_y: 0
stride_y: 1
output_y: 30
img_size_y: 32
}
num_filters: 64
}
...
...
python/paddle/trainer_config_helpers/tests/configs/protostr/test_bilinear_interp.protostr
浏览文件 @
7bb627d3
...
...
@@ -26,11 +26,15 @@ layers {
filter_size_y: 3
padding_y: 1
stride_y: 1
output_y: 48
img_size_y: 48
}
}
bias_parameter_name: "___conv_0__.wbias"
num_filters: 16
shared_biases: true
height: 48
width: 48
}
layers {
name: "__bilinear_interp_layer_0__"
...
...
@@ -40,11 +44,17 @@ layers {
inputs {
input_layer_name: "__conv_0__"
bilinear_interp_conf {
image_conf {
channels: 16
img_size: 48
img_size_y: 48
}
out_size_x: 64
out_size_y: 64
num_channels: 16
}
}
height: 64
width: 64
}
layers {
name: "__pool_0__"
...
...
@@ -55,19 +65,21 @@ layers {
input_layer_name: "__bilinear_interp_layer_0__"
pool_conf {
pool_type: "max-projection"
channels:
4
channels:
16
size_x: 2
stride: 2
output_x:
64
img_size:
128
output_x:
32
img_size:
64
padding: 0
size_y: 2
stride_y: 2
output_y:
64
img_size_y:
128
output_y:
32
img_size_y:
64
padding_y: 0
}
}
height: 32
width: 32
}
layers {
name: "__fc_layer_0__"
...
...
@@ -78,6 +90,8 @@ layers {
input_layer_name: "__pool_0__"
input_parameter_name: "___fc_layer_0__.w0"
}
height: 32
width: 32
}
parameters {
name: "___conv_0__.w0"
...
...
python/paddle/trainer_config_helpers/tests/configs/protostr/test_maxout.protostr
浏览文件 @
7bb627d3
...
...
@@ -4,6 +4,8 @@ layers {
type: "data"
size: 2304
active_type: ""
height: 48
width: 48
}
layers {
name: "__conv_0__"
...
...
@@ -26,11 +28,15 @@ layers {
filter_size_y: 3
padding_y: 1
stride_y: 1
output_y: 48
img_size_y: 48
}
}
bias_parameter_name: "___conv_0__.wbias"
num_filters: 16
shared_biases: true
height: 48
width: 48
}
layers {
name: "__maxout_layer_0__"
...
...
@@ -40,12 +46,16 @@ layers {
inputs {
input_layer_name: "__conv_0__"
maxout_conf {
channels: 16
image_conf {
channels: 16
img_size: 48
img_size_y: 48
}
groups: 2
img_size_x: 0
img_size_y: 0
}
}
height: 48
width: 48
}
layers {
name: "__pool_0__"
...
...
@@ -69,48 +79,58 @@ layers {
padding_y: 0
}
}
height: 24
width: 24
}
layers {
name: "__conv_1__"
type: "exconv"
size:
18432
size:
73728
active_type: ""
inputs {
input_layer_name: "__pool_0__"
input_parameter_name: "___conv_1__.w0"
conv_conf {
filter_size: 3
channels:
32
channels:
8
stride: 1
padding: 1
groups: 1
filter_channels:
32
output_x:
12
img_size:
12
filter_channels:
8
output_x:
24
img_size:
24
caffe_mode: true
filter_size_y: 3
padding_y: 1
stride_y: 1
output_y: 24
img_size_y: 24
}
}
bias_parameter_name: "___conv_1__.wbias"
num_filters: 128
shared_biases: true
height: 24
width: 24
}
layers {
name: "__maxout_layer_1__"
type: "maxout"
size:
9216
size:
18432
active_type: ""
inputs {
input_layer_name: "__conv_
0
__"
input_layer_name: "__conv_
1
__"
maxout_conf {
channels: 128
image_conf {
channels: 128
img_size: 24
img_size_y: 24
}
groups: 4
img_size_x: 0
img_size_y: 0
}
}
height: 24
width: 24
}
layers {
name: "__block_expand_layer_0__"
...
...
@@ -118,7 +138,7 @@ layers {
size: 192
active_type: ""
inputs {
input_layer_name: "__maxout_layer_
0
__"
input_layer_name: "__maxout_layer_
1
__"
block_expand_conf {
channels: 32
stride_x: 1
...
...
@@ -133,6 +153,8 @@ layers {
img_size_y: 0
}
}
height: 24
width: 24
}
layers {
name: "__fc_layer_0__"
...
...
@@ -143,6 +165,8 @@ layers {
input_layer_name: "__block_expand_layer_0__"
input_parameter_name: "___fc_layer_0__.w0"
}
height: 24
width: 24
}
parameters {
name: "___conv_0__.w0"
...
...
@@ -164,9 +188,9 @@ parameters {
}
parameters {
name: "___conv_1__.w0"
size:
36864
size:
9216
initial_mean: 0.0
initial_std: 0.
0833333333333
initial_std: 0.
166666666667
initial_strategy: 0
initial_smart: false
}
...
...
python/paddle/trainer_config_helpers/tests/configs/protostr/test_spp_layer.protostr
浏览文件 @
7bb627d3
...
...
@@ -4,6 +4,8 @@ layers {
type: "data"
size: 3200
active_type: ""
height: 20
width: 10
}
layers {
name: "__spp_0__"
...
...
@@ -13,13 +15,17 @@ layers {
inputs {
input_layer_name: "data"
spp_conf {
image_conf {
channels: 16
img_size: 10
img_size_y: 20
}
pool_type: "max-projection"
pyramid_height: 2
channels: 16
img_size: 10
img_size_y: 20
}
}
height: 1
width: 5
}
input_layer_names: "data"
output_layer_names: "__spp_0__"
...
...
python/paddle/trainer_config_helpers/tests/configs/test_bilinear_interp.py
浏览文件 @
7bb627d3
...
...
@@ -17,7 +17,7 @@ bilinear = bilinear_interp_layer(input=conv, out_size_x=64, out_size_y=64)
pool
=
img_pool_layer
(
input
=
bilinear
,
num_channels
=
4
,
num_channels
=
16
,
pool_size
=
2
,
stride
=
2
,
pool_type
=
MaxPooling
())
...
...
python/paddle/trainer_config_helpers/tests/configs/test_maxout.py
浏览文件 @
7bb627d3
...
...
@@ -2,7 +2,7 @@ from paddle.trainer_config_helpers import *
settings
(
batch_size
=
1000
,
learning_rate
=
1e-5
)
data
=
data_layer
(
name
=
'data'
,
size
=
2304
)
data
=
data_layer
(
name
=
'data'
,
size
=
2304
,
height
=
48
,
width
=
48
)
conv
=
img_conv_layer
(
input
=
data
,
...
...
@@ -21,16 +21,21 @@ pool = img_pool_layer(
conv2
=
img_conv_layer
(
input
=
pool
,
filter_size
=
3
,
num_channels
=
32
,
num_channels
=
8
,
num_filters
=
128
,
padding
=
1
,
act
=
LinearActivation
(),
bias_attr
=
True
)
maxout2
=
maxout_layer
(
input
=
conv
,
num_channels
=
128
,
groups
=
4
)
maxout2
=
maxout_layer
(
input
=
conv
2
,
num_channels
=
128
,
groups
=
4
)
block
=
block_expand_layer
(
input
=
maxout
,
num_channels
=
32
,
stride_x
=
1
,
stride_y
=
1
,
block_x
=
1
,
block_y
=
6
)
input
=
maxout2
,
num_channels
=
32
,
stride_x
=
1
,
stride_y
=
1
,
block_x
=
1
,
block_y
=
6
)
fc
=
fc_layer
(
input
=
block
,
size
=
384
,
bias_attr
=
False
)
...
...
python/paddle/trainer_config_helpers/tests/configs/test_spp_layer.py
浏览文件 @
7bb627d3
...
...
@@ -2,13 +2,9 @@ from paddle.trainer_config_helpers import *
settings
(
batch_size
=
100
,
learning_rate
=
1e-5
)
data
=
data_layer
(
name
=
'data'
,
size
=
3200
)
data
=
data_layer
(
name
=
'data'
,
size
=
3200
,
height
=
20
,
width
=
10
)
spp
=
spp_layer
(
input
=
data
,
pyramid_height
=
2
,
num_channels
=
16
,
pool_type
=
MaxPooling
(),
img_width
=
10
)
input
=
data
,
pyramid_height
=
2
,
num_channels
=
16
,
pool_type
=
MaxPooling
())
outputs
(
spp
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录