Honk هو إعادة تخطيط Pytorch لشبكات Neural TensorFlow من Google من أجل اكتشاف الكلمات الرئيسية ، والتي تصاحب الإصدار الأخير من مجموعة بيانات أوامر الكلام الخاصة بهم. لمزيد من التفاصيل ، يرجى الرجوع إلى الكتابة:
Honk مفيد لبناء قدرات التعرف على الكلام على الجهاز لوكلاء ذكيين تفاعليين. يمكن استخدام التعليمات البرمجية الخاصة بنا لتحديد الأوامر البسيطة (على سبيل المثال ، "توقف" و "GO") ويتم تكييفها لاكتشاف "مشغلات الأوامر" المخصصة (على سبيل المثال ، "يا سيري!").
تحقق من هذا الفيديو للحصول على عرض تجريبي من Honk في العمل!
استخدم الإرشادات أدناه لتشغيل التطبيق التجريبي (الموضح في الفيديو أعلاه) بنفسك!
حاليًا ، يتمتع Pytorch بدعم رسمي لـ Linux و OS X. وبالتالي ، لن يتمكن مستخدمو Windows من تشغيل هذا العرض التوضيحي بسهولة.
لنشر العرض التوضيحي ، قم بتشغيل الأوامر التالية:
pip install -r requirements.txt
apt-get install freeglut3-dev
)./fetch_data.sh
python .
python utils/speech_demo.py
إذا كنت بحاجة إلى ضبط الخيارات ، مثل إيقاف تشغيل CUDA ، يرجى تحرير config.json
.
ملاحظات إضافية لنظام التشغيل Mac OS X:
python .
ينشر خدمة الويب لتحديد ما إذا كان الصوت يحتوي على كلمة الأمر. بشكل افتراضي ، يتم استخدام config.json
للتكوين ، ولكن يمكن تغييره باستخدام --config=<file_name>
. إذا كان الخادم خلف جدار الحماية ، فإن سير عمل واحد هو إنشاء نفق SSH واستخدام إعادة توجيه المنفذ مع المنفذ المحدد في التكوين (الافتراضي 16888).
في مستودع نماذج Honk ، هناك العديد من النماذج التي تم تدريبها مسبقًا لـ Caffe2 (ONNX) و Pytorch. يجلب البرنامج النصي fetch_data.sh
هذه النماذج ويستخلصها إلى دليل model
. يمكنك تحديد النموذج والواجهة الخلفية التي يجب استخدامها في ملف Config model_path
و backend
، على التوالي. على وجه التحديد ، يمكن أن تكون backend
إما caffe2
أو pytorch
، اعتمادًا على النماذج التي يوجد بها model_path
. لاحظ أنه من أجل تشغيل نماذج ONNX الخاصة بنا ، يجب أن تكون الحزم onnx
و onnx_caffe2
موجودة على نظامك ؛ هذه غائبة في المتطلبات.
لسوء الحظ ، فإن جعل المكتبات تعمل على RPI ، وخاصة Librorosa ، ليس أمرًا واضحًا مثل تشغيل بعض الأوامر. نوجز عمليةنا ، والتي قد تعمل أو لا تعمل من أجلك.
sudo apt-get install -y protobuf-compiler libprotoc-dev python-numpy python-pyaudio python-scipy python-sklearn
pip install protobuf
pip install --no-deps onnx
caffe2
إلى متغير بيئة PYTHONPATH
. بالنسبة لنا ، تم تحقيق ذلك عن طريق export PYTHONPATH=$PYTHONPATH:/home/pi/caffe2/build
pip install onnx-caffe2
pip install -r requirements_rpi.txt
pip install --no-deps resampy librosa
python -c "import librosa"
. يجب أن يرمي خطأ فيما يتعلق بـ Numba ، لأننا لم نقم بتثبيته.@numba.jit
من /home/pi/.local/lib/python2.7/site-packages/resampy/interpn.py
./fetch_data.sh
config.json
، قم بتغيير backend
إلى caffe2
و model_path
إلى model/google-speech-dataset-full.onnx
.python .
إذا لم تكن هناك أخطاء ، فقد نجحت في نشر النموذج ، يمكن الوصول إليه عبر المنفذ 16888 افتراضيًا.python utils/speech_demo.py
. ستحتاج إلى ميكروفون يعمل ومكبرات صوت. إذا كنت تتفاعل مع RPI الخاص بك عن بُعد ، فيمكنك تشغيل عرض الكلام محليًا وتحديد نقطة النهاية عن بُعد- --server-endpoint=http://[RPi IP address]:16888
. لسوء الحظ ، ليس لدى عميل ضمان الجودة أي دعم لعامة الناس حتى الآن ، لأنه يتطلب خدمة ضمان الجودة المخصصة. ومع ذلك ، لا يزال من الممكن استخدامه لإعادة استهداف الكلمة الرئيسية.
python client.py
يدير عميل QA. يمكنك إعادة استهداف كلمة رئيسية عن طريق القيام python client.py --mode=retarget
. يرجى ملاحظة أن النص إلى الكلام قد لا يعمل بشكل جيد على توزيعات Linux ؛ في هذه الحالة ، يرجى توفير بيانات اعتماد IBM Watson عبر- --watson-username
و- --watson--password
. يمكنك عرض جميع الخيارات عن طريق القيام python client.py -h
.
نماذج CNN . python -m utils.train --type [train|eval]
تدريبات أو تقييم النموذج. إنه يتوقع أن تتبع جميع أمثلة التدريب نفس تنسيق مجموعة بيانات أوامر الكلام. سير العمل الموصى به هو تنزيل مجموعة البيانات وإضافة كلمات رئيسية مخصصة ، نظرًا لأن مجموعة البيانات تحتوي بالفعل على العديد من عينات الصوت المفيدة وضوضاء الخلفية.
النماذج المتبقية . نوصي بنماذج فرطاميرات التالية لتدريب أي من النماذج res{8,15,26}[-narrow]
على مجموعة بيانات أوامر الكلام:
python -m utils.train --wanted_words yes no up down left right on off stop go --dev_every 1 --n_labels 12 --n_epochs 26 --weight_decay 0.00001 --lr 0.1 0.01 0.001 --schedule 3000 6000 --model res{8,15,26}[-narrow]
لمزيد من المعلومات حول نماذجنا المتبقية العميقة ، يرجى الاطلاع على ورقتنا:
هناك خيارات الأوامر المتاحة:
خيار | تنسيق الإدخال | تقصير | وصف |
---|---|---|---|
--audio_preprocess_type | {mfccs ، pcen} | MFCCS | نوع المعالجة المسبقة للصوت للاستخدام |
--batch_size | [1 ، ن) | 100 | حجم الدفعة الصغيرة للاستخدام |
--cache_size | [0 ، INF) | 32768 | عدد العناصر في ذاكرة التخزين المؤقت الصوتي ، يستهلك حوالي 32 كيلو بايت * ن |
--conv1_pool | [1 ، INF) [1 ، INF) | 2 2 | عرض وارتفاع مرشح المسبح |
--conv1_size | [1 ، INF) [1 ، INF) | 10 4 | عرض وارتفاع مرشح المقنع |
--conv1_stride | [1 ، INF) [1 ، INF) | 1 1 | عرض وطول الخطوة |
--conv2_pool | [1 ، INF) [1 ، INF) | 1 1 | عرض وارتفاع مرشح المسبح |
--conv2_size | [1 ، INF) [1 ، INF) | 10 4 | عرض وارتفاع مرشح المقنع |
--conv2_stride | [1 ، INF) [1 ، INF) | 1 1 | عرض وطول الخطوة |
--data_folder | خيط | /بيانات/خطاب_dataset | طريق إلى البيانات |
--dev_every | [1 ، INF) | 10 | فاصل ديف من حيث الحقبة |
--dev_pct | [0 ، 100] | 10 | النسبة المئوية من إجمالي مجموعة لاستخدامها لـ DEV |
--dropout_prob | [0.0 ، 1.0) | 0.5 | معدل التسرب للاستخدام |
--gpu_no | [-1 ، ن] | 1 | وحدة معالجة الرسومات لاستخدامها |
--group_speakers_by_id | {صحيح ، خطأ} | حقيقي | ما إذا كنت يجب تجميع مكبرات الصوت عبر القطار/DEV/اختبار |
--input_file | خيط | المسار إلى النموذج للتحميل | |
--input_length | [1 ، INF) | 16000 | طول الصوت |
--lr | (0.0 ، INF) | {0.1 ، 0.001} | معدل التعلم للاستخدام |
--type | {Train ، eval} | يدرب | الوضع للاستخدام |
--model | خيط | CNN-TRAD-BOL2 | واحدة من cnn-trad-pool2 ، cnn-tstride-{2,4,8} ، cnn-tpool{2,3} ، cnn-one-fpool3 ، cnn-one-fstride{4,8} ، res{8,15,26}[-narrow] ، cnn-trad-fpool3 ، cnn-one-stride1 |
--momentum | [0.0 ، 1.0) | 0.9 | الزخم لاستخدامه في SGD |
--n_dct_filters | [1 ، INF) | 40 | عدد قواعد DCT للاستخدام |
--n_epochs | [0 ، INF) | 500 | عدد الحقبة |
--n_feature_maps | [1 ، INF) | {19 ، 45} | عدد خرائط الميزات لاستخدامها في الهندسة المعمارية المتبقية |
--n_feature_maps1 | [1 ، INF) | 64 | عدد خرائط الميزات لـ Conv Net 1 |
--n_feature_maps2 | [1 ، INF) | 64 | عدد خرائط الميزات لـ Conv Net 2 |
--n_labels | [1 ، ن) | 4 | عدد الملصقات المراد استخدامها |
--n_layers | [1 ، INF) | {6 ، 13 ، 24} | عدد طبقات الالتواء للهندسة المعمارية المتبقية |
--n_mels | [1 ، INF) | 40 | عدد مرشحات MEL للاستخدام |
--no_cuda | يُحوّل | خطأ شنيع | سواء لاستخدام كودا |
--noise_prob | [0.0 ، 1.0] | 0.8 | احتمال الخلط مع الضوضاء |
--output_file | خيط | نموذج/Google-Speech-Dataset.pt | الملف لحفظ النموذج إلى |
--seed | (INF ، INF) | 0 | البذرة لاستخدامها |
--silence_prob | [0.0 ، 1.0] | 0.1 | احتمال اختيار الصمت |
--test_pct | [0 ، 100] | 10 | النسبة المئوية من إجمالي مجموعة للاستخدام للاختبار |
--timeshift_ms | [0 ، INF) | 100 | الوقت بالمللي ثانية لتغيير الصوت بشكل عشوائي |
--train_pct | [0 ، 100] | 80 | النسبة المئوية من إجمالي مجموعة للاستخدام للتدريب |
--unknown_prob | [0.0 ، 1.0] | 0.1 | احتمال اختيار كلمة غير معروفة |
--wanted_words | String1 String2 ... Stringn | أمر عشوائي | الكلمات المستهدفة المطلوبة |
Honkling هو تنفيذ JavaScript من Honk. مع Honkling ، من الممكن تنفيذ العديد من تطبيقات الويب مع وظائف اكتشاف الكلمات الرئيسية في المتصفح.
من أجل تحسين مرونة Honk و Honkling ، نقدم برنامجًا يقوم ببناء مجموعة بيانات من مقاطع فيديو YouTube. يمكن الاطلاع على التفاصيل في مجلد keyword_spotting_data_generator
يمكنك القيام بما يلي لتسجيل الصوت المتسلسل وحفظه بنفس تنسيق مجموعة بيانات أوامر الكلام:
python -m utils.record
إدخال الإدخال إلى التسجيل ، والسهم لأعلى للتراجع ، و "Q" للانتهاء. بعد ثانية واحدة من الصمت ، يتوقف التسجيل تلقائيًا.
تتوفر عدة خيارات:
--output-begin-index: Starting sequence number
--output-prefix: Prefix of the output audio sequence
--post-process: How the audio samples should be post-processed. One or more of "trim" and "discard_true".
تتكون ما بعد المعالجة من تقليم أو التخلص من الصوت "عديمة الفائدة". التشذيب غير مرغوب فيه: يتم قطع التسجيلات الصوتية إلى أعلى نافذة من X milliseconds ، المحددة بواسطة- --cutoff-ms
. يستخدم التخلص من الصوت "عديم الفائدة" ( discard_true
) نموذجًا تم تدريبه مسبقًا لتحديد العينات المربكة ، وتجاهل العلامات المسمى بشكل صحيح. يتم تعريف النموذج الذي تم تدريبه مسبقًا والتسمية الصحيحة بواسطة- --config
و --correct-label
، على التوالي.
على سبيل المثال ، ضع في اعتبارك python -m utils.record --post-process trim discard_true --correct-label no --config config.json
. في هذه الحالة ، تسجل الأداة المساعدة سلسلة من قصاصات الكلام ، وتقليمها إلى ثانية واحدة ، وأخيراً يتجاهل أولئك الذين لم يتم تسميتهم "لا" بواسطة النموذج في config.json
.
python manage_audio.py listen
هذا يساعد في تعيين القيم العاقلة لـ-- --min-sound-lvl
للتسجيل.
python manage_audio.py generate-contrastive --directory [directory]
يولد أمثلة متناقضة من جميع ملفات .wav في [directory]
باستخدام التجزئة الصوتية.
تحتوي مجموعة بيانات أوامر الكلام على مقتطفات مدتها ثانية واحدة من الصوت.
python manage_audio.py trim --directory [directory]
تقلب إلى أعلى ثقم واحد لجميع ملفات .wav في [directory]
. يجب على المستخدم الدقيق التحقق يدويًا من جميع عينات الصوت باستخدام محرر الصوت مثل AUDACITY.