ผู้ช่วยการรู้จําข้อความ OCR

【ซีรี่ส์ OCR การเรียนรู้เชิงลึก·6】การวิเคราะห์เชิงลึกของสถาปัตยกรรม CRNN

การวิเคราะห์โดยละเอียดของสถาปัตยกรรม CRNN รวมถึงการแยกคุณลักษณะ CNN การสร้างแบบจําลองลําดับ RNN และการใช้งานฟังก์ชันการสูญเสีย CTC อย่างสมบูรณ์ ดําดิ่งสู่การผสมผสานที่ลงตัวระหว่าง CNN และ RNN

## บทนํา CRNN (Convolutional Recurrent Neural Network) เป็นหนึ่งในสถาปัตยกรรมที่สําคัญที่สุดในด้านการเรียนรู้เชิงลึก OCR ซึ่งเสนอโดย Bai Xiang et al. ในปี 2015 CRNN ผสมผสานความสามารถในการแยกคุณลักษณะของโครงข่ายประสาทเทียมแบบ convolutional (CNN) เข้ากับความสามารถในการสร้างแบบจําลองลําดับของโครงข่ายประสาทเทียมที่เกิดซ้ํา (RNN) อย่างชาญฉลาดเพื่อให้เกิดการจดจําข้อความแบบ end-to-end บทความนี้จะให้การวิเคราะห์เชิงลึกเกี่ยวกับการออกแบบสถาปัตยกรรมของ CRNN หลักการทํางานวิธีการฝึกอบรมและการใช้งานเฉพาะใน OCR เพื่อให้ผู้อ่านมีความเข้าใจทางเทคนิคที่ครอบคลุม ## ภาพรวมของสถาปัตยกรรม CRNN ### แรงจูงใจในการออกแบบ ก่อน CRNN ระบบ OCR มักใช้วิธีการทีละขั้นตอน: การตรวจจับอักขระและการแบ่งส่วนจะดําเนินการก่อน จากนั้นจึงจดจําอักขระแต่ละตัว วิธีนี้มีปัญหาดังต่อไปนี้: **ข้อจํากัดของวิธีการแบบดั้งเดิม**: - การแพร่กระจายข้อผิดพลาด: ข้อผิดพลาดในการแบ่งส่วนอักขระอาจส่งผลโดยตรงต่อผลการจดจํา - ความซับซ้อน: ต้องออกแบบอัลกอริธึมการแบ่งส่วนอักขระที่ซับซ้อน - ความทนทานไม่ดี: ไวต่อระยะห่างของอักขระและการเปลี่ยนแปลงแบบอักษร - ไม่สามารถจัดการกับจังหวะต่อเนื่องได้: ปรากฏการณ์ของจังหวะต่อเนื่องในข้อความที่เขียนด้วยลายมือนั้นยากที่จะแยกออกจากกัน **แนวคิดนวัตกรรมของ CRNN**: - การเรียนรู้แบบ end-to-end: การแมปโดยตรงจากรูปภาพไปยังลําดับข้อความ - ไม่มีการแบ่งส่วน: หลีกเลี่ยงความซับซ้อนของการแบ่งส่วนอักขระ - การสร้างแบบจําลองลําดับ: ใช้ RNN เพื่อสร้างแบบจําลองการพึ่งพาระหว่างอักขระ - การจัดตําแหน่ง CTC: แก้ไขความยาวลําดับอินพุต-เอาต์พุตไม่ตรงกัน ### สถาปัตยกรรมโดยรวม สถาปัตยกรรม CRNN ประกอบด้วยสามองค์ประกอบหลัก: **1. เลเยอร์การบิดเบี้ยว**: - ฟังก์ชัน: แยกลําดับคุณสมบัติจากภาพอินพุต - อินพุต: ภาพบรรทัดข้อความ (ความสูงคงที่ ความกว้างตัวแปร) - เอาต์พุต: ลําดับแผนที่คุณลักษณะ **2. เลเยอร์ที่เกิดซ้ํา**: - ฟังก์ชัน: จําลองการพึ่งพาตามบริบทในลําดับคุณลักษณะ - อินพุต: ลําดับคุณลักษณะที่แยกโดย CNN - เอาต์พุต: ลําดับคุณลักษณะที่มีข้อมูลตามบริบท **3. เลเยอร์การถอดความ**: - ฟังก์ชัน: แปลงลําดับคุณลักษณะเป็นลําดับข้อความ - วิธีการ: การใช้ CTC (Connectionist Temporal Classification) - เอาต์พุต: ผลการจดจําข้อความขั้นสุดท้าย ## คําอธิบายโดยละเอียดของเลเยอร์ convolutional ### กลยุทธ์การสกัดคุณสมบัติ เลเยอร์ convolutional ของ CRNN ได้รับการออกแบบมาโดยเฉพาะสําหรับการจดจําข้อความ: **คุณสมบัติโครงสร้างเครือข่าย**: - ความลึกตื้น: มักใช้ชั้น convolutional 7 ชั้น - เคอร์เนลแบบ convolutional ขนาดเล็ก: ส่วนใหญ่จะใช้เคอร์เนล convolutional 3×3 - กลยุทธ์การรวมกลุ่ม: ใช้การรวมกลุ่มเท่าที่จําเป็นในทิศทางความกว้าง **การกําหนดค่าเครือข่ายเฉพาะ**: อินพุต: 32×W×1 (สูง 32, กว้าง W, ช่องเดียว) Conv1: 64 3×3 นิวเคลียส convolutional ขั้นตอนที่ 1 เติม 1 MaxPool1: 2×2 สระ ความยาวขั้นบันได 2 Conv2: 128 เคอร์เนล 3×3 convolutional ขั้นตอนที่ 1 เติม 1 MaxPool2: รวม 2×2 ขั้น ขนาดขั้น 2 Conv3: 256 3×3 นิวเคลียส convolutional ขั้นตอนที่ 1 เติม 1 Conv4: 256 3×3 convolutional cores ขั้นตอนที่ 1 เติม 1 MaxPool3: 2×1 รวม ขนาดขั้น (2,1) Conv5: 512 3×3 convolutional cores ขั้นตอนที่ 1 เติม 1 แบทช์บรรทัดฐาน + ReLU Conv6: 512 เคอร์เนลแบบบิดเบี้ยว 3×3 ขั้นตอน 1 เติม 1 แบทช์บรรทัดฐาน + ReLU MaxPool4: รวม 2×1 ขนาดขั้น (2,1) Conv7: 512 2×2 นิวเคลียส convolutional ขั้นตอนที่ 1 เติม 0 เอาต์พุต: 512×1×W/4 ### ข้อควรพิจารณาในการออกแบบที่สําคัญ **กลยุทธ์การบีบอัดสูง**: - เป้าหมาย: บีบอัดภาพให้สูง 1 พิกเซล - วิธีการ: ค่อยๆบีบอัดความสูงโดยใช้ชั้นรวมหลายชั้น - เหตุผล: ความสูงของบรรทัดข้อความค่อนข้างไม่สําคัญ **กลยุทธ์การถือครองความกว้าง**: - เป้าหมาย: รักษาข้อมูลความกว้างของภาพให้มากที่สุด - วิธีการ: ลดการดําเนินการรวมในทิศทางความกว้าง - เหตุผล: ข้อมูลลําดับของข้อความส่วนใหญ่สะท้อนให้เห็นในทิศทางความกว้าง **การแปลงแผนที่คุณลักษณะ**: เอาต์พุตของเลเยอร์ convolutional จะต้องแปลงเป็นรูปแบบอินพุตของ RNN: - เอาต์พุตดิบ: C×H×W (Channel × Height× Width) - แปลงแล้ว: W×C (ความยาวลําดับ× มิติคุณลักษณะ) - วิธีการ: ใช้เวกเตอร์คุณลักษณะสําหรับแต่ละตําแหน่งความกว้างเป็นขั้นตอนเวลา ## คําอธิบายโดยละเอียดของเลเยอร์วงกลม ### การเลือก RNN โดยทั่วไป CRNN จะใช้ LSTM แบบสองทิศทางเป็นเลเยอร์ลูป: **ข้อดีของ LSTM แบบสองทิศทาง**: - ข้อมูลตามบริบท: ใช้บริบททั้งไปข้างหน้าและถอยหลัง - การพึ่งพาทางไกล: LSTM สามารถจัดการกับการพึ่งพาทางไกลได้ - Gradient Stabilization: หลีกเลี่ยงปัญหาการหายไปของการไล่ระดับสี **การกําหนดค่าเครือข่าย**: อินพุต: W×512 (ความยาวลําดับ×มิติคุณลักษณะ) BiLSTM1: 256 เซลล์ที่ซ่อนอยู่ (128 ไปข้างหน้า + 128 ถอยหลัง) BiLSTM2: 256 เซลล์ที่ซ่อนอยู่ (128 ไปข้างหน้า + 128 ถอยหลัง) เอาต์พุต: W×256 (ความยาวลําดับ× ขนาดที่ซ่อนอยู่) ### กลไกการสร้างแบบจําลองลําดับ **การสร้างแบบจําลองการพึ่งพาเวลา**: เลเยอร์ RNN จะบันทึกการพึ่งพาเวลาระหว่างอักขระ: - ข้อมูลของอักขระก่อนหน้าช่วยในการจดจําอักขระปัจจุบัน - ข้อมูลสําหรับอักขระที่ตามมายังสามารถให้บริบทที่เป็นประโยชน์ - ข้อมูลของคําหรือวลีทั้งหมดช่วยแก้ความกํากวม **การปรับปรุงคุณสมบัติ**: คุณสมบัติที่ประมวลผลโดย RNN มีลักษณะดังต่อไปนี้: - คํานึงถึงบริบท: คุณลักษณะของแต่ละสถานที่มีข้อมูลตามบริบท - ความสม่ําเสมอของเวลา: คุณสมบัติในตําแหน่งที่อยู่ติดกันมีความต่อเนื่องบางอย่าง - ความสมบูรณ์ของความหมาย: รวมคุณสมบัติภาพและลําดับ ## คําอธิบายโดยละเอียดของเลเยอร์การถอดความ ### กลไก CTC CTC (Connectionist Temporal Classification) เป็นองค์ประกอบสําคัญของ CRNN: **บทบาทของ CTCs**: - การแก้ไขปัญหาการจัดตําแหน่ง: ความยาวของลําดับอินพุตไม่ตรงกับความยาวของลําดับเอาต์พุต - การฝึกอบรมแบบ end-to-end: ไม่จําเป็นต้องมีคําอธิบายประกอบการจัดตําแหน่งระดับอักขระ - จัดการรายการที่ซ้ํากัน: จัดการกรณีของอักขระที่ซ้ํากันอย่างถูกต้อง **CTC ทํางานอย่างไร**: 1. ขยายชุดป้ายกํากับ: เพิ่มป้ายกํากับว่างที่ด้านบนของชุดอักขระเดิม 2. การแจงนับเส้นทาง: แจกแจงเส้นทางการจัดตําแหน่งที่เป็นไปได้ทั้งหมด 3. ความน่าจะเป็นของเส้นทาง: คํานวณความน่าจะเป็นของแต่ละเส้นทาง 4. Marginalization: รวมความน่าจะเป็นของเส้นทางทั้งหมดเพื่อให้ได้ความน่าจะเป็นของลําดับ ### ฟังก์ชั่นการสูญเสีย CTC **การเป็นตัวแทนทางคณิตศาสตร์**: เมื่อกําหนดลําดับอินพุต X และลําดับเป้าหมาย Y การสูญเสีย CTC จะถูกกําหนดเป็น: L_CTC = -log P(Y| X) โดยที่ P(Y| X) ได้มาจากการรวมความน่าจะเป็นของเส้นทางที่สอดคล้องกันที่เป็นไปได้ทั้งหมด: พี(Y| X) = Σ_π∈B^(-1)(Y) P(π| X) ที่นี่ B^(-1)(Y) แสดงถึงชุดเส้นทางทั้งหมดที่สามารถแมปกับลําดับเป้าหมาย Y **อัลกอริทึมเดินหน้า-ถอยหลัง**: ในการคํานวณการสูญเสีย CTC อย่างมีประสิทธิภาพจะใช้อัลกอริทึมไปข้างหน้า - ถอยหลังสําหรับการเขียนโปรแกรมแบบไดนามิก: - อัลกอริทึมไปข้างหน้า: คํานวณความน่าจะเป็นที่จะไปถึงแต่ละสถานะ - อัลกอริทึมย้อนกลับ: คํานวณความน่าจะเป็นจากแต่ละสถานะจนถึงจุดสิ้นสุด - การคํานวณการไล่ระดับสี: คํานวณการไล่ระดับสีร่วมกับความน่าจะเป็นไปข้างหน้า-ถอยหลัง ## กลยุทธ์การฝึกอบรม CRNN ### การประมวลผลข้อมูลล่วงหน้า **การประมวลผลภาพล่วงหน้า**: - การทําให้เป็นมาตรฐานขนาด: รวมความสูงของภาพเป็น 32 พิกเซล - การบํารุงรักษาอัตราส่วนภาพ: รักษาอัตราส่วนภาพของภาพต้นฉบับ - การแปลงระดับสีเทา: แปลงเป็นภาพระดับสีเทาช่องเดียว - การทําให้เป็นมาตรฐานเชิงตัวเลข: ค่าพิกเซลจะถูกปรับให้เป็นมาตรฐานเป็น [0,1] หรือ [-1,1] **การปรับปรุงข้อมูล**: - การแปลงทางเรขาคณิต: การหมุน การเอียง การแปลงมุมมอง - การเปลี่ยนแปลงของแสง: การปรับความสว่าง คอนทราสต์ - การเพิ่มเสียงรบกวน: เสียงเกาส์เซียน, เสียงเกลือและพริกไทย - เบลอ: Motion blur, Gaussian blur ### เทคนิคการฝึก **การจัดตารางอัตราการเรียนรู้**: - อัตราการเรียนรู้เริ่มต้น: โดยทั่วไปจะตั้งค่าเป็น 0.001 - กลยุทธ์การสลายตัว: การสลายตัวแบบเอ็กซ์โพเนนเชียลหรือการสลายตัวของขั้นบันได - กลยุทธ์การวอร์มอัพ: สองสามยุคแรกใช้อัตราการเรียนรู้เพียงเล็กน้อย **เทคนิคการทําให้เป็นมาตรฐาน**: - ออกกลางคัน: เพิ่มการออกกลางคันหลังเลเยอร์ RNN - การเสื่อมสภาพของน้ําหนัก: การทําให้เป็นมาตรฐาน L2 ป้องกันการโอเวอร์ฟิตติ้ง - การทําให้เป็นมาตรฐานของแบทช์: ใช้การทําให้เป็นมาตรฐานของแบทช์ในเลเยอร์ CNN **การเลือกเครื่องมือเพิ่มประสิทธิภาพ**: - อดัม: อัตราการเรียนรู้ที่ปรับตัวได้การบรรจบกันอย่างรวดเร็ว - RMSprop: เหมาะสําหรับการฝึกอบรม RNN - SGD+Momentum: ตัวเลือกแบบดั้งเดิมแต่มีเสถียรภาพ ## การเพิ่มประสิทธิภาพและการปรับปรุง CRNN ### การเพิ่มประสิทธิภาพสถาปัตยกรรม **การปรับปรุงบางส่วนของ CNN**: - การเชื่อมต่อ ResNet: เพิ่มการเชื่อมต่อที่เหลือเพื่อปรับปรุงความเสถียรในการฝึกซ้อม - DenseNet Fabric: การเชื่อมต่อที่หนาแน่นช่วยปรับปรุงคุณสมบัติมัลติเพล็กซ์ - กลไกความสนใจ: แนะนําความสนใจเชิงพื้นที่ใน CNN **การปรับปรุงบางส่วนของ RNN**: - การเปลี่ยน GRU: ใช้ GRU เพื่อลดจํานวนพารามิเตอร์ - หม้อแปลง: แทนที่ RNN โดยใช้กลไกการเอาใจใส่ตนเอง - คุณสมบัติหลายสเกล: รวมคุณสมบัติจากเครื่องชั่งต่างๆ ### การเพิ่มประสิทธิภาพ **การเร่งการอนุมาน**: - การหาปริมาณแบบจําลอง: การหาปริมาณ INT8 ช่วยลดความพยายามในการคํานวณ - การตัดแต่งกิ่งโมเดล: ลบการเชื่อมต่อที่ไม่สําคัญ - การกลั่นกรองความรู้: เรียนรู้ความรู้ของโมเดลขนาดใหญ่กับโมเดลขนาดเล็ก **การเพิ่มประสิทธิภาพหน่วยความจํา**: - จุดตรวจสอบการไล่ระดับสี: ลดรอยเท้าหน่วยความจําระหว่างการฝึกซ้อม - ความแม่นยําผสม: ฝึกด้วย FP16 - การเพิ่มประสิทธิภาพกราฟแบบไดนามิก: ปรับโครงสร้างของกราฟที่คํานวณให้เหมาะสม ## กรณีการใช้งานในโลกแห่งความเป็นจริง ### การจดจําข้อความที่เขียนด้วยลายมือ **สถานการณ์การใช้งาน**: - แปลงบันทึกที่เขียนด้วยลายมือให้เป็นดิจิทัล - กรอกแบบฟอร์มอัตโนมัติ - การจดจําเอกสารทางประวัติศาสตร์ **คุณสมบัติทางเทคนิค**: - รูปแบบอักขระขนาดใหญ่: ต้องการความสามารถในการแยกคุณสมบัติที่แข็งแกร่ง - การประมวลผลจังหวะต่อเนื่อง: ข้อดีของกลไก CTC นั้นชัดเจน - บริบทมีความสําคัญ: ความสามารถในการสร้างแบบจําลองลําดับของ RNN มีความสําคัญ ### การจดจําข้อความที่พิมพ์ **สถานการณ์การใช้งาน**: - แปลงเอกสารให้เป็นดิจิทัล - บัตรประจําตัวบัตรโดยสาร - การจดจําป้าย **คุณสมบัติทางเทคนิค**: - ความสม่ําเสมอของฟอนต์: การแยกคุณลักษณะของ CNN นั้นค่อนข้างตรงไปตรงมา - กฎการพิมพ์: สามารถใช้ข้อมูลเค้าโครงได้ - ข้อกําหนดความแม่นยําสูง: ต้องมีการปรับแต่งโมเดลอย่างละเอียด ### การจดจําข้อความฉาก **สถานการณ์การใช้งาน**: - การจดจําข้อความ Street View - การระบุฉลากผลิตภัณฑ์ - การจดจําป้ายจราจร **คุณสมบัติทางเทคนิค**: - พื้นหลังที่ซับซ้อน: ต้องการการแยกคุณสมบัติที่มีประสิทธิภาพ - การเสียรูปอย่างรุนแรง: จําเป็นต้องมีการออกแบบสถาปัตยกรรมที่แข็งแกร่ง - ข้อกําหนดแบบเรียลไทม์: ต้องใช้เหตุผลที่มีประสิทธิภาพ ## สรุป ในฐานะสถาปัตยกรรมคลาสสิกของ OCR การเรียนรู้เชิงลึก CRNN ประสบความสําเร็จในการแก้ปัญหามากมายของวิธีการ OCR แบบดั้งเดิม วิธีการฝึกอบรมแบบ end-to-end แนวคิดการออกแบบที่ไม่มีการแบ่งส่วนตัวละคร และการแนะนํากลไก CTC ล้วนเป็นแรงบันดาลใจที่สําคัญสําหรับการพัฒนาเทคโนโลยี OCR ในภายหลัง **ผลงานที่สําคัญ**: - การเรียนรู้แบบ End-to-End: ลดความซับซ้อนในการออกแบบระบบ OCR - การสร้างแบบจําลองลําดับ: ใช้คุณสมบัติลําดับของข้อความอย่างมีประสิทธิภาพ - การจัดตําแหน่ง CTC: แก้ไขความยาวของลําดับไม่ตรงกัน - สถาปัตยกรรมที่เรียบง่าย: เข้าใจและใช้งานได้ง่าย **ทิศทางการพัฒนา**: - กลไกความสนใจ: แนะนําความสนใจเพื่อปรับปรุงประสิทธิภาพ - หม้อแปลง: แทนที่ RNN ด้วยความสนใจในตนเอง - การหลอมรวมหลายรูปแบบ: รวมข้อมูลอื่น ๆ เช่นโมเดลภาษา - การออกแบบที่มีน้ําหนักเบา: การบีบอัดโมเดลสําหรับอุปกรณ์มือถือ ความสําเร็จของ CRNN เป็นข้อพิสูจน์ถึงศักยภาพอันยิ่งใหญ่ของการเรียนรู้เชิงลึกในด้าน OCR และมอบประสบการณ์อันมีค่าในการทําความเข้าใจวิธีออกแบบระบบการเรียนรู้แบบ end-to-end ที่มีประสิทธิภาพ ในบทความหน้า เราจะเจาะลึกรายละเอียดทางคณิตศาสตร์และการใช้งานของฟังก์ชันการสูญเสีย CTC
ผู้ช่วย OCR QQ ฝ่ายบริการลูกค้าออนไลน์
ฝ่ายบริการลูกค้า QQ(365833440)
กลุ่มสื่อสารผู้ใช้ QQ ผู้ช่วย OCR
QQกลุ่มเพื่อน(100029010)
ผู้ช่วย OCR ติดต่อฝ่ายบริการลูกค้าทางอีเมล
กล่องจดหมาย:net10010@qq.com

ขอบคุณสําหรับความคิดเห็นและข้อเสนอแนะของคุณ!