TensorFlow គឺជាឧបករណ៍ដែលអាចប្រើបានច្រើនដើម្បីបង្កើតគំរូរៀនដោយម៉ាស៊ីន។
នៅក្នុងការប្រកាសនេះ យើងនឹងពិនិត្យមើលពីរបៀបបង្កើតប្រព័ន្ធសម្គាល់មុខជាមួយ TensorFlow ដែលជាក្របខ័ណ្ឌការរៀនម៉ាស៊ីនប្រភពបើកចំហ។ យើងនឹងឆ្លងកាត់ដំណើរការសំខាន់ៗក្នុងការបង្កើតប្រព័ន្ធសម្គាល់មុខប្រកបដោយជោគជ័យ ចាប់ពីការប្រមូល និងរៀបចំទិន្នន័យ រហូតដល់ការបណ្តុះបណ្តាល និងវាយតម្លៃគំរូ។
អ្នកនឹងទទួលបានបទពិសោធន៍ផ្ទាល់ជាមួយ TensorFlow ដើម្បីបង្កើតការសម្គាល់មុខដោយជំនួយពីផ្នែកខ្លីៗនៃកូដ និងឧទាហរណ៍ជាក់ស្តែង។ អ្នកត្រូវបានស្វាគមន៍ដើម្បីអនុវត្តតាមនៅពេលដែលយើងបន្ត។
សេចក្តីផ្តើមអំពីថេនសិនហ្វូវ
TensorFlow គឺជាបណ្ណាល័យប្រភពបើកចំហ និងឥតគិតថ្លៃ។ វាគឺជាប្រអប់ឧបករណ៍គណិតនិមិត្តសញ្ញាដែលប្រើលំហូរទិន្នន័យនិងការសរសេរកម្មវិធីដែលអាចខុសគ្នា។ អ្នកអាចដោះស្រាយកិច្ចការជាច្រើនជាមួយវា រួមទាំងជ្រៅផងដែរ។ បណ្តាញសរសៃប្រសាទ ការបណ្តុះបណ្តាល។
TensorFlow មានថាមពល និងអាចសម្របខ្លួនបាន។ ដូចគ្នានេះដែរវាគឺជាឧបករណ៍ដ៏ល្អសម្រាប់ការអភិវឌ្ឍនិង ការដាក់ពង្រាយម៉ូដែលរៀនម៉ាស៊ីន. អ្នកអាចបង្កើតគំរូស្មុគស្មាញជាមួយនឹងស្រទាប់ជាច្រើន និងប្រតិបត្តិការ tensor ។ ផងដែរ ម៉ូដែលដែលបានសាងសង់ជាមុននៅក្នុងបណ្ណាល័យអាចត្រូវបានកែសម្រួលយ៉ាងល្អសម្រាប់តម្រូវការជាក់លាក់។
លើសពីនេះ TensorFlow មានសហគមន៍អ្នកប្រើប្រាស់ដ៏ធំ និងពង្រីក។ ដូច្នេះ មានព័ត៌មាន និងជំនួយជាច្រើនសម្រាប់បុគ្គលដែលទើបនឹងបង្កើតវេទិកា។
TensorFlow គឺពេញនិយមសម្រាប់ ការរៀនម៉ាស៊ីន មួយផ្នែកព្រោះវាផ្តល់លំហូរការងារពីចុងដល់ចប់។ ដូច្នេះ អ្នកអាចសាងសង់ ហ្វឹកហាត់ និងដាក់ពង្រាយគំរូបានយ៉ាងងាយស្រួល។ វាផ្តល់នូវឧបករណ៍ និងយុទ្ធសាស្ត្រសម្រាប់កែលម្អ និងធ្វើមាត្រដ្ឋានគំរូ ដើម្បីបំពេញតម្រូវការជាក់លាក់។ វាប្រែប្រួលពីការដំណើរការទិន្នន័យជាមុន រហូតដល់ការដាក់ពង្រាយគំរូ។
តើ Face Recognition ជាអ្វី?
ការទទួលស្គាល់មុខគឺ ក ចក្ខុវិស័យកុំព្យូទ័រ ភារកិច្ចដែលកំណត់អត្តសញ្ញាណបុគ្គលដោយផ្អែកលើមុខរបស់ពួកគេ។ បច្ចេកទេសនេះស្គាល់ពីលក្ខណៈផ្ទៃមុខ ដូចជារូបរាង និងវាយនភាពនៃភ្នែក ច្រមុះ និងមាត់។
ហើយវាប្រៀបធៀបពួកវាទៅនឹងមូលដ្ឋានទិន្នន័យនៃមុខដែលគេស្គាល់ដើម្បីកំណត់អត្តសញ្ញាណការប្រកួត។ ការសម្គាល់មុខមានការប្រើប្រាស់ជាច្រើន រួមទាំងប្រព័ន្ធសុវត្ថិភាព ការរៀបចំរូបថត និងការផ្ទៀងផ្ទាត់ជីវមាត្រ។
ភាពត្រឹមត្រូវនៃក្បួនដោះស្រាយការសម្គាល់មុខបានកើនឡើងយ៉ាងខ្លាំងក្នុងប៉ុន្មានឆ្នាំថ្មីៗនេះ ដែលជាលទ្ធផលនៃរបកគំហើញក្នុងការរៀនម៉ាស៊ីន។
ការនាំចូលបណ្ណាល័យចាំបាច់
មុនពេលចាប់ផ្តើមអ្វីមួយ យើងត្រូវនាំចូលបណ្ណាល័យដែលត្រូវការសម្រាប់គំរូរបស់យើង។ Tensorflow (tf) ត្រូវបាននាំចូល និងប្រើប្រាស់ដើម្បីបង្កើត និងបណ្តុះបណ្តាលគំរូ។ <(p>
“ numpy” អនុវត្តការគណនាគណិតវិទ្យា និងដំណើរការទិន្នន័យ។
“matplotlib.pyplot” ត្រូវបាននាំចូលជា plt និងប្រើសម្រាប់ គំនូសតាងទិន្នន័យ និងការមើលឃើញ.
ជាចុងក្រោយ "fetch lfw people" ត្រូវបាននាំចូលពី sklearn ។ សំណុំទិន្នន័យ និងប្រើដើម្បីផ្ទុកសំណុំទិន្នន័យសម្គាល់មុខ។ មុខងារនេះគឺជាផ្នែកមួយនៃ scikit-learn toolkit ។ អរគុណចំពោះមុខងារនេះ យើងមិនចាំបាច់បង្ហោះសំណុំទិន្នន័យផ្សេងទៀតទេ។ វាត្រូវបានសាងសង់រួចហើយនៅក្នុង sckit-learn ។
ហើយវាផ្តល់ឱ្យអ្នកនូវការចូលទៅកាន់ជួរដ៏ធំទូលាយមួយ។ សំណុំទិន្នន័យសម្រាប់ការរៀនម៉ាស៊ីន កម្មវិធី។ ក្នុងសេណារីយ៉ូនេះ យើងប្រើវិធីសាស្ត្រប្រមូលមនុស្ស lfw ដើម្បីទៅយកសំណុំទិន្នន័យ "Labeled Faces in the Wild" (LFW)។ វារួមបញ្ចូលរូបថតមុខរបស់មនុស្ស ក៏ដូចជាស្លាកសញ្ញាដែលទៅជាមួយពួកគេ។
បណ្ណាល័យទាំងនេះមានសារៈសំខាន់ក្នុងការអនុវត្ត និងការវាយតម្លៃនៃគំរូសម្គាល់មុខរបស់យើង។
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt from sklearn.datasets
import fetch_lfw_people
កំពុងដំណើរការ និងផ្ទុកសំណុំទិន្នន័យសម្គាល់មុខជាមុន
នៅក្នុងផ្នែកនេះ យើងប្រើប្រាស់មុខងារ "fetch lfw people" ដើម្បីដំណើរការទិន្នន័យសម្គាល់មុខជាមុន។ ដំបូង យើងប្រើការប្រមូលមនុស្ស lfw ជាមួយជម្រើស "មុខអប្បបរមាក្នុងមនុស្ស = 60"។ នេះបង្ហាញថាយើងចង់បញ្ចូលតែមនុស្សនៅក្នុងសំណុំទិន្នន័យដែលមានរូបថតយ៉ាងហោចណាស់ 60 សន្លឹក។ ដូច្នេះហើយ យើងធានាថាគំរូរបស់យើងមានទិន្នន័យគ្រប់គ្រាន់ដើម្បីរៀន។ ដូចគ្នានេះផងដែរ, នេះបន្ថយគ្រោះថ្នាក់នៃការពាក់លើសទម្ងន់។
បន្ទាប់មកទិន្នន័យ និងស្លាកពីវត្ថុមុខត្រូវបានស្រង់ចេញ និងកំណត់ទៅអថេរ X និង y ។ X hol ។
ឥឡូវនេះ យើងត្រៀមខ្លួនរួចរាល់ហើយ ដើម្បីបណ្តុះបណ្តាលគំរូសម្គាល់មុខរបស់យើង ដោយប្រើទិន្នន័យ និងស្លាកដែលបានដំណើរការជាមុន។
faces = fetch_lfw_people(min_faces_per_person=60)
X = faces.data
y = faces.target
target_names = faces.target_names
បំបែកសំណុំបណ្តុះបណ្តាល និងសាកល្បង
នៅក្នុងជំហាននេះ យើងបំបែកសំណុំទិន្នន័យសម្គាល់មុខរបស់យើងជាពីរផ្នែកដោយប្រើវិធីសាស្ត្របំបែកការធ្វើតេស្តរថភ្លើងពីការជ្រើសរើស sklearn.model ។ គោលដៅនៃការបែងចែកនេះគឺដើម្បីវាយតម្លៃការអនុវត្តរបស់ម៉ូដែលរបស់យើងបន្ទាប់ពីការបណ្តុះបណ្តាល
មុខងារបំបែកការធ្វើតេស្តរថភ្លើងទទួលយកជាទិន្នន័យបញ្ចូល X និងស្លាក y ។ ហើយវាបែងចែកពួកគេទៅជាឈុតហ្វឹកហាត់ និងតេស្ត។ យើងជ្រើសរើសទំហំតេស្ត = 0.2 ក្នុងឧទាហរណ៍នេះ។ នេះមានន័យថា 20% នៃទិន្នន័យនឹងត្រូវបានប្រើប្រាស់ជាសំណុំតេស្ត និង 80% ជាសំណុំបណ្តុះបណ្តាល។ លើសពីនេះ យើងប្រើស្ថានភាពចៃដន្យ=42 ដើម្បីធានាថាទិន្នន័យត្រូវបានបែងចែកជាប់លាប់រាល់ពេលដែលកូដត្រូវបានអនុវត្ត។
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
ការរៀបចំទិន្នន័យ
គោលបំណងនៃដំណើរការទិន្នន័យជាមុនគឺដើម្បីរៀបចំវាសម្រាប់ការបញ្ចូលទៅក្នុងគំរូ។ ទិន្នន័យត្រូវបានដំណើរការជាមុននៅក្នុងកូដនេះដោយបែងចែកចំណុចទិន្នន័យនីមួយៗដោយ 255 ។
តើអ្វីបានជំរុញចិត្តយើងឱ្យសម្រេចបាននេះ? Normalization គឺជានីតិវិធីដំណើរការមុនដែលប្រើក្នុង machine learning ដើម្បីធានាថាលក្ខណៈពិសេសទាំងអស់គឺស្ថិតនៅលើមាត្រដ្ឋានដូចគ្នា។ នៅក្នុងសេណារីយ៉ូនេះ ការបែងចែកដោយ 255 ធ្វើមាត្រដ្ឋានទិន្នន័យទៅចន្លោះពី 0 ទៅ 1 ដែលជាជំហានធ្វើឱ្យទិន្នន័យរូបភាពធម្មតាធម្មតា។
នេះបង្កើនល្បឿនការបញ្ចូលគ្នារបស់ម៉ូដែល និងអាចបង្កើនដំណើរការរបស់វា។
X_train = X_train / 255.0
X_test = X_test / 255.0
ការបង្កើតរបៀប
យើងចង់កំណត់អត្តសញ្ញាណបុគ្គលដែលមានមុខលេចឡើងក្នុងរូបភាព។ ក្នុងករណីនេះ យើងនឹងប្រើបណ្តាញភ្ជាប់ពេញលេញ ដែលជារឿយៗគេស្គាល់ថាជាបណ្តាញក្រាស់។ វាគឺជាបណ្តាញសរសៃប្រសាទសិប្បនិម្មិតដែលត្រូវបានប្រើដើម្បីបង្កើតគំរូ។
បណ្តាញសរសៃប្រសាទសិប្បនិម្មិតត្រូវបានយកគំរូតាមរបៀបដែលខួរក្បាលរបស់មនុស្សដំណើរការ និងត្រូវបានរៀបចំ។ ពួកវាត្រូវបានបង្កើតឡើងដោយថ្នាំងកែច្នៃព័ត៌មាន ឬណឺរ៉ូនដែលត្រូវបានភ្ជាប់។ ណឺរ៉ូននីមួយៗនៅក្នុងស្រទាប់មួយនៅក្នុងបណ្តាញក្រាស់មួយត្រូវបានភ្ជាប់ទៅគ្រប់ណឺរ៉ូននៅក្នុងស្រទាប់ខាងលើរបស់វា។
ម៉ូដែលនេះមានបួនស្រទាប់នៅក្នុងកូដនេះ។ ដើម្បីបញ្ចូលទៅក្នុងស្រទាប់បន្ទាប់ ទិន្នន័យបញ្ចូលត្រូវបានរុញភ្ជាប់ក្នុងស្រទាប់ទីមួយទៅជាអារេមួយវិមាត្រ។ ណឺរ៉ូន 128 និង 64 នៅក្នុងស្រទាប់ពីរខាងក្រោមត្រូវបានភ្ជាប់គ្នាទាំងស្រុង។
មុខងារធ្វើឱ្យសកម្ម ReLU គឺជាមុខងារធ្វើឱ្យសកម្មតែមួយគត់ដែលប្រើដោយស្រទាប់ទាំងនេះ។ ជាមួយនោះ យើងអាចទទួលបានគំរូដើម្បីសិក្សាពីការជាប់ទាក់ទងគ្នាដែលមិនមែនជាលីនេអ៊ែររវាងធាតុបញ្ចូល និងលទ្ធផល។ ស្រទាប់ចុងក្រោយប្រើមុខងារធ្វើឱ្យសកម្ម softmax ដើម្បីធ្វើការព្យាករណ៍។ ហើយវាគឺជាស្រទាប់ដែលតភ្ជាប់យ៉ាងពេញលេញជាមួយនឹងណឺរ៉ូនជាច្រើនដូចដែលមានថ្នាក់សក្តានុពល។
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(62 * 47,)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.Dense(len(target_names), activation='softmax')
])
ការចងក្រងគំរូ
គំរូត្រូវបានចងក្រងដោយប្រើមុខងារ "ចងក្រង" ។ យើងត្រូវរៀបចំគំរូសម្រាប់ការបណ្តុះបណ្តាល។ ដូច្នេះ យើងនឹងកំណត់ឧបករណ៍បង្កើនប្រសិទ្ធភាព មុខងារបាត់បង់ និងម៉ែត្រដែលនឹងត្រូវបានប្រើដើម្បីវាយតម្លៃគំរូ។
កំឡុងពេលហ្វឹកហាត់ អ្នកបង្កើនប្រសិទ្ធភាពទទួលខុសត្រូវក្នុងការផ្លាស់ប្តូរប៉ារ៉ាម៉ែត្ររបស់ម៉ូដែល។ ឧបករណ៍បង្កើនប្រសិទ្ធភាព "អាដាម" គឺជាបច្ចេកទេសបង្កើនប្រសិទ្ធភាពការរៀនស៊ីជម្រៅដ៏ពេញនិយម។
យើងប្រើមុខងារបាត់បង់ដើម្បីវាយតម្លៃដំណើរការរបស់ម៉ូដែលលើទិន្នន័យបណ្តុះបណ្តាល។ ដោយសារស្លាកគោលដៅគឺជាចំនួនគត់ដែលឆ្លុះបញ្ចាំងពីថ្នាក់របស់រូបភាពជាជាងវ៉ិចទ័រដែលបានអ៊ិនកូដក្តៅតែមួយ មុខងារបាត់បង់ "ប្រភេទឆ្លងកាត់តាមលំដាប់លំដោយ" មានលក្ខណៈអំណោយផល។
ជាចុងក្រោយ យើងកំណត់ម៉ែត្រដើម្បីវាយតម្លៃគំរូ ក្នុងករណីនេះ "ភាពត្រឹមត្រូវ" ។
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
ការបណ្តុះបណ្តាលគំរូ
យើងនឹងប្រើមុខងារ "សម" ដើម្បីបណ្តុះបណ្តាលគំរូ។
យើងនឹងផ្តល់ទិន្នន័យបណ្តុះបណ្តាល (រថភ្លើង X) និងស្លាកដែលពាក់ព័ន្ធ (រថភ្លើង y) ក៏ដូចជាការកំណត់ចំនួនវគ្គ (ការបន្តវេន) ដើម្បីដំណើរការជា 10។ នីតិវិធីបណ្តុះបណ្តាលកែប្រែទម្ងន់គំរូដើម្បីកាត់បន្ថយការបាត់បង់ (ភាពខុសគ្នារវាង ការព្យាករណ៍និងស្លាកពិតប្រាកដ) និងធ្វើអោយប្រសើរឡើងនូវភាពត្រឹមត្រូវនៃទិន្នន័យបណ្តុះបណ្តាល។
model.fit(X_train, y_train, epochs=10)
ការវាយតម្លៃគំរូ
ឥឡូវនេះ យើងត្រូវវាយតម្លៃគំរូដែលបានបណ្តុះបណ្តាលលើទិន្នន័យសាកល្បង។ យើងប្រើការបាត់បង់ការធ្វើតេស្ត ហើយភាពត្រឹមត្រូវនៃការធ្វើតេស្តត្រូវបានប្រើដើម្បីវាយតម្លៃដំណើរការរបស់ម៉ូដែល។ នៅលើទិន្នន័យតេស្ត X និងការធ្វើតេស្តស្លាកសញ្ញា y តេស្ត យើងត្រូវហៅ "មុខងារ model.evaluate"
មុខងារបញ្ចេញនូវភាពត្រឹមត្រូវនៃការធ្វើតេស្ត និងការបាត់បង់ការធ្វើតេស្ត។ ការបាត់បង់ការធ្វើតេស្តអថេរ និងភាពត្រឹមត្រូវនៃការធ្វើតេស្ត រៀងគ្នាមានតម្លៃទាំងនេះ។ ជាចុងក្រោយ យើងប្រើមុខងារ "បោះពុម្ព" ដើម្បីបង្ហាញភាពត្រឹមត្រូវនៃការធ្វើតេស្ត។
test_loss, test_accuracy = model.evaluate(X_test, y_test)
print("Test accuracy:", test_accuracy)
ការទស្សន៍ទាយថ្នាក់ និងទទួលបានថ្នាក់ព្យាករណ៍
ដោយប្រើគំរូបណ្តុះបណ្តាល និងទិន្នន័យសាកល្បង ក្បួនដោះស្រាយធ្វើឱ្យការព្យាករណ៍។ នៅពេលដែលទិន្នន័យតេស្តត្រូវបានបញ្ជូនទៅវិធីសាស្ត្រ "model.predict" វាបញ្ចេញនូវអារេនៃការទស្សន៍ទាយសម្រាប់រូបភាពនីមួយៗនៅក្នុងឈុតសាកល្បង។
ឈ្មោះថ្នាក់គោលដៅសម្រាប់រូបភាពនីមួយៗត្រូវបានទាញយកពីបញ្ជី "ឈ្មោះគោលដៅ" ដោយប្រើមុខងារ "np.argmax" ដើម្បីកំណត់លិបិក្រមជាមួយនឹងប្រូបាប៊ីលីតេដែលបានព្យាករណ៍ច្រើនបំផុត។ បន្ទាប់មកសន្ទស្សន៍នេះត្រូវបានប្រើដើម្បីកំណត់ថ្នាក់ដែលបានព្យាករណ៍សម្រាប់រូបភាពនីមួយៗ។
ដោយប្រើការយល់ក្នុងបញ្ជី ការទស្សន៍ទាយទាំងអស់នៅក្នុងអារេ "ការទស្សន៍ទាយ" ត្រូវបានទទួលរងនូវវិធីសាស្រ្តនេះ ដែលបណ្តាលឱ្យមានបញ្ជី "ថ្នាក់ព្យាករណ៍" ។
predictions = model.predict(X_test)
predicted_classes = [target_names[np.argmax(prediction)] for prediction in predictions]
ការមើលឃើញការទស្សន៍ទាយ
ឥឡូវនេះយើងអាចមើលពីរបៀបដែលគំរូរបស់យើងមើលទៅ។
ដើម្បីវាយតម្លៃថាតើម៉ូដែលធ្វើបានល្អប៉ុណ្ណានោះ រូបថត 10 ដំបូង និងការព្យាករណ៍របស់ពួកគេនឹងត្រូវបានបង្ហាញ។ វានឹងកំណត់រូបភាពក្នុងមាត្រដ្ឋានប្រផេះ ហើយបង្ហាញទាំងថ្នាក់ពិតនៃរូបភាព និងថ្នាក់ដែលបានព្យាករដោយគំរូដោយប្រើម៉ូឌុល matplotlib.pyplot ។
មុខងារ “imshow” ត្រូវបានប្រើដោយ for loop ដើម្បីគូសរូបនីមួយៗនៃឈុតសាកល្បង 10 ដំបូង។ ឈ្មោះគោលដៅ[y test[i]] និងថ្នាក់ព្យាករណ៍[i] ត្រូវបានប្រើដើម្បីកំណត់ថ្នាក់ពិតរបស់រូបភាព និងថ្នាក់ព្យាករណ៍រៀងៗខ្លួន។ បន្ទាប់មកចំណងជើងនៃគ្រោងនីមួយៗត្រូវបានចង្អុលបង្ហាញដោយការចាត់ថ្នាក់ទាំងនេះ។
ចុងក្រោយ គ្រោងត្រូវបានបង្ហាញដោយប្រើវិធីសាស្ត្រ plt.show() ។
for i in range(10):
plt.imshow(X_test[i].reshape(62, 47), cmap='gray')
plt.title(f"True: {target_names[y_test[i]]}, Predicted:{predicted_classes[i]}")
plt.show()
រុំឡើង
TensorFlow ផ្តល់នូវបរិយាកាសពេញលេញ និងអាចបត់បែនបានសម្រាប់ការបង្កើតគំរូសិក្សាម៉ាស៊ីន។
តាមរយៈការកែសម្រួលគំរូដើម្បីបំពេញតាមតម្រូវការជាក់លាក់ ឬដោយការបន្ថែមការអភិវឌ្ឍថ្មីក្នុងការសិក្សាដោយម៉ាស៊ីន ភាពត្រឹមត្រូវនៃគំរូអាចនឹងត្រូវបានបង្កើនបន្ថែមទៀត។
TensorFlow និងការសម្គាល់ផ្ទៃមុខទំនងជានឹងត្រូវបានប្រើកាន់តែខ្លាំងឡើងនៅក្នុងឧស្សាហកម្មដូចជាប្រព័ន្ធសុវត្ថិភាព ការផ្ទៀងផ្ទាត់ជីវមាត្រ និងការថែទាំសុខភាពនាពេលអនាគត។ យើងនឹងឃើញការច្នៃប្រឌិតដ៏គួរឱ្យចាប់អារម្មណ៍ក្នុងពេលឆាប់ៗនេះ។
សូមផ្ដល់យោបល់