تبدیل داده های تصویر به فایل lmdb (قابل استفاده برای شبکه های cnn در caffe)

60 views
Skip to first unread message

Soodabe Zarezade

unread,
Jul 24, 2016, 6:19:31 AM7/24/16
to IranDeepLearning
سلام دوستان 
برای تبدیل داده ها به فایلی که caffe می تونه از اون برای train شبکه استفاده کنه براساس سرچی که انجام دادم ظاهرا دو روش هست : 
۱- استفاده مستقیم از فایل convert_images در پوشه tools 
۲- استفاده از فایل create_imagenet.sh (در صورتی که مسیر فایلهارو متناسب با چیزی که نیاز داریم تغییر بدیم) . 
ممنون میشم اگر آشنایی دارید در این خصوص توضیح بدید که دقیق چه کاری باید برای هر کدوم از روشها انجام بدیم !
سوال من بیشتر در مورد روش دوم هست / اینکه متغیر های  EXAMPLE , DATA, TOOLS , TRAIN_DATA_ROOT , TEST_DATA_ROOT را باید چطور مقدار دهی کنیم ! 
داده های من شامل ۶۰۰۰۰ تصویر هست و فایل های test , train , val به همراه لیبل داده ها مشخص شده !
ممنون

Seyyed Hossein Hasanpour

unread,
Jul 24, 2016, 6:27:29 AM7/24/16
to IranDeepLearning
سلام 
همون اولیه کفایت میکنه . 
اول برای راحتی کار یه پوشه درست کنید مثلا دیتاست ترین! تو این پوشه  هر دسته تو یه پوشه قرار گرفته باشه . مثلا پوشه هواپیما عکس هواپیما پوشه گربه عکس گربه ها و...  
بعد برای هر دیتاستی هم که میخوایید بسازید (ترین ول یا تست ) باید یه فایل متنی که آدرس هر عکس با لیبلش توش نوشته شده داشته باشید . یادتون باشه آدرس عکسا باید نسبی باشه یعنی مثلا داشته باشید 
airplane/airplane1.png 0 
که اولی پوشه و دومی عکس و اون 0 هم کلاس اون هواپیماست . 
بعد برنامه رو اجرا کنید از شما چندتا چیز میخواد 
اولی میگه پوشه ای که عکسا توش هست رو بمن بده (منظور همون دیتاست ترین هست) 
بعدی میگه فایل لیبل رو بمن بده 
بعد هم میگه فرمت مثلا دیتاست شما چی باشه که مشخص میکنید . 

تو مورد دوم هم که سوال کردید همین چیزا رو لازم داره تولز و دیتا و اگزمپل هم باید مسیر پوشه های مربوط به اینها رو بدید (اگه با ایمیج نت کار میکنید) 
اگر نه استفاده از همون convert_image_set استفاده ازش راحت تره به مراتب (برای من اینطور بود)

Soodabe Zarezade

unread,
Jul 24, 2016, 9:21:09 AM7/24/16
to IranDeepLearning
من با مورد اول مشکل دارم روندی که میرم رو میگم اگر ممکن هست راهنمایی کنید ! 
فقط باید بگم که لیلبل داده های من یک سری عدد حقیقی اعشاری بین صفر و یک هستند و نمی تونم دسته بندی که فرمودید را انجام بدم 
. تمام تصاویر من توی پوشه ای به اسم images هستند . و پوشه splits فایلهای txt رو دارم . 
من دستور را به صورت زیر اجرا کردم 
GLOG_logtostderr=1 caffe-master/build/tools/convert_imageset \--resize_height=256 --resize_width=256 --shuffle \ /home/lamem/images \ /home/lamem/splits/train_1.txt \ /home/lamem/my_lmdb
اما خطای زیر را به من میده !
I0724 17:49:53.521272 15185 convert_imageset.cpp:86] Shuffling data
I0724 17:49:53.643261 15185 convert_imageset.cpp:89] A total of 0 images.
F0724 17:49:53.643334 15185 db_lmdb.cpp:13] Check failed: mkdir(source.c_str(), 0744) == 0 (-1 vs. 0) mkdir  /home/lamem/my_lmdb failed
*** Check failure stack trace: ***
    @     0x7f2543b29daa  (unknown)
    @     0x7f2543b29ce4  (unknown)
    @     0x7f2543b296e6  (unknown)
    @     0x7f2543b2c687  (unknown)
    @     0x7f2543f10f01  caffe::db::LMDB::Open()
    @           0x403a0c  main
    @     0x7f2542b26f45  (unknown)
    @           0x404c64  (unknown)
    @              (nil)  (unknown)
Aborted (core dumped)

Seyyed Hossein Hasanpour

unread,
Jul 24, 2016, 10:39:49 AM7/24/16
to IranDeepLearning
سلام 
این خطایی که دارید میگیرید مربوط به پوشه my_lmdb هست که باید پاکش کنید قبل اینکه اسکریپت رو فراخونی کنید . چون وجود داره و اسکریپت دوباره میخواد بسازتش خطا میده و میاد بیرون 
اگه برای رگرشن میخوایید استفاده کنید و با فلوت سرو کار دارید Lmdb و leveldb بدرد شما نمیخورن چون لیبل ها از نوع int تعریف شدن تو convert_imageset.cpp. از طرفی تو caffe.proto هم لیبل برای ساختار datum که caffe اطلاعات رو در اون خیره میکنه هم Int32 هست. 
یعنی احتمالا شما تو کد convert_imageset هم تغییرات بدید باز اتفاقی نمی افته. 
اگه خواستید یه تست بزنید این دوتا خط رو تغییر بدید و یه ران بگیرید ببینید درست میشه یا نه (بعیده!) اگه شد(احتمالا truncate کرده عدد اعشاری شما رو و باز Int ذخیره کرده )اگه  هم نشد باید از hdf5 استفاده کنید.
 
خط 75
  std::vector<std::pair<std::string, int> > lines;
رو تبدیل کنید به 
  std::vector<std::pair<std::string, double> > lines;
به همین شکل خط 77 هم 
  int label;
تبدیل کنید به 
  double label;
اینجا رو هم ببینید کد پایتون برای تبدیل به Hdf5 رو دادن و میتونید استفاده کنید




Soodabe Zarezade

unread,
Jul 25, 2016, 1:41:32 AM7/25/16
to IranDeepLearning
سلام . 
مورد اولی که گفتید رو تست کردم و همونطور که خودتون گفتید بازم جواب نداد / در مورد فولدر my_lmdb این فولدر توی مسیر وجود نداره ! 
اما فارغ از اینها من اگر بخوام از hdf5 استفاده کنم چه کاری باید انجام بدم ؟ 
اگر لینکی وجود داره که بتونم ازش کمک بگیرم ممنون میشم !

Seyyed Hossein Hasanpour

unread,
Jul 25, 2016, 5:38:39 AM7/25/16
to IranDeepLearning
سلام 
تو پوشه خود convert_imageset رو چک کنید احتمالا اونجا داره یکی میسازه! 
در مورد hdf5 هم اخر جوابم لینک دادم . این همون لینکه 
Reply all
Reply to author
Forward
This conversation is locked
You cannot reply and perform actions on locked conversations.
0 new messages