Mündəricat:

Sipeed MaiX lövhələri ilə obyekt aşkarlanması (Kendryte K210): 6 addım
Sipeed MaiX lövhələri ilə obyekt aşkarlanması (Kendryte K210): 6 addım

Video: Sipeed MaiX lövhələri ilə obyekt aşkarlanması (Kendryte K210): 6 addım

Video: Sipeed MaiX lövhələri ilə obyekt aşkarlanması (Kendryte K210): 6 addım
Video: Bakı metrosunda gənclərin elədiyi zarafat 2024, Iyul
Anonim
Image
Image

Sipeed MaiX Lövhələri ilə görüntü tanıma mövzusunda əvvəlki məqaləmin davamı olaraq, obyekt aşkarlamasına diqqət yetirərək başqa bir dərs yazmağa qərar verdim. Bu yaxınlarda Kendryte K210 çipi ilə birlikdə Edge Computing üçün Seeed AI Hat, M5 yığının M5StickV və DFRobotun HuskyLensi də daxil olmaqla bəzi maraqlı avadanlıqlar ortaya çıxdı (hərçənd özünün xüsusi proqram təminatı var və tam yeni başlayanlar üçün daha çox hədəflənir). Ucuz qiymətə görə Kendryte K210, layihələrinə kompüter görmə qabiliyyətini əlavə etmək istəyən insanlara müraciət etdi. Ancaq Çin hardware məhsullarında olduğu kimi, texniki dəstək də yoxdur və bu məqalələrim və videolarımla yaxşılaşdırmağa çalışdığım bir şeydir. Ancaq unutmayın ki, mən Kendryte və ya Sipeed developers komandasında deyiləm və məhsulları ilə bağlı bütün suallara cavab verə bilmərəm.

Bunu nəzərə alaraq başlayaq! Obyekt tanıma CNN modellərinin necə işlədiyinə qısa (və sadələşdirilmiş) baxışdan başlayacağıq.

MAY 2020 GÜNCELLEŞTİRMƏ: K210 lövhələri ilə Obyekt Tanıma mövzusunda yazdığım məqalə və videonun hələ də çox populyar olduğunu və YouTube və Google-da ən yaxşı nəticələr olduğunu görərək məqaləni aXeleRate, AI üçün Keras əsaslı çərçivə haqqında məlumat daxil etmək üçün yeniləmək qərarına gəldim. Kenar inkişaf etdirirəm. aXeleRate, əslində, görüntü tanıma/obyekt aşkarlama modelləri üçün istifadə etdiyim skriptlər toplusuna əsaslanır - vahid bir çərçivədə birləşdirilmiş və Google Colab -da iş axını üçün optimallaşdırılmışdır. İstifadəsi daha rahatdır və daha aktualdır.

Məqalənin köhnə versiyası üçün hələ də steemit.com saytında görə bilərsiniz.

Addım 1: Obyekt Algılama Model Memarlığı Açıqlandı

Obyekt Algılama Modeli Memarlığı Açıqlandı
Obyekt Algılama Modeli Memarlığı Açıqlandı
Obyekt Algılama Modeli Memarlığı Açıqlandı
Obyekt Algılama Modeli Memarlığı Açıqlandı

Görüntü tanıma (və ya görüntü təsnifatı) modelləri bütün görüntünü giriş olaraq qəbul edir və tanımağa çalışdığımız hər sinif üçün ehtimalların siyahısını verir. Maraqlandığımız obyektin görüntünün böyük bir hissəsini tutması və onun yeri ilə çox maraqlanmamağımız çox faydalıdır. Bəs layihəmiz (məsələn, üz izləmə kamerası) bizdən nəinki görüntüdəki obyektin növü, həm də koordinatları haqqında məlumat sahibi olmağımızı tələb edərsə. Bəs birdən çox obyektin aşkarlanmasını tələb edən layihə (məsələn, saymaq üçün)?

