![セグメンテーション検出犬](https://poncotuki.com/wp-content/uploads/2020/11/Segmentationz_dog.png)
AIの「物体検出」にはBOX検出型とセグメンテーション検出型があります。セグメンテーション検出とは、画素の単位で物体の形をなぞって検出するものです。
自動運転でセンターラインを認識したり、医療でガン細胞の形状を把握するというように、BOX検出よりも正確な位置情報が必要なシーンに使われます。
画素の単位で認識させるためには高度なモデルが必要ですし、学習もデータもそれなりの量が必要になります。
ところがこのセグメンテーション検出、Pythonライブラリで提供されているため簡単に実行できることができます。せっかくなので体験してみてください。以下の手順をそのまま行うだけです。
概要
ここでやろうとしている全体像は以下になります。
- AIモデル : ディープラーニング>CNN応用>セグメンテーション型物体検出>FCNモデル
- 環境 : Google Colaboratory(Linux環境がある人は不要です)
- 目的 : 準備された学習済みモデルを用いてテスト用の画像または自分の画像を物体検出にかけてみる。
セグメンテーション検出型物体検出は、画素レベルで物体の位置を特定しながら分類も行います。
セグメンテーション型物体検出で実際に使われているモデルは、FCN、Unet、Segnet、Mask-RCNN、Deeplabといったものがあります。今回のFCNは最も基礎的なものです。
Google Colaboratory はブラウザ上でプログラムを書いたり実行して結果を見たりできるLinux環境です。作ったファイルはGoogleドライブ上に保存されます。Linux環境のある人はPythonをインストールした環境で試してください。(「FCNのインストール」から始め、!や%を除いて実行します。)
Google Colaboratoryは90分間操作がないと環境がリセットされるので注意してください。
FCNの利用手順
Colaboratoryへのログイン
1.ブラウザを開き、下記へアクセスしてください。
https://colab.research.google.com/notebooks/welcome.ipynb?hl=ja
2.右上が「ログイン」と表示される場合は、これをクリックします。
![Colabアクセス](https://poncotuki.com/wp-content/uploads/2020/10/colab01a-e1604231047670-1024x736.png)
3.Googleアカウントを持っている人はそのままログインを、持っていない人は「アカウントを作成」を行ってください。
![Colabログイン](https://poncotuki.com/wp-content/uploads/2020/10/colab02a-e1604231023493-1024x776.png)
ノートブックの作成
通常はノートブックにプログラムを書いていくのですが、今回は公開プログラムのダウンロードやコマンドを実行するための環境としてノートブックを使います。
4.ログイン後、Colaboratory画面の上部で「ファイル」→「ノートブックを新規作成」を実行します。
![Colab新規作成](https://poncotuki.com/wp-content/uploads/2020/10/colab03a-e1604231001562-1024x782.png)
5.上部にあるのがプログラム名になるので変更してください。例:「command_fcn.ipynb」
![m2detノートブック名](https://poncotuki.com/wp-content/uploads/2020/11/m2det01-e1604230616541-1024x170.png)
Googleドライブのマウント
Colaboratoryで生成したファイルが後で見えるように、Googleドライブとの連携をします。
6.「+コード」を押し、追加されたブロックに下記を書いて実行してください。
1 2 3 4 |
from google.colab import drive drive.mount('/content/drive') %cd '/content/drive/My Drive/' !ls |
![m2detドライブ](https://poncotuki.com/wp-content/uploads/2020/11/m2det03.png)
7.実行すると認証を行うためにURLを参照するよう促されますので、クリックします。
![Colabドライブ認証](https://poncotuki.com/wp-content/uploads/2020/10/colab20a-e1604230755260-1024x714.png)
8.Googleログインの画面が出たらログインし、次の画面で「許可」を押します。
![Colabドライブ認証2](https://poncotuki.com/wp-content/uploads/2020/10/colab21a-e1604230715552-1024x767.png)
9.認証キーが表示されるので、コピーボタンで記憶させます。
![Colabドライブ認証3](https://poncotuki.com/wp-content/uploads/2020/10/colab22a-e1604230675840-1024x814.png)
10.元の画面に戻り「Enter your authorization code:」に Ctrl+v でペーストして「Enter」を実行します。これで認証完了しマウントされます。
![Colabドライブ認証4](https://poncotuki.com/wp-content/uploads/2020/10/colab23a-e1604229725913-1024x500.png)
FCNのインストール
11.「+コード」を押して下記のように実行し、FCNをインストールします。
1 |
!pip install fcn |
検出画像の準備
<サンプル画像をダウンロードして試す場合>
12.「+コード」を押して下記のように実行し、画像1枚をダウンロードします。
1 |
!wget https://farm2.staticflickr.com/1522/26471792680_a485afb024_z_d.jpg |
<自分が持つ画像を検出する場合>
12.Colaboratory画面の左上のマークを 右クリック→「新しいタブで開く」で開きます。
![ColabGドライブへ](https://poncotuki.com/wp-content/uploads/2020/10/colab14a-e1604230849943-1024x783.png)
マイドライブを選択し、検出したい画像をドラッグ&ドロップでフォルダへ置いてください。
![FCN画像アップロード](https://poncotuki.com/wp-content/uploads/2020/11/fcn01.png)
検出の実行
13.「+コード」を押して下記のように実行します。実行すると学習済みモデルがダウンロードされ、検出に移ります。Googleドライブに検出結果の画像が出力されます。(--GPU -1 というのはGPUを使わないという意味です。)
1 2 3 |
!fcn_infer.py --img-files ./26471792680_a485afb024_z_d.jpg --gpu -1 -o ./result または !fcn_infer.py --img-files ./自分がアップロードした画像名 --gpu -1 -o ./result |
検出結果の確認
14.Colaboratory画面の左上のマークを 右クリック→「新しいタブで開く」で開きます。
![ColabGドライブへ](https://poncotuki.com/wp-content/uploads/2020/10/colab14a-e1604230849943-1024x783.png)
15.「マイドライブ」を選択 → 「result」フォルダを開きます。
![FCN結果確認](https://poncotuki.com/wp-content/uploads/2020/11/fcn02.png)
16.検出結果画像ができているのでダブルクリックで確認します。結果画像は、左から元画像、検出画像、2枚を重ねた画像、が並んでいます。
![FCN結果画像](https://poncotuki.com/wp-content/uploads/2020/11/fcn03.png)
学習済みモデルを使ったFCNの体験は以上です。
自分の画像を検出してみるほうが物体検出している実感が沸くので試してみてください。
結果としては、割とざっくりした検出をしていると思います。FCNモデルとしてはこれが限界のようです。もっと正確に輪郭通り検出したい場合は、違うモデルを使いチューニングを施していくことになります。
学習も体験したいところですが、大量のデータと時間が必要なためColaboratory上で実行するには無理があります。自分でGPUマシンを用意するのは値が張るので、AWSなどのクラウドを利用するのがいいでしょう。
クラウドの利用方法もこのブログで紹介していきます。