გამოსახულებების ტოკენიზაცია და ViT მოდელების დახვეწა გამოსახულების კლასიფიკაციისთვის
ეს სტატია განიხილავს, თუ როგორ ხდება გამოსახულებების ტოკენიზაცია ტრანსფორმატორის მოდელებისთვის, ნატურალური ენის დამუშავების (NLP) ამოცანების ანალოგიით. დეტალურად არის აღწერილი 🤗 datasets-ისა და 🤗 transformers-ის გამოყენებით ViT (Vision Transformer) მოდელის წინასწარი წვრთნა და დახვეწა გამოსახულების კლასიფიკაციის ამოცანებისთვის. მოცემულია ინსტრუქციები მონაცემთა ჩამოტვირთვის, დამუშავების, გამოსახულების ტრანსფორმაციებისა და წვრთნის კონვეიერის დაყენების შესახებ, მათ შორის ისეთი კომპონენტების, როგორიც
ეს ნაშრომი იკვლევს, თუ როგორ შეიძლება გამოსახულებების ტოკენიზაცია, ზუსტად ისევე, როგორც წინადადებების ტოკენიზაცია, რათა ისინი ტრანსფორმატორის მოდელებს გადაეცეს წვრთნისთვის. ეს საკმაოდ მარტივი კონცეფციაა. აღმოჩნდა, რომ ზემოაღნიშნულის შესრულების შემდეგ, შესაძლებელია ტრანსფორმატორების წინასწარი წვრთნა და დახვეწა, ისევე როგორც ნატურალური ენის დამუშავების (NLP) ამოცანებთან ხართ მიჩვეული. ეს საკმაოდ ეფექტური მეთოდია. ამ ბლოგპოსტში დეტალურად განვიხილავთ, თუ როგორ გამოვიყენოთ 🤗 datasets გამოსახულების კლასიფიკაციის მონაცემთა ნაკრებების ჩამოსატვირთად და დასამუშავებლად, შემდეგ კი მათ გამოსაყენებლად წინასწარ გაწვრთნილი ViT მოდელის დასახვეწად 🤗 transformers-ის მეშვეობით. დასაწყისისთვის, მოდით, ჯერ ეს ორივე პაკეტი დავაყენოთ.
დავიწყოთ გამოსახულების კლასიფიკაციის მცირე მონაცემთა ნაკრების ჩატვირთვით და მისი სტრუქტურის განხილვით. ჩვენ გამოვიყენებთ "beans" (ლობიოს) მონაცემთა ნაკრებს, რომელიც წარმოადგენს ჯანსაღი და დაავადებული ლობიოს ფოთლების სურათების კოლექციას. მოდით, გადავხედოთ 400-ე მაგალითს "train" გაყოფილი ნაწილიდან "beans" მონაცემთა ნაკრებიდან. შეამჩნევთ, რომ მონაცემთა ნაკრების თითოეულ მაგალითს აქვს 3 მახასიათებელი. მოდით, გადავხედოთ სურათს. ეს ნამდვილად ფოთოლია! მაგრამ როგორი? ვინაიდან ამ მონაცემთა ნაკრების "labels" მახასიათებელი არის datasets.features.ClassLabel, შეგვიძლია მისი გამოყენება ამ მაგალითის ეტიკეტის ID-ის შესაბამისი სახელის მოსაძებნად. ჯერ მივწვდეთ "labels"-ის მახასიათებლის განსაზღვრებას. ახლა კი, დავბეჭდოთ ჩვენი მაგალითის კლასის ეტიკეტი. ამის გაკეთება შეგიძლიათ ClassLabel-ის int2str ფუნქციის გამოყენებით, რომელიც, როგორც სახელი გულისხმობს, საშუალებას გაძლევთ გადასცეთ კლასის მთელი რიცხვითი წარმოდგენა სტრიქონული ეტიკეტის მოსაძებნად. აღმოჩნდა, რომ ზემოთ ნაჩვენები ფოთოლი დაინფიცირებულია "ლობიოს ჟანგით" (Bean Rust), რაც ლობიოს მცენარეების სერიოზული დაავადებაა. მოდით, დავწეროთ ფუნქცია, რომელიც აჩვენებს თითოეული კლასის მაგალითების ცხრილს, რათა უკეთესი წარმოდგენა შევიქმნათ იმაზე, თუ რასთან გვაქვს საქმე. რაც მე ვხედავ, ახლა ჩვენ ვიცით, როგორ გამოიყურება ჩვენი გამოსახულებები და უკეთ გვესმის ის პრობლემა, რომლის გადაჭრასაც ვცდილობთ. მოდით, ვნახოთ, როგორ შეგვიძლია მოვამზადოთ ეს გამოსახულებები ჩვენი მოდელისთვის!
ViT მოდელების წვრთნისას, მათში შეყვანილ გამოსახულებებზე გამოიყენება სპეციფიკური ტრანსფორმაციები. არასწორი ტრანსფორმაციების გამოყენების შემთხვევაში, მოდელი ვერ გაიგებს, რას ხედავს! იმისათვის, რომ სწორი ტრანსფორმაციები გამოვიყენოთ, ჩვენ გამოვიყენებთ ViTImageProcessor-ს, რომელიც ინიციალიზებულია იმ კონფიგურაციით, რომელიც შეინახეს იმ წინასწარ გაწვრთნილ მოდელთან ერთად, რომლის გამოყენებასაც ვგეგმავთ. ჩვენს შემთხვევაში, გამოვიყენებთ google/vit-base-patch16-224-in21k მოდელს, ასე რომ, მოდით, ჩავტვირთოთ მისი გამოსახულების პროცესორი Hugging Face Hub-იდან. გამოსახულების პროცესორის კონფიგურაციის ნახვა შეგიძლიათ მისი დაბეჭდვით. გამოსახულების დასამუშავებლად, უბრალოდ გადაეცით ის გამოსახულების პროცესორის "call" ფუნქციას. ეს დააბრუნებს ლექსიკონს, რომელიც შეიცავს პიქსელების მნიშვნელობებს, რაც მოდელისთვის გადასაცემი რიცხვითი წარმოდგენაა. ნაგულისხმევად მიიღებთ NumPy მასივს, მაგრამ თუ დაამატებთ return_tensors='pt' არგუმენტს, სანაცვლოდ მიიღებთ torch ტენსორებს. თქვენ მიიღებთ რაღაც მსგავსს... ...სადაც ტენსორის ფორმაა (1, 3, 224, 224).
ახლა, როდესაც იცით, როგორ წაიკითხოთ გამოსახულებები და გადააქციოთ ისინი შეყვანის მონაცემებად, მოდით, დავწეროთ ფუნქცია, რომელიც ამ ორ რამეს გააერთიანებს მონაცემთა ნაკრებიდან ერთი მაგალითის დასამუშავებლად. მიუხედავად იმისა, რომ შეგიძლიათ გამოიყენოთ ds.map და ეს ერთდროულად გამოიყენოთ ყველა მაგალითზე, ეს შეიძლება იყოს ძალიან ნელი, განსაკუთრებით თუ იყენებთ დიდ მონაცემთა ნაკრებს. ამის ნაცვლად, შეგიძლიათ გამოიყენოთ ტრანსფორმაცია მონაცემთა ნაკრებზე. ტრანსფორმაციები გამოიყენება მხოლოდ მაგალითებზე მათი ინდექსირებისას. თუმცა, ჯერ უნდა განაახლოთ ბოლო ფუნქცია, რათა მიიღოს მონაცემთა პარტია (batch), რადგან სწორედ ამას მოელის ds.with_transform. შეგიძლიათ ეს პირდაპირ გამოიყენოთ მონაცემთა ნაკრებზე ds.with_transform(transform)-ის გამოყენებით. ახლა, ყოველთვის, როცა მონაცემთა ნაკრებიდან მაგალითს მიიღებთ, ტრანსფორმაცია გამოყენებული იქნება რეალურ დროში (როგორც ნიმუშებზე, ასევე ნაჭრებზე, როგორც ნაჩვენებია ქვემოთ). ამჯერად, მიღებული pixel_values ტენსორის ფორმა იქნება (2, 3, 224, 224). მონაცემები დამუშავებულია და მზად ხართ დაიწყოთ წვრთნის კონვეიერის დაყენება.
ეს ბლოგპოსტი იყენებს 🤗-ის Trainer-ს, მაგრამ ეს მოგვთხოვს რამდენიმე რამის გაკეთებას ჯერ: კოლაციის ფუნქციის განსაზღვრა. შეფასების მეტრიკის განსაზღვრა. წვრთნის დროს, მოდელი უნდა შეფასდეს მისი პროგნოზირების სიზუსტეზე. თქვენ შესაბამისად უნდა განსაზღვროთ compute_metrics ფუნქცია. წინასწარ გაწვრთნილი საკონტროლო წერტილის ჩატვირთვა. თქვენ უნდა ჩატვირთოთ წინასწარ გაწვრთნილი საკონტროლო წერტილი და სწორად დააკონფიგურიროთ იგი წვრთნისთვის. წვრთნის კონფიგურაციის განსაზღვრა. მოდელის დახვეწის შემდეგ, მას სწორად შეაფასებთ შეფასების მონაცემებზე და გადაამოწმებთ, რომ მან ნამდვილად ისწავლა გამოსახულებების სწორად კლასიფიკაცია. პარტიები შემოდის ლექსიკონების სიების სახით, ასე რომ, შეგიძლიათ უბრალოდ გახსნათ და დააწყოთ ისინი პარტიულ ტენსორებად. ვინაიდან collate_fn დააბრუნებს პარტიულ ლექსიკონს, შეგიძლიათ მოგვიანებით **გახსნათ შეყვანის მონაცემები მოდელში. ✨ evaluate-დან სიზუსტის მეტრიკის მარტივად გამოყენება შესაძლებელია პროგნოზების ეტიკეტებთან შესადარებლად. ქვემოთ, ხედავთ, როგორ გამოიყენოთ ის compute_metrics ფუნქციაში, რომელსაც გამოიყენებს Trainer. მოდით, ჩავტვირთოთ წინასწარ გაწვრთნილი მოდელი. ინიციალიზაციისას დავამატებთ num_labels-ს, რათა მოდელმა შექმნას კლასიფიკაციის თავი სწორი რაოდენობის ერთეულებით. ასევე ჩავრთავთ id2label და label2id შესაბამისობებს, რათა Hub-ის ვიჯეტში გვქონდეს ადამიანისთვის გასაგები ეტიკეტები (თუ აირჩევთ push_to_hub-ს). თითქმის მზად ვართ წვრთნისთვის! ბოლო
თეგები:
#ღრმა სწავლა
#მანქანური სწავლა
#hugging face
#vit
#ტრანსფორმატორები
#მონაცემთა დამუშავება
#გამოსახულების კლასიფიკაცია
წყარო: huggingface.co
AI-ით გადამუშავებული