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
ML Ops Study 2
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
ARIYAMA Keiji
May 29, 2018
Technology
0
150
ML Ops Study 2
5月29日にクックパッド株式会社で開催されたML Ops Study #2の発表資料です。
ARIYAMA Keiji
May 29, 2018
Tweet
Share
More Decks by ARIYAMA Keiji
See All by ARIYAMA Keiji
Build with AI
keiji
0
240
DroidKaigi 2023
keiji
0
1.9k
TechFeed Conference 2022
keiji
0
300
Android Bazaar and Conference Diverse 2021 Winter
keiji
0
900
ci-cd-conference-2021
keiji
1
1.3k
Android Bazaar and Conference 2021 Spring
keiji
3
850
TFUG KANSAI 20190928
keiji
0
140
Softpia Japan Seminar 20190724
keiji
1
190
pixiv App Night 20190611
keiji
1
610
Other Decks in Technology
See All in Technology
茨城の思い出を振り返る ~CDKのセキュリティを添えて~ / 20260201 Mitsutoshi Matsuo
shift_evolve
PRO
1
390
StrandsとNeptuneを使ってナレッジグラフを構築する
yakumo
1
130
usermode linux without MMU - fosdem2026 kernel devroom
thehajime
0
240
~Everything as Codeを諦めない~ 後からCDK
mu7889yoon
3
490
Kiro IDEのドキュメントを全部読んだので地味だけどちょっと嬉しい機能を紹介する
khmoryz
0
210
顧客の言葉を、そのまま信じない勇気
yamatai1212
1
360
プロポーザルに込める段取り八分
shoheimitani
1
630
今こそ学びたいKubernetesネットワーク ~CNIが繋ぐNWとプラットフォームの「フラッと」な対話
logica0419
5
400
私たち準委任PdEは2つのプロダクトに挑戦する ~ソフトウェア、開発支援という”二重”のプロダクトエンジニアリングの実践~ / 20260212 Naoki Takahashi
shift_evolve
PRO
2
190
AzureでのIaC - Bicep? Terraform? それ早く言ってよ会議
torumakabe
1
600
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
93k
Codex 5.3 と Opus 4.6 にコーポレートサイトを作らせてみた / Codex 5.3 vs Opus 4.6
ama_ch
0
200
Featured
See All Featured
From π to Pie charts
rasagy
0
130
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
200
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.3k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
84
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
390
Why Our Code Smells
bkeepers
PRO
340
58k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.1k
Art, The Web, and Tiny UX
lynnandtonic
304
21k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
ラッコキーワード サービス紹介資料
rakko
1
2.3M
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
190
Transcript
C-LIS CO., LTD.
.-0QT4UVEZ BUΫοΫύουגࣜձࣾ 5FOTPS'MPXͷ܇࿅ࡁΈϞσϧΛ "OESPJEΞϓϦʹࡌͤΔͱ͖ʹ ۤ࿑ͨ͠ 5FOTPS'MPXͰझຯͷը૾ऩूαʔόʔΛ࡞Δ݄߸
C-LIS CO., LTD. ༗ࢁܓೋʢ,FJKJ"3*:"."ʣ $-*4$0 -5% Photo :
Koji MORIGUCHI (MORIGCHOWDER) "OESPJEΞϓϦ։ൃνϣοτσΩϧ ػցֶशͪΐͬͱͬͨ͜ͱ͋Γ·͢
C-LIS CO., LTD.
C-LIS CO., LTD. ͬ
ຊ൪ڥͷೖܦݧ͕ඞཁͳΒ ೖͯ͠͠·͍͍͑͡Όͳ͍
؟ ڸ ͬ ່ ࠜઇΕ͍
Έͷ؟ڸ່ͬը૾Λ ࣗಈͰऩू͍ͨ͠
̎Ϋϥεྨ 1 0
ݱࡏͷγεςϜ
ධՁ༻ αʔόʔ ܇࿅ɾֶश༻αʔόʔ σʔληοτసૹ ʢTFRecordʣ ֶशࡁΈ ύϥϝʔλʔऔಘ ը૾औಘ
ը૾औಘ ϥϕϧ ͚ σʔληοτཧ αʔόʔ σʔλऩूݩ αʔϏε ը૾औಘ ϥϕϧ ͚ Android ΞϓϦ
σʔληοτཧαʔόʔ $16"UISPO/FP()[ .FNPSZ(# 4UPSBHF44%(# )%%5# 3"*%
σʔληοτཧαʔόʔͷׂ ը૾σʔλͷऩू ϝλσʔλʢΞϊςʔγϣϯɾϥϕϧʣͷཧ "1*ͷఏڙ ֶश༻σʔλʢ5'3FDPSEʣͷੜ
ը૾σʔλͷऩू
ϝλσʔλͷཧ
ϝλσʔλͷཧ label: 2 left: 283 top: 190 right:
435 bottom:301 = 1.0
ϥϕϧͷछྨ PSJHJOBM@BSU OTGX GBWPSJUF QIPUP JMMVTU DPNJD GBDF
GFNBMF NFHBOF TDISPPM@VOJGPSN CMB[FS@VOJGPSN TBJMPS@VOJGPSN HM LFNPOP NBMF CM DBU EPH GPPE EJTMJLF
"1*ͷఏڙ ը૾Ϧετͷऔಘ ը૾ͷऔಘ ը૾ͷݕࡧʢϥϕϧʣ ϥϕϧͷઃఆ ϥϕϧະઃఆը૾ͷϦετΛऔಘ σʔλऔಘݩ5XJUUFS*%ͷՃɾআ
ֶश༻σʔλͷੜ 5'3FDPSEܗࣜPS+1&( $47ܗࣜ ը૾ͷϦαΠζ͜ͷஈ֊Ͱߦ͏ʢτϥϑΟοΫΛݮ $ python ./create_dataset.py \
--base_dir /dataset/source/ \ --output_dir ~/tfrecords_classifier \ --image_size 256 \ --tag_names megane,nsfw,favorite,illust
σʔλͷάϧʔϓԽ 0 1 2 3 4 5 6
7 8 9 σʔληοτ ςετσʔληοτ
ධՁ༻ αʔόʔ ܇࿅ɾֶश༻αʔόʔ σʔληοτసૹ ʢTFRecordʣ ֶशࡁΈ ύϥϝʔλʔऔಘ ը૾औಘ
ը૾औಘ ϥϕϧ ͚ σʔληοτཧ αʔόʔ σʔλऩूݩ αʔϏε ը૾औಘ ϥϕϧ ͚ Android ΞϓϦ
ֶश༻αʔόʔ
{ "tag_name": "megane", "train_catalog_numbers": "0,1,2,3,4,5,6,7,8", "eval_catalog_numbers": "9", "data_augmentation": { "random_crop":
false, "random_colorize": true } } ֶश༻ͷઃఆϑΝΠϧ
ֶशͱݕূͷ࣮ߦ $ CUDA_VISIBLE_DEVICES=0,1 python ./train.py \ --learning_config config_megane.json
\ --tfrecords_dir ~/tfrecords_classifier \ --train_dir ~/train_single_discriminator \ --summary_dir ~/summary_single_discriminator \ --batch_size 64 \ --learning_rate 0.0001 \ --num_gpus 2 \ --max_step 100000 $ CUDA_VISIBLE_DEVICES=2 python ./eval.py \ --learning_config config_megane.json \ --tfrecords_dir ~/tfrecords_classifier \ --train_dir ~/train_single_discriminator \ --summary_dir ~/summary_single_discriminator $ tensorboard \ --logdir ~/summary_single_discriminator/megane/
ධՁ༻ αʔόʔ ܇࿅ɾֶश༻αʔόʔ σʔληοτసૹ ʢTFRecordʣ ֶशࡁΈ ύϥϝʔλʔऔಘ ը૾औಘ
ը૾औಘ ϥϕϧ ͚ σʔληοτཧ αʔόʔ σʔλऩूݩ αʔϏε ը૾औಘ ϥϕϧ ͚ Android ΞϓϦ
ධՁ༻αʔόʔ
ධՁͷ࣮ߦ $ python3 client.py \ --tag_name megane \
--train_base_path ~/train_single_discriminator \ --train_file_name precision-0.956463/megane.ckpt-294000 \ --batch_size 16 \ --limit_batch 100
ධՁ༻ αʔόʔ ܇࿅ɾֶश༻αʔόʔ σʔληοτసૹ ʢTFRecordʣ ֶशࡁΈ ύϥϝʔλʔऔಘ ը૾औಘ
ը૾औಘ ϥϕϧ ͚ σʔληοτཧ αʔόʔ σʔλऩूݩ αʔϏε ը૾औಘ ϥϕϧ ͚ Android ΞϓϦ
"OESPJEΞϓϦ
ۙͷ՝
ෆదը૾͕ଟ͗͢Δ
ෆదʢ/4'8ʣը૾ͱ؟ڸը૾ /4'8 positive: 36,083 → 7.17% negative:
466,738 ؟ڸ positive: 23,559 → 2.44% negative: 938,563
ෆదը૾ϑΟϧλʔΛ ΞϓϦʹΈࠐΉ
NPEFM NSFW positive: 5,628 negative: 17,253
NPEFM ֶशࡁΈύϥϝʔλʔϑΝΠϧ ֶशࡁΈϞσϧ .pb 170MB
NPEFM@MJUF ֶशࡁΈύϥϝʔλʔϑΝΠϧ ֶशࡁΈϞσϧ .pb 10.7MB
NPEFM@MJUF
Ϟσϧͷߏ .pb input result 128x128x3 1
private val IMAGE_WIDTH = 128 private val IMAGE_HEIGHT = 128
private val IMAGE_CHANNEL = 3 private val IMAGE_BYTES_LENGTH = IMAGE_WIDTH * IMAGE_HEIGHT * IMAGE_CHANNEL val imageByteBuffer: ByteBuffer = ByteBuffer.allocate(IMAGE_BYTES_LENGTH) val scaledBitmap = Bitmap.createScaledBitmap(bitmap, IMAGE_WIDTH, IMAGE_HEIGHT, false) scaledBitmap.copyPixelsToBuffer(imageByteBuffer) ը૾ΛόοϑΝʹ֨ೲ
val resultArray = FloatArray(1) fun recognize(imageByteArray: ByteArray): Float { val
start = Debug.threadCpuTimeNanos() tfInference.feed("input", imageByteArray, imageByteArray.size.toLong()) tfInference.run(arrayOf("result")) tfInference.fetch("result", resultArray) val elapsed = Debug.threadCpuTimeNanos() - start Log.d(TAG, "Elapsed: %d ns".format(elapsed)) return resultArray[0] } GFFESVOGFUDI
private val IMAGE_WIDTH = 128 private val IMAGE_HEIGHT = 128
private val IMAGE_CHANNEL = 3 private val IMAGE_BYTES_LENGTH = IMAGE_WIDTH * IMAGE_HEIGHT * IMAGE_CHANNEL val imageByteBuffer: ByteBuffer = ByteBuffer.allocate(IMAGE_BYTES_LENGTH) val scaledBitmap = Bitmap.createScaledBitmap(bitmap, IMAGE_WIDTH, IMAGE_HEIGHT, false) scaledBitmap.copyPixelsToBuffer(imageByteBuffer) scaledBitmap.recycle() ݪҼΒ͖͠ͷ ˢ"MQIBνϟϯωϧ͕ೖ͍ͬͯΔ
Ϟσϧͷߏ .pb input result 128x128x4 1
with tf.Graph().as_default() as g: image_ph = tf.placeholder( tf.uint8, [model.IMAGE_SIZE *
model.IMAGE_SIZE * 4], name='input') image = tf.cast(image_ph, tf.float32) image = tf.reshape( image, [model.IMAGE_SIZE, model.IMAGE_SIZE, 4]) image = image[:, :, :3] QCग़ྗ࣌ʹDIΛड͚ೖΕΔΑ͏ʹάϥϑΛมߋ
σϞ
'PPE(BMMFSZ https://github.com/keiji/food_gallery_with_tensorflow ΪϟϥϦʔʹอଘ͞Ε͍ͯΔ৯ͷը૾Λදࣔ http://techlife.cookpad.com/entry/2017/09/14/161756 ΫοΫύου։ൃऀϒϩά ྉཧ͖Ζ͘ʹ͓͚ΔྉཧʗඇྉཧผϞσϧͷৄࡉ
ΈࠐΜͰΈ͚ͨΕͲɺ ਫ਼͋·Γߴ͘ͳ͍ʜʜ
ࠓޙͷ՝ 5FOTPS'MPX-JUFͷҠߦ ߴਫ਼ͷϞσϧͷѹॖʢল༰ྔԽʣ 1SVOJOH 2VBOUJ[BUJPO %JTUJMMBUJPO ML Kit:
Machine Learning SDK for mobile developers (Google I/O '18) https://youtu.be/Z-dqGRSsaBs?t=32m10s
ࠓޙͷ՝ ֶशαΠΫϧΛࣗಈԽ͍͖͍ͯͨ͠ɻ ʢఆظతʹֶशσʔλͷੜͱసૹΛߦ͍ɺ࠶ֶश͢ΔͳͲʣ σʔλϕʔεͷߴԽ ɹϥϕϧݕࡧ͕ඇৗʹ͍ͷ͕՝ɻઃܭΛݟ͢ඞཁ͋Γ ɹݕࡧΠϯσοΫεͷ(PPHMF$MPVE4UPSFҠߦΛݕ౼
ࠓޙͷ՝ σʔληοτཧαʔόʔͷߋ৽ 5FOTPS'MPXΑΓɺ$16ʹ*OUFM"79͕ඞਢʹͳͬͨʢQJQ൛ʣ
C-LIS CO., LTD. ຊࢿྉɺ༗ݶձࣾγʔϦεͷஶ࡞Ͱ͢ɻຊࢿྉͷશ෦ɺ·ͨҰ෦ʹ͍ͭͯɺஶ࡞ऀ͔ΒจॻʹΑΔڐΛಘͣʹෳ͢Δ͜ͱې͡ΒΕ͍ͯ·͢ɻ 5IF"OESPJE4UVEJPJDPOJTSFQSPEVDFEPSNPEJpFEGSPNXPSLDSFBUFEBOETIBSFECZ(PPHMFBOEVTFEBDDPSEJOHUPUFSNTEFTDSJCFEJOUIF$SFBUJWF$PNNPOT"UUSJCVUJPO-JDFOTF ໊֤ɾϒϥϯυ໊ɺձ໊ࣾͳͲɺҰൠʹ֤ࣾͷඪ·ͨొඪͰ͢ɻຊࢿྉதͰɺɺɺäΛׂѪ͍ͯ͠·͢ɻ 5IF"OESPJESPCPUJTSFQSPEVDFEPSNPEJpFEGSPNXPSLDSFBUFEBOETIBSFECZ(PPHMFBOEVTFEBDDPSEJOHUPUFSNTEFTDSJCFEJOUIF$SFBUJWF$PNNPOT"UUSJCVUJPO-JDFOTF