Buat ML di iOS



Kecerdasan buatan semakin dekat setiap tahun, hanya kemarin itu tersedia hanya untuk sejumlah orang. Hari ini, kita dapat membuat model pembelajaran mesin sendiri dan menggunakannya dalam proyek-proyek kita. Pada artikel ini, kami akan memperkenalkan alat Buat ML dan mencoba untuk melatih model untuk mengklasifikasikan gambar.

Tetapi sebelum Anda mulai, sedikit sejarah dan penjelasan. Pada konferensi tahunan untuk pengembang WWDC2018, Apple memperkenalkan alat untuk bekerja dengan pembelajaran mesin Create ML. Model yang dilatih dalam Create ML adalah hasil dari penerapan algoritma pembelajaran mesin untuk satu set data pelatihan. Model tidak memakan banyak ruang (sekitar 3Mb), sehingga dapat disimpan dalam proyek. Awalnya, diusulkan untuk melatih model menggunakan Playgrounds dalam Xcode 10 dan mendukung pekerjaan dengan gambar, teks, dan tabel. Saat meluncurkan taman bermain proyek, perlu mengimpor perpustakaan CreateML dan menjalankan MLImageClassifierBuilder (jika kami melatih model untuk mengklasifikasikan gambar).

import CreateMLUI

let builder = MLImageClassifierBuilder()
builder.showInLineView()

Pada tahun 2019, Apple memperkenalkan alat yang sama sekali baru untuk bekerja dengan model pembelajaran mesin, memisahkannya dari Playgrounds. Menjadi mungkin untuk melatih model tanpa satu baris kode. Daftar tipe data telah diisi ulang dengan suara dan aktivitas. Secara total, 5 tipe data dan 9 model templat disajikan. Mari kita lihat setiap tipe data dan model apa yang bisa kita dapatkan sebagai hasilnya.

Gambar-gambar


gambar

Saat berlatih menggunakan gambar, tersedia dua templat - Image Classifier (penglasifikasi gambar) dan Object Detector (pendeteksi objek).

Image Classifier digunakan untuk mengklasifikasikan gambar berdasarkan isinya. Setelah melatih model, kita dapat mengidentifikasi satu objek pada gambar dan mengaitkannya dengan beberapa jenis. Misalnya, untuk mengidentifikasi hewan dalam gambar dan bahkan membedakan bunga mana yang digambarkan dalam foto. Di Buat ML, templat Penggolong Gambar menggunakan pelatihan transfer . Pelatihan transfer adalah kemampuan untuk menggabungkan model pra-terlatih dengan data pengguna, yang memungkinkan Anda untuk melatih model pada sejumlah kecil gambar.

Object Detector adalah model pembelajaran yang mendalam. Memungkinkan Anda mengidentifikasi beberapa objek dalam gambar, seperti orang, bangunan, mobil. Dan semua ini dalam satu gambar. Juga harus ditambahkan bahwa ketika melatih model Object Detector, komputer GPU digunakan.

Kedengarannya


gambar

Saat bekerja dengan suara, hanya satu templat yang tersedia untuk membuat model - Sound Classifier (pengelompokan suara). Sound Classifier adalah templat baru dan memungkinkan Anda untuk menentukan suara paling dominan dalam aliran audio. Misalnya, Anda dapat menentukan instrumen mana yang terdengar dalam audio. Sound Classifier, seperti Image Classifier, menggunakan pelatihan transfer.

Aktivitas


gambar
Aktivitas diwakili oleh hanya satu templat - Activity Classifier. Activity Classifier adalah templat baru dalam Create ML dan digunakan untuk mengklasifikasikan data gerak dari accelerometer dan giroskop.

Model semacam itu adalah model pembelajaran yang mendalam dan dilatih menggunakan GPU komputer.

Teks


gambar

Teks diwakili oleh dua templat: Text Classifier (pengelompokan teks) dan Word Tagger (penanda kata).

Text Classifier digunakan untuk mengidentifikasi kalimat, paragraf, dan bahkan seluruh artikel berdasarkan kontennya. Tagger Kata digunakan untuk menandai kata-kata atau mengenali nama dalam teks.

Tabel


gambar

Tabel diwakili oleh tiga templat: Tabular Regressor (table regressor), Tabular Classifier (table classifier) ​​dan Recommender (recommender).

Tabular Regressor adalah model yang dapat memprediksi nilai numerik berdasarkan beberapa data. Misalnya, Anda dapat melatih model yang akan memprediksi cuaca.

Tabular Classifier mengklasifikasikan objek berdasarkan fitur-fiturnya. Misalnya, Anda dapat melatih model untuk menentukan ukuran pakaian di toko online berdasarkan berbagai parameter pengguna. Model bekerja dengan tipe-tipe seperti integer, double, string, dan long jika targetnya adalah nilai diskrit.

