تشخیص اشیا با یادگیری عمیقl

سیستم نظارتی خودکار با استفاده از یادگیری عمیق

این مقاله، آموزشی سریع برای اجرای یک سیستم نظارتی ( Surveillance )، با استفاده از تشخیص شی ( Object Detection ) مبتنی بر یادگیری عمیق است. در اینجا، عملکرد مدل های مختلف تشخیص شی، در شناسایی عابر پیاده مقایسه می شود که از قابلیت چند پردازشی پردازشگر گرافیکی ( GPU Multiprocessing ) استفاده می کند.

نظارت، یک بخش جدایی ناپذیر از امنیت و پاسبانی است. در بسیاری از بخش ها، نیاز به زمان طولانی برای مراقبت و توجه در برابر رخداد مسئله ای نامطلوب احساس می شود. اگرچه انجام این کار بسیار مهم است، اما در عین حال، کاری بسیار ساده و پیش پا افتاده می باشد.

آیا اگر چیزی وجود داشته باشد که بتواند “مراقبت و انتظار” را برای ما انجام دهد، زندگی بسیار ساده تر نخواهد بود؟ خب، شما خوش شانس هستید. با پیشرفت های صورت پذیرفته در فناوری در طی چند سال اخیر، می توان با نوشتن برنامه هایی کارهای فوق را بصورت خودکار انجام داد. اما قبل از آنکه عمیق تر شویم، اجازه دهید از خود بپرسیم:

آیا ماشین ها بخوبی انسان ها هستند؟

هرکس که با مسائل مربوط به یادگیری عمیق آشنا باشد، می داند که کلاسه بند های تصویر، از دقت سطح بشر فراتر رفته اند.

نرخ خطا شبکه های عمیق و بینایی ماشین در Imagenet
نرخ خطا روی پایگاه داده ImageNet در طی زمان، برای انسان، روش های مرسوم بینایی ماشین و یادگیری عمیق . منبع

بله، یک ماشین می تواند در همان استاندارد های انسان و یا حتی بهتر از آن، تشخیص اشیا را انجام دهد. با استناد بر این گفته، استفاده از فناوری برای انجام نظارت، بسیار کارآمدتر است.

  • نظارت یک کار تکراری و پیش پا افتاده می باشد و ممکن است برای ما انسان ها عملکرد خوبی نداشته باشد. چنانچه فناوری، امر نظارت را انجام دهد، می توان در صورت رخداد یک رویداد نادرست، اقدامات لازم را انجام دهیم.
  • برای بررسی و نظارت وسعت بزرگی از زمین، نیاز به افراد زیادی است. دوربین های ثابت نیز دید محدودی دارند. با وجود ربات های نظارتی متحرک (مانند میکرو پهپاد ها) این مشکلات کاهش می یابند.

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

 

معقولانه است. اما چگونه می توان آن را خودکار نمود؟

قبل از استفاده از تئوری های پیچیده، به این فکر کنیم که نظارت در حالت عادی چگونه انجام می شود. ما به یک تصویر ویدیویی نگاه می کنیم و در صورت مواجه شدن با چیز غیرعادی، وارد عمل می شویم. بنابراین، در اصل، فناوری مورد نظر، باید هر فریم از ویدئو را بررسی کند تا بتواند متوجه موارد غیرعادی شود. این فرایند آشنا بنظر نمی رسد؟

همانطور که ممکن است حدس زده باشید، این فرایند، همان تشخیص شی همراه با محلی سازی (Object Detection with Localization  ) است. این روش با فرایند کلاسه بندی، که نیاز به دانستن موقعیت دقیق شی دارد، اندکی متفاوت است. علاوه بر این، می توان چندین شی را در یک تصویر مجزا داشته باشیم.

تشخیص اشیا با محلی سازی

برای یافتن موقعیت دقیق، الگوریتم ما باید هر بخش از تصویر را برای یافتن وجود یک کلاس بررسی کند. این موضوع سخت تر از آن چیزی باشد که بنظر می رسد. اما از سال ۲۰۱۴، با تحقیقات مکرر و مداوم در حوزه ی یادگیری عمیق، شبکه های عصبی مهندسی شده ای را طراحی کرده اند که می تواند اشیا را در زمان واقعی ( Real-Time ) شناسایی کند.

