Ada Robert Bond, seorang programmer yang berbasis di California berusia 65 tahun. Dan dia punya istri berkebun yang sangat mencintainya. Tapi ini California, tidak ada pagar dua meter dengan sistem perlindungan kucing. Kucing tetangga berjalan di atas halaman dan omong kosong!

Masalahnya harus dipecahkan. Bagaimana Robert memutuskannya? Dia membeli besi ke komputernya, menghubungkan kamera pengintai luar ruangan yang melihat ke halaman, dan kemudian melakukan hal yang agak tidak biasa, dia mengunduh perangkat lunak Open Source gratis yang tersedia - jaringan saraf, dan mulai melatihnya mengenali kucing di gambar kamera. Dan tugas di awal tampaknya sepele, karena jika Anda mempelajari sesuatu dan itu mudah, itu untuk kucing, karena kucing dikotori dengan Internet, ada puluhan juta dari mereka. Jika semuanya begitu sederhana, tetapi keadaannya lebih buruk, dalam kehidupan nyata kucing kebanyakan omong kosong di malam hari. Praktis tidak ada gambar kucing malam yang kencing di halaman internet. Dan beberapa kucing bahkan berhasil minum dari sistem irigasi selama bekerja, tetapi masih membuangnya.

Di bawah ini kami memberikan deskripsi proyek dari penulis, versi bahasa Inggris dapat
ditemukan di sini .
Proyek ini dimotivasi oleh dua hal: keinginan untuk belajar lebih banyak tentang perangkat lunak jaringan saraf dan keinginan untuk mendorong kucing tetangga untuk nongkrong di tempat lain selain halaman saya.
Proyek ini hanya mencakup tiga komponen perangkat keras: papan
Nvidia Jetson TX1 , kamera IP
Foscam FI9800P dan
Partikel Photon yang terhubung ke
relai . Kamera dipasang di sisi rumah di sisi halaman. Dia menghubungi titik akses WI-FI, diikuti oleh Jetson. Foton Partikel dan relay dipasang di unit kontrol sistem irigasi saya dan terhubung ke titik akses WI-FI di dapur.
Dalam prosesnya, kamera dikonfigurasikan untuk memantau perubahan di halaman. Ketika sesuatu berubah, kamera mentransmisikan 7 gambar ke Jetson, satu per detik. Layanan yang diberdayakan Jetson melacak gambar yang masuk, mentransfernya ke jaringan saraf pelatihan mendalam Caffe. Jika jaringan mendeteksi kucing, Jetson memberi sinyal ke server Particle Photon di cloud, yang mengirim pesan ke Photon. Foton merespons dengan menyalakan alat penyiram selama dua menit.
Di sini kucing masuk ke bingkai, menyalakan kamera:

Setelah beberapa detik, kucing masuk ke tengah halaman, menyalakan kamera lagi dan mengaktifkan alat penyiram sistem irigasi:

Pengaturan kamera
Tidak ada yang aneh tentang memasang kamera. Satu-satunya koneksi permanen adalah koneksi kabel 12 volt yang melewati lubang kecil di bawah langkan. Saya memasang kamera pada sebuah kotak kayu untuk menangkap halaman depan dengan sebuah halaman. Banyak kabel yang terhubung ke kamera, yang saya sembunyikan di dalam kotak.
Ikuti arahan Foscam untuk mengaitkannya dengan AP Jetson (lihat di bawah). Dalam pengaturan saya, Jetson di 10.42.0.1. Saya menetapkan alamat IP tetap 10.42.0.11 ke kamera sehingga mudah ditemukan. Setelah ini selesai, hubungkan laptop Windows ke kamera dan konfigurasikan parameter "Peringatan" untuk mengaktifkan perubahan. Siapkan unggahan 7 gambar melalui FTP dengan peringatan (peringatan). Kemudian berikan ID pengguna dan kata sandi di Jetson. Kamera saya mengirim 640x360 gambar melalui FTP ke direktori rumah mereka.
Di bawah ini Anda dapat melihat parameter yang dipilih untuk konfigurasi kamera.

Menyiapkan Foton Partikel
Foton mudah diatur. Saya memasukkannya ke unit kontrol irigasi.

Kotak hitam di sebelah kiri dengan LED biru adalah konverter 24 V AC (5 V) hingga 5 V DC yang dibeli di eBay. Anda dapat melihat relai putih di papan relai dan konektor biru di bagian depan. Foton itu sendiri ada di sebelah kanan. Keduanya terpaku pada selembar karton untuk menyatukannya.
Output 5 V dari konverter terhubung ke konektor Partikel Photon VIN. Papan relay sebagian besar analog: ia memiliki transistor NPN kolektor terbuka dengan input 3,3 V nominal ke basis transistor dan relay 3 V. Pengontrol foton tidak dapat memasok arus yang cukup untuk mengontrol relai, jadi saya menghubungkan kolektor input transistor ke 5 V melalui resistor dengan resistansi 15 Ohm dan daya 1/2 W, membatasi arus. Kontak relai terhubung ke kipas air secara paralel dengan sirkuit kontrol normal.
Berikut adalah diagram koneksi:
24VAC converter 24VAC <---> Kotak kontrol 24VAC OUT
Konverter 24VAC + 5V <---> Foton VIN, resistor ke papan relay + 3.3V
24VAC converter GND <---> Foton GND, Relay GND
Foton D0 <---> Input sinyal papan estafet
Relay COM <---> Kotak kontrol 24VAC OUT
Relay NO <---> Katup air halaman depan
Instal Jetson
Satu-satunya komponen perangkat keras yang ditambahkan ke Jetson adalah SSD SATA dan hub USB Belkin kecil. Hub memiliki dua tombol nirkabel yang menghubungkan keyboard dan mouse.
SSD muncul tanpa masalah. Saya memformat ulang ke EXT4 dan memasangnya sebagai / caffe. Saya sangat merekomendasikan menghapus semua kode proyek Anda, git repositori, dan data aplikasi dari kartu SD internal Jetson Anda, karena seringkali paling mudah untuk menghapus sistem Anda saat meningkatkan Jetpack.

Menyiapkan titik akses nirkabel cukup sederhana (benar!) Jika Anda mengikuti
panduan ini . Cukup gunakan menu Ubuntu seperti yang ditunjukkan, dan pastikan untuk menambahkan
parameter konfigurasi ini .
Saya menginstal vsftpd sebagai
server FTP . Konfigurasi sebagian besar stok. Saya tidak mengaktifkan FTP anonim. Saya memberi kamera nama pengguna dan kata sandi yang tidak lagi digunakan untuk apa pun.
Saya memasang Caffe menggunakan resep
JetsonHacks . Saya percaya bahwa tidak ada lagi masalah LMDB_MAP_SIZE dalam rilis saat ini, jadi cobalah membangunnya sebelum Anda membuat perubahan. Anda harus dapat menjalankan demo tes dan timing yang disebutkan dalam skrip shell JetsonHacks. Saat ini saya menggunakan Cuda 7.0, tetapi saya tidak yakin apakah ini signifikan pada tahap ini. Gunakan CDNN, ini menghemat sejumlah besar memori dalam sistem kecil ini. Setelah dibangun, tambahkan direktori bangun ke variabel PATH sehingga skrip dapat menemukan Caffe. Juga tambahkan direktori Caffe Python lib ke PYTHONPATH Anda.
~ $ echo $PATH /home/rgb/bin:/caffe/drive_rc/src:/caffe/drive_rc/std_caffe/caffe/build/tools:/usr/local/cuda-7.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ~ $ echo $PYTHONPATH /caffe/drive_rc/std_caffe/caffe/python: ~ $ echo $LD_LIBRARY_PATH /usr/local/cuda-7.0/lib:/usr/local/lib
Saya menggunakan opsi Fully Convolutional Network for Semantic Segmentation (FCN). Lihat
Kebun Binatang Berkeley Model ,
github .
Saya mencoba beberapa jaringan lain dan akhirnya memilih FCN. Baca lebih lanjut tentang proses seleksi di artikel selanjutnya. Fcn32s berfungsi dengan baik pada TX1 - membutuhkan sedikit lebih dari 1 GB memori, berjalan dalam waktu sekitar 10 detik dan mensegmentasi gambar 640x360 dalam waktu sekitar sepertiga detik. Ada sekumpulan skrip yang bagus dalam repositori github saat ini, dan pengaturannya tidak tergantung pada ukuran gambar - ini mengubah ukuran jaringan agar sesuai dengan apa yang Anda masukkan ke dalamnya.
Untuk mencobanya, Anda perlu menggunakan model Caffe yang sudah terlatih. Butuh beberapa menit: ukuran file fcn32s-heavy-pascal.caffemodel melebihi 500 MB.
$ cd voc-fcn32s $ wget `cat caffemodel-url`
Edit infer.py dengan mengubah jalur dalam perintah Image.open () ke .jpg yang sesuai. Ubah baris "net" sehingga menunjuk ke model yang baru saja dimuat:
-net = caffe.Net('fcn8s/deploy.prototxt', 'fcn8s/fcn8s-heavy-40k.caffemodel', caffe.TEST) +net = caffe.Net('voc-fcn32s/deploy.prototxt', 'voc-fcn32s/fcn32s-heavy-pascal.caffemodel', caffe.TEST)
Anda akan memerlukan file voc-fcn32s / deploy.prototxt. Itu mudah dihasilkan dari voc-fcn32s / train.prototxt. Lihatlah perubahan antara voc-fcn8s / train.prototxt dan voc-fcn8s / deploy.prototxt untuk melihat bagaimana melakukan ini, atau Anda bisa mendapatkannya dari repositori
chasing-cats saya di github. Anda sekarang seharusnya bisa berlari.
$ python infer.py
Repositori saya mencakup beberapa versi infer.py, beberapa utilitas Python yang mengetahui tentang file yang disegmentasi, kode Photon dan skrip manajemen dan skrip operasi yang saya gunakan untuk memulai dan memantau sistem. Baca lebih lanjut tentang perangkat lunak di bawah ini.
Temukan jaringan
Jaringan saraf untuk pengenalan gambar biasanya dilatih untuk mengenali satu set objek. Misalkan kita memberikan setiap objek indeks dari satu ke n. Jaringan klasifikasi menjawab pertanyaan "Benda apa dalam gambar ini?" mengembalikan array dari nol ke n-1, di mana setiap entri array memiliki nilai dari nol hingga satu. Nol berarti bahwa objek tidak ada dalam gambar. Nilai bukan nol berarti bahwa ia dapat berada di sana dengan probabilitas yang meningkat ketika nilai mendekati kesatuan. Inilah kucing dan manusia dalam susunan 5 elemen:

Jaringan yang disegmentasi menyegmentasikan piksel gambar dari area yang ditempati oleh objek dari daftar kami. Dia menjawab pertanyaan dengan mengembalikan array dengan catatan yang sesuai dengan setiap piksel dalam gambar. Setiap record memiliki nilai nol jika itu adalah pixel latar belakang, atau nilai dari satu ke n untuk n objek yang berbeda yang dapat dikenali. Contoh fiksi ini mungkin kaki seseorang:

Proyek ini adalah bagian dari proyek yang lebih besar yang bertujuan mengendalikan mobil yang dikendalikan radio menggunakan komputer. Idenya adalah menggunakan jaringan saraf untuk menentukan posisi (posisi tiga dimensi global dan orientasi) mobil untuk mengirimkan perintah navigasi ke sana. Kamera diperbaiki, dan halaman sebagian besar datar. Saya dapat menggunakan pelatuk sedikit untuk mengubah posisi 3d sehingga jaringan saraf dapat menemukan piksel layar dan orientasi. Peran kucing dalam semua ini adalah "tujuan yang dimaksudkan".
Saya mulai dengan memikirkan terutama tentang mobil itu, karena saya tidak tahu bagaimana hasilnya, dengan anggapan bahwa mengenali kucing dengan jaringan yang sudah dilatih sebelumnya akan sepele. Setelah banyak bekerja, yang tidak akan saya jelaskan secara rinci dalam artikel ini, saya memutuskan bahwa Anda dapat menentukan orientasi mobil dengan tingkat keandalan yang cukup tinggi. Berikut ini adalah bidikan latihan pada sudut 292,5 derajat:

Sebagian besar pekerjaan ini telah dilakukan dengan jaringan klasifikasi, model Caffe bvlc_reference_caffenet. Oleh karena itu, saya memutuskan untuk membiarkan tugas jaringan segmentasi menentukan posisi mesin di layar.
Jaringan pertama yang saya gunakan adalah Faster R-CNN [1]. Ini mengembalikan kotak pembatas untuk objek dalam gambar, bukan piksel. Tetapi jaringan pada Jetson terlalu lambat untuk aplikasi ini. Gagasan kotak pembatas sangat menarik, jadi saya juga melihat jaringan yang berorientasi pada mengemudi [2]. Dia juga terlalu lambat. FCN [3] adalah jaringan segmentasi tercepat yang saya coba. "FCN" berarti "Fully Convolutional Network", sebuah jaringan convolutional penuh, karena tidak lagi memerlukan ukuran gambar tertentu untuk masuk dan hanya terdiri dari convolutions / pooling. Beralih hanya ke lapisan convolutional mengarah ke akselerasi yang signifikan, mengklasifikasikan gambar saya sekitar 1/3 detik di Jetson. FCN mencakup serangkaian skrip Python yang bagus untuk pelatihan dan penerapan yang mudah. Skrip python mengubah ukuran jaringan agar sesuai dengan ukuran gambar yang masuk, sehingga memudahkan untuk memproses gambar utama. Saya punya seorang pemenang!
Rilis FCN GitHub memiliki beberapa opsi. Pertama saya mencoba voc-fcn32s. Itu bekerja dengan sempurna. Voc-fcn32s telah dilatih sebelumnya dalam 20 kelas voc standar. Karena ini terlalu sederhana, saya mencoba pascalcontext-fcn32s. Dia dilatih di 59 kelas, termasuk rumput dan pohon, jadi saya pikir itu harus lebih baik. Tetapi ternyata tidak selalu - gambar output memiliki lebih banyak set piksel, dan segmentasi kucing dan orang-orang yang ditumpangkan pada rumput dan semak-semak tidak begitu akurat. Segmentasi dari siftflow bahkan lebih kompleks, jadi saya segera kembali ke opsi voc.
Memilih jaringan voc masih berarti tiga hal yang perlu dipertimbangkan: voc-fcn32s, voc-fcn16s dan voc-fcn8s. Mereka berbeda dalam "langkah" segmentasi output. Langkah 32 adalah langkah utama jaringan: gambar 640x360 dikurangi menjadi jaringan 20x11 pada saat lapisan convolutional selesai. Segmentasi kasar ini kemudian "deconvolves" kembali ke 640x360, seperti yang dijelaskan dalam [3]. Langkah 16 dan langkah 8 dicapai dengan menambahkan lebih banyak logika ke jaringan untuk segmentasi yang lebih baik. Saya bahkan tidak mencoba - segmentasi 32-segmen adalah yang pertama saya coba dan muncul, dan saya bertahan karena segmentasi terlihat cukup baik untuk proyek ini, dan pelatihan, seperti dijelaskan, terlihat lebih rumit untuk dua jaringan lainnya.
Pelatihan
Hal pertama yang saya perhatikan ketika saya menyalakan dan memulai sistem adalah hanya sekitar 30% kucing yang dikenali oleh jaringan. Saya menemukan dua alasan untuk ini. Pertama, kucing sering datang pada malam hari, jadi kamera melihatnya dalam cahaya inframerah. Ini dapat dengan mudah diperbaiki - cukup tambahkan beberapa gambar inframerah tersegmentasi kucing untuk pelatihan. Masalah kedua yang saya temukan setelah meninjau beberapa ratus foto kucing dari kit pelatihan adalah bahwa banyak dari foto-foto itu termasuk jenis βlihat kucing imutkuβ. Ini adalah gambar depan seekor kucing setinggi mata kucing. Entah kucing itu berbaring telentang atau berbaring di pangkuan pemiliknya. Mereka tidak terlihat seperti kucing berkeliaran di sekitar halaman saya. Sekali lagi, ini dapat dengan mudah diperbaiki dengan beberapa gambar siang hari tersegmentasi.

Bagaimana cara mengelompokkan objek dalam gambar pelatihan? Pendekatan saya adalah mengurangi gambar latar belakang dan kemudian memproses piksel latar depan untuk menunjukkan untuk melacak objek. Dalam praktiknya, ini bekerja cukup baik, karena dalam arsip saya dari kamera biasanya ada gambar yang diambil beberapa detik sebelum gambar tersegmentasi. Tetapi ada artefak yang perlu dibersihkan, dan segmentasi sering perlu klarifikasi, jadi saya menulis utilitas persiapan kasar untuk mengedit segmen gambar, src / extract_fg.cpp. Lihat catatan di bagian atas file sumber untuk digunakan. Agak canggung dan memiliki sedikit kesalahan verifikasi dan membutuhkan penyempurnaan, tetapi berfungsi cukup baik untuk tugas tersebut.
Sekarang kita memiliki beberapa gambar untuk pelatihan, mari kita lihat bagaimana melakukannya. Saya mengkloning voc-fcn32s ke direktori rgb_voc_fcn32s. Semua nama file akan merujuk ke direktori ini sampai akhir pelajaran ini.
$ cp -r voc-fcn32s rgb_voc_fcn32s
Kode pada github saya, termasuk file pelatihan sampel dalam data / rgb_voc. Perubahan utama ditunjukkan di bawah ini.
Format File Pelatihan
Lapisan data terdistribusi mengharapkan gambar-gambar kode-keras dan direktori segmentasi. File pelatihan memiliki satu baris per file; kemudian lapisan data mendapatkan nama-nama file gambar dan segmen, menambahkan nama-nama direktori hard-coded. Ini tidak berhasil untuk saya, karena saya memiliki beberapa kelas data pelatihan. Data pelatihan saya memiliki satu set garis, yang masing-masing berisi gambar dan segmentasi untuk gambar itu.
$ head data/rgb_voc/train.txt /caffe/drive_rc/images/negs/MDAlarm_20160620-083644.jpg /caffe/drive_rc/images/empty_seg.png /caffe/drive_rc/images/yardp.fg/0128.jpg /caffe/drive_rc/images/yardp.seg/0128.png /caffe/drive_rc/images/negs/MDAlarm_20160619-174354.jpg /caffe/drive_rc/images/empty_seg.png /caffe/drive_rc/images/yardp.fg/0025.jpg /caffe/drive_rc/images/yardp.seg/0025.png /caffe/drive_rc/images/yardp.fg/0074.jpg /caffe/drive_rc/images/yardp.seg/0074.png /caffe/drive_rc/images/yard.fg/0048.jpg /caffe/drive_rc/images/yard.seg/0048.png /caffe/drive_rc/images/yard.fg/0226.jpg /caffe/drive_rc/images/yard.seg/0226.png
Saya mengganti voc_layers.py dengan rgb_voc_layers.py, yang memahami skema baru:
--- voc_layers.py 2016-05-20 10:04:35.426326765 -0700 +++ rgb_voc_layers.py 2016-05-31 08:59:29.680669202 -0700 ... - # load indices for images and labels - split_f = '{}/ImageSets/Segmentation/{}.txt'.format(self.voc_dir, - self.split) - self.indices = open(split_f, 'r').read().splitlines() + # load lines for images and labels + self.lines = open(self.input_file, 'r').read().splitlines()
Dan memodifikasi train.prototxt untuk menggunakan kode rgb_voc_layers saya. Perhatikan bahwa argumennya juga berbeda.
--- voc-fcn32s/train.prototxt 2016-05-03 09:32:05.276438269 -0700 +++ rgb_voc_fcn32s/train.prototxt 2016-05-27 15:47:36.496258195 -0700 @@ -4,9 +4,9 @@ top: "data" top: "label" python_param { - module: "layers" - layer: "SBDDSegDataLayer" - param_str: "{\'sbdd_dir\': \'../../data/sbdd/dataset\', \'seed\': 1337, \'split\': \'train\', \'mean\': (104.00699, 116.66877, 122.67892)}" + module: "rgb_voc_layers" + layer: "rgbDataLayer" + param_str: "{\'input_file\': \'data/rgb_voc/train.txt\', \'seed\': 1337, \'split\': \'train\', \'mean\': (104.00699, 1
Perubahan yang hampir sama di val.prototxt:
--- voc-fcn32s/val.prototxt 2016-05-03 09:32:05.276438269 -0700 +++ rgb_voc_fcn32s/val.prototxt 2016-05-27 15:47:44.092258203 -0700 @@ -4,9 +4,9 @@ top: "data" top: "label" python_param { - module: "layers" - layer: "VOCSegDataLayer" - param_str: "{\'voc_dir\': \'../../data/pascal/VOC2011\', \'seed\': 1337, \'split\': \'seg11valid\', \'mean\': (104.00699, 116.66877, 122.67892)}" + module: "rgb_voc_layers" + layer: "rgbDataLayer" + param_str: "{\'input_file\': \'data/rgb_voc/test.txt\', \'seed\': 1337, \'split\': \'seg11valid\', \'mean\': (104.00699, 116.66877, 122.67892)}"
Solver.py
Jalankan resol.py untuk memulai latihan Anda:
$ python rgb_voc_fcn32s / solve.py
Ini memodifikasi beberapa mekanisme normal Caffe. Secara khusus, jumlah iterasi diatur di bagian bawah file. Dalam pengaturan khusus ini, iterasi adalah satu gambar karena ukuran jaringan berubah untuk setiap gambar dan gambar dilewati satu per satu.
Salah satu hal hebat tentang bekerja dengan Nvidia adalah peralatan yang sangat bagus tersedia. Saya memiliki Titan yang dibangun menjadi workstation, dan manajemen saya tidak keberatan membiarkan saya menggunakannya untuk sesuatu yang meragukan seperti proyek ini. Latihan terakhir saya adalah 4.000 iterasi, yang memakan waktu lebih dari dua jam di Titan.
Saya belajar beberapa hal
- Sejumlah gambar (kurang dari 50) sudah cukup untuk melatih jaringan untuk mengenali penyusup malam.
- Bidikan malam mengajarkan jaringan untuk berpikir bahwa bayangan di jalan setapak adalah kucing.
- Pemotretan negatif, yaitu, gambar tanpa piksel tersegmentasi, membantu menangani masalah bayangan.
- Sangat mudah untuk melatih ulang jaringan menggunakan kamera stasioner sehingga segala sesuatu yang berbeda diklasifikasikan sebagai sesuatu yang acak.
- Kucing dan manusia, ditumpangkan pada latar belakang acak, membantu dengan masalah yang timbul dari overtraining.
Seperti yang Anda lihat, prosesnya berulang.
Rekomendasi
[1] Lebih cepat R-CNN: Menuju Deteksi Objek Real-Time dengan Jaringan Proposal Wilayah Shaoqing Ren, Kaiming He, Ross Girshick, Jian Sun
abs / 1506.01497v3 .
[2] Evaluasi Empiris Pembelajaran Mendalam tentang Mengemudi Jalan Raya Brody Huval, Tao Wang, Sameep Tandon, Jeff Kiske, Will Song, Joel Pazhayampallil, Mykhaylo Andriluka, Pranav Rajpurkar, Toki Migimatsu, Royce Cheng-Yue, Fernando Cojuju, Fernando Mujica, Andrew Y. Ng
arXiv: 1504.01716v3 ,
github.com/brodyh/caffe.git .
[3] Jaringan Konvolusional Sepenuhnya untuk Segmentasi Semantik Jonathan Long, Evan Shelhamer, Trevor Darrell
arXiv: 1411.4038v2 ,
github.com/shelhamer/fcn.berkeleyvision.org.git .
Kesimpulan
Untuk mengajarkan jaringan saraf untuk mengenali kucing malam, perlu menambahkan data yang diperlukan, mengumpulkan mereka. Setelah itu, langkah terakhir diambil - sistem terhubung ke katup, yang memulai penyemprot. Idenya adalah bahwa begitu kucing memasuki halaman dan ingin beradaptasi, ia mulai disiram. Kucing itu kesedihan. Dengan demikian tugas diselesaikan, sang istri bahagia, dan semua keajaiban aneh ini adalah jaringan saraf yang mengajarkan untuk mengenali kucing, menemukan bahwa Internet tidak memiliki sumber gambar yang cukup untuk pelatihan dan yang telah mempelajari ini, menjadi satu-satunya jaringan saraf di dunia yang dapat mengenali kucing malam.
Perlu dicatat bahwa semua ini dilakukan oleh orang yang bukan seorang hyperprogrammer yang bekerja di Yandex atau Google seumur hidupnya dan dengan bantuan perangkat keras, cukup murah, ringkas dan sederhana.
Sedikit iklan :)
Terima kasih telah tinggal bersama kami. Apakah Anda suka artikel kami? Ingin melihat materi yang lebih menarik? Dukung kami dengan melakukan pemesanan atau merekomendasikannya kepada teman-teman Anda,
diskon 30% untuk pengguna Habr pada server entry-level analog unik yang kami ciptakan untuk Anda: Seluruh kebenaran tentang VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps mulai dari $ 20 atau cara membagi server? (opsi tersedia dengan RAID1 dan RAID10, hingga 24 core dan hingga 40GB DDR4).
Dell R730xd 2 kali lebih murah? Hanya kami yang memiliki
2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV dari $ 199 di Belanda! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - mulai dari $ 99! Baca tentang
Cara Membangun Infrastruktur Bldg. kelas menggunakan server Dell R730xd E5-2650 v4 seharga 9.000 euro untuk satu sen?