Hiện tại ở VN có rất nhiều bạn trẻ đang theo học các chuyên ngành về AI, và có định hướng sau này trở thành AI engineer, tuy nhiên do môi trường học tập trên các trường đại học, cao đẳng thường có thiên hướng hàn lâm, thiên về lý thuyết, cũng như là cơ hội đi thực tập các vị trí liên quan đến AI không có nhiều và khá cạnh tranh, điều đó dẫn tới việc là các bạn không có nhiều cơ hội để biết được công việc của 1 kỹ sư AI là gì, hay có sự khác biệt như thế nào giữa công việc các bạn sẽ làm trên công ty và những gì các bạn được học trên trường.
Do đó mình muốn làm video này để chia sẻ với các bạn những task (xem video), những công việc mà hàng ngày 1 kỹ sư AI sẽ làm, từ đó giúp các bạn có được hình dung về công việc các bạn có thể sẽ làm trong tương lai. Mình tên là Việt, Hiện tại mình đang là senior AI engineer làm việc cho Sporttotal – 1 công ty hoạt động trong lĩnh vực thể thao tại Berlin, Đức. Mình đã có khoảng 8 năm kinh nghiệm làm việc trong lĩnh vực AI/Data Science, và trong đó có 3 năm mình làm kỹ sư AI trong mảng thể thao. Chuyên môn của mình là về Deep Learning for Computer Vision.
Đức là 1 trong các quốc gia đi đầu về việc áp dụng kỹ thuật và AI trong thể thao, kể cả trong thể thao bán chuyên. Do đó các công ty như công ty mình có khá nhiều đất để phát triển
Các công việc mà bọn mình sẽ (gần như) làm hàng ngày bao gồm:
- Họp nội bộ
- Làm việc với dữ liệu
- Chọn và huấn luyện mô hình
- Triển khai mô hình
- Trao đổi với khách hàng
Cụ thể như sau:
Họp nội bộ
Hàng ngày bọn mình sẽ có 1 buổi họp ngắn được gọi là daily meeting hoặc standup meeting, diễn ra từ 10 rưỡi sáng đến 11 giờ mỗi ngày. Trong buổi này mỗi thành viên trong team sẽ có khoảng 5 phút để update cho cả team về những gì mình đã làm hôm qua, những gì đã hoàn thành, có gì còn khúc mắc hay cần sự giúp đỡ của những thành viên khác. Buổi này là đặc biệt cần thiết cho những team mà có những thành viên làm việc remote, như team của mình
Làm việc với dữ liệu
Khác với những gì các bạn sinh viên học về AI được đào tạo trên trường, khi mà phần lớn thời gian học các bạn sẽ tập trung nhiều vào việc làm sao để xây dựng được các mô hình Machine learning/ Deep Learning nhằm giải quyết các bài toán phổ biến khác nhau. Khi mà các bạn đi làm, data – hay dữ liệu, sẽ là đối tượng mà các bạn cần dành rất nhiều thời gian để làm việc và xử lý. Cụ thể trong trường hợp của công ty mình. Công ty mình làm về lĩnh vực thể thao, với các môn khác nhau như là bóng đá, bóng chuyền, bóng rổ và khúc côn cầu trên băng. Dựa vào các mô hình AI thì với mỗi 1 môn thể thao, bọn mình sẽ cung cấp 2 giải pháp/dịch vụ như sau:
- Sport broadcasting: Khi các bạn xem thể thao trên TV, ví dụ như là bóng đá, các bạn sẽ thấy là góc máy quay không bao giờ cố định, mà sẽ di chuyển liên tục, để kịp ghi lại những tình huống quan trọng, đáng chú ý trên sân (ví dụ khu vực đang có tranh chấp, hoặc 1 cầu thủ đang dẫn bóng). Hơn nữa, trong 1 trận đấu sẽ không chỉ có 1 camera, mà sẽ có rất nhiều camera được lắp đặt ở xung quanh sân bóng cũng như trên các khán đài, và thậm chí là có thể có cả flycam nữa, để đảm bảo các góc quay đa dạng, nhằm tối ưu hóa trải nghiệm cho người xem. Mỗi 1 trận đấu có thể có từ 8 cho đến 30 camera khác nhau tùy vào độ hot của trận đấu đó. Tuy nhiên tất cả những tiện ích này chỉ có ở các trận đấu thuộc các giải đấu hạng cao (premier league, bundesliga, …) mà thôi. Còn ở những giải đấu hạng thấp hơn, những giải đấu bán chuyên hay nghiệp dư thì sẽ không được như vậy. Mỗi 1 trận đấu thường sẽ chỉ có 1 camera được lắp ở giữa sân để bao quát toàn bộ sân bóng mà thôi (ví dụ như demo trong video). Từ đó phát sinh ra 1 vấn đề, nếu chiếu 1 trận bóng lên tivi mà từ đầu đến cuối chỉ có đúng 1 góc nhìn cố định như vậy thì chắc chắn là sẽ chẳng có ai muốn xem cả. Và đó là lúc mà giải pháp AI của bọn mình phát huy tác dụng. Giải pháp của bọn mình là sự kết hợp của nhiều mô hình AI khác nhau, nhằm mục tiêu phát hiện khu vực quan trọng trên sân ở mỗi 1 khung hình, và từ đó sẽ tập trung vào khu vực ấy. Hay nói cách khác, giải pháp của bọn mình giúp cho những trận thể thao được ghi hình bằng 1 camera nhưng lại đem lại trải nghiệm cho người xem như thể trận ấy được ghi hình bởi nhiều camera khác nhau
- Sport analytics: Giải pháp này thì dành cho các câu lạc bộ bán chuyên, nghiệp dư cũng như các trường đại học. Vẫn với đầu vào là những hình ảnh thu được từ 1 camera, các mô hình AI của bọn mình sẽ theo dõi và đánh giá performance của từng cầu thủ, cũng như của mỗi đội, ví dụ như là: Mỗi cầu thủ chạy bao nhiêu km, tốc độ khi bứt tốc của mỗi cầu thủ, số lần tắc bóng thành công của mỗi cầu thủ, thời gian kiểm soát bóng trung bình của mỗi đội hay Số lần dứt điểm trúng đích của mỗi đội. Những đánh giá này giúp cho các huấn luyện viên có thể theo dõi và đánh giá chính xác từng cầu thủ của đội nhà, từ đó có những giáo án phù hợp giúp họ duy trì, cải thiện performance của mình
2 giải pháp của bọn mình về cơ bản thì là như vậy. Với mỗi giải pháp, các mô hình của bọn mình sẽ cần được huấn luyện với dữ liệu khác nhau. 1 ví dụ dễ hiểu nhất, đó là với giải pháp thứ nhất, sport broadcasting, quả bóng là đối tượng cần được quan tâm hơn, do trong hầu hết các tình huống, chúng ta đều muốn chiếu cho khán giả vị trí trên sân mà quả bóng đang ở đó. Với giải pháp thứ 2, đối tượng mà bọn mình tập trung vào lại là cầu thủ. Tùy thuộc vào việc đang chuẩn bị data cho giải pháp nào, đối tượng ưu tiên là gì mà bọn mình là có cách chọn và xử lý data khác nhau. Mình sẽ không có đi quá sâu vào phần này mà sẽ đề cập chi tiết hơn trong 1 video khác.
Nhìn chung, với vai trò là 1 kỹ sư AI, 1 trong số các nhiệm vụ của mình là quản lý nguồn dữ liệu thô, chính là những video thu được từ các camera, chọn ra những phân đoạn con trong 1 vài các video để team data annotation của công ty mình đánh nhãn dữ liệu. Sau đó thì dữ liệu, mà cụ thể ở đây là ảnh đã được đánh nhãn sẽ được sử dụng để huấn luyện các mô hình khác nhau. Nói về đánh nhãn dữ liệu thì có rất nhiều tool giúp quản lý cũng như đánh nhãn trở nên dễ dàng hơn, và 1 trong số các công cụ phổ biến nhất là CVAT, và đây cũng là công cụ công ty mình đang dùng (Hướng dẫn sử dụng cvat các bạn có thể xem ở đoạn 06:59 trong video)
Chọn và huấn luyện mô hình
Sau khi đã có dữ liệu phù hợp rồi, công việc tiếp theo của mình là chọn và huấn luyện mô hình. Vì sao ở đây mình lại dùng từ chọn mà không phải là xây dựng mô hình? Câu trả lời là vì giờ ít ai phải xây dựng mô hình từ đầu, trừ phi là các bạn đang làm việc trong các trung tâm nghiên cứu hoặc các trường đại học. Khác với cách đây 10 năm, khi AI vẫn chưa phát triển như bây giờ, thời đó thì số lượng các mô hình AI dành cho các bài toán khác nhau là rất hạn chế, và số lượng được open-source thì lại càng ít hơn. Tuy nhiên ngày nay thì số lượng mô hình được cho ra mắt là rất nhiều, số lượng các bài toán, các vấn đề mà các mô hình AI giải quyết được cũng đa dạng hơn, và đặc biệt là có rất nhiều mô hình được open-source với chất lượng rất tốt, do đó việc tự ngồi xây dựng lại 1 mô hình nào đó là việc không còn cần thiết nữa. Thay vào đó, công việc của 1 AI engineer giờ đây sẽ là chọn xem những mô hình AI nào là phù hợp với mục đích sử dụng
Đây lại là 1 điểm khác biệt nữa giữa môi trường học thuật trên các trường đại học và môi trường làm việc thực tế. Nếu các bạn đã và đang theo đuổi các chuyên ngành có liên quan đến AI trong môi trường đại học, các bạn sẽ đều biết rằng yếu tố quan trọng nhất để đánh giá 1 mô hình AI là độ chính xác của nó. Ví dụ các bạn xây dựng mô hình nhận dạng biển số xe, thì mô hình của các bạn phải nhận diện biển số càng chính xác thì càng tốt. Hay nếu các bạn xây dựng mô hình phát hiện email spam, thì độ chính xác của mô hình cũng là ưu tiên hàng đầu.
Tuy nhiên khi các bạn đi làm, độ chính xác nhiều khi không phải ưu tiên hàng đầu. Việc mô hình của các bạn có đủ nhỏ, đủ nhẹ, chạy đủ nhanh để có thể triển khai trong thực tế được hay không nhiều khi quan trọng hơn độ chính xác của mô hình đó. Và điều này cũng đúng trong trường hợp của bọn mình. Thứ mà bọn mình cung cấp và triển khai cho khách hàng không phải những chiếc PC trang bị card đồ họa mạnh mẽ hay những server với sức tính toán khủng, mà là những chiếc camera được tích hợp với các mô hình AI chạy trên phần cứng hạn chế. Do đó cái mà bọn mình cần phải đạt được, đó là làm sao các mô hình của bọn mình đủ nhỏ đủ nhẹ để có thể chạy đồng thời trên cùng 1 chiếc camera, và đảm bảo được yêu cầu về thời gian thực. Điều này rất quan trọng, vì khi 1 trận đấu diễn ra, khán giả ngồi trước tivi muốn mọi tình huống trên sân diễn ra như thế nào thì họ cũng phải được thấy ngay lập tức, chứ không phải 1 tình huống diễn ra vài phút rồi thì họ mới được biết. Tất nhiên yếu tố độ chính xác cũng phải được đảm bảo ở 1 mức độ nhất định, tuy nhiên đó không phải là yếu tố quan trọng nhất.
Trở lại với trường hợp cụ thể ở công ty mình, bọn mình triển khai các dòng camera khác nhau, với sức mạnh phần cứng khác nhau cho các môn thể thao khác nhau, và cho các khách hàng khác nhau, do đó bọn mình phải thường xuyên huấn luyện trên dưới 20 mô hình khác nhau đồng thời để phục vụ tất cả các khách hàng. Khách hàng của bọn mình thì rất đa dạng, và đến từ nhiều nơi khác nhau trên thế giới, trong đó có thể kể đến 1 vài cái tên tiêu biểu nhất như MLS – giải bóng đá nhà nghề mỹ, SK Telecom của Hàn quốc. Adidas hay câu lạc bộ Lazio Roma của Ý.
Các mô hình mà bọn mình phải huấn luyện thì cũng rất đa dạng, bao gồm:
- Object detection
- Image classification
- Object tracking
- 3D pose estimation
Do các trận đấu thể thao của khách hàng diễn ra khá thường xuyên dưới các điều kiện về thời tiết, sân bãi, môi trường khác nhau, dẫn đến việc là các mô hình của bọn mình sẽ chạy không quá tốt trong 1 vài tình huống cụ thể, do đó bọn mình thường xuyên phải cập nhật điều này, yêu cầu team annotation đánh nhãn thêm dữ liệu và tái huấn luyện mô hình để đảm bảo chất lượng
Triển khai mô hình
Đây là 1 bước nữa mà mình có thể khẳng định 90% các bạn sinh viên khi còn đang ngồi trên giảng đường đại học sẽ không có cơ hội được thực hành. Các mô hình AI sau khi được huấn luyện xong sẽ phải trải qua 1 bước tối ưu nữa trước khi được đem đi triển khai ở trong các thiết bị thực tế. Vì sao lại như vậy. Các mô hình AI thường được lập trình trên các thư viện về Deep Learning phổ biến như là Pytorch, Tensorflow hay Keras. Các thư viện này giúp các AI engineer dễ dàng trong việc xây dựng, huấn luyện và đánh giá mô hình, bất kể các bạn đang chạy trên phần cứng là gì. Tuy nhiên cái giá phải đánh đổi là các mô hình này chưa được tối ưu dành cho các phần cứng cụ thể. Nó cũng giống như việc các bạn nấu 1 món ăn. Lúc bạn đầu các bạn phải nấu làm sao để thực khách ai cũng có thể ăn được. Nhưng sau khi đã có 1 món ăn cơ bản như vậy rồi, để có thể khiến cho khách đến ăn thực sự yêu thích món ăn đó, các bạn sẽ phải có những sự điều chỉnh trong công thức với mỗi 1 nhóm khách hàng cụ thể, để giúp cho món ăn mà các bạn phục vụ sẽ phù hợp với khẩu vị của họ nhất, kiểu như người châu Á thì thích ăn mặn, trong khi người châu Âu lại thích có bơ sữa phục vụ kèm vậy. Đối với các mô hình AI cũng vậy, tùy thuộc xem phần cứng của các bạn là gì, thì mô hình của các bạn cũng cần được biến đổi tương ứng để tối ưu hóa hiệu suất của mô hình. Tối ưu hóa ở đây bao gồm:
- Tối thiểu hóa bộ nhớ cần sử dụng cho mô hình
- Tối đa hóa tốc độ xử lý
- Tối thiểu hóa mất mát về độ chính xác của mô hình
Yếu tố thứ 3 thì gần như là KHÔNG THỂ tránh khỏi. Các bạn muốn mô hình của mình nhỏ đi, chiếm ít tài nguyên hơn, chạy nhanh hơn, thì các bạn BẮT BUỘC phải hi sinh 1 chút sự chính xác của nó.
Bọn mình triển khai các camera với phần cứng được cung cấp bởi NVIDIA và Google, do đó bọn mình cũng phải convert các mô hình để tối ưu theo những cách khác nhau. Các mô hình chạy trên phần cứng của NVIDIA thì tối ưu với phần cứng của NVIDIA, và tương tự đối với Google. Đối với 1 kỹ sư AI như mình, mình có thể khẳng định phần này thì không hề dễ dàng 1 chút nào. Nếu có thời gian thì mình sẽ chia sẻ nhiều hơn trong 1 bài viết khác
Trao đổi với khách hàng
Bọn mình phải thường xuyên lắng nghe phản hồi từ khách hàng để đảm bảo giải pháp bọn mình cung cấp, hay nói cụ thể hơn là các mô hình AI của bọn mình đáp ứng được kì vọng của họ. Nhiều khi cùng 1 môn thể thao, cùng 1 gói giải pháp, nhưng các khách hàng khách nhau họ lại có kỳ vọng và độ ưu tiên khác nhau. Ví dụ cùng là gói giải pháp sport analytics, các câu lạc bộ ở Đức họ quan tâm nhiều đến các thông số kỹ thuật của từng cầu thủ, trong khi SK Telecom họ lại quan tâm đến các thống kê chung của team hơn. Do đó bọn mình cần phải có các điều chỉnh để phù hợp với yêu cầu của từng khách hàng. Những điều chỉnh này nhiều khi chỉ là thuần về mặt logic chứ không có liên quan gì đến AI.
Do đó lời khuyên của mình dành cho các bạn là khi còn đang ngồi trên giảng đường đại học, hãy cố gắng học chắc các môn cơ sở ngành, kiểu như là cấu trúc dữ liệu và giải thuật, hay OOP. Mấy môn này khô và khó, nhưng rất quan trọng.
AI suy cho cùng cũng là 1 nhánh của CNTT, trước khi là kỹ sư AI các bạn cần phải là 1 kỹ sư IT cái đã
Trên đây là 1 vài chia sẻ của cá nhân mình dựa trên những gì bản thân mình trải nghiệm. Nếu có thời gian mình sẽ làm 1 post khác đi vào chi tiết hơn việc AI được áp dụng trong thể thao như thế nào. Mình hi vọng những chia sẻ của mình ít nhiều có ích cho các bạn. Cảm ơn các bạn
Tác giả: Việt Nguyễn
Nguồn bài viết: https://www.facebook.com/groups/649228858868758