【ซีรี่ส์ OCR การเรียนรู้เชิงลึก·6】การวิเคราะห์เชิงลึกของสถาปัตยกรรม CRNN
📅
เวลาโพสต์: 2025-08-19
👁️
การอ่าน:1966
⏱️
ประมาณ 22 นาที (4248 คํา)
📁
หมวดหมู่: คู่มือขั้นสูง
การวิเคราะห์โดยละเอียดของสถาปัตยกรรม 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
แท็ก:
CRNN
CNN
RNN
LSTM
CTC
OCR
การเรียนรู้เชิงลึก
แบบ end-to-end
การสร้างแบบจําลองลําดับ