Моя модель тензорного потока не работает правильно на C ++ iOS

Я пытаюсь сделать мобильное приложение распознавания символов с CNN. Моя модель предсказывает с точностью 99,6% на питоне. Но когда я пытаюсь использовать ту же модель с c ++ в приложении для iOS, она не может предсказать какое-либо значение.

Я получаю значения pixelBuffer из изображений для моей модели cnn:

    pixelBuffer(width: width, height: height,
pixelFormatType: kCVPixelFormatType_32BGRA,
colorSpace: CGColorSpaceCreateDeviceRGB(),
alphaInfo: .noneSkipFirst)

func pixelBuffer(width: Int, height: Int, pixelFormatType: OSType,
colorSpace: CGColorSpace, alphaInfo: CGImageAlphaInfo) -> CVPixelBuffer? {
var maybePixelBuffer: CVPixelBuffer?
let attrs = [kCVPixelBufferCGImageCompatibilityKey: kCFBooleanTrue,
kCVPixelBufferCGBitmapContextCompatibilityKey: kCFBooleanTrue]
let status = CVPixelBufferCreate(kCFAllocatorDefault,
width,
height,
pixelFormatType,
attrs as CFDictionary,
&maybePixelBuffer)

guard status == kCVReturnSuccess, let pixelBuffer = maybePixelBuffer else {
return nil
}

CVPixelBufferLockBaseAddress(pixelBuffer, CVPixelBufferLockFlags(rawValue: 0))
let pixelData = CVPixelBufferGetBaseAddress(pixelBuffer)

guard let context = CGContext(data: pixelData,
width: width,
height: height,
bitsPerComponent: 8,
bytesPerRow: CVPixelBufferGetBytesPerRow(pixelBuffer),
space: colorSpace,
bitmapInfo: alphaInfo.rawValue)
else {
return nil
}

UIGraphicsPushContext(context)
context.translateBy(x: 0, y: CGFloat(height))
context.scaleBy(x: 1, y: -1)
self.draw(in: CGRect(x: 0, y: 0, width: width, height: height))
UIGraphicsPopContext()

CVPixelBufferUnlockBaseAddress(pixelBuffer, CVPixelBufferLockFlags(rawValue: 0))
return pixelBuffer}

и затем я создаю свою модель с этими настройками:

    static NSString* model_file_name = @"inference_1_1_0";
static NSString* model_file_type = @"pb";
static NSString* labels_file_name = @"labels";
static NSString* labels_file_type = @"txt";
std::unique_ptr<tensorflow::Session> tf_session;
std::vector<std::string> labels;

const int wanted_input_width = 38;
const int wanted_input_height = 45;
const int wanted_input_channels = 3;
const float input_mean = 117.0f;
const float input_std = 1.0f;
const std::string input_layer_name = "input_input";
const std::string output_layer_name = "output_node0";

но я понятия не имею, что я должен использовать для input_mean а также input_std , Может быть, они могут быть проблемой.
Я получил метод runCNN по умолчанию от Пример Tensorflow

Я действительно понятия не имею, что мое изображение неверно, или я должен изменить какие-либо настройки по умолчанию с tenorflow

Благодарю.

  • Я написал собственный код: Да
  • Платформа и распространение ОС: Mac OS 10.13.3 High Sierra
  • TensorFlow установлен из (источника или двоичного файла): источник
  • Версия TensorFlow: 1.1.0 для Mac (экспериментальная версия Tensorflow для iOS)
  • Версия Python: 3
  • Базель версия: 0.13.0
  • CUDA / cuDNN: N / A
  • Модель GPU и память: N / A
  • Точная команда для воспроизведения: когда я пытаюсь предсказать с моей моделью, это всегда предсказать неправильно. (Предсказание)

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …