Гараар зурсан зургийн ангилал. Yandex-д мэдээлэх

Хэдэн сарын өмнө Google-ийн хамт олон зарцуулсан Kaggle дээр шуугиан тарьсан зургуудын ангилагчийг бий болгох уралдаан тоглоом "Хурдан, зур!" Yandex-ийн хөгжүүлэгч Роман Власов багтсан баг тэмцээнд дөрөвдүгээр байр эзэллээ. XNUMX-р сарын машин сургалтын сургалтанд Роман багийнхаа санаа, ангилагчийн эцсийн хэрэгжилт, өрсөлдөгчдийнхөө сонирхолтой туршлагын талаар хуваалцав.


- Бүгдээрээ сайн уу! Намайг Рома Власов гэдэг, өнөөдөр би танд Түргэн зурах, зурах талаар хэлэх болно! Doodle таних сорилт.

Гараар зурсан зургийн ангилал. Yandex-д мэдээлэх

Манай багт таван хүн байсан. Би нэгтгэх хугацаа дуусахаас өмнө элссэн. Бид азгүй, бага зэрэг ганхсан ч бид мөнгөний байрлалаас, тэд алтан байрлалаас ганхсан. Тэгээд бид нэр хүндтэй дөрөвдүгээр байр эзэлсэн.

(Тэмцээний үеэр багууд санал болгож буй өгөгдлийн багцын нэг хэсэгт үзүүлсэн үр дүнд үндэслэн үнэлгээг хийсэн. Төгсгөлийн үнэлгээ нь өгөгдлийн багцын өөр хэсэгт бий болсон. Ингэж хийсэн. Тэмцээнд оролцогчид алгоритмуудаа тодорхой өгөгдөлд тохируулдаггүй.Тиймээс финалын шатанд үнэлгээний хооронд шилжих үед байрлалууд бага зэрэг сэгсэрнэ (англи хэлнээс shake up - холих): бусад өгөгдөл дээр үр дүн гарч болзошгүй. өөр байх.Ромын баг эхний гуравт орсон.Энэ тохиолдолд эхний гуравт мөнгө,мөнгөний үнэлгээний бүс ордог.Зөвхөн эхний гурван байрыг мөнгөн шагналаар шагнасан.Сэгсэрлийн дараа баг аль хэдийн орсон байв. Дөрөвдүгээр байр. Үүнтэй адилаар нөгөө баг нь ялалт, алтан байраа алдсан. - Ред.)

Гараар зурсан зургийн ангилал. Yandex-д мэдээлэх

Мөн Евгений Бабахнин их мастер, Иван Сосин их мастер, Роман Соловьев их мастер хэвээр үлдэж, Алекс Паринов мастер цол хүртэж, би шинжээч болж, одоо аль хэдийн мастер болсон гэдгээрээ энэ тэмцээн ихээхэн ач холбогдолтой байв.

Гараар зурсан зургийн ангилал. Yandex-д мэдээлэх

Энэ юу вэ Quick, Draw? Энэ бол Google-ийн үйлчилгээ юм. Google нь хиймэл оюун ухааныг сурталчлах зорилготой байсан бөгөөд энэ үйлчилгээгээр мэдрэлийн сүлжээ хэрхэн ажилладагийг харуулахыг хүссэн. Та тийшээ очоод Let's draw товчийг дарахад шинэ хуудас гарч ирнэ: зигзаг зур, танд үүнийг хийхэд 20 секунд байна. Та жишээ нь энд байгаа шиг 20 секундын дотор зигзаг зурах гэж оролдож байна. Хэрэв та амжилтанд хүрвэл сүлжээ нь зигзаг гэж хэлээд цааш явна. Ийм зургаахан л зураг бий.

Хэрэв Google-ийн сүлжээ таны зурсан зүйлийг таньж чадаагүй бол даалгавар дээр загалмай зурсан байна. Зургийг сүлжээнд таних эсэх нь ирээдүйд ямар утгатай болохыг би дараа нь хэлэх болно.

