Manba: Aleksandr Mordvintsev & Abid k noyabr 05, 2017


Ishlash samaradorligini o'lchash va takomillashtirish usullari



Download 12,25 Mb.
bet11/16
Sana03.01.2022
Hajmi12,25 Mb.
#314973
1   ...   8   9   10   11   12   13   14   15   16
Bog'liq
1-jamlanma(lab-amaliy)

Ishlash samaradorligini o'lchash va takomillashtirish usullari

Maqsadlar

Rasmni qayta ishlashda, sekundiga ko'p sonli operatsiyalar bilan shug'ullanayotganingiz sababli, sizning kodingiz majburiy bo'lishi shart nafaqat to'g'ri yechimni ta'minlaydi, balki eng tezkor usulda ham. Shunday qilib, ushbu bobda siz bilib olasiz

• Kodingizning ishlashini o'lchash uchun.

• Kodingizning ishlashini yaxshilash bo'yicha ba'zi maslahatlar.

• Siz ushbu funktsiyalarni ko'rasiz: cv2.getTickCount, cv2.getTickFrequency va boshqalar.

OpenCV-dan tashqari Python shuningdek vaqtni o'lchashda yordam beradigan modul vaqtini ham taqdim etadi. Boshqa modul profili kodning har bir funktsiyasi qancha vaqt olgani va qancha vaqt olgani kabi kod haqida batafsil hisobot olishga yordam beradi marta, funktsiya chaqirilgan va hokazo. Ammo, agar siz IPython-dan foydalanayotgan bo'lsangiz, ushbu funktsiyalarning barchasi foydalanuvchilarga qulay tarzda birlashtirilgan usulda. Biz ba'zi muhimlarini ko'ramiz va qo'shimcha ma'lumot olish uchun qo'shimcha rezuslar bo'limidagi havolalarni tekshiring. OpenCV yordamida ishlashni o'lchash cv2.getTickCount funktsiyasi mos yozuvlar hodisasidan keyin soat tsikllari sonini qaytaradi (masalan, mashina moment bo'lganligi kabi) ushbu funktsiya chaqirilgan paytgacha Shunday qilib, agar siz funktsiya bajarilishidan oldin va keyin uni chaqirsangiz, olasiz funktsiyani bajarish uchun ishlatiladigan soat tsikllarining soni. cv2.getTickFrequency funktsiyasi soat tsikllarining chastotasini yoki soniyada soat tsikllarining sonini qaytaradi. Shunday qilib bajarish vaqtini sekundlarda topish uchun quyidagilarni bajarishingiz mumkin:



Biz quyidagi misol bilan namoyish qilamiz. Quyidagi misolda g'alati hajmdagi yadroni median filtrlash qo'llaniladi 5 dan 49 gacha. (Natija qanday bo'lishidan tashvishlanmang, bu bizning maqsadimiz emas):



Eslatma: Siz vaqt moduli bilan ham shunday qilishingiz mumkin. Cv2.getTickCount o'rniga, time.time () funktsiyasidan foydalaning. Keyin ikki marta farqni oling.

OpenCV-da standart optimallashtirish

OpenCV-ning ko'pgina funktsiyalari SSE2, AVX va hokazolar yordamida optimallashtirilgan. Unda shuningdek, unifikatsiyalanmagan kod mavjud. Agar bizning bo'lsa tizim ushbu xususiyatlarni qo'llab-quvvatlaydi, biz ulardan foydalanishimiz kerak (deyarli barcha zamonaviy protsessorlar ularni qo'llab-quvvatlaydi). U yoqilgan kompilyatsiya paytida sukut bo'yicha. Shunday qilib, agar u yoqilgan bo'lsa, OpenCV optimallashtirilgan kodni ishlaydi, aks holda u unsizlashtirilmagan kodni ishlaydi.

Siz cv2.useOptimized () -ni yoqilgan / o'chirilganligini tekshirish uchun va cv2.setUseOptimized () ni yoqish / o'chirish uchun ishlatishingiz mumkin. Oddiy misolni ko'rib chiqaylik.

Qarang, optimallashtirilgan median filtrlash untimlashtirilmagan versiyadan ~ 2x tezroq. Agar siz uning manbasini tekshirsangiz, siz medianani ko'rishingiz mumkin filtrlash SIMD optimallashtirilgan. Shunday qilib, siz ushbu koddan yuqori qismida optimallashtirishni yoqish uchun foydalanishingiz mumkin (yoqilganligini eslang) avvalboshdan).

