Skip to content

Commit d7bc537

Browse files
authored
Update SwiftPM pins to 0.7.0 (#39)
* Update SwiftPM pins to 0.7.0 * Update MobileNetClassifier.swift
1 parent d6e934e commit d7bc537

File tree

2 files changed

+28
-31
lines changed

2 files changed

+28
-31
lines changed

mv3/apple/ExecuTorchDemo/ExecuTorchDemo.xcodeproj/project.pbxproj

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,15 @@
1818
03672A662DE1226100147123 /* backend_coreml in Frameworks */ = {isa = PBXBuildFile; productRef = 03672A652DE1226100147123 /* backend_coreml */; };
1919
03672A682DE1226100147123 /* backend_mps in Frameworks */ = {isa = PBXBuildFile; productRef = 03672A672DE1226100147123 /* backend_mps */; };
2020
03672A6A2DE1226100147123 /* backend_xnnpack in Frameworks */ = {isa = PBXBuildFile; productRef = 03672A692DE1226100147123 /* backend_xnnpack */; };
21-
03672A732DE1231400147123 /* kernels_portable in Frameworks */ = {isa = PBXBuildFile; productRef = 03672A722DE1231400147123 /* kernels_portable */; };
2221
03672A752DE144CF00147123 /* executorch_debug in Frameworks */ = {isa = PBXBuildFile; productRef = 03672A742DE144CF00147123 /* executorch_debug */; };
2322
03672A772DE1457900147123 /* backend_coreml in Frameworks */ = {isa = PBXBuildFile; productRef = 03672A762DE1457900147123 /* backend_coreml */; };
2423
03672A792DE1457900147123 /* backend_mps in Frameworks */ = {isa = PBXBuildFile; productRef = 03672A782DE1457900147123 /* backend_mps */; };
2524
03672A7B2DE1457900147123 /* backend_xnnpack in Frameworks */ = {isa = PBXBuildFile; productRef = 03672A7A2DE1457900147123 /* backend_xnnpack */; };
26-
03672A7D2DE1457900147123 /* kernels_portable in Frameworks */ = {isa = PBXBuildFile; productRef = 03672A7C2DE1457900147123 /* kernels_portable */; };
2725
036834D52ACB710D00BA100F /* mv3.pte in Resources */ = {isa = PBXBuildFile; fileRef = 036834D42ACB710D00BA100F /* mv3.pte */; };
2826
036834D62ACB710D00BA100F /* mv3.pte in Resources */ = {isa = PBXBuildFile; fileRef = 036834D42ACB710D00BA100F /* mv3.pte */; };
2927
036834D82ACB893700BA100F /* mv3_coreml_all.pte in Resources */ = {isa = PBXBuildFile; fileRef = 036834D72ACB893700BA100F /* mv3_coreml_all.pte */; };
28+
03B184962E1FA1E400246294 /* kernels_optimized in Frameworks */ = {isa = PBXBuildFile; productRef = 03B184952E1FA1E400246294 /* kernels_optimized */; };
29+
03B184982E1FA1F400246294 /* kernels_optimized in Frameworks */ = {isa = PBXBuildFile; productRef = 03B184972E1FA1F400246294 /* kernels_optimized */; };
3030
03C818192AC671980084CC29 /* Samoyed.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 03C818182AC671980084CC29 /* Samoyed.jpg */; };
3131
03C8181D2AC69C280084CC29 /* Arctic fox.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 03C8181C2AC69C280084CC29 /* Arctic fox.jpg */; };
3232
03C8181F2AC69DFF0084CC29 /* hot pot.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 03C8181E2AC69DFF0084CC29 /* hot pot.jpg */; };
@@ -118,8 +118,8 @@
118118
buildActionMask = 2147483647;
119119
files = (
120120
032C01EC2AC34CAC002955E1 /* libMobileNetClassifier.a in Frameworks */,
121-
03672A732DE1231400147123 /* kernels_portable in Frameworks */,
122121
03672A6A2DE1226100147123 /* backend_xnnpack in Frameworks */,
122+
03B184962E1FA1E400246294 /* kernels_optimized in Frameworks */,
123123
03672A682DE1226100147123 /* backend_mps in Frameworks */,
124124
03672A662DE1226100147123 /* backend_coreml in Frameworks */,
125125
);
@@ -140,9 +140,9 @@
140140
files = (
141141
03C818282AC760650084CC29 /* libMobileNetClassifier.a in Frameworks */,
142142
03672A7B2DE1457900147123 /* backend_xnnpack in Frameworks */,
143+
03B184982E1FA1F400246294 /* kernels_optimized in Frameworks */,
143144
03672A792DE1457900147123 /* backend_mps in Frameworks */,
144145
03672A772DE1457900147123 /* backend_coreml in Frameworks */,
145-
03672A7D2DE1457900147123 /* kernels_portable in Frameworks */,
146146
);
147147
runOnlyForDeploymentPostprocessing = 0;
148148
};
@@ -301,6 +301,7 @@
301301
03672A672DE1226100147123 /* backend_mps */,
302302
03672A692DE1226100147123 /* backend_xnnpack */,
303303
03672A722DE1231400147123 /* kernels_portable */,
304+
03B184952E1FA1E400246294 /* kernels_optimized */,
304305
);
305306
productName = ExecuTorchDemo;
306307
productReference = 032C016F2AC228E6002955E1 /* ExecuTorchDemo.app */;
@@ -346,6 +347,7 @@
346347
03672A782DE1457900147123 /* backend_mps */,
347348
03672A7A2DE1457900147123 /* backend_xnnpack */,
348349
03672A7C2DE1457900147123 /* kernels_portable */,
350+
03B184972E1FA1F400246294 /* kernels_optimized */,
349351
);
350352
productName = ExecuTorchDemoTests;
351353
productReference = 03C8180A2AC66FC30084CC29 /* MobileNetClassifierTest.xctest */;
@@ -560,10 +562,7 @@
560562
IPHONEOS_DEPLOYMENT_TARGET = 17.0;
561563
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
562564
ONLY_ACTIVE_ARCH = YES;
563-
OTHER_LDFLAGS = (
564-
"-lc++",
565-
"-all_load",
566-
);
565+
OTHER_LDFLAGS = "-all_load";
567566
SDKROOT = iphoneos;
568567
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
569568
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
@@ -619,10 +618,7 @@
619618
GCC_WARN_UNUSED_VARIABLE = YES;
620619
IPHONEOS_DEPLOYMENT_TARGET = 17.0;
621620
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
622-
OTHER_LDFLAGS = (
623-
"-lc++",
624-
"-all_load",
625-
);
621+
OTHER_LDFLAGS = "-all_load";
626622
SDKROOT = iphoneos;
627623
SWIFT_COMPILATION_MODE = wholemodule;
628624
SWIFT_VERSION = 5.0;
@@ -804,7 +800,7 @@
804800
isa = XCRemoteSwiftPackageReference;
805801
repositoryURL = "https://github.com/pytorch/executorch";
806802
requirement = {
807-
branch = "swiftpm-0.6.0";
803+
branch = "swiftpm-0.7.0";
808804
kind = branch;
809805
};
810806
};
@@ -856,6 +852,16 @@
856852
package = 03672A642DE1226100147123 /* XCRemoteSwiftPackageReference "executorch" */;
857853
productName = kernels_portable;
858854
};
855+
03B184952E1FA1E400246294 /* kernels_optimized */ = {
856+
isa = XCSwiftPackageProductDependency;
857+
package = 03672A642DE1226100147123 /* XCRemoteSwiftPackageReference "executorch" */;
858+
productName = kernels_optimized;
859+
};
860+
03B184972E1FA1F400246294 /* kernels_optimized */ = {
861+
isa = XCSwiftPackageProductDependency;
862+
package = 03672A642DE1226100147123 /* XCRemoteSwiftPackageReference "executorch" */;
863+
productName = kernels_optimized;
864+
};
859865
/* End XCSwiftPackageProductDependency section */
860866
};
861867
rootObject = 032C01672AC228E5002955E1 /* Project object */;