Энэ үйлчилгээ нь нэлээд олон тооны хэрэглэгчдийг цуглуулсан бөгөөд хэрэглэгчдийн зурсан бүх зургийг бүртгэсэн.

Гараар зурсан зургийн ангилал. Yandex-д мэдээлэх

Бид бараг 50 сая зураг цуглуулж чадсан. Үүнээс манай тэмцээний галт тэрэг, туршилтын огноо бүрдлээ. Дашрамд дурдахад, тестийн өгөгдлийн хэмжээ, ангиудын тоог тодоор тэмдэглэсэн байдаг. Би тэдний тухай жаахан дараа хэлье.

Мэдээллийн формат нь дараах байдалтай байв. Эдгээр нь зүгээр л RGB дүрс биш, харин ойролцоогоор хэлэхэд хэрэглэгчийн хийсэн бүх зүйлийн бүртгэл юм. Үг бол бидний зорилт, улсын код нь doodle зохиогч хаанаас ирсэн, цагийн тэмдэг нь цаг юм. Хүлээн зөвшөөрөгдсөн шошго нь сүлжээ Google-ийн зургийг таньсан эсэхийг харуулдаг. Мөн зураг нь өөрөө дараалал, хэрэглэгчийн цэгээр зурдаг муруйн ойролцоо дүрс юм. Мөн цаг хугацаа. Энэ бол зураг зурж эхлэх үе юм.

Гараар зурсан зургийн ангилал. Yandex-д мэдээлэх

Мэдээллийг хоёр хэлбэрээр танилцуулсан. Энэ бол эхний хэлбэр, хоёр дахь нь хялбаршуулсан. Тэд тэндээс цагийн хуваарийг хайчилж, энэ багц цэгүүдийг бага оноогоор ойртуулсан. Үүний тулд тэд ашигласан Дуглас-Пеккерийн алгоритм. Танд шулуун шугамыг ойролцоолсон олон тооны цэгүүд байгаа боловч үнэн хэрэгтээ та энэ шугамыг ердөө хоёр цэгээр ойртуулж чадна. Энэ бол алгоритмын санаа юм.

Мэдээллийг дараах байдлаар тараав. Бүх зүйл жигд, гэхдээ зарим нэг гажуудал бий. Асуудлыг шийдэхдээ бид үүнийг хараагүй. Хамгийн гол нь үнэхээр цөөхөн анги байгаагүй, бид жигнэсэн түүвэрлэгч, өгөгдөл хэт түүвэрлэлт хийх шаардлагагүй байсан.

Гараар зурсан зургийн ангилал. Yandex-д мэдээлэх

Зургууд ямар байсан бэ? Энэ бол "нисэх онгоц" анги бөгөөд үүнээс танигдсан, танигдаагүй шошготой жишээнүүд юм. Тэдний харьцаа 1-ээс 9 орчим байсан. Таны харж байгаагаар өгөгдөл маш их шуугиантай байна. Энэ бол онгоц гэж би таамаглаж байна. Хэрэв та танигдаагүй гэж үзвэл ихэнх тохиолдолд энэ нь зүгээр л дуу чимээ юм. Хэн нэгэн бүр "нисэх онгоц" гэж бичихийг оролдсон боловч франц хэлээр.

Ихэнх оролцогчид зүгээр л сүлжээг авч, энэ дараалсан шугамаас өгөгдлийг RGB зураг болгон зурж, сүлжээнд шидсэн. Би ойролцоогоор ижил аргаар зурсан: Би өнгөний палитрыг авч, эхний мөрийг нэг өнгөөр ​​зурсан, энэ нь палитрын эхэнд, сүүлчийн мөр нь нөгөө өнгөөр, палитрын төгсгөлд, тэдгээрийн хооронд байв. Би энэ палитрыг ашиглан хаа сайгүй интерполяц хийсэн. Дашрамд хэлэхэд, энэ нь эхний слайд дээрх шиг хараар зурсанаас илүү сайн үр дүнг өгсөн.

