質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

解決済

1回答

887閲覧

tfjs-modelsのcoco-ssdを使ってモデルを差し替えて動作させたい。

YouichiSugii

総合スコア23

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

0クリップ

投稿2019/01/15 03:46

編集2019/01/15 13:38

前提・実現したいこと

学習させたObjectDetectionモデルをWebブラウザで動作させたくて、モデルをtensorflow_converterでWeb Friendlyフォーマットに変換し、tensorflow.jsで動作させるアプリを作っています。

tensorflow.js側を以下のソースを元に、localhostに保存したモデルを使用するように修正しています。

coco-ssd

このcoco-ssdでモデルを動作させるところで、躓いています。

修正箇所

  • ベースパスの変更

tfjs-models/coco-ssd/src/index.ts

typescript

1//const BASE_PATH = 'https://storage.googleapis.com/tfjs-models/savedmodel/'; 2const BASE_PATH = 'http://localhost:1234/';
  • モデルファイルの配置

以下ディレクトリにモデルファイルを配置します。

directory

1tfjs-models/coco-ssd/demo/dist/ssdlite_mobilenet_v2/ 2tfjs-models/coco-ssd/demo/dist/mobilenet_v1/ 3tfjs-models/coco-ssd/demo/dist/mobilenet_v2/
  • 実行

README.md に記載されている手順で実行します。

発生している問題・エラーメッセージ

ブラウザ読み込み時、コンソール上に以下のようなエラーが出力されます。
SelectBox選択時、RUNボタン押下時も同じエラーが発生します。

io_utils.ts:116 Uncaught (in promise) RangeError: byte length of Float32Array should be a multiple of 4 at new Float32Array (<anonymous>) at o (io_utils.ts:116) at Object.decodeWeights (io_utils.ts:79) at e.<anonymous> (frozen_model.ts:109) at exports_regularizers.ts:47 at Object.next (exports_regularizers.ts:47) at s (exports_regularizers.ts:47)

ブラウザのデベロッパーツールで確認しましたが、モデルファイルはステータス200でlocalhostから取得できていました。

該当のソースコード

ソースを追ったところ、以下の72行目で発生していました。

tfjs-models/coco-ssd/src/index.ts

typescript

1 this.model = await tf.loadFrozenModel(this.modelPath, this.weightPath);

試したこと

作成したモデルが悪いのかと思い、COCO-SSDが元々使っていたモデルをダウンロードして、「tfjs-models/coco-ssd/demo/dist/」の3ディレクトリに配置しても同じエラーが発生します。モデルはステータス200で取得できていました。
以下、取得したモデルファイルのURLです。

url

1https://storage.googleapis.com/tfjs-models/savedmodel/ssdlite_mobilenet_v2/tensorflowjs_model.pb 2https://storage.googleapis.com/tfjs-models/savedmodel/ssdlite_mobilenet_v2/weights_manifest.json 3https://storage.googleapis.com/tfjs-models/savedmodel/ssdlite_mobilenet_v2/group1-shard1of5 4https://storage.googleapis.com/tfjs-models/savedmodel/ssdlite_mobilenet_v2/group1-shard2of5 5https://storage.googleapis.com/tfjs-models/savedmodel/ssdlite_mobilenet_v2/group1-shard3of5 6https://storage.googleapis.com/tfjs-models/savedmodel/ssdlite_mobilenet_v2/group1-shard4of5 7https://storage.googleapis.com/tfjs-models/savedmodel/ssdlite_mobilenet_v2/group1-shard5of5

追加情報

エラー時のデベロッパーツール画面を添付します。

Networkタブを見ると、モデルファイルの取得サイズが極端に小さいことがわかりました。
2枚目の赤枠です。実際のサイズは4MB程度なのですが、ツール上のサイズは1.6kbとなっています。どうしてこうなっているのかわかりません。

エラー時画面

モデルデータ取得画面

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

bash

1yarn watch

で起動するHTTPサーバが悪さしていたようで、別のHTTPサーバを起動したらうまくモデルファイルを読み込みました。お騒がせしました。

投稿2019/01/15 17:13

YouichiSugii

総合スコア23

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問