Lý Do ChӑQĈӅ Tài
MҥQJQѫron tích chұSÿmSKiWWULӇn nhanh chóng và trӣ thành mӝt công cө quan trӑng trong ӭng dөng phân loҥLÿһc biӋWÿӕi vӟi các dӳ liӋu hình ҧnh và âm thanh Trong nhӳQJQăPJҫQÿk\QKiӅu mҥng CNN mҥnh mӁ ÿmÿѭӧFÿӅ xuҩt nhҵm cҧi thiӋQÿӝ FKtQK[iFQKѭ$OH[QHW>@9**>@,QFHSWLRQ>@ôFiFSKѭѫQJSKiS dӵa trên mҥng VGG là mӝWKѭӟng tiӃp cұn phә biӃn trong các ӭng dөQJQKѭSKkQ loài cõy [4], phõn loҥi hoa [5], phõn loҥi cҧm xỳc khuụn mһW>@ô7X\QKLrQPҥng 9**ÿzLKӓi rҩt nhiӅu khҧ QăQJWtQKWRiQFҫQÿӃQ*23ÿӇ xӱ lý chӍ 1 ҧnh 244x244 5*%ĈLӅu này dүn ÿӃQÿӝ trӉ lӟn khi hiӋn thӵc mҥng trên phҫn mӅm NhiӅu phҫn cӭQJÿmÿѭӧFÿӅ xuҩt sӱ dөng dӵa trên GPU, FPGA, ASIC [7-10] nhҵm giҧi quyӃt vҩQÿӅ vӅ khҧ QăQJWtQKWRiQ7URQJÿyFiFQӅn tҧQJWăQJWӕc dӵDWUrQ)3*$ѭXWKӃ KѫQVRYӟi các nӅn tҧng khác vì lӧi thӃ có thӇ tái lұp trình và hiӋu quҧ vӅ mһWQăQJ Oѭӧng
Thӵc tӃ cho thҩ\KѫQFiFSKpSWtQKFӫa CNN nҵm ӣ lӟp tích chұp [9] trong khi lӟp fully-connected lҥLWLrXWѫQQKLӅu bӝ nhӟ Lҩy ví dө, VGG16 cҫn 30.69 GOP cho tҩt cҧ 13 lӟp tích chұSGRÿyFҫQÿӃQKѫQ0%NK{QJJLDQEӝ nhӟ ÿӇ OѭXWҩt cҧ các tham sӕ (ӣ dҥng sӕ floatĈLӅXÿyGүn tӟi viӋc các tác giҧ tұp trung cҧi thiӋn khҧ QăQJWtQKWRiQEҵng viӋc áp dөng các kӻ thuұWQKѭ:LQRJUDG>@))7>@ loop optimization [8-@VWRFKDVWLF>@ô1Kӳng nghiờn cӭXQj\ÿҥWÿѭӧc hiӋXQăQJ rҩWFDRQKѭQJNK{QJOjPJLҧPÿLÿӝ chính xác cӫa mҥng Bên cҥnh tính hiӋu quҧ cӫa thuұt toán thì viӋc sӱ dөng chip FPGA cao cҩp và mҥQKFNJQJOjPӝt lí do quan trӑng trong kӃt quҧ ÿҥWÿѭӧc DRÿyEjLWRiQWUӣ nên phӭc tҥSKѫQNKLKLӋn thӵc mӝt mҥng FyNtFKWKѭӟc lӟQQKѭ9**[Xӕng chip FPGA chi phí thҩp
Trong nghiên cӭXQj\W{LÿӅ xuҩt mӝt bӝ WăQg tӕc có thӇ ÿѭӧc tái thiӃt lұp cҩu hình hoҥWÿӝQJYjWѭѫQJWKtFKYӟi các lӟp tích chұp cӫa mҥng VGG và có thӇ chҥy trên chip FPGA chi phí thҩp là Intel Cyclone V SoC Bӝ WăQJWӕc này nҵm trong mӝt hӋ thӕQJNK{QJÿӗng nhҩt (heterogeneous system), hӋ thӕng này bao gӗm mӝt vi xӱ lý ARM và thành phҫn FPGA Trong khi bӝ YLÿLӅu khiӇn có trách nhiӋm thiӃt lұp
&KѭѫQJ0ӣ Ĉҫu HVTH: Phҥm ThӃ Vinh các tham sӕ cho tӯng lӟp tích chұp và chuҭn bӏ các dӳ liӋu cho phҫn FPGA Thành phҫn FPGA thӵc hiӋn tҩt cҧ các hoҥWÿӝng còn lҥi QKѭOj]HURSadding, tích chұp, PD[SRROLQJYjDFWLYDWLRQ+ѫQQӱa, bҵng viӋt tӕLѭXPLOWL-port cӫa bӝ ÿLӅu khiӇn 6'5$0W{LÿҥWÿѭӧc bang thông bӝ nhӟ FDRKѫQOrQWӟL*%V'RÿyKӋ thӕng cӫDW{LÿҥWÿѭӧc hiӋXQăQJOj*23VFKRFiFOӟp tích chұp cӫa mҥng VGG16 vӟi tҫn sӕ hoҥWÿӝQJOj0+]FNJQJQKѭVӱ dөng tài nguyên hӋ thӕng hiӋu quҧ KѫQVR vӟi các nghiên cӭXWUѭӟFÿk\
Phҫn tiӃp theo cӫa luұQYăQWURQJFKѭѫQJ tôi sӁ trình bày tәng quan mҥng Qѫron tích chұp, mҥng VGG, các kӻ thuұt tӕWѭX YzQJ Oһp và giӟi thiӋu vӅ board DE10-Standard vӟi chip Cyclone V cӫa Intel bên trong Tôi mô tҧ thiӃt kӃ hӋ thӕng cӫa mình ӣ FKѭѫQJ và nguyên lý hoҥWÿӝng ӣ FKѭѫQJ4 &KѭѫQJWUuQKEj\FiF kӃt quҧ thӱ nghiӋm vӟi bӝ WăQJWӕc và phân tích &KѭѫQJWUuQKEj\YLӋc ӭng dөng O}LWăQJWӕc cho bài toán phân loҥi cҧm xúc khuôn mһt Cuӕi cùng là kӃt luұn cӫDÿӅ ÿѭӧFWUuQKEj\WURQJFKѭѫQJ
Mөc Tiêu Và NhiӋm Vө Cӫa LuұQ9ăQ
External Mem
External mem là bӝ ngoҥi vi FyNtFKWKѭӟc lӟQWURQJWUѭӡng hӧp này là DDR3 (HPS-side) cӫa kit DE10 Bӝ nhӟ Qj\ÿѭӧc dùng làm Shared memory-vùng nhӟ dùng chung cho cҧ lõi phҫn cӭng CNN và vi xӱ lý ARM Vùng nhӟ Qj\FyNtFKWKѭӟc là 0%Fyÿӏa chӍ base là 0x300_0000, chi tiӃWQKѭKuQK
Tә chӭc vùng nhӟ Shared memory:
&KѭѫQJ7KLӃt KӃ HӋ Thӕng HVTH: Phҥm ThӃ Vinh
Input feature map bias weight
Hình 3.16 Tә chӭc vùng nhӟ Shared memory.
On-Chip Memory
On-chip memory là vùng nhӟ ÿӋm bên trong lõi phҫn cӭng CNN Vùng nhӟ này ÿӇ OѭXGӳ liӋu ngõ vào (input feature map, bias,weight) và ngõ ra (output feature PDS.tFKWKѭӟc khoҧQJYjLWUăPNE
Input Feature Map Memory
Là vùng nhӟ on-FKLSÿӇ OѭXFiFWK{QJWLQLQSXWIHDWXUHPDS
Vùng nhӟ này gӗm 3 bӝ ÿӋm riêng biӋt, mӛi bӝ ÿӋm là 2-PORT RAM (IP core cӫa alteraOѭXWUӳ 2 lines x nchannel (pixels) cӫa input feature map Vì bus data cӫa port Avalon UHDGFy ÿӝ rӝng là 256 nên mӛi write-word cӫa imem có bӝ rӝng là ELWWѭѫQJÿѭѫQJYӟi 8 pixels Hình 3.17 mô tҧ cách sҳp xӃp dӳ liӋu input feature map vào imem
&KѭѫQJ7KLӃt KӃ HӋ Thӕng HVTH: Phҥm ThӃ Vinh
A channel of input feature map
256-bit word imem 16-bit pixel
Hình 3.17 Cách sҳp xӃp dӳ liӋu input feature map vào imem.
Weights Memory
Weights memory (wmem) là vùng nhӟ ÿӋm cho có trӑng sӕ Có tәng cӝng 32 bӝ ÿӋm, mӛi bӝ ÿӋm là 2-PORT RAM chӭa mӝt kernel cӫa trӑng sӕ trong 1 layer (1 kernel gӗm QFKDQQHO[[SL[HOV%rQGѭӟi là cҩu trúc vùng nhӟ cӫa cӫa mӝt bӝ ÿӋPOѭXFiFJLiWUӏ trong sӕ cӫDNHUQHOWѭѫQJӭng
Hình 3.18 mô tҧ cách sҳp xӃp dӳ liӋu trӑng sӕ vào bӝ nhӟ wmem:
Hình 3.18 Cách sҳp xӃp dӳ liӋu trӑng sӕ vào bӝ nhӟ wmem
&KѭѫQJ7KLӃt KӃ HӋ Thӕng HVTH: Phҥm ThӃ Vinh
Bias Memory
Bias memory là vùng nhӟ ÿӇ chӭa tҩt cҧ các bias trong mӝt layer Hình 3.19 mô tҧ cách sҳp xӃp dӳ liӋu bias vào bӝ nhӟ
Hình 3.19 Tә chӭc vùng nhӟ chӭ bias.
&KѭѫQJ1JX\rQ/t+RҥWĈӝng HVTH: Phҥm ThӃ Vinh
&+ѬѪ1* NGUYÊN LÍ HOҤ7ĈӜNG
Nguyên Lí HoҥWĈӝng CӫD/}L7ăQJ7ӕc:
Vùng nhӟ input feature map gӗm 3 bӝ ÿӋm là imem0, imem1, imem2 Mӛi lҫn ÿӑc dӳ liӋu cho bӝ Processing engine cҫn 2 imem, imem thӭ 3 là bӝ ÿӋm tҥm thӡLÿӇ WăQJÿӝ WKURXJKSXW.KXQJPjXÿӓ là phҫn dӳ liӋXÿѭӧFÿӑc ra tӯ 2 imem Khung PjXÿӓ OjYQJSL[HOFyNtFKWKѭӟc là 4x4, mӛi lҫQWUѭӧWOjSL[HOÿӃn hӃt bӝ nhӟ cӫa imem Hình 4.1 và 4.2 trình bày chi tiӃt kӻ thuұWJL~SWăQJWKURXJKSXWWRjQKӋ thӕng:
Hình 4.1 Cӱa sә WUѭӧWÿӗng thӡi trên 2 imem 1 lúc
6DXNKLÿӑc hӃt dӳ liӋu cӫa 2 imem, imem thӭ ÿѭӧc sӱ dөng, imem thӭ 1 bӏ clear và chuҭn bӏ ghi vào dӳ liӋu mӟi
4 pixels imem0 ďҷĐůĞĂƌ imem1 imem2 sƶŶŐŶŚӀƚŝұƉƚŚĞŽŐŚŝǀ㎠imem0
Hình 4.2 LҫQWUѭӧt thӭ VDXNKLÿmÿLKӃt 2 imem 0 và 1
Vùng nhӟ ÿѭӧFÿӑc ra tӯ LPHPNKXQJPjXÿӓ gӗm 16 SL[HOVYjZHLJKWÿѭӧc ÿѭDÿӃn bӝ GDWDURXWHUÿӇ feed vào bӝ PU trong Processing engine Hình 4.3 mô tҧ cách dӳ liӋu tӯ LPHPÿѭӧFÿѭDYjR38
&KѭѫQJ1JX\rQ/t+RҥWĈӝng HVTH: Phҥm ThӃ Vinh
Hình 4.3 Dӳ liӋu tӯ LPHPÿѭӧFÿѭDYjRPU
Nguyên lý cӫa bӝ 'DWDURXWHUÿӇ ÿLӅu khiӇn các data vào bӝ 38QKѭGLDJUDPKuQK 4.4) sau:
6 7 8 10 11 12 14 15 16 in_0 in_1 in_2 in_3 weight 1 2 3 4 5 6 7 8 9
Hình 4.4 Diagram nguyên lý cӫa Data router
7URQJÿyLQB[[ ẻ 3) là cỏc input data cӫa mӛi PE (mӛi PU cú 4 PE), weight là các trӑng sӕ
Mӝt PE sӁ tính toán mӝt pixel cӫa output feature map Mӛi PE sӁ tính tích chұp vùng input màu xanh (3x3) vӟi trӑng sӕ WѭѫQJӭng Vùng nhӟ PjXÿӓ [ÿѭӧc chia thành 4 vùng màu xanh cho phép tích chұp (hình 4.5)
&KѭѫQJ1JX\rQ/t+RҥWĈӝng HVTH: Phҥm ThӃ Vinh
Hình 4.5 cӱa sә WUѭӧt box màu xanh duy chuyӇn dӑc theo vùng nhӟ là box màu ÿӓ
Trong mӛi bӝ PU, ngoài 4 PE còn có các bӝ ),)2ÿӇ sӱ dөng lҥi dӳ liӋu cho các lҫn tính toán ӣ các chu kì tiӃSWKHR%rQGѭӟi (hình 4.6) là diagram ngõ vào cӫa các
PE bao gӗPFiFLQSXWIHDWXUHPDSYjZHLJKW&iF3(ÿѭӧc thiӃt kӃ pipe-lined và cҫn 9 chu kǤ ÿӇ tính mӝt phép tích chұp.
6 7 8 10 11 12 14 15 16 in_0 in_1 in_2 in_3 weight 1 2 3 4 5 6 7 8 9
Hình 4.6 Diagram ngõ vào cӫa các PE
&iFGDWDPjXÿHQQpWOLӅQOjFiFGDWDÿѭѫFIHHGYjRWӯ bӝ data router, các data
PjX[DQKGѭѫQJQpWÿӭt là các data ngõ vào cӫa PE bên phҧi (PE1 bên phҧi PE0,
PE3 bên phҧi PE2) ӣ chu kǤ WUѭӟFÿyFiFGDWDPjX[DQKӣ PE1 là các data cӫa ngõ
&KѭѫQJ1JX\rQ/t+RҥWĈӝng HVTH: Phҥm ThӃ Vinh vào PE2 ӣ FKXNuWUѭӟFÿyFiFGDWDPjXÿӓ QpWÿӭt là các data ngõ vào cӫa các PE ErQGѭӟL3(ErQGѭӟL3(3(ErQGѭӟi PE1) ӣ 3 chu kǤ WUѭӟFÿy
)LUPZDUHWUrQO}L$50ÿyQJYai trò quan trӑng trong toàn hӋ thӕng, xӱ lý các chӭFQăQJEDRJӗm: các hoҥWÿӝng tiӅn xӱ OêQKѭFiFWKDRWiFWUrQEӝ nhӟ: khai báo, khӣi tҥo, giҧi phóng các vùng nhӟ ÿӇ OѭXҧnh ngõ vào, input, output feature map, trӑng sӕ, bias Khai báo vùng nhӟ dùng chuQJÿLӅu khiӇn hoҥWÿӝng cӫa FPGA thông qua viӋc ghi giá trӏ vào các thanh ghi trên FPGA Ta có thӇ tóm tҳt các chӭFQăQJFӫa firmware trên ARM thành các phҫQFKtQKQKѭKuQK7URQJÿyFiFNKӕi màu xám sӁ do ARM xӱ OêVDXEѭӟc data preparation thì ARM và FPGA sӁ hoҥWÿӝng cùng nhau trong mӝt vòng lһp
Hình 4.7 Vai trò cӫa các thành phҫn firmware trên ARM
Các lӟp tích chұp cӫa mҥQJ&11ÿѭӧc xӱ OêWKHROѭXÿӗ QKѭ sau (hình 4.8)
&KѭѫQJ1JX\rQ/t+RҥWĈӝng HVTH: Phҥm ThӃ Vinh ҩƚĜҥƵ
'ŚŝƚƌҢŶŐƚŚĄŝĐӆĂůӀƉŚŝҵŶƚҢŝ džƵҺŶŐZĞŐŝƐƚĞƌ
Ghi ͚start͛džƵҺŶŐZĞŐŝƐƚĞƌ dƌƵLJҲŶŝŶƉƵƚĨĞĂƚƵƌĞŵĂƉ džƵҺŶŐŝŶƉƵƚďƵĨĨĞƌ ĆƚƌƵLJҲŶƚҤƚĐңŬĞƌŶĞů? ĆƚşŶŚƚҤƚĐңĐĄĐůӀƉ?
Sai dƌƵLJҲŶ16 ŬĞƌŶĞůƐĜұŶŝŶƉƵƚ buffer
Hình 4.8 Flowchart xӱ lý các lӟp tích chұp
Quá trình này lһp lҥLÿӃn khi tҩt cҧ các lӟp tích chұSÿѭӧFWtQKVDXÿyWKDQKJKLDONE sҿ ÿѭӧc FPGA set lên 1, Firmware trên ARM quét thҩy tín hiӋu này sӁ thӵc hiӋn tính các lӟp Dense còn lҥi trên CPU và trҧ vӅ kӃt quҧ cuӕi cùng
&KѭѫQJ.Ӄt Quҧ Thӵc HiӋn HVTH: Phҥm ThӃ Vinh
&jLĈһt HӋ Thӕng Và HiӋn Thӵc:
7Uѭӟc tiên, tôi hiӋn thӵc mҥQJ9**ÿӇ ÿiQKJLiEӝ WăQJWӕc Phҫn cӭQJÿѭӧc FjLÿһt tӯ các công thӭc (3) tӟi (6) dӵa trên các tính chҩt cӫa mҥng VGG16 và sӕ Oѭӧng tài nguyên sҹn có nhҵPÿҥt hiӋu quҧ tӕLÿDĈӕi vӟi thiӃt bӏ Intel FPGA Cyclone
V SoC cӫa tôi, có tҩt cҧ '63Vÿѭӧc nhúng trên FPGA và giá trӏ Nof nhӓ nhҩt trong tҩt cҧ các lӟp CONV cӫa mҥQJ9**Oj7{Lÿһt hӋ sӕ &RIOjÿӇ tәng sӕ DSP cҫn thiӃt là 128 Các thành phҫQORJLFWURQJ)3*$ÿѭӧFGQJÿӇ xây dӵng them 16 DSPs còn thiӃu Tôi sӱ dөng sӕ LQWHJHUELWÿӇ biӇu diӉn cho cҧ giá trӏ ÿLӇm ҧnh và trӑng sӕ6DXNKL[iF ÿӏQKÿѭӧc các giá trӏ cҫn thiӃWÿһt, tôi dùng Verilog 9+'/ÿӇ mô tҧ phҫn cӭQJ6DXÿyGQJ4XDUWXV3ULPHÿӇ biên dӏch và map vào board DE10-Standard ӣ tҫn sӕ xung nhӏp 150Mhz Sӕ OѭӧQJWjLQJX\rQÿmVӱ dөng trong thiӃt kӃ hӋ thӕQJÿѭӧc mô tҧ trong bҧng 5.1
ThiӃt kӃ cӫa W{LÿҥWÿѭӧFWK{QJOѭӧQJ*23VYjÿӝ trӉ 0,79 giây / hình ҧnh Con sӕ này khá khác so vӟi tính toán cӫa tôi dӵa trên công thӭc (7), vӟi khoҧng 0,5 giây / hình ҧQK/êGRFKRÿLӅu này xuҩt phát tӯ sӵ sai khác giӳa thӡLJLDQOêWѭӣng và thӡi gian thӵc tӃ ÿӇ truy cұp bӝ nhӟ ngoài
Bӝ WăQJWӕFFKR&11ÿѭӧc thiӃt kӃ thành lõi IP và tích hӧp trӣ thành 1 thành phҫn cӫa hӋ thӕng (cnn_top)
Hình 5.1 thӇ hiӋn viӋc kӃt nӛLO}L,3ÿmWKLӃt kӃ vӟi các module khác trong Qsys
&KѭѫQJ.Ӄt Quҧ Thӵc HiӋn HVTH: Phҥm ThӃ Vinh
Các tham sӕ thiӃt lұSFKRO}L,3WăQJWӕc (hình 5.2):
Hình 5.2 Bҧng thiӃt lұp các tham sӕ cho lõi IP
Giҧi pháp cӫa tôi dӵa trên các kӻ thuұWWѭѫQJtӵ QKѭQJKLrQFӭu [9], tuy nhiên ÿѭӧc hiӋn thӵc trên các nӅn tҧng phҫn cӭng khác nhau Trong khi [9] dùng các chip Intel FPGA hiӋXQăQJFDRWKuW{LWұn dөng tӕLÿDѭXÿLӇm và tài nguyên cӫa dòng Intel FPGA chi phí thҩp Trong bҧng 5.2, bӝ WăQJWӕc cӫa tôi có hӋ sӕ hiӋu quҧ tài nguyên (1.6) và hӋ sӕ hiӋu quҧ bӝ nhӟ (9.3x10 -3 ) tӕWKѫQVRYӟi [9] (1.6 và 7.9x10 -3 ) Lý do là tôi chӍ tұp trung vào các lӟp CONV cӫa mҥQJ9**GRFiFÿһFÿLӇPWѭѫQJWӵ cӫa chúng và thӵc hiӋn nhiӅu cҧi tiӃQKѫQWURQJQJKLrQFӭu [9] có thӇ thӵc hiӋn trên các P{KuQK&11NKiFQKDXFNJQJQKѭWKӵc hiӋn tính toán cho cҧ hai lӟp CONV và các lӟp Fully-connected
Bҧng 5.2 So sánh vӟi nhӳng nghiên cӭu khác
Platform Intel Stratix V GXA7/28 nm Intel Cyclone V SX SoC /28 nm
Precision 16-bit fixed point 16-bit integer
&KѭѫQJ.Ӄt Quҧ Thӵc HiӋn HVTH: Phҥm ThӃ Vinh
&KѭѫQJӬng dөQJO}LWăQJWӕc HVTH: Phҥm ThӃ Vinh
&+ѬѪ1* SӰ DӨ1*/®,7Ă1*7Ӕ&Ĉ 7+,ӂT Kӂ CHO ӬNG DӨNG PHÂN LOҤI CҦM XÚC KHUÔN MҺT
Trong phҫn này, tôi trình bày mӝt hӋ thӕng nhұn dҥng biӇu hiӋn khuôn mһt (Facial (PRWLRQ5HFRJQLWLRQKD\)(5ÿѭӧc triӇn khai trên thiӃt bӏ SoC FPGA Mөc tiêu là tҥo ra hӋ thӕng có thӇ hoҥWÿӝQJÿӝc lұp và tӵ ÿӝng phân loҥi 7 loҥi cҧP[~FFѫEҧn khác nhau là: tӭc giұn, sӧ hãi, hҥnh phúc, buӗn bã, bҩt ngӡ, ghê tӣm và trung tính Tôi GQJO}L,3ÿmWKLӃt kӃ trên FPGA ÿӇ tính toán các lӟp mҥng thҫn kinh tích chұp VDXÿyWKLӃt kӃ mӝt mҥng CNN tӕLѭXYӟi phҫn cӭQJÿѭӧc thiӃt kӃ ÿӇ thӵc hiӋn nhұn dҥng cҧm xúc và ÿҥWÿӝ chính xác 66% trong bӝ dӳ liӋu FER2013 Toàn bӝ hӋ thӕng phҫn cӭQJÿѭӧc thiӃt kӃ trên SoC FPGA, có thӇ xӱ lý 15 khung hình mӛi giây vӟi tҫn sӕ hoҥWÿӝng 130 MHz Tôi chia nhiӋm vө nhұn dҥng cҧm xúc khuôn mһt thành KDLJLDLÿRҥQ*LDLÿRҥQÿҫu tiên là phát hiӋn mӝt khuôn mһWWURQJÿyW{L[k\Gӵng mô-ÿXQQKұn diӋn khuôn mһt chҥ\WUrQ&38ÿӇ cҳt vùng 64x64 pixel ӣ thang xám có chӭa khuôn mһW*LDLÿRҥn thӭ hai là dӵ ÿRiQFҧm xúc khuôn mһt cho ҧnh trên bҵng mô hình CNN
OpenCV là mӝWWKѭYLӋn chӭa nhiӅXP{KuQKÿѭӧFÿjRWҥRWUѭӟFSUHWUDLQHGÿӇ phát hiӋn khuôn mһt, vì vұ\W{LÿmVӱ dөng Haar Cascade cӫD2SHQ&9>@ÿӇ phát hiӋn khuôn mһWYuÿk\OjPӝt trong nhӳng thuұt toán hiӋu quҧ và phә biӃn nhҩt Cҧ +DDU&DVFDGHYj&11ÿӅu là các thuұt toán hӑFPi\QKѭQJFiFIHDWXUHFӫa Haar
&DVFDGHÿѭӧF[iFÿӏnh thӫ công trong khi các feature cӫD&11ÿѭӧF[iFÿӏnh trong quá trình tӕLѭXEҵQJJUDGLHQWGHVFHQWѬXÿLӇm cӫa nó là tӕFÿӝ phát hiӋn khuôn mһt nhanh và yêu cҫu bӝ nhӟ thҩSKѫQ7X\ QKLrQQKѭӧFÿLӇm cӫa nó trong thӵc tӃ là thiӃXÿӝ chính xác khi khuôn mһt ӣ mӝWJyFNK{QJÿӕi diӋn vӟi camera và hiӋu suҩt thҩp trong khi chҥy trên CPU ARM cӫD&\FORQH9Gѭӟi 7 khung hình mӛi giây) Do ÿyW{LTX\ӃWÿӏnh giҧPOѭӧng dӳ liӋu cҫn xӱ OêÿӇ cҧi thiӋn hiӋu suҩt bҵng cách giҧm vùng cҫn xӱ lý Khi mӝt khuôn mһWÿѭӧc tìm thҩy trong toàn bӝ khung hình, tӑDÿӝ
&KѭѫQJӬng dөQJO}LWăQJWӕc HVTH: Phҥm ThӃ Vinh vӏ trí và boundary box cӫDQyÿѭӧF[iFÿӏQK6DXÿyPӝt vùng quan tâm (Region of Interest - 52, ÿѭӧc tính xung quanh boundary box, vùng này lӟQ KѫQ ERXQGDU\ER[6DXÿyPӝWKjPNKiFÿѭӧc gӑLÿӇ phát hiӋn khuôn mһt trong ROI 'R52,Fyÿӝ phân giҧi thҩSKѫQVRYӟi toàn bӝ khung hình, quá trình này cҧi thiӋn ÿiQJNӇ tӕFÿӝ nhұn diӋn khuôn mһt, thӱ nghiӋm cӫa tôi cho thҩy hiӋu suҩWWăQJJҩp ÿ{Lÿҥt tӕLÿDNKXQJKuQKPӛi giây)
6.1.2 %ѭӟc Phân Loҥi Cҧm Xúc Khuôn Mһt:
Có mӝt sӕ nghiên cӭXWUѭӟFÿk\YӅ thiӃt kӃ mҥng CNN vӅ phân loҥi cҧm xúc khuôn mһt Mӝt ví dө ÿLӇn hình là nghiên cӭu cӫa Octavio Arriaga [27], mөc tiêu cӫa hӑ là thiӃt kӃ mӝt mҥng CNN có thӇ chҥy trong thӡi gian thӵc KӃt quҧ cӫa hӑ cho thҩy kӃt quҧ tӕt vӅ hiӋu suҩt cӫa mҥng mà hӑ thiӃt kӃ, vì vұy thiӃt kӃ mҥng cӫa tôi thӯDKѭӣng mӝt sӕ thuӝc tính tӯ mҥng cӫa hӑ Mô hình cӫa tôi gӗm bҧy lӟp chұp (hình 6.1), so vӟi mô hình cӫa Octavio Arriaga, mô hình cӫa hӑ có 9 lӟp tích chұp vӟLNtFKWKѭӟc kernel khác nhau Tuy nhiên, trong thiӃt kӃ cӫa tôi, tôi sӱ dөng cùng NtFKWKѭӟc kernel cho tҩt cҧ các lӟp chұSÿӇ giҧPÿӝ phӭc tҥp cho thiӃt kӃ phҫn cӭng cӫDW{L+ѫQQӳa, hӋ thӕng cӫa tôi có tWKѫQOӟp tích chұSÿӇ trích xuҩWFiFÿһFWUѭQJ QKѭQJW{LWKrP vào 2 lӟp dense vào cuӕi mҥng cӫa mình: lӟp thӭ nhҩt có 128 nút và lӟp thӭ KDLFyQ~WÿӇ phân loҥi Ba lӟSPD[SRROLQJÿһt giӳa các lӟp chұSÿӇ giҧm sӕ Oѭӧng tính toán cӫa toàn bӝ mҥng TrRQJJLDLÿRҥn huҩn luyӋn, mô hình, tôi sӱ dөng optimizer là ADAM [28] và Relu làm hàm activation cho mӛi lӟp chұp Mô KuQKÿѭӧc huҩn luyӋn trӵc tuyӃQGQJIUDPHZRUN HUDV Yj ÿѭӧc huҩn luyӋn trên
*RRJOH&RODEÿӇ tҥo file trӑng sӕ.
6DXÿyILOHWUӑng sӕ cӫa P{KuQKÿѭӧc chuyӇQÿәi tӯ dҥng dҩu phҭ\ÿӝng ӣ ÿӏnh dҥng hd5 sang sӕ nguyên 16 bit ӣ ÿӏnh dҥQJYăQEҧn text txt Các tӋSYăQEҧn này ÿѭӧFOѭXWUӳ trong thҿ SD và sӁ ÿѭӧc sӱ dөQJOjPÿҫu vào cho FPGA sau này
&KѭѫQJӬng dөQJO}LWăQJWӕc HVTH: Phҥm ThӃ Vinh
Tәng Quan KiӃn Trúc
ThiӃt bӏ Cyclone V SoC cung cҩp hai loҥi tài nguyên có thӇ lұp trình: CPU ARM Yj)3*$'RÿyW{L[k\Gӵng mӝt kiӃn WU~FNK{QJÿӗng nhҩWQKѭWURQJKuQK6.2 ÿӇ tұn dөng lӧi thӃ linh hoҥt cӫa CPU và hiӋXQăQJWtQKWRiQFDRFӫD)3*$'RÿyKӋ thӕng cӫa tôi bao gӗm hai phҫn bao gӗm phҫn HPS và phҫn FPGA
HPS chӏu trách nhiӋPFKRJLDLÿRҥn phát hiӋn khuôn mһWYjÿLӅu khiӇn hoҥWÿӝng cӫa bӝ WăQJWӕc trên FPGA
Phҫn FPGA chӭa bӝ WăQJWӕc tích chұp cӫDW{LGѭӟi dҥng lõi IP kӃt hӧp vӟi Avalon 00ÿӇ giao tiӃp vӟi các thành phҫn khác trong hӋ thӕng Nó chӏu trách nhiӋm xӱ lý các lӟp chұp, max-pooling và Relu Lõi chӭa bӝ xӱ lý trung tâm Process Engine (PE), DMA, bӝ ÿӋm dӳ liӋu ngõ vào và ra (Input and Output buffer), bӝ ÿLӅu khiӇn Avalon
FPGA và HPS giao tiӃp vӟi nhau thông qua ba cҫu nӕL +36 ÿӃn FPGA, Lightweights HPS tӟi FPGA và FPGA vӟi HPS Chúng là nhӳng cҫX$;,ÿѭӧc sӱ dөQJÿӇ kӃt nӕi bus AXI và bus Avalon, nhӳng bus này mang dӳ liӋu và lӋQKÿLӅu khiӇn giӳa HPS và FPGA
7Uѭӟc khi bҳWÿҫu xӱ Oê+36OѭXWUӳ hình ҧQKÿҫu vào và các trӑng sӕ ÿѭӧc sҳp xӃp tӯ WUѭӟFÿmÿѭӧFOѭӧng tӱ KyDYjR6'5$0ÿk\OjTXiWUuQKEDQÿҫu
&KѭѫQJӬng dөQJO}LWăQJWӕc HVTH: Phҥm ThӃ Vinh
ARM Controller SD/MMC USB OTG
Lightweight HPS_to_FPGA Bridge
S M/S cont rol da ta monitor
Hình 6.2 KiӃQWU~FNK{QJÿӗng nhҩt giӳa CPU và FPGA.
KiӃn Trúc HPS
Phҫn HPS trong hӋ thӕng bao gӗm: CPU ARM lõi kép, bӝ nhӟ ngoài, ba cҫu nӕi AXI, bӝ ÿLӅu khiӇn SDRAM, USB OTG và bӝ ÿLӅu khiӇn SD Bӝ nhӟ QJRjLÿѭӧc cҧ HPS và FPGA sӱ dөng Bӝ xӱ lý ARM xӱ lý dӳ liӋu video tӯ FDPHUDÿӇ cung cҩp hình ҧnh khuôn mһWFKR)3*$+36FNJQJWtQKWRiQFiFOӟp dense và cung cҩp môi WUѭӡQJÿӇ hiӇn thӏ kӃt quҧ phát sau khi xӱ lý trên màn hình LCD Khӕi USB OTG chӏu trách nhiӋm giao tiӃp giӳa hӋ thӕng cӫa tôi và camera USB Logitech KhӕLÿLӅu khiӇn SDRAM chӏu trách nhiӋm kiӇm soát truy cұp bӝ nhӟ ngoài.
KiӃQWU~FO}LWăQJWӕc
KiӃn trúc mҥng thҫn kinh cӫDW{Lÿѭӧc lҩy cҧm hӭng tӯ kiӃn trúc VGG, các thuӝc tính lһSÿL lһp lҥi trong viӋc sӱ dөng các bӝ lӑc nhӓ FyNtFKWKѭӟc 3x3 cӫa các lӟp chұp rҩt thuұn tiӋn cho viӋc hiӋn thӵFWUrQ)3*$'RÿyEӝ WtQKWRiQFKRNtFKWKѭӟc kernel 3x3 có thӇ sӱ dөng cho tҩt cҧ các lӟp chұp Do tài nguyên cӫa FPGA hҥn chӃ, ÿһc biӋt là sӕ OѭӧQJ'63ÿLӅu này dүQÿӃn viӋc tôi không thӵc hiӋn tính lӟp dense WUrQ)3*$YjÿӇ lҥi các phép tính này cho CPU xӱ Oê,3ÿmÿѭӧc thiӃt kӃ cӫa tôi mô tҧ trong hình 6.3 Nó bao gӗm hai bӝ ÿӋm cho dӳ liӋXÿҫXYjRYjÿҫu ra, thanh ghi, giao tiӃp Avalon MM và bӝ xӱ lý trung tâm Process Engine (PE)
Bӝ ÿӋPÿҫXYjRÿѭӧc sӱ dөQJÿӇ OѭXWUӳ các tham sӕ cӫa mҥQJ&11QKѭLQSXW feature map, bias và trӑng sӕ WUѭӟc khi các dӳ liӋXQj\ÿѭӧc xӱ lý bӣi PE Bӝ ÿӋm ÿҫXUDÿѭӧc sӱ dөQJÿӇ OѭXWUӳ dӳ liӋXÿѭӧc trҧ vӅ tӯ PE
&KѭѫQJӬng dөQJO}LWăQJWӕc HVTH: Phҥm ThӃ Vinh
Avalon MM Master/slave interface register
Avalon MM slave interface data valid ready valid data valid data valid control control data
Thành phҫn tính toán cӕt lõi trong thiӃt kӃ Oj3(Qyÿѭӧc xây dӵng tӯ 112 DSP và chӏu trách nhiӋm tính toán tích chұp 2D tӯ các input feature map và các trӑng sӕ VDXÿyWUҧ vӅ các output feature map Ngoài ra, PE có thӇ tính toán max pooling và RELU ĈӇ kiӇm soát hoҥWÿӝng cӫa lõi IP, tôi sӱ dөng 5 thanh ghi, nhӳng thanh ghi này có thӇ ÿѭӧc truy cұp bӣi cҧ CPU và IP 5 thanh ghi này có các chӭFQăQJ sau: Thanh JKLÿҫXWLrQÿѭӧc sӱ dөQJÿӇ cho phép PE hoҥWÿӝng Thanh ghi thӭ hai thông báo cho PE rҵng quá trình xӱ Oêÿm KRjQWҩt Thanh ghi thӭ ba chӭa thông tin vӅ khӕi Oѭӧng tích chұSÿDQJÿѭӧc xӱ lý bao gӗPNtFKWKѭӟc cӫa các input feature map, sӕ bҧn input feature map, sӕ bҧn output feature map và có hay không viӋc tính max- pooling Hai thanh ghi cuӕLFQJÿѭӧc sӱ dөQJÿӇ OѭXWUӳ ÿӏa chӍ cӫa bӝ nhӟ ngoài ÿӇ ÿӑc và ghi dӳ liӋu ĈӇ giao tiӃp vӟi các thành phҫn khác trong hӋ thӕng SoC, tôi sӱ dөng giao tiӃp Avalon MM, bao gӗm 2 mô-ÿXQPDVWHUYjVODYH0{ÿXQPDVWHUKLӋu suҩWFDRÿѭӧc sӱ dөQJÿӇ truyӅn các input feature map, trӑng sӕ và output feature map giӳa IP và bӝ nhӟ QJRjL7URQJNKLÿyP{ÿXQVODYHÿѭӧc sӱ dөQJÿӇ giao tiӃp vӟi CPU ARM
7{LÿmOҩy tұp dӳ liӋu phә biӃn là FER-2013 [29], bӝ dӳ liӋu vӅ cҧm xúc khuôn mһWÿӇ huҩn luyӋQYjÿiQKJLiP{KuQK&11Fӫa tôi Bӝ dӳ liӋXQj\ÿѭӧc tҥo bӣi Aaron Courville và Pierre-Luc Carrie Bӝ dӳ liӋu có bҧy loҥi (hoһc lӟp) biӇu cҧm khuôn mһt: tӭc giұn, sӧ hãi, hҥnh phúc, buӗn bã, bҩt ngӡ, ghê tӣm và trung tính vӟi tәng sӕ 35,487 ҧQK[iPNtFKWKѭӟc 48 x 48 pixel Các hình ҧnh trong mӛi lӟp không
&KѭѫQJӬng dөQJO}LWăQJWӕc HVTH: Phҥm ThӃ Vinh ÿѭӧc phân phӕLÿӗQJÿӅu, chi tiӃWQKѭWURQJKuQK6.4 Nhӳng hình ҧQKQj\ÿѭӧc dán QKmQWKHRÿiQKJLiFӫDFRQQJѭӡi và trên bӝ dӳ liӋXQj\ÿӝ chính xác cӫa FRQQJѭӡi là 65 ± 5%.
Hình 6.4 Phân bӕ hình ҧnh trong các lӟp
7URQJJLDLÿRҥn huҩn luyӋn trên Google Colab, mөc tiêu cӫa tôi là huҩn luyӋn mҥng thҫn kinh có khҧ QăQJWӵ phân loҥi bҧy cҧm xúc Trong quá trình huҩn luyӋn, RSWLPL]HU$GDPÿѭӧc sӱ dөQJVDXHSRFKÿӝ FKtQK[iFÿҥWÿӕi vӟi tұp dӳ liӋXYDOLGDWHYjÿӕi vӟi tұp dӳ liӋu train mà không có hiӋQWѭӧQJRYHILWWLQJĈk\ là kӃt quҧ cӫa viӋc sӱ dөng kӻ thuұt Drop-RXW>@WUѭӟc các lӟp dense trong mҥng thҫn kinh Lӏch sӱ chi tiӃt cӫa quá trình huҩn luyӋn cӫa tôi QKѭWURQJKuQK
Hình 6.5 7UiLÿӝ chính xác cӫa mô hình, phҧi: loss cӫa mô hình.
Mһc dù kiӃn trúc cӫa tôi có ít lӟp tích chұSKѫQYjFKӍ sӱ dөng mӝWNtFKWKѭӟc kernel, tôi vүQÿҥWÿѭӧFÿӝ FKtQK[iFWѭѫQJWӵ QKѭNӃt quҧ cӫa Octavio Arriaga [27], mô hình cӫa hӑ ÿҥWÿѭӧFÿӝ chính xác tӟi 66% khi thӱ nghiӋm trên bӝ dӳ liӋu FER-
&KѭѫQJӬng dөQJO}LWăQJWӕc HVTH: Phҥm ThӃ Vinh Hình 6.6 Confusion matrix khi thӱ nghiӋm trên tұp dӳ liӋu FER2013 Hình 6.6 là confusion matrix cho mô hình cӫD W{L NKL ÿѭӧc thӱ nghiӋm trên )(5WURQJÿyKҥnh phúc có tӹ lӋ nhұn dҥng cao nhҩt là 88% trong khi sӧ hãi có tӹ lӋ nhұn dҥng thҩp nhҩt là 40% Lý do rҩt có thӇ là biӇu cҧm khuôn mһWÿiQJVӧ có nhiӅXÿLӇPWѭѫQJÿӗng vӟi nét mһt buӗn
Trong nghiên cӭXQj\W{LÿmVӱ dөng Quartus phiên bҧQÿӇ tәng hӧp thiӃt kӃ RTL cho board DE-10 standard Sau khi tәng hӧp thiӃt kӃ ÿmVӱ dөng hҫu hӃt ba loҥi tài nguyên phҫn cӭng: ALM, bӝ xӱ lý tín hiӋu sӕ (DPS) và các khӕi RAM ThiӃt kӃ ÿmWLrXWKө tҩt cҧ các khӕi DSP và RAM và mӝt nӱa ALM cӫa Cyclone V Báo cáo chi tiӃt vӅ Quartusftime cӫDWjLQJX\rQÿmVӱ dөQJÿѭӧc trình bày trong bҧng sau ( bҧng 6.1 )
Bҧng 6.1 7jLQJX\rQÿmVӱ dөng trong thiӃt kӃ
Type of resource Proposed system
&KѭѫQJӬng dөQJO}LWăQJWӕc HVTH: Phҥm ThӃ Vinh /}LWăQJWӕc trên FPGA có thӇ hoҥWÿӝng ӣ mӭc 130 MHz, mӛi hình ҧnh khuôn mһW[ÿѭӧc phân loҥi trong 6,37ms (157 khuôn mһt mӛi giây).
So vӟi nghiên cӭXWѭѫQJWӵ cӫa Hanh Phan-Xuan và các cӝng sӵ [31], mô hình cӫDW{LÿҥWÿѭӧFÿӝ chính xác 66% trong khi báo cáo cӫa hӑ cho thҩ\ÿӝ chính xác ÿҥW%ÿҳSFKRÿӝ FKtQK[iFFDRKѫQNLӃn trúc mҥQJQѫron tích chұp cӫa tôi VkXKѫQVRYӟi hӑÿLӅu này dүQÿӃn hình ҧnh mҩt nhiӅu thӡLJLDQKѫQÿӇ ÿѭӧc phân loҥi Các chi tiӃWVRViQKÿѭӧc trình bày trong bҧng 6.2 GѭӟLÿk\
Bҧng 6.2 So sánh vӟi nghiên cӭu khác
Hình 6.7 Hình ҧnh demo hӋ thӕng
Hình 6.7 cho thҩy kӃt quҧ thӱ nghiӋm hӋ thӕng cӫDW{L1KѭFK~QJWDFyWKӇ thҩy, hӋ thӕng có khҧ QăQJSKiWKLӋn và phân loҥi chính xác khuôn mһt cӫa tác giҧ vӟi tӕFÿӝ trung bình 15 khung hình mӛi giây 7{LÿmWҧi lên video demo trên
Youtube tҥi: https://youtu.be/V7AFTmO5RUA
&KѭѫQJӬng dөQJO}LWăQJWӕc HVTH: Phҥm ThӃ Vinh Nghiên cӭXQj\ÿmÿѭӧc công bӕ tҥi hӝi nghӏ ISEE 2019 và xuҩt bҧn trên IEEE tҥLÿӏa chӍ: https://ieeexplore.ieee.org/document/8921140
&KѭѫQJ.Ӄt luұn HVTH: Phҥm ThӃ Vinh
Nghiên cӭXQj\ÿӅ xuҩt bӝ WăQJWӕc cho các lӟS9**&219ÿѭӧc triӇn khai trên bo mҥch Intel Cyclone V SoC Bҵng cách cҩu hình lҥi các tham sӕ QKѭNtFK WKѭӟc cӫa feature map, sӕ OѭӧQJIHDWXUHPDSÿҫXYjRYjÿҫu ra thông qua phҫn mӅm, máy gia tӕc có thӇ hӛ trӧ cho bҩt kǤ mҥng nào giӕng VGG Bӝ WăQJWӕFÿѭӧc tích hӧp trong mӝt hӋ thӕQJNK{QJÿӗng nhҩt, sӱ dөng RAM DDR3 tӕFÿӝ cao làm bӝ nhӟ GQJFKXQJ%ăQJWK{QJFӫa bӝ nhӟ QJRjLÿѭӧc cҧi thiӋn lên tӟi 4,6GB / JLk\JL~SWăQJÿiQJNӇ hiӋu suҩt truyӅn dӳ liӋX6DXÿyQyÿѭӧFÿiQKJLiWUrQ mҥng rҩt lӟQOj9**YjÿҥWÿѭӧFWK{QJOѭӧQJ*23VGѭӟi tҫn sӕ làm viӋc
150 MHz cho tҩt cҧ các lӟp CONV 6DXÿyVӱ dөng O}LÿmWKLӃt kӃ cho mӝt hӋ thӕQJÿӝc lұp có thӇ ghi dӳ liӋu video tӯ FDPHUD86%ÿӇ phát hiӋn khuôn mһWQJѭӡi và nhұn biӃt cҧm xúc cӫa hӑ trên mӝt thiӃt bӏ SoC giá rҿ MҥQJ&11ÿmÿѭӧc thiӃt kӃ mang lҥLÿӝ chính xác tӕt trong viӋc phân loҥi cҧm xúc và hoҥt ÿӝng hiӋu quҧ trên phҫn cӭQJ,3ÿѭӧc thiӃt kӃ trên FPGA có thӇ cung cҩp hiӋu suҩt cao trong ӭng dөng thӵc tӃ vӟi tӕFÿӝ 157 hình ҧQKÿѭӧc phân loҥi mӛi giây khi sӱ dөng vӟi mҥng
&11ÿmÿѭӧc thiӃt kӃ TӕFÿӝ Qj\ÿiSӭQJÿѭӧc các yêu cҫu xӱ lý trong thӡi gian thӵc Tuy nhiên, toàn bӝ hӋ thӕng chӍ ÿҥWÿѭӧc tӕFÿӝ 15 khung hình mӛi giây do giӟi hҥn tӕFÿӝ cӫa CPU ARM trên SoC FPGA Ĉk\OjOêGRWҥi sao các nghiên cӭXWURQJWѭѫQJODLW{LVӁ giҧm sӕ Oѭӧng tính toán mà CPU cҫn xӱ lý bҵng cách chuyӇQJLDLÿRҥn phát hiӋn khuôn mһt sang FPGA Mӝt lӵa chӑn khác là kӃt nӕi thêm các luӗng dӳ liӋu hình ҧnh mӟi FKRFiF*38ÿӇ tiӃn hành phân loҥLNKLÿyKӋ thӕng sӁ là mӝt cҩu trúc topo dҥng sao vӟi FPGA là mӝt thành phҫn trung tâm Bҵng cách giҧm bӟt các tҳc nghӁn vӅ hiӋu suҩt ӣ CPU, tôi hi vӑng sӁ cҧi thiӋQÿiQJNӇ hiӋXQăQJ tәng thӇ cӫa hӋ thӕng
Tài liӋu tham khҧo HVTH: Phҥm ThӃ Vinh
>@$.UL]KHYVN\,6XWVNHYHUDQG*(+LQWRQ³,PDJHQHWFODVVLILFDWLRQZLWKGHHS convolutional neural QHWZRUNV´LQ Advances in neural information processing systems, 2012, pp 1097 1105
[2] 6LPRQ\DQ DQG $ =LVVHUPDQ ³9HU\ 'HHS &RQYROXWLRQDO 1HWZRUNV IRU /DUJH-Scale Image 5HFRJQLWLRQ´ CoRR, vol abs/1409.1556, 2014
[3] C SzegeG\6,RIIH99DQKRXFNHDQG$$$OHPL³,QFHSWLRQ-v4, Inception-ResNet and the Impact of 5HVLGXDO&RQQHFWLRQVRQ/HDUQLQJ´LQ Proceedings of the 31st AAAI Conference on Artificial Intelligence,
[4] M Rezaee, Y Zhang, R Mishra, F Tong and H Tong, "Using a VGG-16 Network for Individual Tree Species Detection with an Object-Based Approach," 2018 10th IAPR Workshop on Pattern Recognition in
Remote Sensing (PRRS), Beijing, 2018, pp 1-7
[5] Y Wu, X Qin, Y Pan and C Yuan, "Convolution Neural Network based Transfer Learning for Classification of Flowers," 2018 IEEE 3rd International Conference on Signal and Image Processing (ICSIP) , Shenzhen, 2018, pp 562-566
[6] S K Ramani, "Facial Expression Detection Using Neural Network for Customer Based Service," 2018
International Conference on Computer, Communication, and Signal Processing (ICCCSP), Chennai, 2018, pp
[7@ 19,',$ &RUSRUDWLRQ ³19,',$ FX'11 *38 DFFHOHUDWHG GHHS OHDUQLQJ´ https://developer.nvidia.com/cudnn
[8] J Qiu et al ³*RLQJ 'HHSHU ZLWK (PEHGGHG )3*$ 3ODWIRUP IRU &RQYROXWLRQDO 1HXUDO 1HWZRUN´ in FPGA, 2016, pp 26±35
[9@