物体検出(YOLOv3)による洗濯表示の検出

Wash Mark Checker

以前書いた、洗濯表示しらべくんのその後。

rkdora.hatenablog.com

洗濯表示しらべくんから名前を変え、 Wash Mark Checkerとして開発を再スタートした。

英語名にしたのは、洗濯表示が世界共通のものであることから世界中で使えるものにしたいと考えたため。

相棒のたなっちとともに開発を行った。

tanacchi.hatenablog.com

洗濯表示しらべくんは、洗濯表示を一つずつしか調べることが出来なかった。

f:id:rkdora:20200324230250p:plain

トリミングがとても面倒で、洗濯表示一覧から探すほうが正直楽だった。

Wash Mark Checkerでは、洋服タグ内の洗濯表示をまとめて調べることができるようにした。

f:id:rkdora:20200324230311p:plain

以下、プレゼンとスライド。

youtu.be

開発期間

2019/09/20 ~ 12/21

12/21がチャレキャラ2019の発表会だった。

前半はほとんど手を付けておらず、実際に開発していた期間は2~3週間くらい。

開発の流れ

1. 洋服タグの画像を集める

200枚程度用意した。

2. アノテーション

集めた洋服タグの画像内に含まれる洗濯表示一つ一つに対して、手作業でアノテーションを行う(範囲選択・分類)。
めちゃくちゃしんどかった。

つまずいた点

はじめは、すべての洗濯表示に対して同じクラスに分類させようとしていた。
思い描いてた流れとしては、

  1. 洋服タグから洗濯表示の部分をトリミングする。
  2. CNNを用いて、41種類に分類する

しかし、うまくいかなかった。

はじめから41種類のクラスに分類させるようにしたところうまくいった。

3. YOLOv3で学習を行い、重みを保存

CPUで学習を行ったため、かなり時間がかかった(4日間程度)。
研究室で余っていたPCに働いてもらった。

参考記事:

【物体検出】keras−yolo3の学習方法 | エンジニアの眠れない夜

つまずいた点

GPUでやりたく、Google Colaboratoryで学習を試みた。しかし、そのままのコードでは動かなかった。 Google Colaboratory上で動かすために、コードを改変させることが必要だったと思われるがよくわからなかった。

4. FlaskでWEBアプリ化

ブラウザからアップロードした画像に対して、洗濯表示の検出ができるようにした。

つまずいた点

iOSからアップロードされる画像が90°回転してしまう問題に直面した。 調べてみると、Exifという画像に含まれる情報によるものだった。
Exif対策を行うことで、対処できた。

参考記事:

【Python】EXIF情報に合わせて画像を回転させる|MAX999blog

5. レンタルサーバーにデプロイ

ロリポップ!マネージクラウドにデプロイした。(2020年3月現在、非公開)

つまずいた点

大きなファイルをデプロイするとき。重みファイルが200MB以上あったため、Google Driveにアップロードしたものをwgetによってダウンロードするようにした。

つまずいた点

初回起動時、tensorflowの起動に時間がとられタイムアウトしてしまう。 起動時のコマンドに-t 300とすることで、タイムアウトまでの時間を300sまで伸ばすことができるようになった。

問題点

20分で終了してしまうため(レンタルサーバーの仕様)、しょっちゅう初回起動になり起動までの時間を待たなくてはいけなくなる。

精度

8割程度の正答率。 マイナーな洗濯表示になればなるほど、正答率が下がるイメージ。
マイナーな洗濯表示を学習させるために、一覧の画像を学習させてみたりした。

感想

洗濯表示しらべくんで満足せずに、洋服タグから複数の洗濯表示を一気に識別することにこだわり続けることが出来てよかった。 イベントなどで多くの人に「欲しい!」と言ってもらえたときがめちゃくちゃうれしかった。

目の前の卒論から逃げるように開発をしていたが、終わってしまったので卒論に集中しなければ。。。(執筆時12月末)

リポジトリ github.com