こんにちは、@yshr10icです。
SIGNATEで開催された、魚群検知コンペに参加しました。
結果としては、Public 13位、Private 12位の銀メダルでした!
今回、初めての物体検知コンペ、初めてのチーム参加だったので、その辺りのことに触れながら振り返りをしたいと思います。(情報公開ポリシーとして実行単位のソースコードの共有が不可のため、実装に関する言及はしません。)
コンペの概要
ドローンから海面を空撮した画像に対して、魚群が画像内のどこにいるのかを検知するモデルを作成し、その予測精度(今回はMAP@IoU=0.3)を争います。モデルはエッジデバイスでの運用を想定して、ファイルサイズが
解法
モデルはFasterRCNNでバックボーンはResNet50を使用しました。今回物体検知のコンペは初めてだったため、torchvisionのチュートリアルを参考に実装しました。
うまく行かなかったこと、試せなかったこと
うまく行かなかった(スコアが上がらなかった)こと、試せなかったことを箇条書きにですがまとめました。
- バックボーンをresnet101やresnextなどに変更したが、学習が進まず
- WBFでのアンサンブルを試したがスコアが下がってしまった
- YOLOやSSDなどの他のモデルを試すことはできなかった
- TTAを試すことはできなかった
普段使っていないPyTorchを使ったり、初めての物体検知であったりだったので、コードを変えるたびにエラーとの戦いとなり、実装力の無さを痛感することとなったコンペでした。
初めての物体検知コンペ
前述の通り、今回が初めての物体検知コンペへの参加でした。大まかにtorchvisionでの実装→pytorch-lightningでの実装→データ拡張やWBFなどのアンサンブルの実装というような流れでした。特にpytorch-lightningでの実装では、Kaggleのnotebookなどを参考に実装してもエラーが出たり学習がまったく進まなかったりと、1〜2週間くらいは時間を溶かしたと思います。
データ拡張やアンサンブルなどに関しては、画像分類タスクと異なり、バウンディングボックスの情報も画像と一緒に変換しないといけないので、その実装に非常に苦戦しました。
TTAなど途中で実装を断念したところもありましたが、がっつり?PyTorchを触ることもできたので、非常に良い経験ができたと思っています。
初めてのチーム参加
初めてと書いていますが厳密には初めてではなく、魚群検知コンペとほぼ同時期に開催されていたオフロードコンペでチームを組んでいた方と、魚群検知コンペも面白そうなのでやってみようということでチームを組みました。
チームを組んだ方とは、かめさん(@usdatascientist)というアメリカでデータサイエンティストとして働いている方のオンラインコミュニティであるDataScienceHubで知り合いました。
チームを組んでみて、個人的には以下の点で非常に良かったと思っています!
- 自分にはない知見やアイデアを得ることができる
- 作業を分担することができる
- モチベーションを維持しやすい?
- 私たちのチームでは結構早い段階でそこそこ良いスコアを出してしまい、その後1ヶ月ほどスコアを更新することができませんでした。これならスコアが上がるはず、と色々試してみてもスコアが全然上がらなかったので、1人だったら途中で諦めてしまっていたかもしれません。
SIGNATE Expertになれました
本コンペでは、Public 13位、Private 12位の銀メダルを取ることができました。また、同時期に開催されていたオフロードコンペの認識精度部門、推論速度部門でも銀メダルを取ることができたため、SIGNATE Expertの称号になることができました!
参考サイトhttps://t.co/htRWNWzX7u— yshr10ic (@yshr_10ic) February 15, 2021
まとめ
初めての画像系のコンペで複数のメダルを獲得することができ、非常に嬉しかったです。ただ、実装力という意味では課題がたくさん出てきたので、今後も画像系のコンペに挑戦し、実力を付けていきたいと思います!
参考にしたサイトや本など
ベースとなる実装はこちらを参考にさせていただきました。
スコアを上げるためのアイデアなどはこちらを参考にさせていただきました。
PyTorchはこちらを参考に勉強しました。
(2024/11/21 00:56:50時点 Amazon調べ-詳細)
(2024/11/21 15:21:12時点 Amazon調べ-詳細)