ニューラルネットワークに対するシール。 または、ニューラルネットワークを選択して実行し、Raspberry Zero上のオブジェクトを認識します

すべての良い一日。



小さなラズベリーは素晴らしいものです。 過去6か月間のいくつかのプロジェクトでRaspberry Zero Wを使用しました。 プロトタイピングとさまざまなアイデアのロールアウトのシンプルさに賄われています。 そして、ここでオプションの質問があります:このデバイスは本格的な畳み込みグリッドを引っ張るでしょうか? [ネタバレ-引くが、面白いニュアンスがある]。 誰がトピックを気にしている-猫へようこそ。 注意、多くの猫がいるでしょう!



画像





Raspberryニューラルネットワークはなぜですか?



どういうわけか、私はRaspbery Zero Wに、国内の動物(主に猫)のナイトライフを観察するための簡単なビデオトラップを集めました。 コードはシンプルで、かなりうまく機能しました。 ビデオ写真の検出には、 この「Raspberry Pi Night Version Camera」のようなIR照明付きのカメラが使用されました。



画像



コードの本質は、2つの連続したフレームを取得し、ピクセルごとに比較し、変更されたピクセルの数が特定のしきい値よりも大きい場合、10秒のビデオの記録を開始することです。 この投稿ではコードテキストを提供しません。誰かが興味を持っている場合は、コメントに書いて、次のように書きます。 主な機能は、少なくとも高速のイベントをキャッチするために、2つのフレームを0.2秒で比較することです。 もちろん、これらのフレームをすばやく比較します。



次に、単純なニューラルネットワークをアルゴリズムに固定し、キャプチャされたフレーム内のオブジェクトを特定し、オブジェクトクラスが確実に特定された場合にのみビデオ録画を開始できるようにするというアイデアが浮上しました。 これにより、ビデオトラップから誤検知が潜在的に排除されます。 これらは、動いているオブジェクト(草や枝など)、またはカメラシーンの鋭い照明(ウィンドウのライトがオンになった、ランプが消えたなど)によって発生します。



Raspberryに配置するグリッドは何ですか?



幸いなことに、プリインストールされたPython(私の場合は3.5.3)と広く利用可能なOpenCV(私は3.4.3を使用)の下で、ほぼすべてのグリッドを配置できます。 残念ながら、デバイスのコンピューティング機能が限られているため、オプションのリストはわずかです。 実際、「ライト」オプションからのみ選択できます。



1. SqueezeNet(サンプルコードはこちら )。

2. YOLO Tiny( こちら )。

3. MobileNet-SSD( こちら )。

4. MobileNet_v1_224( このグリッド上のオブジェクト検出器の操作の素晴らしいビデオがあります )。



これらのすべての場合において、それは固体データセットで事前に訓練されたモデルを使用する機会を賄い、それにより、独立したデータセットのすべての悩みと心配から解放され、それらのニューラルネットワークのその後の訓練が行われます。



出願人No.1は、適度な大きさの重み係数で主張されている高い認識精度に触発されました。 さらに、インターネットで短い検索を行った結果Adrian Rosebrockという優れたブログが登場しました。AdrianRosebrockは、コードについて詳しくコメントし、Raspberryでディープラーニングを実装するためのいくつかのオプションを説明しました。



ここからのコード 、SqueezeNetの機能をテストするため使用されました。 作成者は、サイト上のフォームに記入した後、モデルの重みとテキスト表現をメールに送信します。 ところで、OpenCVをインストールしていない場合は、彼のブログでアクションのアルゴリズムを見つけることができます。 さらに、モデルなどの作業時間を短縮するための「オーバークロック」コードの例もあります。 本当に素晴らしいリソースであるエイドリアンに敬意を表します。



さて、コードを実行すると、最初の写真で素晴らしい結果が得られます!



画像



写真の猫は、99%の確率でペルシャ人として定義されています。 実際、彼はペルシャ人ではなく、イギリスの長髪またはハイランダーです。 しかし、1000クラスの範囲を持つモデルの場合は、強気の目を向けることができます。 便宜上、ニューラルネットワークの主な結果を写真に直接配置しました。 これらは、最も可能性の高い5つのクラスであり、最初のクラスが最も可能性が高く、2番目のクラスが次に重要です。



ちなみに、モデルは6.5秒間、Zeroのオブジェクトクラスをカウントします。 エイドリアンのデータを信じている場合、彼の投稿(美容師、コブラ、クラゲの施設の写真)の写真のラズベリーPi B +の計算には約0.92秒かかります。 結局のところ、Raspberryのフルバージョンのプロセッサには4つのコアがあると喜んで信じています。 Zeroには1つしかありません(((



Zeroでオブジェクトのクラスをリアルタイムで定義することを忘れなければならないようです。 ちなみに、モデルを「フル」Piで動作させるのは2度目でも究極の夢ではないことを認めなければなりません。



しかし、モデルのテストを続けましょう。



画像



猫はその位置を変え、以前の「ペルシャ人」の7%を失いました)。 しかし、これは冗談です、もちろん、一般的に、モデルの仕事はとても良いです。 ここでここで終了することはできましたが、モデルのタスクを少し複雑にしたかったのです。 私たちは...猫で練習を続けます。 しかし、猫が古典的なポーズで座っているのではなく、たとえば眠っているフレームを取得しましょう。 行きましょう。



画像



この図では、猫はアンゴラと定義されていますが、これは正確ではありません。 どうやら彼女は、流し台を離れるという強迫観念に悩まされているという事実から。 さて、ニューラルネットワークは間違っていました。



画像



ふわふわのサッカーボールが私の家に住んでいることがわかります)はい、人々は一見するとまったく見えないことが起こります。 猫とニューラルネットワークの戦いは深刻な転換を迎えます。



画像



わあ 今、彼女はシベリアンハスキーです。 猫がまだ数えていることを教えてくれます)



画像



これら2つのうちの1つは明らかにノックダウンされており、これは明らかに猫ではありません。 現在では、ニューラルネットワークによってスピンドルとして定義されています(8.5%だけですが)が、ビーグル、シャチ、ロッキーパイソン、スカンクなどのオプションがまだあります。 猫ではなく、女性は謎です!



画像



おい! これはまだシャチです! はい、はい、クジラ目の海洋哺乳類です。 何らかの理由で、私は遠い子供時代からの行を思い出しました:

「この物語には秩序がありません。

間違い、タイプミスです! 誰か

すべてのルールに対して

おとぎ話の中で、彼は手紙を整理し、

フェリー

「CAT」の「KIT」、

「KIT」の「CAT」、それどころか!」

ゴングが鳴り、審判が戦いを止める)



画像



2回目のラウンドでは、知らないうちにメガネをかけている猫は、34%の確率でボストンブルドッグに合格しました。 またはフランス人のために。 ニューラルネットワークは、最初のラウンドでの敗北から完全に回復していないようです)



画像



さて、ついに! 猫はシャムと定義され、最大66%の確率です! ブラボー、SqueezeNet! 真剣に、元のデータセットでは、嘘をついていないが座っている猫の写真が普及しているようです。 横たわっているのは主に犬でした)



画像



猫が箱の形をとる能力は、ニューラルネットワークはもちろんのこと、人間にとっても混乱を招きます。 ボックスに浸漬すると、認識精度が最大40%低下しました。



画像



だから、そう...そして、これは、一般的に禁止された受信であるようです。 猫の横にあるコンピューターのマウスは、ニューラルネットワークを完全に混乱させます。 今、私たちの猫はネズミです! )



そのため、ニューラルネットワーク全体に猫の11枚の写真が提示され、そのうち5枚のみが正しく識別され、さらに3ケースのみで50%以上の確率で表示されました。 SqueezeNetの作成者の作業を減らすことは決してありません。 これは、非常に幅広いクラスのオブジェクトと比較的低いリソース要件を備えた強固なネットワークです。



もちろん、この記事は本質的にコミックですが、得られたデータからかなり実用的な結論を引き出すことができます。 事前に訓練されたニューラルネットワークを慎重に使用し、ニューラルネットワークを使用する予定のタスクの実際の画像でそれらを確認する必要があります。



Raspberryの最適なニューラルネットワークの選択については、これまでのところ疑問が残っています。 このトピックに聴衆の関心がある場合、私は実験を続け、さらなる研究の結果を共有します。 最初のステップの結果が非常に面白くて、本当に共有したかっただけです。



最後まで読んでくれてありがとう。 頑張って、良い週を過ごしてください)



UPD:Raspberry Pi Zero Wでニューラルネットワークを実行する作業コードについてはこの投稿の2番目の部分を参照してください。



All Articles