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

با تشکر

دسته بندی ها

0 امتیاز

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

از کراس استفاده می کنم

توسط (117 امتیاز)

1 پاسخ

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

سلام دوست عزیز.
لیبل به صورت یک عکس png هستش که مقادیر پیکسل همان عدد کلاس مورد نظر هستش. یعنی اگر در یک منطقه از تصویر یک صندلی هستش و در دیتاست صندلی کلاس شماره 7 هستش - آنگاه تمامی پیکسل هایی که صندلی رو تشکیل میدهند مقدارشون 7 هست.
در لایه آخر که 21 لایه داریم به این علت هستش که در دیتاست مورد نظرتون voc12 تعداد کلاس ها 21 هستش. برای تشکیل تصویر از این 21 لایه برای هر پیکسل از بین 21 مقداری که آن پیکسل را تشکیل میده ماکزیمم میگیریم - اگه ماکزیمم مربوط به مقدار لایه 7 بود این پیکسل را 7 قرار میدیم. به عبارت کلی اندیس مقدار ماکزییم در 21 لایه خروجی مقدار پیکسل رو تعیین میکنه.

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

توسط (830 امتیاز)
انتخاب شده توسط
سلام دوست عزیز خیلی ممنون از پاسختون
دیتاست voc بود اما مقدار پیکسل های لیبل ها رو که بررسی کردم هیچ کدام 1 تا 21 نبود باید پیش پردازش صورت بگیره و تبدیل به 1 تا 21 بشه؟
منظورم این بود که ما در fcn در لایه آخر یک آرایه داریم یکی از ابعاد این آرایه 21 هست که معرف همون 21 یک کلاسی هست که فرمودین دو بعد دیگه هم که نشان دهنده تصویر ما هست حالا من میگم به جای این آرایه که 21 کلاس داره یک آرایه داشته باشیم که دو بعدش معرف تصویر بعد آخر برای کانال های rgb  باشه یعنی در حقیقت تصویر رنگی در لایه آخر تحویل بگیریم به جای یک آرایه که مجدد پرادزش صورت بگیره برای تبدیل کردن به عکس آیا همچین راهی وجود داره؟
از fcn زیر استفاده کردم
https://fairyonice.github.io/Learn-about-Fully-Convolutional-Networks-for-semantic-segmentation.html

برای آموزش هم کد زیر استفاده کردم

print("#############build model############")
    model = FCN8(nClasses=n_classes,
                 input_height=224,
                 input_width=224)
    model.summary()

    adam = optimizers.Adam(learning_rate=0.0001)

    print("#############compile model############")
    model.compile(loss='sparse_categorical_crossentropy',
                  optimizer=adam,
                  metrics=['accuracy'])

    print("#############
train model############")
    hist1 = model.fit(images, labels, shuffle=True,
                      batch_size= 1, epochs=20, verbose=2)
    print("#############end############")

از تابع loss خطا میگیره.
از تابع softmax که در لایه آخر بود استفاده نکردم این احتمال دادم که مجموع هرکلاس در آرایه را بین صفر و یک قرار بده به همین دلیل استفاده نکردم
تصاویر و لیبل ها رو به صورت یک آرایه دادم
ابعاد آرایه تصاویر:
تعداد تصاویر، طول تصویر، عرض تصویر و تعداد کانال(3)
ابعاد آرایه لیبل:
تعداد تصاویر، طول لیبل، عرض لیبل و تعداد کلاس(21)

به دلیل ارور کمبود حافظه هم به جای gpu مجبور به استفاده از cpu شدم
بعد از تغییر تابع loss به باینری کراس آنتروپی، اجرا شد اما زمان زیادی گرفت(برای 3 اپک بیش از 8 ساعت زمان برد) و تغییری هم در مقدار loss  صورت نمی گرفت.
ممنون میشم راهنمایی کنید
وقتی تصویر لیبل رو بخونید رنگهاش ایناست که هر کدم یک کلاس رو نشون میده
# colour map
label_colours = [(0, 0, 0),  # 0=background
                 # 1=aeroplane, 2=bicycle, 3=bird, 4=boat, 5=bottle
                 (128, 0, 0), (0, 128, 0), (128, 128, 0), (0, 0, 128), (128, 0, 128),
                 # 6=bus, 7=car, 8=cat, 9=chair, 10=cow
                 (0, 128, 128), (128, 128, 128), (64, 0, 0), (192, 0, 0), (64, 128, 0),
                 # 11=dining table, 12=dog, 13=horse, 14=motorbike, 15=person
                 (192, 128, 0), (64, 0, 128), (192, 0, 128), (64, 128, 128), (192, 128, 128),
                 # 16=potted plant, 17=sheep, 18=sofa, 19=train, 20=tv/monitor
                 (0, 64, 0), (128, 64, 0), (0, 192, 0), (128, 192, 0), (0, 64, 128)]
معمولا در تمامی معماری های قطعه بندی به تعداد کلاس ها لایه داریم.
فک کنم اگه بخواید به جای 21 لایه از سه لایه RGB استفاده کنید ترین شدن شبکه به سختی انجام میشه - چون یه مرحله بیشتر داره کد میشه -
softmax باید باشه - چون در ورودی تابع آنتروپی باید اعداد بین صفر و یک باشند.
باینری کراس آنتروپی جواب نمیده برای شما -  چون چندین کلاس دارید و خروجی شما به صورت اعداد صحیح (اندیس کلاس ماکریمم) هستند.
داداش cpu رو بیخیاش شو - به جایی نمیرسی
یا علی
...