Home About Contact
Semantic Segmentation , TensorFlow.js , Demo

パンの写真 120枚 を使って Deeplab V3 plus (Semantic Segmentation)

my-bread-120-demo

自分で用意したパンの写真 120枚 を使って、この例に従って Multiclass semantic segmentation using DeepLabV3+ モデルをつくりました。

このページでそのモデルを使って画像からパンのピクセルを推測するデモ を実行できます。Chrome または Firefox で作動確認しています。 いわゆる SPA アプリなのでそのページ内で処理が完結しています。推測に使う画像がサーバやインターネットにアップロードされることはありません。興味ある方はお試しください。

冒頭の画像にもあるようにこのモデルが完璧に「パン」のピクセルを推測できるわけではありません。 たった 120枚の画像からのトレーニングなので、それほどの精度は出ません。 冒頭画像で言えば、パイン材の机の節の部分や中央上部の机も間違って「パン」のピクセルと推測してしまっています。 それでも、ネットからいくつかのパン写真を入手して推測させてみたのですが、 トレーニングに使用した画像に近い形の画像・・・つまり、商品紹介用にパンが皿とかトレイに置かれて中央に配置されているような画像であれば、 そこそこの精度は出ています。 なお、120枚のトレーニング画像でそれなりにパンピクセルを識別できているのは、ResNet50でトレーニング済みの重みを使用しているのと おそらく、この ResNet50 で学習対象となったデータにパンに類似したものが含まれていたのではないかと思います。

For this example, we use a ResNet50 pretrained on ImageNet as the backbone model, and we use the low-level features from the conv4_block6_2_relu block of the backbone.

過去には TensorFlow Hub などで提供されている既存のモデルでの推測をしてきましたが、自分が推測させたい対象のモデルが提供されていなければそれより先に行けない、という欲求不満がこれで解消できるかもしれません。

Semantic Segmentation に関心を持った動機は、 これを使えば、DTPで制作するカタログなどの写真データの自動トリミングなどに使えるのではないか?という期待です。 例えば、仮にパンカタログ制作案件があったとして、大量のパンの写真を紙面に割り当てられたそれぞれ異なる画像領域のサイズにあわせて 自動トリミングするというタスクです。 写真ごとにパン実体の写っているピクセル(領域)が自動計算できれば、パンを中央に配置するとか、パンが途中で切れてしまわないように、 適切に自動トリミングできのでは?ということです。

現実的に考えると、画像内のパンのピクセルが判定できたくらいで、それがDTP業務にそのまま適用できるとは考えにくいのですが、 まあ、今までできないと思っていたことができるようになったのは確かです。