Иван Сосин зэрэг багийн бусад гишүүд зурахдаа арай өөр арга барилыг туршиж үзсэн. Нэг сувгаар тэр зүгээр л саарал зураг зурж, өөр сувгаар цус харвалт бүрийг эхнээс нь дуустал 32-аас 255 хүртэл градиент зурж, гурав дахь сувгаар 32-аас 255 хүртэлх бүх зураас дээр градиент зурсан.

Өөр нэг сонирхолтой зүйл бол Алекс Паринов улсын кодыг ашиглан сүлжээнд мэдээлэл оруулсан явдал юм.

Гараар зурсан зургийн ангилал. Yandex-д мэдээлэх

Тэмцээнд ашигласан хэмжигдэхүүн нь дундаж дундаж нарийвчлал юм. Өрсөлдөөний энэ хэмжүүрийн мөн чанар юу вэ? Та гурван таамаглал өгч болно, хэрэв энэ гуравт зөв таамаглал байхгүй бол 0, зөв ​​байвал дарааллыг нь харгалзан үзнэ. Мөн зорилтот үр дүнг таны таамаглалын дарааллаар хуваасан 1 гэж тооцно. Жишээлбэл, та гурван таамаглагч хийсэн бөгөөд зөв нь эхнийх нь та 1-ийг 1-д хувааж, 1-ийг авна. Хэрэв таамаглагч зөв бөгөөд дараалал нь 2 бол 1-ийг 2-т хуваахад 0,5 болно. За, гэх мэт.

Гараар зурсан зургийн ангилал. Yandex-д мэдээлэх

Өгөгдлийн урьдчилсан боловсруулалт - зураг хэрхэн зурах гэх мэт - бид бага зэрэг шийдсэн. Бид ямар архитектур ашигласан бэ? Бид PNASNet, SENet, SE-Res-NeXt гэх мэт аль хэдийн сонгодог архитектуруудыг ашиглахыг оролдсон тул тэд улам бүр шинэ тэмцээнд орж байна. Мөн ResNet болон DenseNet байсан.

Гараар зурсан зургийн ангилал. Yandex-д мэдээлэх

Гараар зурсан зургийн ангилал. Yandex-д мэдээлэх

Гараар зурсан зургийн ангилал. Yandex-д мэдээлэх

Бид үүнийг хэрхэн зааж өгсөн бэ? Бидний авсан бүх загварууд imagenet дээр урьдчилан бэлтгэгдсэн. Хэдийгээр маш их өгөгдөл, 50 сая зураг байгаа ч гэсэн, хэрэв та imagenet дээр урьдчилан бэлтгэсэн сүлжээг авбал энэ нь зүгээр л эхнээс нь сургаснаас илүү сайн үр дүнг харуулсан.

Бид ямар заах арга техникийг ашигласан бэ? Энэ бол Дулаан дахин эхлүүлэхтэй Cosing Annealing бөгөөд үүнийг би дараа нь ярих болно. Энэ бол миний сүүлийн үеийн бараг бүх тэмцээнд ашигладаг арга бөгөөд тэдгээрийн тусламжтайгаар торыг маш сайн сургаж, сайн доод хэмжээнд хүрэх боломжтой болсон.

Гараар зурсан зургийн ангилал. Yandex-д мэдээлэх

Дараа нь тэгш өндөрлөгт суралцах хурдыг бууруул. Та сүлжээгээ сургаж эхэлж, тодорхой сургалтын хувь хэмжээг тогтоож, үргэлжлүүлэн зааж, таны алдагдал аажмаар тодорхой үнэ цэнэд нийлдэг. Та үүнийг шалгаарай, жишээлбэл, арван жилийн турш алдагдал огт өөрчлөгдөөгүй. Та суралцах хурдаа тодорхой хэмжээгээр бууруулж, үргэлжлүүлэн суралцаарай. Энэ нь дахин бага зэрэг буурч, хамгийн багадаа нэгдэж, та сургалтын хурдыг дахин бууруулж, сүлжээгээ нэгтгэх хүртэл үргэлжилнэ.

