はじめに
物体検知タスクでポリゴン予測のタスクがあったので備忘録がてら記載しようと思います。
使用するモデルの準備
今回は、セグメンテーションタスクというよりは、一部のデータがバウンディングボックスではなくポリゴンデータになっているというタスク
MMDetectionでポリゴンデータが使えるモデルを確認すると以下のモデルが使えるようでした。
・htc_without_semantic_r50_fpn_1x_coco.py
データ準備
基本的に、下の記事にしたがってcocodatasetを準備します。
注意点は、ポリゴンデータを格納する「segmentation」を以下の形とすることです。
(x,yを平坦化して入力)
"segmentation": [[x1,y1,x2,y2,...,xn,yn]]
また、今回はバウンディングボックスのデータは与えられていなかったので、バウンディングボックは以下とします。
"bbox":[x_min,y_min,x_max-m_min,y_max-y_min]
これでcocoデータセットの作成を実施します。
学習
カスタムデータセットを使った学習方法は下を参照ください。
利用するモデルに応じて内容を適時修正ください。
結果
ポリゴンの予測タスクした時の結果をresultという変数に入れると以下の結果になる。
result[0]: bboxの予測領域と予測確率
result[1]: 対象領域のピクセル毎にTrue,Falseのマスク値
(以下のような感じなります。)
array([[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
...,
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False],
[False, False, False, ..., False, False, False]])
今回欲しいデータは、対象領域の輪郭のポリゴンなので以下のように輪郭を求めます。
contours = measure.find_contours(np.array(result[1][i][j]), 0.5)
i:対象のラベル
j:予測により抽出された領域の順番
最後に
日本語の資料が少ないので少し苦労しましたが、MMdetectionでの物体検知については基本的な使い方がわかってきました。
実際に利用しているデータは公開できないので、具体例を出していない分わかりにくいと思いますがご容赦ください。
今後はセグメンテーションなどのタスクを実施していきたいですね。
また、画像処理系が多くなってきたので自然言語処理や音声タスクなども取り組んでいきたいと思います。