AIソリューション開発部が2021年に取り組んだPoCプロジェクトの一つであるオーバーレイ不承認対策について、プロジェクトの目的や解決策などを説明します。
はじめに
AIソリューション開発部の野中です。今回の記事は、21新卒で入った自分が初めて担当したプロジェクトについてお話しできればと思います。プロジェクトは『オーバーレイ不承認問題』と勝手に名付けさせていただき、3-4ヶ月程度の期間で問題のリサーチからアプリケーションとしての実装を行いました。
本記事では、まず、プロジェクトのビジネス的な背景・目的を確認し、その後どの点に注目して、技術的な問題解決を行ったのか論点を整理します。整理された論点に対して、検討した解決策をお見せした後、アプリケーションとしての実装とプロジェクトの結果を共有します。
プロジェクトの背景と目的
弊社では、大手ECサイトを運営されているクライアント様に向けて、ECサイト上の商品の販売促進のために、Googleショッピング広告の利用を提案することがあります。具体的には、ECサイト上に掲載されている商品内容をそのまま、Googleショッピング広告にも掲載することで、当該商品を消費者の目につきやすくするといった施策を行っています。
しかしながら、Googleショッピング広告に出稿するためには、Google Merchant Centerによる審査を受け、承認を得る必要があります。この審査の中には、特に掲載される商品バナー画像に関して要件が定められており、様々な側面から当該画像が掲載してよいかどうかチェックが行われます。他方、ECサイト側の事情に目を移すと、楽天などに代表されるモール型のECサイトでは、各出店者が自由にバナー画像を作成しているため、Google Merchant Centerの要件に沿わない画像が大量に作成されている状況となっています。数百万規模の商品がMerchant Centerの要件に沿わず出品できない状況は、ビジネス的に大きな機会損失となっていました。
営業の方から、このような要件を満たさない大量のバナー画像をなんとかGoogle Merchant Centerの承認を通るようにできないかという相談を持ちかけられ、本プロジェクトが立ち上がりました。このプロジェクトは、後述する不承認の原因から「オーバーレイ不承認問題」と名付けられました。
問題の焦点
ECサイトに掲載されている画像の多くがGoogle Merchant Centerの不承認を受ける理由の多くは、プロモーションのオーバーレイにありました。プロモーションのオーバーレイとは、商品画像に関して、商品自体の表示領域の上にテキストが重なって表示されているため、商品状態が視認しづらくなっていることです。(具体的には、以下のような状態の画像を指しています。)このような画像をGoogle Merchant Centerに送ると、オーバーレイ画像として不承認の審査が下り、掲載することができません。
Google側も、Merchant Centerを運営する上でこの問題が頻発するためか、画像の自動改善機能を実装しています。この画像の自動改善機能は、画像における商品領域を何かしらのロジックで推定し、自動でクロップ(画像の一部を切り取ること。トリミング)することができます。お読みになっている方は、「この機能で十分でわざわざ新しいシステムを開発する必要性がないではないか!」と突っ込まれるかもしれません。しかし、この機能にも弱点があります。それは、ユーザーが意図しない領域をクロップされる可能性があること、そのことをユーザー側は確認することができず、意図しない画像をショッピング掲載してしまうリスクがあることです。
そこで、本プロジェクトでは、プロモーションオーバーレイとして不承認を受けた画像に対して修正を行い、オーバーレイでない要件を満たす画像に変換するアルゴリズムを自社開発し、意図しない画像の掲載を最小限にとどめることを目標にしました。
解決策の検討
1枚の商品バナー画像は、商品領域とテキスト領域の2つに分けることができます。商品領域に対して、テキスト領域が重なる領域が存在することで、オーバーレイ不承認の問題が起こることになります。Googleが提供する自動改善機能は、この重なった領域を避けて商品領域部分のみを抽出するアルゴリズムでした。しかし、テキスト領域の下にも商品のイメージとして必要不可欠な部分があり、人間はその必要不可欠な部分を補完して画像を捉えていると考えられます。この場合、自動改善機能を使ってクロッピングしてしまうと、その部分を排除してしまうこととなり、結果として不自然な画像に仕上がってしまうことがこの方法の問題としてあります。
したがって、今回の開発では、重複領域のテキスト部分のみを排除するロジックにすることとしました。具体的には、マスクされたテキスト領域に対して、Image Inpainting技術を適用し、テキストオーバーレイ前の画像を復元するという方法です。この方法には、2つのモジュールが存在します。
- テキスト領域を検出するOCR技術
- 検出されたテキスト領域に対して復元作業をするImage Inpating技術
大学院時代に、機械学習や統計手法を研究していた身としては、一からモデルを作って、学習させ、評価したい欲求にかられるのですが、悲しいかな、今回はまともなデータがないので、学習を行うことができません。そうした場合に、候補となってくるのが、事前学習済みのモデルや機械学習APIです。以下では、それらを組み合わせて所望の結果を実現するアルゴリズムを考えます。
①テキスト領域を検出するOCR技術
OCRを行うことができる事前学習済みのモデル/APIで、一番最初の選択肢として挙げられるのが、GCPのVision APIでしょう。しかし、Vision APIのデメリットとして、従量課金でコストが大きくかかってきてしまうことが挙げられます。今回でいえば、例えば修正対象の画像が300万枚あった場合、約50万円程度の料金が発生することとなります。本プロジェクトは、まだPoCの段階であったため、あまりコストをかけずに、アプリケーションを構築したいと考えました。
そこで、Baiduが出している学習済みのOCRモデルであるPaddle OCRに着目し、使用することにしました。Paddle OCRは、Vision APIと異なり、モデルのコードや学習済みのパラメータが公開されているため、Cloud Runなどに乗せて、より安価にOCR技術を利用することができます。また、精度面において、Vision APIとPaddle OCRを比較したところ、Paddle OCRの方が若干、文字の回転や縮小に弱いものの、実用上は問題ないという判断を下しました。
②検出されたテキスト領域に対して復元作業をするImage Inpating技術
Paddle OCRによって、画像中のテキスト領域が検出されると、検出領域をマスクすることができます。そのマスクされた領域に対してImage Inpatingを用いることで、テキストの存在を削除します。具体的なImage Inpating技術については、近年のDeep Learning技術の発展により、様々な手法が開発されており、学習済みモデルが公開されているものもあるため、それらを使用します。注意点としては、顔画像の復元など画像のドメインに特化して高精度をあげている手法ではなく、どのドメインの画像にも使用できる学習済みモデルを使用することです。今回は、NVIDIAの研究者が開発したPartial Convを使わせていただきます。手法の具体的な内容は割愛させていただきますが、部分畳み込み層を導入することで、細かなマスク領域の復元も容易にしたことが報告されています。
アプリケーションの実装
簡単なデモアプリケーションとして、以上のアルゴリズムを非エンジニアがwebUIを通して利用できるシステムを構築しました。フロントエンドに関しては、React, Next.jsを用いて構築し、生成された静的ページをGCPのFirebase Hostingによって社内に公開しました。フロントエンドから、バックエンドのCloud Firestoreに対して、オーバーレイ不承認画像のURLを送ることができるようになっています。Cloud Firestoreのトリガーを用いて、不承認画像のURLが送られてきた際に、当該URLをCloud Tasksに送信するCloud Functionを発火させます。上述のアルゴリズムは、Cloud Run上のコンテナに実装されており、Cloud Tasksから受け取ったURLを元に、修正された画像をCloud Storageに保存し、そのURLをFirestoreに返すAPIを構築しました。
結果
修正された画像
下が修正された画像です。若干、修正の後が残ったり、商品自体に記載される文字が削除されてしまうものの概ね自然な形で修正できていると考えられます。一方で、テキスト領域が画像全体に渡るようなパターンだと、うまく修正できないので、人間の手で弾く必要性があります。(Googleの自動修正機能は、修正すると自動でMerchant Centerに送られるため、この人間の手で確認するフェーズを差し込むことができません。)
テスト実施の結果
実際のECサイトを運営されているクライアント様で、テスト実施したところ、プロモーションオーバーレイとして不承認された画像に対して本アルゴリズムで修正をかけたもののうち約半数が審査を通過するという結果になりました。
課題
オーバーレイ不承認は、テキスト領域が原因で主に生じる問題ですが、画像に記載された企業ロゴや画像の枠線などによっても生じることが確認されています。
前者の企業ロゴ問題においては、ロゴの検出器を用意する必要性がありますが、現時点で一般的な機械学習APIは日本企業のロゴ検出に対応しておらず、また、事前学習済みのモデルも存在しないため、自前でモデルを学習させる必要性があります。ロゴデータ収集のコストが大きいこととロゴ原因の不承認が少ないことから、今回は見送りました。後者の枠線除去においては、画像のRGB値から枠線が存在するかどうかを判定するアルゴリズムを作成することはできますが、こちらも枠線原因の不承認が少ないことから対処しない形としました。
また、構築したシステム自体にも、インフラの構成が不自然であったり、CI/CDが未整備であったりと、主に非機能的な側面で課題が残る形となってしまいました。今後、それらのシステム開発の周辺知識をキャッチアップしながら、本番の稼働に耐えうるアプリケーションにしていきます。
終わりに
本記事では、私が入社してから初めて担当したプロジェクトで考えたこと、試したことを中心に記事を執筆させていただきました。初めてのプロジェクトであるため、手探りで調査や実装を進めていった形でしたが、大学院自体に学んだ研究の進め方などは、仕事を進める上で大変参考になりました。Opt Technologies及びその機械学習チームであるAIソリューション開発部では、そのような経験が大きく役立つプロジェクトも多々あると感じています。興味を持たれた方がいらっしゃいましたら、是非一緒に働きましょう!
Opt Technologies ではエンジニアを募集中です。カジュアル面談も可能ですので、下記リンク先よりお気軽にご応募ください。