
Intel iGPU で Florence-2 を動かしてみた (第3回 : 実力テスト編)
0. はじめに
会社で支給されるような普通のWindowsノートPCで、Florence-2を動かしてみたという話です。Florence-2とは、これ。
環境構築から推論に必要なサンプルコードまで、2回に分けて紹介していますので、興味のある方はそちらもご覧ください。
1. 人物の場合 #1
あくまでも私の話になりますが、人物を対象にセグメンテーションする案件は1件しか経験がありません。
一方、人物を対象に矩形をつける案件は、複数件の経験があります。
人物の領域に対して何かをする需要よりも、人物を検出して何かをする需要の方が多いということなんでしょうかね。
前置きはこのくらいにして、結果を見てみましょう。
1.1) 集合写真に対する詳細な説明文
task prompt として<MORE_DETAILED_CAPTION>を与えると、画像に強く紐づいているphraseが生成されます。
SAM2の記事で使った写真の詳細な説明文を生成してみました。

The woman is wearing a yellow coat and a white hat.
There is a boy in a brown jacket standing next to her.
かなりいい線いってますよね。びっくりです。
黄色いコートと白い帽子の子は、child かつ woman とも読めるので、厳密にはちょっと違うのですが、概ね説明内容に間違いはないです。
1.2) 集合写真に対する物体検出 (お任せ)
task prompt を<OD>にすると、Florence-2におまかせの状態で物体検出をしてくれます。
こんな結果になりました。

えらいたくさん検出できてますね。
1.3) 集合写真に対する物体検出 (text prompt)
今度は、childrenという text prompt を与えて、task prompt を<MORE_DETAILED_CAPTION>にしてみましょう。

大人が混じってますが、集団を1つの物体として検出したんですね。正しい。。
じゃあ、childという text prompt だと、どうなるのでしょうか。

あれっ、変化ないですね。んーーーー。
personとhumanも試してみましたが、childrenやchildとほぼ同じ結果でした。
お任せだと、personとしてほぼ正しく検出できてたのに。。
じゃあ、boy. girl. woman. という text prompt だと、どうでしょう。
ピリオドで区切っているのは、複数のwordを与えるという意味です。

惜しいんだけど、びみょーな結果。womanは検出できてませんしね。
気を取り直し、faceならどうだ。

残念ながら、期待はずれでした。
modelとしてbase-ftを使っているのが、大きな要因の気もします。
けど、私の環境ではlarge-ftを試せないので、推測の域を超えません。
最後に、汚名返上のため、a girl wearing a yellow coat という text prompt を与えたところ、こんな結果が。

これはすごいですね。ちゃんと、与えたphraseと画像の一部分が結びついています。もしかしたら、詳細な説明を与えた方がいいのかな。
調子に乗って the second boy from the left という text prompt を与えてみました。

この画像に関しては、なかなかうまくいきませんね。
2. 人物の場合 #2
2.1) 人が重なり合う写真に対する詳細な説明文
続いて、これまたSAM2の記事で使った写真の詳細な説明文を生成してみました。

The shirt is hanging on a hanger.
The table is wooden.
There are clothes on top of the table.
There is a mannequin next to the women.
いや、すごいなぁ。ちゃんと画像から強く紐づくphraseが生成されてますよね。
簡単なphraseではあるものの、状況を正しく捉えています。
2.2) 人が重なり合う写真に対する物体検出 (お任せ)
じゃ、次にお任せでの物体検出です。

画像からはmannequinというwordを紐づけられているのに、お任せで物体検出させるとpersonになってますね。
それ以外は、よくできました。
2.3) 人が重なり合う写真に対する物体検出 (text prompt)
まずは、womanという text prompt を与えて物体検出させてみましょう。

なかなか、思ったような結果になりませんねぇ。
画像からは3人の女性というphraseを導き出せているので、left woman という text prompt だと、どうなるでしょうか。

一瞬、違うんだよなぁと思ったんですが、見方によっては正しいと思えました。
我々から見た左側と、画像の中の彼女たちから見た左側って、真反対なんですよね。
そこも加味して画像とphraseが紐づいているのであれば、正しい結果ですね。
最後に、a woman having a hanger という text prompt を試してみました。

惜しいけど、すごい。
適切な text prompt を探し当てるのが、課題ですね。
3. 風景写真 #1
3.1) 風景写真に対する詳細な説明文
これまた、SAM2の記事で使った写真の詳細な説明文を生成してみました。

There are trees in front of the buildings.
The sky is blue and clear.
There is a lot of sand in the ground.
ホントすごいですよね。画像とphraseが、きちんと紐づいています。
3.2) 風景写真に対する物体検出 (お任せ)
じゃ、お任せで物体検出してみましょう。

buildingじゃなくて、skyscraperなんですね。
お勉強になりました。
3.3) 風景写真に対する物体検出 (text prompt)
まずは、skyscraperという text prompt を与えてみましょう。

なんだろう、この中途半端な感じ。。
じゃあ、buildingという text prompt を与えてみると、どうなるのか。

人物写真の時と同じく、集団を1つの物体として捉えるようですね。
a building でも、同じ結果でした。
次は、物体じゃないものを指定してみます。
blue sky だと、どうでしょう。

これは、意図した通りです。
そして、物体じゃないものに対しても、きちんと検出できているのが、すごいです。
二重の意味で、素晴らしい。
4. 風景写真 #2
最後にもう1つ、SAM2の記事で使った写真の詳細な説明文を生成してみました。
4.1) 風景写真に対する詳細な説明文
この日本の風景を、なんと説明するのか。

There is a white and red sign on a pole.
There are wires above the signs.
合ってますねぇ。
ここまで試した全ての画像に対してそうですが、画像に紐づくphraseがすごいですね。
ちゃんと、言葉の概念と画像の特徴が一致してます。(AI界隈ではgroundedと言います。)
4.2) 風景写真に対する物体検出 (お任せ)
いったい、何を検出してくれるのでしょうか。

恐ろしく、情報量が少ないですね。
こういう風景は事前学習の対象になってなかったんですかね。
4.3) 風景写真に対する物体検出 (text prompt)
では、最後の最後に、詳細な説明文には登場しなかった、cloudy sky という text prompt を与えると、どんな物体を検出するでしょうか。

これは素晴らしい。有終の美を飾りました。
5. 考察
今回は、主にFlorence-2の物体検出の実力を探ってみましたが、従来の物体検出用の学習済みモデルにはない可能性を感じました。
従来の物体検出用のモデルは、予め定義してある物体にしか対応できず、それ以外は「知らんがな」という状態でした。
しかし、Florence-2は画像とwordやphraseとの紐付けができているので、text prompt を通じて概念を伝えると、近いものを検出してくれます。
ただ、常に人間が思った通りの結果になるわけではありません。
上手に使いこなすためには、適切な text prompt を探し出すのが、大きな課題だと思いました。