この記事では、ユーザーの車検証プロセスを自動化する方法について説明します。私たちが使用するコンポーネントと、プロセスをどのように組織するかを共有します。
inDrive では、ビジュアル コンテンツを大量に使用しています。私たちは、パスポート、証明書、車両関連書類など、さまざまな文書が豊富に使用される、さまざまな考え方が特徴のさまざまな地域に拠点を置いています。
それとは別に、ドライバー自身とその車両にも対処しなければなりません。
ユーザーへの旅行の快適さとサービスの質の向上について語るとき、安全性と予期せぬ事態の排除は絶対に不可欠です。たとえば、停まった車が予約した車ではなかった場合などです。
inDrive が現在、定期的な車検証をどのように処理しているかがわかります。それが完了したら、モデレーターが手動で前後の写真を確認します。もちろん、検証プロセスには他のことも含まれますが、ここではこの点にのみ焦点を当てます。
現在のアプローチの問題は、インフラストラクチャをスケールアップすることよりもモデレータの数を増やすことが難しいことです。特にユーザーの個人データの取り扱いに関してはそうです。
子供のように、問題を非常に単純に考えてみましょう。車の写真が 2 枚あります。それらは両方とも同じ車ですか?明らかに、この質問は誰でも解決できますが、比較基準を追加すると、事態はさらに複雑になります。
たとえば、これが携帯電話のスクリーンショットではないこと、またはナンバー プレートの番号が完全に一致していることを確認します。
世界的には、この問題はいくつかの方法で解決できます。 E2E モデルとこれらのモデルのセットを使用する。
E2E モデルは、「写真に写っているのは同じ車両ですか?」「ナンバー プレートの番号は一致しますか?」などの、2 つの画像に基づいて質問に答えることができる 1 つの大きなモデル (おそらくニューラル ネットワーク) の関与を意味します。上がるかどうか?」など。
このようなモデルの問題は、学習するために大量のデータが必要であることと、なぜその答えがそうなのかについての理解が欠けていることです。
たとえば、2 枚の写真に基づいて「はい」/「いいえ」で答えるようにモデルをトレーニングした場合、その答えの理由を理解することはもはや不可能になります。
そのため、ユーザーは私たちが何を求めているのか理解できず、モデレーターを導入する必要があります。
このエンドツーエンドのアプローチは私たちには適していません。私たちは、提供された写真が「条件に合わない」理由についてユーザーに手がかりを提供したいと考えています。「明るい場所で写真を撮るのが最善です」「車全体が見えていないように見えます」写真」または「ナンバー プレート番号が提供された情報と一致しません。」
異なる車両が存在する場合にモデルが「はい」と答えないことは、私たちにとって非常に重要です。この指標に「FPR」(偽陽性率) という名前を付け、これを使用して、すべての否定的な例 (車両が一致しない場合) に対する「はい」の回答の割合を示します。
ここで、すべての肯定的な回答に対する「はい」の回答の比率を測定する別の指標である TPR を導入しましょう。
基本的に、モデルを最適化するときのタスク、つまり FPR を最小限に抑え、TPR が過度に低下しないようにすることを説明するには、これら 2 つのメトリクスですでに十分です。
私たちはモデルセットアプローチを採用しました。したがって、完成したソリューションのスケルトンにすべてのアイデアを追加できます (このスケルトンを「ベースライン」と呼びます)。それがどのようなものかを調べて、部分に分けてみましょう。
実際、これは入力で 2 つの画像を個別に処理し、出力で車両のナンバー プレート番号とそのベクトルを出力するいくつかのモデルで構成されています。その結果、比較された詳細に基づいて、検討中の 2 枚の写真について検証の決定が行われます。
これは、他の複数のモデルを追加し、モデルの異なるノードに配置するために使用するアルゴリズムのスケルトンです。たとえば、写真の品質、鮮明さ、光、彩度のレベルを評価する場合です。
場合によっては、本物ではない写真を送信しようとする試みを検出する必要があります。これを行うには、写真にスプーフィング攻撃がないかチェックするプリプロセッサを追加します。
このようなアプローチを使用する場合、製品の反復サイクルを明確にし、適切なテスト データ セットを生成することが重要です。 「割り当てられた問題を解決できるかどうか」という 2 つの要素を評価するための新しいモデルを追加します。 「以前のソリューションのメトリクスはどの程度変更されますか?」
次に、ソリューションの基本的な構成要素について説明します。
用語の説明に移りましょう。以下に「バウンディングボックス」や「セグメンテーションマスク」などの用語の意味を説明します。
境界ボックスは、対象となる特定のオブジェクトを囲むために使用される長方形です。たとえば、猫の顔を識別したい場合は、赤で輪郭を描いて境界ボックスを定義します。これは、画像内の左下と右上の点の座標によって定義されます。
セグメンテーションとは、入力イメージ内の個々のピクセルにクラス ラベルを割り当てるタスクを指します。私たちの議論の文脈では、背景から猫をセグメント化することによって猫を分離しました。
私たちのモデルでは、車両の背景には関心がありません。これは、ターゲット ソリューションを形成するための関連情報が提供されないためです。しかし、それは、背景を使用してモデルを改善する方法についてのアイデアがないという意味ではありません。
車両を背景から分離するという課題に対処するために、YOLO ファミリー (You Only Look Once) のモデルを取得し、車両の画像をセグメント化するようにトレーニングします。ここでの問題は、ユーザーから複数の車が写っている膨大な数の写真があることです。
この問題を解決するには、次のアプローチを採用できます。
無事、最初の入力が完了しました。
次のステップは、車のナンバープレート番号を見つけることです。ほとんどすべての国で、ナンバー プレートは前面にあります。車両の登録プレートが通常とは異なる場所に配置されているまれなケースについては、この記事の範囲外です。
ナンバー プレート番号を確立するための最も一般的なアプローチは、境界ボックスを検出し、結果のパッチに OCR を適用することです。
しかし、私たちの実験が示したように、車両の登録ナンバープレートが地平線と平行でない場合、OCR の効果は大幅に低下します (一部のモデルでは時間がかかります)。
これは、ドライバーに斜めから写真を撮るよう依頼する私たちのデータに特に関係します。
私たちが決定した解決策は、数値をセグメント化し、得られた等高線を滑らかにすることでした。私たちの場合、セグメンテーション タスクは車両をセグメント化する方法と同様にアプローチされ、次の結果が得られました。
次にマスクを使って輪郭線を描き、ConvexHullを適用して滑らかにします。この単純なアルゴリズムは、輪郭線の凹みを滑らかにして(真っ直ぐにして)、輪郭線をより真っ直ぐにします。これは、輪郭ポリゴン内の角度の数が少なくなったと表現できます。
理想的な世界では、この操作により 4 つの点で定義される長方形が得られます。
境界線を揃えたら、遠近法を使用して同じドリルを繰り返し、登録番号が滑らかで、適切に表示され、はっきりと見えるようにします。このアプローチは、ナンバー プレートがほとんど見えない角度で車を撮影する場合に特に役立ちます。
遠近法補正とは何ですか?代数の授業で回転行列がどのように機能するかを覚えています。デカルト座標系の正方形を取得し、各座標に 30 度の回転行列を乗算すると、新しい座標系の正方形は 30 度回転します。
ここでは、同様のタスクを扱っています。等高線を取得し、すべての点を新しい座標系に移動しましょう。問題は、適切な変換行列を見つけることです。
これらのアルゴリズムはすべてすでに十分に確立されているため、私たちがしなければならないことは、それらが当面のタスクに対して正しく構成されていることを確認することだけです。
結果は素晴らしかったです。これにより、TPR は 15 パーセント近く増加しました。次に、PARSeq アーキテクチャなどの軽量で高品質の OCR ソフトウェアを適用します。
現時点では、これは車両の写真を処理するための最新のニューラル ネットワーク テクノロジーです。埋め込みは、検索、推奨、データ圧縮などのさまざまな機械学習分野で広く採用されている技術です。
私たちのタスクのコンテキストでは、車両間の類似性を評価するために埋め込みが使用されます。
まず車の右側から写真を撮り、次に左側から写真を撮った例を見てみましょう。これで、これらの画像のエンベディング (ベクトル) を計算できます。これらのベクトルが空間内で近い場合、これは同じ車両であることを示します。
ただし、エンベディングは、製品で使用できる別の便利なプロパティを提供します。エンベディング モデルがうまく機能する場合は、エンベディング サンプルの中から最も近いものを検索できます。たとえば、システム内で固有でない車両を検索する場合などです。
inDrive データを使用してエンベディング モデルをトレーニングする際には、細心の注意を払いました。私たちは写真から個人データを慎重に削除し、データセットが正規化されていることを確認し、当社が事業を展開しているすべての国とさまざまな品質レベルの画像を網羅しました。
このアプローチは、高品質の写真を撮影するための高価なスマートフォンを利用できない個人に対する差別を防ぐことを目的としています。
その結果、車両のブランドとメーカーごとにグループ化されたデータセットが取得されました。いくつかの実験を行った結果、当面は車両の色を比較せずに済むことがわかりました。
モデルのアーキテクチャを選択する際、パフォーマンスと計算効率のバランスをとるバックボーンを探しました。ベースラインの実行時間が大幅に遅くなる可能性があるため、大きすぎるバックボーンの使用を避けることが重要でした。
慎重に検討した結果、バックボーン アーキテクチャとして効率的な net_b2 を選択し、機械学習目的での加算的な角度マージン損失の利用によって補完されました。
私たちのモデルの目標は、すべての Audi A4 など、同じメーカーとモデルの車両がベクトル空間内で密接して配置されているベクトル表現を学習することです。
対照的に、アウディ A5 はアウディ A4 からはやや離れた位置にありますが、たとえばトヨタ カムリと比較すると、それでも近い位置にあります。
次に、車両の比較例をいくつか詳しく見てみましょう。
上部には 2 台の同一の車があり、下部には 2 台の異なる車があります。類似性スコアをもう一度見てみましょう。上のペアのスコアは 0.989、下のペアのスコアは 0.697 です。しきい値を 0.98 に設定すると、車両を同一のものとして分類できます。
ただし、私たちのモデルはまだ完璧に機能しているわけではないことに注意することが重要です。関連する要素に偏りがあります。
モデルでは 0.751 という結果が得られますが、理想的にはさまざまな車両に対して 0 に近い値が必要です。
ここでの主な問題は、主に車両モデルとブランドに焦点を当てたデータセットでモデルをトレーニングすることに起因しています。その結果、モデルはさまざまな車両を区別することに熟練しましたが、車両クラス内の違いを評価する場合には困難を伴いました。
私たちが遭遇した 2 番目の問題は、車両が異なる角度で表示される可能性があり、データセットが限られているために埋め込みの品質に悪影響を与えることです。
最初のステップとして、クライアント側でマスクを追加し、ドライバーに車の写真の撮影方法を指示します。 2 番目のステップでは、車両のさまざまな部分を検出して、車両を空間内に配置し、回転を推定します。
ここでは、正しい回転角度を選択するために多くのヒューリスティックを開発できます。そして最も重要なことは、これらのモデルは後で車両の状態を評価するために再利用できることです。しかし、それはまた別の機会に。
投稿者:イリヤ・カフタノフ