บอร์ด YY3568 เป็นบอร์ดที่ใช้ชิปประมวลผล RK3568 จากบริษัท Rockchip โดยเป็นสถาปัตยกรรม ARM Cortex-A55 64บิต จำนวน 4 คอร์ ที่มีสัญญาณนาฬิกาความเร็ว 2.0 GHz พร้อมด้วย NPU ประสิทธิภาพในการประมวลผลอยู่ที่ 1 TOPS พร้อม GPU แบบดูอัลคอร์ Mali-G52 ที่มาพร้อมกับการเชื่อมต่อที่ค่อนข้างครอบคลุมกับความต้องการในการใช้งานทั่วไป
ซึ่งเราได้ทำ การรีวิวการใช้งานบน Android 11 ไปแล้ว ในวันนี้เราจะมารีวิวการใช้งานและการทดสอบประสิทธิภาพบน Linux กัน โดยทาง youyeetoo มีให้เลือก distro ทั้ง Debian และ Ubuntu ซึ่งในรีวิวนี้จะเป็นการรีวิวด้วย Ubuntu 20
การติดตั้ง Image Debian / Ubuntu
เราสามารถเลือก image ในการติดตั้งสำหรับ Debian และ Ubuntu ได้
รูปแสดงรายการไฟล์ image สำหรับติดตั้งเลือกติดตั้ง OS Debian 10
รูปแสดงรายการไฟล์ image สำหรับติดตั้งเลือกติดตั้ง OS Ubuntu 20
โดยเราจะทำการเลือก image ที่ลงท้ายด้วย -edp เนื่องจากว่าจะใช้งานกับจอภาพ 11.6″ eDPของ youyeetoo ในการทดสอบ หลังจากนั้นก็ทำการเขียน image ไฟล์ลงไปยังบอร์ด ด้วยโปรแกรม RKDevTool เหมือนกับที่ทำการติดตั้ง Android ได้เลย รอไม่นานก็เขียนเสร็จเรียบร้อย
รูปแสดงการติดตั้ง image ผ่านโปรแกรม RKDevTool
หลังจากติดตั้งเรียบร้อยแล้วเราก็ทำการกด reset เพื่อให้บอร์ดบูตเข้ากับ OS Ubuntu 20 ที่พึ่งติดตั้งลงไป จากนั้นเราก็มาทดสอบประสิทธิภาพของบอร์ดกันต่อไป
รูปแสดงหน้า desktop หลังจากบูตเข้าใช้งาน
รูปแสดงคุณสมบัติของบอร์ด YY3568 จากโปรแกรม Phoronix TestSuite
การทดสอบประสิทธิภาพทั่วไป
การทดสอบประสิทธิภาพบน Ubuntu เราจะเริ่มจาก sbc-bench.sh จาก Github
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
tinymembench, ramlat, mhz. Done. Checking cpufreq OPP. Done (results will be available in 10-16 minutes). Executing tinymembench. Done. Executing RAM latency tester. Done. Executing OpenSSL benchmark. Done. Executing 7-zip benchmark. Done. Checking cpufreq OPP again. Done (13 minutes elapsed). Results validation: * Advertised vs. measured max CPU clockspeed: -5.4% before, -6.4% after * Background activity (%system) OK * No throttling Memory performance memcpy: 3074.9 MB/s memset: 5942.3 MB/s 7-zip total scores (3 consecutive runs): 4496,4437,4431, single-threaded: 1211 OpenSSL results: type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes aes-128-cbc 178431.77k 520431.64k 992779.52k 1288375.30k 1411738.28k 1420580.18k aes-128-cbc 181153.17k 521213.70k 994408.62k 1288928.94k 1410916.35k 1421082.62k aes-192-cbc 172219.92k 460495.64k 802809.26k 990434.99k 1061336.41k 1067149.99k aes-192-cbc 172259.37k 460785.32k 802708.99k 990319.62k 1060656.47k 1066183.34k aes-256-cbc 165998.18k 424880.55k 694931.71k 826145.11k 872235.01k 875752.11k aes-256-cbc 165966.50k 424769.43k 694433.88k 826590.55k 872420.69k 875724.80k |
ซึ่งถ้าหากสนใจสามารถดูผลการทดสอบแบบเต็มได้ที่ http://ix.io/4Ga2
จากนั้นก็ทำการทดสอบด้วย Phoronic TestSuite เพื่อทดสอบความเร็วอ่านเขียนของ Flash Memory กัน
ความเร็วในการอ่านไฟล์บน Flash memory : ไฟล์ขนาด 512MB ด้วย block size 1MB ทำความเร็วได้ที่ 1190.83 MB/วินาที ซึ่งดูสูงมากเดี๋ยวจะต้องทำการตรวจสอบอีกครั้งหนึ่ง
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
IOzone 3.465: pts/iozone-1.9.6 [Record Size: 1MB - File Size: 512MB - Disk Test: Read Performance] Test 1 of 8 Test Profile Status: Deprecated Estimated Trial Run Count: 3 Estimated Test Run-Time: 20 Minutes Record Size: 1MB - File Size: 512MB - Disk Test: Read Performance: 1068.0517578125 1322.853515625 1323.724609375 1251.857421875 1277.0048828125 1307.0283203125 1366.4228515625 1238.892578125 1197.197265625 999.79296875 1297.1181640625 1060.5302734375 979.6884765625 1058.6123046875 1113.677734375 Average: 1190.83 MB/s Deviation: 11.01% Samples: 15 Comparison of 1,716 OpenBenchmarking.org samples since 26 February 2011 to 2 August; median result: 4716 MB/s. Box plot of samples: [ |---*--------###########!######*####---*----*-------------*----*--| ] ^ This Result (6th Percentile): 1191 512GB database: 5833 ^ 240GB DELLBOSS VD: 11355 ^ 480GB SAMSUNG MZ7LH480: 10579 ^ 2 x 250GB Samsung SSD 850: 8195 ^ 5 x 500GB Crucial_CT500MX2: 7346 ^ |
ความเร็วในการเขียนไฟล์ลง Flash memory : ไฟล์ขนาด 512MB ด้วย block size 1MB ทำได้ที่ 34.96 MB/วินาที
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
IOzone 3.465: pts/iozone-1.9.6 [Record Size: 1MB - File Size: 512MB - Disk Test: Write Performance] Test 1 of 1 Test Profile Status: Deprecated Estimated Trial Run Count: 3 Estimated Time To Completion: 1 Minute [15:26 UTC] Started Run 1 @ 15:25:41 Started Run 2 @ 15:26:11 Started Run 3 @ 15:26:40 Record Size: 1MB - File Size: 512MB - Disk Test: Write Performance: 34.0322265625 35.373046875 35.4658203125 Average: 34.96 MB/s Deviation: 2.29% Comparison of 1,742 OpenBenchmarking.org samples since 26 February 2011 to 2 August; median result: 266 MB/s. Box plot of samples: [-####!########-------------*-------------------------------| ] ^ 960GB INTEL SSDPED1D960GAY: 1223 |
ซึ่งจากความเร็วในการอ่านที่ดูเร็วมากอาจเป็นไปได้ว่าเป็นการอ่านจาก cache เลยจะทำการทดลองอ่านค่าโดยระบุ parameter -I ด้วยเพื่อให้อ่านค่าจากไฟล์โดยตรง
ซึ่งจะได้ค่าความเร็วในการอ่านอยู่ที่ 113MB/วินาที การเขียนไฟล์อยู่ที่ 89MB/วินาที ซึ่งตรงกับความเร็วอ่านเฉลี่ยของ eMMC4.5 แต่การเขียนทำได้ไวมากขึ้นตรงกับความเร็วเฉลี่ยนของ eMMC5.0 ซึ่งถือว่าเมื่ออ่านเขียนตรงเลยทำความเร็วได้น่าประทับใจ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
root@smartfly:/# iozone -e -I -a -s 512M -r 1024k -r 16384k -i 0 -i 1 -i 2 Iozone: Performance Test of File I/O Version $Revision: 3.489 $ Compiled for 64 bit mode. Build: linux Run began: Wed Sep 20 15:24:27 2023 Include fsync in write timing O_DIRECT feature enabled Auto Mode File size set to 524288 kB Record Size 1024 kB Record Size 16384 kB Command line used: iozone -e -I -a -s 512M -r 1024k -r 16384k -i 0 -i 1 -i 2 Output is in kBytes/sec Time Resolution = 0.000001 seconds. Processor cache size set to 1024 kBytes. Processor cache line size set to 32 bytes. File stride size set to 17 * record size. random random bkwd record stride kB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread 524288 1024 87888 89372 112574 113474 113612 85778 524288 16384 98887 95894 152500 153558 153118 100792 iozone test complete. |
การทดสอบประสิทธิภาพของเครือข่าย
ในการทดสอบประสิทธิภาพของเครือข่ายเราจะทำการทดสอบทั้ง LAN และ Wi-Fi โดยการทดสอบด้วยโปรแกรม iperf3 และ Speed test บนเว็บ Ookla ในการทดสอบ
iperf3 บน ETH0
จากคุณสมบัติของบอร์ดที่แจ้งว่า ethernet port เป็น gigabit เมื่อเราทดสอบที่ port ETH0 ก็พบว่าความเร็วในการส่งข้อมูลทำได้ที่ 0.94 Gbits ต่อวินาที ก็ถือว่าทำความเร็วได้ดีมาก เพราะตอนทดสอบได้การต่อระหว่างเครื่อง server และ client ของ iperf3 ผ่าน router ที่แถมมากับอินเตอร์เน็ตของAIS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
root@smartfly:/# iperf3 -c 192.168.1.162 -f g Connecting to host 192.168.1.162, port 5201 [ 5] local 192.168.1.131 port 39516 connected to 192.168.1.162 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 113 MBytes 0.95 Gbits/sec 0 451 KBytes [ 5] 1.00-2.00 sec 113 MBytes 0.95 Gbits/sec 0 477 KBytes [ 5] 2.00-3.00 sec 112 MBytes 0.94 Gbits/sec 0 477 KBytes [ 5] 3.00-4.00 sec 112 MBytes 0.94 Gbits/sec 0 499 KBytes [ 5] 4.00-5.00 sec 112 MBytes 0.94 Gbits/sec 0 525 KBytes [ 5] 5.00-6.00 sec 113 MBytes 0.94 Gbits/sec 0 525 KBytes [ 5] 6.00-7.00 sec 112 MBytes 0.94 Gbits/sec 0 525 KBytes [ 5] 7.00-8.00 sec 113 MBytes 0.95 Gbits/sec 0 549 KBytes [ 5] 8.00-9.00 sec 112 MBytes 0.94 Gbits/sec 0 549 KBytes [ 5] 9.00-10.00 sec 112 MBytes 0.94 Gbits/sec 0 549 KBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-10.00 sec 1.10 GBytes 0.94 Gbits/sec 0 sender [ 5] 0.00-10.04 sec 1.10 GBytes 0.94 Gbits/sec receiver iperf Done. |
iperf3 บน ETH1
ในการทดสอบบนพอร์ตที่เหลือคือ ETH1 ก็ได้ความเร็วที่เท่ากันเลย ซึ่งต้องชมว่าการที่มี ethernet ถึง 2 พอร์ตช่วยให้เราสามารถนำเอาบอร์ด YY3568 นี้มาใช้งานด้านเน็ตเวิร์คได้สะดวกมาก
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
root@smartfly:/# iperf3 -c 192.168.1.162 -f g Connecting to host 192.168.1.162, port 5201 [ 5] local 192.168.1.134 port 54100 connected to 192.168.1.162 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 113 MBytes 0.95 Gbits/sec 0 451 KBytes [ 5] 1.00-2.00 sec 112 MBytes 0.94 Gbits/sec 0 520 KBytes [ 5] 2.00-3.00 sec 113 MBytes 0.95 Gbits/sec 0 520 KBytes [ 5] 3.00-4.00 sec 112 MBytes 0.94 Gbits/sec 0 547 KBytes [ 5] 4.00-5.00 sec 113 MBytes 0.94 Gbits/sec 0 547 KBytes [ 5] 5.00-6.00 sec 112 MBytes 0.94 Gbits/sec 0 547 KBytes [ 5] 6.00-7.00 sec 112 MBytes 0.94 Gbits/sec 0 547 KBytes [ 5] 7.00-8.00 sec 112 MBytes 0.94 Gbits/sec 0 547 KBytes [ 5] 8.00-9.00 sec 112 MBytes 0.94 Gbits/sec 0 547 KBytes [ 5] 9.00-10.00 sec 112 MBytes 0.94 Gbits/sec 0 547 KBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-10.00 sec 1.10 GBytes 0.94 Gbits/sec 0 sender [ 5] 0.00-10.04 sec 1.10 GBytes 0.94 Gbits/sec receiver |
iperf3 บน WLAN0
ในการทดสอบความเร็วของ Wi-Fi นั้น เราก็ทดสอบโดยใช้เน็ตเวิร์ค 5Ghz ของ AIS router ตัวเดิมซึ่งความเร็วในการรับส่งข้อมูลเฉลี่ยนอยู่ที่ 575 Mbits ก็ถือว่าเป็นไปตามมาตรฐาน AC600
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
root@smartfly:/# iperf3 -c 192.168.1.162 -f m Connecting to host 192.168.1.162, port 5201 [ 5] local 192.168.1.124 port 39890 connected to 192.168.1.162 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.01 sec 51.5 MBytes 427 Mbits/sec 0 2.67 MBytes [ 5] 1.01-2.00 sec 72.5 MBytes 614 Mbits/sec 0 3.13 MBytes [ 5] 2.00-3.00 sec 73.8 MBytes 620 Mbits/sec 0 3.13 MBytes [ 5] 3.00-4.00 sec 73.8 MBytes 619 Mbits/sec 0 3.13 MBytes [ 5] 4.00-5.01 sec 71.2 MBytes 591 Mbits/sec 0 3.13 MBytes [ 5] 5.01-6.01 sec 70.0 MBytes 590 Mbits/sec 0 3.13 MBytes [ 5] 6.01-7.00 sec 71.2 MBytes 602 Mbits/sec 0 3.13 MBytes [ 5] 7.00-8.00 sec 72.5 MBytes 608 Mbits/sec 0 3.13 MBytes [ 5] 8.00-9.00 sec 73.8 MBytes 616 Mbits/sec 0 3.13 MBytes [ 5] 9.00-10.01 sec 61.2 MBytes 509 Mbits/sec 0 3.13 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-10.01 sec 692 MBytes 579 Mbits/sec 0 sender [ 5] 0.00-10.08 sec 691 MBytes 575 Mbits/sec receiver |
จากนั้นเราก็ได้ทำการทดสอบความเร็วของอินเตอร์เน็ตผ่านทั้ง ethernet และ Wi-Fi ซึ่งจะเห็นความแตกต่างของความเร็วที่ชัดเจนตามรูป
การทดสอบ Speed test บนเว็บ Ookla ด้วย Ethernet | การทดสอบ Speed test บนเว็บ Ookla ด้วย Wi-Fi |
การทดสอบประสิทธิภาพของการใช้งาน 3D
เราทำการทดสอบประสิทธิภาพของ GPU ด้วยการใช้ GLMark2 ในการทดสอบ ซึงบน Mali-G52 สนับสนุนการทำงานบน OpenGL เป็นอย่างดีได้คะแนน glmark2 อยู่ที่ 115 คะแนน
รูปแสดงการทดสอบประสิทธิภาพของ GPU ด้วย glmark2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
======================================================= glmark2 2021.02 ======================================================= OpenGL Information GL_VENDOR: ARM GL_RENDERER: Mali-G52 GL_VERSION: OpenGL ES 3.2 v1.g2p0-01eac0.327c41db9c110a33ae6f67b4cc0581c7 ======================================================= [build] use-vbo=false: FPS: 116 FrameTime: 8.621 ms [build] use-vbo=true: FPS: 126 FrameTime: 7.937 ms [texture] texture-filter=nearest: FPS: 156 FrameTime: 6.410 ms [texture] texture-filter=linear: FPS: 150 FrameTime: 6.667 ms [texture] texture-filter=mipmap: FPS: 157 FrameTime: 6.369 ms [shading] shading=gouraud: FPS: 123 FrameTime: 8.130 ms [shading] shading=blinn-phong-inf: FPS: 119 FrameTime: 8.403 ms [shading] shading=phong: FPS: 122 FrameTime: 8.197 ms [shading] shading=cel: FPS: 122 FrameTime: 8.197 ms [bump] bump-render=high-poly: FPS: 91 FrameTime: 10.989 ms [bump] bump-render=normals: FPS: 151 FrameTime: 6.623 ms [bump] bump-render=height: FPS: 147 FrameTime: 6.803 ms [effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 125 FrameTime: 8.000 ms [effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 70 FrameTime: 14.286 ms [pulsar] light=false:quads=5:texture=false: FPS: 147 FrameTime: 6.803 ms [desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 78 FrameTime: 12.821 ms [desktop] effect=shadow:windows=4: FPS: 125 FrameTime: 8.000 ms [buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 55 FrameTime: 18.182 ms [buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 52 FrameTime: 19.231 ms [buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 73 FrameTime: 13.699 ms [ideas] speed=duration: FPS: 74 FrameTime: 13.514 ms [jellyfish] <default>: FPS: 106 FrameTime: 9.434 ms [terrain] <default>: FPS: 28 FrameTime: 35.714 ms [shadow] <default>: FPS: 97 FrameTime: 10.309 ms [refract] <default>: FPS: 48 FrameTime: 20.833 ms [conditionals] fragment-steps=0:vertex-steps=0: FPS: 147 FrameTime: 6.803 ms [conditionals] fragment-steps=5:vertex-steps=0: FPS: 144 FrameTime: 6.944 ms [conditionals] fragment-steps=0:vertex-steps=5: FPS: 149 FrameTime: 6.711 ms [function] fragment-complexity=low:fragment-steps=5: FPS: 147 FrameTime: 6.803 ms [function] fragment-complexity=medium:fragment-steps=5: FPS: 129 FrameTime: 7.752 ms [loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 144 FrameTime: 6.944 ms [loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 146 FrameTime: 6.849 ms [loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 131 FrameTime: 7.634 ms ======================================================= glmark2 Score: 115 ======================================================= |
การทดสอบเล่นไฟล์วิดีโอ
จากนั้นเราก็ทดสอบเล่นไฟล์จาก youtube เพื่อทดสอบทั้งการเล่นไฟล์และทดสอบไดรเวอร์ของเสียงไปด้วยกัน ซึ่งบนบอร์ด YY3568 นี้ข้อดีอีกอย่างคือรองรับการเล่นไฟล์เสียงไว้ดีมากมีทั้งช่อง 3.5mm และยังมีช่องต่อลำโพงขนาดเล็กได้ในตัวเลยมาพร้อมกับ power amp class D แบบโมโนให้เราสามารถเชื่อมต่อกับลำโพงได้ทันที การเล่นไฟล์เสียงและภาพทำได้ดี สามารถใช้งานด้าน Digital signage ได้เลย ซึ่งเราสามารถทำ Digital signage ที่สามารถเลือก content ให้เหมาะกับผู้ชทได้ง่าย ๆ เลยเพราะว่า YY3568 มาพร้อมกับ NPU ที่มีความสามารถถึง 0.8 TPOS ซึ่งใช้งานเป็นอย่างไรมาลองดูในหัวข้อถัดไปได้เลย
คลิปข้างบนแสดงการทดสอบการเล่นวิดีโอด้วย youtube บน chromium browser
การทดลองใช้งาน RKNPU2
RKNPU2 คือ แพล็ตฟอร์มสำหรับให้เราสามารถเข้าถึงและใช้งาน Rockchip NPU ได้ซึ่งการเริ่มต้นใช้งานจะมีสองส่วนคือ
1) การที่เราจะนำเอาโมเดลที่เทรนเองมาแปลงให้อยู่ในรูปแบบของ rknn model เราสามารถทำได้ผ่าน https://github.com/rockchip-linux/rknn-toolkit2
2) การใช้งานโมเดลที่แปลงแล้วนั้นเราจะใช้งานผ่าน https://github.com/rockchip-linux/rknpu2
การติดตั้ง
สำหรับในรีวิวนี้จะพูดถึงการ deploy model ที่แปลงมาผ่าน rknn-toolkit2 มาแล้วเพื่อทดสอบประสิทธภาพการทำงานบนบอร์ด YY3568 เริ่มต้นจากการ git clone https://github.com/rockchip-linux/rknpu2 ลงมายังบอร์ด YY3568 ของเรา จากนั้นเมื่อเข้ามาใน directory rknpu2 จะพบกับตัวอย่างอยู่ภายใต้ examples
เราจะทดสอบจากโมเดล YOLO5 https://github.com/ultralytics/yolov5 ที่ถูก convert เป็น rknn model แล้วด้วย rknn-toolkit2 โดยในขั้นแรกก็จะต้องทำการ build ก่อนโดยเนื่องจาก RKNPU สนับสนุน CPU บน ROCKCHIP หลายรุ่นเราก็จะต้องเลือก build ให้ถูกต้องตรงกับบอร์ดของเรา
1 2 3 4 5 6 7 |
root@smartfly:/# cd /home/youyeetoo/rknpu2/examples/rknn_yolov5_demo root@smartfly:/home/youyeetoo/rknpu2/examples/rknn_yolov5_demo# ls build-android_RK3562.sh build-linux_RK3588.sh README_CN.md build-android_RK3566_RK3568.sh CMakeLists.txt README.md build-android_RK3588.sh convert_rknn_demo src build-linux_RK3562.sh include utils build-linux_RK3566_RK3568.sh model |
จากนั้นก็ทำการ build ได้เลย
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<pu2/examples/rknn_yolov5_demo# chmod +x build-linux_RK3566_RK3568.sh <2/examples/rknn_yolov5_demo# ./build-linux_RK3566_RK3568.sh -- The C compiler identification is GNU 9.4.0 -- The CXX compiler identification is GNU 9.4.0 -- Check for working C compiler: /usr/bin/aarch64-linux-gnu-gcc -- Check for working C compiler: /usr/bin/aarch64-linux-gnu-gcc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- Check for working CXX compiler: /usr/bin/aarch64-linux-gnu-g++ -- Check for working CXX compiler: /usr/bin/aarch64-linux-gnu-g++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Detecting CXX compile features -- Detecting CXX compile features - done -- Found OpenCV: /home/youyeetoo/rknpu2/examples/3rdparty/opencv/opencv-linux-aarch64 (found version "3.4.5") -- Configuring done -- Generating done -- Build files have been written to: /home/youyeetoo/rknpu2/examples/rknn_yolov5_demo/build/build_linux_aarch64rknn_benchmark/install/rknn_benchmark_Linux/lib/librknnrt.so /home/youyeetoo/rknpu2/examples/rknn_benchmark |
เมื่อทำการ build เสร็จเรียบร้อยแล้วเราก็จะได้ binary ไฟล์มาเพื่อทำการ run ทดสอบการทำงานได้เลย จากตัวอย่างนี้เราจะได้ไฟล์ชืื่อ rknn_yolov5_demo
การทดลองใช้งาน
ในการทดสอบการทำงานเราจะเรียกใช้ไฟล์ rknn_yolov5_demo พร้อมระบุพารามิเตอร์สองค่าคือ โมเดลที่จะใช้ และรูปภาพที่เป็นอินพุต
1 2 |
cd /home/youyeetoo/rknpu2/examples/rknn_yolov5_demo ./rknn_yolov5_demo ./model/RK3566_RK3568/yolov5s-640-640.rknn ./bus.jpg |
เราจะได้รูปใหม่ชื่อ out.jpg ซึ่งจะมีการวาดกรอบพร้อมระบุ label ของสิ่งที่ตรวจพบในภาพ ซึ่งตรงนี้ถ้าดูจากชื่อโมเดลของเราจะพบว่าโมเดลที่เทรนมาใช้กับภาพขนาด 640×640 เท่านั้นซึ่งอย่าแปลกใจถ้าเราเอาภาพขนาดอื่นมาเป็นอินพุตแล้วจะตรวจสอบไม่พบวัตถุในภาพ จากนั้นเราก็จะทดลองกับอีกภาพว่าจะสามารถตรวจสอบวัตถุในภาพได้หรือไม่ โดยรูปที่เป็นอินพุตนี้ตั้งชื่อว่า man.jpg
รูป out.jpg ที่มีการวาดกรอบและระบุวัตถุที่ตรวจพบ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
post process config: box_conf_threshold = 0.25, nms_threshold = 0.45 Read ./model/man.jpg ... img width = 640, img height = 640 Loading mode... sdk version: 1.5.2 (c6b7b351a@2023-08-23T15:28:22) driver version: 0.8.8 model input num: 1, output num: 3 index=0, name=images, n_dims=4, dims=[1, 640, 640, 3], n_elems=1228800, size=1228800, w_stride = 640, size_with_stride=1228800, fmt=NHWC, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922 index=0, name=output, n_dims=4, dims=[1, 255, 80, 80], n_elems=1632000, size=1632000, w_stride = 0, size_with_stride=1638400, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003860 index=1, name=283, n_dims=4, dims=[1, 255, 40, 40], n_elems=408000, size=408000, w_stride = 0, size_with_stride=409600, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922 index=2, name=285, n_dims=4, dims=[1, 255, 20, 20], n_elems=102000, size=102000, w_stride = 0, size_with_stride=122880, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003915 model is NHWC input fmt model input height=640, width=640, channel=3 once run use 78.917000 ms loadLabelName ./model/coco_80_labels_list.txt person @ (89 157 258 631) 0.895037 bowl @ (483 221 506 240) 0.679969 bowl @ (395 322 444 343) 0.659576 wine glass @ (570 200 588 241) 0.544585 bowl @ (505 221 527 239) 0.477606 bowl @ (482 322 532 338) 0.458121 wine glass @ (543 199 564 239) 0.452579 cup @ (418 215 437 238) 0.410092 cup @ (385 204 402 240) 0.374592 cup @ (435 212 451 238) 0.371657 bowl @ (613 215 639 239) 0.359605 wine glass @ (557 200 575 240) 0.359143 cup @ (446 211 461 238) 0.358369 spoon @ (255 257 271 313) 0.340807 bottle @ (412 84 432 119) 0.338540 spoon @ (307 267 322 326) 0.318563 spoon @ (324 265 340 332) 0.315867 bottle @ (453 305 466 340) 0.308927 cup @ (526 210 544 239) 0.290318 bottle @ (389 83 411 119) 0.277804 wine glass @ (583 198 602 239) 0.277093 bowl @ (24 359 101 383) 0.275663 oven @ (4 370 168 632) 0.256395 spoon @ (268 262 282 322) 0.252866 bottle @ (434 85 454 118) 0.250721 loop count = 10 , average run 69.709700 ms |
จะพบว่่าไฟล์ out.jpg ที่ได้มีการวาดกรอบลงบนภาพจากการตรวจจับเจอวัตถุถึง 25 รายการและใช้เวลาทั้งหมดไปเพียง 70 ms ซึ่งถ้าแปลงเป็น FPS จะอยู่ 14 เฟรมต่อวินาทีซึ่งถือว่าทำได้เร็วเลยกับอินพุดความละเอียด 640×640 ซึ่งถ้าใช้งานบน Raspberry Pi 4 YOLO5 จะได้ FPS ที่เพียง 4 เฟรมต่อวินาทีเท่านั้น
ลองทดสอบประสิทธิภาพด้วย RKNN Benchmark
จากนั้นเราจะมาลองทดสอบประสิทธิภาพของ NPU บน YY3568 ด้วยตัวอย่าง RKNN Benchmark ที่อยู่ใน examples โดยระบุให้ทำการวนทดสอบ 10 ครั้งแล้วหาค่าเฉลี่ย
1 |
./rknn_benchmark /home/youyeetoo/rknpu2/examples/rknn_yolov5_demo/model/RK3566_RK3568/yolov5s-640-640.rknn man.jpg 10 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
rknn_api/rknnrt version: 1.5.2 (c6b7b351a@2023-08-23T15:28:22), driver version: 0.8.8 total weight size: 7308672, total internal size: 6144000 total dma used size: 21528576 model input num: 1, output num: 3 input tensors: index=0, name=images, n_dims=4, dims=[1, 640, 640, 3], n_elems=1228800, size=1228800, w_stride = 640, size_with_stride=1228800, fmt=NHWC, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922 output tensors: index=0, name=output, n_dims=4, dims=[1, 255, 80, 80], n_elems=1632000, size=1632000, w_stride = 0, size_with_stride=1638400, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003860 index=1, name=283, n_dims=4, dims=[1, 255, 40, 40], n_elems=408000, size=408000, w_stride = 0, size_with_stride=409600, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003922 index=2, name=285, n_dims=4, dims=[1, 255, 20, 20], n_elems=102000, size=102000, w_stride = 0, size_with_stride=122880, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=-128, scale=0.003915 custom string: Warmup ... 0: Elapse Time = 58.82ms, FPS = 17.00 1: Elapse Time = 59.41ms, FPS = 16.83 2: Elapse Time = 59.29ms, FPS = 16.87 3: Elapse Time = 59.30ms, FPS = 16.86 4: Elapse Time = 59.30ms, FPS = 16.86 Begin perf ... 0: Elapse Time = 59.52ms, FPS = 16.80 1: Elapse Time = 49.05ms, FPS = 20.39 2: Elapse Time = 44.44ms, FPS = 22.50 3: Elapse Time = 44.29ms, FPS = 22.58 4: Elapse Time = 44.33ms, FPS = 22.56 5: Elapse Time = 44.48ms, FPS = 22.48 6: Elapse Time = 44.29ms, FPS = 22.58 7: Elapse Time = 44.28ms, FPS = 22.58 8: Elapse Time = 44.46ms, FPS = 22.49 9: Elapse Time = 44.29ms, FPS = 22.58 Avg Time 46.34ms, Avg FPS = 21.577 |
จากการทดสอบ benchmark จะพบว่าค่า FPS เฉลี่ยจะอยู่ที่ 21.5 เฟรมต่อวินาที ซึ่งยิ่งให้ได้ผลลัพธ์ที่สูงขึ้นอีกแสดงให้เห็นถึงประสิทธิภาพของบอร์ด YY3568 ว่าเหมาะสมกับการนำมาใช้งาน AI ด้าน image processing ได้ดีเลย
การทดลองใช้งานกับกล้อง USB Webcam
ทดลองใช้งานจับภาพจากกล้อง USB Webcam เพื่อทดลองจับภาพมาใช้กับโปรแกรม example ของ RKNPU2 ด้วยการใช้
1 |
fswebcam -r 1280x720 -S 1 --no-banner --no-timestamp me.jpg | ./rknn_yolov5_demo ./model/RK3566_RK3568/yolov5s-640-640.rknn $me.jpg |
ซึ่งก็พบว่าสามารถบันทึกภาพจาก USB Webcam และส่งไปให้กับโปรแกรม rknn_yolov5_demo เพื่อวาดรูปกรอบลงไปซึ่งเราสามารถแก้ไขสีกรอบและข้อความ label เพื่อให้แสดงผลได้ชัดเจนขึ้นได้ที่ไฟล์ ~/rknpu2/examples/rknn_yolov5_demo/src/main.cc
1 2 |
301 rectangle(orig_img, cv::Point(x1, y1), cv::Point(x2, y2), cv::Scalar(0, 0, 255, 0), 3); 302 putText(orig_img, text, cv::Point(x1, y1 + 12), cv::FONT_HERSHEY_SIMPLEX, 0.5, cv::Scalar(0, 0, 0)); |
การทดลองใช้งาน RKNPU ร่วมกับกล้อง USB Webcam
สรุปผลการทดสอบ
จากการทดสอบใช้งานมาเป็นระยะเวลากว่า 1 สัปดาห์ปัญหาที่พบบ่อยครั้งคือการค้างหยุดทำงานไปเลย สาเหตุเกิดจากระบบการระบายความร้อนที่ไม่เพียงพอกับความร้อนที่เกิดจากการใช้งานเพราะเป็นการติดตั้งเพียง heatsink ขนาดเล็กลงไปเท่านั้น ซึ่งถ้า Youyeetoo มีชุด heatsink จำหน่ายแยกน่าจะดีเพราะบนบอร์ดเองได้มีการออกแบบสำหรับการต่อพัดลมระบายความร้อนเอาไว้เป็นที่เรียบร้อยแล้ว การใช้งานโดยรวมดีและคู่มือการใช้งานต่าง ๆ บน wiki ของ Youyeetoo ทำได้ดีมาก สามารถทดลองใช้งานได้ตามคู่มือโดยไม่จำเป็นต้องเชี่ยวชาญแต่อย่างใด
และด้านการใช้งานด้าน AI ก็ต้องบอกว่า Rockchip มีการพัฒนาอย่างต่อเนื่องดูได้จากวันที่อัพเดตบน GitHub ซึ่งการใช้งานบนบอร์ดตระกูล RK อาจจะพบความยุ่งยากไปบ้างแต่เมื่อเทียบกับประสิทธิภาพที่ได้เทียบกับราคาแล้วก็เป็นทางเลือกที่น่าสนใจ
ขอขอบคุณบริษัท Youyeetoo มากที่ได้พัฒนาบอร์ดทางเลือกดี ๆ การเชื่อมต่อครบ ๆ และที่จะอดเอ่ยปากชมเชยไม่ได้เลยคือเอกสารดีมาก ๆ มาให้นักพัฒนาได้ทดลองใช้งานกัน และสำหรับคนที่สนใจบอร์ดเจ้าบอร์ดนี้ สามารถหารายละเอียดเพิ่มเติมได้ที่ wiki youyeetoo และหาซื้อได้จาก Aliexpress ราคาเริ่มต้นที่ 1,390฿, Amazon, หรือ ร้านค้าของบริษัท
Fulltime Maker
ปัจจุบันดูแลส่วนงาน R&D และ Innovation
ความสนใจคือ Single Board Computer และงานด้าน IoT