قوانین فنی

 

قوانین فنی مسابقه

 

هدف اصلی در این مسابقه شناسایی مجموعه بسته چهره است. مجموعه گالری به تعداد N  و مجموعه پروب به تعداد M که M>>N توسط تیم ارزیاب در نظر گرفته شده است. ابتدا باید مجموعه گالری به صورت دستهای توسط محصول هر شرکت‌کننده ثبت نام شود. سپس هر یک از تصاویر پروب به صورت جداگانه برای شناسایی با تصاویر گالری مطابقت داده شوند. انتظار میرود همانند شکل 1، خروجی یک لیست کاندید K تایی به همراه امتیاز شباهت مربوطه باشد. مقدار K باید به صورت پارامتریک قابل تعریف باشد که حداکثر میتواند به اندازه N باشد. در مرحله اول مسابقه، تمام تیم‌ها مقدار K را برابر N در نظر بگیرند. در صورت رقابت نزدیک تیم‌های برتر برای مرحله دوم مسابقه که سایز گالری بسیار بزرگ‌تر خواهد بود، مقدار متفاوتی برای پارامتر K در نظر گرفته خواهد شد. اگر الگوریتم به هر دلیلی قادر به استخراج و ساخت الگو از یک تصویر گالری نبود، برای آن تصویر گالری نباید امتیاز شباهت وجود داشته باشد و به عنوان خطای عدم ثبت نام منظور خواهد شد. علاوه بر این، اگر الگوریتم از یک تصویر پروب نیز نتواند الگو استخراج نماید، نباید لیست متناظر با این تصویر تولید شود و به عنوان خطای عدم اکتساب منظور میشود. در این حالت نیازی به تولید لیست کاندید با امتیاز تماماً صفر وجود ندارد. 

بر اساس لیستهای خروجی، برای همه تیمهای شرکت کننده، منحنی CMC ترسیم شده و با احتساب نرخ FTE و FTA تیمها مورد ارزیابی قرار میگیرند. لازم به ذکر است علاوه بر دقت شناسایی، عوامل دیگری نظیر میزان حافظه مصرفی، اندازه قالب استخراج شده، زمان استخراج قالب و زمان تطبیق در رتبه بندی شرکت کنندگان تاثیر گذار خواهد بود. در ادامه توضیحات در مورد تصاویر، نحوه‌ی اجرا و خروجی مطلوب ارایه شده است.


شکل1- لیست کاندید حاصل از مقایسات

 

مشخصات تصاویر

 

مجموعه تصاویر گالری و پروب، شامل تصاویر رنگی و سطح خاکستری با عمق 8 یا 24 بیتی خواهند بود. تمام این تصاویر به فرمت jpg استاندارد فشرده شدهاند. ابعاد تصاویر مختلف بوده و در بازه‌ی30 پیکسل تا 2048 پیکسل متغیر است. در هر تصویر حداکثر یک چهره وجود دارد. چالشهای متداول تصاویر چهره نظیر نورپردازی نامناسب، زاویه سر سوژه، پوشیدگی چهره با عینک، کلاه و حجاب و سایر موارد در هر دو مجموعه گالری و پروب وجود دارد. محدوده سنی افراد در تصاویر از کودکی تا پیری را شامل می‌شود. در شکل 2 برخی از این تصاویر نشان داده شده است.

یک مجموعه داده نمونه جهت آشنایی تیم‌ها با تنوع و فرمت تصاویر در سایت قرار داده شده است که تیم‌ها میتوانند آن را از داشبورد تیم خود دریافت نمایند. 

 

قوانین اجرایی مسابقه 

 

هر تیم برای شرکت در مسابقه، کد خود را با توجه به فایل راهنما آماده کرده و برنامه‌ی اجرایی خود را در قالب یک داکر ایمیج در زمان مقرر در وب سایت بارگذاری خواهد نمود. این ایمیج، توسط تیم ارزیاب بر روی سیستم حاوی تصاویر گالری و پروب اجرا شده و پس از اجرای کامل برنامه، نتایج ذخیره شده در پایگاه داده (MongoDB) به منظور رسم نمودار CMC لحاظ میشود. لازم به ذکر است هیچ تیمی مجاز به استفاده از کتابخانه هایی که نیاز به اخذ مجوز یا لیسانس تجاری دارند، نبوده و در صورت محرز شدن این موضوع از مسابقه کنار گذاشته خواهند شد. لازم به توضیح است که به منظور آموزش چگونگی ساخت و اجرای داکر ایمیج، علاوه بر فایل راهنما، ویدئو‌ی آموزشی جداگانه ای نیز در سایت قرار گرفته است. 

 

راه‌اندازی محیط داکر

 

طبق راهنمای بخش 3 نیاز است یک محیط داکر در سیستم خود ایجاد نمایید. در این محیط دو داکر ایمیج وجود دارد. اولی یک http server برای دریافت تصاویر و دیگری یک MongoDB برای ذخیره نتایج می‌باشد. 

 

نحوه ارتباط با مجموعه تصاویر گالری و پروب

 

پس از اجرای فایل docker.sh یک داکر nginx با همین نام در موتور داکر شما به وجود می‌آید که حاوی تصاویر گالری و پروب نمونه می‌باشد. برای دسترسی به تصاویر گالری ابتدا از آدرس http://nginx/images/gallery/images.txt لیست نام تصاویر مجموعه گالری را دریافت کنید. فرمت این فایل به این شکل است که در هر سطر آن نام یک فایل تصویر گالری نوشته شده است. برای دسترسی به هر یک از این تصاویر کافی است نام فایل نوشته شده را به انتهای http://nginx/images/gallery/ اضافه نمایید. 

برای دسترسی به تصاویر پروب ابتدا از آدرس http://nginx/images/probe/images.txt لیست نام تصاویر مجموعه پروب را دریافت کنید. فرمت این فایل به این شکل است که در هر سطر آن نام یک فایل تصویر پروب نوشته شده است. برای دسترسی به هر یک از این تصاویر کافی است نام فایل نوشته شده را به انتهای http://nginx/images/probe/ اضافه نمایید. مثال مربوطه در بخش 3-1 قابل رویت است. 

 

نحوه ذخیره نتایج

 

همانطور که پیشتر اشاره شد، ابتدا مجموعه تصاویر گالری در محصول هر شرکت کننده ثبت نام میشود. سپس تصاویر پروب دریافت و به صورت تک به تک با تمام تصاویر گالری مطابقت داده می‌شود و فرمت خروجی بر اساس مشخصاتی که در ادامه ارایه میشود، تولید شده و ذخیره می‌گردد. 

یک داکر از نوع MongoDB با همین نام در موتور داکر شما ایجاد شده است. در این MongoDB یک پایگاه داده با نام لاتین تیم شرکت کننده ایجاد شده و پسورد آن نیز شماره موبایل سرگروه معرفی شده در سایت است. شرکت‌کننده باید خروجی خود را در این MongoDB با ویژگی‌های زیر ذخیره نماید: 

  • برای هر تصویر پروب یک رکورد به نام آن تصویر ایجاد شود.
  • در هر رکورد باید یک مجموعه Kتایی حاوی یک زوج مرتب نوشته شود که مولفه اول آن نام تصویر گالری و مولفه دوم، امتیاز شباهت این تصویر گالری با تصویر پروب این رکورد است.
  • همانطور که گفته شد، مقدار K برابر با مقدار N در نظر گرفته شود.
  • زوج‌ها میتوانند بر حسب امتیاز شباهت به ‌صورت نزولی مرتب شده‌ باشند ولی الزامی به انجام این کار وجود ندارد.

به ‌عنوان مثال فرض کنید پوشه گالری شامل سه تصویر با نام‌های زیر باشد.

Gallery1.jpg

Gallery2.jpg

Gallery3.jpg

و پوشه‌ی پروب شامل دو تصویر با نام‌های زیر باشد.

Probe1.jpg

Probe2.jpg

با این شرایط دو رکورد با نام‌های P1 و P2 به صورت زیر ذخیره خواهد شد.

P1: {(Gallery1, 0.9983), (Gallery3, 0.5343), (Gallery2, 0.0013)}

P2: {(Gallery2, 0.8505), (Gallery3, 0.5130), (Gallery1, 0.0134)}

دقت داشته باشید که در رکوردها حتما باید امتیاز شباهت درج شود و هرگونه عبارت دیگر نظیر NaN یا inf قابل قبول نیست و به عنوان خطا محسوب خواهد شد. مجدد یادآوری میگردد، اگر الگوریتم به هر دلیلی قادر به استخراج و ساخت الگو از یک تصویر گالری نبود، برای آن تصویر گالری نباید امتیاز شباهت وجود داشته باشد و به عنوان خطای عدم ثبت نام منظور خواهد شد. علاوه بر این، اگر الگوریتم از یک تصویر پروب نیز نتواند الگو استخراج نماید، نباید لیست متناظر با این تصویر تولید شود و به عنوان خطای عدم اکتساب منظور میشود. در این حالت نیازی به تولید لیست کاندید با امتیاز تماماً صفر وجود ندارد. به عنوان مثال اگر الگوریتم شما نتواند الگوی تصویر Gallery4.jpg را استخراج کند، نباید هیچ زوج مرتبی برای این تصویر در هیچ رکوردها وجود داشته باشد. اگر هم الگوریتم قادر به استخراج الگو از یک تصویر پروب نباشد، نباید رکورد متناظر با آن تصویر تولید شود. بدیهی است در صورت عدم رعایت هر یک از موارد فوق، شرکت کننده از مسابقه حذف خواهد شد.

 

راهنمای گام به گام انجام مراحل شرکت در مسابقه

 

برای راه‌اندازی محیط داکر خود ابتدا فایل docker.zip را از داشبورد تیم خود دریافت و پس از unzip کردن آن، مراحل زیر را دنبال کنید. 

 

نصب و اجرای داکرهای تست

 

برای نصب docker مراحل لینک زیر دنبال شود.

 https://docs.docker.com/engine/install/

در صورتی که از سیستم عامل غیر از ویندوز استفاده می‌شود، باید docker compose نیز از لینک زیر نصب شود. در نسخه ویندوزی به صورت پیش فرض docker compose نصب شده است.

https://docs.docker.com/compose/install/

همچنین برای اجرای اسکریپت‌های مورد نیاز در سیستم عامل ویندوز، باید از مسیر زیر git نصب شود.

https://git-scm.com/downloads

پس از نصب موارد بالا، در داخل پوشه docker راست کلیک نموده، سپس بر روی git bash here کلیک کرده و درون صفحه باز شده اسکریپت docker.sh را همانند شکل زیر اجرا نمایید.


شکل 3 - اجرای اسکریپت docker.sh

توجه نمایید که به جای team_name باید اسم لاتین تیم (که در سایت ثبت‎‌نام کرده‌اید) و به جای team_pass باید شماره موبایل سرگروه تیم را وارد کنید. با این کار در MongoDB پایگاه داده‌ای با نام کاربری اسم تیم و رمز عبور شماره موبایل سرگروه ساخته می‎شود. این امر جهت ارزیابی نتایج الگوریتم شما بسیار حائز اهمیت است چرا که تیم داوری به داده‌های شما با همین نام کاربری و رمز عبور دسترسی خواهد یافت.

در صورت بروز هر گونه مشکل در وارد کردن این موارد می‎توانید دستور زیر را اجرا کرده و سپس دستور start را دوباره اجرا نمایید.

./docker.sh stop

برای اطمینان از اجرای درست ایمیج‌ها، می توانید با استفاده از مرورگر سیستم خود آدرس‎های زیر را باز کنید.

http://localhost/images/gallery/images.txt

http://localhost/images/probe/images.txt

در این دو آدرس نام تمام فایل‌های تصاویر probe و gallery آمده است. برای مشاهده هر تصویر با داشتن اسم آن می توانید از آدرس‌های زیر استفاده کنید.

http://localhost/images/gallery/S000001.jpg

http://localhost/images/probe/S000029.jpg

 

یک نمونه کد تست جهت کار با داکرها

 

در صورت موفقیت در تست مرحله قبل، می توانید کد خود را برای کار با ایمیج‌‍‌ها بنویسید. جهت راحتی شما، در پوشه nextera_test یک نمونه کد پایتون برای برقراری ارتباط با پایگاه داده و دریافت تصاویر نوشته شده است. 

برای اجرای این کد باید نکات زیر لحاظ شود: 

  • در خط 9 به جای team_name باید اسم لاتین تیم و به جای team_pass باید شماره موبایل سرگروه تیم وارد شود.
  • کد فوق بر روی ماشین شما اجرا می‌شود. برای نسخه نهایی کد باید localhost را در خط 8 به MongoDB و در خطوط 14 و 17 به nginx تغییر دهید. برای ساخت ایمیج نهایی از کد خود و ارسال به مسابقه نیز نباید از localhost استفاده شود. بنابراین برای حالت تست و اجرا روی سیستم خود از localhost استفاده کنید و برای ساخت ایمیج نهایی و ارسال به مسابقه، localhost را در خط 8 به MongoDB و در خطوط 14 و 17 به nginx تغییر دهید.

قبل از اجرای کد تست، دستور زیر را اجرا نمایید تا پیش‎نیاز‎های مربوطه نصب شوند. فرض شده است که پایتون نسخه 2 یا 3 بر روی سیستم شما نصب است.

pip install -r requirements.txt

 

