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
91
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
1.1k
Harnessing Large Language Models for Training-free Video Anomaly Detection
tereka114
1
1.5k
KDD2023学会参加報告
tereka114
2
520
Prompting Large Language Models with Answer Heuristics for Knowledge-based Visual Question Answering
tereka114
0
350
Mobile-Former: Bridging MobileNet and Transformer
tereka114
0
1k
DER: Dynamically Expandable Representation for Class Incremental Learning
tereka114
0
170
Jupyter Notebookを納品した話
tereka114
0
360
Multi Scale Recognition with DAG-CNNs
tereka114
0
110
How to use scikit-image for data augmentation
tereka114
0
200
Other Decks in Programming
See All in Programming
テスト自動化失敗から再挑戦しチームにオーナーシップを委譲した話/STAC2024 macho
ma_cho29
1
1.2k
社内活動の取り組み紹介 ~ スリーシェイクでこんな取り組みしてます ~
bells17
0
400
Amazon Aurora Serverless v2のアプデと、Amazon Aurora PostgreSQL Limitless DatabaseのGAについて
satoshi256kbyte
0
120
テストコード文化を0から作り、変化し続けた組織
kazatohiei
2
1.4k
TypeScript でバックもやるって実際どう? 実運用で困ったこと3選
yuichiro_serita
17
7.7k
今からはじめるAndroidアプリ開発 2024 / DevFest 2024
star_zero
0
980
競技プログラミングで 基礎体力を身につけよう / You can get basic skills through competitive programming
mdstoy
0
170
iOS18とヘルスケアの睡眠対応
takuyaosawa
0
110
rails stats で紐解く ANDPAD のイマを支える技術たち
andpad
1
280
layerx_20241129.pdf
kyoheig3
2
270
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
1
160
Scalaから始めるOpenFeature入門 / Scalaわいわい勉強会 #4
arthur1
1
130
Featured
See All Featured
Practical Orchestrator
shlominoach
186
10k
How STYLIGHT went responsive
nonsquared
95
5.2k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
Unsuck your backbone
ammeep
669
57k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
1.2k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.2k
Testing 201, or: Great Expectations
jmmastey
40
7.1k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.9k
Music & Morning Musume
bryan
46
6.2k
Code Review Best Practice
trishagee
65
17k
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