機械学習メモ
16752 ワード
基礎
データフォーマット
- NHWC
- TensorFlow
- 普通の画像 (OpenCVのmatとか)
- NCHW
- TensorRT
- OpenCV(
cv::dnn::blobFromImage
で変換)
- ncnn(
ncnn::Mat::from_pixels
で変換)
width=3,height=2,3色の場合
# NHWC
R00 G00 B00 R01 G01 B01 R02 G02 B02
R10 G10 B10 R11 G11 B11 R12 G12 B12
# NCHW
R00 R01 R02
R10 R11 R12
G00 G01 G02
G10 G11 G12
B00 B01 B02
B10 B11 B12
Google Colaboratory
アイドルタイムアウト回避
ブラウザ上で回避
- TensorFlow
- 普通の画像 (OpenCVのmatとか)
- TensorRT
- OpenCV(
cv::dnn::blobFromImage
で変換) - ncnn(
ncnn::Mat::from_pixels
で変換)
width=3,height=2,3色の場合
# NHWC
R00 G00 B00 R01 G01 B01 R02 G02 B02
R10 G10 B10 R11 G11 B11 R12 G12 B12
# NCHW
R00 R01 R02
R10 R11 R12
G00 G01 G02
G10 G11 G12
B00 B01 B02
B10 B11 B12
アイドルタイムアウト回避
ブラウザ上で回避
ブラウザのデバッグツール->Consoleで以下を実行
function ConnectButton(){
console.log("Connect");
document.querySelector("#top-toolbar > colab-connect-button").shadowRoot.querySelector("#connect").click();
// document.querySelector("#connect").click()
// document.querySelector("colab-toolbar-button#connect").click()
// document.querySelector("colab-connect-button").click()
}
setInterval(ConnectButton,60*1000);
ラズパイなどから定期的にブラウザで開くことで回避
while true
do
timeout 60 firefox https://colab.research.google.com/drive/1sdxxxxxx
sleep 10m
done
Googleドライブマウント、ファイルのアップロードとダウンロード
from google.colab import drive
drive.mount("/content/drive")
from google.colab import files
files.download( "./test.h5")
uploaded = files.upload()
サンプル
TensorFlow推論、TensorFlow Lite変換と推論、TensorFlow Lite 量子化変換と推論
Keras(h5) -> tflite (tf2.5)
import tensorflow as tf
loaded_model = tf.keras.models.load_model("model.h5", custom_objects={'tf': tf})
converter = tf.lite.TFLiteConverter.from_keras_model(loaded_model)
tflite_model = converter.convert()
open("model.tflite", "wb").write(tflite_model)
custom_objects={'tf': tf}
がないとname 'tf' is not defined
というエラー発生
ONNX (onnx-runtimeとOpenCV(cv2.dnn)) 推論
モデル変換: TensorFlow(NHWC) to ONNX(NCHW)
モデル変換: ONNX(NCHW) to Keras(NHWC) to TensorFlow(NHWC)
モデル変換: ONNX(NCHW) to OpenVINO(NCHW) to TensorFlow(NHWC) using openvino2tensorflow ( https://github.com/PINTO0309/openvino2tensorflow )
※↑はGoogle Colabから使用していますが、Dockerを使用することが推奨されています。
モデル変換 TensorFlow Hubのモデル -> tflite
import tensorflow as tf
import tensorflow_hub as hub
model = hub.load("https://tfhub.dev/tensorflow/efficientdet/d0/1")
concrete_func = model.signatures[tf.saved_model.DEFAULT_SERVING_SIGNATURE_DEF_KEY]
concrete_func.inputs[0].set_shape([1, 320, 320, 3])
concrete_func.outputs[0]
converter = tf.lite.TFLiteConverter.from_concrete_functions([concrete_func])
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_model = converter.convert()
open("efficientdet_d0_320x320.tflite", "wb").write(tflite_model)
interpreter = tf.lite.Interpreter("efficientdet_d0_320x320.tflite")
interpreter.allocate_tensors()
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
↑だと一部outputのshapeが[1, 1, ...] になってしまう
PyTorch(pkl) -> onnx
Object Detection モデル再学習の環境 (as of 2020/03/27)
-
AttributeError: module 'tensorflow' has no attribute 'contrib'
対策- Tensorflow 1.15を使用する
- Pythonパス設定 (
os.environ["PYTHONPATH"] = "/content/models/research:/content/models/research/slim:" + os.environ["PYTHONPATH"]
)
%tensorflow_version 1.x
import tensorflow as tf
print(tf.__version__)
!pip install pycocotools
!git clone --depth 1 https://github.com/tensorflow/models
%cd models/research/
!protoc object_detection/protos/*.proto --python_out=.
!pip install .
%cd /content
# Modify python path and check script
# %set_env PYTHONPATH=$PYTHONPATH:models/research:models/research/slim
import os
os.environ["PYTHONPATH"] = "/content/models/research:/content/models/research/slim:" + os.environ["PYTHONPATH"]
!echo $PYTHONPATH
!python models/research/object_detection/builders/model_builder_test.py
その他
int8量子化モデルへの入力
推奨は↓らしいけど、値範囲が-128~127を超える可能性があるので単に-128するだけでいいかも。
for(uint i=0; i< input->bytes;i++){
input->data.int8[i] = input->data.uint8[i] + input->params.zero_point - 128;
}
法律
Author And Source
この問題について(機械学習メモ), 我々は、より多くの情報をここで見つけました https://qiita.com/iwatake2222/items/083453ded6eaddaa6482著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .