wrong extracted features from last FC

81 views
Skip to first unread message

rahim entezari

unread,
Jul 2, 2016, 3:45:33 AM7/2/16
to IranDeepLearning
Hi
I want to finetune vgg face on Eyediap Dataset.
I have used the attached network model(vgg-eyediap.prototxt) and solver.prototxt.
In this experiment I have used small part of Eyediap gaze, 26k for train and 4.5k frames for test.
The finetuning was done without error, for 1000 iteration.
 I have used https://github.com/jostosh/caffe-utils for feature extraction  with the following command:
sudo ./build/tools/extract_to_txt   test   /home/vgg-eyediap_snapshot_iter_1000.caffemodel   /home/vgg-eyediap.prototxt   /home/feature.txt   fc8_new   250   txt   GPU   0
To find out whether I have extracted good feature or not, I have extracted the last fully connected features, which should be the same as labels(headpose.txt),right?
5000 lines of  Features are extracted without error.
The problem is features extracted from fc8_new are zeros except the first column.

Please help me to find the solution.
Thanks

head_pose.txt
solver.prototxt
vgg-eyediap.prototxt
features.txt

Mohsen

unread,
Jul 2, 2016, 4:45:07 AM7/2/16
to IranDeepLearning
سلام. این گروه فارسی هست لطف کنید پرسشهاتون رو فارسی بپرسید.

rahim entezari

unread,
Jul 2, 2016, 5:05:04 AM7/2/16
to IranDeepLearning
نسخه فارسی سوال
سلام
بنده قصد تنظیم شبکه رو برای استخراج ویژگی داشتم. مشکل من تو اینه که ویژگی‌های استخراج شده از لایه آخر که باید شبیه برچسب ها باشن اشتباه هستند.  
فایل‌های ویژگی‌های استخراج شده،برچسب، و سایر فایل‌های مورد نیاز برای تنظیم شبکه در پیسوت بالا آمده است
چرا ویژگی‌ها مشکل دارن؟
ممنون

Mohsen

unread,
Jul 2, 2016, 5:46:53 AM7/2/16
to IranDeepLearning
مشکلتون با ویژگی ها چی هستش؟

rahim entezari

unread,
Jul 2, 2016, 5:52:59 AM7/2/16
to IranDeepLearning
همونطور که توی فایل‌های ضمیمه میبینید، 
برجسب ها headpose.txt
با ویژگی‌های استخراجی از لایه آخر features.txt 
متفاوت هستند

Mohsen

unread,
Jul 3, 2016, 7:35:18 AM7/3/16
to IranDeepLearning
ببینید یه مشکل اساسی که به نظرم کار شما داره اینه که شبکه شما تقریبا آموزش ندیده. شما گفتی ۲۶۰۰۰ نمونه آموزشی داری در حالی که ۱۰۰۰ تکرار با بچ ۲۰ انجام شده یعنی ۲۰۰۰۰ داده فقط یک بار دیده شدن. نکته مهم اینه که همه داده های شما باید حداقل چندبار دیده بشن موقع آموزش. نمودارهای خطای آموزش رو بررسی کردین؟

rahim entezari

unread,
Jul 3, 2016, 7:45:33 AM7/3/16
to IranDeepLearning
اگه دقیق یادم باشه من ۵۰۰۰ تکرار با پچ ۲۰ هم گذاشتم. چند بار باید همه داده‌های دیده شن به طور معمول؟
نمودارهای خطای آموزش و آزمون رو چجوری میشه دید؟
باتشکر

Seyyed Hossein Hasanpour

unread,
Jul 3, 2016, 8:40:41 AM7/3/16
to IranDeepLearning
من از این استفاده میکنم . 
کافیه لاگ Caffe با پسوند .log رو در کنارش قرار بدی و برنامه رو اجرا کنی (میتونی از طریق کامند پرامت هم بدی) ولی خب دابل کلیک راحت تره برای من شخصا 
اگه چندتا لاگ باشه همه رو لود میکنه و نمایش میده 
plot.py

rahim entezari

unread,
Jul 3, 2016, 9:10:30 AM7/3/16
to IranDeepLearning
ممنون از شما. نمودارهای خطا رو بررسی کنم نتیجه رو اعلام میکنم

Mohsen

unread,
Jul 3, 2016, 9:57:29 AM7/3/16
to IranDeepLearning
در تکمیل راهنمایی آقای حسن پور
برای اینکه لاگ بگیرید از کفه مشابه دستور زیر (ضمیمه) آموزش رو انجام بدید
smple_train.sh

Seyyed Hossein Hasanpour

unread,
Jul 3, 2016, 4:30:16 PM7/3/16
to IranDeepLearning
علاوه بر این روش لاگ Caffe بصورت خودکار در پوشه tmp (چه ویندوز و چه لینوکس ) ذخیره میشه که میتونید از اون هم استفاده کنید (فقط پسوندش .log نیست که باید خودتون بزارید اگر میخوایید از اون استفاده کنید)

rahim entezari