mv3/apple/ExecuTorchDemo/ExecuTorchDemo/Sources/MobileNet/MobileNetClassifier.swift

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -56,14 +56,10 @@ public class MobileNetClassifier: ImageClassification {
5656
}
5757

5858
public func classify(image: UIImage) throws -> [Classification] {
59-
let input = try normalize(rawData(from: transformed(image))).withUnsafeBytes {
60-
Tensor(bytes: $0.baseAddress!, shape: [1, 3, 224, 224], dataType: .float)
61-
}
62-
var output: [Float] = []
63-
try module.forward(input)[0].tensor?.bytes { pointer, count, _ in
64-
output = Array(UnsafeBufferPointer(start: pointer.assumingMemoryBound(to: Float.self), count: count))
65-
}
66-
return softmax(output)
59+
try normalize(transformed(image))
60+
let input = Tensor<Float>(&normalizedBuffer, shape: [1, 3, 224, 224])
61+
let output: Tensor<Float> = try module.forward(input)[0].tensor()!
62+
return softmax(try output.scalars())
6763
.enumerated()
6864
.sorted(by: { $0.element > $1.element })
6965
.compactMap { index, probability in
@@ -98,7 +94,7 @@ public class MobileNetClassifier: ImageClassification {
9894
return resizedAndCroppedImage
9995
}
10096

101-
private func rawData(from image: UIImage) throws -> [UInt8] {
97+
private func normalize(_ image: UIImage) throws {
10298
guard let cgImage = image.cgImage else {
10399
throw MobileNetClassifierError.rawData
104100
}
@@ -116,20 +112,15 @@ public class MobileNetClassifier: ImageClassification {
116112
in: CGRect(
117113
origin: CGPoint.zero,
118114
size: CGSize(width: cgImage.width, height: cgImage.height)))
119-
return rawDataBuffer
120-
}
121-
122-
private func normalize(_ rawData: [UInt8]) -> [Float] {
123115
let mean: [Float] = [0.485, 0.456, 0.406]
124116
let std: [Float] = [0.229, 0.224, 0.225]
125-
let pixelCount = rawData.count / 4
117+
let pixelCount = rawDataBuffer.count / 4
126118

127119
for i in 0..<pixelCount {
128-
normalizedBuffer[i] = (Float(rawData[i * 4 + 0]) / 255 - mean[0]) / std[0]
129-
normalizedBuffer[i + pixelCount] = (Float(rawData[i * 4 + 1]) / 255 - mean[1]) / std[1]
130-
normalizedBuffer[i + pixelCount * 2] = (Float(rawData[i * 4 + 2]) / 255 - mean[2]) / std[2]
120+
normalizedBuffer[i] = (Float(rawDataBuffer[i * 4 + 0]) / 255 - mean[0]) / std[0]
121+
normalizedBuffer[i + pixelCount] = (Float(rawDataBuffer[i * 4 + 1]) / 255 - mean[1]) / std[1]
122+
normalizedBuffer[i + pixelCount * 2] = (Float(rawDataBuffer[i * 4 + 2]) / 255 - mean[2]) / std[2]
131123
}
132-
return normalizedBuffer
133124
}
134125

135126
private func softmax(_ input: [Float]) -> [Float] {

0 commit comments

Comments
 (0)