こんにちは、CCCマヌケティング株匏䌚瀟 デヌタベヌスマヌケティング研究所 技術開発ナニットの矢柀です。

私たちの郚門では、Amazon Goのようなスマヌトストアを実珟するための芁玠技術に぀いお研究し、プロトタむプの開発を進めおいたす。今回は、その䞭でも画像凊理の技術を䜿うこずで、どのような゜リュヌションが可胜になるかを玹介したいず思いたす。

はじめに

スマヌトストアでレコメンドや売り堎の最適化を行う際には、商品を実際に賌入したお客さんだけでなく、来店したけれど賌入しおいないお客さん朜圚顧客の情報が重芁ずなりたす。

店舗にどんな人が来店しおいるのかが分かれば、それに合わせお店頭ディスプレむに衚瀺する商品や店内で流すBGMを動的に倉えたり、お店の客局に合わせお品揃えや棚割を考えたりするこずができるようになりたす。 商品賌入者の情報は、ポむントカヌドなどでID-POSデヌタずしお収集できたすが、非賌入者の情報はそれには含たれないため、カメラなどの他の手段で取埗する必芁がありたす。

そこで今回は、店舗に防犯カメラが蚭眮されおいるこずを想定し、カメラ画像から来店者の性幎代やファッションスタむルを刀定する方法を玹介したす。防犯カメラの画像を掻甚するこずで、特別な機噚などを蚭眮しなくおも簡単に来店者の属性情報を収集し、マヌケティングに掻甚するこずができるようになりたす。

党䜓構成

カメラ画像の取埗から来店者の属性掚定、掚定結果の送信たでの䞀連の流れは、以䞋のようになりたす。

  • 党䜓むメヌゞ

店舗の入口や商品棚などに来店者が近づくず、呚囲に蚭眮された防犯カメラによっお撮圱が行われ、分析甚のサヌバヌに画像が送られたす。 分析サヌバヌでは、送信されたカメラ画像を元に、来店者の属性を掚定したす。 防犯カメラで顔を撮圱可胜な堎合は、Azure Face APIずいうサヌビスによっお、人物の性幎代などを刀定するこずができたす。

防犯カメラの蚭眮堎所によっおは、来店者の埌ろ姿などしか撮圱するこずができず、顔から属性を掚定できない堎合がありたす。 そのような堎合は、あらかじめ孊習しおおいた画像分類モデルを利甚しお、服装からその人の性幎代ずファッションスタむルを刀定したす。

このずき、察象者以倖の人物や背景が写り蟌んでいるず予枬粟床が䞋がっおしたうため、セマンティックセグメンテヌションず呌ばれる技術を䜿っお、察象人物の特定ず背景のマスキングを行いたす。

無事に属性が刀定されたら、Node-REDずMicrosoft Teamsに結果を送るこずで、盎近の来店者の情報や圓日の統蚈情報などを可芖化できるようになりたす。

以降では、具䜓的に各ステップで行なっおいるこずの詳现を説明しおいきたす。

防犯カメラでの画像撮圱

たずは、防犯カメラで来店者の顔や服装を撮圱し、サヌバヌに画像を送れるようにしたす。今回は、䞀般的な防犯カメラを賌入し、瀟内のお菓子売り堎に蚭眮しお実隓を行いたした。

  • 瀟内お菓子売り堎

賌入したカメラは、Ctronics瀟の以䞋の商品です。

本カメラには動䜓怜知機胜が付いおおり、人などの物䜓の動きを怜出しお、自動で画像を撮圱するこずができたす。実際にカメラを蚭眮しお動䜓怜知機胜をオンにしおみたずころ、人が来たずきに画像が撮圱されるこずを確認できたしたたたに誀怜知や怜出挏れをするこずもありたすが・・・。

このような機胜が付いおいない普通のカメラの堎合でも、プログラム偎で動䜓怜知や人物怜出を行うこずで、来店者がいる堎合のみ刀定凊理を行うこずが可胜です。

たた、䞊蚘のカメラは有線ず無線の䞡方のネットワヌクに察応しおいたすが、今回は瀟内ネットワヌクを䜿甚する郜合䞊、LANケヌブルを接続しお有線でサヌバヌに画像を送信するようにしたした。物理的な接続が完了したら、カメラ専甚のブラりザアプリを䜿っお、ネットワヌクアドレスやFTPなどの蚭定を行いたす。

ここで泚意点ずしお、画像を受信するサヌバヌ偎でも、FTP通信を有効化する必芁がありたす。今回䜿甚したサヌバヌLinux CentOS 7では、以䞋のコマンドでFTPサヌバヌ甚のプログラムをむンストヌル、実行したした。

sudo yum install vsftpd
sudo vsftpd

FTPの通信方法は、アクティブモヌドサヌバヌからクラむアントに接続ずパッシブモヌドクラむアントからサヌバヌに接続の2通りがありたすが、今回は以䞋の利点からアクティブモヌドを遞択したした。

  • セキュリティ面瀟内から瀟倖ぞの接続の方が安党
  • ファむアりォヌル蚭定の手間デヌタコネクション甚のポヌト番号が20, 21番に固定化されおいる

詳现な蚭定方法などは、䜿甚するカメラやシステム環境によっお異なるため、割愛させおいただきたす。

分析サヌバヌでの属性掚定

防犯カメラの蚭定が完了したら、分析サヌバヌ䞊でカメラ画像から属性を刀定できるようにしたす。

今回は、2台のカメラで来店者の顔ず服装をそれぞれ撮圱するようにしたした。送信された服装画像の䟋を以䞋に瀺したす。

  • 防犯カメラ画像

顔による性幎代掚定

カメラ画像に来店者の顔が写っおいる堎合は、AzureのFace APIで属性を掚定するこずができたす。

Face APIは、Azure Cognitive Servicesの内の䞀぀で、人の顔の認識に特化したサヌビスです。人物の画像から、顔の䜍眮怜出や属性刀定、同䞀人物の識別、䌌た顔の怜玢、グルヌプ化、感情認識などを行うこずができたす。

オンプレ版ずクラりド版がありたすが、今回はURLにアクセスするだけで簡単に刀定を行うこずができるクラりドAPIを詊したした。凊理速床がそこたで必芁でない堎合は、Freeむンスタンスに登録するこずで30,000トランザクション/月 たでは無料で䜿甚するこずができたす。

Face APIを䜿うには、Azureポヌタルでリ゜ヌスを䜜成する必芁がありたす。ポヌタル䞊でいく぀かの項目を入力・遞択するず、数分でリ゜ヌス䜜成が完了し、アクセス甚のキヌが発行されるので、これを䜿甚しおAPIを呌び出せるようになりたす。

  • FaceAPI リ゜ヌス䜜成

刀定に成功するず、以䞋のようなJSONデヌタが返されたす。

{
    'faces': [{
        'age': 28, 
        'gender': 'Male', 
        'faceRectangle': {
            'left': 227,
            'top': 284, 
            'width': 211, 
            'height': 211
            }
        }], 
    'requestId': 'dcf67d28-cf1a-4a72-b1f2-4877eca945d2', 
    'metadata': {'width': 683, 'height': 1024, 'format': 'Jpeg'}
}

デヌタの内、facesが刀定結果ずなっおおり、その䞭のgender, age, faceRectangleキヌで性別、幎代、顔の䜍眮をそれぞれ取埗できたす。

画像内に耇数の顔が含たれおいる堎合、各人物の刀定結果が配列ずしお返っおきたすが、今回は商品棚の前に立っおいるお客さんのみを察象ずしたかったため、最も顔のサむズが倧きい刀定結果を䜿甚するようにしたした。

たた顔が1人も写っおない堎合や、怜出された顔のサむズが閟倀より小さい堎合は、属性刀定凊理をスキップするようにしたす。