İşdə Obyekt Algılama Modelləri işə yarayar. Bu yazıda YOLO (yalnız bir dəfə baxırsınız) arxitekturasından istifadə edəcəyik və izahını bu xüsusi memarlığın daxili mexanikasına yönəldəcəyik.

Şəkildə hansı cisimlərin olduğunu və koordinatlarının nə olduğunu müəyyən etməyə çalışırıq. Maşın öyrənmə sehrli deyil və "düşünən maşın" deyil, müəyyən bir problemi daha yaxşı həll etmək üçün funksiyanı (sinir şəbəkəsi) optimallaşdırmaq üçün statistikadan istifadə edən bir alqoritmdir. Bu problemi daha da "optimallaşdırmaq" üçün onu yenidən ifadə etməliyik. Burada sadəlövh bir yanaşma, proqnozu ilə obyektin düzgün koordinatları arasındakı itkini (fərqi) minimuma endirən alqoritmdən istifadə etmək olardı. Şəkildə yalnız bir obyektimiz olduğu müddətcə bu çox yaxşı işləyəcək. Birdən çox obyekt üçün fərqli bir yanaşma tətbiq edirik - ızgara əlavə edirik və şəbəkəmizin hər bir cədvəldə obyekt (lər) in mövcudluğunu (və ya olmamasını) proqnozlaşdırırıq. Gözəl səslənir, amma yenə də şəbəkə üçün çox qeyri -müəyyənlik yaradır - proqnozu necə çıxarmaq olar və bir ızgara hüceyrəsinin içərisində mərkəzi olan birdən çox obyekt olduqda nə etməli? Çapa adlanan bir başqa məhdudiyyət əlavə etməliyik. Çapalar, ilk ölçülərdir (eni, hündürlüyü), bəziləri (obyektin ölçüsünə ən yaxın olanı) obyekt ölçüsünə - neyron şəbəkədən bəzi çıxışlardan istifadə etməklə (son xüsusiyyət xəritəsi).

Beləliklə, burada YOLO arxitekturası neyron şəbəkəsi görüntü üzərində bir obyekt aşkarlamasını həyata keçirərkən nələr baş verdiyinə dair ən yüksək səviyyəli bir görünüşdür. Xüsusiyyət çıxaran şəbəkə tərəfindən aşkar edilən xüsusiyyətlərə görə, hər bir grid hüceyrəsi üçün lövbərlərin ofsetini, lövbər ehtimalını və çapa sinifini ehtiva edən bir sıra proqnozlar hazırlanır. Sonra aşağı ehtimal və voila ilə proqnozları ləğv edirik!

Addım 2: Ətraf mühiti hazırlayın

Ətraf mühiti hazırlayın
Ətraf mühiti hazırlayın

aXeleRate, penny4860, SVHN yolo-v2 rəqəm detektoru tərəfindən hazırlanmış gözəl bir layihəyə əsaslanır. aXeleRate, Kerasdakı YOLO detektorunun bu tətbiqini yeni bir səviyyəyə qaldırır və əlverişli konfiqurasiya sistemindən istifadə edərək görüntü tanıma/obyekt aşkarlama və müxtəlif arxa tərəfli görüntü seqmentləri şəbəkələrinin çevrilməsini həyata keçirir.

AXeleRate istifadə etməyin iki yolu var: yerli olaraq Ubuntu maşınında və ya Google Colabda işləyin. Google Colab -da işləmək üçün bu nümunəyə baxın:

PASCAL-VOC Object Detection Colab Notebook

Modelinizi yerli olaraq öyrətmək və onu hardware sürətləndirmə ilə istifadə etmək üçün ixrac etmək indi daha asandır. Layihənizi başqalarından ayırmaq və münaqişələrdən qaçmaq üçün Anaconda mühitində bütün lazımlı asılılıqları quraşdırmanızı şiddətlə tövsiyə edirəm.

Yükləyicini buradan yükləyin.

Quraşdırma başa çatdıqdan sonra yeni bir mühit yaradın:

conda yaratmaq -n yolo python = 3.7

Yeni mühiti aktivləşdirək