تهیه داکر از موتور خودتان جهت ارسال برای مسابقه

 

بعد از این که کد خود را نوشتید باید آن را در قالب داکر ایمیج برای مسابقه ارسال کنید. برای ساخت داکر ایمیج باید یک Dockerfile فایل نوشته شود. در پوشه nextera_test یک نمونه Dockerfile برای ساخت داکر ایمیج وجود دارد.


شکل 5 – داکر فایل برای ساخت ایمیج

  • دستور FROM مشخص می‌کند ایمیج از چه ایمیج پایه‌ای (base image) ساخته خواهد شد. از آن جا که در این مثال کد نمونه به زبان پایتون نوشته شده است، از ایمیج پایه python:3 استفاده شده است. از طریق آدرس https://hub.docker.com می توانید ایمیج پایه مورد نیاز خود را پیدا نمایید.
  • دستور WORKDIR یک دایرکتوری در /usr کانتینر به وجود می‌آورد. همچنین داخل کانتینر دایرکتوری را به همین دایرکتوری ساخته شده تغییر می‎دهد و از آن به بعد تمام کار‌ها در این دایرکتوری انجام می‎شود.
  • دستور COPY فایل requirements.txt را در آدرس /. کپی می‎نماید. این فایل برای نصب پیش‎نیاز‌های اجرای کد لازم است.
  • دستور RUN برای اجرای دستورات به کار می‌رود. به عنوان مثال، پیش‎نیاز‎ها با اجرای دستور زیر بر روی داکر ایمیج نصب می‌شوند.

pip install --no-cache-dir -r requirements.txt

  • دستور CMD برای اجرای فرمان‌های داکر در زمان آغاز به کار آن است. در مثال فوق، می‌خواهیم وقتی داکر ایمیج اجرا شد، اسکریپت ما با استفاده از پایتون اجرا شود.

بعد از تکمیل فایل داکر، برای ساخت داکر ایمیج لازم است دستور زیر را در پوشه شامل فایل داکر اجرا نماییم.

docker build --tag nextera_test /path/to/dockerfile

شما به هنگام ساخت داکر ایمیج باید به جای nextera_test از اسم لاتین تیم خود استفاده نمایید تا اسم داکر ایمیج اسم تیم خودتان باشد. 

سپس برای اجرای داکر ایمیج خود و ساخته شدن یک کانتینر می توانید از دستورات زیر استفاده نمایید.

  • تست و آزمایش (در سیستم خودتان)

توجه کنید که در این حالت باید از localhost در کد پایتون خود جهت اتصال به سرور و پایگاه داده استفاده کنید. سپس با دستور زیر فایل داکر را اجرا نمایید.

docker run --name nextera_test1 --network host -d nextera_test

  • ساخت ایمیج نهایی برای ارسال به مسابقه

زمانی که نتایج خود را در حالت تست نهایی کردید، جهت ساخت ایمیج نهایی لازم است ابتدا در کد خود برای اتصال به مجموعه تصاویر localhost را به nginx و برای اتصال به پایگاه داده بهMongoDB  تغییر دهید و سپس با دستور زیر فایل داکر را اجرا نمایید.

docker run --name nextera_test1 --network docker_default -d nextera_test

در دستورات فوق باید به جای nextera_test از اسم تیم خود و همچنین به جایnextera_test1  از یک اسم دلخواه دیگر استفاده نمایید. 

انتظار این است که پس از اجرای این دستور برنامه شما درون کانتینر اجرا شده تصاویر را از nginx گرفته و هر یک از تصاویر probe را با تمام تصاویر gallery مقایسه نماید و نتیجه مقایسه را درون پایگاه داده‌ای به نام اسم تیم شما در MongoDB وارد نماید.

فراموش نکنید که برای دسترسی به nginx بر روی سیستم خود از آدرس localhost و پورت 80 استفاده نمایید و برای دسترسی به MongoDB از آدرس localhost و پورت 27017 استفاده نمایید.

نهایتا برای ذخیره کردن ایمیج نهایی خود به صورت یک فایل از دستور زیر استفاده کنید.

docker save -o team_name.tar team_name

team_name را با نام تیم خود جایگزین کنید. اجرای دستور فوق یک فایل با نام team_name.tar در محل فعلی ایجاد می‌کند که در آن، ایمیج team_name ذخیره شده است. بعد از آرگومان –o می توانید آدرس دلخواهی برای ذخیره ایمیج تعیین کنید. 

از طریق داشبورد تیم خود و قسمت ارسال کد می توانید فایل team_name.tar را برای ارسال به مسابقه آپلود نمایید.