Networks Business Online Việt Nam & International VH2

Chia sẻ kinh nghiệm xử lý ảnh

Đăng ngày 07 November, 2022 bởi admin
Trước khi khởi đầu bài viết kết thúc cho chuỗi series Xử Lý Ảnh này, Minh xin tâm sự ” mỏng dính ” một chút ít nhe. Minh đã đến với nghành Xử Lý Ảnh này rất vô tình. Trong những năm tháng học ĐH ở trường Bách Khoa, mình đã ĐK một môn học tên là ” Xử Lý Ảnh và Thị Giác Máy Tính ” ; nó chỉ là một trong những môn học tự chọn. Mình còn chẳng biết sẽ vào học nội dung gì, đơn thuần là vì thấy tên nó hay hay ( có chữ Thị Giác Máy Tính ). Mình còn nhớ những bài mở màn của môn này là nói về tổng quan của Xử Lý Ảnh và Thầy đã cố gắng nỗ lực giảng giải về cách tổ chức triển khai tài liệu của ảnh ( hình ảnh được tàng trữ dưới dạng ma trận, mỗi px có giá trị 0-255, ảnh màu thường được màn biểu diễn bởi 3 layer RGB, vâng vâng và mây mây ) .Một trong những điểm ấn tượng tiên phong khiến mình muốn theo đuổi môn học này là vì người Thầy dạy môn học này khá ” khó ” tính và rất giỏi trong nghành này. Sau khi học sâu thêm nữa thì mình cũng công nhận môn học này khó thật ( vd : khởi đầu mình đã vật vã để hiểu được khái niệm convolution, biến hóa Fourier, nén ảnh, … ). Không chỉ có giải thuật mà còn có những kỹ năng và kiến thức toán học chen vào, mà sinh viên thì thấy công thức Toán là lại sợ, ngần ngại. Sau khi kết thúc môn học, mình quyết định hành động ĐK đề tài làm luận văn tốt nghiệp với Thầy dạy Xử Lý Ảnh đó luôn. Mình được học và tìm hiểu và khám phá về cách đọc báo ( paper – những bài báo khoa học ), bài luận văn của mình làm với bộ lọc Gabor ( Gabor filtering ) ; thời đó năm năm trước Deep Learning còn chưa nổi, CNN chưa là trending. Framework mình sử dụng là dùng MATLAB ( có những extension cho computer vision ), thời gian đó Python chưa soán ngôi được MATLAB đâu. Về sau Python nổi lên vì tính ưu việt, nhanh gọn vá khá tương thích để thử nghiệm AI. Nên giờ đây thấy những hình ảnh meme cà khịa MATLAB là mình thấy vui vui, haha .Và đến thời gian hiện tại, mình đang ” đú trend ” theo Deep Learning ! Dĩ nhiên, những kiến thức thời xử lý ảnh không phải là thừa ; mà rất thiết yếu để mình hiểu sâu thực chất và cách thao tác của CNN nữa là đằng khác. Theo Minh, nền tảng cơ sở vẫn là quan trọng ; mình cũng không quá mặn mà với những cách tiếp cận theo kiểu ” mì ăn liền “. Vì làm kiểu đó đúng là nhanh thật nhưng bản thân mình không hề nâng cấp cải tiến cũng như nhanh gọn quy đổi qua bài toán bất kể. Đó là sự tăng trưởng không bền vững và kiên cố .

Do đó, series bài viết đầu tiên của Minh muốn chia sẻ là về Xử Lý Ảnh, chứ không phải Deep Learning. Tính từ bài post đầu tiên cho chuỗi bài viết XLA này, thì bài post kết thúc hôm nay là khoảng tròn 1 năm. Minh cũng muốn gửi lời xin lỗi đến những bạn nào có theo dõi từ những bài viết đầu tiên vì việc viết quá lâu như vậy. M cũng khá bận rộn với công việc hàng ngày, chỉ có thể dành thời gian rảnh rỗi để viết post; và để hoàn thành 1 bài viết thì toàn bộ code chia sẻ mình đều đã chạy thử để đảm bảo nó làm việc được nên cũng mất kha khá thời gian chứ không thể tiến hành nhanh chóng được.

Chém chuối nãy giờ cũng dữ lắm rồi, thôi mình tiếp đến những mục chính thôi nào. Tổng kết một số ít kinh nghiệm tay nghề cho việc học và hành XLA qua góc nhìn cá thể của Minh 🙂 .