Recommender memungkinkan Anda untuk merekomendasikan konten berdasarkan perilaku pengguna, dan semua perhitungan dilakukan langsung di perangkat.

Sekarang kita telah terbiasa dengan semua templat yang tersedia, kita dapat mulai membuat model pembelajaran mesin pertama kami. Mari kita mulai dengan Image Classifier.

Penggolong gambar


Sudahkah Anda menonton seri HBO Silicon Valley? Dalam salah satu seri musim keempat, mereka menunjukkan aplikasi yang mengenali "hot dog" dan "bukan hot dog" dalam gambar. Menggunakan Image Classifier, Anda dapat membuat analog dari aplikasi ini. Tetapi pertama-tama Anda perlu menyiapkan data untuk melatih model. Arsipkan dengan gambar di sini .

Beberapa persyaratan untuk melatih model Image Classifier. Gambar tidak boleh kurang dari 299 kali 299 piksel. Peralatan pelatihan harus mengandung setidaknya 10 gambar, tetapi semakin banyak semakin baik. Sekarang kita tahu bahwa saat melatih Image Classifier, pelatihan transfer digunakan, yang memungkinkan Anda untuk melatih model pada sejumlah kecil gambar. Jumlah gambar untuk setiap set harus sama, jika tidak akan ada pergeseran menuju salah satu kategori. Sekitar 80% dari gambar digunakan untuk melatih model, dan 20% sisanya untuk pengujian. Juga, gambar tidak boleh diulang, yaitu, di folder dengan gambar untuk pelatihan, tidak boleh ada gambar yang akan digunakan lebih lanjut untuk pengujian. Nama folder untuk pelatihan akan digunakan sebagai pengidentifikasi untuk kelas masing-masing,saat menggunakan model. Contoh saya menggunakan nama HotDog atau NotHotDog. Nama-nama gambar itu sendiri tidak memainkan peran apa pun, mereka dapat dipanggil sesuka Anda. Saya menunjuk mereka dengan nomor seri.

Setelah data kami siap, kami dapat mulai melatih model. Untuk bekerja dengan Buat ML, kita perlu Xcode 11 atau lebih tinggi. Saya akan menggunakan Xcode 11.3.1. Untuk menjalankan alat Buat ML, Anda harus membuka Xcode -> Buka Alat Pengembang -> Buat ML. Sebuah jendela akan muncul di mana Anda dapat memilih yang sudah ada atau membuat proyek baru. Pilih Dokumen Baru. Selanjutnya, Anda perlu memilih templat, dalam kasus kami kami akan menggunakan Image Classifier. Beri nama untuk proyek kami, klik Next dan pilih tempat di mana proyek akan disimpan. Lingkungan kerja terbuka untuk bekerja dengan model.

gambar

Seperti yang dapat kita lihat, ini adalah proyek yang sepenuhnya terpisah di mana Anda dapat membuat dan melatih beberapa model. Nama proyek (Proyek) ditampilkan di inspektur di sebelah kiri, mengkliknya menampilkan informasi tentang proyek dan memungkinkan Anda untuk mengeditnya. Lebih jauh di bawah, Sumber Model berisi semua model yang digunakan dalam proyek kami. Sekarang mari kita lihat bagian Input Data di jendela alat utama.

Data Pelatihan - di sini Anda perlu menambahkan gambar untuk model pelatihan. Data Validasi - di sini Anda dapat menambahkan satu set gambar untuk menguji pelatihan model (dalam kasus saya, saya meninggalkan Otomatis). Menguji Data - di sini Anda perlu menambahkan gambar untuk menguji model yang tidak terlibat dalam pelatihan model.

Di bagian Parameter, Anda dapat menentukan jumlah iterasi maksimum yang dilakukan pada satu gambar selama pelatihan model. Dan di bagian Augmentations, Anda dapat memilih efek yang ditumpangkan pada gambar.

Sekarang setelah kita mengenal Create ML, kita dapat mulai melatih model pertama kita. Kami cukup menyeret folder Data Pelatihan (nama dapat berupa apa saja) ke dalam tab Data Pelatihan. Sekarang klik Train. Proses pembelajaran dimulai.

gambar

Jadi, saya butuh sekitar 27 detik untuk berlatih, dan modelnya hampir siap. Setelah pelatihan, Anda dapat mengevaluasi seberapa baik model mengklasifikasikan gambar dari set Data Pelatihan. Karena model dilatih dalam gambar-gambar ini, itu mengklasifikasikannya dengan baik. Dalam kasus saya, model mengidentifikasi semua gambar dari set pelatihan dan 97% gambar dari set tes. Waktu pengujian telah tiba.

gambar

Buka tab Pengujian. Seperti halnya data untuk melatih model, cukup seret folder Data Pengujian ke jendela Data Pengujian. Bahkan, kita bisa mengatur folder dengan gambar untuk pengujian sebelum memulai pelatihan. Tetapi untuk linearitas proses, kami akan melakukannya secara berbeda. Klik Model Uji. Menurut hasil tes, model diatasi oleh 98%.