Дараа нь сонирхолтой арга барил: Сурах хурдыг бүү бууруул, багцын хэмжээг нэмэгдүүл. Ижил нэртэй нийтлэл байна. Сүлжээг сургахдаа сургалтын хурдыг бууруулах шаардлагагүй, зөвхөн багцын хэмжээг нэмэгдүүлэх боломжтой.

Дашрамд хэлэхэд энэ аргыг Алекс Паринов ашигласан. Тэрээр 408-тай тэнцэх багцаар эхэлсэн бөгөөд түүний сүлжээ нь зарим өндөрлөгт хүрэхэд тэр багцын хэмжээг хоёр дахин нэмэгдүүлсэн гэх мэт.

Үнэн хэрэгтээ түүний багцын хэмжээ ямар үнэ цэнэтэй болсныг би санахгүй байна, гэхдээ хамгийн сонирхолтой нь Kaggle дээр ижил техник ашигласан багууд байсан бөгөөд тэдгээрийн багцын хэмжээ 10000 орчим байсан. Дашрамд хэлэхэд, гүн гүнзгий суралцах орчин үеийн хүрээнүүд, тухайлбал Жишээлбэл, PyTorch танд үүнийг маш амархан хийх боломжийг олгодог. Та багцаа үүсгэж, сүлжээнд байгаагаар нь биш, бүхэлд нь биш харин хэсэг болгон хувааж, таны видео картанд тааруулж, градиентийг тооцоолж, бүх багцын градиентыг тооцоолсны дараа шинэчилнэ үү. жин.

Дашрамд дурдахад, их хэмжээний багцын хэмжээ энэ өрсөлдөөнд багтсан хэвээр байсан, учир нь өгөгдөл нь нэлээд чимээ шуугиантай байсан бөгөөд том багцын хэмжээ нь градиентийг илүү нарийвчлалтай тооцоолоход тусалсан.

Псевдо-шошгололтыг мөн ашигласан бөгөөд ихэвчлэн Роман Соловьев ашигладаг байсан. Тэрээр туршилтын өгөгдлийн тал орчим хувийг багцаар нь авч, сүлжээг ийм багц дээр сургасан.

Зургийн хэмжээ чухал байсан, гэхдээ үнэн хэрэгтээ танд маш их өгөгдөл байгаа тул та удаан хугацаанд бэлтгэл хийх хэрэгтэй бөгөөд хэрэв таны зургийн хэмжээ нэлээд том бол та маш удаан хугацаанд бэлтгэл хийх болно. Гэхдээ энэ нь таны эцсийн ангилагчийн чанарт тийм ч их зүйл нэмээгүй тул ямар нэгэн төрлийн солилцоог ашиглах нь зүйтэй болов. Мөн бид зөвхөн том хэмжээтэй биш зургуудыг туршиж үзсэн.

Энэ бүгдийг яаж сурсан бэ? Эхлээд жижиг хэмжээтэй зургуудыг авч, хэд хэдэн эрин үеийг гүйлгэсэн бөгөөд энэ нь маш их цаг зарцуулсан. Дараа нь том хэмжээтэй зургуудыг өгч, сүлжээг сургаж, дараа нь бүр ч илүү, бүр ч илүү, үүнийг эхнээс нь сургаж, маш их цаг үрэхгүй байхын тулд.

Оптиматоруудын тухай. Бид SGD, Adam хоёрыг ашигласан. Ийм байдлаар олон нийтийн тэргүүлэгчдийн самбарт 0,941-0,946 хурдыг өгсөн нэг загварыг авах боломжтой байсан нь нэлээд сайн юм.