Học xử lý ảnh nên bắt đầu từ đâu?

Trước khi san sẻ điểm mở màn để đặt chân vào quốc tế Xử Lý Ảnh / Thị giác máy tính. Mình xin tóm tắt những hành trang cần chuẩn bị sẵn sàng nhá :

  • Toán học: ở mức độ sương sương thôi, bạn phải cố gắng mày mò công thức toán để hiểu chúng, bay không trốn khỏi nó được đâu => tu-bi-không-tình-iu :))
  • Tiếng Anh: XLA đã là kiến thức chuyên ngành của Khoa học máy tính rồi, không phải là kiến thức phổ thông nữa nên dùng trình tiếng Anh kha khá để có thể nhanh chóng đọc và hiểu tài liệu là một lợi thế.
  • Đam mê: thích thú với những ứng dụng mà computer vision mang lại: nhận diện khuôn mặt, đọc biển số xe, phát hiện người, … rất nhiều luôn kể mỏi miệng không thể hết được.
  • Khả năng lập trình: ở mức độ nhất định, không được quá kém. “Bộ môn” này học mà không hành là ngủm! Có những thứ bạn phải trải nghiệm mới thực sự hiểu và hiểu sâu được nó. Mình không tin bạn có thể học XLA chỉ từ lý thuyết, chính Thầy dạy lý thuyết XLA của mình còn code demo được cho cả lớp xem mà.
  • Tư duy: đây là lĩnh vực khó, có chút cao cấp vì nó tổng hợp nhiều kiến thức. Hình ảnh được số hóa thành một ma trận, vì vậy bạn sẽ cần tư duy tính toán làm việc trên ma trận. Qua deep learning lại tiếp tục sử dụng tư duy theo kiểu ma trận này để làm việc với ảnh. Ngoài ra, bạn phải nỗ lực tư duy để hiểu các giải thuật (bắt não tập thể dục).

Rồi, điểm mở màn để tiếp cận XLA theo mình đó là một người Thầy dạy XLA ( giống như mình đã từng ) hoặc bạn phải đọc sách ( sách cũng chính là Thầy của mình mà :)). Quyển đó mình xin trình làng là quyển ” Digital Image Processing – Rafael C. Gonzalez và Richard E. Woods “. Đây cũng là quyển sách mình bám theo trong quy trình học môn học. Bên cạnh đó có điểm nào chưa hiểu bạn phải tìm kiếm trên mạng điều tra và nghiên cứu thêm, sẽ có một số ít hiệu quả từ Wikipedia ví dụ điển hình. Ngoài việc đọc triết lý bạn phải tự mình lập trình để chạy chương trình nữa. Code mẫu miêu tả 1, bạn phải thực hành thực tế từ code đó, biến hóa tham số thành 10 kiểu khác nhau để từ đó mình nắm rõ thực chất của vấn đề. Các giải thuật XLA bạn sẽ hay thấy người ta đặc tả tham số, ví dụ như nếu là nhị phân hóa ảnh người ta chọn 1 ngưỡng ( threshold ) là giá trị 0.5 ví dụ điển hình. Bạn phải code và chạy chương trình với ngưỡng 0.5 xem hiệu quả ra như nào, chạy với ngưỡng 0.7 coi hình hiệu quả biến đối ra sao, thử qua ngưỡng 0.1 luôn coi có gì khác và từ đó bạn phải nắm được cách chọn ngưỡng như thế nào để xử lý một bài toán. Học XLA mà không táy máy, không nhiệt huyết thì khó lắm .

Triển khai ứng dụng xử lý ảnh

Minh phải nói rằng những bài viết mà mình san sẻ cũng là nỗ lực san sẻ để mọi người nắm được lắm rồi. Nhưng nhiều khi cũng thấy có vài điểm chưa rõ lắm cho những người mới, nên mấy bác chịu khó tự khám phá thêm nha, đừng chỉ chăm chăm học từ 1 nguồn tài liệu duy nhất. Việc tinh thông code được XLA chạy ra tác dụng thực sự mới chỉ dừng lại ở mức độ học tập và demo. Chưa thể vận dụng vào thực tiễn ngay đâu ạ .Điều kiện để dùng được vào trong thực tiễn :

  • Nhanh: chương trình bạn phải chạy thật nhanh, 1 ảnh mà mất 5s xử lý là thua, người dùng không thể đợi được. Cái này tùy vào nhu cầu ứng dụng nhưng nói chung phải càng nhanh càng tốt.
  • Chính xác: kết quả chạy phải đủ tốt. Tốc độ xử lý và Độ chính xác luôn có sự đánh đổi (trade off), được cái này sẽ giảm cái kia.