䞊蚘のデヌタを、Node-REDやMicrosoft Teamsなどの倖郚サヌビスに送信するこずで、来店者の属性をより芋やすい圢で可芖化するこずができたす。具䜓的な送信方法に぀いおは、埌ほど説明したす。

服装による性幎代、ファッションスタむル掚定

来店者の顔がカメラに写っおいない堎合も、孊習枈みの画像分類モデルを利甚しお、服装から性幎代を刀定するこずができたす。

たた、ファッションのスタむルカゞュアル、シンプルなどを分類するモデルを同様に甚意すれば、お客さんのファッションデヌタを収集するこずも可胜です。ここでは、2台目の防犯カメラで撮圱された顔の写っおいない画像を䜿っお、服装による属性掚定に挑戊しおみたいず思いたす。

画像分類モデルによる属性掚定

服装を基にした性幎代、ファッションスタむルの刀定では、CNNず呌ばれるディヌプラヌニングのモデルを䜿っお画像を分類したす。

CNNに぀いおは、䞀般的な画像デヌタセットImageNet, CIFARなどを䜿っおネットワヌクのパラメヌタヌを孊習したモデルが公開されおおり、デヌタセットに含たれおいる物䜓動物、乗り物などであれば、自力で孊習しなくおもそのたた予枬を行うこずができたす。

しかし、服装から性幎代やファッションスタむルを刀定できる孊習枈みモデルは芋圓たらなかったため、今回はあらかじめ収集したファッション画像を䜿っお、分類モデルを新たに孊習したす。

ただし自力で孊習を行うずいっおも、CNNを䞀から孊習するず粟床や凊理時間の面であたり良くないので、孊習枈みモデルの出力局以倖は特城抜出噚ずしおそのたた䜿甚し、いく぀かの局を远加しお最終的に予枬クラス数分の出力が埗られるようにした䞊で、远加した局の重みのみを孊習するようにしたす。

このように孊習枈みモデルのパラメヌタヌを初期倀ずしお、ネットワヌクの䞀郚たたは党郚の局を远加孊習するこずをFine-Tuningずいい、有甚性が高いこずが知られおいたす。

今回は、TensorFlow Hubずいう孊習枈みモデルを読み蟌むためのツヌルを䜿っお、Fine-Tuning甚のプログラムを実装したした。服装から人物の属性を掚定できるようにするため、性幎代、スタむルごずのファッションコヌディネヌト画像を䜿っお、モデルを孊習したす。察象のファッションスタむルは、8クラスずしたした。

孊習画像の枚数を増やすため、Data Augmentationによっおデヌタの氎増しを行いたした。たた、今回䜿甚したファッション画像はクラスによっお枚数に偏りがあったため、䞍均衡デヌタに察応した損倱関数 を䜿甚したした。 CNNの圢状はInceptionResNetV2をベヌスずし、孊習枈みモデルの出力局の代わりに、3぀の党結合局ノヌド数は1000, 100, 8、掻性化関数はReLUを远加したした。これらの远加局を、Adam Optimizerで最倧100゚ポックEarly Stoppingあり孊習し、最終的なパラメヌタヌを分類モデルに䜿甚したした。

画像の䞀郚を怜蚌甚デヌタずしおモデルの粟床Accuracyを確認したずころ、性幎代刀定ずファッションスタむル刀定でそれぞれ0.40, 0.25ず、䜎めの倀になりたした。

ただし、今回は画像分類自䜓の粟床はあたり重芁でなく、防犯カメラによる属性掚定のプロトタむプ䜜成が䞻目的であったため、このモデルをそのたた䜿甚したした。分類粟床を向䞊させたい堎合は、孊習画像の枚数を増やしたり、もう少し有甚なデヌタを䜿ったりするなどの察応策が考えられたす。

掚定結果ずしお、クラスごずの所属確率が埗られたす。このうち確率が最倧ずなるクラスを取埗するこずで、察象者の性幎代やファッションを䞀意に決定するこずができたす。

セマンティックセグメンテヌションによる人物怜出

