Comments 31
Ноам Шазир - так это тот чувак, которого Google за $2.7 млрд выкупил.
Не «его», а его стартап.
А вот есть программа про обнаружения лица знаменитости на фотографии
import os
import numpy as np
import cv2
import matplotlib.pyplot as plt
from keras.models import Sequential, load_model
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
# Функция загрузки данных
def load_data(dataset_folder, image_size=(128, 128)):
images = []
labels = []
celebrity_labels = []
celebrity_folder = os.path.join(dataset_folder, 'celebrities')
gender_folder = os.path.join(dataset_folder, 'gender')
labeled_folder = os.path.join(dataset_folder, 'labeled')
# Подпапки в labeled
raw_faces_folder = os.path.join(labeled_folder, 'raw_faces')
cropped_faces_folder = os.path.join(labeled_folder, 'cropped_faces')
# Загружаем фотографии знаменитостей
for label, celeb in enumerate(os.listdir(celebrity_folder)):
celeb_path = os.path.join(celebrity_folder, celeb)
if os.path.isdir(celeb_path):
celebrity_labels.append(celeb)
for img_file in os.listdir(celeb_path):
img_path = os.path.join(celeb_path, img_file)
img = cv2.imread(img_path)
if img is not None:
img_resized = cv2.resize(img, image_size)
images.append(img_resized)
labels.append(label)
# Загружаем фотографии по полу
gender_map = {'men': 0, 'women': 1}
for gender in os.listdir(gender_folder):
gender_path = os.path.join(gender_folder, gender)
if os.path.isdir(gender_path):
for img_file in os.listdir(gender_path):
img_path = os.path.join(gender_path, img_file)
img = cv2.imread(img_path)
if img is not None:
img_resized = cv2.resize(img, image_size)
images.append(img_resized)
labels.append(gender_map[gender])
# Загружаем фотографии лиц
for img_file in os.listdir(raw_faces_folder):
raw_img_path = os.path.join(raw_faces_folder, img_file)
cropped_img_path = os.path.join(cropped_faces_folder, img_file)
raw_img = cv2.imread(raw_img_path)
cropped_img = cv2.imread(cropped_img_path)
if raw_img is not None and cropped_img is not None:
raw_img_resized = cv2.resize(raw_img, image_size)
cropped_img_resized = cv2.resize(cropped_img, (160, 160))
images.append(raw_img_resized)
labels.append(cropped_img_resized)
return np.array(images), np.array(labels), celebrity_labels
# Функция создания модели
def build_model(input_shape):
model = Sequential([
Conv2D(32, (3, 3), activation='relu', input_shape=input_shape),
MaxPooling2D((2, 2)),
Conv2D(64, (3, 3), activation='relu'),
MaxPooling2D((2, 2)),
Flatten(),
Dense(128, activation='relu'),
Dropout(0.5),
Dense(4, activation='linear') # Выходные 4 координаты (x, y, w, h)
])
model.compile(optimizer='adam', loss='mean_squared_error', metrics=['mae'])
return model
# Функция тестирования модели
def test_model(model_path, test_dataset_folder, image_size=(128, 128)):
model = load_model(model_path)
test_images, test_labels, = loaddata(test_dataset_folder, image_size)
test_images = test_images / 255.0
test_labels = test_labels / 160.0
loss, mae = model.evaluate(test_images, test_labels)
print(f'Test Loss: {loss}, Test MAE: {mae}')
# Визуализация результатов
plt.figure()
plt.bar(['Loss', 'MAE'], [loss, mae])
plt.title('Результаты тестирования')
plt.show()
# Функция предсказания знаменитости и пола
def predict_face(model_path, image_path, image_size=(128, 128)):
model = load_model(model_path)
img = cv2.imread(image_path)
img_resized = cv2.resize(img, image_size) / 255.0
img_expanded = np.expand_dims(img_resized, axis=0)
prediction = model.predict(img_expanded)
x, y, w, h = prediction[0] * 160
face_cropped = img[int(y):int(y + h), int(x):int(x + w)]
face_cropped = cv2.resize(face_cropped, (160, 160))
plt.imshow(cv2.cvtColor(face_cropped, cv2.COLOR_BGR2RGB))
plt.title("Обрезанное лицо")
plt.show()
# Определение знаменитости и пола (заглушка)
print("Определенная знаменитость: ...")
print("Пол человека: ...")
# Главная функция
def main():
dataset_folder = r"C:\Users\mpdym\OneDrive\Рабочий стол\Face\Celebrity Faces Dataset" # Укажи путь к набору данных
test_dataset_folder = r"C:\Users\mpdym\OneDrive\Рабочий стол\Face\Test Dataset" # Укажи путь к тестовому набору
image_size = (128, 128)
# Загружаем обучающие данные
images, labels, = loaddata(dataset_folder, image_size)
# Нормализация
images = images / 255.0
labels = labels / 160.0 # Нормируем координаты вырезанных лиц
# Создание модели
input_shape = (image_size[0], image_size[1], 3)
model = build_model(input_shape)
# Обучение модели
history = model.fit(images, labels, epochs=10, batch_size=32, validation_split=0.2)
# Сохранение модели
model.save("face_cropper.h5")
# Тестирование модели
test_model("face_cropper.h5", test_dataset_folder, image_size)
# Пример предсказания на новой фотографии
predict_face("face_cropper.h5", "test_image.jpg", image_size)
if name == 'main':
main()
Носятся придурочные с высосанным из пальца "законом" как с писаной торбой.
Это всё, что вы вынесли из интервью с парой невероятно умных людей?
Невероятно умных людей, которые создали невероятно тупую Gemini?
Пошутить вам не удалось.
Дык какое там отличие то? С позиции случайного пользователя: чатгпт тоже не образец ума (самым платным не пользовался), дипсик как-то особенно бодро привирает (заметить бывает непросто, наверное как-то можно теплоту настраивать, но он "висит", пользовать долго и так не получается) и про ум в его случае говорить неудобно, qwen показался где-то на уровне гемини, клодом не пользовался, может он и самый умный. Опять-таки с точки зрения случайного пользователя, все чаты неплохо пишут рандомные тексты ни о чем, но для того, чтобы получить что-то осмысленное, нужен пользователь, который понимает что он хочет получить и неплохо знает ограничения нейронок (которых много). А если сравнивать по разным подмоделям, то гемини вроде есть и флеш, и про, и спортлото...
Одна из немногих статей про практические аспекты "как делают топовые нейросети". Нутром чую, что она полезна для тех, кто этим занимается или планирует заняться. Но заголовок про Мура вводит в заблуждение.
Засиделись на одном месте, закостенели, не развиваются... /s
Есть несколько очень важных моментов. Например,
Ноам Шазир: Ну, человек за жизнь видит около миллиарда токенов.
Джефф Дин: И при этом умеет делать массу крутых вещей.
Это говорит о том, что механическое скармливание нейросети гигабайтов информации, в несколько заходов (эпох) по кругу -- не самый эффективный метод обучения. А как правильно?
человек может прочитать целую главу книги, а затем попытаться ответить на вопросы в конце — и это уже совсем другой механизм обучения.
Например вот так. Обучаем модель на главе книги, задаём контрольные вопросы. Если ответы правильные -- идём к следующей главе. Есть неправильные -- повторяем неусвоенный материал, и по кругу.
В процессе можно задавать вопросы из предыдущих глав и контролировать запоминание.
И так можно организовать обучение в любой неизвестной модели области знаний: от нейрофизиологии до белорусского языка. По лучшим учебникам в каждой области, по главам, по вопросам. Уверен, это будет гораздо эффективнее тупого прогона бесконечного количества материалов из разных непроверенных источников. Ведь обучение аспиранта на случайно надёрганных в Интернете текстах или беседах в X не сделает его профессором в своей области.
Важно, что такое обучение тоже легко автоматизируется, если во время ответов на вопросы обучающая модель будет иметь доступ к учебнику, а обучаемая -- нет.
Ещё обратил внимание, как разительно отличается эта беседа от интервью с создателем DeepSeek. Хотя тут от журналиста многое зависит: какие вопросы, такие и ответы.
В нашем мозгу от рождения заложены базовые инстинкты - дышать, есть, спать, замереть при опасности, и наоборот реветь если ребёнок проголодался, звать маму. Но это не требуется для постижения наук. Всёму остальному, начиная от умения говорить, читать, считать, логически думать - мы обучаемся в процессе жизни.
В процессе обучения у реального мозга изменяются не только веса, но и сами связи между нейронами, а это означает, что при обучении перестраивается сама архитектура сети.
у человека нет инстинктов, а то что вы называете, - это рефлексы
Можно заменить в сообщении "инстинкты" на "рефлексы", чтобы избежать спорной концепции.
Ну, человек за жизнь видит около миллиарда токенов.
Вот, кстати, вообше не верю. Они за токены буквы посчитали?
А теперь пусть посчитают пиксели в лице палочек и колбочек в сетчатке. Которые могут различать изменения по несколько десятков в секунду. Даже если учесть размытие того, что не в фокусе, отброс того, что мозг считает не важным, и запаздывание реакции и прочее, то всё равно миллиард должен набраться на несколько минут. Но это то, что достигает сознания. Полный объём информации со зрения может быть по миллиарду токенов за долю секунды. Просто мозг их фильтрует и до сознания доходит доля процента.
Мы так снова ударимся в философию, неинтересно эти круги наматывать. Могу лишь сказать: слепой от рождения либо глухой от рождения человек обладает интеллектом, может учится и постигать разные науки и профессии слушая/читая книги, обучаясь с учителем. Зрение и слух не являются определяющими каналами для развития интеллекта, хотя и важные.
Человек за жизнь видит намного больше чем миллиард токенов. Картинки, звуки и вообще все сигналы от всех нервов тоже можно токенизировать. Токены даже в ллм это не только слова и буквы.
Синтез ещё. «Если курдюмка делает их одного бокрика восемь крокозябликов, а петуська из трёх крокозябликов делает два мардыга, то сколько мардыгов можно получить, имея шесть бокриков?» (И чтобы без подсказок!!!)
25 лет в Google: интервью с Ноамом Шазиром и Джеффом Дином, разработчиками Gemini