unread,
Jul 4, 2016, 4:35:06 AM7/4/16
to IranDeepLearning
ممنون بایت پاسخ‌هاتون جناب فیاض و حسن‌پور
من از این کد استفاده کردم و فایل زیر رو برای ۱۰۰۰۰تکرار رسم کرده.
فایل لاگ رو هم از همون تمپ برداشتم
نسبت به این نمودار دیدی ندارم.میشه اندکی دبارش تضیح بدین؟
یک نمودار خطای خوب باید چطوری باشه؟
این الان خطای آموزش هست و یا آزمون؟

On Sunday, July 3, 2016 at 5:10:41 PM UTC+4:30, Seyyed Hossein Hasanpour wrote:
figure_1.png

Seyyed Hossein Hasanpour

unread,
Jul 4, 2016, 1:05:58 PM7/4/16
to irandeep...@googlegroups.com
سلام 
تصویر رو تمام صفحه کنید و بعد عکس بگیرید که همه چیز واضح باشه 
معمولا وقتی لاس تغییری نمیکنه یا بخاطر نرخ یادگیری بالا هست و یا مقداردهی اولیه بد (عددا بزرگ هستن و باید کوچیکتر باشن)
برای اینکه بتونید تو ست کردن نرخ یادگیری کلا راحت تر باشید از بچ نورمالیزیشن استفاده کنید این باعث میشه که نرخ های یادگیری بزرگتری بتونید استفاده کنید و دقت خوبی هم بدست بیارید . 
اپدیت:
این هم امروز یادم اومد که بگم .اگه پارامتر weight decay شما زیاد باشه هم باعث کاهش دقت میشه و اگر خیلی زیاد باشه دقت شما ثابت میمونه و افزایش پیدا نمیکنه . مثلا تو 10% ثابت میمونه. که این نشونه underfitting شبکه اس. 
وقتی با این قضیه مواجه شدید سعی کنید مقدار پارامتر regularization خودتون رو کاهش بدید. 

rahim entezari

unread,
Jul 5, 2016, 2:33:56 AM7/5/16
to IranDeepLearning
ممنون.در مورد بچ نورمالیزشن سرج می‌کنم انجام میدم.عکس خطا هم تو ضمیمه‌است
On Monday, July 4, 2016 at 9:35:58 PM UTC+4:30, Seyyed Hossein Hasanpour wrote:
سلام 
تصویر رو تمام صفحه کنید و بعد عکس بگیرید که همه چیز واضح باشه 
معمولا وقتی لاس تغییری نمیکنه یا بخاطر نرخ یادگیری بالا هست و یا مقداردهی اولیه بد (عددا بزرگ هستن و باید کوچیکتر باشن)
برای اینکه بتونید تو ست کردن نرخ یادگیری کلا راحت تر باشید از بچ نورمالیزیشن استفاده کنید این باعث میشه که نرخ های یادگیری بزرگتری بتونید استفاده کنید و دقت خوبی هم بدست بیارید . 

Screenshot from 2016-07-05 06:40:24.png

Seyyed Hossein Hasanpour

unread,
Jul 5, 2016, 2:58:47 AM7/5/16
to IranDeepLearning
منظورم این بود که همون صفحه نمودار رو بزرگش کنید بعد روی آیکون Save بزنید و خروجی نمودار رو بصورت عکس بگیرید 
نیازی به اسکرین شات از صفحه ندارید.

rahim entezari

unread,
Jul 9, 2016, 6:44:40 AM7/9/16
to IranDeepLearning
سلام
من چندین بار شبکه رو بررسی کردم و باز همون مشکل صفر شدن ویژگی‌ها رو دارم.
شما از چه کدی برای استخراج ویژگی‌ها استفاده می‌کنید؟ 
جون اونی که تو خود سایت کافه گذاشته به صورت 
leveldb
ویژگی‌ها رو استخراح می‌کنه.من میخوام تکست باشه تا خروجی لایه آخر رو با برچسبها مقایسه کنم تا بدین ترتیب بفهمم چقدرداره درست کار می‌کنه شبکه ام

Seyyed Hossein Hasanpour

unread,
Jul 9, 2016, 12:51:37 PM7/9/16
to irandeep...@googlegroups.com
سلام خب شما میتونید اطلاعات leveldb رو بخونی مثل این
تو مثال بالا بجای 
#include "cpp/sample.pb.h"


از 
#include "caffe/proto/caffe.pb.h"  // for: Datum
using namespace caffe;
استفاده کنید 

Message has been deleted

rahim entezari

unread,
Jul 11, 2016, 7:11:30 AM7/11/16
to IranDeepLearning
بنده فایل 
ReadLevelDb.cpp 
رو طبق گفته شما ساختم و بیلد کردم.
برای ران از کامند لاین دستور زیر رو اجرا کردم:
./Debug/ReadLevelDB  /home/deep/rahim/FinetuneVGG-Eyediap/16Layer/scenario4/features_leveldb_50000/
ولی این خطا رو میگیرم:


WARNING: Logging before InitGoogleLogging() is written to STDERR
I0711 11:15:04.667486  3618 readLevelDB.cpp:29] Creating leveldb object
ReadLevelDB: ../src/readLevelDB.cpp:34: int main(int, char**): Assertion `status.ok()' failed.
Aborted (core dumped)

rahim entezari

unread,
Jul 11, 2016, 7:31:05 AM7/11/16
to IranDeepLearning
اگر هم این فایل سی پی پی رو داخل آدرس زیر کپی کنم:
/caffe-master/tools
و بعد از دستور 
make
 استفاده کنم. و بعدش این دستور رو بزنم:
deep@deep-System-Product-Name:~/rahim/caffe-master$ ./build/tools/readLevelDB  /home/deep/rahim/FinetuneVGG-Eyediap/16Layer/scenario4/features_leveldb_50000/
این خطا رو میده:
WARNING: Logging before InitGoogleLogging() is written to STDERR
I0711 11:36:38.340692  4841 readLevelDB.cpp:29] Creating leveldb object
Segmentation fault (core dumped)

readLevelDB.cpp

Seyyed Hossein Hasanpour

unread,
Jul 11, 2016, 10:52:51 AM7/11/16
to IranDeepLearning
سلام 
نمیدونم چرا داره ارور میده. من تو ویندوز تست کردم بدون مشکل اجرا میشه! 
خطایی که شما میگیری مربوط به اینه که نمیتونه فایل رو باز کنه. احتمالا گیر شما باید از مسیر/پوشه باشه. 
اینارو یکبار دیگه چک کنید. 
نباید مشکلی باشه . 

rahim entezari

unread,
Jul 16, 2016, 11:49:52 AM7/16/16
to IranDeepLearning
سلام
من از کد شما برای کشیدن خطا استفاده کردم
این کد خطای آموزش رو میکشه یا تست؟
شکل خطای من اینطوری شده، به نظرتون اشکال کجاس که  همگرا نشده؟
شکل درست خطا با این کد همون شکل‌های معروف کاهش خطا باید باشه که کم مشه و خطای تست هم کم شه تا جایی که محل اور تربن دربیاد؟
figure_1.png

Seyyed Hossein Hasanpour

unread,
Jul 16, 2016, 1:32:41 PM7/16/16
to IranDeepLearning
سلام 
این اسکریپت خطای training رو بشما نشون میده . خط قرمز رنگ در پایین همون مقادیر loss شما هست و اون خط آبی رنگ دقت شما رو تو تست نشون میده (اگه train/val دارید میشه دقت validation شما قائدتا)
یه دلیل اولیه که لاس تغییری نمیکنه بالا بودن نرخ یادگیری هست اون رو کاهش بدید بعد ببنید آیا خطای شما کاهش پیدا میکنه یا خیر 
از طرفی کلا زمانی که خطای آموزش بالا باشه این یکی از دلایل Underfitting هست. یعنی پارامتر کافی به اندازه مناسب نیست تا شبکه بتونه به تقریب مناسبی از داده ورودی برسه . هرچقدر تعداد پارامترها بیشتر باشه خطای آموزش بیشتر کاهش پیدا میکنه و از اون طرف شبکه میره به سمت overfitting. 
حالا باز اگه شما یه validation set یی هم داشته باشید و نرخ خطا و دقت اون رو هم بگیرید و مقایسه کنید  اگر خطای هر دو بالا باشه یعنی شبکه underfit داره میکنه. از اون طرف اگه خطای آموزش کم اما خطای validation set  خیلی بیشتر از خطای اموزش باشه یعنی اورفیت داره میکنه شبکه.
حالا اگه underfit باشه باید پارامتر های شبکه رو بیشتر کنید و اگر overfit باشه باید کمتر کنید .(یا اگر از dropout استفاده میکنید مدیریتش کنید (استفاده زیاد از دارپ اوت باعث تاثیر خیلی بد در کارایی شبکه میشه))
تو زمینه regularization ها هم دقت کنید که اگه مثلا weight decay شما زیاد باشه اینم یکی دیگه از دلایل underfiting هست و باعث میشه مثلا دقت شما ثابت باقی میمونه و لاس هم کاهش پیدا نمیکنه. 
تو این زمینه هم یه کار هم که اندرو ان جی پیشنهاد میکنه تو آموزشش اینه که weight decay رو صفر و بعد کم کم زیاد کنید و رفتار شبکه رو ببینید. ( من البته برعکس کارمیکنم!)
و نکته دیگه هم اینکه داده بیشتر برای حل Overfitting خوبه اما تو Underfitting داده بیشتر هیچ کمکی نمیکنه. 

در مورد شکل درست خطا درسته با کاهش خطای اموزش خطای تست هم باید پایین بیاد. تو تصویر این قضیه رو میتونید با افزایش دقت و کاهش لاس اموزش ببینید. 
Reply all
Reply to author
Forward
This conversation is locked
You cannot reply and perform actions on locked conversations.
0 new messages