Skip to content

Commit 0b085d6

Browse files
author
liqing
committed
beta 0.1.1.5
- cpu & gpu - add ceil mode in pool - fix softmax with neg axis - cpu - add unsqueeze op - optimize lstm - gpu - add 5x5 winograd in metal - add batch support for winograd in opencl - onnx - add concat / gather / shape / squeeze / unsqueeze - fix data type support in constant
1 parent f7fbf2a commit 0b085d6

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+900
-496
lines changed

demo/exec/pictureRecognition.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,6 @@ int main(int argc, const char* argv[]) {
8787
std::shared_ptr<ImageProcess> pretreat(ImageProcess::create(config));
8888
pretreat->setMatrix(trans);
8989
pretreat->convert((uint8_t*)FreeImage_GetScanLine(newBitmap, 0), width, height, 0, input);
90-
FreeImage_Save(FIF_PNG, newBitmap, argv[3], PNG_DEFAULT);
9190
FreeImage_Unload(newBitmap);
9291
}
9392
net->runSession(session);

doc/AddOp_EN.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
Before adding Op, please refer to [Op Manual](OpList.md) to avoid unnecessary duplication.
66

77
In MNN, adding Op consists of the following steps:
8-
1. [Add model description of Op](#Add_model_description_of_Op)
9-
2. [Add model conversion of Op](#Add_model_conversion_of_Op)
10-
3. [Calculate output tensor size of Op](#Calculate_output_tensor_size_of_Op)
8+
1. [Add model description of Op](#Add-model-description-of-Op)
9+
2. [Add model conversion of Op](#Add-model-conversion-of-Op)
10+
3. [Calculate output tensor size of Op](#Calculate-output-tensor-size-of-Op)
1111
4. Add Op implementation (execution) corresponding to Backend([CPU](#CPU)|[Metal](#Metal)|[Vulkan](#Vulkan)|[OpenCL](#OpenCL)|[OpenGL](#OpenGL))
1212

1313
## Add model description of Op

project/ios/MNN.xcodeproj/project.pbxproj

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -652,7 +652,6 @@
652652
EBB38F0E21E748B9005F76D7 /* ShapeQuantizedAvgPool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EBB38ED521E748B9005F76D7 /* ShapeQuantizedAvgPool.cpp */; };
653653
EBB38F0F21E748B9005F76D7 /* ShapeArgMax.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EBB38ED621E748B9005F76D7 /* ShapeArgMax.cpp */; };
654654
EBB38F1121E748B9005F76D7 /* ShapeSliceTf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EBB38ED821E748B9005F76D7 /* ShapeSliceTf.cpp */; };
655-
EBB38F1221E748B9005F76D7 /* ShapeQuantizedAdd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EBB38ED921E748B9005F76D7 /* ShapeQuantizedAdd.cpp */; };
656655
EBB38F1321E748B9005F76D7 /* ShapeResize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EBB38EDA21E748B9005F76D7 /* ShapeResize.cpp */; };
657656
EBB38F1421E748B9005F76D7 /* ShapeTranspose.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EBB38EDB21E748B9005F76D7 /* ShapeTranspose.cpp */; };
658657
EBB38F1521E748B9005F76D7 /* ShapeWhere.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EBB38EDC21E748B9005F76D7 /* ShapeWhere.cpp */; };
@@ -672,7 +671,6 @@
672671
EBB38F2321E748B9005F76D7 /* ShapePermute.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EBB38EEA21E748B9005F76D7 /* ShapePermute.cpp */; };
673672
EBB38F2421E748B9005F76D7 /* ShapeExpandDims.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EBB38EEB21E748B9005F76D7 /* ShapeExpandDims.cpp */; };
674673
EBB38F2521E748B9005F76D7 /* ShapeROIPooling.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EBB38EEC21E748B9005F76D7 /* ShapeROIPooling.cpp */; };
675-
EBB38F2921E748B9005F76D7 /* ShapeQuantizedConcat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EBB38EF021E748B9005F76D7 /* ShapeQuantizedConcat.cpp */; };
676674
EBB38F2A21E748B9005F76D7 /* ShapeCropAndResize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EBB38EF121E748B9005F76D7 /* ShapeCropAndResize.cpp */; };
677675
EBB38F2B21E748B9005F76D7 /* ShapeQuantizedMaxPool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EBB38EF221E748B9005F76D7 /* ShapeQuantizedMaxPool.cpp */; };
678676
EBB38F2C21E748B9005F76D7 /* ShapeRange.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EBB38EF321E748B9005F76D7 /* ShapeRange.cpp */; };
@@ -1358,7 +1356,6 @@
13581356
EBB38ED521E748B9005F76D7 /* ShapeQuantizedAvgPool.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShapeQuantizedAvgPool.cpp; sourceTree = "<group>"; };
13591357
EBB38ED621E748B9005F76D7 /* ShapeArgMax.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShapeArgMax.cpp; sourceTree = "<group>"; };
13601358
EBB38ED821E748B9005F76D7 /* ShapeSliceTf.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShapeSliceTf.cpp; sourceTree = "<group>"; };
1361-
EBB38ED921E748B9005F76D7 /* ShapeQuantizedAdd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShapeQuantizedAdd.cpp; sourceTree = "<group>"; };
13621359
EBB38EDA21E748B9005F76D7 /* ShapeResize.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShapeResize.cpp; sourceTree = "<group>"; };
13631360
EBB38EDB21E748B9005F76D7 /* ShapeTranspose.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShapeTranspose.cpp; sourceTree = "<group>"; };
13641361
EBB38EDC21E748B9005F76D7 /* ShapeWhere.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShapeWhere.cpp; sourceTree = "<group>"; };
@@ -1378,7 +1375,6 @@
13781375
EBB38EEA21E748B9005F76D7 /* ShapePermute.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShapePermute.cpp; sourceTree = "<group>"; };
13791376
EBB38EEB21E748B9005F76D7 /* ShapeExpandDims.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShapeExpandDims.cpp; sourceTree = "<group>"; };
13801377
EBB38EEC21E748B9005F76D7 /* ShapeROIPooling.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShapeROIPooling.cpp; sourceTree = "<group>"; };
1381-
EBB38EF021E748B9005F76D7 /* ShapeQuantizedConcat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShapeQuantizedConcat.cpp; sourceTree = "<group>"; };
13821378
EBB38EF121E748B9005F76D7 /* ShapeCropAndResize.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShapeCropAndResize.cpp; sourceTree = "<group>"; };
13831379
EBB38EF221E748B9005F76D7 /* ShapeQuantizedMaxPool.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShapeQuantizedMaxPool.cpp; sourceTree = "<group>"; };
13841380
EBB38EF321E748B9005F76D7 /* ShapeRange.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShapeRange.cpp; sourceTree = "<group>"; };
@@ -2279,9 +2275,7 @@
22792275
EBB38ED221E748B9005F76D7 /* ShapePool.cpp */,
22802276
EBB38EC821E748B9005F76D7 /* ShapePriorbox.cpp */,
22812277
EBB38EF721E748B9005F76D7 /* ShapeProposal.cpp */,
2282-
EBB38ED921E748B9005F76D7 /* ShapeQuantizedAdd.cpp */,
22832278
EBB38ED521E748B9005F76D7 /* ShapeQuantizedAvgPool.cpp */,
2284-
EBB38EF021E748B9005F76D7 /* ShapeQuantizedConcat.cpp */,
22852279
EBB38EF221E748B9005F76D7 /* ShapeQuantizedMaxPool.cpp */,
22862280
EBB38ED121E748B9005F76D7 /* ShapeQuantizedReshape.cpp */,
22872281
EBB38EF321E748B9005F76D7 /* ShapeRange.cpp */,
@@ -2709,7 +2703,6 @@
27092703
488876B7215B639F0079B12E /* MNNGemmInt8toInt32WithOffset.S in Sources */,
27102704
4888759B215B639F0079B12E /* MetalSpatialProduct.mm in Sources */,
27112705
92EEFEFF217F0CBC00F89377 /* CPUCrop.cpp in Sources */,
2712-
EBB38F1221E748B9005F76D7 /* ShapeQuantizedAdd.cpp in Sources */,
27132706
48887661215B639F0079B12E /* CPUDeconvolutionDepthwise.cpp in Sources */,
27142707
92682C5321819BF100B52B9D /* MetalSeLU.mm in Sources */,
27152708
488876C9215B639F0079B12E /* MNNGemmInt16to32_4x4_Unit.S in Sources */,
@@ -3100,7 +3093,6 @@
31003093
48A8A63721D8A43D00C2B9A7 /* BufferAllocator.cpp in Sources */,
31013094
92D765AF2228188700178BE5 /* Interpreter.cpp in Sources */,
31023095
4888765C215B639F0079B12E /* CPUNormalize.cpp in Sources */,
3103-
EBB38F2921E748B9005F76D7 /* ShapeQuantizedConcat.cpp in Sources */,
31043096
48A8A61521D101A700C2B9A7 /* ImageFloatBlitter.cpp in Sources */,
31053097
488875DF215B639F0079B12E /* MetalLSTM.mm in Sources */,
31063098
);