IPythonda ishlashni o'lchash

Ba'zan ikkita shunga o'xshash operatsiyalarning ishlashini taqqoslashingiz kerak bo'lishi mumkin. IPython sizga sehrli buyruq beradi buni amalga oshirish uchun% vaqt kerak. Aniqroq natijaga erishish uchun kodni bir necha bor ishlaydi. Yana bir bor, ular mos keladi bitta qatorli kodlarni o'lchash.

Masalan, quyidagi qo'shimcha operatsiyalardan qaysi biri yaxshiroq ekanligini bilasizmi, x = 5; y = x ** 2, x = 5; y = x * x, x = np.uint8 ([5]); y = x * x yoki y = np.square (x)? Biz buni% vaqt bilan topamiz IPyton qobig'i.



Buni ko'rishingiz mumkin, x = 5; y = x * x eng tezkor va u Numpy-ga nisbatan 20 x tezroq. Agar hisobga olsangiz qator yaratishda ham, u 100x tezroq erishish mumkin. Salqin, to'g'rimi? (Bu masalada yaramas devlar ishlamoqda)

Izoh: Python skalyar operatsiyalari Numpy skalyar operatsiyalarga qaraganda tezroq. Shunday qilib, bitta yoki ikkita operatsiyani bajarish uchun elementlar, Python skalalari Numpy massivlaridan yaxshiroqdir. Numpy massiv kattaligi biroz kattaroq bo'lsa, afzalliklarga ega.

Biz yana bir misolni sinab ko'ramiz. Bu safar biz cv2.countNonZero () va ish faoliyatini taqqoslaymiz bir xil rasm uchun np.count_nonzero ().



Qarang, OpenCV funktsiyasi Numpy funktsiyasidan 25 baravar tezroq.

Eslatma: Odatda, OpenCV funktsiyalari Numpy funktsiyalariga qaraganda tezroq ishlaydi. Shunday qilib, xuddi shu operatsiya uchun OpenCV funktsiyalari mavjud afzal. Ammo, istisnolar bo'lishi mumkin, ayniqsa Numpy nusxalar o'rniga ko'rinishlar bilan ishlayotganida.

Ko'proq IPython sehrli buyruqlari Ishlash, profil, chiziq profilini, xotirani o'lchash uchun yana bir nechta sehrli buyruqlar mavjud va hokazo. Ularning barchasi yaxshi hujjatlashtirilgan. Shunday qilib, faqat o'sha hujjatlarga havolalar bu erda keltirilgan. Qiziqqan o'quvchilarga tavsiya etiladi ularni sinab ko'rish.

Ishlashni optimallashtirish usullari Python va Numpy-ning maksimal ishlashidan foydalanish uchun bir nechta texnik va kodlash usullari mavjud. Faqat tegishli manbalar bu erda qayd etilgan va muhim manbalarga havolalar berilgan. Bu erda ta'kidlash kerak bo'lgan asosiy narsa, avval harakat qilib ko'ring algoritmni sodda tarzda amalga oshirish. Ishlayotganidan so'ng, uni profilga joylashtiring, muammolarni toping va ularni optimallashtiring.

1. Python-da iloji boricha ilmoqlardan saqlaning, ayniqsa ikki va uch tomonli ilmoqlar va boshqalar. Ular juda sekin.

2. Numpy va OpenCV uchun optimallashtirilganligi sababli algoritm / kodni maksimal darajada vektorlang vektorli operatsiyalar.

3. Kesh koordinatasidan foydalaning.

4. Agar kerak bo'lmasa, hech qachon massiv nusxalarini yaratmang. Buning o'rniga ko'rinishni ishlatishga harakat qiling. Arraydan nusxa ko'chirish qimmat ishdir.

Ushbu operatsiyalarni bajargandan keyin ham, agar sizning kodingiz hali ham sekin bo'lsa yoki katta ko'chadan foydalanish muqarrar bo'lsa, qo'shimcha ma'lumotlardan foydalaning tezroq qilish uchun Cython kabi kutubxonalar.




      1. Download 12,25 Mb.

        Do'stlaringiz bilan baham:
1   ...   8   9   10   11   12   13   14   15   16




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish