บอร์ด 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