䞊蚘の分類モデルに防犯カメラ画像を入力するこずで、来店者の属性を出力できたすが、そのたたでは性幎代やファッションスタむルをうたく掚定するこずができたせん。

なぜなら、画像に察象者以倖の人物や背景などが写り蟌んでしたい、それらが予枬時に悪圱響を及がすためです。実際、今回お菓子売り堎で撮圱した画像では、床に緑色のマットが敷かれおいるため、来店者が緑色の服を着おいるず誀認識されおしたう可胜性がありたす。

そこで、セマンティックセグメンテヌションず呌ばれる画像凊理技術を甚いお来店者の画像䜍眮を特定し、それ以倖の郚分をマスキングするこずで入力画像に䜙蚈な物䜓が含たれないようにしたす。

セマンティックセグメンテヌションずは、画像のどこに䜕が写っおいるかを掚定するもので、工堎での異垞怜知や医療画像の蚺断、自動運転甚のデヌタ䜜成などに掻甚されおいたす。

物䜓の䜍眮を矩圢で抜出する䞀般的な物䜓怜出技術ず比范しお、ピクセル単䜍でより现かく認識できるずいう利点がありたす。

  • MaskR-CNN (匕甚元MaskR-CNN)

今回はセマンティックセグメンテヌションの䞭でも、MaskR-CNNずいう手法を䜿甚したす。

MaskR-CNNは、FasterR-CNNずいう物䜓怜出技術を基にした手法で、セグメンテヌション甚のネットワヌク構造や粟床向䞊のための工倫が远加されおいたす。

はじめに矩圢単䜍での物䜓怜出を行い、物䜓が芋぀かった領域のみピクセル単䜍でクラスを予枬するこずで、効率的にセグメンテヌションを行うこずができたす。

MaskR-CNNに぀いおも、CNNず同様に孊習枈みモデルが公開されおいたす。掚定甚のプログラムは、Kerasで実装された以䞋のコヌドを掻甚させおいただきたした。

FPN, ResNet101ずいうアヌキテクチャに基づいたネットワヌクになっおおり、MS COCOデヌタセットで孊習されおいたす。MS COCOには人のアノテヌションデヌタが含たれおいるため、Fine-Tuningを行う必芁なく、孊習枈みモデルをそのたた人物の怜出に䜿甚するこずができたす。

䞊蚘のモデルで画像䞭の人物䜍眮を掚定し、予枬スコアや領域サむズが閟倀以䞊ずなっおいる堎合に人物ずしお刀定するようにしたした。

人物以倖のピクセルは、党お癜色RGB倀(255, 255, 255)にマスキングしたす。 たたFace APIのずきず同様に、画像䞭に人が䞀人も芋぀からなかった堎合は、属性刀定を行わないようにしたした。

MaskR-CNNによるセグメンテヌション結果の䟋を以䞋に瀺したす。

  • セグメンテヌション結果

掚定スコアの閟倀を0.999にしおも高確率で来店者を怜出するこずができ、領域もかなり现かく抜出できおいるため、MaskR-CNNの性胜が盞圓良いこずが分かりたした。

このセグメンテヌション埌の画像を属性分類噚に入力するこずで、より効果的に性幎代やファッションスタむルを掚定できるようになりたす。

実際に䞊蚘の画像を入力したずころ、「゚ッゞ」なファッションの「20代男性」ず刀定されたした。

さらに、 ドメむン適応 ず呌ばれる技術を掻甚するこずで、コヌディネヌト画像で孊習した画像分類モデルを防犯カメラ画像に適した圢に倉換するこずもできたす。

ただし、そのためには防犯カメラで撮圱した画像を倧量に甚意する必芁があり、今回は怜蚌期間の郜合䞊、詊すこずができたせんでした。デヌタがある皋床溜たったら、怜蚌しおみたいず思いたす。

掚定結果の送信

最埌に、Face APIやオリゞナルの属性分類噚による掚定結果を倖郚のサヌビスに送信し、可芖化する方法を説明したす。

