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
73
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
KDD2023学会参加報告
tereka114
2
340
Prompting Large Language Models with Answer Heuristics for Knowledge-based Visual Question Answering
tereka114
0
250
Mobile-Former: Bridging MobileNet and Transformer
tereka114
0
880
DER: Dynamically Expandable Representation for Class Incremental Learning
tereka114
0
110
Jupyter Notebookを納品した話
tereka114
0
220
Multi Scale Recognition with DAG-CNNs
tereka114
0
85
How to use scikit-image for data augmentation
tereka114
0
120
面倒くさいこと考えたくないあなたへ〜Tpotと機械学習〜
tereka114
0
170
Chainerを使ったらカノジョができたお話
tereka114
0
100
Other Decks in Programming
See All in Programming
Goのエラースタックトレースの歴史と今後
sonatard
9
1.7k
ADRを一年運用してみた/adr_after_a_year
hanhan1978
7
2.4k
Goのmultiple errorsについて (2024年4月版)
syumai
4
1.1k
大規模Reactアプリのリアーキテクチャ~8万行のTanStack Query移行の軌跡~
kj455
4
1k
Anthropic Cookbook のおすすめレシピ
schroneko
7
1.1k
From Spring Boot 2 to Spring Boot 3 with Java 21 and Jakarta EE
ivargrimstad
0
400
Scalable Customer Journey Orchestration (CJO)
lewuathe
0
410
Komplexe Oberflächen mit SVG und der Web Animation API
joergneumann
0
680
単体テストを書かない技術 #phpcon_odawara
o0h
PRO
27
8.5k
Kotlin Multiplatform at Stable and Beyond (Android Makers 2024)
zsmb
0
420
AWS CDKコントリビュートTIPS / aws-cdk-contribution-tips
gotok365
4
320
SwiftUIで使いやすいToastの作り方 / How to build a Toast system which is easy to use in SwiftUI
lovee
3
160
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
408
22k
Code Reviewing Like a Champion
maltzj
515
39k
What's in a price? How to price your products and services
michaelherold
238
11k
jQuery: Nuts, Bolts and Bling
dougneiner
59
7.2k
From Idea to $5000 a Month in 5 Months
shpigford
378
45k
We Have a Design System, Now What?
morganepeng
44
6.8k
Reflections from 52 weeks, 52 projects
jeffersonlam
345
19k
Building an army of robots
kneath
300
41k
10 Git Anti Patterns You Should be Aware of
lemiorhan
649
58k
Pencils Down: Stop Designing & Start Developing
hursman
117
11k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
222
21k
Stop Working from a Prison Cell
hatefulcrawdad
267
19k
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