schema/default/CaffeOp.fbs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ table Pool {
7878
type:PoolType;
7979
padType:PoolPadType;
8080
dataType:DataType=DT_FLOAT;
81+
ceilModel:bool=true;
8182
}
8283

8384
table Relu {

schema/default/MNN.fbs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ enum OpType : int {
122122
Moments,
123123
RNNSequenceGRU,
124124
BatchMatMul,
125+
Unsqueeze,
125126
MAX_LAYER_TYPES,
126127

127128
MaxLayerCount = 128, // this count must bigger than the layer id of last layer

source/backend/cpu/CPUGather.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ CPUGather::CPUGather(Backend *b, const MNN::Op *op) : MNN::Execution(b), mOp(op)
2020
ErrorCode CPUGather::onResize(const std::vector<Tensor *> &inputs, const std::vector<Tensor *> &outputs) {
2121
MNN_ASSERT(1 == outputs.size());
2222
auto indices = inputs[1];
23-
MNN_ASSERT(indices->buffer().type.bits == 32 && mOp->main_as_Gather()->Tindices() == DataType_DT_INT32);
23+
if(indices->buffer().type.bits != 32) {
24+
return NOT_SUPPORT;
25+
}
2426
return NO_ERROR;
2527
}
2628

@@ -31,7 +33,7 @@ ErrorCode CPUGather::onExecute(const std::vector<Tensor *> &inputs, const std::v
3133

3234
MNN_ASSERT(embedding->buffer().type.bits == 32);
3335

34-
const size_t indicesCount = indices->size() / (indices->buffer().type.bits / 8);
36+
const size_t indicesCount = indices->elementSize();
3537
const auto limit = embedding->length(0);
3638

3739
auto outputData = output->host<float>();

0 commit comments

Comments
 (0)