Хэрэв та загваруудыг ямар нэгэн байдлаар нэгтгэвэл 0,951 орчимд хүрэх болно. Хэрэв та дахиад нэг техник ашиглавал бидний авсан шиг олон нийтийн самбар дээр 0,954 гэсэн эцсийн оноо авах болно. Гэхдээ энэ талаар дараа дэлгэрэнгүй. Дараа нь бид загваруудыг хэрхэн угсарч, ийм эцсийн хурдыг хэрхэн олж авснаа танд хэлэх болно.

Дараа нь би дулаан дахин эхлүүлэх эсвэл дулаан дахин эхлүүлэхтэй стохастик градиент уналтын талаар ярихыг хүсч байна. Товчоор хэлбэл, зарчмын хувьд та ямар ч оновчтой тохируулагчийг ашиглаж болно, гэхдээ гол зүйл бол: хэрэв та зүгээр л нэг сүлжээг сургаж, аажмаар энэ нь хамгийн бага хэмжээнд нийлдэг бол бүх зүйл зүгээр, та нэг сүлжээ авах болно, энэ нь тодорхой алдаа гаргадаг, гэхдээ та үүнийг арай өөрөөр сургаж болно. Та анхны сургалтын хурдыг тогтоож, энэ томъёоны дагуу аажмаар бууруулна. Та үүнийг бууруулснаар таны сүлжээ хамгийн бага хэмжээнд хүрнэ, дараа нь жингээ хэмнэж, сургалтын эхэнд байсан сургалтын хурдыг дахин тохируулж, энэ доод хэмжээнээс хаа нэгтээ дээшилж, сургалтын хурдаа дахин бууруулна.

Тиймээс та хэд хэдэн доод хязгаарт нэг дор очиж үзэх боломжтой бөгөөд үүнд таны алдагдал нэмэх эсвэл хасах нь ижил байх болно. Гэхдээ үнэн хэрэгтээ эдгээр жинтэй сүлжээнүүд таны болзоонд өөр өөр алдаа гаргах болно. Тэдгээрийг дундаж болгосноор та ямар нэгэн ойролцоо тооцоолол олж авах бөгөөд таны хурд илүү өндөр байх болно.

Гараар зурсан зургийн ангилал. Yandex-д мэдээлэх

Бид загваруудаа хэрхэн угсарсан тухай. Танилцуулгын эхэнд тестийн өгөгдлийн хэмжээ, хичээлийн тоо зэргийг анхаарч үзээрэй гэж хэлсэн. Хэрэв та тестийн багц дахь зорилтуудын тоонд 1-ийг нэмээд ангиудын тоонд хуваавал 330 гэсэн тоо гарах бөгөөд үүнийг форум дээр бичсэн - тестийн ангиуд тэнцвэртэй байна. Үүнийг ашиглаж болно.

Үүний үндсэн дээр Роман Соловьев тэргүүлэгчдийн самбартай нэлээн сайн уялдаж байсан прокси оноо гэж нэрлэсэн хэмжигдэхүүнийг гаргаж ирэв. Гол нь: та таамаглал хийж, таамаглагчидынхаа эхний 1-ийг аваад анги тус бүрийн объектын тоог тоол. Дараа нь утга тус бүрээс 330-ыг хасаад гарсан үнэмлэхүй утгыг нэмнэ.

Дараах утгыг олж авлаа. Энэ нь бидэнд шалгалтын тэргүүлэгчдийн самбар үүсгэх биш, харин орон нутгийн хэмжээнд баталгаажуулах, чуулгадаа коэффициент сонгоход тусалсан.

Чуулгатай бол та ийм хурдыг авч болно. Би өөр юу хийж чадах вэ? Та шалгалтандаа ангиуд тэнцвэртэй байна гэсэн мэдээллийг ашигласан гэж бодъё.

Тэнцвэр нь өөр байсан. Тэдний нэг жишээ - нэгдүгээр байр эзэлсэн залуусаас тэнцвэртэй байдал.

