Kami telah mengembangkan Makroskop selama hampir satu dekade. Dan selama waktu ini, pendekatan yang sangat menyeluruh dan serius untuk penciptaan fungsi baru telah dikembangkan dalam pengembangan modul cerdas. Di satu sisi, ini sangat bagus. Niat serius mendekati produk berkualitas tinggi. Tetapi pada saat yang sama, ketelitian dapat membatasi kelambatan dan ketidakberoperasiaan proses.
Hanya beberapa tahun yang lalu, ketika kami menerima permintaan dari pengguna untuk mengembangkan sesuatu yang baru (tidak termasuk dalam rencana induk untuk pengembangan produk), kami memiliki perkiraan waktu yang lama, mengevaluasi keserbagunaan dan relevansi fungsi di antara berbagai pengguna. Dan seringkali mereka menolak atau mengevaluasi waktu implementasi sebagai sangat lama. Tapi begitu kami menerima permintaan untuk proyek besar. Dalam hal implementasi yang sukses dan cepat dari fungsi pengguna yang hilang, prospek dan skala implementasi Macroscop sangat baik. Dan kami mulai mencoba! Kami memiliki kerangka waktu yang ketat, pengguna yang responsif dan membantu, dan kebebasan penuh untuk bertindak.

Dan ... semuanya berhasil!
Kami membuat fitur baru dalam waktu singkat. Selain itu, dia akurat dan cepat. Semua orang puas: pengguna menerima modul intelektual yang didambakan, pengembang mendapat pengalaman keren, perusahaan - penjualan.
Praktik ini menandai awal dari
pendekatan baru untuk pengembangan fungsi cerdas di Macroscop: kami menjadi semakin mudah untuk bertemu dengan pengguna kami. Dan itu memberikan hasilnya.
Yang paling penting adalah mengidentifikasi kebutuhan nyata pengguna dan merumuskan tugas dengan jelas bersama dia. Ketika datang ke perkembangan cepat dari fungsi custom-made (kami akan memanggil mereka fungsi cepat di berikut ini), sangat penting untuk menentukan persyaratan: apa yang ingin dilihat pengguna pada akhirnya, apa yang harus difokuskan. Karena, secara kondisional, seseorang harus bekerja terlebih dahulu dengan pasti, yang lain untuk membuatnya terlihat keren. Ketika kita mengambil fungsi cepat, kita tidak berbicara tentang fakta bahwa pada akhirnya itu akan berfungsi dalam kondisi apa pun dengan akurasi 100%. Kami
berusaha untuk menguji ide itu sendiri dan mencoba untuk menciptakan sesuatu yang dapat bekerja dan diterima untuk digunakan pada satu objek tertentu. Dan hanya pada saat itu, jika berhasil, kami memperbaiki dan menghadirkan produk universal dengan kinerja yang baik.
Ketika tujuan dan prioritas jelas, kami melakukan pengembangan. Dalam waktu singkat, kami mengembangkan prototipe yang sudah dapat dievaluasi pengguna. Dan kami memberikannya untuk ujian. Jika apa yang kami lakukan berkorelasi dengan apa yang dibutuhkan pengguna, dan secara umum ia suka, dan metode yang kami gunakan dalam pengembangan belum habis dan memiliki prospek untuk meningkatkan fungsi, kami melangkah lebih jauh. Jika ternyata benar-benar salah dan sepenuhnya salah, kami menutup proyek. Dan karena ini terjadi pada tahap awal, kita hampir tidak kehilangan apa-apa.
Dengan pendekatan ini, pengembang dan pengguna harus
melangkah sejauh mungkin satu sama lain. Pengguna juga harus dimasukkan dalam proses: perlu hati-hati menguji prototipe pada kamera yang berbeda dan dalam kondisi yang berbeda, mencoba pengaturan yang berbeda dan menekan tombol yang berbeda, memberikan umpan balik lengkap: apa yang nyaman, apa yang tidak nyaman, apa yang tidak bekerja dengan cara mengevaluasi akurasi, berapa banyak server memuat, dll.
Awalnya, kami memenuhi kebutuhan satu pelanggan tertentu, tetapi bahkan sebelum mulai bekerja,
kami memperkirakan
seberapa universal fungsi ini dapat terjadi di masa depan, berapa banyak orang yang dapat membantu menyelesaikan masalah mereka. Dan di masa depan, kami mengadaptasi fungsi cepat sehingga bermanfaat dan dapat diterapkan dalam sistem video sebanyak mungkin.
Apakah Anda ingat bagaimana semuanya dimulai? .. (c)
Fungsi cepat pertama bagi kami adalah
modul penghitungan antrian . Secara umum, kami memilikinya sebelumnya, tetapi kondisi penerapannya terbatas: modul hanya berfungsi dalam satu proyeksi, ketika kamera tampak ketat dari atas ke bawah. Pernah kami didekati oleh pengguna yang perlu menghitung orang dalam antrian dalam kondisi yang berbeda secara fundamental - ketika kamera melihat antrian secara diagonal (langsung dan sedikit di atas).
dari perspektif ini, modul Macroscop dapat dihitung
dan dalam hal ini - dipelajariDia semua menyukai Macroscop, tetapi tidak memiliki fungsi yang disayangi. Proyek ini sangat menjanjikan, dan pengguna siap
bekerja sama dengan kami dalam segala hal, jika hanya modul seperti itu yang muncul, dan perangkat lunak dapat diinstal pada objek. Kami memutuskan untuk tidak melewatkan kesempatan, dan mulai berkembang.
Dalam variasi terakhir modul, tugas penghitungan orang diselesaikan dengan metode klasik visi komputer, yang memberlakukan pembatasan serius pada kondisi penggunaan. Tetapi dalam kerangka tugas baru, modul harus belajar menghitung orang dalam kondisi yang jauh berbeda dan jauh lebih sulit.
Kelompok pengembangan fungsi intelektual dibagi menjadi 3 subkelompok, dan masing-masing mulai mencoba metode mereka sendiri. Semuanya didasarkan pada penggunaan jaringan saraf.
Yang pertama saya mencoba untuk mentransfer ke modul untuk menghitung orang dalam antrian ke infrastruktur
detektor helm yang kami kembangkan (lihat
artikel tentang bagaimana kami mencoba menggunakan teknologi jaringan saraf modern untuk menemukan helm di kepala orang ). Pendekatan ini tampak sangat logis: pendeteksi helm pada tahap kerja tertentu memecahkan masalah yang sama.
Kelompok kedua mencoba menerapkan
jaringan saraf regresi . Dia menghitung jumlah orang dalam gambar, tetapi tidak memilih objek tertentu, yang membuatnya sulit dikendalikan. Ketika pelatihan tentang jaringan saraf regresi, gambar diserahkan dan jumlah orang yang hadir ditunjukkan, dan jaringan saraf memberikan satu nomor - berapa banyak orang yang ditemukan. Mengisi sampel dengan gambar baru, kami berusaha melatihnya untuk menghitung dengan benar.
Sayangnya, kami menolak kedua metode tersebut, karena akurasi penghitung yang dibuat atas dasar mereka rendah.
Kelompok ketiga menguji satu
detektor tujuan umum yang cukup terkenal, yang dapat mendeteksi berbagai objek secara real time. Dia tahu bagaimana mencari ribuan jenis objek yang berbeda, tetapi tidak menyelesaikan masalah kita dengan semua fitur-fiturnya. Kami menyelesaikan detektor ini, melatihnya pada sampel kami sendiri yang luas dan menciptakan hasil yang cukup baik - sebuah counter orang dengan akurasi yang dapat diterima. Mereka memperbaikinya dengan pilihan baru, dan akhirnya mendapatkan prototipe, yang sudah tidak memalukan untuk memberikan pengguna untuk tes. Dan penilaiannya ... positif! Dia mengatakan bahwa secara umum,
solusinya sudah kompetitif , tetapi akurasinya belum tinggi - hanya 60-70%.
Versi pertama penghitung antrian dibuat terutama menggunakan klip dari pengguna ini. Kami memecahkan masalah - untuk
bekerja secara khusus dengannya - tetapi kami memahami bahwa jika kami melatih jaringan saraf dan membuat modul untuk satu proyek tertentu, tidak akan ada penskalaan lebih lanjut. Oleh karena itu, pelatihan lebih lanjut dilakukan pada sampel yang lebih universal, yang mengarah pada peningkatan akurasi bahkan tanpa perbaikan internal global. Kemudian kami mulai mengerjakan pengemasan modul - meningkatkan antarmuka, mengacaukan berbagai pengaturan, menarik perhatian terhadap kegunaan dan logika. Pada saat yang sama, kami memperbaiki sejumlah bug dalam prototipe kami (ngomong-ngomong, salah satu dari mereka secara tak terduga mempercepat modul sebanyak 7 kali), menemukan cara untuk mengurangi konsumsi CPU, menghubungkan pekerjaan pada kartu video. Sebagai hasilnya, kami mendapatkan modul yang berfungsi dengan baik dan mudah dikelola yang dianalisis dengan cepat, menghasilkan hasil yang akurat, tahu cara bekerja pada kartu video tanpa memuat prosesor.
Pengguna kami sangat senang! Dia pergi untuk meletakkan versi baru di tokonya, dan mengkonfirmasi bahwa dalam praktik semuanya bekerja dengan baik. Kami berhasil mencapai akurasi 85-90% (untuk situasi di mana orang dalam antrian tidak sepenuhnya tumpang tindih satu sama lain, dan mereka dapat dibedakan).
Tentu saja, selama proses pengembangan, tidak semuanya berjalan lancar, dan, misalnya, antara prototipe pertama dan solusi yang sekarang diinstal di situs, ada versi gagal yang bekerja lebih buruk daripada yang sebelumnya. Namun berdasarkan pengalamannya, kami menyadari apa yang harus dicari saat pengujian, mempelajari sejumlah fitur kerangka kerja yang digunakan. Dan mengingat ini, kami membuat modul akhir yang keren, dan kemudian berdasarkan itu - fungsi cepat lainnya.

