コンピューター ビジョンが世界中の起業家の関心を集めていますが、それには十分な理由があります。最新の AI テクノロジーの機能により、これまで不可能だったアイデアが実際の製品に生まれ変わります。
写真やビデオ内のオブジェクトの検出と分類は、顔認識を内蔵したセキュリティ カメラや X 線スキャンに基づく病気の検出から、シンプルなモバイル アプリに至るまで、さまざまな分野や数百のシステムで応用されています。
前置きはこれくらいにして、この記事では、コンピューター ビジョン製品、特に複雑な製品がどのように開発されるかの「舞台裏」を共有したいと思いました。
私は Birdsy に取り組む機会がありました。これは、自分が見ていない間に誰が裏庭を訪れるかを知りたい人のための鳥認識アプリです。
Birdsy は、リアルタイムの物体検出と分類を備えた複雑な AI 搭載アプリであり、脆弱なハードウェア上で実行でき、鳥の種類と性別を高精度で検出できる必要があります。
これらすべてを考慮すると、最初のアイデアからアプリ ストアでアプリを公開するまでの道のりは複雑であり、同時に魅力的でした。
ビジネスと開発の両方の観点から、私たちは多くのハードルに直面してきましたが、同じプロジェクトに直面しているかもしれない起業家や AI 開発者を助けるために、それを 1 か所で共有することにしました。
鳥は、天敵、この場合はバードウォッチャーを避けるために、環境に完全に溶け込むために何百万年も進化してきました。そのため、野生動物を鑑賞することが難しくなりました。
特定の鳥種を正面から観察するのは…くちばしに問題がある場合がありますが、家の快適な環境からビデオカメラを通して鳥を観察することは、羽の生えた仲間たちを楽しむ素敵な方法です。特に、AI が何時間ものビデオ映像を調べて送信する必要をなくすのであれば、鳥がカメラの視野に入ると警告し、鳥の種類を自動的に検出します。
Birdsy には 2 つの部分があります。
サービスをより親しみやすく、使いやすくするために、どのカメラでも野鳥観察に使用できます。ここで最初の問題に遭遇しました。それは、最も手頃な価格で最も普及しているため、低品質のカメラです。
「カメラ制限なし」はユーザーにとっては素晴らしいことですが、物体検出モデルはカメラ チップセットを使用して実行されるため、私たちにとっては課題でした。
誰かが良い条件を得る一方で、他の人は窮地に追い込まれます。この場合の「他者」とは履歴書開発者です。安価なカメラを使用するということは、デフォルトのニューラル ネットワーク アーキテクチャを使用できなくなる安価なチップセットを使用することを意味します。
デフォルトの YOLO v4 の約 120 レイヤーの使用を許可するコンピューター ビジョン ビデオ カメラの最上位のゴールド スタンダード (NVIDIA Jetson Nano) と比較して、私たちが使用しなければならなかったカメラは 22 レイヤーしか使用できませんでした。
完全な YOLO v4 ニューラル ネットワークでは優れた認識結果が得られますが、必要最低限のバージョンではパフォーマンスが低下します。私たちは両方をテストしましたが、安価なチップセットを使用して実行するとモデルの深さがどれほど低いかに不快な驚きを感じました。
私たちは、デフォルトの YOLO v4 モデルをトレーニングし、顧客のデータセットでテストすることから始めました。達成した結果は満足のいくもので、95% mAp でした。これは、コンピュータ ビジョンの世界では、モードを運用環境に導入するには十分以上です。
カメラのパラメーターに合わせてモデルを再トレーニングした後、検出品質が大幅に低下しました。しかし、機械が失敗しても人間は進歩します。
テストデータに基づいてニューラルネットワークをテストし、偽陽性と偽陰性を視覚的に評価しました。これにより、ネットワークに知識が不足している場所と、最もミスが多かった場所が浮き彫りになりました。
このネットワークは、人々、特に人の手を動物として検出することに熱心でした (私たちはそれを非難しません。結局のところ、人間は動物なのです)。生物学的な観点からはこれは正しいのですが、エンドユーザーは隣人よりも鳥を見ることに興味があるため、人間を無視して鳥や哺乳類に焦点を当てるようにネットワークに教える必要がありました。
これを行うために、さまざまな角度からの人物や人の手の写真など、ネガティブな例を追加しました。
カメラには 2 つのモードがあります。フルカラー画像を生成する通常の昼間モードと、白黒画像を生成する夜間赤外線モードです。カメラが赤外線に切り替わると、モデルは多くの誤検知を生成しました。
ユーザーは、通知で起こされても嬉しくないし、フクロウやキツネを見て興奮するのに、結局はカメラのレンズに体をぶつけている蛾の記録を見てしまうでしょう。
睡眠の中断を最小限に抑えるために、夜間の設定で誤検知の事例を収集し、手動でマークを付けました。
ソーシャル メディアが、人々が自分の最高のバージョンを提示する「ハイライト リール」と呼ばれていることを聞いたことがありますか?同じことが野生動物にも当てはまるとは誰にもわかりませんでした。
Google 画像や YouTube 動画などのオープンソースから入手できる鳥の写真は、通常、高品質で非常に鮮明で、鳥との間に何もなく、カメラを見つめているか、少なくとも正面から位置している標本を最高の状態で描写しています。そしてカメラが視界を遮る。
現実は必ずしも美しいとは限りません。カメラは、人間の目でも何が起こっているのかを理解するのが難しい低品質の画像を生成します。雨、雪、塵などの悪天候は視界を妨げる可能性があります。鳥は、誰かが鳥を捕らえようとしているときを感知し、鳥を捕まえようとしていると確信しています。可能な限り最もばかげた方法で自分自身を配置します。
クライアントが提供したデータセット (インターネット上で見つかったシャート画像で構成) は、このプロジェクトではあまり役に立ちませんでした。
鳥がソーシャルメディア上でどのように表現されているかではなく、鳥が実際にどのように見えるかをモデルに示すために、クライアントのカメラを使用して実際の状況で鳥の画像セットを収集する必要がありました。
したがって、上記のすべてを行った後、次のようになります。
物体検出では 97.5% の mAP を達成することができました。本番環境に入る CV モデルの不文律は 94% 以上の mAP を持つことであるため、これはコンピューター ビジョン モデルにとって非常に高い結果です。
私たちが現在達成している結果は、最終製品に使用するには十分以上のものですが、まだ改善の余地があります。
各グループに十分な画像が収集されると、mAP が増加して 98.5% に達すると予想されます。
裏庭の訪問者を知るための次のステップは、鳥の画像をオブジェクト分類モデルに渡すことです。その目的は、鳥の種類と性別を認識することです。
一部の鳥種は特定の大陸にのみ生息しているため、北米に生息する鳥用とヨーロッパに生息する鳥用の 2 つのモデルを作成することにしました。
当初、物体分類の問題は「正面からの」アプローチを使用して解決されました。ネットワークには、オスとメスの両方のさまざまな種の写真が表示され、そこからそれらがどのように見えるか、それぞれの種とどのように異なるかを学習しようとしました。他の。
その結果、精度スコアは非常に低くなり、言い換えれば、ネットワークは鳥類と哺乳類の種を識別する際に非常に多くの間違いを犯しました。
ネットワークは同時にあまりにも多くの側面を学ぼうとしていました。多くの鳥の種は互いに非常によく似ていますが、色の異なる羽の単一の部分や異なる形状のくちばしによって互いに異なります。
同じ種の異なる性別がどのように見えるかとともに、このすべての情報を保持することは、特定の状況下では非常に困難です。ネットワークは、より広範な鳥の種類を正確に決定する一方で、鳥の種を混同することがよくありました。
たとえば、ズキンクイと黒い羽毛のパッチを着たケンタッキーウグイスの違いは次のとおりです。
ネットワークはフード付きウグイスをケンタッキーウグイスとラベル付けし、誤った結果を生成しますが、一般的には正しく、どちらもウグイスです。時間の都合上、クライアントは特定の種ではなく全体的な鳥の種類を検出することがより重要であると判断したため、そこから開始しました。
モデルの評価後、次のような複数段階のアプローチを実装することにしました。
鳥の種をグループ化することで、クラスの数を 98 から 49 に減らすことができました。これにより、ネットワークには選択できるクラスがあまりなかったため、精度スコアが大幅に向上しました。
新しい概念に出会ったとき、あなたはそれを理解するために本を読んだり、教育ビデオを見たりします。失敗した場合は、友人に説明してもらうか、そのテーマに関するセミナーに参加します。言い換えれば、より深く理解するために、より多くの情報を蓄積しようとします。
ニューラルネットワークについても同様です。ウグイスがどのようなものかを理解するには、より多くのウグイスの画像を表示する必要があります。調査したデータが多いほど、精度スコアは高くなります。
私たちが選択した多段階アプローチにより、オブジェクト分類モデルの精度が向上しただけでなく、データセットを分析してネットワークのどこに学習データが欠けているかを判断することも可能になりました。
物体分類モデルが開始された後、テストで示されたものよりもはるかに悪い結果を受け取り、私たちは驚きました。モデルは鳥の種類や種類を正しく判断できませんでした。
問題はさらに根深いものでした。プロジェクト全体を担当するコンピューター ビジョン開発者は、作業中にすべての鳥の種を自分で学習しましたが、ネットワークによって誤ってラベル付けされた画像を受信したときに、その鳥が何であるかを判断することもできませんでした。 。
7 月は、10 代の鳥が飛ぶことを学び、巣を離れる時期であるため、鳥の分類モデルを開始するのに最適な時期ではないことが判明しました。
みにくいアヒルの子の話を覚えていますか?まあ、それはほとんどの鳥に当てはまりますが、ヒナは成鳥と何ら変わりませんし、まだ若い鳥の場合、どの鳥を見ているのかを知るのは困難です。
私たちは夏の間に幼鳥の画像を収集しており、さまざまな年齢のさまざまな鳥の種を決定するために分類ネットワークをトレーニングする予定です。
バードウォッチャーは情熱的な集団で、一枚の羽の形で鳥を識別する方法を知っています。彼らは、私たちの分類ネットワークが夢見るような知識を持っているので、この 2 つを結び付けて、世界がこれまでに見たことのない鳥を愛する同盟を結成してみてはいかがでしょうか。
現在、分類ネットワークはユーザーに鳥の種類を伝えるだけでなく、他の推測とともに信頼度も示します。
ユーザーはネットワークの推測を確認したり修正したりできるため、一度に 1 羽ずつトレーニングすることができます。ユーザーフィードバックシステムを 3 か月間実行した結果、20,000 枚を超える画像が収集されました。写真は実際の状況(悪天候条件、夜間など)で撮影され、専門家によってマークアップされているため、このデータは私たちにとって非常に貴重です。
このプロジェクト中に、私たち自身が鳥の専門家になったことは注目に値します。一日中鳥を観察しながら、基本的には仮想の子供にさまざまな種類のスズメの小さな違いを教育するだけで、すぐにバードウォッチング コミュニティのプラチナ メンバーになれます。
他のすべてが失敗した場合、CV チームのメンバーは簡単に鳥類学に携わることになります。
真剣な話になりますが、データセットのマークアップであれ、ネットワークが最も間違いを犯している場所の分析であれ、何千もの鳥の画像を調べて、私たちはこのプロジェクトを深く掘り下げ、鳥の知識だけでなく、複雑な画像認識および分類システムがどのように機能するか、それらを最適に実装する方法、大規模なデータセットを分析してその弱点を見つける方法についての理解を深めることができます。
このプロジェクトは、最新のコンピューター ビジョン テクノロジを研究して使用し、リアルタイムの顧客フィードバックを処理し、古いコードを使用する場合の問題解決スキルを磨く機会として、私たちにとって非常に貴重でした。