Бид юу хийсэн бэ? Бидний тэнцвэржүүлэх нь маш энгийн байсан, үүнийг Евгений Бабахнин санал болгосон. Бид эхлээд таамаглалаа эхний 1-ээр нь эрэмбэлж, тэдгээрээс нэр дэвшигчдийг сонгосон - ингэснээр ангиудын тоо 330-аас хэтрээгүй. Гэхдээ зарим ангиудын хувьд та 330-аас цөөн таамаглагчтай болно. За, мөн эхний 2 болон эхний 3-аар эрэмбэлье. , мөн бид нэр дэвшигчдийг сонгох болно.

Бидний тэнцвэржүүлэлт нэгдүгээр байрын тэнцвэржилтээс юугаараа ялгаатай байсан бэ? Тэд давтагдах аргыг хэрэглэж, хамгийн алдартай ангийг авч, тухайн анги хамгийн алдартай байхаа болих хүртэл тухайн ангийн магадлалыг цөөн тоогоор бууруулсан. Бид дараагийн хамгийн алдартай ангид орсон. Тиймээс бүх ангиудын тоо тэнцүү болтол тэднийг бууруулсаар байв.

Хүн бүр галт тэрэгний сүлжээнд нэмэх эсвэл хасах нэг аргыг ашигладаг байсан ч бүгд тэнцвэржүүлэлтийг ашигладаггүй. Тэнцвэржүүлэлтийг ашигласнаар та алт руу, хэрэв азтай бол мөнгө рүү орж болно.

Огноог хэрхэн урьдчилан боловсруулах вэ? Хүн бүр огноог нэмэх, хасах гэх мэтчилэн ижил аргаар боловсруулсан - гар хийцийн функцууд хийх, цаг хугацааг өөр өөр өнгөөр ​​​​кодлохыг оролдох гэх мэт. Энэ тухай 8-р байр эзэлсэн Алексей Ноздрин-Плотницкий ярьжээ.

Гараар зурсан зургийн ангилал. Yandex-д мэдээлэх

Тэр үүнийг өөрөөр хийсэн. Тэр таны гараар хийсэн эдгээр бүх боломжууд ажиллахгүй байна, та үүнийг хийх шаардлагагүй, таны сүлжээ энэ бүгдийг өөрөө сурах ёстой гэж тэр хэлэв. Үүний оронд тэрээр таны өгөгдлийг урьдчилан боловсруулсан сургалтын модулиудыг гаргаж ирэв. Тэр цэгийн координат ба цагийг урьдчилан боловсруулахгүйгээр анхны өгөгдлийг шидсэн.

Дараа нь тэр солбицол дээр үндэслэн зөрүүг авч, цаг хугацааны дагуу бүгдийг нь дундажлав. Тэгээд тэр нэлээд урт матрицыг гаргаж ирэв. Тэрээр 1xn хэмжээтэй матрицыг олж авахын тулд хэд хэдэн удаа 64 хэмжээст эргэлтийг ашигласан бөгөөд энд n нь нийт цэгүүдийн тоо бөгөөд үүссэн матрицыг сувгийн тоог хүлээн авдаг аливаа эргэлтийн сүлжээний давхаргад оруулахын тулд 64-ийг хийдэг. - 64. тэрээр 64xn матрицыг олж авсан, дараа нь үүнээс сувгийн тоо 64-тэй тэнцүү байхаар ямар нэгэн хэмжээтэй тензор үүсгэх шаардлагатай болсон. Тэрээр 0-ээс 32 хүртэлх бүх X, Y цэгүүдийг хэвийн болгож, 32х32 хэмжээтэй тензор. Тэр яагаад 32х32 хүссэнийг би мэдэхгүй, зүгээр л ийм зүйл болсон. Мөн энэ координат дээр тэрээр 64xn хэмжээтэй энэ матрицын фрагментийг байрлуулсан. Энэ нь зүгээр л 32x32x64 хэмжээтэй тензортой болсон бөгөөд үүнийг та өөрийн эргэлтийн мэдрэлийн сүлжээнд нэмж оруулах боломжтой. Үүнийг л хэлэхийг хүссэн юм.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх