Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
Paddle-Lite
提交
1c72c0ef
P
Paddle-Lite
项目概览
PaddlePaddle
/
Paddle-Lite
通知
331
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看板
未验证
提交
1c72c0ef
编写于
9月 18, 2018
作者:
R
Ruilong Liu
提交者:
GitHub
9月 18, 2018
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #989 from codeWorm2015/metal
update program when mobilentfssd
上级
11524b67
b166ef53
变更
22
隐藏空白更改
内联
并排
Showing
22 changed file
with
208 addition
and
62 deletion
+208
-62
.gitignore
.gitignore
+1
-0
metal/paddle-mobile-demo/paddle-mobile-demo.xcodeproj/project.pbxproj
...-mobile-demo/paddle-mobile-demo.xcodeproj/project.pbxproj
+4
-4
metal/paddle-mobile-demo/paddle-mobile-demo.xcodeproj/xcuserdata/liuruilong.xcuserdatad/xcschemes/paddle-mobile-demo.xcscheme
...ruilong.xcuserdatad/xcschemes/paddle-mobile-demo.xcscheme
+1
-1
metal/paddle-mobile-demo/paddle-mobile-demo/Base.lproj/Main.storyboard
...mobile-demo/paddle-mobile-demo/Base.lproj/Main.storyboard
+3
-3
metal/paddle-mobile-demo/paddle-mobile-demo/MultiPredictViewController.swift
...-demo/paddle-mobile-demo/MultiPredictViewController.swift
+1
-1
metal/paddle-mobile-demo/paddle-mobile-demo/ViewController.swift
...addle-mobile-demo/paddle-mobile-demo/ViewController.swift
+36
-20
metal/paddle-mobile/paddle-mobile.xcodeproj/xcuserdata/liuruilong.xcuserdatad/xcschemes/paddle-mobile.xcscheme
...a/liuruilong.xcuserdatad/xcschemes/paddle-mobile.xcscheme
+1
-1
metal/paddle-mobile/paddle-mobile/CPU/PaddleMobile.h
metal/paddle-mobile/paddle-mobile/CPU/PaddleMobile.h
+28
-19
metal/paddle-mobile/paddle-mobile/CPU/libpaddle-mobile.a
metal/paddle-mobile/paddle-mobile/CPU/libpaddle-mobile.a
+0
-0
metal/paddle-mobile/paddle-mobile/MobilenetSSD_AR.swift
metal/paddle-mobile/paddle-mobile/MobilenetSSD_AR.swift
+56
-0
metal/paddle-mobile/paddle-mobile/Net.swift
metal/paddle-mobile/paddle-mobile/Net.swift
+4
-0
metal/paddle-mobile/paddle-mobile/Operators/Kernels/metal/ConcatKernel.metal
.../paddle-mobile/Operators/Kernels/metal/ConcatKernel.metal
+32
-1
metal/paddle-mobile/paddle-mobile/Operators/Kernels/metal/Split.metal
...-mobile/paddle-mobile/Operators/Kernels/metal/Split.metal
+14
-0
metal/paddle-mobile/paddle-mobile/Operators/SplitOp.swift
metal/paddle-mobile/paddle-mobile/Operators/SplitOp.swift
+1
-0
metal/paddle-mobile/paddle-mobile/PaddleMobile.swift
metal/paddle-mobile/paddle-mobile/PaddleMobile.swift
+8
-6
metal/paddle-mobile/paddle-mobile/Program/BlockDesc.swift
metal/paddle-mobile/paddle-mobile/Program/BlockDesc.swift
+1
-1
metal/paddle-mobile/paddle-mobile/Program/OpDesc.swift
metal/paddle-mobile/paddle-mobile/Program/OpDesc.swift
+1
-1
metal/paddle-mobile/paddle-mobile/Program/Program.swift
metal/paddle-mobile/paddle-mobile/Program/Program.swift
+1
-1
metal/paddle-mobile/paddle-mobile/Program/ProgramDesc.swift
metal/paddle-mobile/paddle-mobile/Program/ProgramDesc.swift
+1
-1
metal/paddle-mobile/paddle-mobile/Program/TensorDesc.swift
metal/paddle-mobile/paddle-mobile/Program/TensorDesc.swift
+1
-1
metal/paddle-mobile/paddle-mobile/Program/VarDesc.swift
metal/paddle-mobile/paddle-mobile/Program/VarDesc.swift
+1
-1
metal/paddle-mobile/paddle-mobile/framework/Executor.swift
metal/paddle-mobile/paddle-mobile/framework/Executor.swift
+12
-0
未找到文件。
.gitignore
浏览文件 @
1c72c0ef
...
...
@@ -24,6 +24,7 @@
*.lai
*.la
*.lib
*.a
# Executables
*.exe
...
...
metal/paddle-mobile-demo/paddle-mobile-demo.xcodeproj/project.pbxproj
浏览文件 @
1c72c0ef
...
...
@@ -32,7 +32,7 @@
FCEBEC2C20E1391F00C0B14D
/* paddle_mobile.framework in Frameworks */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FCEBEC2B20E1391F00C0B14D
/* paddle_mobile.framework */
;
};
FCEBEC2D20E1391F00C0B14D
/* paddle_mobile.framework in Embed Frameworks */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FCEBEC2B20E1391F00C0B14D
/* paddle_mobile.framework */
;
settings
=
{
ATTRIBUTES
=
(
CodeSignOnCopy
,
RemoveHeadersOnCopy
,
);
};
};
FCEEE7D4210627A000444BEC
/* banana.jpeg in Resources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FCEEE7D3210627A000444BEC
/* banana.jpeg */
;
};
FCF437E8214B6DDB00943429
/* Multi
-Predict-ViewController.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FCF437E7214B6DDB00943429
/* Multi-Predict-
ViewController.swift */
;
};
FCF437E8214B6DDB00943429
/* Multi
PredictViewController.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
FCF437E7214B6DDB00943429
/* MultiPredict
ViewController.swift */
;
};
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
...
...
@@ -80,7 +80,7 @@
FCDFD41A211D91C7005AB38B
/* synset.txt */
=
{
isa
=
PBXFileReference
;
fileEncoding
=
4
;
lastKnownFileType
=
text
;
path
=
synset.txt
;
sourceTree
=
"<group>"
;
};
FCEBEC2B20E1391F00C0B14D
/* paddle_mobile.framework */
=
{
isa
=
PBXFileReference
;
explicitFileType
=
wrapper.framework
;
path
=
paddle_mobile.framework
;
sourceTree
=
BUILT_PRODUCTS_DIR
;
};
FCEEE7D3210627A000444BEC
/* banana.jpeg */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
image.jpeg
;
path
=
banana.jpeg
;
sourceTree
=
"<group>"
;
};
FCF437E7214B6DDB00943429
/* Multi
-Predict-ViewController.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
"Multi-Predict-ViewController.swift"
;
sourceTree
=
"<group>"
;
};
FCF437E7214B6DDB00943429
/* Multi
PredictViewController.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
MultiPredictViewController.swift
;
sourceTree
=
"<group>"
;
};
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
...
...
@@ -147,7 +147,7 @@
FC039B8A20E11C560081E9F8
/* LaunchScreen.storyboard */
,
FC039B8D20E11C560081E9F8
/* Info.plist */
,
FC27991121343A39000B6BAD
/* paddle-mobile-demo-Bridging-Header.h */
,
FCF437E7214B6DDB00943429
/* Multi
-Predict-
ViewController.swift */
,
FCF437E7214B6DDB00943429
/* Multi
Predict
ViewController.swift */
,
);
path
=
"paddle-mobile-demo"
;
sourceTree
=
"<group>"
;
...
...
@@ -361,7 +361,7 @@
FC039B8420E11C550081E9F8
/* ViewController.swift in Sources */
,
FC803BCE214D27930094B8E5
/* VideoCapture.swift in Sources */
,
FC013928210204A3008100E3
/* PreProcessKernel.metal in Sources */
,
FCF437E8214B6DDB00943429
/* Multi
-Predict-
ViewController.swift in Sources */
,
FCF437E8214B6DDB00943429
/* Multi
Predict
ViewController.swift in Sources */
,
FCBCCC552122EF5500D94F7E
/* MetalHelper.swift in Sources */
,
FC803BCD214D27930094B8E5
/* FPSCounter.swift in Sources */
,
FC039B8220E11C550081E9F8
/* AppDelegate.swift in Sources */
,
...
...
metal/paddle-mobile-demo/paddle-mobile-demo.xcodeproj/xcuserdata/liuruilong.xcuserdatad/xcschemes/paddle-mobile-demo.xcscheme
浏览文件 @
1c72c0ef
...
...
@@ -42,7 +42,7 @@
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration =
"
Release
"
buildConfiguration =
"
Debug
"
selectedDebuggerIdentifier =
"Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier =
"Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle =
"0"
...
...
metal/paddle-mobile-demo/paddle-mobile-demo/Base.lproj/Main.storyboard
浏览文件 @
1c72c0ef
...
...
@@ -14,7 +14,7 @@
<!--Multi Predict View Controller-->
<scene
sceneID=
"ec4-AW-9Vs"
>
<objects>
<viewController
id=
"Vwd-lt-764"
customClass=
"Multi
_Predict_
ViewController"
customModule=
"paddle_mobile_demo"
customModuleProvider=
"target"
sceneMemberID=
"viewController"
>
<viewController
id=
"Vwd-lt-764"
customClass=
"Multi
Predict
ViewController"
customModule=
"paddle_mobile_demo"
customModuleProvider=
"target"
sceneMemberID=
"viewController"
>
<view
key=
"view"
contentMode=
"scaleToFill"
id=
"55D-rz-Ex6"
>
<rect
key=
"frame"
x=
"0.0"
y=
"0.0"
width=
"375"
height=
"667"
/>
<autoresizingMask
key=
"autoresizingMask"
widthSizable=
"YES"
heightSizable=
"YES"
/>
...
...
@@ -50,7 +50,7 @@
<imageView
userInteractionEnabled=
"NO"
contentMode=
"scaleAspectFit"
horizontalHuggingPriority=
"251"
verticalHuggingPriority=
"251"
translatesAutoresizingMaskIntoConstraints=
"NO"
id=
"ZZh-fw-LwK"
>
<rect
key=
"frame"
x=
"0.0"
y=
"20"
width=
"225"
height=
"247"
/>
</imageView>
<label
opaque=
"NO"
userInteractionEnabled=
"NO"
contentMode=
"left"
horizontalHuggingPriority=
"251"
verticalHuggingPriority=
"251"
text=
"
Thread
:"
textAlignment=
"natural"
lineBreakMode=
"tailTruncation"
baselineAdjustment=
"alignBaselines"
adjustsFontSizeToFit=
"NO"
translatesAutoresizingMaskIntoConstraints=
"NO"
id=
"2EB-m2-a3L"
>
<label
opaque=
"NO"
userInteractionEnabled=
"NO"
contentMode=
"left"
horizontalHuggingPriority=
"251"
verticalHuggingPriority=
"251"
text=
"
Platform
:"
textAlignment=
"natural"
lineBreakMode=
"tailTruncation"
baselineAdjustment=
"alignBaselines"
adjustsFontSizeToFit=
"NO"
translatesAutoresizingMaskIntoConstraints=
"NO"
id=
"2EB-m2-a3L"
>
<rect
key=
"frame"
x=
"10"
y=
"538"
width=
"68"
height=
"24"
/>
<constraints>
<constraint
firstAttribute=
"width"
constant=
"68"
id=
"Q5J-tq-JSX"
/>
...
...
@@ -236,7 +236,7 @@
</viewController>
<placeholder
placeholderIdentifier=
"IBFirstResponder"
id=
"dkx-z0-nzr"
sceneMemberID=
"firstResponder"
/>
</objects>
<point
key=
"canvasLocation"
x=
"-1
543.2"
y=
"-147.07646176911544
"
/>
<point
key=
"canvasLocation"
x=
"-1
127"
y=
"-3
"
/>
</scene>
</scenes>
<resources>
...
...
metal/paddle-mobile-demo/paddle-mobile-demo/Multi
-Predict-
ViewController.swift
→
metal/paddle-mobile-demo/paddle-mobile-demo/Multi
Predict
ViewController.swift
浏览文件 @
1c72c0ef
...
...
@@ -9,7 +9,7 @@
import
UIKit
import
paddle_mobile
class
Multi
_Predict_
ViewController
:
UIViewController
{
class
Multi
Predict
ViewController
:
UIViewController
{
var
runner1
:
Runner
!
var
runner2
:
Runner
!
override
func
viewDidLoad
()
{
...
...
metal/paddle-mobile-demo/paddle-mobile-demo/ViewController.swift
浏览文件 @
1c72c0ef
...
...
@@ -18,8 +18,8 @@ import CoreMedia
import
paddle_mobile
import
MetalPerformanceShaders
let
platform
:
Platform
=
.
GPU
let
threadSupport
=
[
1
]
var
platform
:
Platform
=
.
GPU
let
threadSupport
:
[(
Platform
,
String
)]
=
[(
.
GPU
,
"GPU"
),
(
.
CPU
,
"CPU"
)
]
//.mobilenet_ssd : Runner.init(inNet: MobileNet_ssd_hand.init(device: MetalHelper.shared.device), commandQueue: MetalHelper.shared.queue, inPlatform: platform),
let
modelHelperMap
:
[
SupportModel
:
Runner
]
=
[
...
...
@@ -28,6 +28,8 @@ let modelHelperMap: [SupportModel : Runner] = [
//, .genet : Genet.init()
//let modelHelperMap: [SupportModel : Net] = [.mobilenet : MobileNet.init(), .mobilenet_ssd : MobileNet_ssd_hand.init()]
let
netSupport
:
[
SupportModel
:
Net
]
=
[
.
genet
:
Genet
.
init
(
device
:
MetalHelper
.
shared
.
device
),
.
mobilenet_ssd_ar
:
MobileNet_ssd_AR
.
init
(
device
:
MetalHelper
.
shared
.
device
)]
enum
SupportModel
:
String
{
// case mobilenet = "mobilenet"
// case mobilenet_ssd = "mobilenetssd"
...
...
@@ -55,17 +57,28 @@ class ViewController: UIViewController {
var
modelType
:
SupportModel
=
SupportModel
.
supportedModels
()[
0
]
var
toPredictTexture
:
MTLTexture
?
var
runner
:
Runner
{
get
{
return
modelHelperMap
[
modelType
]
?
!
" has no this type "
}
set
{
}
}
var
runner
:
Runner
!
var
threadNum
=
1
@IBAction
func
loadAct
(
_
sender
:
Any
)
{
runner
=
Runner
.
init
(
inNet
:
netSupport
[
modelType
]
!
,
commandQueue
:
MetalHelper
.
shared
.
queue
,
inPlatform
:
platform
)
if
platform
==
.
CPU
{
if
inputPointer
==
nil
{
inputPointer
=
runner
.
preproccess
(
image
:
selectImage
!.
cgImage
!
)
}
}
else
if
platform
==
.
GPU
{
if
self
.
toPredictTexture
==
nil
{
runner
.
getTexture
(
image
:
selectImage
!.
cgImage
!
)
{[
weak
self
]
(
texture
)
in
self
?
.
toPredictTexture
=
texture
}
}
}
else
{
fatalError
(
" unsupport "
)
}
if
runner
.
load
()
{
print
(
" load success ! "
)
}
else
{
...
...
@@ -128,6 +141,7 @@ class ViewController: UIViewController {
for
_
in
0
..<
10
{
runner
.
predict
(
inputPointer
:
inInputPointer
)
{
(
success
,
res
)
in
res
?
.
releaseOutput
()
}
}
...
...
@@ -146,6 +160,7 @@ class ViewController: UIViewController {
}
}
}
res
?
.
releaseOutput
()
}
}
}
...
...
@@ -168,15 +183,15 @@ class ViewController: UIViewController {
selectImage
=
UIImage
.
init
(
named
:
"hand.jpg"
)
selectImageView
.
image
=
selectImage
if
platform
==
.
CPU
{
inputPointer
=
runner
.
preproccess
(
image
:
selectImage
!.
cgImage
!
)
}
else
if
platform
==
.
GPU
{
runner
.
getTexture
(
image
:
selectImage
!.
cgImage
!
)
{[
weak
self
]
(
texture
)
in
self
?
.
toPredictTexture
=
texture
}
}
else
{
fatalError
(
" unsupport "
)
}
//
if platform == .CPU {
//
inputPointer = runner.preproccess(image: selectImage!.cgImage!)
//
} else if platform == .GPU {
//
runner.getTexture(image: selectImage!.cgImage!) {[weak self] (texture) in
//
self?.toPredictTexture = texture
//
}
//
} else {
//
fatalError( " unsupport " )
//
}
// videoCapture = VideoCapture.init(device: MetalHelper.shared.device, orientation: .portrait, position: .back)
// videoCapture.fps = 30
...
...
@@ -219,7 +234,7 @@ extension ViewController: UIPickerViewDataSource, UIPickerViewDelegate{
if
pickerView
==
modelPickerView
{
return
SupportModel
.
supportedModels
()[
row
]
.
rawValue
}
else
if
pickerView
==
threadPickerView
{
return
"
\(
threadSupport
[
row
]
)
"
return
threadSupport
[
row
]
.
1
}
else
{
fatalError
()
}
...
...
@@ -229,7 +244,8 @@ extension ViewController: UIPickerViewDataSource, UIPickerViewDelegate{
if
pickerView
==
modelPickerView
{
self
.
modelType
=
SupportModel
.
supportedModels
()[
row
]
}
else
if
pickerView
==
threadPickerView
{
self
.
threadNum
=
threadSupport
[
row
]
platform
=
threadSupport
[
row
]
.
0
}
else
{
fatalError
()
}
...
...
metal/paddle-mobile/paddle-mobile.xcodeproj/xcuserdata/liuruilong.xcuserdatad/xcschemes/paddle-mobile.xcscheme
浏览文件 @
1c72c0ef
...
...
@@ -33,7 +33,7 @@
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration =
"
Release
"
buildConfiguration =
"
Debug
"
selectedDebuggerIdentifier =
"Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier =
"Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle =
"0"
...
...
metal/paddle-mobile/paddle-mobile/CPU/PaddleMobile.h
浏览文件 @
1c72c0ef
...
...
@@ -17,7 +17,17 @@
#import <CoreImage/CoreImage.h>
#import <Foundation/Foundation.h>
@interface
PaddleMobile
:
NSObject
@interface
PaddleMobileCPUResult
:
NSObject
@property
(
assign
,
nonatomic
,
readonly
)
float
*
output
;
@property
(
assign
,
nonatomic
,
readonly
)
int
outputSize
;
-
(
void
)
releaseOutput
;
@end
@interface
PaddleMobileCPU
:
NSObject
/*
创建对象
...
...
@@ -42,25 +52,8 @@
andModelParamsLen
:(
size_t
)
combinedParamsLen
andCombinedParamsBuf
:(
const
uint8_t
*
)
combinedParamsBuf
;
/*
* 进行预测, means 和 scale 为训练模型时的预处理参数, 如训练时没有做这些预处理则直接使用 predict
*/
-
(
NSArray
*
)
predict
:(
CGImageRef
)
image
dim
:(
NSArray
<
NSNumber
*>
*
)
dim
means
:(
NSArray
<
NSNumber
*>
*
)
means
scale
:(
float
)
scale
;
/*
* 预测输入
* */
-
(
NSArray
*
)
predictInput
:(
float
*
)
input
dim
:(
NSArray
<
NSNumber
*>
*
)
dim
means
:(
NSArray
<
NSNumber
*>
*
)
means
scale
:(
float
)
scale
;
/*
* 对图像进行预处理
* 对图像进行预处理, 需要外部开辟 output 内存, 外部释放 output 内存
* */
-
(
void
)
preprocess
:(
CGImageRef
)
image
output
:(
float
*
)
output
...
...
@@ -68,6 +61,22 @@
scale
:(
float
)
scale
dim
:(
NSArray
<
NSNumber
*>
*
)
dim
;
/*
* 预测预处理后的数据, 返回结果使用结束需要调用其 realseOutput 函数进行释放
* */
-
(
PaddleMobileCPUResult
*
)
predictInput
:(
float
*
)
input
dim
:(
NSArray
<
NSNumber
*>
*
)
dim
;
/*
进行预测, means 和 scale 为训练模型时的预处理参数, 如训练时没有做这些预处理则直接使用 predict
*/
-
(
NSArray
*
)
predict
:(
CGImageRef
)
image
dim
:(
NSArray
<
NSNumber
*>
*
)
dim
means
:(
NSArray
<
NSNumber
*>
*
)
means
scale
:(
float
)
scale
;
/*
进行预测, 默认 means 为 0, scale 为 1.0
*/
-
(
NSArray
*
)
predict
:(
CGImageRef
)
image
dim
:(
NSArray
<
NSNumber
*>
*
)
dim
;
/*
清理内存
*/
...
...
metal/paddle-mobile/paddle-mobile/CPU/libpaddle-mobile.a
已删除
100644 → 0
浏览文件 @
11524b67
文件已删除
metal/paddle-mobile/paddle-mobile/MobilenetSSD_AR.swift
浏览文件 @
1c72c0ef
...
...
@@ -82,4 +82,60 @@ public class MobileNet_ssd_AR: Net{
// print(resultHolder.result![0])
return
resultHolder
}
override
func
updateProgram
(
program
:
Program
)
{
for
i
in
[
56
,
66
,
76
,
86
,
93
,
99
]
{
let
opDesc
=
program
.
programDesc
.
blocks
[
0
]
.
ops
[
i
]
let
output
=
opDesc
.
outputs
[
"Out"
]
!.
first
!
let
v
=
program
.
scope
[
output
]
!
let
originTexture
=
v
as!
Texture
<
Float32
>
originTexture
.
tensorDim
=
Dim
.
init
(
inDim
:
[
originTexture
.
tensorDim
[
1
]
/
7
,
originTexture
.
tensorDim
[
0
]
*
7
])
originTexture
.
dim
=
Dim
.
init
(
inDim
:
[
1
,
1
,
originTexture
.
dim
[
3
]
/
7
,
originTexture
.
dim
[
2
]
*
7
])
originTexture
.
padToFourDim
=
Dim
.
init
(
inDim
:
[
1
,
1
,
originTexture
.
padToFourDim
[
3
]
/
7
,
originTexture
.
padToFourDim
[
2
]
*
7
])
program
.
scope
[
output
]
=
originTexture
if
i
==
99
{
opDesc
.
attrs
[
"axis"
]
=
0
}
else
{
opDesc
.
attrs
[
"shape"
]
=
originTexture
.
tensorDim
.
dims
.
map
{
Int32
(
$0
)
}
}
}
for
i
in
[
58
,
59
,
88
,
89
,
95
,
96
,
68
,
69
,
78
,
79
]
{
let
opDesc
=
program
.
programDesc
.
blocks
[
0
]
.
ops
[
i
]
let
output
=
opDesc
.
outputs
[
"Out"
]
!.
first
!
let
v
=
program
.
scope
[
output
]
!
let
originTexture
=
v
as!
Texture
<
Float32
>
originTexture
.
tensorDim
=
Dim
.
init
(
inDim
:
[
originTexture
.
tensorDim
[
1
],
originTexture
.
tensorDim
[
2
]])
opDesc
.
attrs
[
"shape"
]
=
originTexture
.
tensorDim
.
dims
.
map
{
Int32
(
$0
)
}
}
for
i
in
[
60
,
101
,
90
,
97
,
70
,
80
]
{
let
opDesc
=
program
.
programDesc
.
blocks
[
0
]
.
ops
[
i
]
let
output
=
opDesc
.
outputs
[
"Out"
]
!.
first
!
let
v
=
program
.
scope
[
output
]
!
let
originTexture
=
v
as!
Texture
<
Float32
>
originTexture
.
tensorDim
=
Dim
.
init
(
inDim
:
[
originTexture
.
tensorDim
[
1
],
originTexture
.
tensorDim
[
2
]])
opDesc
.
attrs
[
"axis"
]
=
(
opDesc
.
attrs
[
"axis"
]
!
as!
Int
)
-
1
}
for
i
in
[
102
]
{
let
opDesc
=
program
.
programDesc
.
blocks
[
0
]
.
ops
[
i
]
for
output
in
opDesc
.
outputs
[
"Out"
]
!
{
let
v
=
program
.
scope
[
output
]
!
let
originTexture
=
v
as!
Texture
<
Float32
>
originTexture
.
tensorDim
=
Dim
.
init
(
inDim
:
[
originTexture
.
tensorDim
[
1
],
originTexture
.
tensorDim
[
2
]])
}
opDesc
.
attrs
[
"axis"
]
=
(
opDesc
.
attrs
[
"axis"
]
!
as!
Int
)
-
1
print
(
" split axis
\(
opDesc
.
attrs
[
"axis"
]
)
"
)
}
// 99
}
}
metal/paddle-mobile/paddle-mobile/Net.swift
浏览文件 @
1c72c0ef
...
...
@@ -55,4 +55,8 @@ public class Net: NSObject {
@objc
public
init
(
device
:
MTLDevice
)
{
super
.
init
()
}
func
updateProgram
(
program
:
Program
)
{
}
}
metal/paddle-mobile/paddle-mobile/Operators/Kernels/metal/ConcatKernel.metal
浏览文件 @
1c72c0ef
...
...
@@ -125,7 +125,6 @@ struct ConcatParam {
#undef R
#undef V
#define V VNORMAL
#define R 4
#define N 2
...
...
@@ -138,3 +137,35 @@ struct ConcatParam {
#undef N
#undef R
#undef V
#define V VY
#define R 2
#define N 2
#define P float
#include "ConcatKernel.inc.metal"
#undef P
#define P half
#include "ConcatKernel.inc.metal"
#undef P
#undef N
#undef R
#undef V
#define V VY
#define R 2
#define N 5
#define P float
#include "ConcatKernel.inc.metal"
#undef P
#define P half
#include "ConcatKernel.inc.metal"
#undef P
#undef N
#undef R
#undef V
metal/paddle-mobile/paddle-mobile/Operators/Kernels/metal/Split.metal
浏览文件 @
1c72c0ef
...
...
@@ -48,3 +48,17 @@ struct SplitParam {
#undef R
#undef V
//// ssd-ar: (R=2, N=2, V=y)
#define V VY
#define R 2
#define N 2
#define P float
#include "Split.inc.metal"
#undef P
#define P half
#include "Split.inc.metal"
#undef P
#undef N
#undef R
#undef V
metal/paddle-mobile/paddle-mobile/Operators/SplitOp.swift
浏览文件 @
1c72c0ef
...
...
@@ -39,6 +39,7 @@ class SplitParam<P: PrecisionType>: OpParam {
throw
error
}
}
var
axis
:
Int
let
input
:
Texture
<
P
>
var
output
:
Texture
<
P
>
...
...
metal/paddle-mobile/paddle-mobile/PaddleMobile.swift
浏览文件 @
1c72c0ef
...
...
@@ -34,7 +34,7 @@ public class Runner: NSObject {
public
let
net
:
Net
let
device
:
MTLDevice
?
let
platform
:
Platform
var
cpuPaddleMobile
:
PaddleMobile
?
var
cpuPaddleMobile
:
PaddleMobile
CPU
?
let
numel
:
Int
let
meansNumber
:
[
NSNumber
]
...
...
@@ -54,7 +54,7 @@ public class Runner: NSObject {
textureLoader
=
MTKTextureLoader
.
init
(
device
:
inDevice
)
}
if
platform
==
.
CPU
{
cpuPaddleMobile
=
PaddleMobile
.
init
()
cpuPaddleMobile
=
PaddleMobile
CPU
.
init
()
}
numel
=
net
.
dim
.
n
*
net
.
dim
.
c
*
net
.
dim
.
h
*
net
.
dim
.
w
meansNumber
=
net
.
means
.
map
{
NSNumber
.
init
(
value
:
$0
)
}
...
...
@@ -76,6 +76,7 @@ public class Runner: NSObject {
let
loader
=
Loader
<
Float32
>.
init
()
do
{
program
=
try
loader
.
load
(
device
:
inDevice
,
modelPath
:
net
.
modelPath
,
paraPath
:
net
.
paramPath
)
net
.
updateProgram
(
program
:
program
!
)
executor
=
try
Executor
<
Float32
>.
init
(
inDevice
:
inDevice
,
inQueue
:
inQueue
,
inProgram
:
program
!
)
}
catch
let
error
{
print
(
error
)
...
...
@@ -87,12 +88,13 @@ public class Runner: NSObject {
return
true
}
@objc
public
func
predict
(
inputPointer
:
UnsafeMutablePointer
<
Float32
>
,
completion
:
@escaping
(
_
success
:
Bool
,
_
resultArray
:
[
Float32
])
->
Void
)
{
guard
let
res
=
cpuPaddleMobile
?
.
predictInput
(
inputPointer
,
dim
:
dimsNum
,
means
:
meansNumber
,
scale
:
net
.
scale
)
else
{
completion
(
false
,
[])
@objc
public
func
predict
(
inputPointer
:
UnsafeMutablePointer
<
Float32
>
,
completion
:
@escaping
(
_
success
:
Bool
,
_
result
:
PaddleMobileCPUResult
?)
->
Void
)
{
guard
let
res
=
cpuPaddleMobile
?
.
predictInput
(
inputPointer
,
dim
:
dimsNum
)
else
{
completion
(
false
,
nil
)
return
}
completion
(
true
,
res
.
map
{
(
$0
as!
NSNumber
)
.
floatValue
}
)
completion
(
true
,
res
)
}
/**
...
...
metal/paddle-mobile/paddle-mobile/Program/BlockDesc.swift
浏览文件 @
1c72c0ef
...
...
@@ -14,7 +14,7 @@
import
Foundation
struct
BlockDesc
{
class
BlockDesc
{
let
index
:
Int
let
parentIndex
:
Int
let
vars
:
[
VarDesc
]
...
...
metal/paddle-mobile/paddle-mobile/Program/OpDesc.swift
浏览文件 @
1c72c0ef
...
...
@@ -14,7 +14,7 @@
import
Foundation
struct
OpDesc
{
class
OpDesc
{
let
inputs
:
[
String
:
[
String
]]
var
paraInputs
:
[
String
:
[
String
]]
var
outputs
:
[
String
:
[
String
]]
...
...
metal/paddle-mobile/paddle-mobile/Program/Program.swift
浏览文件 @
1c72c0ef
...
...
@@ -14,7 +14,7 @@
import
Foundation
public
struct
Program
{
public
class
Program
{
let
paramPath
:
String
let
programDesc
:
ProgramDesc
let
scope
:
Scope
...
...
metal/paddle-mobile/paddle-mobile/Program/ProgramDesc.swift
浏览文件 @
1c72c0ef
...
...
@@ -14,7 +14,7 @@
import
Foundation
public
struct
ProgramDesc
{
public
class
ProgramDesc
{
var
blocks
:
[
BlockDesc
]
=
[]
init
(
protoProgram
:
PaddleMobile_Framework_Proto_ProgramDesc
)
{
for
block
in
protoProgram
.
blocks
{
...
...
metal/paddle-mobile/paddle-mobile/Program/TensorDesc.swift
浏览文件 @
1c72c0ef
...
...
@@ -14,7 +14,7 @@
import
Foundation
struct
TensorDesc
{
class
TensorDesc
{
let
dims
:
[
Int
]
let
dataType
:
VarTypeType
let
dataLayout
:
DataLayout
=
DataLayout
.
NCHW
()
...
...
metal/paddle-mobile/paddle-mobile/Program/VarDesc.swift
浏览文件 @
1c72c0ef
...
...
@@ -56,7 +56,7 @@ enum VarTypeType: Int {
}
}
struct
VarDesc
{
class
VarDesc
{
let
name
:
String
let
persistable
:
Bool
let
type
:
VarTypeType
...
...
metal/paddle-mobile/paddle-mobile/framework/Executor.swift
浏览文件 @
1c72c0ef
...
...
@@ -76,11 +76,23 @@ public class Executor<P: PrecisionType> {
program
=
inProgram
device
=
inDevice
queue
=
inQueue
// print("before for ")
//print(program.scope.vars["fea_pyramid1_mbox_conf_flat.Flatten.output.1.tmp_0"])
for
block
in
inProgram
.
programDesc
.
blocks
{
//block.ops.count
for
i
in
0
..<
block
.
ops
.
count
{
let
op
=
block
.
ops
[
i
]
do
{
// print("in for i \(i): ")
// print(program.scope.vars["fea_pyramid1_mbox_conf_flat.Flatten.output.1.tmp_0"])
//
// if i == 56 {
// print(program.scope.vars["fea_pyramid1_mbox_conf_flat.Flatten.output.1.tmp_0"])
//
// }
let
op
=
try
OpCreator
<
P
>.
shared
.
creat
(
device
:
inDevice
,
opDesc
:
op
,
scope
:
inProgram
.
scope
)
ops
.
append
(
op
)
}
catch
let
error
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录