Vì vậy để ra được một ứng dụng thực tế chạy thiệt thì phải đủ nhanh và đủ chính xác. Mà nếu bạn muốn triển khai trên các phần cứng nhúng thì lại khó ác nữa, vì các bo nhúng nhỏ gọn nhưng bù lại cấu hình yếu. Đó sẽ là một thử thách vô cùng lớn mà bạn phải vượt qua. Không qua được thì ta chỉ có thể ở mức demo. Sự thật là vậy và đôi khi mình phải chấp nhận nhìn thẳng vào.

Tóm lại bạn muốn ra một ứng dụng XLA trong thực tiễn hẳn hoi, bạn phải mày mò thêm nữa ; bỏ công optimize giải thuật ; code trên những ngôn từ lập trình cấp thất sớm nhất có thể như C / C + + ví dụ điển hình. Kinh nghiệm xương máu của mình rồi, mình từng nỗ lực deploy chương trình bằng Python và phải nói là nó thất bại thảm hại ! Không thể trốn thoát khỏi C / C + + đâu những pé :). Nếu bác nào làm được trên Python thì M quá khâm phục, cũng muốn học hỏi. Ahihi .

Tổng kết

Tổng kết lại bài viết này là bài viết kết thúc series san sẻ về XLA của M. Nội dung dừng lại ở giải thuật HOG nhưng thực ra XLA còn nhiều giải thuật trích đặc trưng hình ảnh nhắm : Gabor filter, LBP, SIFT, SURF, Dense SIFT, … để theo đuổi mấy cái đó bạn cũng nên đọc paper của những tác giả gốc, nếu hoàn toàn có thể thì code lại theo paper đó hoặc tìm code mẫu để follow. Giải thuật HOG là mình tự code lại từ đầu luôn á theo paper, nhưng nếu mình ở trình độ 4 năm về trước thì mình thú thật mình không hề làm được. Do đó càng theo đuổi lâu thì bạn sẽ càng có nhiều kinh nghiệm tay nghề. Bề dày kiến thức và kỹ năng và kinh nghiệm tay nghề trong ” ngành ” sẽ giúp bạn đi nhanh và đi xa hơn. Hãy kiên trì nha .Cánh cửa này đóng lại sẽ có cánh cửa khác mở ra. Sắp tới mình đang dự tính khởi đầu 1 series bài viết mới, những ứng viên tiềm năng :

  • Deep Learning cơ bản: mình thấy cũng có 1 bác viết về chủ đề này rồi, mình viết nữa thì sợ đụng hàng mà chất lượng giả dụ có kém hơn thì lại không hay :P.
  • Machine Learning cơ bản: cũng có vẻ hấp dẫn, sẵn dịp để M ôn lại SVM, k-nn, neural net, tree, …
  • Xử Lý Ảnh trên OpenCV C/C++: một version khác của series XLA cũ nhưng sẽ code bằng C/C++, chú trọng đến tối ưu performance hơn và sẽ gần gũi ứng dụng thực tế hơn; M còn chưa biết có làm nổi topic này không nữa ^^~.
  • CNN cơ bản: tập trung về khai thác bản chất của mạng Convolutional Neural Network (CNN), hàm loss trong các bài toán phân loại, biến đổi dữ liệu ảnh (augmentation).

Phân vân những đề tài trên quá, bác nào nếu có chăm sóc hoặc ủng hộ thì comment tăng tương tác nha. Hihi .Chào tạm biệt ! Minh

Bài viết tiếp theo: Tut 21: Xử lý ảnh – Hiện thực trích đặc trưng Local Binary Patterns (LBP)

Cảm ơn bạn đã theo dõi bài viết. Hãy kết nối với tớ nhé!

  • Minh: https://www.facebook.com/minhng.info
  • Khám phá xử lý ảnh – GVGroup: https://www.facebook.com/groups/ip.gvgroup

Khám phá xử lý ảnh – GVGroup

Danh sách bài viết series OpenCV :

Source: https://vh2.com.vn
Category : Tin Học