مقایسه سرعت شبکه های مختلف تشخیص شی
دقت کنید که چگونه تنها در طی دو سال عملکرد بهبود یافته است.

چندین معماری از یادگیری عمیق وجود دارد که از روش های مختلف درون خود برای انجام این کار استفاده می کنند. محبوب ترین این شبکه ها عبارتند از : Faster RCNN، YOLO و شبکه های SSD ( Single Shot Detector ).

نمودار سرعت و دقت شبکه های عصبی تشخیص شی
مصالحه سرعت در برابر دقت. یک میانگین دقت متوسط ( mAP ) بالاتر و زمان GPU پایین تر بهینه خواهد بود.

هر مدل به یک کلاسه بند پایه وابسته است، که تا حد زیادی روی دقت نهایی و نیز اندازه مدل تأثیر می گذارد. علاوه بر این، انتخاب تشخیص دهنده ی شی، می تواند بشدت روی پیچیدگی محاسباتی و نیز دقت نهایی تأثیر بگذارد.

زمانی که یک الگوریتم تشخیص شی انتخاب می شود، همواره مصالحه سرعت در برابر دقت در برابر اندازه وجود دارد.

در این مقاله یاد می گیریم، چگونه با استفاده از تشخیص شی، یک سیستم نظارتی ساده اما کارآمد بسازیم. در ابتدا به بررسی محدودیت های ناشی از ماهیت کار نظارت می پردازیم.

محدودیت های یادگیری عمیق در نظارت

اغلب دوست داریم روی وسعت بزرگی از زمین نظارت داشته باشیم. این موضوع منجر به عواملی می شود که باید قبل از خودکارسازی نظارت در نظر گرفته شوند.

۱- تصویر ویدیویی

بطور طبیعی، برای مراقبت از یک ناحیه بزرگ، ممکن است نیاز به چندین دوربین باشد. علاوه بر آن، این دوربین ها باید این داده ها را در جایی، خواه بصورت محلی و یا در مکانی دوردست، ذخیره کنند.

دوربین نظارتی
دوربین های نظارتی معمولی.

ویدئویی با کیفیت بالاتر، نسبت به یک فیلم با کیفیت پایین ، نیاز به حافظه بیشتری دارد. علاوه بر این، یک جریان ورودی RGB، سه برابر بزرگتر از یک جریان ورودی BW است. از آنجایی که تنها مقدار محدودی از جریان ورودی ذخیره می شود، کیفیت اغلب پایین نگه داشته می شود، تا بیشترین استفادع را از فضای ذخیره سازی انجام داده شود.

بنابراین، یک سیستم نظارتی مقیاس پذیر باید قادر باشد تصاویری با کیفیت پایین را تفسیر نماید. بنابراین، الگوریتم یادگیری عمیق ما باید روی چنین تصاویری نیز آموزش داده شود.

۲- توان پردازشی

اکنون که محدودیت ورودی انجام شد، می توان به پرسش بزرگتر پاسخ داد. کجا می توان داده های بدست آمده از منابع دوربین را پردازش نمود؟ دو روش برای انجام این کار وجود دارد:

  • پردازش روی یک سرور مرکزی

جریان های ویدئوی دوربین، بصورت فریم به فریم روی یک سرور و یا یک خوشه (کلاستر) از راه دور پردازش می شود. این روشی قدرتمند است و امکان استفاده از مزایای مدل های پیچیده با دقت های بالا را برای ما فراهم می کند. مشکل بارز تأخیر است؛ شما نیاز به اتصال اینترنت سریع برای محدود کردن تأخیر دارید. علاوه بر این، اگر شما از یک API تجاری استفاده نکنید، هزینه های تنظیمات سرور و نگهداری می تواند بسیار بالا باشد.

نمودار حافظه مورد نیاز و زمان پردازش Gpu شبکه های تشخیص شی
مصرف حافظه در برابر زمان استنتاج GPU (میلی ثانیه). بیشتر مدل های با عملکرد بالا حافظه زیادی را مصرف می کنند. (منبع)

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

نمودار پردازش بر ثانیه شبکه های عمیق تشخیص شی
قابلیت FPS مربوط به تشخیص دهنده های مختلف شی

عیب این روش این است که ریزپردازنده ها به اندازه GPU ها، قدرتمند نمی باشند و بنابراین ممکن است محبور شوید از مدل هایی با دقت پایین تر استفاده نمایید. این مسئله را می توان با استفاده از GPU های آنبورد، حل نمود، اما راه حلی گران می باشد. یک راه حل جالب استفاده از نرم افزاری مانند TensorRT است که می تواند برنامه شما را برای استنتاج بهینه نماید.

آموزش یک سیستم نظارتی

در این بخش، نحوه شناسایی عابران پیاده با استفاده از تشخیص شی را بررسی می کنیم. در اینجا از API تشخیص شی تنسورفلو استفاده می کنیم، تا ماژول تشخیص شی خود را ایجاد نماییم. ما بطور خلاصه نحوه راه اندازی API و آموزش آن را برای کار نظارت بررسی می کنیم. برای توضیح بیشتر می توانید این وبلاگ مشاهده کنید.

فرایند کلی در سه مرحله بصورت زیر خلاصه می شود:

  • آماده سازی داده ها
  • آموزش مدل
  • استنتاج
چرخه ی تشخیص شب شبکه های عصبی عمیق
چرخه ی کاری موجود در آموزش یک مدل تشخیص شی

چنانچه احساس می کنید مشاهده نتایج، انگیزه بیشتری به شما برای ادامه ی آموزش می دهد، به مرحله سوم مراجعه کنید.

مرحله ۱ : آماده سازی داده ها

گام ۱ : تهیه پایگاه داده

فیلم های نظارتی گرفته شده قدیمی، شاید دقیق ترین پایگاه داده ای باشد که می توانید بدست آورید. اما در بسیاری از موارد، گرفتن چنین فیلم هایی بسیار دشوار می باشد. در این حالت، می توان تشخیص شی خود را آموزش داد، تا اهداف ما را از تصاویر عادی شناسایی کند.

حاشیه نویسی تصاویر تشخیص شی
یک نمونه تصویر حاشیه نویسی شده از پایگاه داده ما

همانگونه که قبلاً گفته شد، تصاویر در دوربین شما دارای کیفیت پایین تری هستند. بنابراین، شما باید مدل خود را برای کار درچنین شرایطی آموزش دهید. یک روش بسیار زیبا برای انجام این کار، داده افزایی ( Data Augmentation ) است که در این سایت تشریح شده است. اساساً باید مقداری نویز اضافه نمود، تا کیفیت تصاویر موجود در پایگاه داده کم شود. همچنین می توان افکت های تاری و ساییدگی را نیز آزمایش نمود.

ما از پایگاه داده TownCentre استفاده کردیم. از ۳۶۰۰ فریم نخست ویدئو، برای آموزش و اعتبارسنجی و از ۹۰۰ فریم باقیمانده برای تست استفاده کردیم. شما می توانید از اسکریپت های نوشته شده در گیت هاب من برای استخراج پایگاده داده استفاده کنید.

گام ۲ : حاشیه نویسی پایگاه داده

شما می توانید از ابزاری مانند LabelImg برای انجام حاشیه نویسی ( Annotation ) استفاده کنید. این یک کار خسته کننده ولی در عین حال مهم است. این حاشیه نویسی ها بصورت فایل های XML ذخیره می شوند.

خوشبختانه، مالکان پایگاده داده TownCentre، حاشیه ها را در فرمت csv آماده کرده اند. من یک اسکریپت سریع برای تبدیل حاشیه ها به فرمت XML مورد نیاز نوشتم که در گیت هاب من موجود است.

گام ۳ : یک کپی از مخزن گیت هاب من تهیه کنید

دستورات زیر را برای نصب ملزومات اجرا کنید، برخی از کتابخانه های Protobuf را کامپایل کنید و متغیرهای مسیر ر اتنظیم کنید.

