სანამ დავიწყებთ, მოდით ვისაუბროთ იმაზე, რასაც შევქმნით. თამაში შთაგონებულია Google-ის „Quick, Draw!“ თამაშით, სადაც მოცემულია სიტყვა და ნერვულ ქსელს 20 წამი აქვს იმისთვის, რომ გამოიცნოს, რას ხატავთ (ეს მეორდება 6-ჯერ). სინამდვილეში, ჩვენ გამოვიყენებთ მათ საწვრთნელ მონაცემებს ჩვენი საკუთარი ესკიზის ამოცნობის მოდელის მოსამზადებლად! განა არ გიყვართ ღია წყარო? 😍 ჩვენს ვერსიაში, თქვენ გექნებათ ერთი წუთი, რომ დახატოთ რაც შეიძლება მეტი ობიექტი, ერთ ჯერზე ერთი მინიშნებით. თუ მოდელი სწორად გამოიცნობს ნახატს, ეკრანი გასუფთავდება და მიიღებთ ახალ სიტყვას. გააგრძელეთ ეს მანამ, სანამ დრო ამოიწურება! რადგან თამაში ლოკალურად, თქვენს ბრაუზერში მუშაობს, სერვერის შეყოვნების შესახებ საერთოდ არ გვიწევს ფიქრი. მოდელს შეუძლია რეალურ დროში გააკეთოს პროგნოზები ხატვისას, წამში 60-ზე მეტი პროგნოზის სიჩქარით... 🤯 გასაოცარია! ეს გაკვეთილი დაყოფილია 3 ნაწილად: ჩვენ მოვამზადებთ ჩვენს მოდელს Google-ის „Quick, Draw!“ მონაცემთა ნაკრების ნაწილის გამოყენებით, რომელიც შეიცავს 5 მილიონზე მეტ ნახატს 345 კატეგორიაში. მოცემულია მონაცემთა ნაკრებიდან რამდენიმე ნიმუში: ჩვენ დავაკორექტირებთ apple/mobilevit-small-ს, რომელიც არის მსუბუქი და მობილურისთვის მოსახერხებელი Vision Transformer, გაწვრთნილი ImageNet-1k-ზე. მას აქვს მხოლოდ 5.6 მილიონი პარამეტრი (~20 მბ ფაილის ზომა), რაც იდეალური კანდიდატია ბრაუზერში გასაშვებად! მეტი ინფორმაციისთვის იხილეთ MobileViT-ის სტატია და მოდელის არქიტექტურა ქვემოთ. იმისათვის, რომ ბლოგ-პოსტი (შედარებით) მოკლე იყოს, ჩვენ მოვამზადეთ Colab ნოუთბუქი, რომელიც გიჩვენებთ ზუსტ ნაბიჯებს, რომლებიც გადავდგით apple/mobilevit-small-ის ჩვენს მონაცემთა ნაკრებზე დასაკორექტირებლად. ზოგადად, ეს გულისხმობს: „Quick, Draw!“ მონაცემთა ნაკრების ჩატვირთვას. მონაცემთა ნაკრების ტრანსფორმაციას MobileViTImageProcessor-ის გამოყენებით. ჩვენი კოლაციის ფუნქციისა და შეფასების მეტრიკის განსაზღვრას. წინასწარ გაწვრთნილი MobileVIT მოდელის ჩატვირთვას MobileViTForImageClassification.from_pretrained-ის გამოყენებით. მოდელის გაწვრთნას Trainer და TrainingArguments დამხმარე კლასების გამოყენებით. მოდელის შეფასებას 🤗 Evaluate-ის გამოყენებით. შენიშვნა: ჩვენი დაკორექტირებული მოდელის ნახვა შეგიძლიათ Hugging Face Hub-ზე. Transformers.js არის JavaScript ბიბლიოთეკა, რომელიც საშუალებას გაძლევთ გაუშვათ 🤗 Transformers პირდაპირ თქვენს ბრაუზერში (სერვერის საჭიროების გარეშე)! ის შექმნილია იმისთვის, რომ იყოს ფუნქციურად ექვივალენტური Python ბიბლიოთეკისთვის, რაც ნიშნავს, რომ შეგიძლიათ გაუშვათ იგივე წინასწარ გაწვრთნილი მოდელები ძალიან მსგავსი API-ის გამოყენებით. კულისებში, Transformers.js იყენებს ONNX Runtime-ს, ამიტომ ჩვენ გვჭირდება ჩვენი დაკორექტირებული PyTorch მოდელის ONNX-ში გადაყვანა. საბედნიეროდ, 🤗 Optimum ბიბლიოთეკა აადვილებს თქვენი დაკორექტირებული მოდელის ONNX-ში გადაყვანას! უმარტივესი (და რეკომენდებული გზა) არის: Transformers.js საცავის კლონირება და საჭირო დამოკიდებულებების დაყენება: კონვერტაციის სკრიპტის გაშვება (ის იყენებს Optimum-ს): სადაც არის იმ მოდელის სახელი, რომლის კონვერტაციაც გსურთ (მაგ. Xenova/quickdraw-mobilevit-small). დავიწყოთ მარტივი React აპლიკაციის შექმნა Vite-ის გამოყენებით: შემდეგ, შედით პროექტის დირექტორიაში და დააყენეთ საჭირო დამოკიდებულებები: ამის შემდეგ შეგიძლიათ გაუშვათ განვითარების სერვერი ბრძანებით: მანქანური სწავლების მოდელების გაშვება გამოთვლითად ინტენსიურია, ამიტომ მნიშვნელოვანია დასკვნის გაკეთება ცალკე თრეიდში. ამ გზით ჩვენ არ დავბლოკავთ მთავარ თრეიდს, რომელიც გამოიყენება UI-ის რენდერინგისთვის და თქვენს ხატვის ჟესტებზე რეაგირებისთვის 😉. Web Workers API ამას სუპერ მარტივს ხდის! შექმენით ახალი ფაილი (მაგალითად, worker.js) src დირექტორიაში და დაამატეთ შემდეგი კოდი: ახლა შეგვიძლია გამოვიყენოთ ეს „ვორკერი“ ჩვენს App.jsx ფაილში, App კომპონენტში შემდეგი კოდის დამატებით: შეგიძლიათ შეამოწმოთ, რომ ყველაფერი მუშაობს, განვითარების სერვერის გაშვებით (npm run dev), ლოკალურ ვებსაიტზე გადასვლით (ჩვეულებრივ http://localhost:5173/) და ბრაუზერის კონსოლის გახსნით. კონსოლში უნდა ნახოთ მოდელის გამოსავალი. 🥳 თუმცა ზემოაღნიშნული კოდი საბოლოო პროდუქტის მხოლოდ მცირე ნაწილია, ის გვიჩვენებს, თუ რამდენად მარტივია მანქანური სწავლების მხარე! დანარჩენი მხოლოდ ესთეტიკა და თამაშის ლოგიკის დამატებაა. ამ სექციაში მოკლედ განვიხილავ თამაშის დიზაინის პროცესს. შეგახსენებთ, პროექტის სრული საწყისი კოდი შეგიძლიათ იხილოთ GitHub-ზე, ამიტომ დეტალურად არ შევჩერდები თავად კოდზე. ბრაუზერში დასკვნის გაკეთების ერთ-ერთი მთავარი უპირატესობა ის არის, რომ შეგვიძლია პროგნოზები გავაკეთოთ რეალურ დროში (წამში 60-ჯერ მეტად). ორიგინალურ „Quick, Draw!“ თამაშში, მოდელი ახალ პროგნოზს მხოლოდ რამდენიმე წამში ერთხელ აკეთებს. ჩვენ შეგვეძლო იგივე გაგვეკეთებინა ჩვენს თამაშში, მაგრამ მაშინ ვერ გამოვიყენებდით მის რეალურ დროში შესრულების შესაძლებლობებს! ამიტომ, გადავწყვიტე თამაშის მთავარი ციკლის გადაკეთება: ორიგინალური მონაცემთა ნაკრები შეიცავს 345 სხვადასხვა კლასს, და რადგან ჩვენი მოდელი შედარებით მცირეა (~20მბ), ის ზოგჯერ ვერ ახერხებს ზოგიერთი კლასის სწორად გამოცნობას. ამ პრობლემის გადასაჭრელად, ჩვენ ამოვიღეთ რამდენიმე სიტყვა. ფილტრაციის შემდეგ, მაინც დაგვრჩა 300-ზე მეტი სხვადასხვა კლასი! ღია წყაროს განვითარების სულისკვეთებით, გადავწყვიტე Hugging Chat-ისთვის მეკითხა თამაშის სახელების იდეები... და რა თქმა უნდა, არ გამიცრუა მოლოდინი! მომეწონა „Doodle Dash“-ის (შემოთავაზება #4) ალიტერაცია, ამიტომ გადავწყვიტე ეს სახელი ამერჩია. მადლობა Hugging Chat! 🤗 იმედი მაქვს, მოგეწონათ ჩემთან ერთად ამ თამაშის შექმნა!