Avito広告で車のナンバヌプレヌトを隠す理由ず方法

こんにちは 昚幎末に、Avitoアナりンスカヌドの写真にナンバヌプレヌト番号を自動的に隠すようになりたした。 これを行った理由ず、そのような問題を解決する方法に぀いおは、蚘事を読んでください。



プレヌトを隠しお



挑戊する



2018幎のAvitoでは、250䞇台の車が販売されたした。 これは1日にほが7000です。 販売するすべおの広告には、むラスト-車の写真が必芁です。 しかし、その䞊の州番号によっお、車に関する倚くの远加情報を芋぀けるこずができたす。 たた、䞀郚のナヌザヌは自分でナンバヌプレヌトを閉じようずしたす。

画像画像
画像画像
蚘事の冒頭のむラストのプロトタむプ


ナヌザヌがナンバヌプレヌト番号を非衚瀺にする理由は異なる堎合がありたす。 私たちは、圌らがデヌタを保護できるように支揎したいず考えおいたす。 そしお、ナヌザヌの販売ず賌入のプロセスを改善しようずしおいたす。 たずえば、匿名番号サヌビスは長い間私たちず協力しおきたした。車を販売するず、䞀時的な携垯電話番号が䜜成されたす。 さお、ナンバヌプレヌト䞊のデヌタを保護するために、写真を匿名化したす。



画像



゜リュヌションの抂芁



ナヌザヌの写真を保護するプロセスを自動化するには、畳み蟌みニュヌラルネットワヌクを䜿甚しお、ナンバヌプレヌトでポリゎンを怜​​出したす。

珟圚、オブゞェクトの怜出には、2぀のグルヌプのアヌキテクチャが䜿甚されおいたす。たずえば、2段階ネットワヌクFaster RCNNずMask RCNNなど。 シングルステヌゞシングルショット-SSD、YOLO、RetinaNet。 オブゞェクトの怜出は、察象のオブゞェクトが内接する長方圢の4぀の座暙の掟生です。



画像



䞊蚘のネットワヌクは、写真内のさたざたなクラスの倚くのオブゞェクトを芋぀けるこずができたす。これは、ナンバヌプレヌトの怜玢問題を解決するためにすでに冗長です。なぜなら、私たちの写真の車は通垞1぀だけであるためです、しかし、これは非垞にたれにしか発生しないため、これは無芖できたす。



これらのネットワヌクのもう1぀の機胜は、デフォルトで、座暙軞に平行な蟺を持぀境界ボックスを生成するこずです。 これは、アンカヌボックスず呌ばれる䞀連の定矩枈みの長方圢フレヌムが怜出に䜿甚されるために発生したす。 より具䜓的には、最初に畳み蟌みネットワヌクresnet34などを䜿甚しお、画像から属性のマトリックスを取埗したす。 次に、スラむディングりィンドりを䜿甚しお取埗した属性のサブセットごずに、分類が行われたす。kアンカヌボックスのオブゞェクトがあるかどうか、および䜍眮を調敎するフレヌムの4぀の座暙に察しお回垰が実行されたす。

詳现に぀いおはこちらをご芧ください 。



画像



その埌、さらに2぀のヘッドがありたす。



建築の最もも独創的なな写真ではな



オブゞェクト犬/猫/怍物などを分類するもの、

2番目bboxリグレッサヌ-オブゞェクトの面積ずフレヌムの面積の比率を高めるために、前のステップで取埗したフレヌムの座暙の回垰甚。



回転したボクシングフレヌムを予枬するには、bboxリグレッサヌを倉曎しお、フレヌムの回転角床も取埗する必芁がありたす。 これを行わないず、どういうわけか刀明したす。



画像



2段階のFaster R-CNNに加えお、RetinaNetなどの1段階の怜出噚がありたす。 前のアヌキテクチャずは異なり、オブゞェクトを含む可胜性のある画像のセクションを提案する予備段階なしで、クラスずフレヌムを即座に予枬したす。 回転したマスクを予枬するには、ボックスサブネットのヘッドも倉曎する必芁がありたす。



画像



回転バりンディングボックスを予枬するための既存のアヌキテクチャの䞀䟋はDRBOXです。 このネットワヌクは、Faster RCNNのように、地域の提案の予備段階を䜿甚しないため、1段階の方法を修正したものです。 このネットワヌクをトレヌニングするために、特定の角床で回転するK境界ボックスrboxが䜿甚されたす。 ネットワヌクは、タヌゲットオブゞェクト、座暙、bboxサむズ、回転角床を含むK rboxのそれぞれの確率を予枬したす。



画像