pip install -r requirements.txt
sudo apt-get install protobuf-compiler
protoc object_detection/protos/*.proto --python_out=.
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim

گام ۴ : آماده سازی ورودی های پشتیبان

باید شناسه ای به هدف ما اختصاص یابد. این شناسه در فایل label_map.pbtxt بصورت زیر تعریف می شود:

item {
 id: 1
 name: ‘target’
}

سپس باید یک فایل متنی با اسامی XML و فایل های تصویری ایجاد کنید. برای نمونه، اگر img1.jpg , img2.jpg و img1.xml , img2.xml در پایگاه داده خود داشته باشید، فایل trainval.txt باید بصورت زیر باشد:

img1
img2

پایگاه داده خود را به دو فولدر تقسیم کنید: images و annotations. label_map.pbtxt و trainval.txt را در فولدر annotations قرار دهید. فولدری تحت عنوان xmls در داخل فولدر annotations ایجاد کنید و تمام XML های خود را در درون آن قرار دهید. سلسله مراتب دایرکتوری شما باید بصورت زیر باشد:

-base_directory
|-images
|-annotations
||-xmls
||-label_map.pbtxt
||-trainval.txt

گام ۵ : ایجاد رکوردهای تنسورفلو

API ، ورودی ها را در فرمت فایل TFRecords می پذیرد. از فایل create_tf_record.py ایجاد شده در گیت هاب من استفاده کنید، تا پایگاه داده خود را بهTFRecords  تبدیل کنید. باید فرمان زیر را در دایرکتوری پایه خود اجرا کنید:

python create_tf_record.py \
    --data_dir=`pwd` \
    --output_dir=`pwd`

پس از اتمام اجرای برنامه، دو فایل train.record و val.record قابل مشاهده است.

مرحله ۲ : آموزش مدل

گام ۱ : انتخاب مدل

همانگونه که قبلاً بیان شد، همواره بین دقت و سرعت مصالحه وجود دارد. همچنین، ساختن و آموزش یک تشخیص دهنده شی بسیار زمان بر است. بنابراین API تشخیص شی تنسور فلو، مجموعه ای از مدل های از پیش آموزش دیده را فراهم می کند، که شما می توانید آن را برای استفاده خود تنظیم کنید. این فرایند یادگیری انتقالی ( Transfer Learning ) نامیده می شود و روند آموزش شما را سرعت می بخشد.

مدل های پیش آمورش دیده ی تشخیص شی
مجموعه ای از مدل های از پیش آموزش دیده روی پایگاه داده MS COCO

یکی از این مدل ها را دانلود کنید و محتوای آن را در داخل دایرکتوری پایه خود استخراج نمایید. شما نقاط بررسی ( Checkpoint ) مدل، یک نمودار استنتاج و یک فایل pipeline.config را خواهید داشت.

گام ۲ : تعریف کار آموزش

شما باید کار آموزش ( Training Job ) را در فایل pipeline.config تعریف کنید. این فایل را در دایرکتوری پایه خود قرار دهید. آنچه واقعاً مهم است، چند خط آخر فایل است؛ شما تنها نیاز است مقادیر هایلایت شده را در مکان های مربوطه فایل خود تنطیم کنید.

gradient_clipping_by_norm: 10.0
  fine_tune_checkpoint: "model.ckpt"
  from_detection_checkpoint: true
  num_steps: 200000
}
train_input_reader {
  label_map_path: "annotations/label_map.pbtxt"
  tf_record_input_reader {
    input_path: "train.record"
  }
}
eval_config {
  num_examples: 8000
  max_evals: 10
  use_moving_averages: false
}
eval_input_reader {
  label_map_path: "annotations/label_map.pbtxt"
  shuffle: false
  num_epochs: 1
  num_readers: 1
  tf_record_input_reader {
    input_path: "val.record"
  }
}

گام ۳ : شروع آموزش

برای شروع آموزش، فرمان زیر را اجرا کنید. توصیه می شود از سیستمی با یک GPU به اندازه کافی بزرگ (به اندازه ای که بتوان نسخه ی GPU تنسورفلو را نصب کرد) استفاده کنید تا روند آموزش را تسریع نماید.

python object_detection/train.py \
--logtostderr \
--pipeline_config_path=pipeline.config \
--train_dir=train

مرحله ۳ : استنتاج

گام ۱ : صدور مدل آموزش دیده

قبل از استفاده از مدل، باید فایل های آموزش دیده را به یک نمودار استنتاج صادر ( Export ) کنید، که کاری بسیار ساده است؛ فقط کد زیر را اجرا کنید (XXXXX را با شماره نقطه بررسی جایگزین کنید):

python object_detection/export_inference_graph.py \
--input_type=image_tensor \
--pipeline_config_path=pipeline.config \
--trained_checkpoint_prefix=train/model.ckpt-xxxxx \
--output_directory=output

در نهایت، فایلی با عنوان frozen_inference_graph.pb را به همراه مجموعه ای از فایل های نقطه بررسی بدست می آورید.

گام ۲ : استفاده از آن روی یک جریان ویدئویی

لازم است فریم ها به صورت مجزا از ویدئوی ما استخراج شوند، که با استفاده از روش  VideoCapture در OpenCV بصورت زیر انجام می شود:

cap = cv2.VideoCapture()
flag = True
while(flag):
    flag, frame = cap.read()
    ## -- Object Detection Code --

کد استخراج داده استفاده شده در مرحله ۱، بصورت خودکار، فولدر test_images را با مجموعه تصاویر تست ما ایجاد می کند. با اجرای کد زیر می توان مدل را روی داده های تست آزمایش کرد:

python object_detection/inference.py \
--input_dir={PATH} \
--output_dir={PATH} \
--label_map={PATH} \
--frozen_graph={PATH} \
--num_output_classes=1 \
--n_jobs=1 \
--delay=0

آزمایش ها

همانگونه که قبلاً اشاره شد، با انتخاب یک مدل تشخیص شی، همواره مصالحه ای بین دقت و سرعت وجود دارد. آزمایش هایی انجام شد که در آن ها، سرعت پردازش فریم ( FPS ) و نیز دقت تعداد افراد شناسایی شده با استفاده از سه مدل مختلف اندازه گیری شد. علاوه بر این، آزمایش ها روی محدودیت های منابع مختلف (محدودیت های موازی سازی GPU) اجرا شدند. نتیجه این آزمایش ها در هنگام انتخاب مدل تشخیص شی، نتایج ارزشمندی را در اختیار ما قرار می دهد.

تنظیمات

مدل های زیر برای آزمایش ما انتخاب شدند. این مدل ها در Model Zoo  از API های تشخیص شی تنسورفلو موجود هستند.

  • Faster RCNN with ResNet 50
  • SSD with MobileNet v1
  • SSD with InceptionNet v2

تمام این مدل ها روی گوگل کولب در ۱۰۰۰۰ گام آموزش داده شدند (یا تا زمانی که تلفات اشباع شود). برای استنتاج، از یک نمونه AWS p2.8xlarge استفاده شده است. دقت تعداد، با مقایسه تعداد افراد شناسایی شده با مدل، و حقیقت مبنا (Ground Truth) محاسبه شده است. سرعت استنتاج در قالب فریم در ثانیه تحت محدودیت های زیر تست شد:

  • یک GPU
  • دو GPU بصورت موازی
  • چهار GPU بصورت موازی
  • هشت GPU بصورت موازی

نتایج

در اینجا خروجی ایجاد شده با استفاده از FasterRCNN روی داده های تست ما آورده شده است. همچنین در انتهای این مقاله، ویدئویی ضمیمه شده است که خروجی ایجاد شده توسط هر مدل را مقایسه می کند.

تشخیص شی با شبکه های عمیق عابرین پیاده

زمان آموزش

نمودار زیر، زمان مورد نیاز برای آموزش هر مدل را در طی ۱۰۰۰۰ گام نشان می دهد (در واحد ساعت). این زمان به استثنای زمان مورد نیاز برای جستجوی یک ابرپارامتر ( Hyperparameter ) است.

زمان 1000 گام آموزش شبکه های تشخیص شی

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

سرعت (فریم در ثانیه)

این قسمت، جالب ترین بخش از آزمایش ما می باشد. همانگونه که قبلاً بیان شد، عملکرد FPS را روی سه مدل با پنج محدودیت منبع مختلف اندازه گیری می کنیم. نتایج بصورت زیر می باشد:

سرعت در برابر تعداد پردازنده گرافیکی تشخیص شی

SSDها بسیار سریع هستند و در زمان استفاده از یک GPU مجزا سرعت بیشتری نسبت به Faster RCNN دارند. با این حال، Faster RCNN زمانی که تعداد  GPUها افزایش یابد (پردازش بصورت موازی)، به سرعت به SSD خواهد رسید. همچنین، SSD با MobileNet بسیار سریع تر از SSD با InceptionNet است.

یک ویژگی قابل توجه از نمودار فوق این است زمانی که تعداد  GPUها را برای SSD با MobileNet افزایش دهیم، FPS اندکی کاهش می یابد. یک پاسخ ساده برای این پارادوکس واضح وجود دارد. مشخص است که تنظیمات ما، تصاویر را سریع تر از آنچه توسط تابع فراخوانی تصویر فراهم شده است، پردازش می کند.

سرعت سیستم پردازش ویدئوی شما نمی تواند بیشتر از سرعت ورود تصاویر به سیستم باشد.

برای اثبات این فرضیه، فرصتی به تابع فراخوانی تصویر داده می شود. نمودار زیر بهبود FPS را برای SSD همراه با MobileNet نشان می دهد (زمانی که یک تأخیر اضافه شده باشد). کاهش اندک FPS در نمودار قبلی بدلیل سربار ایجاد شده از چندین GPU درخواست کننده برای ورودی است.

سرعت پردازش نسبت به وقفه تشخیص شی

با وارد نمودن تأخیر، یک افزایش در FPS مشاهده می شود. نکته مهم آن است که باید یک خط لوله انتقال تصویر بهینه برای جلوگیری از تنگنا برای سرعت داشته باشیم. اما از آنجایی که مورد استفاده مد نظر ما، مبحث نظارت است، یک تنگنای اضافی داریم. FPS دوربین مداربسته، کران بالایی را برای FPS در سیستم ما تعیین می کند.

دقت شمارش

دقت تعداد، بصورت درصدی از افراد که با استفاده از سیستم تشخیص شی ما، بدرستی شناسایی شده اند، تعریف می شود. این تعریف با توجه به مبحث نظارت، مناسب تر است. در اینجا، نحوه عملکرد هر یک از مدل های ما بیان شده است:

دقت نسبت به مدل تشخیص شی

Faster RCNN دقیق ترین مدل می باشد. همچنین عملکرد MobileNet بهتر از InceptionNet است.

براساس آزمایش های انجام شده، بدیهی است که مصالحه ای بین سرعت و دقت وجود دارد. با این حال، چنانچه منابع کافی در اختیار باشد، از مدلی استفاده می کنیم که دارای دقت بالا و در یک نرخ FPS خوب باشد. مشاهده می شود که Faster RCNN با ResNet-50 دقت بهتری را بدست می دهد و زمانی نرخ بسیار خوبی از FPS وجود خواهد داشت که ۴ واحد پردازنده گرافیکی بصورت موازی بکار گرفته شوند.

مراحل زیادی را پشت سر گذاشتیم!

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

راه حل بهتر، استفاده از یک سرویس API است که در حال حاضر روی سرور ها استفاده است، بصورتیکه می توان تنها نگران توسعه نتیجه خود بود. اینجا جایی است که نانو شبکه ها ( Nanonet ) وارد می شوند. آن ها API خود را روی سخت افزارهایی با GPU توسعه داده اند، بصورتیکه می توان عملکرد فوق العاده ای را بدون هیچگونه زحمتی بدست آورد.

من حاشیه نویسی های خود در فرمت XML را به فرمت JSON تبدیل کردم و آن را به API نانوشبکه ها دادم. در حقیقت، چنانچه نمی خواهید بصورت دستی داده های خود را حاشیه نویسی کنید، می توانید به آن ها درخواست انجام این کار را بدهید. در اینجا، چرخه ی کاری کاهشی یافته نانو شبکه ها نشان داده شده است.

چرخه تشخیص شی نانو شبکه ها
گردش کاری کاهش یافته با نانوشبکه ها

پیش از این، اشاره شد که واحد های نظارتی متحرک مانند میکروپهپاد ها چگونه می توانند کارایی را تا حد زیادی افزایش دهند. می توان چنین پهپاد هایی را به آسانی با استفاده از ریزپردازنده هایی مانند Raspberry Pi ایجاد کرد و نیز می توان از فراخوانی های API برای انجام استنتاج استفاده نمود.

شروع کار با API نانو شبکه ها برای تشخیص شی بسیار آسان است، اما برای راهنمایی بیشتر می توانید این مقاله را بررسی کنید.

نتایج با نانو شبکه ها

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

FasterRCNN Count Accuracy = 88.77%
Nanonets Count Accuracy = 89.66%

در اینجا عملکرد هر چهار مدل استفاده شده روی پایگاه داده تست نمایش داده شده است. بدیهی است که هر دو مدل SSD اندکی ناپایدار بوده و دقت پایین تری دارند. با این حال، اگرچه FasterRCNN و نانو شبکه ها دقت های قابل مقایسه ای دارند، اما نانو شبکه ها کادرهای محصور کننده ( Bounding Box ) پایدارتری را بدست می دهند.

آیا سیستم نظارت خودکار قابل اجرا می باشد؟

یادگیری عمیق یک ابزار شگفت انگیز است و نتایج خوبی را به آسانی ارائه می دهد. اما تا چه اندازه می توان به سیستم نظارتی اطمینان کنیم که کار خود را به تنهایی انجام دهد؟ چندین مورد وجود دارد که این خودکار سازی در آن ها قابل بحث و بررسی می باشد.

۱-     نتیجه گیری های نامفهوم

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

تکنیک هایی مانند پس انتشار هدایت شده می توانند تصمیمات را تا حدودی تشریح نماید، اما ما همچنان راهی طولانی در پیش داریم.

۲-     حملات تخاصمی

سیستم های یادگیری عمیق، شکننده هستند. حملات تخاصمی، مشابه با توهمات نوری برای کلاسه بند های تصویر هستند. اما بخش ترسناک آن این است که یک آشفتگی غیرقابل توجه محاسبه شده می تواند یک مدل یادگیری عمیق را مجبور به کلاسه بندی نادرست نماید. محققان با استفاده از اصول مشابه، قادر هستند تا سیستم های نظارتی مبتنی بر یادگیری عمیق را با استفاده از عینک های تخاصمی مدیریت کنند.

۳-     مثبت های کاذب

مسئله دیگر آن است که در صورت رخداد مثبت های کاذب باید چه کاری انجام داد. شدت این مسئله به کاربرد بستگی دارد. برای نمونه، یک مثبت کاذب روی یک سیستم پاسبانی مرزی ممکن است مهم تر از یک سیستم پایش باغچه باشد. جهت جلوگیری از حوادث ناگوار، باید مداخله انسان تا حدودی وجود داشته باشد.

۴-     چهره های مشابه

متأسفانه، چهره ی شما به اندازه اثر انگشت شما منحصر بفرد نیست. دو نفر ممکن است بسیار شبیه به هم به نظر برسند. دوقلو های همسان یکی از مثال های اصلی در این مورد است. گزارش شده که Apple Face ID نتوانسته دو همکار چینی را از هم تشخیص دهد. این مسئله می تواند نظارت بر افراد و نیز شناسایی آن ها را دشوار تر کند.

۵-     عدم تنوع در پایگاه های داده

الگوریتم های یادگیری عمیق به اندازه داده هایی که در اختیارشان قرار می گیرد خوب هستند. عمومی ترین پایگاه های داده ی چهره های انسان ها، تنها دارای نمونه هایی از افراد سفید پوست هستند. در حالیکه برای یک کودک هم بدیهی است که افراد می توانند رنگ پوست های متفاوتی داشته باشند. در حقیقت، گوگل با این مشکل روبرو شد، زیرا یک فرد سیاه پوست را به اشتباه به عنوان یک گوریل تشخیص داد.

در مورد نانو شبکه ها : این شبکه ها API هایی برای تسهیل یادگیری عمیق برای توسعه دهندگان می باشند. برای اطلاعات بیشتر، به سایت https://www.nanonets.com مراجعه کنید.

بیشتر بخوانید :

منبع Medium

درباره‌ی احمدرضا جعفری

همچنین ببینید

آیا می خواهید در زمینه یادگیری ماشین استخدام شوید؟

آیا می خواهید در زمینه یادگیری ماشین استخدام شوید؟

مسیر های شغلی زیادی در حوزه یادگیری ماشین وجود دارد، اما از کجا بفهمیم که …

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *