به بخش پرسش و پاسخ یادگیری عمیق خوش آمدید,
این نسخه آزمایشی سایت است.
لطفا به نکات زیر توجه کنید:
  • برای ارتباط با مدیران میتوانید از صفحه مدیران اقدام کنید.
  • سوال و جواب ها باید به زبان فارسی باشند. استفاده از زبان انگلیسی یا فینگلیش برای پاسخ دادن مجاز نیست.
  • لطفا بعد از پرسش سوال لینک سوال خود را در گرو تلگرام (Iran Deep Learning Group) معرفی کنید تا سریعتر به جواب برسید. برای دسترسی به آخرین لینک از منابع یادگیری استفاده کنید
  • لطفا بجای عکس از متن استفاده کنید. اگر متون طولانی هستند از سایت pastebin.com برای اپلود استفاده کرده و لینک حاصل را در سوال خود قرار دهید. برای قرار دادن تصویر ، از بخش ارسال تصویر ادیتور سایت استفاده کنید.
  • بعد از دریافت پاسخ، بهترین پاسخ را از طریق کلیک بر روی علامت تیک انتخاب کنید
  • اگر با خطا و یا مشکلی مواجه شدید از بخش تماس با ما در انتهای صفحه و یا ایمیل Coderx7@gmail.com موضوع را اطلاع دهید.

با تشکر

0 امتیاز

سلام
من میخاستم از اسکریپتی که شما نوشتید برای استخراج ویژگی استفاده کنم. ولی به ارور برمیخورم. مراحلی که انجام دادم را توضیح میدم:
1- ادرس دهی کافی روت در خط5 و ادرس دهی model_prototxt که دیپلوی با بچ یک رو قرار دادم و ادرس دهی model_trained که کفی مدل مورد استفاده ام هستش و ادرس دهی imagenet_labels که به فایل تکست تصاویر تستم اشاره می کنه و ادرس دهی mean_path که با استفاده از اسکریپت تونستم فایل باینری پروتو را به npy تبدیل کنم و ادرس دهیش کنم.
2- نام لایه ای که میخوام فیچرهاشو استحراح کنم fc7_changed هست پس این متغیر را اینجوری گذاشتم :

layer_name = 'fc7_changed'

3- اینپوت فایل را برابر یکی از تصاویر تستم گذاشتم :

inputfile = 'C:/Users/KamanGir/Desktop/veritydataset/dataset3/test/1/
001.1_Right_Front.JPG'

4- اوت پوت فایل یعنی جایی که قرار هست فیچر هامون اونجا نوشته بشن رو در یک فایل تکست مینویسم:

outputfile = 'C:/Users/KamanGir/Desktop/d.txt'

5-تصاویرم خاکستری و با سایز 308 در 308 هستند پس این خطوط زیر را نوشتم :

channel_swap=(2,1,0),
raw_scale=255,
image_dims=(308, 308))

البته channel_swap نمیدونم چیه. دست نزدم.
6- خط 73 هم نام لایه ای که میخوام استخراج کنم را دستی نوشتم :

np.savetxt(writer, net.blobs['fc7_changed'].data[0].reshape(1,-1),
 fmt='%.8g')

وقتی میخام این اسکریپ را اجرا کنم پس از اینکه شبکه و لایه ها را کامل نشون داد، موقعی که میخواد تصویر ورودی را بخونه با خطای زیر مواجه میشم :

Traceback (most recent call last):
File "C:\Users\KamanGir\Downloads\successful_cmake_caffe_build\caffe-windows\
caffe-windows\python\caffe_feature_extractor.py", line 76, in <module>
main(sys.argv[1:])  File "C:\Users\KamanGir\Downloads\successful_cmake_caffe_build\
caffe-windows\  caffe-windows\python\caffe_feature_extractor.py", line 70, 
in main  input_image = caffe.io.load_image(image_path)
File "C://Users//KamanGir//Downloads//successful_cmake_caffe_build//caffe-windows//caffe-windows//python\caffe\io.py", 
line 296, in load_image  img = skimage.img_as_float(skimage.io.imread(filename, 
as_grey=not color)).astype(np.float32)  File "C:\Users\KamanGir\Anaconda3\lib\
site-packages\skimage\io\_io.py", line 61,
in imread  img = call_plugin('imread', fname, plugin=plugin, **plugin_args)
File "C:\Users\KamanGir\Anaconda3\lib\site-packages\skimage\io\manage_plugins.py",
line 211, in call_plugin  return func(*args, **kwargs)
File "C:\Users\KamanGir\Anaconda3\lib\site-packages\skimage\io\_plugins\pil_plugin.py", line 35, in imread with open(fname, 'rb') as f:
ValueError: embedded null character

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

سوال شده توسط (150 امتیاز)
سلام . همیشه اگه از اسکریپتی استفاده میکنید لینک کنید.
بعد از اینکه اطلاعات رو اضافه کردید لطفا اطلاع بدید.
ضمنا لطف کنید حتما کد رو ادیت کنید. تا کدها خوانایی داشته باشند.
سلام
از اسکریپ خودتون استفاده کردم . لینکش :
https://gist.github.com/Coderx7/cb3da113a46a1e4fbc5dbbd3eb402ccb

1 پاسخ

0 امتیاز

سلام .
اشکال از اسکریپت نیست .
برای تصویر gray scale به تابع caffe.io.load_image() پارامتر دوم رو False بفرستید. بعد تست کنید.

پاسخ داده شده توسط (4.3k امتیاز)
بله. منم از یه میانگین که از ترین بدست میومد همیشه استفاده کردم. این بار یه لحظه فکر کردم شاید اشتباه میکنم و برای تست هم ساختم. که گفتید اشتباهه و متوجه شدم.
من فایل های میانگین را از شبکه ام برداشتم و همونظور که بنظر میرسید دقتم کم شد. از 98 درصد که با استفاده از میانکین بود به 97 درصد بدون استفاده از میانگین کاهش پیدا کرد. بعد همین کفی مدل که بدست اومد رو در اسکریپت استخراج ویژگی استفاده کردم. درون این اسکریپت هم فایل مین را برداشتم. چون فایل دیپلوی لایه دقت نداره نمیدونم اینجا دقتش چند میشه . فقط توی تست تصاویر یه چیزی اتفاق افتاد. اینکه قبلا یعنی با استفاده از مین فایل، لیبل ها رو کاملا قاطی و در هم پیش بینی میکرد مثلا از 14 تصاویر درون پوشه یک، یکیشو میگفت یک، بعدیشو میگفت 13بعدیش رو مثلا میگفت دو. یعنی در هم بود. و ممکن بود از برخی لیبل ها اصلا استفاده نشه. ولی الان با اینکه بازم اشتباه بیش بینی میکنه ولی منظمه.یعنی انکه من چون 14 تصویر در هر پوشه تستم دارم، و همون تصاویر رو هم به عنوان ورودی میدم ، میاد 14 بار تصویر اول رو پیش بینی میکنه بعد میره 14 بار تصویر بعدی را به عنوان لیبل پیش بینی انتخاب میکنه. بعد 14 بار تصویر سوم را بیش بینی میکنه. یعنی 14*14= 196 بار . یعنی 196 تصویر اول فایلم رو میگه پوشه یک. بعد 196 تصویر بعدی را 2 لیبل میزنه. بعد 196 تصویر بعدی را 3 لیبل میزنه و همینطور الی اخر. یعنی هم منظم شده و دیگه قاطی نیست هم اینکه داره همه لیبل ها را پیش بینی میکنه و به طور صعودی میره بالا. به نظرتون از  چی میتونه باشه؟ وقتی درست پیش بینی میکنه که برای 14 تصویر اول بگه 1. برای 14 تصویر بعدی بگه 2 و الی اخر.....
از یک اسکریپت استفاده کردم که در لینک زیر هست:
https://groups.google.com/forum/#!topic/caffe-users/6OOcM-XfvOI
این هم ماتریس اغتشاش رو چاب میکنه هم لیبل های غلط و درست رو میگه. با توجه به ران همین اسکریپت دقیقا همون دقتی را گرفتم که در فاین تون شبکه میگرفتم. یعنی 97.6 درصد. بعد نشونم داد که 56 عکسم رو اشتباه پیش بینی میکنه و باقی را درست. خیلی اسکریپت جالب و خوبیه. کاملا واضح و روشنه. منتهی من هنوز نمی فهمم چرا با اسکریپت استخراج ویژگی که فایل دیپلوی و کفی مدل و تست رو بش میدادیم اینقد اشتباه پیش بینی میکنه. ولی با این اسکریپت در این وب سایت که ورودی اسکریپت همیناست، اینقد درست و کامل خروجی میده. البته یکی از ورودی هاش فایل lmdb تست هست نه فایل تکست تست. فکر میکنم به همون خاطر باشه. درسته؟
ممنون از کدی که برای تبدیل protoبه npy قرار دادید و ممنون میشم اگر کمکم کنید.
سلام . برای دیدن دقت نیازی به accuracy ندارید. میتونید از همون خروجی انتهای شبکه( pred ) استفاده کنید و درصدها رو ببینید.
در مورد confusion matrix هم من قبلا یه اسکریپت کامل نوشتم که اینجا میتونید تست کنید :
https://gist.github.com/Coderx7/205651853a248a512256aa21f1d3bec0
این اسکریپت از چیزی که شما استفاده کردید اطلاعات خیلی بیشتر و بهتری رو میده .
فقط من متوجه نشدم الان همه چیز رو به راه شده برای شما یا هنوز مشکل دارید ؟
من انشاءالله فردا رسیدم متن شما رو کامل میخونم و اسکریپت رو هم یکبار دیگه چک میکنم خودم اگر مشکل از اسکریپت باشه تصحیح میکنم و لینکش رو میزارم اینجا.
تا فردا هم اگر اطلاعات خاصی کسب کردید لطفا اطلاع بدید تا من در جریان باشم.
سلام
من اسکریپت رو چک کردم اسکریپت صحیح هست و مشکلی نداره . فقط یک نکته ای که بنظرم اومد مشکل شما از اون  نتیجه شده باشه بحث استفاده از متد predict هست . اینجا برخلاف یک forward pass ساده که در کفی و همینطور در اسکریپت هایی که من قبلا نوشتم ، یک فاز Pass روی چند ناحیه از تصویر ورودی اجرا میشه و بعد میانگین گرفته میشه و نهایتا گزارش میشه نتیجه.
این کار عموما دقت رو بالا میبره مگه اینکه اون کراپ هایی که گرفته میشه شبکه به اندازه کافی ترین نشده باشه و نتونه تشخیص بده اونارو و اینطور دقت میاد پایین .
برای تست و فهمیدن اینکه نکته این هست یا نه خیلی راحت بجای استفاده از تابع predict خروجی فوروارد پس رو بگیرید مثل چیزی که در اسکریپت confusion matrix فرستادم و از اون استفاده کنید.
...