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
N.E.X.T LEVEL
pluu
2
290
AWS認定資格を勉強した先に何があったか
satoshi256kbyte
2
210
Java 23の概要とJava Web Frameworkの現状 / Java 23 and Java web framework
kishida
2
400
Jakarta EE meets AI
ivargrimstad
0
190
急成長期の品質とスピードを両立するフロントエンド技術基盤
soarteclab
0
890
StarlingMonkeyを触ってみた話 - 2024冬
syumai
3
260
layerx_20241129.pdf
kyoheig3
2
270
開発者とQAの越境で自動テストが増える開発プロセスを実現する
92thunder
1
160
Monixと常駐プログラムの勘どころ / Scalaわいわい勉強会 #4
stoneream
0
140
Webエンジニア主体のモバイルチームの 生産性を高く保つためにやったこと
igreenwood
0
320
複雑な仕様に立ち向かうアーキテクチャ
myohei
0
160
採用事例の少ないSvelteを選んだ理由と それを正解にするためにやっていること
oekazuma
2
970
Featured
See All Featured
It's Worth the Effort
3n
183
28k
Designing for Performance
lara
604
68k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
8.3k
Adopting Sorbet at Scale
ufuk
73
9.1k
How STYLIGHT went responsive
nonsquared
95
5.2k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
How To Stay Up To Date on Web Technology
chriscoyier
789
250k
How to Ace a Technical Interview
jacobian
276
23k
A Philosophy of Restraint
colly
203
16k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
KATA
mclloyd
29
14k
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