ხელოვნური ინტელექტი: გამოსახულებების ტოკენიზაცია და ViT მოდელების წვრთნა
ეს სტატია განმარტავს, თუ როგორ ხდება გამოსახულებების ტოკენიზაცია წინადადებების მსგავსად, რაც მათ საშუალებას აძლევს, დამუშავდეს ტრანსფორმერული მოდელებით. დეტალურად არის აღწერილი 🤗 datasets-ის გამოყენებით მონაცემთა მომზადება, ViTImageProcessor-ის ინტეგრირება და წინასწარ გაწვრთნილი ViT მოდელების დაზუსტება. მიმოხილულია ტრენინგის კონფიგურაციის, შეფასების მეტრიკების განსაზღვრისა და ეფექტური წვრთნის კონვეიერის აგების პროცესები, რაც მნიშვნელოვან წინსვლას წარმოადგენს გამოსახულების კლასიფიკაციის ამოცანებშ
ამ ნაშრომში განხილულია, თუ როგორ არის შესაძლებელი გამოსახულებების ტოკენიზაცია, ისევე როგორც წინადადებების ტოკენიზაცია, რათა შემდგომში ისინი გადაეცეს ტრანსფორმერულ მოდელებს წვრთნისთვის. ეს საკმაოდ მარტივი კონცეფციაა... აღმოჩნდა, რომ ზემოაღნიშნულის განხორციელების შემდეგ, შესაძლებელია ტრანსფორმერების წინასწარი წვრთნა და დაზუსტება ისევე, როგორც ამას ბუნებრივი ენის დამუშავების (NLP) ამოცანების დროს აკეთებდით. ეს საკმაოდ შთამბეჭდავია.
ამ ბლოგპოსტში დეტალურად განვიხილავთ, თუ როგორ გამოვიყენოთ 🤗 datasets გამოსახულების კლასიფიკაციის მონაცემთა ნაკრებების ჩამოსატვირთად და დასამუშავებლად, შემდეგ კი როგორ გამოვიყენოთ ისინი წინასწარ გაწვრთნილი ViT მოდელის დასაზუსტებლად 🤗 transformers-ის საშუალებით. დასაწყებად, მოდით, ჯერ დავაყენოთ ეს ორი პაკეტი.
დავიწყოთ გამოსახულების კლასიფიკაციის მცირე მონაცემთა ნაკრების ჩატვირთვით და მისი სტრუქტურის განხილვით. ჩვენ გამოვიყენებთ „beans“ (ლობიოს) მონაცემთა ნაკრებს, რომელიც წარმოადგენს ჯანმრთელი და არაჯანსაღი ლობიოს ფოთლების სურათების კოლექციას. მოდით, გადავხედოთ 400-ე მაგალითს „beans“ მონაცემთა ნაკრების „train“ (სავარჯიშო) ნაწილიდან. შეამჩნევთ, რომ მონაცემთა ნაკრების თითოეულ მაგალითს აქვს 3 მახასიათებელი: ვნახოთ გამოსახულება. გამოსახულებაზე ნამდვილად ფოთოლია ასახული. მაგრამ როგორი სახეობის? ვინაიდან ამ მონაცემთა ნაკრების „labels“ (იარლიყების) მახასიათებელი არის `datasets.features.ClassLabel` ტიპის, შეგვიძლია მისი გამოყენებით მოვძებნოთ შესაბამისი სახელი ამ მაგალითის იარლიყის ID-სთვის. ჯერ მივწვდეთ „labels“-ის მახასიათებლის განსაზღვრებას. ახლა კი, მოდით, დავბეჭდოთ ჩვენი მაგალითის კლასის იარლიყი. ამის გაკეთება შეგიძლიათ `ClassLabel`-ის `int2str` ფუნქციის გამოყენებით, რომელიც, როგორც სახელი გულისხმობს, საშუალებას გაძლევთ გადასცეთ კლასის მთელი რიცხვითი წარმოდგენა, რათა მოძებნოთ სტრიქონული იარლიყი. აღმოჩნდა, რომ ნაჩვენები ფოთოლი ინფიცირებულია „ლობიოს ჟანგით“, რაც სერიოზული დაავადებაა ლობიოს მცენარეებში.
მოდით, დავწეროთ ფუნქცია, რომელიც გამოაჩენს თითოეული კლასის მაგალითების ბადეს, რათა უკეთ გაერკვეთ, რასთან გაქვთ საქმე. ამ მონაცემების საფუძველზე, ახლა უკეთ ვიცით, როგორ გამოიყურება ჩვენი გამოსახულებები და უკეთ გვესმის ის პრობლემა, რომლის გადაჭრასაც ვცდილობთ. ვნახოთ, როგორ შეგვიძლია მოვამზადოთ ეს გამოსახულებები ჩვენი მოდელისთვის! ViT მოდელების წვრთნისას, მათში შეყვანილ გამოსახულებებზე სპეციფიკური ტრანსფორმაციები გამოიყენება. თუ თქვენს გამოსახულებაზე არასწორ ტრანსფორმაციებს გამოიყენებთ, მოდელი ვერ გაიგებს, რას ხედავს! იმისათვის, რომ დარწმუნდეთ, რომ სწორ ტრანსფორმაციებს ვიყენებთ, ჩვენ გამოვიყენებთ `ViTImageProcessor`-ს, რომელიც ინიციალიზებულია კონფიგურაციით, რომელიც შენახული იყო იმ წინასწარ გაწვრთნილ მოდელთან ერთად, რომლის გამოყენებასაც ვგეგმავთ. ჩვენს შემთხვევაში, ჩვენ გამოვიყენებთ `google/vit-base-patch16-224-in21k` მოდელს, ასე რომ, მოდით, ჩავტვირთოთ მისი გამოსახულების პროცესორი Hugging Face Hub-დან. გამოსახულების პროცესორის კონფიგურაციის ნახვა შეგიძლიათ მისი დაბეჭდვით. გამოსახულების დასამუშავებლად, უბრალოდ გადასცეთ ის გამოსახულების პროცესორის `call` ფუნქციას. ეს დააბრუნებს ლექსიკონს, რომელიც შეიცავს პიქსელის მნიშვნელობებს – რიცხვით წარმოდგენას, რომელიც მოდელს უნდა გადაეცეს. ნაგულისხმევად მიიღებთ NumPy მასივს, მაგრამ თუ დაამატებთ `return_tensors='pt'` არგუმენტს, სანაცვლოდ მიიღებთ torch ტენზორებს. ეს უნდა მოგცეთ მსგავსი შედეგი... ...სადაც ტენზორის ფორმაა `(1, 3, 224, 224)`.
ახლა, როცა იცით, როგორ წაიკითხოთ გამოსახულებები და გადააქციოთ ისინი შეყვანად, მოდით, დავწეროთ ფუნქცია, რომელიც ამ ორ რამეს ერთად გააერთიანებს მონაცემთა ნაკრებიდან ერთი მაგალითის დასამუშავებლად. მიუხედავად იმისა, რომ შეგიძლიათ `ds.map` ფუნქცია გამოიძახოთ და ეს ერთდროულად ყველა მაგალითზე გამოიყენოთ, ეს შეიძლება იყოს ძალიან ნელი, განსაკუთრებით თუ დიდ მონაცემთა ნაკრებს იყენებთ. სანაცვლოდ, შეგიძლიათ გამოიყენოთ ტრანსფორმაცია მონაცემთა ნაკრებზე. ტრანსფორმაციები მაგალითებზე მხოლოდ მაშინ გამოიყენება, როდესაც მათ ინდექსირებთ. თუმცა, ჯერ უნდა განაახლოთ ბოლო ფუნქცია, რათა მიიღოს მონაცემთა პაკეტი (batch of data), რადგან სწორედ ამას მოელის `ds.with_transform`. შეგიძლიათ ეს პირდაპირ გამოიყენოთ მონაცემთა ნაკრებზე `ds.with_transform(transform)`-ის გამოყენებით. ახლა, ყოველ ჯერზე, როდესაც მონაცემთა ნაკრებიდან მაგალითს მიიღებთ, ტრანსფორმაცია რეალურ დროში იქნება გამოყენებული (როგორც ნიმუშებზე, ასევე ნაჭრებზე, როგორც ნაჩვენებია ქვემოთ). ამჯერად, მიღებული `pixel_values` ტენზორის ფორმა იქნება `(2, 3, 224, 224)`.
მონაცემები დამუშავებულია და მზად ხართ დაიწყოთ წვრთნის კონვეიერის (pipeline) მოწყობა. ეს ბლოგპოსტი იყენებს 🤗-ის Trainer-ს, მაგრამ ამას ჩვენგან რამდენიმე რამის გაკეთება დასჭირდება:
* კოლაციის ფუნქციის (collate function) განსაზღვრა.
* შეფასების მეტრიკის (evaluation metric) განსაზღვრა. წვრთნის დროს, მოდელი უნდა შეფასდეს მისი პროგნოზირების სიზუსტით. ამის შესაბამისად უნდა განსაზღვროთ `compute_metrics` ფუნქცია.
* წინასწარ გაწვრთნილი კონტროლური წერტილის (pretrained checkpoint) ჩატვირთვა. თქვენ უნდა ჩატვირთოთ წინასწარ გაწვრთნილი კონტროლური წერტილი და სწორად დააკონფიგურიროთ ის წვრთნისთვის.
* წვრთნის კონფიგურაციის განსაზღვრა.
მოდელის დაზუსტების შემდეგ, თქვენ სწორად შეაფასებთ მას შეფასების მონაცემებზე და დაადასტურებთ, რომ მან მართლაც ისწავლა გამოსახულებების სწორად კლასიფიკაცია. პაკეტები შემოდის ლექსიკონების სიების სახით, ასე რომ, შეგიძლიათ უბრალოდ გაშალოთ (unpack) და დააწყოთ (stack) ისინი პაკეტურ ტენზორებში. ვინაიდან `collate_fn` დააბრუნებს პაკეტურ ლექსიკონს, მოგვიანებით შეგიძლიათ მოდელის შეყვანები გაშალოთ. სიზუსტის მეტრიკის `evaluate`-დან მარტივად გამოყენება შესაძლებელია პროგნოზების იარლიყებთან შესადარებლად. ქვემოთ შეგიძლიათ ნახოთ, თუ როგორ გამოიყენოთ ის `compute_metrics` ფუნქციაში, რომელსაც Trainer გამოიყენებს.
მოდით, ჩავტვირთოთ წინასწარ გაწვრთნილი მოდელი. ინიციალიზაციისას დავამატებთ `num_labels`-ს, რათა მოდელმა შექმნას კლასიფიკაციის სათავე (classification head) ერთეულების სწორი რაოდენობით. ასევე ჩავრთავთ `id2label` და `label2id` დამაკავშირებელ სქემებს, რათა Hub-ის ვიჯეტში გვქონდეს ადამიანისთვის გასაგები იარლიყები (თუ აირჩევთ `push_to_hub`-ს). თითქმის მზად ვართ წვრთნისთვის!
თეგები:
#ხელოვნური ინტელექტი
#მანქანური სწავლება
#ტრანსფორმერები
#hugging face
#პითონი
#გამოსახულების კლასიფიკაცია
#vit მოდელები
წყარო: huggingface.co
AI-ით გადამუშავებული
მსგავსი სტატიები
ხელოვნური ინტელექტი
Anthropic-ის Claude-ის აღზევება Apple App Store-ის რეიტინგებში პენტაგონთან მოლაპარაკებების ფონზე
ხელოვნური ინტელექტი
ტრამპის ადმინისტრაცია Anthropic-ს სანქციებს უწესებს ხელოვნური ინტელექტის გამოყენებაზე უარის გამო: ექსპერტი ინდუსტრიის უსაფრთხოების ხარვეზებზე საუბრობს
ხელოვნური ინტელექტი