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
Goで並⾏処理を⽤いた 画像処理を実装した話|株式会社Newbees
Search
Newbees Inc
June 05, 2023
Programming
310
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Goで並⾏処理を⽤いた 画像処理を実装した話|株式会社Newbees
2023年6月1日に開催された「Go Conference2023」
登壇した際の資料となります。
Newbees Inc
June 05, 2023
More Decks by Newbees Inc
See All by Newbees Inc
Matching theory-based recommender systems in online dating
newbees
0
140
Siamese neural networks in recommendation
newbees
0
130
Newbees採用資料(2026.04更新)
newbees
2
56k
Other Decks in Programming
See All in Programming
PostgreSQL 18で考えるUUID主キー
kazuhiro1982
0
500
in-process GraphQL のすすめ #ginzajs
izumin5210
4
1.4k
AI時代に設計が 最大の生産性レバーになる 意図駆動開発とデータを消さない設計|Don't Delete Your Data or Your Intent — Design as the Deepest Lever in the AI Era
tomohisa
1
1.1k
「寝てても仕事が進む」Claude Codeで組む第二の脳
tomoyafujita2016
0
350
「人を評価する AI」の設計と実装
ryoyanara
0
220
実装をデザインガイドラインに追従させるための取り組み / 260731-dip-mosh-design-system
dachi023
0
7.1k
AI Engineeringは、AIプロダクトだけのものか? 〜AIがソフトウェアを作る時代の新しい当たり前〜 / No AI in your product. AI Engineering in your development.
rkaga
5
500
Built Our Own Background Agent at LayerX
layerx
PRO
10
5.9k
ドリフトを絶対に許さない(?)CDK運用 / CDK Ops with Zero Tolerance for Drifts (?)
akihisaikeda
1
220
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
petamoriken
0
220
生成AIで帳票OCRが「簡単に」作れる時代になった?
kon_shou
0
1.1k
SlackアプリとLambdaの 連携を構築した話
pawn_4_s
1
130
Featured
See All Featured
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
500
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
620
Designing Powerful Visuals for Engaging Learning
tmiket
1
500
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
180
Utilizing Notion as your number one productivity tool
mfonobong
4
550
WCS-LA-2024
lcolladotor
0
800
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.3k
Believing is Seeing
oripsolob
1
200
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
Transcript
Goで並⾏処理を⽤いた 画像処理を実装した話 Yuya Hiramatsu Go Conference 2023 (2023-06-02)
⾃⼰紹介 株式会社Newbees 所 属 バックエンド, iOS, 研究開発(画像解析, 機械学習) 担 当
Yuya Hiramatsu 名 前 Goでは主に画像解析の実装経験がある
背景 要件:ユーザーから受信した⾝分証画像の番号をモザイク加⼯する OCRにより画像内から検出された⽂字の位置情報を元に 任意の4点を結ぶ四⾓形内をモザイク加⼯する処理を実装 保険証の番号をモザイク加⼯した例
背景 ⽬的の画像処理ライブラリがなかったため独⾃で実装する必要があった 並⾏処理を⽤いて処理時間の⾼速化を図る 保険証の番号をモザイク加⼯した例
アルゴリズム 1. ⽂字を囲う四⾓形内を複数のブロックに区切る 2. 各ブロック内の平均ピクセル値を求める 3. 各ブロック内の全てのピクセルを2.で求めた平均ピクセル値に更新する
アルゴリズム 1. ⽂字を囲う四⾓形内を複数のブロックに区切る 2. 各ブロック内の平均ピクセル値を求める 3. 各ブロック内の全てのピクセルを2.で求めた平均ピクセル値に更新する
アルゴリズム 各ブロックの処理を複数のgoroutineで⾏い並⾏処理化する goroutine A goroutine B goroutine C goroutine D
4つのgoroutineで処理する例
// goroutine起動 // 起動するgoroutine数 // i番⽬のgoroutineが処理するブロックの範囲 // 全てのgoroutineの処理が終わるまで待機 // (x,
y)番地のブロックのマスキング処理 並⾏処理部分のソースコード
実験環境 l MacBook Pro M1(2021) • メモリ16GB, 8スレッド l 画像:スマホで撮影した⾝分証
• サイズ:3024×4032 [pixel] • マスキング対象箇所:5箇所 l ベンチマーク testingパッケージのBenchmark関数 対象画像の例 (⾚枠がマスキング対象)
ベンチマーク 並⾏処理化前 並⾏処理化後 平均処理時間 割り当てられた メモリ量 割り当て回数 実⾏回数 およそ3倍速くなった
余談:並⾏処理化に伴ったアルゴリズムの変更 従来⼿法:並⾏処理化が難しく計算コストが⾼い 四⾓形内のピクセルを抽出する際に端から連続的に操作する必要があり 複数スレッドでの処理分割が困難だった 2度⽬に境界線に当たったら 内部判定終了 端から順番にピクセルを⾒ていき 初めて境界線に当たったら内部判定開始
余談:並⾏処理化に伴ったアルゴリズムの変更 各ピクセルごとに独⽴して処理できるアルゴリズムに改修 サイズが⼤きい画像において処理時間が平均3秒改善された
考察とまとめ l 画像処理の並⾏処理化により処理速度が向上 • 画像処理は並⾏処理可能な計算が多いため並⾏処理に向いている • goroutineを⽤いる実装の⼿軽さを実感 l アルゴリズムの変更により処理速度が⼤幅に向上 •
処理を⾼速化したい場合はまず初めにアルゴリズムを⾒直すことが 重要
Engineer、Designer、Director、QA、HRGA Newbeesでは全ての部署で⼀緒に働くメンバーを募集中です! We Are Hiring! Newbees 採⽤情報 https://newbees.jp/career/