yolo aktivləşdirin

Bash qabığınızdan əvvəl ətraf mühitin adı ilə bir prefiks görünəcək ki, bu da o mühitdə işlədiyinizi göstərir.

Yerli maşınınıza aXeleRate quraşdırın

pip yüklə git+https://github.com/AIWintermuteAI/aXeleRate

Təlim və nəticə çıxarmaq üçün ehtiyacınız olan skriptləri yükləmək üçün bunu işə salın:

git klonu

AXeleRate qovluğunda tests_training.py ilə sürətli testlər keçirə bilərsiniz. Hər bir model növü üçün təlim və nəticə çıxaracaq, təlim keçmiş modelləri saxlayacaq və çevirəcəkdir. Yalnız 5 dövr üçün təlim olduğundan və məlumat bazası çox kiçik olduğundan, faydalı modellər əldə edə bilməyəcəksiniz, ancaq bu skript yalnız səhvlərin yoxlanılması üçün nəzərdə tutulmuşdur.

Addım 3: Keras ilə Obyekt Algılama Modelini öyrədin

Keras ilə Obyekt Algılama Modelini öyrədin
Keras ilə Obyekt Algılama Modelini öyrədin

İndi konfiqurasiya faylı ilə bir təlim skriptini işlədə bilərik. YOLO obyekt detektorunun Keras tətbiqi olduqca mürəkkəb olduğundan, hər bir kod parçasını izah etmək əvəzinə, təlimləri necə konfiqurasiya edəcəyinizi və özünüzdə bəzi dəyişikliklər etmək istəsəniz əlaqədar modulları necə izah edəcəyinizi izah edəcəyəm.

Bir oyuncaq nümunəsi ilə başlayaq və bir rakun detektoru hazırlayaq. /Config qovluğunda raccoon_detector.json daxilində bir konfiqurasiya faylı var. Memarlıq olaraq MobileNet7_5 (7_5, orijinal Mobilenet tətbiqinin alfa parametri olduğu, şəbəkənin genişliyini idarə edən) və giriş ölçüsü olaraq 224x224 seçirik. Konfiqurasiyanın ən vacib parametrlərinə nəzər salaq:

Növ, modelin ön hissəsidir - Classifier, Detector və ya Segnet Architecture, model arxa tərəfidir (xüsusiyyət çıxaran)

- Tam Yolo - Kiçik Yolo - MobileNet1_0 - MobileNet7_5 - MobileNet5_0 - MobileNet2_5 - SqueezeNet - VGG16 - ResNet50

Çapa haqqında daha çox məlumat üçün, https://github.com/pjreddie/darknet/issues/568 burada oxuyun.

Etiketlər, məlumatlarınızda olan etiketlərdir. Vacibdir: Zəhmət olmasa, verilənlər bazasında mövcud olan bütün etiketləri sadalayın.

object_scale, obyekt proqnozlaşdırıcılarının etibarsızlığının səhv proqnozlaşdırılmasının nə qədər cəzalandırılacağını təyin edir

no_object_scale, qeyri-obyekt proqnozlaşdırıcıların etibarsızlığının səhv proqnozlaşdırılmasının nə qədər cəzalandırılacağını təyin edir

coord_scale səhv mövqe və ölçü proqnozlarının nə qədər cərimə olunacağını təyin edir (x, y, w, h)

class_scale, səhv sinif proqnozunu nə qədər cəzalandıracağını təyin edir

augumentation - həddindən artıq uyğunlaşmanın qarşısını almaq və verilənlər bazasında daha çox çeşid əldə etmək üçün görüntünün böyüdülməsi, ölçüsünün dəyişdirilməsi, dəyişdirilməsi və bulanması.

train_times, validation_times - verilənlər bazasını neçə dəfə təkrarlamaq olar. Artırma varsa faydalıdır

aktiv edildi

first_trainable_layer - əvvəlcədən öyrədilmiş bir xüsusiyyət şəbəkəsi istifadə edirsinizsə, müəyyən təbəqələri dondurmağa imkan verir

İndi Google Diskimdə (orijinal verilənlər bazası) paylaşdığım, 150 şərh şəkli olan bir racoon aşkarlama məlumat bazası olan məlumat dəstini yükləməliyik.

Konfiqurasiya faylındakı xətləri (train_image_folder, train_annot_folder) müvafiq olaraq dəyişdirdiyinizə əmin olun və sonra təlimata aşağıdakı əmrlə başlayın:

python axelerate/train.py -c configs/raccoon_detector.json

train.py.json faylından konfiqurasiyanı oxuyur və modeli axelerate/network/yolo/yolo_frontend.py skripti ilə hazırlayır. yolo/backend/loss.py, xüsusi zərər funksiyasının tətbiq olunduğu yerdir və yolo/backend/network.py, modelin yaradıldığı yerdir (giriş, xüsusiyyət çıxarıcı və aşkarlama qatları bir araya gətirilir). axelerate/networks/common_utils/fit.py, təlim prosesini həyata keçirən və axelerate/network/common_utils/feature.py xüsusiyyət çıxarıcıları ehtiva edən bir skriptdir. K210 çipi və Micropython firmware ilə təlim keçmiş bir model istifadə etmək niyyətindəsinizsə, yaddaş məhdudiyyətləri səbəbindən MobileNet (2_5, 5_0 və 7_5) və TinyYolo arasında seçim edə bilərsiniz, lakin MobileNet -in daha yaxşı aşkarlama dəqiqliyi verdiyini gördüm.

Oyuncaq nümunəsi olduğu və yalnız 150 yenot şəklini ehtiva etdiyi üçün, dəqiqlik ulduzlardan uzaq olsa da, GPU olmadan belə, məşq prosesi olduqca sürətli olmalıdır. İşlə əlaqəli bir layihə üçün bir trafik işarəsi detektoru və bir ədəd detektoru öyrətdim, hər iki məlumat toplusunda bir neçə mindən çox təlim nümunəsi var.

Addım 4:.model formatına çevirin

. Kmodel formatına çevirin
. Kmodel formatına çevirin

AXeleRate ilə model çevrilməsi avtomatik olaraq həyata keçirilir - bu, ehtimal ki, təlim skriptlərinin köhnə versiyasından ən böyük fərqdir! Üstəlik, layihə qovluğunda səliqəli şəkildə saxlanılan model fayllarını və təlim qrafikini əldə edirsiniz. Vayidasiya dəqiqliyinin bəzən obyekt aşkarlanması üçün modelin real performansına dair qiymətləndirmə verə bilmədiyini gördüm və buna görə də mAP -ı obyekt aşkarlama modelləri üçün doğrulama metriği olaraq əlavə etdim. Xəritə haqqında daha çox məlumatı burada oxuya bilərsiniz.

Xəritədə, ortalama orta dəqiqlik (doğrulama metrikimiz) 20 dövr üçün yaxşılaşmırsa, təlim vaxtından əvvəl dayandırılacaq. Xəritə hər dəfə yaxşılaşdıqda model layihə qovluğunda saxlanılır. Təlim bitdikdən sonra, aXeleRate avtomatik olaraq ən yaxşı modeli müəyyən formatlara çevirir - "tflite", "k210" və ya "edgetpu" seçə bilərsiniz.

İndi son addıma qədər, həqiqətən də modelimizi Sipeed hardware üzərində işləyirik!

Addım 5: Micropython Firmware -də işləyin

Micropython Firmware üzərində işləyin
Micropython Firmware üzərində işləyin

C kodu ilə obyekt aşkarlama modelimizdən nəticə çıxarmaq mümkündür, lakin rahatlıq naminə Micropython firmware və MaixPy IDE -dən istifadə edəcəyik.

MaixPy IDE -ni buradan və micropython firmware -ni buradan yükləyin. Firmware yazmaq və ya ayrıca GUI flash alətini yükləmək üçün kflash.py python skriptindən istifadə edə bilərsiniz.

