技術情報 モデル構築方法
前処理
iPadで手描きした数字や記号などの画像は,その場ですぐに8ピクセルx8ピクセルの小さい画像に圧縮され,Firebase Storageに保存されます
モデルの学習を開始すると次のような処理が行われます
Firebase Storageから画像を取得し,alphaチャンネル(透過)の削除とグレースケールへの変換を行います
KerasのImageDataGeneratorを用いてピクセルの値を0~255から0~1にリスケールし,画像とグループの情報から教師データを作成します
学習
説明は準備中
たたみ込み
code: ml.py
model = Sequential([
Conv2D(32, (3, 3), input_shape=(IMG_HEIGHT, IMG_WIDTH, 1), activation='relu'),
Conv2D(32, (3, 3), activation='relu'),
MaxPooling2D(pool_size=(2, 2)),
Flatten(),
Dense(32, activation='relu'),
Dropout(0.25),
Dense(units=len(labels), activation="softmax")
])
code:ml.py
model.compile(optimizer=optimizers.Adam(lr=1e-5),
loss='categorical_crossentropy',
code:ml.py
model.fit(
train_data_gen,
steps_per_epoch=total_train // batch_size,
epochs=epochs,
)
mlmodelへの変換
code: ml.py
mlmodel = ct.convert(model,
class_labels=labels,
predicted_feature_name="title",
image_input_names="image",
image_scale=1/255.0,
use_float_arraytype=True,
classifier_config=ct.ClassifierConfig(labels)
)
分類
code:ImageClassify.swift
let compiledUrl = try MLModel.compileModel(at: path)
let model = try MLModel(contentsOf: compiledUrl)
let vision = try VNCoreMLModel(for: model)
let handler = VNImageRequestHandler(cvPixelBuffer: image.pixelBufferGray(width: 8, height: 8)!)
try handler.perform([VNCoreMLRequest(model: vision) { request, error in
print(results)
}])