Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
外観検査用画像前処理の_コツをコード解説付きで。/20220810_CDLE_LT
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
ITO Akihiro
August 10, 2022
Technology
55
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
外観検査用画像前処理の_コツをコード解説付きで。/20220810_CDLE_LT
2022年 JDLA 合格者の会/CDLE LT
--
外観検査用画像前処理の_コツをコード解説付きで。
ITO Akihiro
August 10, 2022
More Decks by ITO Akihiro
See All by ITO Akihiro
kintone + ローカルLLM = ?
akit37
0
340
【NoMapsTECH 2025】AI Edge Computing Workshop
akit37
0
730
【NoMapsTECH 2025】AI Tech Community Talk
akit37
0
340
エンジニア目線でのテスラ
akit37
0
85
「重鎮問題」について(軽めに)
akit37
0
100
Software + Hardware = Fun++
akit37
0
83
基本的に "リモートしかない" ワーク/20231128_KBS_LT
akit37
1
52
3つの先端技術が コミュニティ軸で融合した話。/20230615_CMCMeetup
akit37
0
50
Bootleg_越境してみたときのアウェイ感。/20230328_CMCMeetup
akit37
0
66
Other Decks in Technology
See All in Technology
HRC_Frontend_Conference_Fukuoka_2026.pdf
ts020
0
720
幾何アルゴリズムで なめらかなピン操作を / iOSDC Japan 2026 / smoothpin
kazumanagano
0
350
aws-iot-platform-architecture-use-cases.pdf
ma2shita
0
120
Railsのように考える: See through the Master
snoozer05
PRO
3
820
事業課題から技術的負債に向き合う
sansantech
PRO
2
1.8k
品質と信頼性を地続きにする
grimoh
0
380
ソフトウェアDNAとクラウドエージェントのススメ
cloudace
0
100
[2026-09-11]SREは誰のもの?運用エンジニアが始める 「SRE領域への越境」とチームの進化の軌跡 〜Road to NEXT CRE
tosite
0
240
AIによるクリエイティブ生成を行う上での試行錯誤
plaidtech
PRO
0
140
synctest時代のhttptest Go 1.27で変わるHTTPサーバテストの裏側 / go conference2026 synctest and httptest
budougumi0617
1
3k
「守り」で活用するオンデバイスLLM 〜写ってはいけないを総力戦で防ぐ〜 / iOSDC Japan 2026
nakamuuu
0
160
空間オーディオで過去の 自分(ゴースト)と競うランニング 〜HealthKitのルートを足音に変える実装〜
nao_randd
0
210
Featured
See All Featured
Technical Leadership for Architectural Decision Making
baasie
3
570
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Code Review Best Practice
trishagee
74
20k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
67
58k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
BBQ
matthewcrist
89
10k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
360
We Are The Robots
honzajavorek
0
370
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
610
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
460
Transcript
外観検査用画像前処理の コツをコード解説付きで。 2022.8 合格者の会2022/CDLE LT Akihiro ITO
モチベーション • 高性能な異常検知モデル「PaDiM」を簡単に使えるようにしたい。 ◦ PaDiM:https://arxiv.org/pdf/2011.08785.pdf • 動作環境として、connectome.design社開発のmetabase®を利用する。 データを放り込むだけで、どの程度検知できるか試せるように。 • 撮像したデータをPaDiMの入力に合わせるための前処理が意外と面倒。
→ 汎用的な前処理を作ろう!
FYI:Overview of PaDiM • 2020年11月に発表された、不良品検知を行 う機械学習モデル。 • 正常品のみの画像から再学習不要で不良 品検知が実装可能。 •
不良品検知のデータセットである MVTec AD でSOTAを達成。 出展:https://arxiv.org/pdf/2011.08785.pdf
FYI:Overview of MVTec AD • 2019年6月に公開されたデータセット。 • 15のカテゴリーに分類され、工業製品や農 作物の画像。 •
欠陥領域のセグメンテーションデータも含ま れる。 出展:https://www.mvtec.com/company/research/datasets/mvtec-ad
今回のターゲット画像。 • コンソメキューブの包み方の外観検査。 • Good / Bad の2値分類。 • 入力画像は、ベルトコンベア上を流れてくる
対象を撮像するため、画像ファイル内での位 置が不定。 → PaDiMで使える画像にする。
前処理でやること。 1. 物体が画像の中心に配置された、 224 x 224 pxのカラーpngファイルを作る。 2. 精度確認用の、224 x
224 pxのモノクロ2値pngファイルを作る。 3. 各ディレクトリ(=フォルダと同義)への振り分け ※今回は、時間の関係で ”1”のみ紹介。
どう処理するか? 1. 物体を検出して切り出す。 → 最新のDETRを使用 DETR:DEtection Transformer 2020年に発表されたTransformerを使った物体検出手法。 ※FasterRCNNも試したが、DETRの方が精度がよかった。 2.
PaDiMで使えるように、画像のサイズを揃え、画像の中心に 物体を配置する。
全体の処理構造 result = step1_DetectAndCrop.prePadim_step1(searchpath, indir, outdir_step1) if result == 0:
print("Error! Step1. No File Saved to: ", outdir_step1) return False result = step2_Align.prePadim_step2(searchpath2, outdir_step1, outdir_step2, args.bgcolor) if result == 0: [エラー処理] • 途中結果を確認しやすい&再利用しや すい単位でステップを分割する。 ◦ Step1:DETRを使って画像の中から物 体を検出し、画像を切り出す。 ◦ Step2:正しく検出と切り出しができない 画像は捨てて、すべて同じサイズに揃 える。 • ステップごとに必ず処理結果を判定し、 エラー処理を入れること。
ディレクトリ構造の処理のコツ parser = argparse.ArgumentParser() parser.add_argument('-d', '--data_path', type=str) parser.add_argument('-s', '--save_path', type=str)
cwd = os.getcwd() targetdir_in = os.path.join(args.data_path, args.target) targetdir_out = os.path.join(args.save_path, args.target) • 入出力ディレクトリ名は、引数として受け 取れるようにした方が良い。 • 上位の構造に依存しないよう、 Current Working Directory を最上位として処理する。 → フルパス入れちゃダメ。 • パスを組み立てる時は、文字列結合で はなく、 os.path.join() を使う。 → “/”入力の有無を問わないように。
ディレクトリ構造全体から対象ファイルを探すコツ # 各種定義 filetype = “.png” wildcard = “/**/*” searchpath
= os.path.join(indir, wildcard + filetype) if len(glob.glob(searchpath, recursive=True)) == 0: print("Error! Step1. File Not Found in: ", searchpath) return False else: [実際の処理] • 特定の数字や文字列( マジックナンバー) をソースコードの途中に埋め込まず、まと めて定義する。 • パスに、“ /**/* ”を含めると、配下のディ レクトリ階層すべてから、対象ファイルを 検出できる。 • 「対象ファルが一つも見つからない場合」 のエラー処理を必ず入れること。
簡易化のため、うまく検出できなかった画像は諦める! [画像を開いてサイズを配列に入れるループ処理 ]: size_mean = np.mean(image_size_array, axis=0) size_std = np.std(image_size_array,
axis=0) size_limit_low = size_mean - size_std size_limit_high = size_mean + size_std if limit_low_w <= img.width and img.width <= limit_high_w and limit_low_h <= img.height and img.height < limit_high_h: [実際の処理] • 検出と切り出しに失敗した画像は、画 像サイズが異なる。 • 平均と分散から、作成すべき基本画像 サイズを求める。 • 画像サイズから平均と標準偏差を計算 し、外れ値となる画像を除く。
同じ背景色・サイズの画像に揃える。 background_color=(0,0,0) if bgcolor == 'white': background_color=(255,255,255) [画像を開くループ処理 ]: img_new
= Image.new(img.mode, box_size, background_color) left = int((box_wh - img.width) // 2) top = int((box_wh - img.height) // 2) img_new.paste(img, (left, top)) img_new.save(os.path.join(outdirname, os.path.basename(file))) • 基本画像の背景色を引数から受け取 る。(背景は、黒か白でよいはず) • 基本画像を生成し、元の画像をその中 心に貼り付ける。
これで、入力画像から学習用画像が生成される。
まとめ • 今回の例 ◦ ファイル数:4 ◦ ソースコードの行数:約250行(空行含む) • AIのサンプルコードは、パスやファイル名なども含め特定の文字列が直接書き込まれてい たり、画像サイズや形式も限定されている場合が多い。
• 実務利用に向けて汎用的に使えるようにするためには、課題に合わせて修正する箇所が 極力少なくなるように作り込む必要がある。 • また例えば、 ”for i in range(10):” のようにいわゆるマジックナンバーが埋め込まれてい るとコードの解読や修正に手間がかかるので、必ず定義すること。 epoch = 10 for i in range(epoch):
ソースコードは、美しく。