アヌキテクチャを倉曎し、怜蚎䞭のデヌタネットワヌクの1぀を回転境界ボックスで再トレヌニングするこずは、実珟可胜なタスクです。 しかし、私たちのネットワヌクの範囲はずっず狭く、ナンバヌプレヌトを隠すだけなので、目暙はより簡単に達成できたす。

したがっお、数の4぀のポむントを予枬するための単玔なネットワヌクから始めるこずにしたした。その埌、アヌキテクチャを耇雑にするこずが可胜になりたす。



デヌタ



デヌタセットのアセンブリは、車の写真を収集し、ナンバヌプレヌトで゚リアをマヌクするずいう2぀のステップに分かれおいたす。 最初のタスクはむンフラストラクチャで既に解決されおいたす。Avitoに配眮されたすべおの広告を慎重に保存したす。 2番目の問題を解決するために、Tolokaを䜿甚したす。 toloka.yandex.ru/requesterでタスクを䜜成したす。

タスクは車の写真を䞎えられたした。 四角圢を䜿甚しお車のナンバヌプレヌトを匷調衚瀺する必芁がありたす。 この堎合、状態番号はできるだけ正確に割り圓おる必芁がありたす。
画像



Tolokaを䜿甚しお、デヌタをマヌクアップするタスクを䜜成できたす。 たずえば、怜玢結果の品質の評䟡、さたざたなクラスのオブゞェクトテキストず写真のマヌクアップ、ビデオのマヌクアップなど。 これらは、Tolokaナヌザヌがお客様が請求する料金で実行されたす。 たずえば、私たちの堎合、トロヌカヌは写真の車のナンバヌプレヌトで埋め立お地を匷調する必芁がありたす。 䞀般に、倧きなデヌタセットをマヌクアップするには非垞に䟿利ですが、高品質を埗るのは非垞に困難です。 矀衆の䞭には倚くのボットがいたす。そのタスクは、ランダムに答えを出すか、䜕らかの戊略を䜿甚しおお金を皌ぐこずです。 これらのボットに察抗するために、ルヌルずチェックのシステムがありたす。 䞻なチェックは、コントロヌルの質問の混合です。Tolokiむンタヌフェむスを䜿甚しおタスクの䞀郚を手動でマヌクアップし、それらをメむンタスクに混合したす。 コントロヌルの質問でマヌクアップがよく間違われる堎合は、マヌクアップをブロックし、マヌクアップを考慮したせん。



分類の問題に぀いおは、マヌキングが間違っおいるかどうかを刀断するのは非垞に簡単です。たた、領域を匷調衚瀺する問題に぀いおは、それほど簡単ではありたせん。 叀兞的な方法は、IoUをカりントするこずです。



画像



この比率が耇数のタスクの特定のしきい倀よりも小さい堎合、そのようなナヌザヌはブロックされたす。 ただし、2぀の任意の四角圢の堎合、特にTolokではJavaScriptでIoUを実装する必芁があるため、IoUの蚈算はそれほど単玔ではありたせん。 小さなハックを䜜成したした。小さな近所の゜ヌスポリゎンの各ポむントに、スクラむブでマヌクされたポむントがあれば、ナヌザヌは間違っおいなかったず考えおいたす。 たた、応答の早いナヌザヌ、キャプチャ、倚数意芋ずの䞍䞀臎などをブロックするクむックレスポンスルヌルもありたす。 これらのルヌルを蚭定するず、かなり良いマヌクアップが期埅できたすが、本圓に高品質で耇雑なマヌクアップが必芁な堎合は、フリヌランサヌ-スクラむブを特に雇う必芁がありたす。 その結果、デヌタセットは4kのマヌクされた画像になり、Tolokではすべお28ドルかかりたした。



モデル



次に、ネットワヌクを䜜成しお、゚リアの4぀のポむントを予枬したす。 resnet18を䜿甚しお暙識を取埗しresnet34の堎合は11.7Mパラメヌタヌ察21.8Mパラメヌタヌ、4぀のポむント8座暙ぞの回垰のヘッドを䜜成し、写真にナンバヌプレヌトがあるかどうかの分類のヘッドを䜜成したす。 車のすべおの写真ではなく、車の販売の広告では2番目の頭が必芁です。 写真は車の现郚である堎合がありたす。



画像



もちろん、私たちず同様に、怜出する必芁はありたせん。



境界ボックス0,0,0,0,0,0,0,0,0を含むナンバヌプレヌトのない写真ず、分類噚の倀「ナンバヌプレヌトのある/ない写真」をデヌタセットに远加するこずにより、2぀の目暙を同時に蚓緎したす。 1。



その埌、次の損倱の合蚈ずしお、䞡方の目暙に察しお単䞀の損倱関数を䜜成できたす。 ナンバヌプレヌトポリゎンの座暙ぞの回垰では、滑らかなL1損倱を䜿甚したす。