Model.kmodel kodunu bir SD kartın kökünə kopyalayın və SD kartı Sipeed Maix Bit -ə (və ya digər K210 cihazına) daxil edin. Alternativ olaraq cihazın flash yaddaşına.kmodel yaza bilərsiniz. Mənim nümunə skriptim flash yaddaşdan.kmodel oxuyur. SD kart istifadə edirsinizsə, bu xətti dəyişdirin

tapşırıq = kpu.load (0x200000)

tapşırıq = kpu.load ("/sd/model.kmodel")

MaixPy IDE -ni açın və əlaqə düyməsini basın. Example_scripts/k210/detector qovluğundan raccoon_detector.py skriptini açın və Başlat düyməsini basın. Ətrafında sərhəd qutuları olan kameradan canlı bir axın görməlisiniz … yaxşı, yenot. Daha çox təlim nümunəsi verərək modelin dəqiqliyini artıra bilərsiniz, ancaq unutmayın ki, bu kiçik kiçik modeldir (1.9 M) və kiçik cisimləri aşkar etməkdə çətinlik çəkəcək (aşağı qətnamə səbəbindən).

Görüntü tanıma ilə bağlı əvvəlki məqaləmə şərhlərdə aldığım suallardan biri, UART/I2C üzərindən aşkarlama nəticələrini Sipeed inkişaf lövhələrinə qoşulmuş digər cihaza necə göndərməkdir. Github depomda raccoon_detector_uart.py adlı başqa bir nümunə tapa bilərsiniz. UART ünsiyyəti üçün istifadə olunan pinlərin fərqli lövhələrdən fərqli olduğunu unutmayın, bu sənədlərdə özünüzü yoxlamalısınız.

Addım 6: Xülasə

Kendryte K210, məhdud yaddaş olsa da, kompüter görmə qabiliyyəti üçün möhkəm bir çipdir. İndiyə qədər dərslərimdə xüsusi obyektləri tanımaq, xüsusi obyektləri aşkar etmək və bəzi OpenMV əsaslı kompüter görmə vəzifələrini yerinə yetirmək üçün istifadə etməyi əhatə etdik. Bilirəm ki, üz tanıma üçün də uyğundur və bir az əyilməklə poz aşkarlama və görüntü seqmentləşdirmə aparmaq mümkün olmalıdır (semantik seqmentləşdirmə modelini öyrətmək üçün aXeleRate -dən istifadə edə bilərsiniz, amma K210 ilə nəticəni hələ tətbiq etməmişəm).. AXeleRate depo məsələlərinə baxmaqdan və töhfə verə biləcəyiniz bəzi inkişafların olduğunu düşünürsünüzsə, PR etməkdən çekinmeyin!

Bu təlimatı yazarkən istifadə etdiyim bəzi məqalələr, sinir şəbəkələri ilə obyektlərin aşkarlanması haqqında daha çox məlumat əldə etmək istəyirsinizsə, baxın:

Bağlayıcı qutu obyekt detektorları: YOLO -nu başa düşməklə yalnız bir dəfə baxırsınız

YOLO anlayışı (daha çox riyaziyyat)

YOLO Obyekt Yerləşdirməsinin Keras ilə necə işlədiyinə dair incə bələdçi (2 -ci hissə)

YOLO, YOLOv2 və indi YOLOv3 ilə real vaxtda Obyekt Algılama

Ümid edirik ki, indi əldə etdiyiniz biliklərdən istifadə edərək maşın görmə qabiliyyəti ilə möhtəşəm layihələr qura bilərsiniz! Sipeed lövhələrini buradan satın ala bilərsiniz, bunlar quraşdırılmış sistemlərdə ML üçün ən ucuz seçimlər arasındadır.

Suallarınız olarsa məni LinkedIn -ə əlavə edin və YouTube kanalıma abunə olun ki, maşın öyrənmə və robototexnika ilə bağlı daha maraqlı layihələrdən xəbərdar olasınız.

Tövsiyə: