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

Доска почета


Popular Content

Showing most liked content on 28.03.2013 во всех областях

  1. 1 point
    >Так для того, чтобы визуализировать то, что находится в глубоком слое, надо пройти от него обратно к первому. > Берем карту коэффициентов, и собираем из образов предыдущего слоя картинку как в методе главных компонент. > Затем то же самое повторяем с предыдущими слоями. > В результате, каждая картинка будет иметь размер входного слоя. С опозданием на месяц кину ещё один вариант решения. Берём любой образ, на котором нужный нам "глубокий" нейрон стал победителем среди своих соседей (выдал наибольший сигнал). И начинаем решать обратную задачу - так менять входной образ, чтобы ещё больше максимизировать выходной сигнал данного глубокого нейрона с одновременным уменьшением сигналов его соседей. Т.е. задача обучения с учителем, эталонные коды (1 и -1 или 1 и 0 для нейронов) очевидны. Метод решения - обычный бэкпроп, только обучающий не веса сети, а значения входных сигналов. Т.е. если один глубокий нейрон реагирует на мужика, другой - на бабу, а на входе сети - картинка из камасутры, то "обучение" картинки может убрать с картинки ненужное (бабу или мужика), т.к. мы убираем то, на что реагировал другой нейрон (чья реакция нам не интересна)
  2. 1 point
    IplImage To Bitmap; Переделал функцию рисования IplImage для Delphi. Пользуйтесь )) function WidthBytes(bits: Integer): Integer; begin Result := Trunc((bits + 31) / 32) * 4; end; function CreateRGBBitmap(Ipl: PIplImage): HBITMAP; var i, j: Integer; LApp: PChar; LBitInfo: TBitmapInfo; begin LBitInfo.bmiHeader.biSize := SizeOf(BITMAPINFOHEADER); LBitInfo.bmiHeader.biWidth := Ipl.width; LBitInfo.bmiHeader.biHeight := Ipl.height; LBitInfo.bmiHeader.biPlanes := 1; LBitInfo.bmiHeader.biBitCount := 24; LBitInfo.bmiHeader.biCompression := BI_RGB; LBitInfo.bmiHeader.biSizeImage := WidthBytes(Ipl.width * 8) * Ipl.height; LBitInfo.bmiHeader.biXPelsPerMeter := 0; LBitInfo.bmiHeader.biYPelsPerMeter := 0; LBitInfo.bmiHeader.biClrUsed := 0; LBitInfo.bmiHeader.biClrImportant := 0; Result := CreateDIBSection(0, LBitInfo, DIB_RGB_COLORS, Pointer(LApp), 0, 0); if(Ipl.nChannels = 1) then for i := 0 to Ipl.height - 1 do for j := 0 to Ipl.width - 1 do begin LApp[Ipl.width*3*(Ipl.height-i-1)+j*3] := Ipl.imageData[Ipl.width*(i)+j]; LApp[Ipl.width*3*(Ipl.height-i-1)+j*3+1] := Ipl.imageData[Ipl.width*(i)+j]; LApp[Ipl.width*3*(Ipl.height-i-1)+j*3+2] := Ipl.imageData[Ipl.width*(i)+j]; end; if Ipl.nChannels = 3 then for i := 0 to Ipl.height - 1 do Move(Pointer(Ipl.imageData+Ipl.width*3*i)^, Pointer(LApp+Ipl.width*3*(Ipl.height-i-1))^, Ipl.width*3); end; procedure APIDrawIpl(X, Y: Integer; Handle: THandle; Ipl: PIplImage); var LMemDC, LHDC: HDC; LBitmap: HBITMAP; begin LHDC := GetDC(Handle); LMemDC := CreateCompatibleDC(LHDC); LBitmap := CreateRGBBitmap(Ipl); SelectObject(LMemDC, LBitmap); BitBlt(LHDC, X, Y, Ipl.width, Ipl.height, LMemDC, 0, 0, SRCCOPY); DeleteObject(LBitmap); DeleteDC(LMemDC); DeleteDC(LHDC); end;
×