Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
IEEE's Signal Processing Society 10th Solutionと...
Search
tereka114
March 15, 2022
Programming
0
87
IEEE's Signal Processing Society 10th Solutionと得られた学び
Kaggle Meetup #4
Kaggle IEEE's Signal Processing Society - Camera Model Identification
tereka114
March 15, 2022
Tweet
Share
More Decks by tereka114
See All by tereka114
トラブルがあったコンペに学ぶデータ分析
tereka114
2
790
Harnessing Large Language Models for Training-free Video Anomaly Detection
tereka114
1
1.4k
KDD2023学会参加報告
tereka114
2
490
Prompting Large Language Models with Answer Heuristics for Knowledge-based Visual Question Answering
tereka114
0
340
Mobile-Former: Bridging MobileNet and Transformer
tereka114
0
1k
DER: Dynamically Expandable Representation for Class Incremental Learning
tereka114
0
150
Jupyter Notebookを納品した話
tereka114
0
340
Multi Scale Recognition with DAG-CNNs
tereka114
0
100
How to use scikit-image for data augmentation
tereka114
0
190
Other Decks in Programming
See All in Programming
Quine, Polyglot, 良いコード
qnighy
4
630
CPython 인터프리터 구조 파헤치기 - PyCon Korea 24
kennethanceyer
0
250
レガシーシステムにどう立ち向かうか 複雑さと理想と現実/vs-legacy
suzukihoge
14
2.1k
色々なIaCツールを実際に触って比較してみる
iriikeita
0
320
3rd party scriptでもReactを使いたい! Preact + Reactのハイブリッド開発
righttouch
PRO
1
590
Why Jakarta EE Matters to Spring - and Vice Versa
ivargrimstad
0
770
推し活の ハイトラフィックに立ち向かう Railsとアーキテクチャ - Kaigi on Rails 2024
falcon8823
6
2.7k
Snowflake x dbtで作るセキュアでアジャイルなデータ基盤
tsoshiro
2
500
GitHub Actionsのキャッシュと手を挙げることの大切さとそれに必要なこと
satoshi256kbyte
5
420
シェーダーで魅せるMapLibreの動的ラスタータイル
satoshi7190
1
470
as(型アサーション)を書く前にできること
marokanatani
2
340
ECS Service Connectのこれまでのアップデートと今後のRoadmapを見てみる
tkikuc
2
240
Featured
See All Featured
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
329
21k
Visualization
eitanlees
145
15k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
47
2.1k
Speed Design
sergeychernyshev
24
610
What's in a price? How to price your products and services
michaelherold
243
12k
The World Runs on Bad Software
bkeepers
PRO
65
11k
Rails Girls Zürich Keynote
gr2m
93
13k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
Adopting Sorbet at Scale
ufuk
73
9.1k
Designing for humans not robots
tammielis
249
25k
Transcript
IEEEʻs Signal Processing Society 10th Solution と得られた学び tereka114
⾃⼰紹介 • ⼭本 ⼤輝(@tereka114) • Acroquest Technology株式会社 • 画像認識、⾃然⾔語処理 •
Kaggle Master • https://www.kaggle.com/tereka • のんびりしているエンジニアの⽇記 • http://nonbiri-tereka.hatenablog.com/ • 寄稿記事 • Interface 3⽉号 ラズパイにON!Google⼈⼯知能 • Interface 12⽉号 ⼈⼯知能ウルトラ⼤百科
⽬次 • コンペティションの概要 • チームの解法 • Other Solutions(1st-5th) • チームでの取り組み
• 学んだこと • まとめ
コンペティションの概要
None
None
IEEE's Signal Processing Society - Camera Model Identification • 画像から撮影したカメラを推定する問題を解く。
• 評価指標 • 評価式中wの重みは画像に対する処理内容で決まる。 • 加⼯有り:0.3 • 加⼯無し:0.7
サンプル画像① iPhone 4S
サンプル画像② LG Nexus 5x
サンプル画像③ IPhone 6
カメラの種類 • Sony NEX-7 • Motorola Moto X • Motorola
Nexus 6 • Motorola DROID MAXX • LG Nexus 5x • Apple iPhone 6 • Apple iPhone 4s • HTC One M7 • Samsung Galaxy S4 • Samsung Galaxy Note 3
IEEE's Signal Processing Society - Camera Model Identification • ⼊⼒画像が巨⼤な画像
• データを加⼯無しで⼊⼒ができない。 • データをリサイズして⼊⼒する場合、カメラ特有のノイズがなくなるため、精度 向上の観点から望ましくない。 • ⼊⼒するための⼯夫が必要 • ⽬視だと全くわかりません。 • テストデータはunalt, manipがファイルの末尾に付与されてお り、画像が加⼯されているか否かの判断ができる。 • 加⼯なしはほぼ全て解けるので、難しい加⼯ありの画像を解くのが 勝負
加⼯の種類 • JPEG品質 • 70 • 90 • バイキュービック補間を使ってリサイズする。 •
0.5 • 0.8 • 1.5 • 2.0 • ガンマ補正 • 0.8 • 1.2
チームの解法
Our Solution Summary • データセット • 運営配布のデータセット • Grebʼsデータセット(Discussionで公開されたデータセット) •
Pseudo-Labeling • 半教師あり学習の⼿法でテストデータにラベルを付与する⼿法 (p>0.99) • Stacking • 学習時間がかかるため、2Foldsで構築した。 • チームメイト各々で構築した予測結果を結合し、XGBoost, Light GBM でL1を構築した。
Our Solution Summary Pseudo-Labeling • テストデータの中でConfidenceが⾼い(p > 0.99)データにラ ベルを振り、学習データを増強する。 •
ただし、データは変化なしの画像のみに絞り、1116件増加した。 • DenseNet201を利⽤し、336x336のcropとData Augmentation を⾏い、モデルを構築した。
Our Solution Summary Pseudo-Labeling DenseNet201 Training DenseNet201 Testing P>0.99 Glebʼs
External Dataset Training Dataset Testing Dataset Pseudo Labeling Dataset
Our Solution Stacking • Pseudo LabelingとGleb, 提供データセットを⽤いて学習モデル を構築した。 • データセットはStackingのために2分割(A,
B)する。 • チーム内で決めたインデックスに従ってモデルを作成する。 • Training:A -> Testing:B(Stacking Feature) • Training:B -> Testing:A(Stacking Feature) • Training:A+B -> Testing: Testing Dataset
Our Solution Data Augmentation • データ拡張の⼿法は今回の加⼯に準拠する。 • OpenCVを使えば、JPEGの品質、リサイズ(バイキュービック補間)、 ガンマ補正が可能 •
Data Augmentation時に加⼯なしのデータに対して、実⾏した。 • 加⼯後のデータに対してはData Augmentationを実⾏していない。
Our Solution Models • チーム内でモデルを作り続けStackingの準備をした。 • DenseNet201 • InceptionResNetV2 •
ResNet • PCA • Etc・・・ • L1 FeatureからXGBoost, Light GBMを⽤いて、最終的な出⼒ 結果を出⼒した。
Our Solution② Stacking DenseNet201 InceptionRes NetV2 ResNet PCA Glebʼs External
Dataset Training Dataset Pseudo Labeling Dataset Testing Dataset B A Testing Prediction Light GBM XGBoost
最終結果
外部データの取扱について • 終盤のタイミングで、巨⼤な外部データの話がDiscussionの Threadに出てきた。 • この外部データはDiscussion内でシェアをされていなかった。 • Exifタグを確認することで撮影デバイスを確認できる。 • 判定はtiffなのでExifタグの確認はできない。
• 後ほど、運営(Inversion⽒)が登場し、外部データの取扱につ いての⽂⾔を⼊れ忘れたそうで、そのまま競技続⾏になった。 • 先に集めていた⼈はデータセットの⾯で⾮常に有利、ソリューション を確認すると上位チームは膨⼤な量を集めており、精度に⼤きく影響 した。
Other Solutions
1st Place Summary ([ods.ai] STAMP) • データセット • Flickr+Yandexから取得した。 •
学習データには20,000件を利⽤し、判定データに50,000件使った。 • 解像度やカメラタイプ、写真の品質でフィルタリングを実施した。 • モデル • DenseNet, ResNet, InceptionResNetV2, Xception • Crop Size512 + TTA
1st Place Summary ([ods.ai] STAMP) • Power Averageやいくつか調整を⾏ったが、Overfitになった。 (Public 0.991/Private
0.985) • Hold Outにより、XGBoost, Light GBM, Kerasを使って Blendingを実施した(Public 0.986/Private 0.989)
2nd Place Summary ([ods.ai] GPU_muscles_SPcup_eligible) • データセット • Flickr+Yandex+Fotkiからクローリングして、取得した。(500GB+) •
画像のサイズは480、Data Augmentationを⾏い、推論を⾏う。 • モデル • DenseNet 201, DPN92, Resnextを⽤いている。
3rd Place(FIIGO_SPcup_eligible) • データ • 提供データセットとGlebʼs datasetを利⽤ • それに加えて各モデル450枚ほどの画像を追加した。 •
中央の1024x1024パッチのみを利⽤、90度回転を実施 • XceptionNet、XceptionNet、Inception v3、InceptionResNet v2、 DenseNet121(各々それぞれ⼊⼒サイズが異なる)
4th Place(Guanshuo Xu) • データ • 提供データセット+ Glebʼsデータセット • 学習データは中央から選択した80%の画像を使って⾏う。
• テスト画像の端は統計的に他と異なる。 • ランダムで切り抜いた画像480x480を使う。8種類のデータ拡張を⾏い、 学習を⾏った。但し、反転などは⾏わない。 • 上記モデルを利⽤しPseudo Labelingを⾏う。 • センサーノイズを推定し、補正する処理を実施した。
5th Place([ods.ai] 10011000) • データ • 解像度のみでフィルタリングしたデータ(40k)を追加した。 • ランダムでCropした224x224の画像を利⽤した。 •
モデル • Resnet50, Resnet101, Densenet121, Densenet201, Xception, Resnext101(Private LB 0.975-0.982)
ソリューションのポイント • データセットはFlickrやYandexを使ってデータセット⾃体の拡 張を⾏っていた。 • Pseudo-Labelingを⽤いた⼿法を取っているケースもある。 • 取得結果からフィルタリングし、綺麗なデータを使っている。 • 複数モデルを⽤いて、組み合わせる⽅法を使っている。
チームでの取り組み
チームでの取り組み • 各々別々にソリューションを構築し、最後にマージする戦略 • コミュニケーションはGoogle Hangout • Google Driveで出⼒ファイルやデータの分割⽅法を共有し、 Stackingなどの実装を⾏った。
チームでの取り組み 良かったこと • コンペ中の質疑応答ができる。 • 普段は⾃分のソリューションを公開できないのでチームメイトとディ スカッションすることで新しいソリューションを考えられる。 • ディスカッションを通して⾮常に勉強になる。 •
チームメイトが作った複数のソリューションを合体できる。 • 多様性があるため、最後のひと押しに効果がある。
チームでの取り組み 苦労したこと • 時差が苦しい。 • リアルタイムに対話するのが凄く⼤変だった。朝か夜少しのみ英語で 会話していた。 (アメリカ・ヨーロッパ、⽇本) • 英語厳しい
• そのまま解読+Google翻訳で頑張る。 • Stackingのフォーマット、バリデーションのインデックス調整 • 締め切り⼀週間前ぐらいに始めたので苦労した。
学んだこと
学んだこと • Pseudo Labelingを⼀部に対して使う。 • ⼀定の閾値を超えたデータを対象にのみ使う。 • 途中全体で⾏ったら丸暗記になって精度が変わらなかった。 • Stacking時にEarly
Stoppingをしない。 • Early Stoppingを利⽤するとValidationのデータに対して過学習を起こすため • 最後のソリューション選択は異なる2パターンにする。 • Joblib • 読み込み速度を劇的にあげるために利⽤した。
まとめ
まとめ • カメラ推定のコンペで10位 • Pseudo Labeling + Stackingを⽤いた⼿法 • チームとして真⾯⽬に取り組んだ初めてのコンペ
• 上位陣は特にデータを早めから収集し、そのデータを使った⼿ 法が⾒られた。 • チームとしての取り組み • ディスカッションが⾯⽩い、最後のひと押し • 英語難しいなどの苦労ポイントはありますが勉強になります。
蛇⾜
途中まで実施してた単独のソリューション • Pseudo-Labeling + Data Augmentationを使った⽅法 • 128x128でランダムにCropした画像をInception ResNetV2を 使って学習させる。
• 推定はRandomに800回実施する。 • Private 0.976