データ分析コンペティション「Nishika」で開催された「ケーブルコネクタの種類判別」に参加し、12位で銅メダルの成績を残せました!
今回のコンペも、私の好きな画像分類のタスクだったので、結果も残せてよかったです。
また、USBケーブルなどのコネクタの種類を判別するという超身近な題材だったので、とても楽しく取り組めました。
では、振り返って参りたいと思います。
1.全体構成
今回のコンペは、多種多様に細分化されたケーブルコネクタの画像およそ数千枚についてケーブルの種類を正確に分類できる多クラス分類するコンペでした。
データの特徴としては、ケーブルコネクタだけが写っているのではなく、一般のご家庭等で撮影されたと思われる、背景も明るさもサイズもバラバラで統一感のない画像でした。中にはピントすらあっていない画像もあってなかなか苦戦しました。
物体検出モデルで、ケーブルコネクタの位置を検知して分類するモデルにもチャレンジしてみたのですが、なかなか精度が出せず、結局、慣れ親しんだEfficientnetのモデルを採用しました。
今回は、あまり手の込んだことはやりませんでしたが、各モデルで交差検証時に出力したfoldごとの出力を、そのモデルだけで平均をとるのではなく、全モデル分の出力の加重幾何平均をとって全体の予測値とする工夫をすることで精度を上げることができました。
2.前処理
前処理については、ほとんど何もせず、計算量を減らすために画像サイズを512×512に変更すうところだけを実施しました。
時間があれば、水増し等についても試せばよかったとも思いましたが、リソースをEfficientnetの学習の方に使うことを優先しました。
【前処理】
こちらは、訓練データ、テストデータの両方に適用する共通の処理です。
処理内容 | |
---|---|
サイズ変更 |
cv2.resize()を使って、画像サイズの変更を実施。 今回は512x512に変更。 |
3.モデル構築
全体としては、Efficientnetのb0~b5で学習をして、予測値を加重幾何平均をとることで、ensembleしました。
ensembleの方法としては、各モデルのfoldごとに、検証データの予測値の加重幾何平均をとって、精度がよい加重を採用しました。
最終的に6モデル×5foldの学習済みモデルでテストデータの予測を実施して、検証データで精度が良くなった加重を使った加重幾何平均を最終的な提出予測値としました。
このモデルで提出したファイルで、最終スコア:0.967383 となり、全体で12位で、銅メダル圏内に入ることができました。
4.感想
今回のコンペは、ケーブルコネクタの種類を判別するとても身近なコンペでした。
衛星データ分析プラットフォームのSolafuneで開催されている 市街地画像の超解像コンペ と並行して取り組んでいたので、俯瞰的な画像と、目の前の生活画像とを行ったり来たりしつつも、コード上では似たような処理もあったりするところが面白かったです。
技術的には、Yoloでの物体検出モデルや、データの水増し等も、いろいろ試してみたかったのですが、リソースの利用時間の制限でなかなか取り組めなかったのは残念でした。早く半導体の価格が下がってGPUマシンを購入したいです。
5.謝辞
最後となってしまいましたが、本コンペを運営してくださいました、Nishika の運営の皆様、データを提供してくださいましたサンワサプライの皆様、一緒にコンペに取り組んでいらっしゃった皆様、Twitter上でやりとりを実施させていただいた皆様に心より感謝申し上げます。
引き続き、このコンペで身に着けた知識や経験を生かして、社会に還元できるよう取り組んでまいりたいと思います。
【過去記事】
G検定、E資格の取得から、これまでに取り組んできた道のりは以下にまとめております。何かのご参考にしていただければ幸いです。