Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
3
Help us understand the problem. What is going on with this article?
@ryo19841204

Neural Network Console Challenge 人数による分類

More than 1 year has passed since last update.

はじめに

今回 Neural Network Console Challenge(以下、NNC Challenge)というコンテストに参加しました。

コンテスト概要

NNC ChallengeはSonyが提供している Neural Network Console(以下、NNC)を用いてPIXTAの写真素材を画像分類するというものです。
※学習用データ提供:PIXTA

コンテストに応募すると写真素材1万枚がダウンロードできます。その中から好きな枚数を使用して学習を行います。

テーマは次の4テーマ
1.『人物画像をNNCで学習させ新しいオノマトペ(擬音語/擬声語/擬態語)の画像カテゴリ分類を作り出す』

2.『画像内人物をNNCで学習させ画角/焦点距離による画像分類を作り出す』

3.『NNCで画像を学習し人の感情によって分類』

4.『上記以外のチャレンジテーマを自由に設定しての応募』

テーマ選択

今回チャレンジしたのは人数による画像分類です。4テーマのうち4番目です。

アノテーション(ラベル付け)

画像に対してテーマに沿ったラベル付けを行います。
今回は1人なら0、2人なら1としていき、6人以上を5にすることにしました。

流れとしてはこんな感じです。
1.まずは画像を全体的に確認して、どの様な画像があるのか確認
2.画像のサイズが640×426のファイルを抽出(サイズが数パターンあったため)
3.顔がわかる、人のシルエットがわかる、などの人が判別できる画像を抽出
4.人数毎に該当するラベルのディレクトリにドラッグ&ドロップ

画像のサンプルと各ラベルの枚数

label 枚数
0 pixta_49730106_S.jpg pixta_45613866_S.jpg pixta_42044199_S.jpg pixta_28034355_S.jpg 2,675
1 pixta_49730332_S.jpg pixta_37768975_S.jpg pixta_37618239_S.jpg pixta_21936400_S.jpg 1,229
2 pixta_47212623_S.jpg pixta_39311325_S.jpg pixta_37769224_S.jpg pixta_16545052_S.jpg 553
3 pixta_44043076_S.jpg pixta_38359608_S.jpg pixta_26211703_S.jpg pixta_16544821_S.jpg 247
4 pixta_43256100_S.jpg pixta_40738543_S.jpg pixta_22461703_S.jpg pixta_27060009_S.jpg 93
5 pixta_60365828_S.jpg pixta_60365663_S.jpg pixta_41667077_S.jpg pixta_21910027_S.jpg 266

※学習用データ提供:PIXTA

DataSet

アノテーションで分類した画像を元にNNCを使用してDataSetの作成を行います。
DataSet.png
画像サイズは今回640×426の画像を使用しているので、640×426を指定します。
train:testを8:2で作成しました。
trainが約4,000枚、testが約1,000枚になりました。

モデル作成

以前作成したCNNのモデルを流用したものを使用しました。
人物を検出するようにアノテーションした方がいいと思ったのですが、アノテーションから含めての作業は初めてだったので、とりあえずCNNで行うことにしました。
nnc_challenge.png

複数条件のCNNをConcatenateで結合して次の層に渡すというイメージです。
また、入力データの水増しのためにInput後にImageAugmentationを使用しています。

学習

学習は主にローカルPCを使用しました。
GPUはGeForce GTX1070

NNC Challengeではクラウド環境のGPU利用枠10,000円分が使用できるということで、クラウド環境も利用しました。
※クラウドのGPUはTesla V100x4を使用

300epochの学習時間比較

ローカルPC
GeForce GTX1070
クラウド
Tesla V100x4
CPU - メモリ不足で動かず
GPU 06:10:08 00:48:45

Tesla V100x4だと1/7以下の学習時間になりました。

学習結果

トレーニング結果
nnc_challenge_training.png
training error(赤の実線)は下がっていますが、validation error(赤の破線)が0.6付近で停滞しています。
さらにvalidation errorが250epoch辺りから若干上がり気味なので、過学習とも考えられます。

評価結果
nnc_challenge_result.png
Accuracy(正確度)が0.845、まずまずの結果というところでしょうか。
実用レベルではなさそうです。
各ラベル別に見ると、ラベル4(5人)の精度が他のラベルと比べて低い結果となりました。
Precision(精度):0.625
Recall(再現率):0.4761

NNCで分類した画像の一例

label
0 pixta_16544787_S.png pixta_21936133_S.png pixta_24851264_S.png pixta_41089359_S.png
1 pixta_16544779_S.png pixta_20419893_S.png pixta_21910207_S.png pixta_28958771_S.png
2 pixta_16544896_S.png pixta_21206790_S.png pixta_22374404_S.png pixta_37769251_S.png
3 pixta_16544761_S.png pixta_24243985_S.png pixta_34474268_S.png pixta_46865934_S.png
4 pixta_22461731_S.png pixta_22461744_S.png pixta_29322517_S.png pixta_34474274_S.png
5 pixta_21910055_S.png pixta_21936258_S.png pixta_22461732_S.png pixta_23165756_S.png

※学習用データ提供:PIXTA

考察

モデルやパラメータを変更したり、NNCの構造自動探索機能を使用してみましたが、精度の向上がほとんど見られなかったことから、精度を向上させるためにはアノテーションのやり方やモデル全体の見直しが必要だと考えられます。

またラベル4の精度が低い原因として、ほかのラベルよりも画像枚数が少ないため(100枚以下)と考えられます。画像の枚数が多いラベル0やラベル1は他のラベルよりも正解率が高い傾向にあると言えます。
ラベル4(5人)の枚数が少ないのであれば6人以上ではなく、5人以上でまとめたDataSetだと違う結果になるかもしれません。

追記(2020/3/31)
5人以上でまとめたDataSetで試してみました。
https://qiita.com/ryo19841204/items/4e083c427eeb149bc86f

感想

今回、初めてアノテーションから作業しましたが、かなり大変でした。

元々は3の感情による分類を行うつもりだったのですが、アノテーションの段階でこの表情は何に分類しようか?複数人写っている写真の場合はどうするか?などなど作業が止まり中々進まず。。。
気を取り直して、取り合えず人数で分類できるようになれば1人の写真を抽出できるし、その後のアノテーションも楽になるはず。今後のことを考えると一石二鳥。という感じで人数での分類に変更しました。

NNCを使用した感想ですが、NNCはネットワークの設計がGUIで出来るのでプログラムより作業がかなり楽です。更にパラメータの調整もある程度自動でやってくれるため、試行錯誤もやり易いと思います。
また、評価結果の確認もやり易いです。
今後、さらに使いやすくなっていくのではないかと期待します。

3
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ryo19841204
普段はSE/プログラマとして仕事をしています。 最近はWeb系の勉強をしています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
3
Help us understand the problem. What is going on with this article?