-
Notifications
You must be signed in to change notification settings - Fork 254
Open
Description
I've fetched the issue while model output type MLMultiArray Flot32 multidimensional array of floats.
Heres in my convert script for .h5 to ml model using coremltools 4.0
from tensorflow import keras
import coremltools as ct
keras_model = keras.models.load_model('v1.h5')
image_input = ct.ImageType(shape=(1, 416, 416, 3,),
bias=[-1,-1,-1], scale=1/255)
model = ct.convert(
keras_model, inputs=[image_input] )
model.save("v1.mlmodel")
Run the above script with python3 and here is my model generate with output MLMultiArray with datatype Flot32 multidimensional array of floats.
https://prnt.sc/vg1dkl
Here is my working model output MLMultiArray with datatype as 171 element vector of doubles.
https://prnt.sc/vg1g7j
App crash while generating the bbx,bby,bbw,bbh I've created custom function for generating boxes here is the code.
private func process(output out: MLMultiArray, name: String) throws -> [Prediction] {
var predictions = [Prediction]()
let grid = out.shape[out.shape.count-1].intValue
let gridSize = YOLO.inputSize / Float(grid)
let classesCount = labels.count
let pointer = UnsafeMutablePointer<Double>(OpaquePointer(out.dataPointer))
if out.strides.count < 3 {
throw YOLOError.strideOutOfBounds
}
let channelStride = out.strides[out.strides.count-3].intValue
let yStride = out.strides[out.strides.count-2].intValue
let xStride = out.strides[out.strides.count-1].intValue
func offset(ch: Int, x: Int, y: Int) -> Int {
return ch * channelStride + y * yStride + x * xStride
}
for x in 0 ..< grid {
for y in 0 ..< grid {
for box_i in 0 ..< YOLO.boxesPerCell {
let boxOffset = box_i * (classesCount + 5)
let bbx = Float(pointer[offset(ch: boxOffset, x: x, y: y)])
let bby = Float(pointer[offset(ch: boxOffset + 1, x: x, y: y)])
let bbw = Float(pointer[offset(ch: boxOffset + 2, x: x, y: y)])
let bbh = Float(pointer[offset(ch: boxOffset + 3, x: x, y: y)])
let confidence = sigmoid(Float(pointer[offset(ch: boxOffset + 4, x: x, y: y)]))
if confidence < confidenceThreshold {
continue
}
let x_pos = (sigmoid(bbx) + Float(x)) * gridSize
let y_pos = (sigmoid(bby) + Float(y)) * gridSize
let width = exp(bbw) * self.anchors[name]![2 * box_i]
let height = exp(bbh) * self.anchors[name]![2 * box_i + 1]
for c in 0 ..< 52 {
classes[c] = Float(pointer[offset(ch: boxOffset + 5 + c, x: x, y: y)])
}
softmax(&classes)
let (detectedClass, bestClassScore) = argmax(classes)
let confidenceInClass = bestClassScore * confidence
if confidenceInClass < confidenceThreshold {
continue
}
predictions.append(Prediction(classIndex: detectedClass,
score: confidenceInClass,
rect: CGRect(x: CGFloat(x_pos - width / 2),
y: CGFloat(y_pos - height / 2),
width: CGFloat(width),
height: CGFloat(height))))
}
}
}
return predictions
}
If model output MLMultiArray datatype is double 171 above code working well but issue in Float 32.
Any assistance would be appreciated
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels