Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
Paddle-Lite
提交
8441bd26
P
Paddle-Lite
项目概览
PaddlePaddle
/
Paddle-Lite
通知
332
Star
4
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
271
列表
看板
标记
里程碑
合并请求
78
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle-Lite
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
271
Issue
271
列表
看板
标记
里程碑
合并请求
78
合并请求
78
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
8441bd26
编写于
8月 15, 2018
作者:
L
liuruilong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add mobilenet ssd
上级
529f254e
变更
25
隐藏空白更改
内联
并排
Showing
25 changed file
with
1013 addition
and
36 deletion
+1013
-36
metal/paddle-mobile-demo/paddle-mobile-demo.xcodeproj/project.pbxproj
...-mobile-demo/paddle-mobile-demo.xcodeproj/project.pbxproj
+20
-4
metal/paddle-mobile-demo/paddle-mobile-demo/ModelHelper.swift
...l/paddle-mobile-demo/paddle-mobile-demo/ModelHelper.swift
+42
-13
metal/paddle-mobile-demo/paddle-mobile-demo/PreProcessKernel.metal
...dle-mobile-demo/paddle-mobile-demo/PreProcessKernel.metal
+28
-0
metal/paddle-mobile-demo/paddle-mobile-demo/ViewController.swift
...addle-mobile-demo/paddle-mobile-demo/ViewController.swift
+2
-2
metal/paddle-mobile/paddle-mobile.xcodeproj/project.pbxproj
metal/paddle-mobile/paddle-mobile.xcodeproj/project.pbxproj
+56
-0
metal/paddle-mobile/paddle-mobile/Operators/Base/OpCreator.swift
...addle-mobile/paddle-mobile/Operators/Base/OpCreator.swift
+8
-2
metal/paddle-mobile/paddle-mobile/Operators/Base/Operator.swift
...paddle-mobile/paddle-mobile/Operators/Base/Operator.swift
+19
-4
metal/paddle-mobile/paddle-mobile/Operators/BoxcoderOp.swift
metal/paddle-mobile/paddle-mobile/Operators/BoxcoderOp.swift
+47
-0
metal/paddle-mobile/paddle-mobile/Operators/ConcatOp.swift
metal/paddle-mobile/paddle-mobile/Operators/ConcatOp.swift
+47
-0
metal/paddle-mobile/paddle-mobile/Operators/ConvAddBatchNormReluOp.swift
...bile/paddle-mobile/Operators/ConvAddBatchNormReluOp.swift
+1
-1
metal/paddle-mobile/paddle-mobile/Operators/ConvAddOp.swift
metal/paddle-mobile/paddle-mobile/Operators/ConvAddOp.swift
+1
-1
metal/paddle-mobile/paddle-mobile/Operators/ConvBNReluOp.swift
.../paddle-mobile/paddle-mobile/Operators/ConvBNReluOp.swift
+129
-0
metal/paddle-mobile/paddle-mobile/Operators/DepthwiseConvOp.swift
...ddle-mobile/paddle-mobile/Operators/DepthwiseConvOp.swift
+63
-0
metal/paddle-mobile/paddle-mobile/Operators/DwConvBNReluOp.swift
...addle-mobile/paddle-mobile/Operators/DwConvBNReluOp.swift
+89
-0
metal/paddle-mobile/paddle-mobile/Operators/Kernels/BoxcoderKernel.swift
...bile/paddle-mobile/Operators/Kernels/BoxcoderKernel.swift
+31
-0
metal/paddle-mobile/paddle-mobile/Operators/Kernels/ConcatKernel.swift
...mobile/paddle-mobile/Operators/Kernels/ConcatKernel.swift
+31
-0
metal/paddle-mobile/paddle-mobile/Operators/Kernels/ConvBNReluKernel.swift
...le/paddle-mobile/Operators/Kernels/ConvBNReluKernel.swift
+137
-0
metal/paddle-mobile/paddle-mobile/Operators/Kernels/MulticlassNMSKernel.swift
...paddle-mobile/Operators/Kernels/MulticlassNMSKernel.swift
+31
-0
metal/paddle-mobile/paddle-mobile/Operators/Kernels/PriorBoxKernel.swift
...bile/paddle-mobile/Operators/Kernels/PriorBoxKernel.swift
+31
-0
metal/paddle-mobile/paddle-mobile/Operators/Kernels/TransposeKernel.swift
...ile/paddle-mobile/Operators/Kernels/TransposeKernel.swift
+31
-0
metal/paddle-mobile/paddle-mobile/Operators/MulticlassNMSOp.swift
...ddle-mobile/paddle-mobile/Operators/MulticlassNMSOp.swift
+47
-0
metal/paddle-mobile/paddle-mobile/Operators/PriorBoxOp.swift
metal/paddle-mobile/paddle-mobile/Operators/PriorBoxOp.swift
+47
-0
metal/paddle-mobile/paddle-mobile/Operators/TransposeOp.swift
...l/paddle-mobile/paddle-mobile/Operators/TransposeOp.swift
+47
-0
metal/paddle-mobile/paddle-mobile/Program/ProgramOptimize.swift
...paddle-mobile/paddle-mobile/Program/ProgramOptimize.swift
+6
-1
metal/paddle-mobile/paddle-mobile/framework/Texture.swift
metal/paddle-mobile/paddle-mobile/framework/Texture.swift
+22
-8
未找到文件。
metal/paddle-mobile-demo/paddle-mobile-demo.xcodeproj/project.pbxproj
浏览文件 @
8441bd26
...
...
@@ -14,9 +14,11 @@
FC039B8720E11C550081E9F8
/* Main.storyboard in Resources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FC039B8520E11C550081E9F8
/* Main.storyboard */
;
};
FC039B8920E11C560081E9F8
/* Assets.xcassets in Resources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FC039B8820E11C560081E9F8
/* Assets.xcassets */
;
};
FC039B8C20E11C560081E9F8
/* LaunchScreen.storyboard in Resources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FC039B8A20E11C560081E9F8
/* LaunchScreen.storyboard */
;
};
FC3602C82108580600FACB58
/* MetalHelper.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FC3602C72108580600FACB58
/* MetalHelper.swift */
;
};
FC918191211DBC3500B6F354
/* paddle-mobile.png in Resources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FC918190211DBC3500B6F354
/* paddle-mobile.png */
;
};
FC918193211DC70500B6F354
/* iphone.JPG in Resources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FC918192211DC70500B6F354
/* iphone.JPG */
;
};
FCBCCC522122EEDC00D94F7E
/* ssd_hand_params in Resources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FCBCCC502122EEDC00D94F7E
/* ssd_hand_params */
;
};
FCBCCC532122EEDC00D94F7E
/* ssd_hand_model in Resources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FCBCCC512122EEDC00D94F7E
/* ssd_hand_model */
;
};
FCBCCC552122EF5500D94F7E
/* MetalHelper.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FCBCCC542122EF5400D94F7E
/* MetalHelper.swift */
;
};
FCD04E6320F3146B0007374F
/* params in Resources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FCD04E6120F3146A0007374F
/* params */
;
};
FCD04E6420F3146B0007374F
/* model in Resources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FCD04E6220F3146A0007374F
/* model */
;
};
FCDFD3FB211D72C3005AB38B
/* ModelHelper.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FCDFD3FA211D72C3005AB38B
/* ModelHelper.swift */
;
};
...
...
@@ -52,9 +54,11 @@
FC039B8820E11C560081E9F8
/* Assets.xcassets */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
folder.assetcatalog
;
path
=
Assets.xcassets
;
sourceTree
=
"<group>"
;
};
FC039B8B20E11C560081E9F8
/* Base */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
file.storyboard
;
name
=
Base
;
path
=
Base.lproj/LaunchScreen.storyboard
;
sourceTree
=
"<group>"
;
};
FC039B8D20E11C560081E9F8
/* Info.plist */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
text.plist.xml
;
path
=
Info.plist
;
sourceTree
=
"<group>"
;
};
FC3602C72108580600FACB58
/* MetalHelper.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
name
=
MetalHelper.swift
;
path
=
"../../paddle-mobile-unit-test/paddle-mobile-unit-test/MetalHelper.swift"
;
sourceTree
=
"<group>"
;
};
FC918190211DBC3500B6F354
/* paddle-mobile.png */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
image.png
;
path
=
"paddle-mobile.png"
;
sourceTree
=
"<group>"
;
};
FC918192211DC70500B6F354
/* iphone.JPG */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
image.jpeg
;
path
=
iphone.JPG
;
sourceTree
=
"<group>"
;
};
FCBCCC502122EEDC00D94F7E
/* ssd_hand_params */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
file
;
path
=
ssd_hand_params
;
sourceTree
=
"<group>"
;
};
FCBCCC512122EEDC00D94F7E
/* ssd_hand_model */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
file
;
path
=
ssd_hand_model
;
sourceTree
=
"<group>"
;
};
FCBCCC542122EF5400D94F7E
/* MetalHelper.swift */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
sourcecode.swift
;
path
=
MetalHelper.swift
;
sourceTree
=
"<group>"
;
};
FCD04E6120F3146A0007374F
/* params */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
file
;
path
=
params
;
sourceTree
=
"<group>"
;
};
FCD04E6220F3146A0007374F
/* model */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
file
;
path
=
model
;
sourceTree
=
"<group>"
;
};
FCDFD3FA211D72C3005AB38B
/* ModelHelper.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
ModelHelper.swift
;
sourceTree
=
"<group>"
;
};
...
...
@@ -124,7 +128,7 @@
FC039B8820E11C560081E9F8
/* Assets.xcassets */
,
FC039B8A20E11C560081E9F8
/* LaunchScreen.storyboard */
,
FC039B8D20E11C560081E9F8
/* Info.plist */
,
FC
3602C72108580600FACB58
/* MetalHelper.swift */
,
FC
BCCC542122EF5400D94F7E
/* MetalHelper.swift */
,
FCDFD3FA211D72C3005AB38B
/* ModelHelper.swift */
,
);
path
=
"paddle-mobile-demo"
;
...
...
@@ -145,12 +149,22 @@
FC0E2C2020EDC03B009C1FAC
/* models */
=
{
isa
=
PBXGroup
;
children
=
(
FCBCCC4F2122EEDC00D94F7E
/* mobilenet_ssd_hand */
,
FCD04E6020F3146A0007374F
/* mobilenet */
,
);
name
=
models
;
path
=
../../models
;
sourceTree
=
"<group>"
;
};
FCBCCC4F2122EEDC00D94F7E
/* mobilenet_ssd_hand */
=
{
isa
=
PBXGroup
;
children
=
(
FCBCCC502122EEDC00D94F7E
/* ssd_hand_params */
,
FCBCCC512122EEDC00D94F7E
/* ssd_hand_model */
,
);
path
=
mobilenet_ssd_hand
;
sourceTree
=
"<group>"
;
};
FCD04E6020F3146A0007374F
/* mobilenet */
=
{
isa
=
PBXGroup
;
children
=
(
...
...
@@ -225,11 +239,13 @@
FC039B8C20E11C560081E9F8
/* LaunchScreen.storyboard in Resources */
,
FC918191211DBC3500B6F354
/* paddle-mobile.png in Resources */
,
FC039B8920E11C560081E9F8
/* Assets.xcassets in Resources */
,
FCBCCC522122EEDC00D94F7E
/* ssd_hand_params in Resources */
,
FCEEE7D4210627A000444BEC
/* banana.jpeg in Resources */
,
FC918193211DC70500B6F354
/* iphone.JPG in Resources */
,
FCDFD41B211D91C7005AB38B
/* synset.txt in Resources */
,
FCD04E6420F3146B0007374F
/* model in Resources */
,
FC039B8720E11C550081E9F8
/* Main.storyboard in Resources */
,
FCBCCC532122EEDC00D94F7E
/* ssd_hand_model in Resources */
,
);
runOnlyForDeploymentPostprocessing
=
0
;
};
...
...
@@ -282,8 +298,8 @@
FC039B8420E11C550081E9F8
/* ViewController.swift in Sources */
,
FCDFD3FB211D72C3005AB38B
/* ModelHelper.swift in Sources */
,
FC013928210204A3008100E3
/* PreProcessKernel.metal in Sources */
,
FCBCCC552122EF5500D94F7E
/* MetalHelper.swift in Sources */
,
FC039B8220E11C550081E9F8
/* AppDelegate.swift in Sources */
,
FC3602C82108580600FACB58
/* MetalHelper.swift in Sources */
,
);
runOnlyForDeploymentPostprocessing
=
0
;
};
...
...
metal/paddle-mobile-demo/paddle-mobile-demo/ModelHelper.swift
浏览文件 @
8441bd26
...
...
@@ -12,23 +12,17 @@ import Foundation
import
paddle_mobile
import
MetalPerformanceShaders
class
PreProccess
:
CusomKernel
{
init
(
device
:
MTLDevice
)
{
let
s
=
CusomKernel
.
Shape
.
init
(
inWidth
:
224
,
inHeight
:
224
,
inChannel
:
3
)
super
.
init
(
device
:
device
,
inFunctionName
:
"preprocess"
,
outputDim
:
s
,
usePaddleMobileLib
:
false
)
}
}
let
modelHelperMap
:
[
SupportModel
:
ModelHelper
]
=
[
.
mobilenet
:
MobileNetHelper
.
init
()]
let
modelHelperMap
:
[
SupportModel
:
Net
]
=
[
.
mobilenet
:
MobileNet
.
init
(),
.
mobilenet_ssd
:
MobileNet_ssd_hand
.
init
()]
enum
SupportModel
:
String
{
case
mobilenet
=
"mobilenet"
case
mobilenet_ssd
=
"mobilenetssd"
static
func
supportedModels
()
->
[
SupportModel
]
{
return
[
.
mobilenet
]
return
[
.
mobilenet
,
.
mobilenet_ssd
]
}
}
protocol
ModelHelper
{
protocol
Net
{
var
dim
:
[
Int
]
{
get
}
var
modelPath
:
String
{
get
}
var
paramPath
:
String
{
get
}
...
...
@@ -38,7 +32,7 @@ protocol ModelHelper {
func
resultStr
(
res
:
[
Float
])
->
String
}
extension
ModelHelper
{
extension
Net
{
func
getTexture
(
image
:
CGImage
,
getTexture
:
@escaping
(
MTLTexture
)
->
Void
)
{
let
texture
=
try
?
MetalHelper
.
shared
.
textureLoader
.
newTexture
(
cgImage
:
image
,
options
:
[:])
?
!
" texture loader error"
MetalHelper
.
scaleTexture
(
queue
:
MetalHelper
.
shared
.
queue
,
input
:
texture
!
,
size
:
(
224
,
224
))
{
(
resTexture
)
in
...
...
@@ -47,7 +41,15 @@ extension ModelHelper {
}
}
struct
MobileNetHelper
:
ModelHelper
{
struct
MobileNet
:
Net
{
class
MobilenetPreProccess
:
CusomKernel
{
init
(
device
:
MTLDevice
)
{
let
s
=
CusomKernel
.
Shape
.
init
(
inWidth
:
224
,
inHeight
:
224
,
inChannel
:
3
)
super
.
init
(
device
:
device
,
inFunctionName
:
"preprocess"
,
outputDim
:
s
,
usePaddleMobileLib
:
false
)
}
}
class
PreWords
{
var
contents
:
[
String
]
=
[]
init
(
fileName
:
String
,
type
:
String
=
"txt"
,
inBundle
:
Bundle
=
Bundle
.
main
)
{
...
...
@@ -84,6 +86,33 @@ struct MobileNetHelper: ModelHelper{
modelPath
=
Bundle
.
main
.
path
(
forResource
:
"model"
,
ofType
:
nil
)
?
!
"model null"
paramPath
=
Bundle
.
main
.
path
(
forResource
:
"params"
,
ofType
:
nil
)
?
!
"para null"
modelDir
=
""
preprocessKernel
=
PreProccess
.
init
(
device
:
MetalHelper
.
shared
.
device
)
preprocessKernel
=
MobilenetPreProccess
.
init
(
device
:
MetalHelper
.
shared
.
device
)
}
}
struct
MobileNet_ssd_hand
:
Net
{
class
MobilenetssdPreProccess
:
CusomKernel
{
init
(
device
:
MTLDevice
)
{
let
s
=
CusomKernel
.
Shape
.
init
(
inWidth
:
300
,
inHeight
:
300
,
inChannel
:
3
)
super
.
init
(
device
:
device
,
inFunctionName
:
"mobilenet_ssd_preprocess"
,
outputDim
:
s
,
usePaddleMobileLib
:
false
)
}
}
func
resultStr
(
res
:
[
Float
])
->
String
{
fatalError
()
}
var
preprocessKernel
:
CusomKernel
let
dim
=
[
1
,
300
,
300
,
3
]
let
modelPath
:
String
let
paramPath
:
String
let
modelDir
:
String
init
()
{
modelPath
=
Bundle
.
main
.
path
(
forResource
:
"ssd_hand_model"
,
ofType
:
nil
)
?
!
"model null"
paramPath
=
Bundle
.
main
.
path
(
forResource
:
"ssd_hand_params"
,
ofType
:
nil
)
?
!
"para null"
modelDir
=
""
preprocessKernel
=
MobilenetssdPreProccess
.
init
(
device
:
MetalHelper
.
shared
.
device
)
}
}
metal/paddle-mobile-demo/paddle-mobile-demo/PreProcessKernel.metal
浏览文件 @
8441bd26
...
...
@@ -39,6 +39,34 @@ kernel void preprocess_half(
}
kernel void mobilenet_ssd_preprocess(
texture2d<float, access::read> inTexture [[texture(0)]],
texture2d<float, access::write> outTexture [[texture(1)]],
uint2 gid [[thread_position_in_grid]])
{
if (gid.x >= outTexture.get_width() ||
gid.y >= outTexture.get_height()) {
return;
}
const auto means = float4(123.68f, 116.78f, 103.94f, 0.0f);
const float4 inColor = (inTexture.read(gid) * 255.0 - means) * 0.017;
outTexture.write(float4(inColor.z, inColor.y, inColor.x, 0.0f), gid);
}
kernel void mobilenet_ssd_preprocess_half(
texture2d<half, access::read> inTexture [[texture(0)]],
texture2d<half, access::write> outTexture [[texture(1)]],
uint2 gid [[thread_position_in_grid]])
{
if (gid.x >= outTexture.get_width() ||
gid.y >= outTexture.get_height()) {
return;
}
const auto means = half4(123.68f, 116.78f, 103.94f, 0.0f);
const half4 inColor = (inTexture.read(gid) * 255.0 - means) * 0.017;
outTexture.write(half4(inColor.z, inColor.y, inColor.x, 0.0f), gid);
}
metal/paddle-mobile-demo/paddle-mobile-demo/ViewController.swift
浏览文件 @
8441bd26
...
...
@@ -30,7 +30,7 @@ class ViewController: UIViewController {
var
executor
:
Executor
<
Float32
>
?
var
modelType
:
SupportModel
=
.
mobilenet
var
toPredictTexture
:
MTLTexture
?
var
modelHelper
:
ModelHelper
{
var
modelHelper
:
Net
{
return
modelHelperMap
[
modelType
]
?
!
" has no this type "
}
var
threadNum
=
1
...
...
@@ -76,7 +76,7 @@ class ViewController: UIViewController {
}
do
{
let
max
=
10
0
let
max
=
10
var
startDate
=
Date
.
init
()
for
i
in
0
..<
max
{
try
inExecutor
.
predict
(
input
:
inTexture
,
expect
:
modelHelper
.
dim
,
completionHandle
:
{
[
weak
self
]
(
result
)
in
...
...
metal/paddle-mobile/paddle-mobile.xcodeproj/project.pbxproj
浏览文件 @
8441bd26
...
...
@@ -46,6 +46,20 @@
FC9D038020E22FBB000F735A
/* FeedOp.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FC9D037F20E22FBB000F735A
/* FeedOp.swift */
;
};
FC9D038220E2312E000F735A
/* FetchOp.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FC9D038120E2312E000F735A
/* FetchOp.swift */
;
};
FC9D038420E23B01000F735A
/* Texture.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FC9D038320E23B01000F735A
/* Texture.swift */
;
};
FCBCCC572122F41300D94F7E
/* DwConvBNReluOp.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FCBCCC562122F41300D94F7E
/* DwConvBNReluOp.swift */
;
};
FCBCCC592122F42700D94F7E
/* ConvBNReluOp.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FCBCCC582122F42700D94F7E
/* ConvBNReluOp.swift */
;
};
FCBCCC5B2122F66F00D94F7E
/* ConvBNReluKernel.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FCBCCC5A2122F66F00D94F7E
/* ConvBNReluKernel.swift */
;
};
FCBCCC5D2122F8A100D94F7E
/* DepthwiseConvOp.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FCBCCC5C2122F8A100D94F7E
/* DepthwiseConvOp.swift */
;
};
FCBCCC5F2122FB3B00D94F7E
/* PriorBoxOp.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FCBCCC5E2122FB3B00D94F7E
/* PriorBoxOp.swift */
;
};
FCBCCC612122FBDF00D94F7E
/* PriorBoxKernel.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FCBCCC602122FBDF00D94F7E
/* PriorBoxKernel.swift */
;
};
FCBCCC632122FCC000D94F7E
/* TransposeKernel.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FCBCCC622122FCC000D94F7E
/* TransposeKernel.swift */
;
};
FCBCCC652122FCD700D94F7E
/* TransposeOp.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FCBCCC642122FCD700D94F7E
/* TransposeOp.swift */
;
};
FCBCCC67212306B000D94F7E
/* ConcatOp.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FCBCCC66212306B000D94F7E
/* ConcatOp.swift */
;
};
FCBCCC69212306D300D94F7E
/* ConcatKernel.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FCBCCC68212306D300D94F7E
/* ConcatKernel.swift */
;
};
FCBCCC6B2123071700D94F7E
/* BoxcoderOp.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FCBCCC6A2123071700D94F7E
/* BoxcoderOp.swift */
;
};
FCBCCC6D2123073A00D94F7E
/* BoxcoderKernel.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FCBCCC6C2123073A00D94F7E
/* BoxcoderKernel.swift */
;
};
FCBCCC6F2123097100D94F7E
/* MulticlassNMSOp.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FCBCCC6E2123097100D94F7E
/* MulticlassNMSOp.swift */
;
};
FCBCCC71212309A700D94F7E
/* MulticlassNMSKernel.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FCBCCC70212309A700D94F7E
/* MulticlassNMSKernel.swift */
;
};
FCD04E6620F314C50007374F
/* PoolOp.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FCD04E6520F314C50007374F
/* PoolOp.swift */
;
};
FCD04E6820F315020007374F
/* PoolKernel.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FCD04E6720F315020007374F
/* PoolKernel.swift */
;
};
FCD04E6A20F319EC0007374F
/* SoftmaxOp.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FCD04E6920F319EC0007374F
/* SoftmaxOp.swift */
;
};
...
...
@@ -104,6 +118,20 @@
FC9D037F20E22FBB000F735A
/* FeedOp.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
FeedOp.swift
;
sourceTree
=
"<group>"
;
};
FC9D038120E2312E000F735A
/* FetchOp.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
FetchOp.swift
;
sourceTree
=
"<group>"
;
};
FC9D038320E23B01000F735A
/* Texture.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
Texture.swift
;
sourceTree
=
"<group>"
;
};
FCBCCC562122F41300D94F7E
/* DwConvBNReluOp.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
DwConvBNReluOp.swift
;
sourceTree
=
"<group>"
;
};
FCBCCC582122F42700D94F7E
/* ConvBNReluOp.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
ConvBNReluOp.swift
;
sourceTree
=
"<group>"
;
};
FCBCCC5A2122F66F00D94F7E
/* ConvBNReluKernel.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
ConvBNReluKernel.swift
;
sourceTree
=
"<group>"
;
};
FCBCCC5C2122F8A100D94F7E
/* DepthwiseConvOp.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
DepthwiseConvOp.swift
;
sourceTree
=
"<group>"
;
};
FCBCCC5E2122FB3B00D94F7E
/* PriorBoxOp.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
PriorBoxOp.swift
;
sourceTree
=
"<group>"
;
};
FCBCCC602122FBDF00D94F7E
/* PriorBoxKernel.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
PriorBoxKernel.swift
;
sourceTree
=
"<group>"
;
};
FCBCCC622122FCC000D94F7E
/* TransposeKernel.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
TransposeKernel.swift
;
sourceTree
=
"<group>"
;
};
FCBCCC642122FCD700D94F7E
/* TransposeOp.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
TransposeOp.swift
;
sourceTree
=
"<group>"
;
};
FCBCCC66212306B000D94F7E
/* ConcatOp.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
ConcatOp.swift
;
sourceTree
=
"<group>"
;
};
FCBCCC68212306D300D94F7E
/* ConcatKernel.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
ConcatKernel.swift
;
sourceTree
=
"<group>"
;
};
FCBCCC6A2123071700D94F7E
/* BoxcoderOp.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
BoxcoderOp.swift
;
sourceTree
=
"<group>"
;
};
FCBCCC6C2123073A00D94F7E
/* BoxcoderKernel.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
BoxcoderKernel.swift
;
sourceTree
=
"<group>"
;
};
FCBCCC6E2123097100D94F7E
/* MulticlassNMSOp.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
MulticlassNMSOp.swift
;
sourceTree
=
"<group>"
;
};
FCBCCC70212309A700D94F7E
/* MulticlassNMSKernel.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
MulticlassNMSKernel.swift
;
sourceTree
=
"<group>"
;
};
FCD04E6520F314C50007374F
/* PoolOp.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
PoolOp.swift
;
sourceTree
=
"<group>"
;
};
FCD04E6720F315020007374F
/* PoolKernel.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
PoolKernel.swift
;
sourceTree
=
"<group>"
;
};
FCD04E6920F319EC0007374F
/* SoftmaxOp.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
SoftmaxOp.swift
;
sourceTree
=
"<group>"
;
};
...
...
@@ -219,6 +247,14 @@
FCD04E6920F319EC0007374F
/* SoftmaxOp.swift */
,
FCD04E6D20F31B4B0007374F
/* ReshapeOp.swift */
,
FCD04E7120F343420007374F
/* ConvAddOp.swift */
,
FCBCCC562122F41300D94F7E
/* DwConvBNReluOp.swift */
,
FCBCCC582122F42700D94F7E
/* ConvBNReluOp.swift */
,
FCBCCC5C2122F8A100D94F7E
/* DepthwiseConvOp.swift */
,
FCBCCC5E2122FB3B00D94F7E
/* PriorBoxOp.swift */
,
FCBCCC642122FCD700D94F7E
/* TransposeOp.swift */
,
FCBCCC66212306B000D94F7E
/* ConcatOp.swift */
,
FCBCCC6A2123071700D94F7E
/* BoxcoderOp.swift */
,
FCBCCC6E2123097100D94F7E
/* MulticlassNMSOp.swift */
,
);
path
=
Operators
;
sourceTree
=
"<group>"
;
...
...
@@ -257,6 +293,12 @@
FCD04E6B20F31A280007374F
/* SoftmaxKernel.swift */
,
FCD04E6F20F31B720007374F
/* ReshapeKernel.swift */
,
FCD04E7320F3437E0007374F
/* ConvAddKernel.swift */
,
FCBCCC5A2122F66F00D94F7E
/* ConvBNReluKernel.swift */
,
FCBCCC602122FBDF00D94F7E
/* PriorBoxKernel.swift */
,
FCBCCC622122FCC000D94F7E
/* TransposeKernel.swift */
,
FCBCCC68212306D300D94F7E
/* ConcatKernel.swift */
,
FCBCCC6C2123073A00D94F7E
/* BoxcoderKernel.swift */
,
FCBCCC70212309A700D94F7E
/* MulticlassNMSKernel.swift */
,
);
path
=
Kernels
;
sourceTree
=
"<group>"
;
...
...
@@ -375,6 +417,7 @@
FC039B9F20E11CB20081E9F8
/* Tensor.swift in Sources */
,
FC0E2DBC20EE45FE009C1FAC
/* ConvKernel.swift in Sources */
,
FC039BAA20E11CBC0081E9F8
/* ElementwiseAddOp.swift in Sources */
,
FCBCCC6B2123071700D94F7E
/* BoxcoderOp.swift in Sources */
,
FC039B9B20E11CA00081E9F8
/* Executor.swift in Sources */
,
FCD04E7020F31B720007374F
/* ReshapeKernel.swift in Sources */
,
FCD04E7220F343420007374F
/* ConvAddOp.swift in Sources */
,
...
...
@@ -383,6 +426,7 @@
FC3602CC2108819F00FACB58
/* PaddleMobileUnitTest.swift in Sources */
,
FC1B186620ECF1C600678B91
/* ResizeKernel.swift in Sources */
,
FCF2D73820E64E70007AC5F5
/* Kernel.swift in Sources */
,
FCBCCC5B2122F66F00D94F7E
/* ConvBNReluKernel.swift in Sources */
,
FCEBC0F420F1FDD90099DBAF
/* ConvAddBatchNormReluOp.swift in Sources */
,
FC0E2DC020EE461F009C1FAC
/* ElementwiseAddKernel.swift in Sources */
,
FC60DB8920E9AAA500FF203F
/* MetalExtension.swift in Sources */
,
...
...
@@ -393,8 +437,10 @@
FC039BB820E11CC20081E9F8
/* framework.pb.swift in Sources */
,
FC039B9920E11C9A0081E9F8
/* Types.swift in Sources */
,
FC4CB74920F0B954007C0C6D
/* ConvKernel.metal in Sources */
,
FCBCCC592122F42700D94F7E
/* ConvBNReluOp.swift in Sources */
,
FC039BA920E11CBC0081E9F8
/* ConvOp.swift in Sources */
,
FC9D038420E23B01000F735A
/* Texture.swift in Sources */
,
FCBCCC652122FCD700D94F7E
/* TransposeOp.swift in Sources */
,
FCD04E6E20F31B4B0007374F
/* ReshapeOp.swift in Sources */
,
FC039B9820E11C9A0081E9F8
/* Errors.swift in Sources */
,
FC039BBF20E11CC20081E9F8
/* Attribute.swift in Sources */
,
...
...
@@ -402,22 +448,32 @@
FC039BB920E11CC20081E9F8
/* Scope.swift in Sources */
,
FCD04E6620F314C50007374F
/* PoolOp.swift in Sources */
,
FC039BAC20E11CBC0081E9F8
/* BatchNormOp.swift in Sources */
,
FCBCCC6F2123097100D94F7E
/* MulticlassNMSOp.swift in Sources */
,
FC039BBC20E11CC20081E9F8
/* VarDesc.swift in Sources */
,
FCBCCC632122FCC000D94F7E
/* TransposeKernel.swift in Sources */
,
FCBCCC71212309A700D94F7E
/* MulticlassNMSKernel.swift in Sources */
,
FCDC0FEB21099A1D00DC9EFB
/* Tools.swift in Sources */
,
FC0E2DBA20EE3B8D009C1FAC
/* ReluKernel.swift in Sources */
,
FCBCCC6D2123073A00D94F7E
/* BoxcoderKernel.swift in Sources */
,
FCBCCC69212306D300D94F7E
/* ConcatKernel.swift in Sources */
,
FC82735920E3C04200BE430A
/* OpCreator.swift in Sources */
,
FCBCCC5D2122F8A100D94F7E
/* DepthwiseConvOp.swift in Sources */
,
FC0E2DBE20EE460D009C1FAC
/* BatchNormKernel.swift in Sources */
,
FC039BAB20E11CBC0081E9F8
/* Operator.swift in Sources */
,
FCD04E6A20F319EC0007374F
/* SoftmaxOp.swift in Sources */
,
FCBCCC612122FBDF00D94F7E
/* PriorBoxKernel.swift in Sources */
,
FCBCCC5F2122FB3B00D94F7E
/* PriorBoxOp.swift in Sources */
,
FC9D038220E2312E000F735A
/* FetchOp.swift in Sources */
,
FC039BBD20E11CC20081E9F8
/* Program.swift in Sources */
,
FC039BA220E11CB70081E9F8
/* Loader.swift in Sources */
,
FCBCCC67212306B000D94F7E
/* ConcatOp.swift in Sources */
,
FCD04E6C20F31A280007374F
/* SoftmaxKernel.swift in Sources */
,
FC4CB74B20F12C30007C0C6D
/* ProgramOptimize.swift in Sources */
,
FC5163F620EF556E00636C28
/* Texture2DTo2DArrayKernel.swift in Sources */
,
FC039BC020E11CC20081E9F8
/* BlockDesc.swift in Sources */
,
FCD04E6820F315020007374F
/* PoolKernel.swift in Sources */
,
FC039BAD20E11CBC0081E9F8
/* ReluOp.swift in Sources */
,
FCBCCC572122F41300D94F7E
/* DwConvBNReluOp.swift in Sources */
,
FC039BBE20E11CC20081E9F8
/* OpDesc.swift in Sources */
,
FC039B9720E11C9A0081E9F8
/* Extensions.swift in Sources */
,
);
...
...
metal/paddle-mobile/paddle-mobile/Operators/Base/OpCreator.swift
浏览文件 @
8441bd26
...
...
@@ -43,14 +43,20 @@ class OpCreator<P: PrecisionType> {
[
gConvType
:
ConvOp
<
P
>.
creat
,
gBatchNormType
:
BatchNormOp
<
P
>.
creat
,
gReluType
:
ReluOp
<
P
>.
creat
,
gElementwiseAdd
:
ElementwiseAddOp
<
P
>.
creat
,
gElementwiseAdd
Type
:
ElementwiseAddOp
<
P
>.
creat
,
gFeedType
:
FeedOp
<
P
>.
creat
,
gFetchType
:
FetchOp
<
P
>.
creat
,
gConvAddBatchNormReluType
:
ConvAddBatchNormReluOp
<
P
>.
creat
,
gPooType
:
PoolOp
<
P
>.
creat
,
gSoftmaxType
:
SoftmaxOp
<
P
>.
creat
,
gReshapeType
:
ReshapeOp
<
P
>.
creat
,
gConvAddType
:
ConvAddOp
<
P
>.
creat
]
gConvAddType
:
ConvAddOp
<
P
>.
creat
,
gDepthConvType
:
DepthConvOp
<
P
>.
creat
,
gConcatType
:
ConcatOp
<
P
>.
creat
,
gBoxcoderType
:
BoxcoderOp
<
P
>.
creat
,
gConvBnReluType
:
ConvBNReluOp
<
P
>.
creat
,
gDwConvBnReluType
:
DwConvBNReluOp
<
P
>.
creat
,
gMulticlassNMSType
:
MulticlassNMSOp
<
P
>.
creat
]
private
init
(){}
}
metal/paddle-mobile/paddle-mobile/Operators/Base/Operator.swift
浏览文件 @
8441bd26
...
...
@@ -118,22 +118,37 @@ let gFeedType = "feed"
let
gConvType
=
"conv2d"
let
gBatchNormType
=
"batch_norm"
let
gReluType
=
"relu"
let
gElementwiseAdd
=
"elementwise_add"
let
gElementwiseAdd
Type
=
"elementwise_add"
let
gConvAddBatchNormReluType
=
"conv_add_batchnorm_relu"
let
gPooType
=
"pool2d"
let
gSoftmaxType
=
"softmax"
let
gReshapeType
=
"reshape"
let
gConvAddType
=
"conv_add"
let
gDepthConvType
=
"depthwise_conv2d"
let
gPriorBoxType
=
"prior_box"
let
gTransposeType
=
"transpose"
let
gConcatType
=
"concat"
let
gBoxcoderType
=
"box_coder"
let
gMulticlassNMSType
=
"multiclass_nms"
let
gConvBnReluType
=
"conv_bn_relu"
let
gDwConvBnReluType
=
"depth_conv_bn_relu"
let
opInfos
=
[
gConvType
:
(
inputs
:
[
"Input"
],
outputs
:
[
"Output"
]),
gBatchNormType
:
(
inputs
:
[
"X"
],
outputs
:
[
"Y"
]),
gReluType
:
(
inputs
:
[
"X"
],
outputs
:
[
"Out"
]),
gElementwiseAdd
:
(
inputs
:
[
"X"
],
outputs
:
[
"Out"
]),
gElementwiseAdd
Type
:
(
inputs
:
[
"X"
],
outputs
:
[
"Out"
]),
gFeedType
:
(
inputs
:
[
"X"
],
outputs
:
[
"Out"
]),
gFetchType
:
(
inputs
:
[
"X"
],
outputs
:
[
"Out"
]),
gConvAddBatchNormReluType
:
(
inputs
:
[
"Input"
],
outputs
:
[
"Out"
]),
gPooType
:
(
inputs
:
[
"X"
],
outputs
:
[
"Out"
]),
gSoftmaxType
:
(
inputs
:
[
"X"
],
outputs
:
[
"Out"
]),
gReshapeType
:
(
inputs
:
[
"X"
],
outputs
:
[
"Out"
]),
gConvAddType
:
(
inputs
:
[
"Input"
],
outputs
:
[
"Out"
])]
gConvAddType
:
(
inputs
:
[
"Input"
],
outputs
:
[
"Out"
]),
gDepthConvType
:
(
inputs
:
[
"Input"
],
outputs
:
[
"Output"
]),
gConcatType
:
(
inputs
:
[
"X"
],
outputs
:
[
"Out"
]),
gBoxcoderType
:
(
inputs
:
[
"PriorBox"
,
"PriorBoxVar"
,
"TargetBox"
],
outputs
:
[
"OutputBox"
]),
gTransposeType
:
(
inputs
:
[
"X"
],
outputs
:
[
"Out"
]),
gConvBnReluType
:
(
inputs
:
[
"Input"
],
outputs
:
[
"Out"
]),
gDwConvBnReluType
:
(
inputs
:
[
"Input"
],
outputs
:
[
"Out"
]),
gMulticlassNMSType
:
(
inputs
:
[
"BBoxes"
,
"Scores"
],
outputs
:
[
"Out"
]),
gPriorBoxType
:
(
inputs
:
[
"Input"
,
"Image"
],
outputs
:
[
"Boxes"
,
"Variances"
])]
metal/paddle-mobile/paddle-mobile/Operators/BoxcoderOp.swift
0 → 100644
浏览文件 @
8441bd26
///* Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License. */
import
Foundation
class
BoxcoderParam
<
P
:
PrecisionType
>
:
OpParam
{
typealias
ParamPrecisionType
=
P
required
init
(
opDesc
:
OpDesc
,
inScope
:
Scope
)
throws
{
do
{
fatalError
()
}
catch
let
error
{
throw
error
}
}
let
input
:
Texture
<
P
>
var
output
:
Texture
<
P
>
}
class
BoxcoderOp
<
P
:
PrecisionType
>
:
Operator
<
BoxcoderKernel
<
P
>
,
BoxcoderParam
<
P
>>
,
Runable
,
Creator
,
InferShaperable
{
func
inferShape
()
{
para
.
output
.
dim
=
para
.
input
.
dim
}
typealias
OpType
=
BoxcoderOp
<
P
>
func
runImpl
(
device
:
MTLDevice
,
buffer
:
MTLCommandBuffer
)
throws
{
do
{
try
kernel
.
compute
(
commandBuffer
:
buffer
,
param
:
para
)
}
catch
let
error
{
throw
error
}
}
}
metal/paddle-mobile/paddle-mobile/Operators/ConcatOp.swift
0 → 100644
浏览文件 @
8441bd26
///* Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License. */
import
Foundation
class
ConcatParam
<
P
:
PrecisionType
>
:
OpParam
{
typealias
ParamPrecisionType
=
P
required
init
(
opDesc
:
OpDesc
,
inScope
:
Scope
)
throws
{
do
{
fatalError
()
}
catch
let
error
{
throw
error
}
}
let
input
:
Texture
<
P
>
var
output
:
Texture
<
P
>
}
class
ConcatOp
<
P
:
PrecisionType
>
:
Operator
<
ConcatKernel
<
P
>
,
ConcatParam
<
P
>>
,
Runable
,
Creator
,
InferShaperable
{
func
inferShape
()
{
para
.
output
.
dim
=
para
.
input
.
dim
}
typealias
OpType
=
ConcatOp
<
P
>
func
runImpl
(
device
:
MTLDevice
,
buffer
:
MTLCommandBuffer
)
throws
{
do
{
try
kernel
.
compute
(
commandBuffer
:
buffer
,
param
:
para
)
}
catch
let
error
{
throw
error
}
}
}
metal/paddle-mobile/paddle-mobile/Operators/ConvAddBatchNormReluOp.swift
浏览文件 @
8441bd26
...
...
@@ -92,7 +92,7 @@ class ConvAddBatchNormReluOp<P: PrecisionType>: Operator<ConvAddBatchNormReluKer
static
func
fusionNode
()
->
Node
{
let
beginNode
=
Node
.
init
(
inType
:
gConvType
)
_
=
beginNode
-->
Node
.
init
(
inType
:
gElementwiseAdd
)
-->
Node
.
init
(
inType
:
gElementwiseAdd
Type
)
-->
Node
.
init
(
inType
:
gBatchNormType
)
-->
Node
.
init
(
inType
:
gReluType
)
return
beginNode
...
...
metal/paddle-mobile/paddle-mobile/Operators/ConvAddOp.swift
浏览文件 @
8441bd26
...
...
@@ -46,7 +46,7 @@ class ConvAddOp<P: PrecisionType>: Operator<ConvAddKernel<P>, ConvAddParam<P>>,
static
func
fusionNode
()
->
Node
{
let
beginNode
=
Node
.
init
(
inType
:
gConvType
)
_
=
beginNode
-->
Node
.
init
(
inType
:
gElementwiseAdd
)
-->
Node
.
init
(
inType
:
gElementwiseAdd
Type
)
return
beginNode
}
...
...
metal/paddle-mobile/paddle-mobile/Operators/ConvBNReluOp.swift
0 → 100644
浏览文件 @
8441bd26
/* Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. */
import
Foundation
class
ConvBNReluParam
<
P
:
PrecisionType
>
:
OpParam
{
typealias
ParamPrecisionType
=
P
required
init
(
opDesc
:
OpDesc
,
inScope
:
Scope
)
throws
{
do
{
filter
=
try
ConvBNReluParam
.
inputFilter
(
paraInputs
:
opDesc
.
paraInputs
,
from
:
inScope
)
input
=
try
ConvBNReluParam
.
input
(
inputs
:
opDesc
.
inputs
,
from
:
inScope
)
output
=
try
ConvBNReluParam
.
outputOut
(
outputs
:
opDesc
.
outputs
,
from
:
inScope
)
stride
=
try
ConvBNReluParam
.
getAttr
(
key
:
"strides"
,
attrs
:
opDesc
.
attrs
)
paddings
=
try
ConvBNReluParam
.
getAttr
(
key
:
"paddings"
,
attrs
:
opDesc
.
attrs
)
dilations
=
try
ConvBNReluParam
.
getAttr
(
key
:
"dilations"
,
attrs
:
opDesc
.
attrs
)
epsilon
=
try
ConvBNReluParam
.
getAttr
(
key
:
"epsilon"
,
attrs
:
opDesc
.
attrs
)
groups
=
try
ConvBNReluParam
.
getAttr
(
key
:
"groups"
,
attrs
:
opDesc
.
attrs
)
variance
=
try
ConvBNReluParam
.
inputVariance
(
inputs
:
opDesc
.
paraInputs
,
from
:
inScope
)
bias
=
try
ConvBNReluParam
.
inputBiase
(
inputs
:
opDesc
.
paraInputs
,
from
:
inScope
)
scale
=
try
ConvBNReluParam
.
inputScale
(
inputs
:
opDesc
.
paraInputs
,
from
:
inScope
)
mean
=
try
ConvBNReluParam
.
inputMean
(
inputs
:
opDesc
.
paraInputs
,
from
:
inScope
)
}
catch
let
error
{
throw
error
}
}
let
input
:
Texture
<
P
>
let
variance
:
Tensor
<
ParamPrecisionType
>
let
bias
:
Tensor
<
ParamPrecisionType
>
let
mean
:
Tensor
<
ParamPrecisionType
>
let
scale
:
Tensor
<
ParamPrecisionType
>
let
filter
:
Tensor
<
ParamPrecisionType
>
let
epsilon
:
Float32
var
newScale
:
MTLBuffer
?
var
newBiase
:
MTLBuffer
?
var
output
:
Texture
<
P
>
let
stride
:
[
Int32
]
let
paddings
:
[
Int32
]
let
dilations
:
[
Int32
]
let
groups
:
Int
}
class
ConvBNReluOp
<
P
:
PrecisionType
>
:
Operator
<
ConvBNReluKernel
<
P
>
,
ConvBNReluParam
<
P
>>
,
Runable
,
Creator
,
InferShaperable
,
Fusion
{
typealias
OpType
=
ConvBNReluOp
<
P
>
func
inferShape
()
{
let
inDims
=
para
.
input
.
dim
let
filterDim
=
para
.
filter
.
dim
let
strides
=
para
.
stride
let
paddings
=
para
.
paddings
let
dilations
=
para
.
dilations
var
outDim
=
[
inDims
[
0
]]
for
i
in
0
..<
strides
.
count
{
let
dilation
:
Int
=
Int
(
dilations
[
i
])
let
filterSize
:
Int
=
filterDim
[
i
+
1
]
let
inputSize
:
Int
=
inDims
[
i
+
1
]
let
padding
:
Int
=
Int
(
paddings
[
i
])
let
stride
:
Int
=
Int
(
strides
[
i
])
let
dKernel
=
dilation
*
(
filterSize
-
1
)
+
1
let
outputSize
=
(
inputSize
+
2
*
padding
-
dKernel
)
/
stride
+
1
outDim
.
append
(
outputSize
)
}
outDim
.
append
(
filterDim
[
0
])
para
.
output
.
dim
=
Dim
.
init
(
inDim
:
outDim
)
}
func
runImpl
(
device
:
MTLDevice
,
buffer
:
MTLCommandBuffer
)
throws
{
do
{
try
kernel
.
compute
(
commandBuffer
:
buffer
,
param
:
para
)
}
catch
let
error
{
throw
error
}
}
static
func
fusionNode
()
->
Node
{
let
beginNode
=
Node
.
init
(
inType
:
gConvType
)
_
=
beginNode
-->
Node
.
init
(
inType
:
gBatchNormType
)
-->
Node
.
init
(
inType
:
gReluType
)
return
beginNode
}
static
func
change
()
->
[
String
:
[(
from
:
String
,
to
:
String
)]]
{
return
[:]
}
static
func
fusionType
()
->
String
{
return
gConvBnReluType
}
func
delogOutput
()
{
// let _: P? = para.input.metalTexture.logDesc(header: "conv add batchnorm relu input: ", stridable: false)
// para.filter.logDataPointer(header: "filter data pointer: ")
// print("filter: \(para.filter)")
// print("biase: \(para.y)")
// print("padding: \(para.paddings)")
// print("stride: \(para.stride)")
// let _: P? = para.y.buffer?.logDesc(header: " biase: ", stridable: false)
// let _: P? = para.newBiase?.logDesc(header: "new biase: ", stridable: false)
// let _: P? = para.newScale?.logDesc(header: "new scale: ", stridable: false)
let
output
=
para
.
output
.
metalTexture
.
floatArray
{
(
p
:
P
)
->
P
in
return
p
}
//
writeToLibrary
(
fileName
:
"output_112x112x32_2"
,
array
:
output
)
print
(
" write done"
)
// let _: P? = para.output.metalTexture.logDesc(header: "conv add batchnorm relu output: ", stridable: false)
}
}
metal/paddle-mobile/paddle-mobile/Operators/DepthwiseConvOp.swift
0 → 100644
浏览文件 @
8441bd26
/* Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. */
import
Foundation
class
DepthConvOp
<
P
:
PrecisionType
>
:
Operator
<
ConvKernel
<
P
>
,
ConvParam
<
P
>>
,
Runable
,
Creator
,
InferShaperable
{
required
init
(
device
:
MTLDevice
,
opDesc
:
OpDesc
,
inScope
:
Scope
)
throws
{
do
{
try
super
.
init
(
device
:
device
,
opDesc
:
opDesc
,
inScope
:
inScope
)
}
catch
let
error
{
throw
error
}
}
func
inferShape
()
{
let
inDims
=
para
.
input
.
dim
let
filterDim
=
para
.
filter
.
dim
let
strides
=
para
.
stride
let
paddings
=
para
.
paddings
let
dilations
=
para
.
dilations
var
outDim
=
[
inDims
[
0
]]
for
i
in
0
..<
strides
.
count
{
let
dilation
:
Int
=
Int
(
dilations
[
i
])
let
filterSize
:
Int
=
filterDim
[
i
+
1
]
let
inputSize
:
Int
=
inDims
[
i
+
1
]
let
padding
:
Int
=
Int
(
paddings
[
i
])
let
stride
:
Int
=
Int
(
strides
[
i
])
let
dKernel
=
dilation
*
(
filterSize
-
1
)
+
1
let
outputSize
=
(
inputSize
+
2
*
padding
-
dKernel
)
/
stride
+
1
outDim
.
append
(
outputSize
)
}
outDim
.
append
(
filterDim
[
0
])
para
.
output
.
dim
=
Dim
.
init
(
inDim
:
outDim
)
}
typealias
OpType
=
DepthConvOp
<
P
>
func
runImpl
(
device
:
MTLDevice
,
buffer
:
MTLCommandBuffer
)
throws
{
do
{
try
kernel
.
compute
(
commandBuffer
:
buffer
,
param
:
para
)
}
catch
let
error
{
throw
error
}
}
func
delogOutput
()
{
print
(
"conv output : "
)
print
(
para
.
output
.
metalTexture
)
// let _: Float16? = para.output.metalTexture.logDesc()
}
}
metal/paddle-mobile/paddle-mobile/Operators/DwConvBNReluOp.swift
0 → 100644
浏览文件 @
8441bd26
/* Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. */
import
Foundation
class
DwConvBNReluOp
<
P
:
PrecisionType
>
:
Operator
<
ConvBNReluKernel
<
P
>
,
ConvBNReluParam
<
P
>>
,
Runable
,
Creator
,
InferShaperable
,
Fusion
{
typealias
OpType
=
ConvBNReluOp
<
P
>
func
inferShape
()
{
let
inDims
=
para
.
input
.
dim
let
filterDim
=
para
.
filter
.
dim
let
strides
=
para
.
stride
let
paddings
=
para
.
paddings
let
dilations
=
para
.
dilations
var
outDim
=
[
inDims
[
0
]]
for
i
in
0
..<
strides
.
count
{
let
dilation
:
Int
=
Int
(
dilations
[
i
])
let
filterSize
:
Int
=
filterDim
[
i
+
1
]
let
inputSize
:
Int
=
inDims
[
i
+
1
]
let
padding
:
Int
=
Int
(
paddings
[
i
])
let
stride
:
Int
=
Int
(
strides
[
i
])
let
dKernel
=
dilation
*
(
filterSize
-
1
)
+
1
let
outputSize
=
(
inputSize
+
2
*
padding
-
dKernel
)
/
stride
+
1
outDim
.
append
(
outputSize
)
}
outDim
.
append
(
filterDim
[
0
])
para
.
output
.
dim
=
Dim
.
init
(
inDim
:
outDim
)
}
func
runImpl
(
device
:
MTLDevice
,
buffer
:
MTLCommandBuffer
)
throws
{
do
{
try
kernel
.
compute
(
commandBuffer
:
buffer
,
param
:
para
)
}
catch
let
error
{
throw
error
}
}
static
func
fusionNode
()
->
Node
{
let
beginNode
=
Node
.
init
(
inType
:
gDepthConvType
)
_
=
beginNode
-->
Node
.
init
(
inType
:
gBatchNormType
)
-->
Node
.
init
(
inType
:
gReluType
)
return
beginNode
}
static
func
change
()
->
[
String
:
[(
from
:
String
,
to
:
String
)]]
{
return
[:]
}
static
func
fusionType
()
->
String
{
return
gDwConvBnReluType
}
func
delogOutput
()
{
// let _: P? = para.input.metalTexture.logDesc(header: "conv add batchnorm relu input: ", stridable: false)
// para.filter.logDataPointer(header: "filter data pointer: ")
// print("filter: \(para.filter)")
// print("biase: \(para.y)")
// print("padding: \(para.paddings)")
// print("stride: \(para.stride)")
// let _: P? = para.y.buffer?.logDesc(header: " biase: ", stridable: false)
// let _: P? = para.newBiase?.logDesc(header: "new biase: ", stridable: false)
// let _: P? = para.newScale?.logDesc(header: "new scale: ", stridable: false)
let
output
=
para
.
output
.
metalTexture
.
floatArray
{
(
p
:
P
)
->
P
in
return
p
}
//
writeToLibrary
(
fileName
:
"output_112x112x32_2"
,
array
:
output
)
print
(
" write done"
)
// let _: P? = para.output.metalTexture.logDesc(header: "conv add batchnorm relu output: ", stridable: false)
}
}
metal/paddle-mobile/paddle-mobile/Operators/Kernels/BoxcoderKernel.swift
0 → 100644
浏览文件 @
8441bd26
/* Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. */
import
Foundation
class
BoxcoderKernel
<
P
:
PrecisionType
>
:
Kernel
,
Computable
{
func
compute
(
commandBuffer
:
MTLCommandBuffer
,
param
:
BoxcoderParam
<
P
>
)
throws
{
guard
let
encoder
=
commandBuffer
.
makeComputeCommandEncoder
()
else
{
throw
PaddleMobileError
.
predictError
(
message
:
" encode is nil"
)
}
encoder
.
setTexture
(
param
.
input
.
metalTexture
,
index
:
0
)
encoder
.
setTexture
(
param
.
output
.
metalTexture
,
index
:
1
)
encoder
.
dispatch
(
computePipline
:
pipline
,
outTexture
:
param
.
output
.
metalTexture
)
encoder
.
endEncoding
()
}
required
init
(
device
:
MTLDevice
,
param
:
BoxcoderParam
<
P
>
)
{
super
.
init
(
device
:
device
,
inFunctionName
:
"priorbox"
)
}
}
metal/paddle-mobile/paddle-mobile/Operators/Kernels/ConcatKernel.swift
0 → 100644
浏览文件 @
8441bd26
/* Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. */
import
Foundation
class
ConcatKernel
<
P
:
PrecisionType
>
:
Kernel
,
Computable
{
func
compute
(
commandBuffer
:
MTLCommandBuffer
,
param
:
ConcatParam
<
P
>
)
throws
{
guard
let
encoder
=
commandBuffer
.
makeComputeCommandEncoder
()
else
{
throw
PaddleMobileError
.
predictError
(
message
:
" encode is nil"
)
}
encoder
.
setTexture
(
param
.
input
.
metalTexture
,
index
:
0
)
encoder
.
setTexture
(
param
.
output
.
metalTexture
,
index
:
1
)
encoder
.
dispatch
(
computePipline
:
pipline
,
outTexture
:
param
.
output
.
metalTexture
)
encoder
.
endEncoding
()
}
required
init
(
device
:
MTLDevice
,
param
:
ConcatParam
<
P
>
)
{
super
.
init
(
device
:
device
,
inFunctionName
:
"priorbox"
)
}
}
metal/paddle-mobile/paddle-mobile/Operators/Kernels/ConvBNReluKernel.swift
0 → 100644
浏览文件 @
8441bd26
/* Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. */
import
Foundation
struct
ConvBNReluTestParam
:
TestParam
{
let
inputTexture
:
MTLTexture
let
outputTexture
:
MTLTexture
var
metalParam
:
MetalConvParam
let
filterBuffer
:
MTLBuffer
let
biaseBuffer
:
MTLBuffer
let
newScaleBuffer
:
MTLBuffer
let
newBiaseBuffer
:
MTLBuffer
let
filterSize
:
(
width
:
Int
,
height
:
Int
,
channel
:
Int
)
init
(
inInputTexture
:
MTLTexture
,
inOutputTexture
:
MTLTexture
,
inMetalParam
:
MetalConvParam
,
inFilterBuffer
:
MTLBuffer
,
inBiaseBuffer
:
MTLBuffer
,
inNewScaleBuffer
:
MTLBuffer
,
inNewBiaseBuffer
:
MTLBuffer
,
inFilterSize
:
(
width
:
Int
,
height
:
Int
,
channel
:
Int
))
{
inputTexture
=
inInputTexture
outputTexture
=
inOutputTexture
metalParam
=
inMetalParam
filterBuffer
=
inFilterBuffer
biaseBuffer
=
inBiaseBuffer
newScaleBuffer
=
inNewScaleBuffer
newBiaseBuffer
=
inNewBiaseBuffer
filterSize
=
inFilterSize
}
}
class
ConvBNReluKernel
<
P
:
PrecisionType
>
:
Kernel
,
Computable
,
Testable
{
required
init
(
device
:
MTLDevice
,
testParam
:
ConvBNReluTestParam
)
{
if
testParam
.
filterSize
.
width
==
1
&&
testParam
.
filterSize
.
height
==
1
{
super
.
init
(
device
:
device
,
inFunctionName
:
"conv_add_batch_norm_relu_1x1"
)
}
else
if
testParam
.
filterSize
.
channel
==
1
{
super
.
init
(
device
:
device
,
inFunctionName
:
"depthwise_conv_add_batch_norm_relu_3x3"
)
}
else
{
super
.
init
(
device
:
device
,
inFunctionName
:
"conv_add_batch_norm_relu_3x3"
)
}
}
var
metalParam
:
MetalConvParam
!
required
init
(
device
:
MTLDevice
,
param
:
ConvBNReluParam
<
P
>
)
{
if
param
.
filter
.
width
==
1
&&
param
.
filter
.
height
==
1
{
super
.
init
(
device
:
device
,
inFunctionName
:
"conv_add_batch_norm_relu_1x1"
)
}
else
if
param
.
filter
.
channel
==
1
{
super
.
init
(
device
:
device
,
inFunctionName
:
"depthwise_conv_add_batch_norm_relu_3x3"
)
}
else
{
super
.
init
(
device
:
device
,
inFunctionName
:
"conv_add_batch_norm_relu_3x3"
)
}
param
.
filter
.
initBuffer
(
device
:
device
,
precision
:
Tensor
.
BufferPrecision
.
Float32
)
param
.
variance
.
initBuffer
(
device
:
device
)
param
.
mean
.
initBuffer
(
device
:
device
)
param
.
scale
.
initBuffer
(
device
:
device
)
param
.
bias
.
initBuffer
(
device
:
device
)
let
offsetX
=
param
.
filter
.
width
/
2
-
Int
(
param
.
paddings
[
0
])
let
offsetY
=
param
.
filter
.
height
/
2
-
Int
(
param
.
paddings
[
1
])
print
(
"offset x:
\(
offsetX
)
"
)
print
(
"offset y:
\(
offsetY
)
"
)
let
offsetZ
=
0.0
metalParam
=
MetalConvParam
.
init
(
offsetX
:
Int16
(
offsetX
),
offsetY
:
Int16
(
offsetY
),
offsetZ
:
Int16
(
offsetZ
),
strideX
:
UInt16
(
param
.
stride
[
0
]),
strideY
:
UInt16
(
param
.
stride
[
1
]),
paddedZ
:
UInt16
(
param
.
input
.
metalTexture
.
arrayLength
*
4
-
param
.
input
.
dim
[
3
]))
var
invs
:
[
P
]
=
[]
let
varianceContents
=
param
.
variance
.
buffer
.
contents
()
.
assumingMemoryBound
(
to
:
P
.
self
)
for
i
in
0
..<
param
.
variance
.
buffer
.
length
/
MemoryLayout
<
P
>.
stride
{
let
inv
=
1.0
/
pow
(
Float32
.
init
(
varianceContents
[
i
])
+
param
.
epsilon
,
0.5
)
invs
.
append
(
P
(
inv
))
}
let
newScale
:
UnsafeMutablePointer
<
P
>
=
UnsafeMutablePointer
<
P
>.
allocate
(
capacity
:
param
.
scale
.
buffer
.
length
)
let
newBiase
:
UnsafeMutablePointer
<
P
>
=
UnsafeMutablePointer
<
P
>.
allocate
(
capacity
:
param
.
bias
.
buffer
.
length
)
let
scaleContents
=
param
.
scale
.
buffer
.
contents
()
.
assumingMemoryBound
(
to
:
P
.
self
)
let
biaseContents
=
param
.
bias
.
buffer
.
contents
()
.
assumingMemoryBound
(
to
:
P
.
self
)
let
meanContents
=
param
.
mean
.
buffer
.
contents
()
.
assumingMemoryBound
(
to
:
P
.
self
)
for
i
in
0
..<
param
.
scale
.
buffer
.
length
/
MemoryLayout
<
P
>.
stride
{
newScale
[
i
]
=
invs
[
i
]
*
scaleContents
[
i
]
newBiase
[
i
]
=
biaseContents
[
i
]
-
meanContents
[
i
]
*
invs
[
i
]
*
scaleContents
[
i
]
}
param
.
newBiase
=
device
.
makeBuffer
(
bytes
:
newBiase
,
length
:
param
.
bias
.
buffer
.
length
)
param
.
newScale
=
device
.
makeBuffer
(
bytes
:
newScale
,
length
:
param
.
scale
.
buffer
.
length
)
newScale
.
deinitialize
(
count
:
param
.
scale
.
buffer
.
length
)
newScale
.
deallocate
()
newBiase
.
deinitialize
(
count
:
param
.
bias
.
buffer
.
length
)
newBiase
.
deallocate
()
}
func
compute
(
commandBuffer
:
MTLCommandBuffer
,
param
:
ConvBNReluParam
<
P
>
)
throws
{
guard
let
encoder
=
commandBuffer
.
makeComputeCommandEncoder
()
else
{
throw
PaddleMobileError
.
predictError
(
message
:
" encode is nil"
)
}
encoder
.
setTexture
(
param
.
input
.
metalTexture
,
index
:
0
)
encoder
.
setTexture
(
param
.
output
.
metalTexture
,
index
:
1
)
encoder
.
setBytes
(
&
metalParam
,
length
:
MemoryLayout
<
MetalConvParam
>.
size
,
index
:
0
)
encoder
.
setBuffer
(
param
.
filter
.
buffer
,
offset
:
0
,
index
:
1
)
encoder
.
setBuffer
(
param
.
newScale
!
,
offset
:
0
,
index
:
3
)
encoder
.
setBuffer
(
param
.
newBiase
!
,
offset
:
0
,
index
:
4
)
encoder
.
dispatch
(
computePipline
:
pipline
,
outTexture
:
param
.
output
.
metalTexture
)
encoder
.
endEncoding
()
}
public
func
test
(
commandBuffer
:
MTLCommandBuffer
,
param
:
ConvBNReluTestParam
)
{
guard
let
encoder
=
commandBuffer
.
makeComputeCommandEncoder
()
else
{
fatalError
()
}
encoder
.
setTexture
(
param
.
inputTexture
,
index
:
0
)
encoder
.
setTexture
(
param
.
outputTexture
,
index
:
1
)
var
inMetalParam
=
param
.
metalParam
encoder
.
setBytes
(
&
inMetalParam
,
length
:
MemoryLayout
<
MetalConvParam
>.
size
,
index
:
0
)
encoder
.
setBuffer
(
param
.
filterBuffer
,
offset
:
0
,
index
:
1
)
encoder
.
setBuffer
(
param
.
biaseBuffer
,
offset
:
0
,
index
:
2
)
encoder
.
setBuffer
(
param
.
newScaleBuffer
,
offset
:
0
,
index
:
3
)
encoder
.
setBuffer
(
param
.
newBiaseBuffer
,
offset
:
0
,
index
:
4
)
encoder
.
dispatch
(
computePipline
:
pipline
,
outTexture
:
param
.
outputTexture
)
encoder
.
endEncoding
()
}
}
metal/paddle-mobile/paddle-mobile/Operators/Kernels/MulticlassNMSKernel.swift
0 → 100644
浏览文件 @
8441bd26
/* Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. */
import
Foundation
class
MulticlassNMSKernel
<
P
:
PrecisionType
>
:
Kernel
,
Computable
{
func
compute
(
commandBuffer
:
MTLCommandBuffer
,
param
:
MulticlassNMSParam
<
P
>
)
throws
{
guard
let
encoder
=
commandBuffer
.
makeComputeCommandEncoder
()
else
{
throw
PaddleMobileError
.
predictError
(
message
:
" encode is nil"
)
}
encoder
.
setTexture
(
param
.
input
.
metalTexture
,
index
:
0
)
encoder
.
setTexture
(
param
.
output
.
metalTexture
,
index
:
1
)
encoder
.
dispatch
(
computePipline
:
pipline
,
outTexture
:
param
.
output
.
metalTexture
)
encoder
.
endEncoding
()
}
required
init
(
device
:
MTLDevice
,
param
:
MulticlassNMSParam
<
P
>
)
{
super
.
init
(
device
:
device
,
inFunctionName
:
"priorbox"
)
}
}
metal/paddle-mobile/paddle-mobile/Operators/Kernels/PriorBoxKernel.swift
0 → 100644
浏览文件 @
8441bd26
/* Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. */
import
Foundation
class
PriorBoxKernel
<
P
:
PrecisionType
>
:
Kernel
,
Computable
{
func
compute
(
commandBuffer
:
MTLCommandBuffer
,
param
:
PriorBoxParam
<
P
>
)
throws
{
guard
let
encoder
=
commandBuffer
.
makeComputeCommandEncoder
()
else
{
throw
PaddleMobileError
.
predictError
(
message
:
" encode is nil"
)
}
encoder
.
setTexture
(
param
.
input
.
metalTexture
,
index
:
0
)
encoder
.
setTexture
(
param
.
output
.
metalTexture
,
index
:
1
)
encoder
.
dispatch
(
computePipline
:
pipline
,
outTexture
:
param
.
output
.
metalTexture
)
encoder
.
endEncoding
()
}
required
init
(
device
:
MTLDevice
,
param
:
PriorBoxParam
<
P
>
)
{
super
.
init
(
device
:
device
,
inFunctionName
:
"priorbox"
)
}
}
metal/paddle-mobile/paddle-mobile/Operators/Kernels/TransposeKernel.swift
0 → 100644
浏览文件 @
8441bd26
/* Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. */
import
Foundation
class
TransposeKernel
<
P
:
PrecisionType
>
:
Kernel
,
Computable
{
func
compute
(
commandBuffer
:
MTLCommandBuffer
,
param
:
TransposeParam
<
P
>
)
throws
{
guard
let
encoder
=
commandBuffer
.
makeComputeCommandEncoder
()
else
{
throw
PaddleMobileError
.
predictError
(
message
:
" encode is nil"
)
}
encoder
.
setTexture
(
param
.
input
.
metalTexture
,
index
:
0
)
encoder
.
setTexture
(
param
.
output
.
metalTexture
,
index
:
1
)
encoder
.
dispatch
(
computePipline
:
pipline
,
outTexture
:
param
.
output
.
metalTexture
)
encoder
.
endEncoding
()
}
required
init
(
device
:
MTLDevice
,
param
:
TransposeParam
<
P
>
)
{
super
.
init
(
device
:
device
,
inFunctionName
:
"priorbox"
)
}
}
metal/paddle-mobile/paddle-mobile/Operators/MulticlassNMSOp.swift
0 → 100644
浏览文件 @
8441bd26
///* Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License. */
import
Foundation
class
MulticlassNMSParam
<
P
:
PrecisionType
>
:
OpParam
{
typealias
ParamPrecisionType
=
P
required
init
(
opDesc
:
OpDesc
,
inScope
:
Scope
)
throws
{
do
{
fatalError
()
}
catch
let
error
{
throw
error
}
}
let
input
:
Texture
<
P
>
var
output
:
Texture
<
P
>
}
class
MulticlassNMSOp
<
P
:
PrecisionType
>
:
Operator
<
MulticlassNMSKernel
<
P
>
,
MulticlassNMSParam
<
P
>>
,
Runable
,
Creator
,
InferShaperable
{
func
inferShape
()
{
para
.
output
.
dim
=
para
.
input
.
dim
}
typealias
OpType
=
MulticlassNMSOp
<
P
>
func
runImpl
(
device
:
MTLDevice
,
buffer
:
MTLCommandBuffer
)
throws
{
do
{
try
kernel
.
compute
(
commandBuffer
:
buffer
,
param
:
para
)
}
catch
let
error
{
throw
error
}
}
}
metal/paddle-mobile/paddle-mobile/Operators/PriorBoxOp.swift
0 → 100644
浏览文件 @
8441bd26
///* Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License. */
import
Foundation
class
PriorBoxParam
<
P
:
PrecisionType
>
:
OpParam
{
typealias
ParamPrecisionType
=
P
required
init
(
opDesc
:
OpDesc
,
inScope
:
Scope
)
throws
{
do
{
fatalError
()
}
catch
let
error
{
throw
error
}
}
let
input
:
Texture
<
P
>
var
output
:
Texture
<
P
>
}
class
PriorBoxOp
<
P
:
PrecisionType
>
:
Operator
<
PriorBoxKernel
<
P
>
,
PriorBoxParam
<
P
>>
,
Runable
,
Creator
,
InferShaperable
{
func
inferShape
()
{
para
.
output
.
dim
=
para
.
input
.
dim
}
typealias
OpType
=
PriorBoxOp
<
P
>
func
runImpl
(
device
:
MTLDevice
,
buffer
:
MTLCommandBuffer
)
throws
{
do
{
try
kernel
.
compute
(
commandBuffer
:
buffer
,
param
:
para
)
}
catch
let
error
{
throw
error
}
}
}
metal/paddle-mobile/paddle-mobile/Operators/TransposeOp.swift
0 → 100644
浏览文件 @
8441bd26
///* Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License. */
import
Foundation
class
TransposeParam
<
P
:
PrecisionType
>
:
OpParam
{
typealias
ParamPrecisionType
=
P
required
init
(
opDesc
:
OpDesc
,
inScope
:
Scope
)
throws
{
do
{
fatalError
()
}
catch
let
error
{
throw
error
}
}
let
input
:
Texture
<
P
>
var
output
:
Texture
<
P
>
}
class
TransposeOp
<
P
:
PrecisionType
>
:
Operator
<
TransposeKernel
<
P
>
,
TransposeParam
<
P
>>
,
Runable
,
Creator
,
InferShaperable
{
func
inferShape
()
{
para
.
output
.
dim
=
para
.
input
.
dim
}
typealias
OpType
=
TransposeOp
<
P
>
func
runImpl
(
device
:
MTLDevice
,
buffer
:
MTLCommandBuffer
)
throws
{
do
{
try
kernel
.
compute
(
commandBuffer
:
buffer
,
param
:
para
)
}
catch
let
error
{
throw
error
}
}
}
metal/paddle-mobile/paddle-mobile/Program/ProgramOptimize.swift
浏览文件 @
8441bd26
...
...
@@ -143,7 +143,12 @@ extension Node: Equatable {
}
class
ProgramOptimize
<
P
:
PrecisionType
>
{
let
fusionOps
:
[
Fusion
.
Type
]
=
[
ConvAddBatchNormReluOp
<
P
>.
self
,
ConvAddOp
<
P
>.
self
]
// register fusion
let
fusionOps
:
[
Fusion
.
Type
]
=
[
ConvAddBatchNormReluOp
<
P
>.
self
,
ConvAddOp
<
P
>.
self
,
ConvBNReluOp
<
P
>.
self
,
DwConvBNReluOp
<
P
>.
self
]
func
optimize
(
originProgramDesc
:
ProgramDesc
)
->
ProgramDesc
{
guard
originProgramDesc
.
blocks
.
count
==
1
else
{
...
...
metal/paddle-mobile/paddle-mobile/framework/Texture.swift
浏览文件 @
8441bd26
...
...
@@ -22,7 +22,6 @@ class InputTexture {
mtlTexture
=
inMTLTexture
expectDim
=
inExpectDim
}
}
extension
InputTexture
{
...
...
@@ -54,19 +53,34 @@ public class Texture<P: PrecisionType>: Tensorial {
}
else
if
inDim
.
cout
()
==
4
{
tmpTextureDes
.
height
=
inDim
[
1
]
tmpTextureDes
.
width
=
inDim
[
2
]
// print("n : \(inDim[0])")
// print(inDim[3] * inDim[0])
tmpTextureDes
.
depth
=
1
tmpTextureDes
.
arrayLength
=
(
inDim
[
3
]
*
inDim
[
0
]
+
3
)
/
4
tmpTextureDes
.
textureType
=
.
type2DArray
}
else
if
inDim
.
cout
()
==
2
{
tmpTextureDes
.
height
=
1
tmpTextureDes
.
width
=
1
// tmpTextureDes.height = 1
// tmpTextureDes.width = 1
// tmpTextureDes.depth = 1
// tmpTextureDes.arrayLength = (inDim[0] * inDim[1] + 3)/4
tmpTextureDes
.
width
=
inDim
[
0
]
tmpTextureDes
.
height
=
inDim
[
1
]
tmpTextureDes
.
depth
=
1
tmpTextureDes
.
arrayLength
=
(
inDim
[
0
]
*
inDim
[
1
]
+
3
)
/
4
tmpTextureDes
.
arrayLength
=
1
tmpTextureDes
.
textureType
=
.
type2DArray
}
else
{
fatalError
(
" not suuprt "
)
/*
var name: box_coder_0.tmp_0
in var tensor desc dims size: 3
var tensor desc dim 0 value: -1
var tensor desc dim 1 value: 1917
var tensor desc dim 2 value: 4
*/
tmpTextureDes
.
height
=
inDim
[
1
]
tmpTextureDes
.
width
=
inDim
[
2
]
tmpTextureDes
.
depth
=
1
tmpTextureDes
.
arrayLength
=
1
tmpTextureDes
.
textureType
=
.
type2DArray
}
if
MemoryLayout
<
P
>.
size
==
1
{
...
...
@@ -79,7 +93,7 @@ public class Texture<P: PrecisionType>: Tensorial {
}
// tmpTextureDes.pixelFormat = .rgba16Float
tmpTextureDes
.
usage
=
[
.
shaderRead
,
.
shaderWrite
]
tmpTextureDes
.
storageMode
=
.
shared
textureDesc
=
tmpTextureDes
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录