Selamat berakhir
Sekarang aplikasi modul untuk menghitung orang dalam antrian versi baru sedang berkembang ke toko lain dari pengguna ini. Dan versi final - mulai diproduksi dan memasuki versi Macroscop, yang sedang dipersiapkan untuk rilis. Ngomong-ngomong, pengguna sangat senang dengan hasil dan cara kerja keseluruhan sehingga permintaan lain masuk - untuk membuat
detektor rak kosong . Dan kami mengambilnya lagi, dan melakukannya lagi (tapi ini adalah cerita yang sangat berbeda).
Jika diringkas, maka untuk perbandingan: pengembangan dan penyempurnaan versi lama modul untuk menghitung orang dalam antrian (4 tahun lalu) membutuhkan waktu sekitar
8 bulan . Kami membuat modul baru dalam
2 bulan (prototipe kerja pertama diserahkan kepada pengguna dalam 2-3 minggu).
Sejauh ini ini hanya tes pena dan hanya dalam kerangka satu arah - pengembangan fungsi intelektual. Secara umum, kami mematuhi pendekatan yang lebih ketat dan menyeluruh untuk pengembangan produk - dengan perencanaan, sejumlah validasi ide, analisis permintaan, dan pengujian mendalam. Apa yang tetap tidak berubah adalah praktik menciptakan Macroscop (apakah itu pengembangan modul analisis kernel atau video) dalam kolaborasi erat dengan pengguna.
Tidak ada kepastian bahwa pendekatan fungsi cepat harus diterapkan secara berkelanjutan dan di dalam seluruh departemen, tetapi sekarang kami mendapatkan pengalaman nyata dari pengembangan cepat, dan pengguna yang melakukan hal ini adalah manfaat nyata dari produk.
Dalam kasus apa pun, untuk diri kami sendiri, kami telah membuat beberapa aturan, kepatuhan yang merupakan setengah keberhasilan pengembangan fungsi cepat:
- Cobalah untuk bertemu dengan pengguna, tetapi jangan lupa tentang tujuan Anda sendiri: mengambil proyek yang dapat ditingkatkan, berinvestasi dalam sesuatu yang akan berguna dalam jangka panjang.
- Dapatkan ke bagian bawah tugas dan kebutuhan sebenarnya dari pengguna, mengidentifikasi prioritas.
- Mintalah dukungan pengguna. Jika dia siap untuk secara aktif berkomunikasi, menguji, memberikan umpan balik, dan memberikan data yang diperlukan (video dari objek nyata, misalnya), maka ada setiap kesempatan untuk berkembang dengan baik dan cepat.
- Jangan takut gagal dan memperlakukannya sebagai salah satu hasil yang mungkin.
- Jangan berusaha mengembangkan sesuatu yang unik dari awal, tetapi gunakan pengalaman yang ada, jika mungkin: dalam kasus kami, cobalah untuk menggunakan bagian dari algoritma dari modul yang sudah diterapkan. Dan bahkan jika solusi yang dihasilkan ternyata dapat bertahan - mencurahkan waktu untuk penelitian dan penyesuaian.