画像



これは、匕数の絶察倀が倧きい堎合はL1ず同様に動䜜し、匕数の倀がれロに近い堎合はL2ずしお動䜜するL1ずL2の組み合わせずしお解釈できたす。 分類には、゜フトマックス損倱ずクロス゚ントロピヌ損倱を䜿甚したす。 特城抜出プログラムはresnet18で、ImageNetで事前にトレヌニングされた重みを䜿甚したす。その埌、デヌタセットで抜出プログラムずヘッドをさらにトレヌニングしたす。 このタスクでは、Avitoのコンピュヌタヌビゞョンのメむンフレヌムワヌクであるmxnetフレヌムワヌクを䜿甚したした。 䞀般に、マむクロサヌビスアヌキテクチャを䜿甚するず、特定のフレヌムワヌクに瞛られるこずはありたせんが、倧芏暡なコヌドベヌスがある堎合は、それを䜿甚しお同じコヌドを再床蚘述しないこずをお勧めしたす。



デヌタセットの品質が蚱容範囲内になったので、デザむナヌに䟝頌しお、Avitoロゎ付きのナンバヌプレヌトを入手したした。 もちろん最初は自分でやろうずしたしたが、あたり矎しくありたせんでした。 次に、Avitoラむセンスプレヌトの明るさを、ラむセンスプレヌトのある元の領域の明るさに倉曎する必芁があり、画像にロゎを重ねるこずができたす。



画像



補品で起動



結果の再珟性、プロゞェクトのサポヌトおよび開発の問題は、バック゚ンドおよびフロント゚ンド開発の䞖界で倚少の゚ラヌで解決されたしたが、機械孊習モデルを䜿甚する必芁がある堎合は未解決のたたです。 おそらく、レガシヌコヌドモデルを理解する必芁がありたした。 readmeに、゜リュヌションの基になった蚘事たたはオヌプン゜ヌスリポゞトリぞのリンクがあるず䟿利です。 再トレヌニングを開始するためのスクリプトぱラヌで倱敗する堎合がありたす。たずえば、cudnnバヌゞョンが倉曎され、そのバヌゞョンのtensorflowはこのバヌゞョンのcudnnでは動䜜しなくなり、cudnnはこのバヌゞョンのnvidiaドラむバヌでは動䜜しなくなりたす。 トレヌニングのために、デヌタに埓っお1぀のむテレヌタを䜿甚し、実皌働環境で別のむテレヌタを䜿甚した可胜性がありたす。 そのため、しばらく継続するこずができたす。 䞀般に、再珟性の問題が存圚したす。



モデルをトレヌニングするためにnvidia-docker環境を䜿甚しおそれらを削陀しようずしたす。これにはcudaに必芁なすべおの䟝存関係があり、Pythonの䟝存関係もそこにむンストヌルしたす。 デヌタ、拡匵、および掚論モデルに応じたむテレヌタヌを備えたラむブラリヌのバヌゞョンは、トレヌニング/実隓段階および実皌働で䞀般的です。 したがっお、新しいデヌタでモデルをトレヌニングするには、リポゞトリをサヌバヌにポンプで送り、ドッカヌ環境を収集するシェルスクリプトを実行する必芁がありたす。 内郚には、トレヌニングずテスト甚のすべおのノヌトブックがありたすが、環境による゚ラヌで間違いなく倱敗するこずはありたせん。 もちろん、1぀のtrain.pyファむルを甚意するこずをお勧めしたすが、実際には、モデルが䞎えるものを垞に目で芋お、孊習プロセスで䜕かを倉曎する必芁があるこずが瀺されおいるため、最終的にはただjupyterを実行したす。



モデルの重みはgit lfsに保存されたす-これはgitに倧きなファむルを保存するための特別な技術です。それ以前はアヌティファクトを䜿甚しおいたしたが、git lfsを䜿甚する方が䟿利です。 自動テストはモデルの掚論甚に䜜成されおいるため、合栌しないりェむトを䜿甚しおサヌビスを展開するこずはできたせん。 サヌビス自䜓は、kubernetesクラスタヌのマむクロサヌビスむンフラストラクチャ内のdockerで開始されたす。 パフォヌマンスを監芖するには、grafanaを䜿甚したす。 ロヌリング埌、新しいモデルを䜿甚しおサヌビスむンスタンスの負荷を埐々に増やしたす。 新しい機胜を展開するずき、a / bテストを䜜成し、統蚈テストに基づいお、機胜のさらなる運呜に぀いお評決を出したす。



その結果、私たちは個人所有者向けの自動カテゎリの広告で数字のグロスを開始したした。数字を隠す1぀の画像の凊理時間の95パヌセンタむルは250ミリ秒です。



All Articles