آموزش شناسایی اشیا با تنسورفلو - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

آموزش شناسایی اشیا با تنسورفلو

+1 امتیاز
سلام.آیا کسی شناسایی اشیا با tensorflow کار کرده ؟اگر کسی بلده راهنمایی کنه من هم یاد بگیرم.
سوال شده خرداد 11, 1397  بوسیله ی همایون (امتیاز 220)   10 38 43

2 پاسخ

+2 امتیاز
 
بهترین پاسخ

تنظیم پارامترهای مدل :

چنانچه در عملیات شناسایی آبجکت به دقت بالا نیاز داشته باشید  و مدت زمان پردازش برای شما اهمیتی نداره از مدل FaseterR-CNN استفاده کنید و بالعکس اگر مدت زمان پردازش برایتان اهمیت دارد از مدل SSD استفاده کنید.

برای انتخاب مدل مناسب به مسیر object_detection\samples\configs رفته و مدل مد نظر را کپی و در مسیری دیگر کپی کنید تا پارامترهای مورد نیازتان را تغییر دهید. پارامتر num_classes در این فایل با توجه به دیتاست جدید تغییر می کند.

 

تعریف ورودی :

Api شناسایی آبجکت از فایل tfrecord استفاده می کند.کاربر باید مسیر فایل های آموزش و evalution را مشخص کند همچنین فایل lable map هم باید مشخص شود این فایل رابطه بین شناسه کلاس و نام کلاس مشخص می کند.

مسیر فایل tfrecord به صورت زیر مشخص می شود.


tf_record_input_reader {
    input_path: filename.tfrecord"
  }

 

مسیر فایل lable map هم به صورت زیر مشخص می شود.

 

label_map_path: "filename.pbtxt"

 

فایل های مربوط به train  در بخش train_input_reader مشخص می شود.
فایل های مربوط به evalution در بخش eval_input_reader مشخص می شود.
 
تنظیم پارامترهای Trainer
 

Train_config بخش های مختلف پروسه آموزش را مشخص می کند.

  1. مقداردهی پارامترهای مدل
  2. پیش پردازش ورودی
  3. پارامترهای SGD

یک مثال از train_config به صورت زیر است:


batch_size: 1
optimizer {
  momentum_optimizer: {
    learning_rate: {
      manual_step_learning_rate {
        initial_learning_rate: 0.0002
        schedule {
          step: 0
          learning_rate: .0002
        }
        schedule {
          step: 900000
          learning_rate: .00002
        }
        schedule {
          step: 1200000
          learning_rate: .000002
        }
      }
    }
    momentum_optimizer_value: 0.9
  }
  use_moving_average: false
}
fine_tune_checkpoint: "/usr/home/username/tmp/model.ckpt-#####"
from_detection_checkpoint: true
gradient_clipping_by_norm: 10.0
data_augmentation_options {
  random_horizontal_flip {
  }
}

 

 

مقداردهی پارامترهای مدل

از آنجائیکه شناسایی آبجکت از ابتدا کار بسیار زمانگیری است جهت سرعت بخشیدن به عملیات آموزش توصیه می کنیم که از پارامترهای feature extractor موجود استفاده مجدد شود. این پارامترها تحت عنوان فایل chckpnt برای عملیات شناسایی و طبقه بندی استفاده می شود.این بخش دو پارامتر fine_tune_checkpoint و from_detection_checkpoint  دارد که پارامتر اول نام فایل chckpnt از قبل موجود را در آن معرفی می کنیم و پارامتر دوم هم برای عملیات شناسایی true می کنیم.

 

پیش پردازش ورودی :

data_augmentation_options در بخش train_config تعیین می کند که به چه صورت داده های ورودی ما تغییر کند.

 

پارامترهای SGD :

یکی از موارد قابل تنظیم در train_config بخش هایپر پارامترهای گرادیان نزولی است.انتخاب پارامترهای بهینه در این بخش به نحوه راه اندازی عملیات آموزش بستگی دارد مثلا تعداد worker ها یا نوع GPU و غیره ...

 
پاسخ داده شده خرداد 11, 1397 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
انتخاب شد آذر 2, 1397 بوسیله ی همایون
+2 امتیاز

نسخه gpu از tensorflow را نصب کنید.

pip install tensorflow-gpu

Lxml,pillow,matplotlib را از طریق pip نصب کنید.

دانلود مخزن models از https://github.com/tensorflow/models

git clone --quiet https://github.com/tensorflow/models.git --progress --verbose

برای آموزش شناسایی آبجکت باید مخزن بالا را در روت تنسورفلو دریافت کنید یا اینکه مخزن را به صورت فایل .zip دریافت و در روت تنسورفلو بازش کنید پوشه اش را به نام models تغییر نام بدید.

کامپایل فایل های Proto

دانلود protoc از این آدرس https://github.com/google/protobuf/releases (protoc-3.5.1-win32.zip)

protoc.exe برنامه هستش که فایل proto را به کد تبدیل می کنه.

چون api شناسایی آبجکت تنسورفلو ازprotobuf جهت تنظیم مدل و پارامترهای آموزش استفاده میشه.قبل از اینکه فریم ورک بتونه کار کنه ما باید کل فایل های proto را که در پوشه protos در api شناسایی قرار دارند را با دستورات زیر کامپایل کنیم:

cd  models\research
protoc object_detection/protos/*.proto --python_out=.
copy object_detection\packages\tf2\setup.py .
python -m pip install .

 

افزودن کتابخانه به PYTHINPATH :

مسیر tensorflow\models و tensorflow\models\research و مسیر tensorflow\models\research\slim را به PYTHONPATH اضافه کنید.

 

تست نصب صحیح :

python object_detection/builders/model_builder_test.py

تست نسخه 2:

python object_detection/builders/model_builder_tf2_test.py

پس از اجرا پیغام زیر را باید ببینید:

Ran 11 tests in 0.045s

 
OK

 

تنظیم پارامترهای آموزش شناسایی آبجکت:

Api شناسایی آبجکت تنسورفلو از فایل protobuf جهت تنظیم پارامترهای مربوط به train و evalution استفاده می کند شمای کلی این ساختار در فایل object_detection/protos/pipeline.proto ذکر شده است. در بالاترین سطح این فایل از 5 بخش زیر تشکیل شده است:

تنظیمات model : در این بخش ، نوع مدلی را مشخص می کنیم همان مدلی که قصد داریم آموزش بدیم.

train_config : در این بخش مشخص می کنیم کدام یک از پارامتر های آموزش را قصد داریم تغییر بدیم( پارامترهای SGD،پیش پردازش های ورودی و مقداردهی اولیه feature extractor)

eval_config : در این بخش مشخص می کنیم در خلال عملیات evalution چه متریکی های گزارش شود(PASCAL_VOC متریک)

train_input_config : در این بخش اطلاعات دیتاست جدید جهت آموزش را برای مدل مشخص می کنیم.

Eval_input_config : در این بخش اطلاعات دیتاست که برای evalution در نظر گرفته ایم را مشخص می کنیم این دیتاست باید متفاوت با دیتاست آموزش باشد.

ساختار کلی فایل config به شکل زیر است:

model {
(... تنظیم پارامترهای مدل...)
}
 
train_config : {
(... تنظیم پارامترهای آموزش ...)
}
 
train_input_reader: {
(... تنظیم پارامترهای دیتاست آموزش...)
}
 
eval_config: {
(... تنظیم پارامترهای متریک ارزیابی ...)
 
}
 
eval_input_reader: {
(... تنظیم دیتاست ارزیابی ...)
}


 

پاسخ داده شده خرداد 11, 1397 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
ویرایش شده تیر 19, 1401 بوسیله ی مصطفی ساتکی
سلام
این رو همیشه موقع اجرا میخاد چجوری میشه به مسیر پایتون اضافی کرد که در دفعات بعدی نیازی به اجرای این کد نباشد
<مسیر tensorflow\models\research و مسیر slim را به PYTHONPATH اضافه کنید.>
...