ひらめの日常

日常のメモをつらつらと

Sierraで機械学習時に用いる物体検出用アノテーション作成

物体検出用データセット

概要

SSD, YOLO, Faster R-CNN等、物体検出のディープラーニングアルゴリズムは多々ありますが、それらの多くが学習時に「imagenetの重みで初期化→PASCAL VOCのデータセットで学習」という流れを踏んでいます。

PASCAL VOCは、The PASCAL Visual Object Classes Challenge 2007 (VOC2007) Development Kitに各アノテーションの説明が書いてあります。

データセットの例

アノテーションxmlファイル形式で、以下にその一部を挙げます。これは鳥が表示されている画像ですね。 大事なのは、どこに何が位置しているのかをきちんと説明できるフォーマットになっているところです。
f:id:thescript1210:20180318122852j:plain

  • 物体のクラス名(name)
  • 物体の座標(bndbox)
  • 写真そのもので判断できるか(difficult)
<annotation>
    <folder>VOC2007</folder>
    <filename>000040.jpg</filename>
    <source>
        <database>The VOC2007 Database</database>
        <annotation>PASCAL VOC2007</annotation>
        <image>flickr</image>
        <flickrid>97167996</flickrid>
    </source>
    <owner>
        <flickrid>ResQgeek</flickrid>
        <name>?</name>
    </owner>
    <size>
        <width>500</width>
        <height>332</height>
        <depth>3</depth>
    </size>
    <segmented>0</segmented>
    <object>
        <name>bird</name>
        <pose>Right</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>1</xmin>
            <ymin>52</ymin>
            <xmax>384</xmax>
            <ymax>290</ymax>
        </bndbox>
    </object>
</annotation>

自作のデータセットを作る

なぜ作る必要があるのか

VOCのデータセットにクラスがあればいいのですが、必ずしもあるとは限りません。
例えば、トラの物体検出を行いたいと考えた時に、トラのデータセットは存在していません。

その時は、自分で画像に対してbounding boxを作って1画像に対して1つのxmlファイルを作成しなければなりません。そのツールとして「物体検出用の画像アノテーション正解データ作成に便利なツール」で取り上げられていたものが見つかりました。
tzutalin/labelImg
f:id:thescript1210:20180318123606p:plain 手動で囲った結果を自動的にPASCAL VOCと同じ形式のxmlファイルとして出力、保存してくれます。

インストール

インストールですが、前述のサイトの通りに行ってもうまくいきませんでした。

$ brew install qt
$ brew install pyqt
$ make qt4py2
make: *** No rule to make target `qt4py2'. Stop.

こちらのissue(Installation in macOS SIerra: No rule to make target qt4py2. Stop.)と同様のエラーが出てmakeできません。pythonのversionやqtのversionを変更していじってみましたが、同様のエラーが出ます。

時間を取られすぎていたので、下のこちらの方が提示してくれているパッケージをインストールし、アプリとして使いました。
jiyeqian/labelImg labelImg_qt5py3_mac_latest
f:id:thescript1210:20180318125127p:plain

エラーが出ている理由をきちんと突き止めてはいない(3/18現在、githubのissueもopenのままです)ので、わかりしたいアップデートしたいと思います。