DeepTesla:人とオートパイロットの運転からエンドツーエンドの学習エンドツーエンドステアリングは、画像を与えられたステアリングホイール値を生成する運転関連AIタスクを記述する。この目的のために、私たちはDeepTeslaを開発しました。DepthTeslaは、エンドツーエンドの運転とブラウザ内のニューラルネットワークのトレーニングの両方を行うシンプルなニューラルネットワークのデモンストレーションです。DeepTesla:人とオートパイロットの運転からエンドツーエンドの学習エンドツーエンドステアリングは、画像を与えられたステアリングホイール値を生成する運転関連AIタスクを記述する。この目的のために、私たちはDeepTeslaを開発しました。DepthTeslaは、エンドツーエンドの運転とブラウザ内のニューラルネットワークのトレーニングの両方を行うシンプルなニューラルネットワークのデモンストレーションです。このデモンストレーションは、学生にエンドツーエンドステアリングで畳み込みニューラルネットワークを使用する簡単なデモンストレーションを行うことになっています。読者は、ニューラルネットワークの基本的な理解が求められます。ユーザーがページをロードすると、エンドツーエンドのステアリングモデルがトレーニングを開始します。イメージ/ステアリングホイール値のパッケージのダウンロード、前方および後方のパスの実行、ネットワークの個々のレイヤーの視覚化です。以下では、モデルのトレーニング中にデモがどのように見えるかの例を見ることができます。⇩ページの一番上には、ネットワークに関するいくつかの指標が含まれています。Pass(ms):1つの例でネットワークが順方向パスまたは逆方向パスを実行するのに要した時間。この測定基準は、トレーニングと評価の両方にとって重要です。status:ネットワークが現在実行している操作で、トレーニングまたはデータの取得です。メトリックボックスには損失グラフもあります。これは250のトレーニング例ごとに更新されるライブグラフです。Y軸は、現在ロードされているネットワークで見られる例の数を示し、X軸は、最後の250例にわたる損失関数値である。理想的には、時間の経過とともにこの減少が見られるはずです。メトリックボックスのすぐ下に、エディタが表示されます。これは、ユーザーがネットワークとやりとりする方法です。レイヤーの組織/タイプとパラメータ、およびトレーニングアルゴリズムのパラメータを提供することによって実現されます。"trainer"という2つのインデックスを含む1つの有効なJSONオブジェクトでなければなりません。パラメータを編集した後、ネットワークをリロードしてトレーニングを開始することをお勧めします。Training]ボタンをクリックします。JSONがトレーニングWebワーカーに送信され、解析され、ConvNetJSモデルとして読み込まれます。エディタの下には、視覚化が行われる別の領域があります。最初にページを開くと、レイヤーごとの視覚化が表示されます。ネットワーク内の各レイヤーの画像が表示され、任意の訓練例のアクティブ化が示されます。ネットワークのトレーニング中に、新しい機能を学習しているネットワークを表すアクティベーションが変更されることに気づくでしょう。最初のレイヤーは常に入力レイヤーになります(最後のレイヤーは常に単一のニューロンになります)。各入力例について、その例の実際のステアリング角度と、現在予測されているステアリング角度を示します。レイヤーのタイプに応じて、さまざまなタイプのビジュアライゼーションが表示されます。畳み込みレイヤーの場合、各ニューロンに実際のアクティベーションを含むキャンバスオブジェクトを作成します。これらは入力画像と非常によく似ています。3×3より大きい場合、活性化を生成したフィルタのみを視覚化します。視覚化のもう1つのタイプがあります。そこにアクセスするには、ネットワークエディタの右下隅にあるボタンを見つけます。ビデオの視覚化ボタンをクリックすると、テクスチャのビジュアライゼーションがTeslaのドライブのビデオクリップに置き換えられます。現在ロードされているネットワークは、ビデオの各フレームを評価し、ステアリングホイールの角度を予測します。ネットワークはビデオの再生中にトレーニングを継続します(ネットワークが動作している場合)、より多くのトレーニングの例が表示されるほど、ネットワークがより正確になることがわかります。動画が終了すると、もう一度やり直します。ビデオの下部には、モデルの現在のパフォーマンスに関する情報が表示されます。左端にはステアリングホイールの実際の値が青で表示され、予測値は白で表示され、赤ではそれらの差が表示されます。右側では、現在のフレームの実際の値と予測値を表す2つのステアリングホイールを描きます。ステアリングホイールの右側には、現在のフレーム番号、往路の通過時間(ミリ秒)、平均誤差(実際の値と予測値の差を評価したフレームの総数で割った値)が表示されます。動画プレーヤーの下半分に緑色のボックスが表示されます。このボックスには、評価のためにネットワークへの入力として使用されている画像の部分が表示されます。このボックスの座標とサイズは変更できません。ビデオ情報ボックスの右端には、急激に変化する黒色/白色のバーがあります。それらはビデオ自体にエンコードされます。ここで、モデルを改善する方法を見てみましょう。したがって、私たちのネットワークは200の幅、66の高さ、3つのチャンネル(赤緑青)を表すサイズ(200,66,3)の入力レイヤーを持っていることがわかります。それに続いて、3つの畳み込み層、プール層、および単一の出力ニューロンがある。畳み込みレイヤのストライドパラメータを減らしたい場合があります。現在は2つで、すべてのフィルタが2ピクセルステップを取ることを意味します。そのパラメータを1に減らすと、フィルタが画像のより多くを渡します。これはまた、畳み込みレイヤーが1パスごとに時間がかかることを意味します。各レイヤの後に追加のプールを追加することでこれを相殺できます。供されていることがわかります。ConvNetJSは、Adadelta、Adagrad、および標準SGDのトレーニングアルゴリズムを提供しています。これらのアルゴリズムのそれぞれは、特定の特定のパラメータをJSONのキーと値のペアとして取ります。利用可能なアルゴリズムとパラメータの詳細は、ConvNetJSのドキュメント(http://cs.stanford.edu/people/karpathy/convnetjs/docs.html)を参照してください。Training"ボタンを押してトレーニングを開始することができます。私たちのネットワークが5分間トレーニングを受け、テストビデオでそのパフォーマンスを評価した後、私たちはネットワークを提出することに決めました。Network]ボタンを押して、割り当てを完了します。ConvNetJSには、ネットワーク/トレーナーオブジェクトとVolumeオブジェクトの2つの重要な構成要素があります。ConvNetJSの各ネットワークは、レイヤのリストを含むJSONオブジェクトによって指定されます。トレーニングに使用する画像を構築するために、OpenCVを使用します。ビデオサンプルの各フレームを繰り返し、フレームを抽出してトリミングし、同期されたホイールの値とペアにして、リストにプッシュします。すべての例でこれを実行した後、例をシャッフルして、250行のイメージ(各行に1つのイメージをフラットにしたもの)のバッチを含むイメージを作成します。ホイールの値については、同期された値を追跡し、フレームIDとグラウンド・トゥルースを含むJSONオブジェクトを作成します。イメージをブラウザにロードする必要があります。画像の読み込みが終了すると、その画像のRGB値を抽出する方法であるキャンバスに画像をblitします。ページの応答性を保つため、複数のスレッドを使用します(Webワーカー経由)。主スレッドでは、ユーザー入力に視覚化と応答を行い、別のスレッドではトレーニングを実行します。したがって、私たちのdimg.onloadコールバックの最後の呼び出しはpostMessageです。これは画像バッチとホイールの値をトレーニングスレッドに送ります。イメージデータがあるので、ConvNetJSのデータ表現の基本単位であるConvNetJSボリュームに変換する必要があります。以下のコードスニペットでは、ConvNetJSのボリューム(base_input_x、base_input_y、3)を作成し、イメージデータをボリュームにコピーします。キャンバスからの画像データは、ピクセルごとに赤、緑、青、アルファの4つの値を持つ1次元配列として格納されます。ボリュームには3つのチャンネルしか含まれていないため、各RGBA値をRGBに変換し、ボリュームに適切な値を設定する必要があります。動画の評価はより複雑で、HTML5動画をサポートする最新のモバイル以外のブラウザが必要です。非表示のビデオ要素を読み込みます。src="example_video.mkv"></video>次に、ブラウザの各ペイントで別の関数を実行するJavascript関数を作成します。video_to_canvas関数では、現在表示されているビデオフレームをキャンバス要素にコピーします。最後に、トレーニング画像で使用したのと同じimage_data_to_volume関数を呼び出します。*`バーコードをデコードするために、個々の「バー」を繰り返して、ピクセル値の平均を計算します。バーがしきい値を下回った場合、それを「0」としてデコードし、それ以外の場合は「1」としてデコードします。以下「karpathy/convnetjs」によるConvNetJSConvNetJSは、素晴らしいブラウザベースのデモとともに、ニューラルネットワークのJavascript実装です。Learningに基づく実験的強化学習モジュール詳細は、convnetjs.comのメインページを参照してください。注:時間がないので、ConvNetJSを積極的に管理していません。repoが動作しないかもしれません。VIEWSCarlのフォトアルバムファインダー越しの絶景を集めて。