web-dev-qa-db-ja.com

Mobilenet SSD入力画像サイズ

カスタムデータセットでMobilenet SSDモデルをトレーニングしたいのですが。

モデルの再トレーニングのワークフローを調べたところ、構成ファイルのimage_resizer {}ブロックに気づきました。

https://github.com/tensorflow/models/blob/d6d0868209833e014074d6cb4f32558e7acf2a6d/research/object_detection/samples/configs/ssd_mobilenet_v1_pets.config#L4

ここのアスペクト比は300x300のように1:1にする必要がありますか、それともカスタムの比率を指定できますか?

データセット画像はすべて960x256です。高さと幅にこのサイズを入力するだけでいいですか?または、アスペクト比が1:1になるようにすべての画像のサイズを変更する必要がありますか?

6
Tesla.

モデルファイルで(リンクに従って)高さと幅を選択し、モデルをトレーニングして操作する入力画像の形状にします。必要に応じて、モデルは入力画像のサイズを指定されたサイズに変更します。

したがって、これは入力画像のサイズになる可能性があります(ハードウェアがそのサイズでモデルをトレーニングして操作できる場合):

image_resizer {
    fixed_shape_resizer {
        height: 256
        width: 960
    }
}

選択は、トレーニング画像のサイズと、そのサイズのモデルをトレーニング(および使用)するために必要なリソースによって異なります。

このサイズのモデルはRaspberry Piで問題なく動作するため、通常は512x288を使用します。このサイズで、さまざまなスケールでトレーニング画像を準備します。そのため、画像リサイザはトレーニング中に機能しません。

推論のために、私は1920x1080で画像を入力するので、画像リサイザーはそれらをMobilenetに渡す前に512x288にスケーリングし、アスペクト比を維持します。

ただし、このような歪みは自然に発生するため、私のドメインではアスペクト比は重要ではありません。

ですから、トレーニング画像のサイズを使用してください。

1
Alaric Dobson

そのままにしておくと、ネットワークは実際の画像サイズに関係なく、入力画像のサイズを300x300に変更します。他に試すことができるのは、image_resizerブロックを以下の変更に置き換えることです。

image_resizer 
{
  keep_aspect_ratio_resizer 
  {
    min_dimension: 600
    max_dimension: 1024
  }
}

、[min_dim、max_dim]の範囲で、入力画像を整形せずにネットワークにフィードします。これが機能するかどうかはわかりませんが、ssd検出器は入力画像を正方形にサイズ変更する必要があると考えています。ハードイメージを手動で変更する必要はありません。

0
g.smoother