Перейти к содержимому
Compvision.ru

maxfashko

Пользователи
  • Количество публикаций

    86
  • Зарегистрирован

  • Посещение

  • Days Won

    2

Сообщения, опубликованные пользователем maxfashko


  1. Smorodov, вы как всегда правы. Установка девайса помогла снизить время, но по-прежнему, процессор чуть быстрее.

    Gpu 0.1892

    Cpu 0.1600

    Дело в том, что программа построена так, что процесс ресайза это не главное действие, после ресайза изображение поступает на дальнейшую обработку, там пакетной обработки даже нет. Только если создавать несколько потоков, и одновременно обрабатывать несколько изображений. Сначала класссификация, затем ресайз, после этого сегментация. И так каждое изображение в своем потоке?

    Nuzhny, где это можно сделать? Подробнее пожалуйста.

     

    Компилятор не может наложить какие либо особенности?

    Компилировал nvcc resize.cpp -o resize 'pkg-config --cflags --libs opencv' -lopencv_gpu


  2. Добрый вечер. Провел тесты следующего кода, в котором реализован ресайз фото на процессоре и видеокарте. Оборудование следующее:

    Intel® Core™ i5-4670 CPU @ 3.40GHz × 4

    GeForce GTX 650/PCIe/SSE2 2Gb GDDR5

    Ubuntu 12.04 x64

    Результаты грустные:

    gpu 0.4890(sec) / 2.0448(fps) 
    cpu 0.1623(sec) / 6.1632(fps) 

    Неужели gtx 650 очень дрова?

    Та же ситуация обстоит с pycuda. Тестовый скрипт ( https://wiki.tiker.net/PyCuda/Examples/SimpleSpeedTest ) выводит следующее время:

    Using nbr_values == 8192
    Calculating 100000 iterations
    SourceModule time and first three results:
    0.080705s, [ 0.005477  0.005477  0.005477]
    Elementwise time and first three results:
    0.161862s, [ 0.005477  0.005477  0.005477]
    Elementwise Python looping time and first three results:
    0.780193s, [ 0.005477  0.005477  0.005477]
    GPUArray time and first three results:
    3.765418s, [ 0.005477  0.005477  0.005477]
    CPU time and first three results:
    2.716871s, [ 0.005477  0.005477  0.005477]

     

    #код ресайза фотографий

    #include <iostream>
    #include "opencv2/imgproc.hpp"
    #include "opencv2/highgui.hpp"
    #include "opencv2/calib3d.hpp"
    #include "opencv2/cudalegacy.hpp"
    #include "opencv2/cudaimgproc.hpp"
    #include "opencv2/cudaarithm.hpp"
    #include "opencv2/cudawarping.hpp"
    #include "opencv2/cudafeatures2d.hpp"
    #include "opencv2/cudafilters.hpp"
    #include "opencv2/cudaoptflow.hpp"
    #include "opencv2/cudabgsegm.hpp"
    #include "opencv2/imgproc/imgproc.hpp"
    #include "opencv2/opencv.hpp"
    
    using namespace std;
    using namespace cv;
    using namespace cv::cuda;	
    
    void ProccTimePrint( unsigned long Atime , string msg)   
    {   
     unsigned long Btime=0;   
     float sec, fps;   
     Btime = getTickCount();   
     sec = (Btime - Atime)/getTickFrequency();   
     fps = 1/sec;   
     printf("%s %.4lf(sec) / %.4lf(fps) \n", msg.c_str(),  sec, fps );   
    }
    
    void processUsingOpenCvGpu(string input_file, string output_file);
    void processUsingOpenCvCpu(std::string input_file, std::string output_file);
    
    
    int main(){
    
    	processUsingOpenCvGpu("/home/maksim/Изображения/1.jpg", "/home/maksim/Изображения/1_rG.jpg");
    	processUsingOpenCvCpu("/home/maksim/Изображения/1.jpg", "/home/maksim/Изображения/1_rC.jpg");
    	return 0;
    }
    
    void processUsingOpenCvGpu(string input_file, string output_file) {
    
    	unsigned long AAtime=0;
    
    	AAtime = getTickCount();
    	//Read input image from the disk
    	cv::Mat inputCpu = cv::imread(input_file,CV_LOAD_IMAGE_COLOR);
    	cv::cuda::GpuMat input (inputCpu);
    	if(input.empty())
    	{
    		cout<<"Image Not Found: "<< input_file << endl;
    		return;
    	}
     
    	//Create output image
    	cv::cuda::GpuMat output;
     
    	cv::cuda::resize(input, output, cv::Size(), .05, 0.05, CV_INTER_AREA); // downscale 4x on both x and y
    
     	ProccTimePrint(AAtime , "gpu");
    
    	cv::Mat outputCpu;
    	output.download(outputCpu);
    	cv::imwrite(output_file, outputCpu);
    	
    	input.release();
    	output.release();
    }
    
    void processUsingOpenCvCpu(std::string input_file, std::string output_file) {
    
    	unsigned long AAtime=0;
    
    	AAtime = getTickCount();
    
    	//Read input image from the disk
    	Mat input = imread(input_file, CV_LOAD_IMAGE_COLOR);
    	if(input.empty())
    	{
    	        std::cout<<"Image Not Found: "<< input_file << std::endl;
    		return;
    	}
     
    	//Create output image
    	Mat output;
     
    	cv::resize(input, output, Size(), .05, 0.05, CV_INTER_AREA); // downscale 4x on both x and y
    	ProccTimePrint(AAtime , "cpu");
    
    	imwrite(output_file, output);
    }


     


  3. Приветствую. Может быть у кого-то есть идеи по поводу следующей проблемы?

    Вот тут парень выложил caffe-segnet для задействовано нескольких gpu. https://github.com/developmentseed/caffe/tree/segnet-multi-gp

    Я собрал, запустил обучение на трех tesla m2090, но прироста скорости не заметил, 20 итераций по-прежнему выполняются около 40 секунд. К тому же я думал что при использовании нескольких gpu память будет шариться, и я смогу увеличить batch size. Но сеть ведет себя странно:

    | NVIDIA-SMI 352.39     Driver Version: 352.39         |                       
    |-------------------------------+----------------------+----------------------+
    | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
    |===============================+======================+======================|
    |   0  Tesla M2090         Off  | 0000:19:00.0     Off |                    0 |
    | N/A   59C   P12    30W / 225W |     10MiB /  5375MiB |      0%      Default |
    +-------------------------------+----------------------+----------------------+
    |   1  Tesla M2090         Off  | 0000:1A:00.0     Off |                    0 |
    | N/A   59C    P1   139W / 225W |   4812MiB /  5375MiB |     87%      Default |
    +-------------------------------+----------------------+----------------------+
    |   2  Tesla M2090         Off  | 0000:1E:00.0     Off |                    0 |
    | N/A   59C    P0   159W / 225W |   4457MiB /  5375MiB |     19%      Default |
    +-------------------------------+----------------------+----------------------+
    |   3  Tesla M2090         Off  | 0000:1F:00.0     Off |                    0 |
    | N/A   59C    P0   141W / 225W |   4457MiB /  5375MiB |      0%      Default |
    +-------------------------------+----------------------+----------------------+
    Я попытался попытался изменить batch size в segnet_train.prototxt (на m2090 работает только при значении 1, так как всего 5 gb ram) на значение 2 или 3. Но получил сообщение о нехватке памяти.
    Подскажите пожалуйста, могу ли я увеличить скорость обучения при использовании двух и более gpu? Если да, то что мне необходимо для этого сделать? Могу ли я увеличить upsample layer в segnet_train.prototxt чтобы память шарилась?
    layer {
      name: "upsample5"
      type: "Upsample"
      bottom: "pool5"
      top: "pool5_D"
      bottom: "pool5_mask"
      upsample_param {
      scale: 2
      upsample_w: 30
      upsample_h: 23
      }
      }
     
     
    Я хочу изменить значения upsample_w : 45, upsample_h : 45 для того чтобы нейросеть могла принять на вход изображения 720*720. Возможно ли будет сделать это используя два и более gpu?

  4. Программа будет работать с объектами сфотографированными на белом, сероватом фоне. На примере ниже исходное фото, ручная разметка, сегментированное фото. Точность для данного примера составляет 0.997627852057preview.jpg

    Исходное фото было "доведено" искусственно до размера 480х360. Надеюсь это не сильно влияет на результат.

     

     

     


  5. Smorodov, в общем реализовал скрипт, расчитывающий accuracy:

    Только вот в результате не уверен, слишком высокую точность выдает: accuracy = 0.996942198369 на изображении приведенном выше

    1. В цикле подсчитываем кол-во P,N пикселей текущего изображения.

    2. В цикле подсчитываем кол-во TN,TP пикселей текущего изображения, если текущий пиксель имеет одинаковое значение в изображениях ground_truth и segment

    Взгляните пожалуйста на код:

    from PIL import Image
    import numpy as np
    import matplotlib.pyplot as plt
    import os
    from os import listdir
    from os.path import isfile, join
    
    labelPath = 'test/ground_truth'
    segmentPath = 'test/segment'
    resultFileName = 'test/result.txt'
    
    labelList = []
    segmentList = []
    resultArr = []
    
    colorClass1 = (60,40,222)		#object
    colorClass2 = (128,128,128)		#background
    
    #get files in dir
    def list_files(path, files):
        # returns a list of names (with extension, without full path) of all files 
        # in folder path
        for name in os.listdir(path):
            if os.path.isfile(os.path.join(path, name)):
                files.append(name)
        return files
    
    def main():
    
    	#for calculation global value
    	mean = 0
    	TP_g = 0
    	TN_g = 0
    	P_g = 0
    	N_g = 0
    
    	list_files(labelPath, labelList)
    	list_files(segmentPath, segmentList)
    
    	if len(labelList) != len(segmentList):
    		print 'len '+labelPath+' != '+segmentPath
    		return -1
    
    	for i in range (len(labelList)):
    
    		TP = 0
    		TN = 0
    		P = 0
    		N = 0
    
    		#label img
    		imgLabel = Image.open(labelPath+'/'+labelList[i])
    		w = imgLabel.size[0] #Определяем ширину. 
    		h = imgLabel.size[1] #Определяем высоту. 	
    		pixLabel = imgLabel.load() #Выгружаем значения пикселей.
    
    		#segment img
    		imgSegment = Image.open(segmentPath+'/'+segmentList[i])	
    		pixSegment = imgSegment.load() #Выгружаем значения пикселей.
    
    		#calculate P, N (pixels of object and background)
    		for k in range(0, w):
    			for l in range(0, h):
    				if pixSegment[k,l][0:3] == colorClass1:
    					P+=1
    				if pixSegment[k,l][0:3] == colorClass2:
    					N+=1
    
    		#calculate TP and TN (пиксели классифиц. как объект и явл. им)
    		for k in range(0, w):
    			for l in range(0, h):
    				if pixLabel[k,l][0:3] == colorClass1 and pixSegment[k,l][0:3] == colorClass1:
    					TP+=1
    				if pixLabel[k,l][0:3] == colorClass2 and pixSegment[k,l][0:3] == colorClass2:
    					TN+=1
    
    		TP_g 	+= TP 
    		TN_g 	+= TN
    		P_g 	+= P
    		N_g 	+= N
    
    		#calculate accuracy for current image
    		currentAcc = float(TP+TN) / float(P+N)
    
    		resultArr.append(str(i)+' accuracy = '+str(currentAcc))
    		print str(i)+' accuracy = '+str(currentAcc)
    
    	#calculate mean global accuracy
    	mean = float(TP_g+TN_g)/float(P_g+N_g)
    
    	print 'Mean accuracy = '+str(mean)
    	resultArr.append('Mean accuracy = '+str(mean))
    
    	#write result
    	resultFile = open(resultFileName, 'w')
    	for item in resultArr:
      	    resultFile.write("%s\n" % item)
    
    main()

     


  6. 2 часа назад, Smorodov сказал:

    Начать можно отсюда: https://en.wikipedia.org/wiki/F1_score  :)

    И это пригодится: https://en.wikipedia.org/wiki/Precision_and_recall

    Именно accuracy=(TP+TN)/(P+N), но это не самая объективная метрика.

    Спасибо! Поделитесь пожалуйста, что означают P,  N ? 

    Как я понял TP - это объект (синий), пиксели, которые верно сегментированы

    TN - это фон (серый), пиксели, которые верно сегментированы

    P, N - это кол-во файлов?

    То есть проходим циклом по картинке забирая хорошие "синие" пиксели. Затем так же но берем уже хорошие "серые" пиксели? Складываем и делим на кол-во?


  7. Добрый вечер. Интересует собственно как расчитывать точность на сегментированных нейронной сетью изображениях? Имеем тестовую выборку, пропущенную через нейронную сеть, в которой есть файлы разметки и собственно файлы сегментированные сетью. Теперь как мы можем по полученным изображениям выяснить их точность? Понятное дело, что сегментированные файлы должны стремиться к изображениям аннотации. Написал следующий скрипт для расчета точности:

     

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # vim:fileencoding=utf-8
    #use only 2 classes
    # object (60,40,222) color
    from PIL import Image
    import numpy as np
    import matplotlib.pyplot as plt
    import os
    from os import listdir
    from os.path import isfile, join
    labelPath = 'test/ground_truth'
    segmentPath = 'test/segment'
    resultFileName = 'test/result.txt'
    
    labelList = []
    segmentList = []
    resultArr = []
    
    #get files in dir
    def list_files(path, files):
        # returns a list of names (with extension, without full path) of all files 
        # in folder path
        for name in os.listdir(path):
            if os.path.isfile(os.path.join(path, name)):
                files.append(name)
        return files
    
    def main():
    	mean = 0
    	list_files(labelPath, labelList)
    	list_files(segmentPath, segmentList)
    
    	if len(labelList) != len(segmentList):
    		print 'len '+labelPath+' != '+segmentPath
    		return -1
    
    	for i in range (len(labelList)):
    
    		#label img
    		imgLabel = Image.open(labelPath+'/'+labelList[i])
    		w = imgLabel.size[0] #Определяем ширину. 
    		h = imgLabel.size[1] #Определяем высоту. 	
    		pixLabel = imgLabel.load() #Выгружаем значения пикселей.
    
    		#segment img
    		imgSegment = Image.open(segmentPath+'/'+segmentList[i])	
    		pixSegment = imgSegment.load() #Выгружаем значения пикселей.
    
    		amountPixObjLabel = 0
    		amountPixLossLabel = 0
    
    		#amount pixels with object
    		for k in range(0, w):
    			for l in range(0, h):
    				if pixLabel[k,l][0:3] == (60, 40, 222):		#blue color object
    					amountPixObjLabel+=1
    
    		#search differences
    		for k in range(0, w):
    			for l in range(0, h):
    				if pixLabel[k,l][0:3] != pixSegment[k,l][0:3]:
    					amountPixLossLabel +=1
    
    		#one pix = %
    		onePix = float(100) / float(amountPixObjLabel)
    
    		count = 100 - (amountPixLossLabel*onePix)
    		mean += count
    		resultArr.append(str(i)+' accuracy = '+str(count))
    		print str(i)+' accuracy = '+str(count)
    
    	print 'Mean accuracy = '+str(mean / len(labelList))
    	resultArr.append('Mean accuracy = '+str(mean / len(labelList)))
    
    	#write result
    	resultFile = open(resultFileName, 'w')
    	for item in resultArr:
      	    resultFile.write("%s\n" % item)
    
    main()

    Смысл такой: загружаем значения пикселей аннотированного изображения, затем делаем тоже самое с сегментированным изображением. Если в сегментированном изображении текущий пиксель отличается от пикселя в аннотированном, увеличиваем счетчик ошибочных пикселей по данному изображению. Затем расчитываем сколько пикселей составляет один процент от всех пикселей в объекте аннотированного изображения. И затем переводим наши ошибочные пиксели в проценты. Это и будет наша точность.

    file: ground_truth

    .0_пе.png

    file: segment

    0.png

    Например для данного сообщения выводится значение accuracy = 96.9656336161

     


  8. В 04.07.2016 at 22:08, Smorodov сказал:

    Тут надо смотреть на тестовую выборку, если точность на ней повышается, то почему бы и не поучить.

    Smorodov, насчет теста, я правильно подхожу к тестированию? Делаю следующим образом:

    В качестве модели указываю ту, на которой тренировался (segnet_train.prototxt)

    ~/PassArtSegment/Segnet/caffe-segnet/build/tools/caffe test -gpu 0 -model ~/PassArtSegment/SegNet-Tutorial/Models/segnet_train.prototxt 
    - weights ~/PassArtSegment/SegNet-Tutorial/Models/Training/segnet_iter_40000.caffemodel -iter 3000 2>&1 | tee test.log

    После чего парсим лог и получаем следующие графики точности и ошибки:

     

    test_accuracy_40k.png

    test_loss_40k.png

     

    Ну и если высчитать средние значения из лога то получаю:

    columnNumber = 2
    data = [float(l.split(',')[columnNumber]) for l in open('log.csv', 'r').readlines()]
    mean = sum(data) / len(data)
    print(mean) //0.98666 для точности
    
    columnNumber = 3
    data = [float(l.split(',')[columnNumber]) for l in open('log.csv', 'r').readlines()]
    mean = sum(data) / len(data)
    print(mean) //0.013902 для ошибки

    Это верный подход?


  9. 11 минуту назад, Smorodov сказал:

    Это нормально, данные берутся порциями, на одних порциях ошибка одна, на других другая, вот и пляшет.

    В процессе обучения, по мере улучшения модели, этот забор уменьшается.

    Спасибо! Думаете есть смысл обучать более 40к итераций?


  10. 14 часа назад, BeS сказал:

    Сейчас выгодней купить 1080-ю, чем оплачивать тачки в амазоне (GPU + жесткий диск на амазоне стоят не оправдано дорого).

    Понятно.

    Хочу еще спросить - официальный туториал segnet говорит, что после обучения сети, необходимо проделать следующее:

    python /Segnet/Scripts/compute_bn_statistics.py /SegNet/Models/segnet_train.prototxt /SegNet/Models/Training/segnet_iter_10000.caffemodel /Segnet/Models/Inference/  # compute BN statistics for SegNet
    python /SegNet/Scripts/test_segmentation_camvid.py --model /SegNet/Models/segnet_inference.prototxt --weights /SegNet/Models/Inference/test_weights.caffemodel --iter 233  # Test SegNet

    После этих команд выводятся изображения из тестовой выборки и результаты сегментации.

    А собственно можно просто взять обученную *.caffemodel и сегментировать любое изображение, после чего сохранить его в указанной директории?

     

    Все таки удалось запустить SegNet на одной m2090

    А вообще это нормально, что у меня обучение происходит вот так? Уже после 3000 итерации точность довольно неплохая, ошибка тоже небольшая.

    И еще - подскажите, из-за чего вот эти всплески ошибок происходят? На итерациях 5, 10, 15 тыс. Они ведь получились эквивалентны графику accuracy на тех же итерациях. Это из-за каких-то уникальных особенностей в обучающей выборке - неточности, выбросы и т.д ? Как от них избавиться? Или это нормально?

     

     

     

     

     

    accuracy32000.png

    loss32000.png


  11. День добрый!

    А что еще можно попробовать для обучения сетки на сегментацию? Сейчас у меня имеется в распоряжении 4 Tesla m2090 (но это только 5 gb на каждой карточке). Tesla m40 больше не доступна, и врядли в обозримом будущем удастся получить к ней доступ.

    Как я понимаю на m2090 я не запущу SegNet. Пробывал указать все 4 карты при тренировке ( -gpu 0,1,2,3  ) не понимает. Может на амазоне есть инстансы с карточками по 10  gb и выше памяти? Я что-то не понял тамошних порядков с техническими характеритиками кластеров.


  12. А каким-нибудь образом можно получить кривую зависимостей loss и accuracy имея только обученную модель, но не имея лога?

    Сейчас переучить не получиться -  кластер с м40-вой только на 2 дня погонять давали.

    В общем обучение можно считать проваленным:

    При конвертации размеченных цветами аннотированных изображений в {0,1}, в алгоритм закралась ошибка. Какая-то часть данных была размечена как 1- объект 0-фон, а другая чать как 0-объект, 1-фон. Этим объясняется странное поведение при тренировке: две итерации могли идти с точностью в 0.95, а следующие за ней десять итераций, как 0.20, и так до 40000 итерации.

    Бедняга, все не могла понять, что же от нее хотят :mellow: 

    collage.jpg


  13. У меня действительно всего 2 класса, ptototxt я не редактировал. Когда запустил обучение поздно обнаружил, что неверно указал лог, и обучение не фиксировалось в логе. По этому я просматриваю не log а подключаясь к кластеру через screen чтобы посмотреть что там творится.

    Из-за того, что не отредактировал prototxt все обучение на смарку?


  14. После 10к итераций результат не улучшился, значит ли это, что обучение можно останавливать?

    Screenshot_2016-06-09-07-54-44.png

    Screenshot_2016-06-08-23-40-40.png

    Я понимаю так, что меня должны интересовать следующие строки:

    rain net output #0: accuracy = 0.987271

    Train net output #2: per_class_accuracy = 0.967589

     Train net output #6: per_class_accuracy = 0.987386

    Iteration 40580, loss = 0.0586965

    И если показатели хорошие, то останавливать обучение?

     


  15. Спасибо! Именно это помогло! Кому нужно - в репозитории имеется около 3к идеально размеченных автоматом данных (больший объем пока не делал)

    А что с настройками обучения? Оставить все по дефолту? 40к итераций хватит? если у меня будет 10-30к изображений для тренировки? Как выявить наилучший результат при тренировке?

    https://github.com/Maxfashko/CamVid

    • Like 2

  16. Приветствую! Расскажу немного о своих трудностях, с которыми я столкнулся при обучении данной сетки:

    На Tesla m40 пример, приведенный в туториале обучается очень здорово и шустро - все ок!

    Когда же пытаемся всунуть сетке свои размеченные изображения - 

    F0606 19:20:16.349822  2152 math_functions.cu:123] Check failed: status == CUBLAS_STATUS_SUCCESS (11 vs. 0)  CUBLAS_STATUS_MAPPING_ERROR

    Уперся в стену с созданием файлов "png" аннотации-масок. Как я понимаю обычное RGB изображение "png" нам необходимо перекодировать в градации серого + какой-то режим типо HSV. Предварительно его раскрасив необходимыми цветами:

    64 128 64    Animal
    192 0 128    Archway
    0 128 192    Bicyclist
    0 128 64    Bridge
    128 0 0        Building
    64 0 128    Car
    64 0 192    CartLuggagePram
    192 128 64    Child
    192 192 128    Column_Pole
    64 64 128    Fence
    128 0 192    LaneMkgsDriv
    192 0 64    LaneMkgsNonDriv
    128 128 64    Misc_Text
    192 0 192    MotorcycleScooter
    128 64 64    OtherMoving
    64 192 128    ParkingBlock
    ...
    0 0 0        Void

    Но как бы не пытался я это сделать в Photoshop, у меня не выходит. Сеть не хочет это кушать.

    Единственное решение, которое может создавать файлы масок-аннотаций - https://github.com/kyamagu/js-segment-annotator

    После этой тулзы сеть съедает файлы "png" и обучается. Но проблема в том, что мне не нужно размечать данные вручную. У меня уже имеются "вырезанные" файлы. Мне остается только наложить "вырезанные" поверх "исходных" jpg и залить цветами. Но как конвертировать в цвета, которые сеть будет воспринимать и обучаться?

    RGB разных цветов - отказ

    Градации серого 25% - отказ

    Индексированные цвета (3 цвета) - отказ

     

    Еще нашел вот такой скрипт, который вроде как должен решить мою проблему, но сеть тоже не ест файлы, которые выходят после скрипта. (Более того, сеть даже не ест файлы аннотации из "родного" датасета CamVid, если ее прогнать через данный скрипт)

    Как мне это победить?

     

     

    gray.py


  17. Снова здравствуйте. Насколько сложно изменить структуру той же segnet для того чтобы у меня изображение на выходе (а может и на входе при обучении) было не 360*480 пикселей, а к примеру 1000*1500. Так как с изображением 360*480 невозможно работать, хочу увеличить размерность выходного изображения. Простой ресайз ясное дело никакой пользы не принесет. Как при этом мне необходимо действовать? И нужно ли менять структуру сетки?


  18. В 14.03.2016 at 15:29, mrgloom сказал:

    https://github.com/alexgkendall/SegNet-Tutorial/blob/master/Example_Models/segnet_model_zoo.md

    вообще не очень понятно при размере базовых моделей в ~5Mb на что тратится основная память?

     

    Вот еще кстати наткнулся про память https://github.com/fmassa/optimize-net

     

     

    Можете попробовать на CPU запустить обучение? можно не целиком, а только несколько итераций чтобы проверить что оно в целом работает, а то у меня не работает.

    На CPU получилось запустить на обучение  segnet_basic_train. 

    На macbook i7 / vmware Ubuntu на 20 итераций тратится около 10 минут. На osx собрать segnet caffe не получилось (вылезла куча ошибок).

    Так же на Ubuntu не получается запустить пример 

    python /home/myuser/Downloads/SegNet/SegNet-Tutorial/Scripts/compute_bn_statistics.py /home/myuser/Downloads/SegNet/SegNet-Tutorial/Models/segnet_basic_train.prototxt /home/myuser/Downloads/SegNet/SegNet-Tutorial/Models/Training/segnet_basic_camvid.caffemodel /home/myuser/Downloads/SegNet/Models/Inference/

    Выводит ошибку 

    F0225 23:41:36.745960 11302 syncedmem.cpp:51] Check failed: error == cudaSuccess (8 vs. 23)

    Есть у кого мысли в чем может быть причина?


  19. Друзья, а как мне создать выборку и разметить ее для обучения?

    Я должен взять png изображения и сделать из них jpeg изображения предварительно раскрасив их в 2 цвета (фон и объект). А затем перевести все это дело в вектор и подать на вход нейросети?


  20. 12 минуты назад, BeS said:

    Под такой объем если только FTP поднимать. Ну или на каком-нибудь rutracker'е в виде торрент-раздачи выложить. Думаю, для тренировки сеток такое было бы крайне полезно.

    з.ы. кстати, вспомнил, у DeepLab есть онлайн-сервис, где можно залить свою картинку и посмотреть. как он будет её сегментировать: http://www.robots.ox.ac.uk/~szheng/crfasrnndemo

    В общем и целом это возможно, почему нет?  Как появиться время обязательно расшарю образы!

    По сервису - результат неплохой - в некоторых тестах хуже, в некоторых лучше того, чем сейчас пользуюсь.

    Из поставки opencv перепилил под себя grabcut для автоматической, пакетной сегментации фотографий. Прямоугольник объекта задаю в настройках условно - примерно 10-15% от краев изображения. Результат неплохой, учитывая участие человека в процессе на уровне "нажал кнопку - смотришь на результат".

    Bes, в обучении я ноль. Только один раз учил каскад для обнаружения лиц adaBoost`ом. С чего начать, чтобы натренировать данную систему?

    Возможно ли добиться лучших результатов с моим большим кол-вом изображений, чем это сделали ребята из лаборатории?


  21. Спасибо, посмотрю по этой теме.

    На самом деле 50к - это не предел. Если перетрясти все сервера, думаю можно и в втрое большее кол-во наскрести(png). Обычные фото (jpg) никогда не исчислял!

    Можно, только куда залить терабайт? Или даже половину от этого?

×