เขียนโดย ดร.จักรกฤษณ์ แสงแก้ว วันที่ 19 ตุลาคม 2561
Intel Movidius เป็นหน่วยประมวลผลภาพ VPU (Vision Processing Unit) มีความโดดเด่นคือ เร่งความเร็วในงาน Deep Learning และ Neual Network ประมวลผลได้ที่ 100 GFLOPS โดยกินไฟเพียง 1 วัตต์ ราคา $80 ปล. ได้รับการสนับสนุนจากงบวิจัยส่วนบุคคล
ก่อนอื่น สั่งซื้อ Intel Movidius ได้ที่ online shopping ครับ ปล. รอสินค้าประมาณ 2-3 สัปดาห์
สำหรับงานนี้จะใช้งาน Intel Movidius กับ Raspberry Pi ดังนั้น ต้องเตรียมความพร้อม Raspberry PI ให้เรียบร้อยก่อนครับ (ต้องใช้งาน RPI เป็นก่อนครับ ) - Raspberry Pi 3 B+ - SD Card - โมดูลกล้อง ฯลฯ - โมดูลจอแสดงผล (กรณีต้องการจอแสดงผล) จากนั้น เขียน OS Image ลงบนแผ่น SD Card และบูต RPI
$ sudo /etc/init.d/dphys-swapfile stop แก้ /etc/dphys-swapfile เปลี่ยน CONF_SWAPSIZE=1024 ขยาย swap memory เป็น 1GB $ sudo /etc/init.d/dphys-swapfile start
$ sudo apt-get purge wolfram-engine $ sudo apt-get purge libreoffice* $ sudo apt-get clean $ sudo apt-get autoremove
ปัจจุบัน NCSDK มี 2 เวอร์ชั่น 1 และ 2 มีวิธีการติดตั้งดังนี้ NCSDK 2.x : INSTALL !! $ git clone -b ncsdk2 https://github.com/movidius/ncsdk.git $ cd ncsdk $ sudo make install ปล. ใช้เวลาคอมไพล์และติดตั้งประมาณ 3-4 ชั่วโมงครับ
$ sudo pip3 install opencv-python สำหรับปัญหาที่เกิดขึ้นให้แก้ไขเป็นกรณีไปนะครับ เช่น ระบบปฏิบัติการที่ผมใช้ต้องการ libqtgui4 และ libqt4-test ผมก็ติดตั้งเพิ่มดังนี้ $ sudo apt-get install libqtgui4 $ sudo apt-get install libqt4-test
กรณีต่อกล้องแล้ว ให้เปิดใช้งานกล้องด้วยครับ ปล. กล้องที่ว่านี้เป็นสายสัญญาณ CSI นะครับไม่ใช่ กล้องเว็บแคมที่ใช้สาย usb ครับ $ sudo raspi-config
จากนั้นเขียนโค๊ดเพื่อทดสอบติดต่อกับ Movidius (VPU) ตัวนี้ ดังนี้ from mvnc import mvncapi device_list = mvncapi.enumerate_devices() device = mvncapi.Device(device_list[0]) device.open() สรุปว่า : ตอนนี้สามารถติดต่อกับ VPU ได้แล้วครับ
ทดสอบกับไพธอน 3 สามารถใช้งานได้เช่นกันครับ
git clone https://github.com/movidius/ncappzoo cd ncappzoo/apps/hello_ncs_py python3 hello_ncs.py
1. อ่าน README ไปยังไดเร็คทอรี่ ncappzoo/app/image-classifier $ cd ~/movidius/ncappzoo/apps/image-classifier 2. คอมไพล์ $ make run พบว่าเกิดปัญหา : แจ้งว่า module compiled against API version 0xc but this version of numpy is 0xb
พยายาม : สืบค้นเพื่อแก้ปัญหาดังกล่าว มีคนแนะนำให้ใช้คำสั่งต่อไปนี้ sudo pip install numpy --upgrade --ignore-installed และคอมไพล์ใหม่อีกครั้งด้วยคำสั่ง $ make run พบว่าแก้ไขปัญหาได้ : ขอบคุณ คุณ a20 ที่มา : https://stackoverflow.com/questions/33859531/runtimeerror-module-compiled-against-api-version-a-but-this-version-of-numpy-is
ข้อมูลของ ncappzoo เก็บภาพสำหรับทดสอบไว้ที่ ncappzoo/data/images แสดงดังนี้ ในไฟล์ image-classifier.py เป็นการเปิดไฟล์ data/images/cat.jpg และจัดหมวดหมู่ภาพดังกล่าวไว้ในกลุ่มของ "แมว" ด้วยความเชื่อมั่น 40.5%
แนะนำให้เข้าถึงไฟล์ใน raspberry pi ผ่าน sftp จะช่วยลดการใช้คำสั่ง command line ไปได้เยอะ สะดวกในการอ่านและเข้าถึงไฟล์ในตัว RPI ครับ :) ปล. ผมใช้โปรแกรมที่ชื่อว่า Files ซึ่งติดมากับ Ubuntu เมื่อเปิดโปรแกรมแล้วให้กด Ctrl + l (คอนโทรล ตามด้วย ตัวแอล) จะแสดงช่องระบุพาร์ทด้านบน ให้พิมพ์ sftp://pi@192.168.34.64 และป้อนรหัสผ่านลงของ User Pi จากนั้นจะสามารถเข้าถึงผ่านโปรแกรม Files และใช้งานไฟล์ของ RPI ได้อย่างสะดวกครับ :) ปล. IP และ Username ขึ้นกับการตั้งค่าภายในของ OS ที่ Raspberry pi กำลังใช้งาน
mvNCCompile เป็นคำสั่งสำหรับแปลงโมเดล (weight) ที่อยู่ในรูปแบบ caffemodel ให้เป็นรูปแบบกราฟ (graph) เพื่อใช้งานใน intel movidius VPU เช่น nvNCCompile ./yolo.prototxt -w ./yolo.caffemodels -s 12 เมื่อ prototxt เป็นการกำหนดโครงสร้างโมเดล weights เป็นน้ำหนักของแต่ละเลเยอร์ ซึ่งได้จากการ train 1. ดาวน์โหลดซอร์สโค๊ด Yolo จาก https://github.com/duangenquan/YoloV2NCS.git ด้วยคำสั่ง $ git clone https://github.com/duangenquan/YoloV2NCS.git 2. แปลง weight เป็น graph เพื่อใช้กับ movidius cd YoloV2NCS mvNCCompile ./models/caffemodels/yoloV2Tiny20.prototxt -w ./models/caffemodels/yoloV2Tiny20.caffemodel -s 12 3. ได้กราฟออกมาแล้ว
ตอนนี้สามารถรัน image classifier ด้วย yolo2 บน movidius ได้แล้วครับ
- สั่งจอแสดงผลที่ Lazda ค้นด้วย TFT LCD 3.2 inch + Raspberry Pi - ติดตั้งตามคู่มือ ต่อไปนี้ https://www.waveshare.com/wiki/3.2inch_RPi_LCD_(B)
วันนี้ได้เรียนรู้การตรวจจับวัตถุ โดยใช้ Intel Movidius (Vision Processing Unit: VPU) เป็นความรู้ที่ทันสมัยมาก ๆ แต่ทั้งนี้หน่วยประมวลผล VPU ตัวนี้ เหมาะกับงาน inference (การอนุมาน) เท่านั้น (พยากรณ์และจัดหมวดหมู่) ไม่เหมาะกับการ Train (สอน) หากต้องการสอนให้คอมพิวเตอร์เรียนรู้ข้อมูลควรใช้ GPU อาทิ Nvidia Geforce ครับ :)