掚定した結果をJSONファむルなどに远蚘しおいっおも良いのですが、䞀々ファむルを開いお確認するのは面倒であり、たた他のセンサの情報商品圚庫、気枩などやその日の来店者の内蚳などをたずめお確認できた方が䜕かず䟿利です。

倖郚のサヌビスを掻甚すれば、数行のプログラムを曞くだけで、そのような可芖化を簡単に実珟するこずができたす。

Node-REDぞのデヌタ送信

䞀぀目は、Node-REDぞのデヌタ送信です。

Node-REDは、䞀蚀でいうずIoTのデバむスやAPI、サヌビスなどを盞互接続するための開発ツヌルです。ダッシュボヌド䞊で、各デバむスから送られた情報を䞀芧衚瀺できるようになっおいたす。

Node-REDに刀定結果を送信する方法ずしお、あらかじめ䜜成したAPIに分析サヌバヌからHTTPリク゚ストを投げる圢で、デヌタを送るこずができたす。

実際の゜ヌスコヌドでは、Node-REDサヌバヌが皌働しおいない堎合でもプログラムが停止しないように、゚ラヌ凊理を行っおいたす。

たた実装䞊の泚意点ずしお、掚定結果のデヌタ型に気を぀ける必芁がありたす。TensorFlowのプログラムで画像の所属クラスを予枬した堎合、倉数の型がnumpy.float32ずなり、そのたたJSONデヌタに倉換しようずするず゚ラヌになっおしたいたす。

そのため、所属確率の倀をPythonのfloat型にキャストしおから送るようにしたす。

Teamsぞのデヌタ送信

二぀目は、Microsoft Teamsでの通知です。Teamsは、Microsoft Office365のチャット゜フトで、bot圢匏でプログラムからメッセヌゞを送るこずもできたす。

チャネルに察しおIncoming Webhookのコネクタを䜜成し、Node-REDず同様にプログラムからデヌタをPOST送信したす。

  • Incoming Webhook 蚭定画面

プログラムが完成したら、whileルヌプなどで氞続的に実行し、お客さんが来るたびに属性掚定を行えるようにしたす。

詊しに1日動かしおみたずころ、その日の性幎代ごずの来店者数がカりントされおいるこずを確認できたした。

  • Node-RED ダッシュボヌド

おわりに

本章では、防犯カメラの画像から、お店に来た顧客の性幎代やファッションスタむルを掚定する方法を玹介したした。

リアルタむム性が必芁な堎合や、分析甚のサヌバヌが甚意できない、あるいは個人情報の芳点からサヌバヌに画像を送るこずが難しい堎合などは、Jetsonやラズパむなどのモバむルデバむスにモデルをデプロむしお、゚ッゞ凊理を行うこずも考えられたす。

ただしその堎合は、本章で玹介した画像凊理モデルをそのたた䜿甚するず蚈算速床やメモリ䞍足の問題があるため、より軜量なネットワヌクを䜿うなどの工倫が必芁ずなりたす。 たた今回はカメラの静止画のみを䜿甚したしたが、動画党䜓や音声などを掻甚するこずでより詳现な情報が収集できるず思われるため、今埌の課題ずしお取り組んでいきたいです。

本蚘事は、2020幎に行われた技術曞兞8に出展した本の内容の䞀郚であり、CCC MARKETING TECH BLOGを、再線集しお転茉したものです。

[著者]
矢柀䞀暹

CCCマヌケティング株匏䌚瀟
デヌタベヌスマヌケティング研究所
技術開発ナニット

楜噚・音響メヌカヌで業務甚音響機噚の゜フトりェア開発、技術マヌケティングなどを経隓した埌、珟職に転向。 画像凊理などの深局孊習技術を掻甚しお、提携店舗向けのIoT゜リュヌションや、ファッション・むンテリア業界向けのツヌル開発、人・商品のマッチングアルゎリズム研究などに取り組んでいる。 Python, Flask, JavaScript, TensorFlow, PyTorchなどの蚀語、フレヌムワヌクを掻甚。 趣味は音楜や映画、料理など。