gambar

Dengan membuka Output, Anda dapat memverifikasi kinerja model tanpa menambahkannya ke proyek Anda. Untuk melakukan ini, tambahkan gambar hot dog dan bukan hot dog dan periksa hasilnya. Saya menambahkan gambar salad dan hot dog dan, dalam kedua kasus, model itu baik-baik saja. Tentu saja, proyek yang serius mungkin memerlukan lebih banyak data untuk pelatihan, lebih banyak iterasi, dan sebagainya. Tetapi untuk proyek uji ini sudah cukup. Untuk menyimpan model, cukup transfer dari Output ke folder yang diinginkan.

gambar

Sekarang saya sarankan mencoba mengintegrasikan model ke dalam proyek uji, yang tersedia di sini. Model telah ditambahkan ke proyek, tetapi Anda dapat menggunakan penggolong lain. Ini tidak akan merusak aplikasi, karena model dapat dipertukarkan dan Anda dapat menggunakan beberapa model dalam proyek. Transfer saja model yang sudah jadi ke proyek.

gambar

Di bagian Model Pembelajaran Mesin, Anda dapat menemukan informasi tentang model tersebut. Informasi ini dapat ditentukan dalam proyek Buat alat ML. Harap dicatat bahwa model yang kami latih hanya membutuhkan 17 KB. Selanjutnya, di bagian Model Class, kami diperingatkan bahwa kelas Swift akan dibuat dengan nama MyImageClassifier, saya sangat tidak menyarankan menyentuh apa pun di sana, karena ini dapat mempengaruhi aplikasi. Bagian Prediksi menjelaskan parameter input dan apa yang kita dapatkan sebagai hasilnya. Jika Anda menggunakan model yang tidak Anda ajarkan, di bagian Eksperimen Anda dapat memeriksa model, cukup transfer gambar.

gambar

Pergi ke kelas ImageClassifierService, di sini Anda dapat melihat bagaimana model diinisialisasi.

private func makeImageClassifierModel() -> VNCoreMLModel? {
  return try? VNCoreMLModel(for: MyImageClassifier().model)
}

Cukup sederhana, bukan? Selanjutnya, Anda perlu membuat, memproses, dan mengeksekusi permintaan klasifikasi.

private func makeClassifierRequest(for model: VNCoreMLModel, ciImage: CIImage) {
    let request = VNCoreMLRequest(model: model) { [weak self] request, error in
      self?.handleClassifierResults(request.results)
    }
    
    let handler = VNImageRequestHandler(ciImage: ciImage)
    DispatchQueue.global(qos: .userInteractive).async {
      do {
        try handler.perform([request])
      } catch {
        self.onDidUpdateState?(.requestFailed)
      }
    }
  }

Tetap hanya memproses hasilnya.

  private func handleClassifierResults(_ results: [Any]?) {
    guard let results = results as? [VNClassificationObservation],
      let firstResult = results.first else {
      onDidUpdateState?(.requestFailed)
      return
    }
    
    DispatchQueue.main.async { [weak self] in
      let confidence = (firstResult.confidence * 100).rounded()
      let resultModel = ClassifierResultModel(identifier: firstResult.identifier, confidence: Int(confidence))
      self?.onDidUpdateState?(.receiveResult(resultModel: resultModel))
    }
  }

Sekarang kita dapat menjalankan aplikasi dan memeriksa keakuratan model.

gambar

Seperti yang bisa kita lihat, model berjalan dengan baik. Sekarang mari kita coba tunjukkan model kita gambar bukan hot dog dan lihat bagaimana dia mengatasinya.

gambar

Seperti yang bisa kita lihat, model mendefinisikan gambar burger sebagai "bukan hot dog". Saya mengusulkan untuk sedikit membingungkan model dan menambahkan gambar anjing di kostum hot dog.

gambar

Dan di sini, model terlatih kami melakukan pekerjaan yang sangat baik.

Kesimpulan


Dalam artikel singkat ini, kami memperkenalkan alat Buat ML. Mempelajari jenis kerjanya dan pola apa yang digunakan alat. Mereka juga mencoba melatih model mereka. Bagian tersulit dalam menciptakan model pembelajaran mesin adalah menemukan dan menyiapkan data untuk pembelajaran. Anda tidak dapat melatih model, tetapi gunakan model yang sudah terlatih. Misalnya, sudah ada model siap pakai yang berfungsi dengan gambar dan teks. Ada banyak model khusus di github.
Gambar untuk model pelatihan juga mudah ditemukan, misalnya arsip dari Google . Tetapi jika Anda perlu melatih model untuk tugas-tugas yang ditargetkan sempit, maka Anda harus mengumpulkan gambar dan membuat arsip Anda.

All Articles